|
CloudArcade/cloudarcade/cloudarcade/.htaccess
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin.php
|
32
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/admin-functions.php
|
452
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-fetch.php
|
211
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-json.php
|
35
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-remote.php
|
123
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame-upload.php
|
124
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/addgame.php
|
68
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/categories-edit.php
|
97
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/categories-list.php
|
111
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/categories.php
|
45
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/collections.php
|
98
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/dashboard.php
|
333
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist-edit.php
|
151
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist-list.php
|
292
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/gamelist.php
|
17
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/index.php
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/layout.php
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/menus.php
|
210
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/pages-edit.php
|
90
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/pages.php
|
200
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/plugin.php
|
191
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/settings.php
|
352
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/theme-options.php
|
19
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/themes.php
|
618
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/update.php
|
98
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/core/widgets.php
|
339
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/dashboard.php
|
256
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/includes/ajax-actions.php
|
399
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/includes/index.php
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/index.php
|
8
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/request.php
|
1164
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/admin.css
|
916
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/api.css
|
137
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Black.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-BlackItalic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Bold.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-BoldItalic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraBold.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraBoldItalic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraLight.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ExtraLightItalic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Italic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Light.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-LightItalic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Medium.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-MediumItalic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Regular.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-SemiBold.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-SemiBoldItalic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-Thin.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/fonts/Poppins-ThinItalic.ttf
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/jquery.nestable.css
|
103
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/style/menus.css
|
211
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/admin/upload.php
|
184
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/classes/Auth.php
|
106
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/classes/Category.php
|
387
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/classes/Collection.php
|
175
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/classes/Game.php
|
890
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/classes/Page.php
|
196
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/classes/User.php
|
316
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/classes/Widget.php
|
96
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/classes/index.php
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/config.php
|
26
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/connect-sample.php
|
5
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/404.php
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/archive.php
|
36
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/functions.php
|
219
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/game.php
|
123
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/home.php
|
56
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/404.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/facebook.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-0.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-1.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-2.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-3.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-4.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/star-5.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder1.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder2.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/thumb-placeholder3.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/images/twitter.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/custom.php
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/footer.php
|
66
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/grid-masonry.php
|
22
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/grid.php
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/includes/header.php
|
57
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/info.json
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/bootstrap.min.js
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/custom.js
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/jquery-3.3.1.min.js
|
2
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/jquery-3.6.2.min.js
|
2
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/lazysizes.min.js
|
3
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/js/script.js
|
325
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/page.php
|
17
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/navigation-categories.php
|
5
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/navigation-top.php
|
29
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/parts/sidebar.php
|
3
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/post-list.php
|
65
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/post.php
|
20
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/search.php
|
30
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/bootstrap.min.css
|
6
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/custom.css
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/jquery-comments.css
|
781
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/style.css
|
809
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/style/user.css
|
170
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/tag.php
|
30
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/dark-grid/thumbnail.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/404.php
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/archive.php
|
36
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/functions.php
|
222
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/game.php
|
123
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/home.php
|
56
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/404.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/facebook.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-0.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-1.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-2.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-3.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-4.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/star-5.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder1.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder2.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/thumb-placeholder3.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/images/twitter.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/custom.php
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/footer.php
|
52
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/grid.php
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/includes/header.php
|
55
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/info.json
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/bootstrap.min.js
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/custom.js
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/jquery-3.3.1.min.js
|
2
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/jquery-3.6.2.min.js
|
2
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/lazysizes.min.js
|
3
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/js/script.js
|
326
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/page.php
|
17
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/navigation-categories.php
|
5
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/navigation-top.php
|
29
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/parts/sidebar.php
|
3
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/post-list.php
|
65
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/post.php
|
20
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/search.php
|
30
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/bootstrap.min.css
|
6
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/custom.css
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/jquery-comments.css
|
794
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/style.css
|
773
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/style/user.css
|
169
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/tag.php
|
30
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/default/thumbnail.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/content/themes/theme-functions.php
|
889
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/db/settings.json
|
306
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/db/tables.sql
|
295
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/favicon.ico
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ad-300.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ad-728.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/1.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/10.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/11.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/12.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/13.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/14.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/15.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/16.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/17.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/18.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/19.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/2.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/20.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/3.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/4.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/5.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/6.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/7.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/8.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/avatar/default/9.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/cloudarcade-logo.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/default_profile.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/login-logo.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/logo-horizontal.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/logo-vertical.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/post-no-thumb.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-1.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-2.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-3.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-4.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-5.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-6.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-7.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-8.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/ranks/level-9.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/images/theme-no-thumb.png
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/api.php
|
264
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/banned-username.json
|
1
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/banned-words-comment.json
|
1
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/banned-words.json
|
1
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/captcha.php
|
31
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/comment.php
|
175
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/commons.php
|
1205
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/cron.php
|
414
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/fetch.php
|
47
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/game_list.php
|
81
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/index.php
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/load-class.php
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/load-settings.php
|
115
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-404.php
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-archive.php
|
5
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-category.php
|
85
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-full.php
|
76
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-game.php
|
52
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-homepage.php
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-login.php
|
248
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-page.php
|
38
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-post.php
|
97
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-register.php
|
215
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-search.php
|
39
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-splash.php
|
140
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-tag.php
|
85
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-user-edit.php
|
162
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-user-profile.php
|
200
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/page-user.php
|
67
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/plugin.php
|
93
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/rank.json
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/sessions.php
|
33
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/statistics.php
|
474
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/sub-folder.php
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/user.php
|
230
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/version.php
|
5
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/vote.php
|
76
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/includes/widgets.php
|
197
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/index.php
|
205
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/init.php
|
28
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/install.php
|
179
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/ads.js
|
487
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/api.js
|
384
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/chart/Chart.min.js
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/chart/stats.js
|
92
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/chart/utils.js
|
147
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/comment-system.js
|
329
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/jquery-3.6.2.min.js
|
2
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/jquery-comments.min.js
|
90
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/jquery-ui.min.js
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/jquery.nestable.js
|
1
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/menu.js
|
101
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/script.js
|
760
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/js/stats.js
|
984
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/site-settings.php
|
17
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/sitemap.php
|
218
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.auto.php
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.autoload-legacy.php
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.autoload.php
|
25
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.composer.php
|
4
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.func.php
|
25
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.includes.php
|
235
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.kses.php
|
30
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.path.php
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.php
|
297
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.safe-includes.php
|
229
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Arborize.php
|
71
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrCollections.php
|
148
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef.php
|
144
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS.php
|
136
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/AlphaValue.php
|
34
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Background.php
|
113
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php
|
157
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Border.php
|
56
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Color.php
|
161
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Composite.php
|
48
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php
|
44
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php
|
77
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Font.php
|
176
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/FontFamily.php
|
219
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Ident.php
|
32
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php
|
56
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Length.php
|
77
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/ListStyle.php
|
112
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Multiple.php
|
71
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Number.php
|
90
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Percentage.php
|
54
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/TextDecoration.php
|
46
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/URI.php
|
77
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Clone.php
|
44
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Enum.php
|
73
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Bool.php
|
48
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Class.php
|
48
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Color.php
|
51
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/ContentEditable.php
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/FrameTarget.php
|
38
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/ID.php
|
113
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Length.php
|
56
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/LinkTypes.php
|
72
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/MultiLength.php
|
60
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php
|
70
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Pixels.php
|
76
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Integer.php
|
91
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Lang.php
|
86
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Switch.php
|
53
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Text.php
|
21
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI.php
|
111
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Email.php
|
20
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php
|
29
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Host.php
|
142
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/IPv4.php
|
45
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/IPv6.php
|
89
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform.php
|
60
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Background.php
|
28
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BdoDir.php
|
27
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BgColor.php
|
28
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BoolToCSS.php
|
47
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Border.php
|
26
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php
|
68
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ImgRequired.php
|
47
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ImgSpace.php
|
61
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Input.php
|
56
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Lang.php
|
31
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Length.php
|
45
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Name.php
|
33
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/NameSync.php
|
46
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Nofollow.php
|
52
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeEmbed.php
|
25
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeObject.php
|
28
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeParam.php
|
84
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ScriptRequired.php
|
23
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetBlank.php
|
45
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetNoopener.php
|
37
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetNoreferrer.php
|
37
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Textarea.php
|
27
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTypes.php
|
97
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrValidator.php
|
178
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Bootstrap.php
|
124
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/CSSDefinition.php
|
549
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef.php
|
52
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Chameleon.php
|
67
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Custom.php
|
102
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Empty.php
|
38
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/List.php
|
94
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Optional.php
|
45
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Required.php
|
118
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/StrictBlockquote.php
|
110
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Table.php
|
224
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Config.php
|
920
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema.php
|
176
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php
|
48
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php
|
144
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Exception.php
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange.php
|
47
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange/Directive.php
|
89
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange/Id.php
|
58
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/InterchangeBuilder.php
|
226
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Validator.php
|
248
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/ValidatorAtom.php
|
130
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema.ser
|
1
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedClasses.txt
|
8
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedFrameTargets.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRel.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRev.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ClassUseCDATA.txt
|
19
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultImageAlt.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImage.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImageAlt.txt
|
8
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultTextDir.txt
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.EnableID.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ForbiddenClasses.txt
|
8
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ID.HTML5.txt
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklist.txt
|
5
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklistRegexp.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefix.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefixLocal.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.AutoParagraph.txt
|
31
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.Predicate.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt
|
15
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt
|
46
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowDuplicates.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt
|
8
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt
|
18
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt
|
18
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyRemoveScript.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowParseManyTags.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt
|
160
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt
|
17
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt
|
15
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt
|
19
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.Language.txt
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.LegacyEntityDecoder.txt
|
36
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt
|
34
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt
|
29
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt
|
74
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt
|
25
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt
|
19
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt
|
15
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt
|
23
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt
|
20
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt
|
18
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt
|
23
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt
|
33
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt
|
21
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt
|
20
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Forms.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt
|
8
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoopener.txt
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoreferrer.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt
|
8
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt
|
24
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt
|
8
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt
|
15
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt
|
25
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt
|
18
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Base.txt
|
17
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt
|
15
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt
|
14
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt
|
15
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Host.txt
|
19
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt
|
13
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt
|
83
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt
|
17
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt
|
30
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt
|
9
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt
|
22
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/info.ini
|
3
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ContentSets.php
|
170
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Context.php
|
95
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Definition.php
|
55
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache.php
|
129
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator.php
|
112
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php
|
78
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Memory.php
|
85
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Template.php.in
|
82
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Null.php
|
76
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer.php
|
311
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/CSS/4.13.0,4114918a13a428a8482a8a449792a5a8747582b5,1.ser
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/HTML/4.13.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/HTML/4.15.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/README
|
3
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/URI/4.13.0,3478238e680361cd87bf880f5b3cc50a1e7abc6c,1.ser
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/URI/4.15.0,3478238e680361cd87bf880f5b3cc50a1e7abc6c,1.ser
|
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCacheFactory.php
|
106
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Doctype.php
|
73
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DoctypeRegistry.php
|
142
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ElementDef.php
|
216
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Encoder.php
|
617
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityLookup.php
|
48
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityLookup/entities.ser
|
1
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityParser.php
|
285
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ErrorCollector.php
|
244
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ErrorStruct.php
|
74
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Exception.php
|
12
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter.php
|
56
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter/ExtractStyleBlocks.php
|
341
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter/YouTube.php
|
65
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Generator.php
|
286
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLDefinition.php
|
493
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule.php
|
285
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Bdo.php
|
44
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/CommonAttributes.php
|
32
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Edit.php
|
55
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Forms.php
|
194
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Hypertext.php
|
40
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Iframe.php
|
51
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Image.php
|
49
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Legacy.php
|
186
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/List.php
|
51
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Name.php
|
26
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Nofollow.php
|
25
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php
|
20
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Object.php
|
62
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Presentation.php
|
42
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Proprietary.php
|
40
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Ruby.php
|
36
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeEmbed.php
|
40
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeObject.php
|
62
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeScripting.php
|
40
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Scripting.php
|
73
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/StyleAttribute.php
|
33
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tables.php
|
75
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Target.php
|
28
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetBlank.php
|
24
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetNoopener.php
|
21
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetNoreferrer.php
|
21
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Text.php
|
87
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy.php
|
227
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Name.php
|
33
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Proprietary.php
|
34
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Strict.php
|
43
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Transitional.php
|
16
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/XHTML.php
|
26
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php
|
182
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/XMLCommonAttributes.php
|
20
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModuleManager.php
|
467
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/IDAccumulator.php
|
57
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector.php
|
283
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/AutoParagraph.php
|
356
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/DisplayLinkURI.php
|
40
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/Linkify.php
|
67
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/PurifierLinkify.php
|
71
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/RemoveEmpty.php
|
112
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php
|
95
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/SafeObject.php
|
124
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Language.php
|
204
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Language/messages/en.php
|
55
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/LanguageFactory.php
|
209
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Length.php
|
162
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer.php
|
387
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/DOMLex.php
|
338
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/DirectLex.php
|
539
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/PH5P.php
|
4788
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node.php
|
49
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Comment.php
|
36
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Element.php
|
59
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Text.php
|
54
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PercentEncoder.php
|
111
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer.php
|
218
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/CSSDefinition.php
|
44
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.css
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.js
|
5
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.php
|
451
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/HTMLDefinition.php
|
324
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PropertyList.php
|
122
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PropertyListIterator.php
|
43
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Queue.php
|
56
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy.php
|
26
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/Composite.php
|
30
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/Core.php
|
17
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/FixNesting.php
|
181
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/MakeWellFormed.php
|
659
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/RemoveForeignElements.php
|
207
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/ValidateAttributes.php
|
45
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/StringHash.php
|
48
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/StringHashParser.php
|
136
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform.php
|
37
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform/Font.php
|
114
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform/Simple.php
|
44
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token.php
|
100
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Comment.php
|
38
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Empty.php
|
15
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/End.php
|
24
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Start.php
|
10
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Tag.php
|
68
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Text.php
|
53
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TokenFactory.php
|
118
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URI.php
|
316
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIDefinition.php
|
112
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter.php
|
74
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableExternal.php
|
54
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableExternalResources.php
|
25
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableResources.php
|
22
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/HostBlacklist.php
|
46
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/MakeAbsolute.php
|
158
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/Munge.php
|
115
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/SafeIframe.php
|
68
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIParser.php
|
71
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme.php
|
102
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/data.php
|
136
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/file.php
|
44
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/ftp.php
|
58
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/http.php
|
36
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/https.php
|
18
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/mailto.php
|
40
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/news.php
|
35
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/nntp.php
|
32
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/tel.php
|
46
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URISchemeRegistry.php
|
81
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/UnitConverter.php
|
307
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser.php
|
198
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser/Flexible.php
|
130
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser/Native.php
|
38
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParserException.php
|
11
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Zipper.php
|
157
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/MobileDetect/MobileDetect.php
|
1421
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/css/bootstrap.min.css
|
6
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/css/bootstrap.min.css.map
|
1
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.bundle.min.js
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.min.js
|
7
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.min.js.map
|
1
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/read-me.txt
|
19
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/cloudarcade/unpack.php
|
99
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/documentation/documentation.html
|
3
●●●●●
patch | view | raw | blame | history
|
|
CloudArcade/documentation/setup.html
|
3
●●●●●
patch | view | raw | blame | history
|
| New file |
| | |
| | | Options +FollowSymLinks
|
| | | RewriteEngine On
|
| | | |
| | | RewriteCond %{SCRIPT_FILENAME} !-d
|
| | | RewriteCond %{SCRIPT_FILENAME} !-f
|
| | |
|
| | | RewriteRule ^(.*)$ ./index.php?viewpage=$1
|
| | |
|
| | | ErrorDocument 404 /index.php?viewpage=404 |
| New file |
| | |
| | | <?php
|
| | |
|
| | | session_start();
|
| | |
|
| | | require( "config.php" );
|
| | | require( "init.php" );
|
| | | require( 'includes/plugin.php' );
|
| | |
|
| | | $action = isset( $_GET['action'] ) ? $_GET['action'] : "";
|
| | | $username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";
|
| | |
|
| | | if ( $action != "logout" && !$username ) {
|
| | | require("includes/page-login.php" );
|
| | | exit;
|
| | | }
|
| | |
|
| | | switch ( $action ) {
|
| | | case 'logout':
|
| | | logout();
|
| | | break;
|
| | | default:
|
| | | header( "Location: admin/dashboard.php" );
|
| | | }
|
| | |
|
| | | function logout() {
|
| | | CA_Auth::delete();
|
| | | unset( $_SESSION['username'] );
|
| | | header( "Location: ".DOMAIN );
|
| | | return;
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | // Functions for Admin Panel
|
| | |
|
| | | if(!USER_ADMIN){
|
| | | die('Forbidden');
|
| | | }
|
| | |
|
| | | define( "SKIP_QUERY_CACHE", true );
|
| | |
|
| | | function get_setting_group($category){
|
| | | // $conn = open_connection();
|
| | | // $sql = "SELECT * FROM settings WHERE category = :category";
|
| | | // $st = $conn->prepare($sql);
|
| | | // $st->bindValue('category', $category, PDO::PARAM_STR);
|
| | | // $st->execute();
|
| | | // $rows = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | // return $rows;
|
| | | $group = [];
|
| | | foreach (SETTINGS as $item) {
|
| | | if($item['category'] == $category){
|
| | | $group[] = $item;
|
| | | }
|
| | | }
|
| | | return $group;
|
| | | }
|
| | |
|
| | | function update_setting($name, $value){
|
| | | // Migrated, replacing update_settings()
|
| | | $this_setting = get_setting($name);
|
| | | // Validating data type
|
| | | if($this_setting['type'] == 'bool'){
|
| | | if($value == 1 || $value == 0){
|
| | | //
|
| | | } else {
|
| | | die('Type not valid');
|
| | | }
|
| | | } else if($this_setting['type'] == 'number'){
|
| | | if(!is_numeric($value)){
|
| | | die('Type not valid');
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = "UPDATE settings SET value = :value WHERE name = :name LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->bindValue(":value", $value, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | function to_numeric_version($str_version){
|
| | | // Used to convert "1.5.0" to int 150
|
| | | return (int)str_replace('.', '', $str_version);
|
| | | }
|
| | |
|
| | | function curl_request($url) {
|
| | | $ch = curl_init($url);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
| | | $response = curl_exec($ch);
|
| | | if (curl_errno($ch)) {
|
| | | // If an error occured during the request, print the error
|
| | | echo 'Error:' . curl_error($ch);
|
| | | return false;
|
| | | }
|
| | | curl_close($ch);
|
| | | return $response;
|
| | | }
|
| | |
|
| | | function generate_small_thumbnail($path, $slug){
|
| | | // $path == $game->thumb_2
|
| | | // This function only work if thumb 2 is already stored locally
|
| | | $parent_dir = dirname(__FILE__) . '/../'; // CloudArcade root / installation folder
|
| | | if(!file_exists($parent_dir.$path)){
|
| | | echo 'error 910: img file not found!';
|
| | | return;
|
| | | }
|
| | | // $use_webp = get_setting_value('webp_thumbnail');
|
| | | $path_info = pathinfo($path);
|
| | | $root_folder = explode ("/", $path);
|
| | | $output = "thumbs/" . $slug . "_small." . $path_info['extension'];
|
| | | if($path_info['extension'] == 'webp'){
|
| | | // WEBP thumbnail
|
| | | $file_extension = pathinfo($path, PATHINFO_EXTENSION);
|
| | | $output = str_replace('.'.$file_extension, '.webp', $output);
|
| | | $_img = getimagesize($parent_dir.$path);
|
| | | $width = $_img['0'];
|
| | | $height = $_img['1'];
|
| | | $img = imagecreatefromwebp($parent_dir.$path);
|
| | | $new_img = imagecreatetruecolor(160, 160);
|
| | | imagecopyresized($new_img, $img, 0, 0, 0, 0, 160, 160, $width, $height);
|
| | | //output
|
| | | imagewebp($new_img, $parent_dir.$output, -1); // No compression
|
| | | } else {
|
| | | // PNG, JPG, GIF
|
| | | $x = getimagesize($parent_dir.$path);
|
| | | $width = $x['0'];
|
| | | $height = $x['1'];
|
| | | switch ($x['mime']) {
|
| | | case "image/gif":
|
| | | $img = imagecreatefromgif($parent_dir.$path);
|
| | | break;
|
| | | case "image/jpg":
|
| | | case "image/jpeg":
|
| | | $img = imagecreatefromjpeg($parent_dir.$path);
|
| | | break;
|
| | | case "image/png":
|
| | | $img = imagecreatefrompng($parent_dir.$path);
|
| | | break;
|
| | | }
|
| | | $img_base = imagecreatetruecolor(160, 160);
|
| | | if($x['mime'] == "image/png"){
|
| | | imageAlphaBlending($img_base, false);
|
| | | imageSaveAlpha($img_base, true);
|
| | | }
|
| | | imagecopyresampled($img_base, $img, 0, 0, 0, 0, 160, 160, $width, $height);
|
| | | $path_info = pathinfo($parent_dir.$path);
|
| | | switch ($path_info['extension']) {
|
| | | case "gif":
|
| | | imagegif($img_base, $parent_dir.$output); // No compression
|
| | | break;
|
| | | case "jpg":
|
| | | case "jpeg":
|
| | | imagejpeg($img_base, $parent_dir.$output, 100); // No compression
|
| | | break;
|
| | | case "png":
|
| | | imagepng($img_base, $parent_dir.$output, 6); // Balance compression
|
| | | break;
|
| | | }
|
| | | imagedestroy($img);
|
| | | imagedestroy($img_base);
|
| | | }
|
| | | }
|
| | |
|
| | | function import_thumbnail($url, $game_slug, $index = null){
|
| | | // import_thumb() replacement from request.php
|
| | | // Used to import thumb_1 and thumb_2 from remote source
|
| | | $parent_dir = dirname(__FILE__) . '/../'; // CloudArcade root / installation folder
|
| | | if($url) {
|
| | | if (!file_exists($parent_dir.'thumbs')) {
|
| | | mkdir($parent_dir.'thumbs', 0777, true);
|
| | | }
|
| | | $extension = pathinfo($url, PATHINFO_EXTENSION);
|
| | | $identifier = '';
|
| | | if(!is_null($index)){
|
| | | $identifier = '_'.$index;
|
| | | }
|
| | | $new = $parent_dir.'thumbs/'.$game_slug.$identifier.'.'.$extension;
|
| | | if( get_setting_value('webp_thumbnail') ){
|
| | | // Using WEBP format
|
| | | $file_extension = pathinfo($url, PATHINFO_EXTENSION);
|
| | | $new = str_replace('.'.$file_extension, '.webp', $new);
|
| | | // Create a cURL resource
|
| | | $ch = curl_init();
|
| | | // Set cURL options for retrieving the remote image file
|
| | | curl_setopt($ch, CURLOPT_URL, $url);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
| | | curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
|
| | | // Retrieve the remote image and save it to a local file
|
| | | $remoteImage = curl_exec($ch);
|
| | | if($remoteImage !== false){
|
| | | $localFile = fopen($new, 'w');
|
| | | if($localFile){
|
| | | fwrite($localFile, $remoteImage);
|
| | | fclose($localFile);
|
| | | } else {
|
| | | echo 'Could not create local file';
|
| | | }
|
| | | } else {
|
| | | echo 'Could not download remote image';
|
| | | }
|
| | | // Close the cURL resource
|
| | | curl_close($ch);
|
| | | image_to_webp($new, 100, $new);
|
| | | } else {
|
| | | // Using JPG/PNG/GIF format
|
| | | save_remote_thumbnail($url, $new);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function save_remote_thumbnail($source, $destination, $quality = 100) {
|
| | | // compressImage() replacement from request.php
|
| | | // Create a cURL resource
|
| | | // $quality is not used
|
| | | $ch = curl_init();
|
| | | // Set cURL options for retrieving the remote image file
|
| | | curl_setopt($ch, CURLOPT_URL, $source);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
| | | curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
|
| | | // Retrieve the remote image and create an image resource from it
|
| | | $remoteImage = curl_exec($ch);
|
| | | if($remoteImage !== false){
|
| | | $image = imagecreatefromstring($remoteImage);
|
| | | if($image !== false){
|
| | | $info = getimagesizefromstring($remoteImage);
|
| | | if ($info['mime'] == 'image/png'){
|
| | | imageAlphaBlending($image, true);
|
| | | imageSaveAlpha($image, true);
|
| | | imagepng($image, $destination, 6);
|
| | | } else if($info['mime'] == 'image/jpg' || $info['mime'] == 'image/jpeg') {
|
| | | imagejpeg($image, $destination, 100); // No compression
|
| | | } else if($info['mime'] == 'image/gif') {
|
| | | imagegif($image, $destination);
|
| | | }
|
| | | imagedestroy($image);
|
| | | } else {
|
| | | echo 'Could not create image resource';
|
| | | }
|
| | | } else {
|
| | | echo 'Could not download remote image';
|
| | | }
|
| | | // Close the cURL resource
|
| | | curl_close($ch);
|
| | | }
|
| | |
|
| | | function update_content_translation($content_type, $content_id, $language, $field_data) {
|
| | | // Sample usage =
|
| | | // Single : update_content_translation('game', 1, 'en', ['title' => 'New Title']);
|
| | | // Multiple : update_content_translation('game', 1, 'en', ['title' => 'New Title', 'description' => 'New Description']);
|
| | | if (ADMIN_DEMO || !USER_ADMIN) {
|
| | | die('ERR 918');
|
| | | }
|
| | | $conn = open_connection();
|
| | | try {
|
| | | $conn->beginTransaction();
|
| | | foreach ($field_data as $field => $translation) {
|
| | | $checkSql = "SELECT COUNT(*) FROM translations WHERE content_type = :content_type AND content_id = :content_id AND language = :language AND field = :field";
|
| | | $checkStmt = $conn->prepare($checkSql);
|
| | | $checkStmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
|
| | | $checkStmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
|
| | | $checkStmt->bindParam(':language', $language, PDO::PARAM_STR);
|
| | | $checkStmt->bindParam(':field', $field, PDO::PARAM_STR);
|
| | | $checkStmt->execute();
|
| | | if ($checkStmt->fetchColumn() > 0) {
|
| | | $sql = "UPDATE translations SET translation = :translation WHERE content_type = :content_type AND content_id = :content_id AND language = :language AND field = :field";
|
| | | } else {
|
| | | $sql = "INSERT INTO translations (content_type, content_id, language, field, translation) VALUES (:content_type, :content_id, :language, :field, :translation)";
|
| | | }
|
| | | $stmt = $conn->prepare($sql);
|
| | | $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
|
| | | $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
|
| | | $stmt->bindParam(':language', $language, PDO::PARAM_STR);
|
| | | $stmt->bindParam(':field', $field, PDO::PARAM_STR);
|
| | | $stmt->bindParam(':translation', $translation, PDO::PARAM_STR);
|
| | | $stmt->execute();
|
| | | }
|
| | | $conn->commit();
|
| | | return true;
|
| | | } catch (Exception $e) {
|
| | | $conn->rollback();
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | function delete_content_translation($content_type, $content_id, $language = null, $field = null) {
|
| | | if (ADMIN_DEMO || !USER_ADMIN) {
|
| | | die('ERR 237');
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = "DELETE FROM translations WHERE content_type = :content_type AND content_id = :content_id";
|
| | | if ($language !== null) {
|
| | | $sql .= " AND language = :language";
|
| | | }
|
| | | if ($field !== null) {
|
| | | $sql .= " AND field = :field";
|
| | | }
|
| | | $stmt = $conn->prepare($sql);
|
| | | $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
|
| | | $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
|
| | | if ($language !== null) {
|
| | | $stmt->bindParam(':language', $language, PDO::PARAM_STR);
|
| | | }
|
| | | if ($field !== null) {
|
| | | $stmt->bindParam(':field', $field, PDO::PARAM_STR);
|
| | | }
|
| | | return $stmt->execute();
|
| | | }
|
| | |
|
| | | function get_extra_fields($content_type) {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM extra_fields WHERE content_type = :content_type";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':content_type', $content_type, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $rows = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | return $rows;
|
| | | }
|
| | |
|
| | | function get_extra_field_by_id($id) {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM extra_fields WHERE id = :id LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':id', $id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetch(PDO::FETCH_ASSOC);
|
| | | return $row;
|
| | | }
|
| | |
|
| | | function get_extra_field_by_key($field_key, $content_type = null) {
|
| | | $allowed_types = ['game', 'category', 'page', 'post'];
|
| | | $including_type = false;
|
| | | if(!is_null($content_type)){
|
| | | if(in_array($content_type, $allowed_types)){
|
| | | $including_type = true;
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM extra_fields WHERE field_key = :field_key";
|
| | | if ($including_type) {
|
| | | $sql .= " AND content_type = :content_type";
|
| | | }
|
| | | $sql .= " LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':field_key', $field_key, PDO::PARAM_STR);
|
| | | if ($including_type) {
|
| | | $st->bindValue(':content_type', $content_type, PDO::PARAM_STR);
|
| | | }
|
| | | $st->execute();
|
| | | $row = $st->fetch(PDO::FETCH_ASSOC);
|
| | | return $row;
|
| | | }
|
| | |
|
| | | function backup_cms($root_path, $backup_type = 'part'){
|
| | | // Backup directory and file name
|
| | | if (extension_loaded('zip') && is_login() && USER_ADMIN && !ADMIN_DEMO) {
|
| | | $backup_dir = $root_path.'/admin/backups';
|
| | | if (!file_exists($backup_dir)) {
|
| | | mkdir($backup_dir, 0755, true);
|
| | | }
|
| | | if (!file_exists($backup_dir.'/index.php')) {
|
| | | file_put_contents($backup_dir.'/index.php', '');
|
| | | }
|
| | | $backup_file = $_SESSION['username'].'-cloudarcade-backup-'.$backup_type.'-'.VERSION.'-'.time().'-'.generate_random_strings().'.zip';
|
| | | $allowed_folders = [];
|
| | | $allowed_extensions = [];
|
| | | if($backup_type == 'part'){
|
| | | $allowed_folders = ['admin', 'classes', 'db', 'includes', 'js', 'locales']; // 'images'
|
| | | $allowed_extensions = ['php', 'js', 'html', 'xml', 'json', 'css', 'htaccess', 'ico', 'png', 'jpg', 'jpeg', 'gif', 'webp', 'svg'];
|
| | | }
|
| | | $options = [
|
| | | 'allowed_folders' => $allowed_folders, // root
|
| | | 'ignore_folders' => ['cloudarcade', 'private', 'cache', 'temp', 'backups'], // also applied on sub-folder
|
| | | 'ignore_extensions' => ['zip', 'rar', '7z'],
|
| | | 'whitelisted_files' => [],
|
| | | 'allowed_extensions' => $allowed_extensions,
|
| | | 'ignore_files' => []
|
| | | ];
|
| | | if($backup_type == 'part'){
|
| | | $options['whitelisted_files'] = ['content/themes/theme-functions.php'];
|
| | | $options['ignore_files'] = ['connect.php'];
|
| | | }
|
| | | zip_files_recursive( $root_path, ABSPATH . 'admin/backups/'.$backup_file, $options );
|
| | | }
|
| | | }
|
| | |
|
| | | function zip_files_recursive($source, $destination, $options = []) {
|
| | | $allowedFolders = isset($options['allowed_folders']) ? $options['allowed_folders'] : [];
|
| | | $ignoreFolders = isset($options['ignore_folders']) ? $options['ignore_folders'] : [];
|
| | | $ignoreExtensions = isset($options['ignore_extensions']) ? $options['ignore_extensions'] : [];
|
| | | $whitelistedFiles = isset($options['whitelisted_files']) ? $options['whitelisted_files'] : [];
|
| | | $ignoreFiles = isset($options['ignore_files']) ? $options['ignore_files'] : [];
|
| | | $allowedExtensions = isset($options['allowed_extensions']) ? $options['allowed_extensions'] : [];
|
| | | if (!extension_loaded('zip') || !is_login()) {
|
| | | return false;
|
| | | }
|
| | | if (file_exists($source)) {
|
| | | $zip = new ZipArchive();
|
| | | if ($zip->open($destination, ZIPARCHIVE::CREATE)) {
|
| | | $maxSize = 20 * 1024 * 1024; // 20 MB
|
| | | if (is_dir($source)) {
|
| | | $iterators = [];
|
| | | if (!empty($allowedFolders)) {
|
| | | foreach ($allowedFolders as $allowedFolder) {
|
| | | $folderPath = $source . $allowedFolder . '/';
|
| | | if (file_exists($folderPath)) {
|
| | | $iterators[] = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folderPath, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
|
| | | }
|
| | | }
|
| | | $root_files = scandir($source);
|
| | | $_root_files = [];
|
| | | foreach ($root_files as $file) {
|
| | | if ($file == '.' || $file == '..') {
|
| | | continue;
|
| | | }
|
| | | $filePath = $source . $file;
|
| | | if (is_file($filePath)) {
|
| | | $_root_files[] = new SplFileInfo($filePath);
|
| | | }
|
| | | }
|
| | | $iterators[] = $_root_files;
|
| | | } else {
|
| | | $iterators[] = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
|
| | | }
|
| | |
|
| | | foreach ($iterators as $files) {
|
| | | foreach ($files as $file) {
|
| | | if (count($allowedExtensions) > 0 && !in_array(pathinfo($file, PATHINFO_EXTENSION), $allowedExtensions)) {
|
| | | continue;
|
| | | }
|
| | | $ignored = false;
|
| | | foreach ($ignoreFolders as $ignore) {
|
| | | if (stripos($file, $ignore) !== false) {
|
| | | $ignored = true;
|
| | | break;
|
| | | }
|
| | | }
|
| | | if ($ignored) {
|
| | | continue;
|
| | | }
|
| | | $relativePath = $file->getPathname() === $source ? $file->getFilename() : str_replace('\\', '/', str_replace($source . DIRECTORY_SEPARATOR, '', $file->getPathname()));
|
| | | $thePath = str_replace($source, '', $relativePath);
|
| | | // Check if the folder is allowed
|
| | | $folderName = explode('/', $thePath)[0];
|
| | | $isDir = false;
|
| | | if (is_dir($source . '/' . $folderName) && strpos($folderName, '.') === false) {
|
| | | $isDir = true;
|
| | | }
|
| | | if(in_array($thePath, $ignoreFiles)){
|
| | | continue;
|
| | | }
|
| | | if (is_dir($file)) {
|
| | | if (count(glob("$file/*")) > 0) { //If folder not empty
|
| | | $zip->addEmptyDir($relativePath . '/');
|
| | | }
|
| | | } else if (is_file($file)) {
|
| | | // Ignore files larger than 20 MB
|
| | | if (filesize($file) > $maxSize) {
|
| | | continue;
|
| | | }
|
| | | // Ignore archive files
|
| | | $ext = pathinfo($file, PATHINFO_EXTENSION);
|
| | | if (in_array($ext, $ignoreExtensions)) {
|
| | | continue;
|
| | | }
|
| | | $zip->addFromString($relativePath, file_get_contents($file));
|
| | | }
|
| | | }
|
| | | }
|
| | | } else if (is_file($source)) {
|
| | | // Add single file
|
| | | }
|
| | | return $zip->close();
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <div class="addgame-wrapper" id="fetch">
|
| | | <div class="mb-3">
|
| | | <label class="form-label"><?php _e('Distributor') ?></label> |
| | | <select name="distributor" class="form-control" id="distributor-options">
|
| | | <option value="" disabled selected hidden><?php _e('Choose game distributor') ?>...</option>
|
| | | <option value="#gamedistribution">GameDistribution</option>
|
| | | <option value="#gamepix">GamePix</option>
|
| | | <option value="#playsaurus">Playsaurus</option>
|
| | | <option value="#more-distributors">More</option>
|
| | | </select>
|
| | | </div>
|
| | | <div class="fetch-games tab-container fade" id="gamedistribution">
|
| | | <div class="alert alert-warning alert-dismissible fade show" role="alert">You need joined <a href="https://gamedistribution.com/publishers" target="_blank">GameDistribution</a> publisher program to be able to publish their games on your site.<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>
|
| | |
|
| | | <form id="form-fetch-gamedistribution" class="gamedistribution">
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Collection</label> |
| | | <select name="Collection" class="form-control">
|
| | | <option selected="selected" value="all">All</option>
|
| | | <option value="11">Top Hypercasual</option>
|
| | | <option value="8">Ubisoft</option>
|
| | | <option value="3">Hot</option>
|
| | | <option value="2">Exclusive</option>
|
| | | <option value="1">Top Picks</option>
|
| | | <option value="4">New</option>
|
| | | <option value="5">In Game Purchase</option>
|
| | | <option value="6">IceStone</option>
|
| | | <option value="7">Ubisoft</option>
|
| | | <option value="10">Gameloft</option>
|
| | | </select>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Category</label> |
| | | <select name="Category" class="form-control">
|
| | | <option selected="selected" value="All">All</option>
|
| | | <option value="Puzzle">Puzzle</option>
|
| | | <option value="Casual">Casual</option>
|
| | | <option value="Adventure">Adventure</option>
|
| | | <option value="Hypercasual">Hypercasual</option>
|
| | | <option value="Shooter">Shooter</option>
|
| | | <option value="Agility">Agility</option>
|
| | | <option value="Simulation">Simulation</option>
|
| | | <option value="Art">Art</option>
|
| | | <option value="Sports">Sports</option>
|
| | | <option value="Battle">Battle</option>
|
| | | <option value="Match-3">Match-3</option>
|
| | | <option value="Strategy">Strategy</option>
|
| | | <option value="Care">Care</option>
|
| | | <option value=".IO">.IO</option>
|
| | | <option value="Boardgames">Boardgames</option>
|
| | | <option value="Educational">Educational</option>
|
| | | <option value="Cooking">Cooking</option>
|
| | | <option value="Bubble Shooter">Bubble Shooter</option>
|
| | | <option value="Football">Football</option>
|
| | | <option value="Bejeweled">Bejeweled</option>
|
| | | <option value="Girls">Girls</option>
|
| | | <option value="Cards">Cards</option>
|
| | | <option value="Basketball">Basketball</option>
|
| | | <option value="Action">Action</option>
|
| | | <option value="Quiz">Quiz</option>
|
| | | <option value="Arcade">Arcade</option>
|
| | | <option value="Combat">Combat</option>
|
| | | <option value="Farming">Farming</option>
|
| | | <option value="3D">3D</option>
|
| | | <option value="Clicker">Clicker</option>
|
| | | <option value="Boys">Boys</option>
|
| | | <option value="Baby">Baby</option>
|
| | | </select>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Item</label> |
| | | <select name="Limit" class="form-control">
|
| | | <option selected="selected" value="10">10</option>
|
| | | <option value="20">20</option>
|
| | | <option value="30">30</option>
|
| | | <option value="40">40</option>
|
| | | <option value="70">70</option>
|
| | | <option value="100">100</option>
|
| | | </select>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Offset</label> |
| | | <select name="Offset" class="form-control">
|
| | | <option selected="selected" value="1">1</option>
|
| | | <option value="2">2</option>
|
| | | <option value="3">3</option>
|
| | | <option value="4">4</option>
|
| | | <option value="5">5</option>
|
| | | <option value="6">6</option>
|
| | | <option value="7">7</option>
|
| | | <option value="8">8</option>
|
| | | <option value="9">9</option>
|
| | | <option value="10">10</option>
|
| | | <option value="11">11</option>
|
| | | <option value="12">12</option>
|
| | | <option value="13">13</option>
|
| | | <option value="14">14</option>
|
| | | <option value="15">15</option>
|
| | | </select>
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary btn-md" value="<?php _e('Fetch games') ?>"/>
|
| | | </form>
|
| | | </div>
|
| | | <div class="fetch-games tab-container fade" id="gamepix">
|
| | | <div class="alert alert-warning alert-dismissible fade show" role="alert">You need joined <a href="https://company.gamepix.com/publishers/" target="_blank">GamePix</a> publisher program to be able to publish their games on your site.<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>
|
| | | <form id="form-fetch-gamepix" class="gamepix">
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Sort By</label> |
| | | <select name="Sort" class="form-control">
|
| | | <option value="d" selected>Newest</option>
|
| | | <option value="q">Most Played</option>
|
| | | </select>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Category</label> |
| | | <select name="Category" class="form-control">
|
| | | <option value="1">All</option>
|
| | | <option value="2">Arcade</option>
|
| | | <option value="3">Adventure</option>
|
| | | <option value="4">Junior</option>
|
| | | <option value="5">Board</option>
|
| | | <option value="6">Classic</option>
|
| | | <option value="7">Puzzle</option>
|
| | | <option value="8">Sports</option>
|
| | | <option value="9">Strategy</option>
|
| | | </select>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Item</label> |
| | | <select name="Limit" class="form-control">
|
| | | <option selected="selected" value="10">10</option>
|
| | | <option value="20">20</option>
|
| | | <option value="30">30</option>
|
| | | <option value="40">40</option>
|
| | | <option value="70">70</option>
|
| | | <option value="100">100</option>
|
| | | </select>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Offset</label> |
| | | <select name="Offset" class="form-control">
|
| | | <option selected="selected" value="1">1</option>
|
| | | <option value="2">2</option>
|
| | | <option value="3">3</option>
|
| | | <option value="4">4</option>
|
| | | <option value="5">5</option>
|
| | | <option value="6">6</option>
|
| | | <option value="7">7</option>
|
| | | <option value="8">8</option>
|
| | | <option value="9">9</option>
|
| | | <option value="10">10</option>
|
| | | <option value="11">11</option>
|
| | | <option value="12">12</option>
|
| | | <option value="13">13</option>
|
| | | <option value="14">14</option>
|
| | | <option value="15">15</option>
|
| | | </select>
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary btn-md" value="<?php _e('Fetch games') ?>"/>
|
| | | </form>
|
| | | </div>
|
| | | <div class="fetch-games tab-container fade" id="playsaurus">
|
| | | <form id="form-fetch-playsaurus" class="playsaurus">
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Item</label> |
| | | <select name="Limit" class="form-control">
|
| | | <option selected="selected" value="100">All</option>
|
| | | </select>
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary btn-md" value="<?php _e('Fetch games') ?>"/>
|
| | | </form>
|
| | | </div>
|
| | | <div class="fetch-games tab-container fade" id="more-distributors">
|
| | | <p><b>You can fetch or add game from other HTML5 game distributors with "Fetch Games Extended" plugin.</b></p>
|
| | | <p>If "Fetch Games Extended" plugin not installed. follow step below:</p>
|
| | | <p>
|
| | | Click "Plugin" tab (Left sidebar) > Manage Plugins > Load Plugin Repository > ( Add ) Fetch Games Extended.
|
| | | </p>
|
| | | <p>
|
| | | Then you can access it under plugin page.
|
| | | </p>
|
| | |
|
| | | </div>
|
| | | <br>
|
| | | <div class="fetch-loading" style="display: none;">
|
| | | <h4><?php _e('Fetching games') ?> ...</h4>
|
| | | </div>
|
| | | <div id="action-info"></div>
|
| | | <div class="fetch-list mb-3" style="display: none;">
|
| | | <div class="table-responsive">
|
| | | <table class="table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th><?php _e('Thumbnail') ?></th>
|
| | | <th><?php _e('Game name') ?></th>
|
| | | <th><?php _e('Category') ?></th>
|
| | | <th><?php _e('URL') ?></th>
|
| | | <th><?php _e('Action') ?></th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody id="gameList">
|
| | | </tbody>
|
| | | </table>
|
| | | </div>
|
| | | <button class="btn btn-primary btn-md" id="add-all"><?php _e('Add all') ?></button>
|
| | | </div>
|
| | | <div class="div-stop" style="display: none;">
|
| | | <button class="btn btn-danger btn-md" id="stop-add"><?php _e('Stop') ?></button>
|
| | | </div>
|
| | | </div> |
| New file |
| | |
| | | <div class="addgame-wrapper" id="json">
|
| | | <p>Bulk import your game data with JSON format.</p>
|
| | | <p>Read "User Documentation" for sample JSON structure or code.</p>
|
| | | <p>Open browser log to see the import progress.</p>
|
| | | <p>Paste your JSON data below.</p>
|
| | | <form id="form-json">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="json-importer">JSON data:</label>
|
| | | <textarea class="form-control" name="json-importer" rows="8" required /></textarea>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Import') ?></button>
|
| | | </form>
|
| | | <br>
|
| | | <p>Preview JSON data (Game list) before submited.</p>
|
| | | <button class="btn btn-primary btn-md" id="json-preview"><?php _e('Preview') ?></button>
|
| | | <br><br>
|
| | | <table class="table" style="display: none;" id="table-json-preview">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th><?php _e('Title') ?></th>
|
| | | <th><?php _e('Slug') ?></th>
|
| | | <th><?php _e('URL') ?></th>
|
| | | <th><?php _e('Width') ?></th>
|
| | | <th><?php _e('Height') ?></th>
|
| | | <th><?php _e('Thumb') ?> 1</th>
|
| | | <th><?php _e('Thumb') ?> 2</th>
|
| | | <th><?php _e('Category') ?></th>
|
| | | <th><?php _e('Source') ?></th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody id="json-list-preview">
|
| | | </tbody>
|
| | | </table>
|
| | | </div> |
| New file |
| | |
| | | <div class="addgame-wrapper" id="remote">
|
| | | <form id="form-remote" action="request.php" autocomplete="off" method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="action" value="addGame"/>
|
| | | <input type="hidden" name="source" value="remote"/>
|
| | | <input type="hidden" name="redirect" value="dashboard.php?viewpage=addgame&slug=remote">
|
| | | <input type="hidden" name="tags" value=""/>
|
| | | <div class="row">
|
| | | <div class="col-md-8">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="title"><?php _e('Game title') ?>:</label>
|
| | | <input type="text" class="form-control" name="title" value="<?php echo (isset($_SESSION['title'])) ? $_SESSION['title'] : "" ?>" id="game-title-remote" required />
|
| | | </div>
|
| | | <?php
|
| | | if(CUSTOM_SLUG){ ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="slug"><?php _e('Game slug') ?>:</label>
|
| | | <input type="text" class="form-control" name="slug" placeholder="game-title" value="<?php echo (isset($_SESSION['slug'])) ? $_SESSION['slug'] : "" ?>" minlength="3" maxlength="50" id="game-slug-remote" required>
|
| | | </div>
|
| | | <?php }
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="description"><?php _e('Description') ?>:</label>
|
| | | <textarea class="form-control" name="description" rows="3" required><?php echo (isset($_SESSION['description'])) ? $_SESSION['description'] : "" ?></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="instructions"><?php _e('Instructions') ?>:</label>
|
| | | <textarea class="form-control" name="instructions" rows="3"><?php echo (isset($_SESSION['instructions'])) ? $_SESSION['instructions'] : "" ?></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="thumb_1"><?php _e('Thumbnail') ?> 512x384:</label>
|
| | | <input type="text" class="form-control" name="thumb_1" placeholder="https://example.com/yourgames/thumb_1.jpg" value="<?php echo (isset($_SESSION['thumb_1'])) ? $_SESSION['thumb_1'] : "" ?>" required />
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="thumb_2"><?php _e('Thumbnail') ?> 512x512:</label>
|
| | | <input type="text" class="form-control" name="thumb_2" placeholder="https://example.com/yourgames/thumb_2.jpg" value="<?php echo (isset($_SESSION['thumb_2'])) ? $_SESSION['thumb_2'] : "" ?>" required />
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="url"><?php _e('Game URL') ?>:</label>
|
| | | <input type="text" class="form-control" name="url" value="<?php echo (isset($_SESSION['url'])) ? $_SESSION['url'] : "" ?>" placeholder="https://example.com/yourgames/index.html" required />
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="width"><?php _e('Game width') ?>:</label>
|
| | | <input type="number" class="form-control" name="width" value="<?php echo (isset($_SESSION['width'])) ? $_SESSION['width'] : "720" ?>" required />
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="height"><?php _e('Game height') ?>:</label>
|
| | | <input type="number" class="form-control" name="height" value="<?php echo (isset($_SESSION['height'])) ? $_SESSION['height'] : "1080" ?>" required />
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="category"><?php _e('Category') ?>:</label>
|
| | | <select multiple class="form-control" name="category[]" size="8" required />
|
| | | <?php
|
| | | $results = array();
|
| | | $data = Category::getList();
|
| | | $categories = $data['results'];
|
| | | foreach ($categories as $cat) {
|
| | | $selected = (in_array($cat->name, $selected_categories)) ? 'selected' : '';
|
| | | echo '<option '.$selected.'>'.$cat->name.'</option>';
|
| | | }
|
| | | ?>
|
| | | </select>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-4">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="tags"><?php _e('Tags') ?>:</label>
|
| | | <input type="text" class="form-control" name="tags" value="<?php echo (isset($_SESSION['tags'])) ? $_SESSION['tags'] : "" ?>" id="tags-remote" placeholder="<?php _e('Separated by comma') ?>">
|
| | | </div>
|
| | | <div class="tag-list">
|
| | | <?php
|
| | | $tag_list = get_tags('usage');
|
| | | if(count($tag_list)){
|
| | | echo '<div class="mb-3">';
|
| | | foreach ($tag_list as $tag_name) {
|
| | | echo '<span class="badge rounded-pill bg-secondary btn-tag" data-target="tags-remote" data-value="'.$tag_name.'">'.$tag_name.'</span>';
|
| | | }
|
| | | echo '</div>';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | $extra_fields = get_extra_fields('game');
|
| | | if(count($extra_fields)){
|
| | | ?>
|
| | | <div class="extra-fields">
|
| | | <?php
|
| | | foreach ($extra_fields as $field) {
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:</label>
|
| | | <?php
|
| | | $default_value = $field['default_value'];
|
| | | $placeholder = $field['placeholder'];
|
| | | if($field['type'] === 'textarea'){
|
| | | echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
|
| | | } else if($field['type'] === 'number'){
|
| | | echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | } else if($field['type'] === 'text'){
|
| | | echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <input id="is_mobile" type="checkbox" name="is_mobile" <?php echo (isset($_SESSION['is_mobile']) ? filter_var($_SESSION['is_mobile'], FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
|
| | | <label class="form-label" for="is_mobile"><?php _e('Is mobile compatible') ?></label><br>
|
| | | <input id="published" type="checkbox" name="published" <?php echo (isset($_SESSION['published']) ? filter_var($_SESSION['published'], FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
|
| | | <label class="form-label" for="published"><?php _e('Published') ?></label><br>
|
| | | <p style="margin-left: 20px;" class="text-secondary">
|
| | | <?php _e('If unchecked, this game will set as Draft.') ?>
|
| | | </p>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Add game') ?></button>
|
| | | </form>
|
| | | </div> |
| New file |
| | |
| | | <div class="addgame-wrapper" id="addgame">
|
| | | <form id="form-uploadgame" action="upload.php" enctype="multipart/form-data" autocomplete="off" method="post">
|
| | | <input type="hidden" name="source" value="self"/>
|
| | | <input type="hidden" name="tags" value=""/>
|
| | | <div class="row">
|
| | | <div class="col-md-8">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="title"><?php _e('Game title') ?>:</label>
|
| | | <input type="text" class="form-control" name="title" value="<?php echo (isset($_SESSION['title'])) ? $_SESSION['title'] : "" ?>" id="game-title-upload" required/>
|
| | | </div>
|
| | | <?php
|
| | | if(CUSTOM_SLUG){ ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="slug"><?php _e('Game slug') ?>:</label>
|
| | | <input type="text" class="form-control" name="slug" placeholder="game-title" value="<?php echo (isset($_SESSION['slug'])) ? $_SESSION['slug'] : "" ?>" minlength="3" maxlength="50" id="game-slug-upload" required>
|
| | | </div>
|
| | | <?php }
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="description"><?php _e('Description') ?>:</label>
|
| | | <textarea class="form-control" name="description" rows="3" required><?php echo (isset($_SESSION['description'])) ? $_SESSION['description'] : "" ?></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="instructions"><?php _e('Instructions') ?>:</label>
|
| | | <textarea class="form-control" name="instructions" rows="3"><?php echo (isset($_SESSION['instructions'])) ? $_SESSION['instructions'] : "" ?></textarea>
|
| | | </div>
|
| | | <label class="form-label" for="gamefile"><?php _e('Game file') ?> (.zip):</label>
|
| | | <ul>
|
| | | <li>Must contain index.html on root</li>
|
| | | <li>Must contain "thumb_1.jpg" (512x384px) on root</li>
|
| | | <li>Must contain "thumb_2.jpg"(512x512px) on root</li>
|
| | | </ul>
|
| | | <div class="input-group mb-3">
|
| | | <div class="custom-file">
|
| | | <label class="form-label" class="custom-file-label" for="input_gamefile"><?php _e('Choose file') ?>:</label>
|
| | | <input type="file" name="gamefile" class="form-control" id="input_gamefile" accept=".zip" required>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="width"><?php _e('Game width') ?>:</label>
|
| | | <input type="number" class="form-control" name="width" value="<?php echo (isset($_SESSION['width'])) ? $_SESSION['width'] : "720" ?>" required/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="height"><?php _e('Game height') ?>:</label>
|
| | | <input type="number" class="form-control" name="height" value="<?php echo (isset($_SESSION['height'])) ? $_SESSION['height'] : "1080" ?>" required/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="category"><?php _e('Category') ?>:</label>
|
| | | <select multiple class="form-control" name="category[]" size="8" required/>
|
| | | <?php
|
| | | $results = array();
|
| | | $data = Category::getList();
|
| | | $categories = $data['results'];
|
| | | foreach ($categories as $cat) {
|
| | | $selected = (in_array($cat->name, $selected_categories)) ? 'selected' : '';
|
| | | echo '<option '.$selected.'>'.$cat->name.'</option>';
|
| | | }
|
| | | ?>
|
| | | </select>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-4">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="tags"><?php _e('Tags') ?>:</label>
|
| | | <input type="text" class="form-control" name="tags" value="<?php echo (isset($_SESSION['tags'])) ? $_SESSION['tags'] : "" ?>" id="tags-upload" placeholder="<?php _e('Separated by comma') ?>">
|
| | | </div>
|
| | | <div class="tag-list">
|
| | | <?php
|
| | | $tag_list = get_tags('usage');
|
| | | if(count($tag_list)){
|
| | | echo '<div class="mb-3">';
|
| | | foreach ($tag_list as $tag_name) {
|
| | | echo '<span class="badge rounded-pill bg-secondary btn-tag" data-target="tags-upload" data-value="'.$tag_name.'">'.$tag_name.'</span>';
|
| | | }
|
| | | echo '</div>';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | $extra_fields = get_extra_fields('game');
|
| | | if(count($extra_fields)){
|
| | | ?>
|
| | | <div class="extra-fields">
|
| | | <?php
|
| | | foreach ($extra_fields as $field) {
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
|
| | | <br>
|
| | | <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
|
| | | </label>
|
| | | <?php
|
| | | $default_value = $field['default_value'];
|
| | | $placeholder = $field['placeholder'];
|
| | | if($field['type'] === 'textarea'){
|
| | | echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
|
| | | } else if($field['type'] === 'number'){
|
| | | echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | } else if($field['type'] === 'text'){
|
| | | echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <input id="is_mobile" type="checkbox" name="is_mobile" <?php echo (isset($_SESSION['is_mobile']) ? filter_var($_SESSION['is_mobile'], FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
|
| | | <label class="form-label" for="is_mobile"><?php _e('Is mobile compatible') ?></label><br>
|
| | | <input id="published" type="checkbox" name="published" <?php echo (isset($_SESSION['published']) ? filter_var($_SESSION['published'], FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
|
| | | <label class="form-label" for="published"><?php _e('Published') ?></label><br>
|
| | | <p style="margin-left: 20px;" class="text-secondary">
|
| | | <?php _e('If unchecked, this game will set as Draft.') ?>
|
| | | </p>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload game') ?></button>
|
| | | </form>
|
| | | </div> |
| New file |
| | |
| | | <div class="section section-full">
|
| | |
|
| | | <?php
|
| | |
|
| | | $selected_tab = isset($_GET['slug']) ? $_GET['slug'] : 'upload';
|
| | | $tabs = array(
|
| | | 'upload' => 'Upload game',
|
| | | 'fetch' => 'Fetch games',
|
| | | 'remote' => 'Remote add',
|
| | | 'json' => 'JSON Importer'
|
| | | );
|
| | |
|
| | | if(!check_purchase_code() && !ADMIN_DEMO){
|
| | | echo('<div class="bs-callout bs-callout-warning"><p>Please provide your <b>Item Purchase code</b>. You can submit or update your Purchase code on site settings.</p><p>To be able to add a game, you need to provide your Item Purchase code. <a href="https://help.market.envato.com/hc/en-us/articles/202822600-Where-Is-My-Purchase-Code" target="_blank">Where to get Envato purchase code?</a></p></div>');
|
| | | } else {
|
| | | ?>
|
| | | <input type="hidden" name="p_code" value="<?php echo (ADMIN_DEMO ? 'holy-moly' : check_purchase_code()) ?>" id="p_code" />
|
| | | <ul class="nav nav-tabs custom-tab" role="tablist">
|
| | | <?php
|
| | | foreach ($tabs as $tab_key => $tab_value) {
|
| | | $active = ($tab_key === $selected_tab) ? 'active' : '';
|
| | | ?>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link <?php echo $active ?>" href="dashboard.php?viewpage=addgame&slug=<?php echo $tab_key ?>"><?php _e($tab_value) ?></a>
|
| | | </li>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </ul>
|
| | | <!-- Tab panes -->
|
| | | <div class="general-wrapper">
|
| | | <div class="tab-content">
|
| | | <?php
|
| | | $selected_categories = []; //Used for showing last selected categories
|
| | | if(isset($_SESSION['category'])){
|
| | | if(is_array($_SESSION['category'])){
|
| | | $selected_categories = (array)$_SESSION['category'];
|
| | | } else {
|
| | | $selected_categories = commas_to_array($_SESSION['category']);
|
| | | }
|
| | | }
|
| | | if(isset($_GET['status'])){
|
| | | echo '<div class="mb-4"></div>';
|
| | | if($_GET['status'] == 'added'){
|
| | | show_alert('Game added!', 'success');
|
| | | } elseif($_GET['status'] == 'exist'){
|
| | | show_alert('Game already exist!', 'warning');
|
| | | } elseif($_GET['status'] == 'error'){
|
| | | $error = json_decode($_GET['error-data']);
|
| | | foreach ($error as $value) {
|
| | | show_alert($value, 'warning');
|
| | | }
|
| | | }
|
| | | }
|
| | | if($selected_tab === 'upload'){
|
| | | include 'core/addgame-upload.php';
|
| | | } else if($selected_tab === 'fetch'){
|
| | | include 'core/addgame-fetch.php';
|
| | | } else if($selected_tab === 'remote'){
|
| | | include 'core/addgame-remote.php';
|
| | | } else if($selected_tab === 'json'){
|
| | | include 'core/addgame-json.php';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php } ?>
|
| | | </div> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | if(isset($_SESSION['message'])){
|
| | | show_alert($_SESSION['message']['text'], $_SESSION['message']['type']);
|
| | | unset($_SESSION['message']);
|
| | | }
|
| | |
|
| | | if(isset($_GET['id'])){
|
| | | $category = Category::getById($_GET['id']);
|
| | | if($category){
|
| | | ?>
|
| | | <div class="section section-full">
|
| | | <ul class="nav nav-tabs custom-tab" role="tablist">
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link active"><?php _e('Edit category') ?></a>
|
| | | </li>
|
| | | </ul>
|
| | | <div class="general-wrapper">
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="editCategory">
|
| | | <input type="hidden" name="redirect" value="dashboard.php?viewpage=categories&slug=edit&id=<?php echo $_GET['id'] ?>">
|
| | | <input type="hidden" name="id" value="<?php echo $_GET['id'] ?>"/>
|
| | | <div class="row">
|
| | | <div class="col-md-8">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="title"><?php _e('Category Name') ?>:</label>
|
| | | <?php show_alert('Change category name will update all related games category string.', 'warning') ?>
|
| | | <input type="text" class="form-control" id="edit-name" name="name" placeholder="Name of the game" required minlength="2" maxlength="30" value="<?php echo $category->name ?>">
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="slug"><?php _e('Category Slug') ?>:</label>
|
| | | <input type="text" class="form-control" id="edit-slug" name="slug" placeholder="online-games" required minlength="2" maxlength="30" value="<?php echo $category->slug ?>">
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="description"><?php _e('Description') ?>:</label>
|
| | | <textarea class="form-control" name="description" id="edit-description" rows="3" placeholder="(Optional) Category description" minlength="3" maxlength="100000"><?php echo $category->description ?></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="meta_description"><?php _e('Meta Description') ?>:</label>
|
| | | <textarea class="form-control" name="meta_description" id="edit-meta_description" rows="3" placeholder="(Optional) Category meta description" minlength="3" maxlength="100000"><?php echo $category->meta_description ?></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="edit-priority"><?php _e('Priority') ?>:</label>
|
| | | <input type="number" class="form-control" id="edit-priority" name="priority" value="<?php echo $category->priority ?>" />
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="cat-id"><?php _e('ID') ?>:</label>
|
| | | <input type="text" class="form-control" id="cat-id" value="<?php echo $category->id ?>" disabled />
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <input id="edit-hide" class="edit-hide" name="hide" type="checkbox" <?php echo ($category->priority < 0) ? 'checked' : '' ?>>
|
| | | <label class="form-label" for="edit-hide"><?php _e('Hide') ?></label><br>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-4">
|
| | | <?php
|
| | | $extra_fields = get_extra_fields('category');
|
| | | if(count($extra_fields)){
|
| | | ?>
|
| | | <div class="extra-fields">
|
| | | <?php
|
| | | foreach ($extra_fields as $field) {
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
|
| | | <br>
|
| | | <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
|
| | | </label>
|
| | | <?php
|
| | | $default_value = $category->getExtraField($field['field_key']);
|
| | | $placeholder = $field['placeholder'];
|
| | | if($field['type'] === 'textarea'){
|
| | | echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
|
| | | } else if($field['type'] === 'number'){
|
| | | echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | } else if($field['type'] === 'text'){
|
| | | echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary" value="<?php _e('Save changes') ?>">
|
| | | </form>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <div class="row">
|
| | | <div class="col-lg-8">
|
| | | <div class="section">
|
| | | <ul class="category-list">
|
| | | <?php
|
| | | $results = array();
|
| | |
|
| | | $data = Category::getList();
|
| | | $categories = $data['results'];
|
| | |
|
| | | if($data['totalRows'] > 0){
|
| | | foreach ($categories as $cat) {
|
| | | echo '<li class="category-item d-flex align-items-center">';
|
| | | if($cat->priority<0){
|
| | | echo '<span style="opacity: 0.3;">'.esc_string($cat->name).'</span>';
|
| | | }
|
| | | else{
|
| | | echo esc_string($cat->name);
|
| | | }
|
| | | $count = Category::getCategoryCount($cat->id);
|
| | | if($count > 0){
|
| | | echo '<span class="badge badge-primary badge-pill">';
|
| | | echo esc_int($count);
|
| | | echo '</span>';
|
| | | }
|
| | | echo '<div style="margin-left: auto;">';
|
| | | echo '<span class="actions"><a class="editcategory" href="dashboard.php?viewpage=categories&slug=edit&id='.esc_int($cat->id).'"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a><a class="remove-category text-danger" href="#" id="'.esc_int($cat->id).'"><i class="fa fa-trash circle" aria-hidden="true"></i></a></span>';
|
| | | echo '</div></li>';
|
| | | }
|
| | | } else {
|
| | | _e('No categories found!');
|
| | | }
|
| | |
|
| | | ?>
|
| | | </ul>
|
| | | <?php
|
| | | if(count($categories) > 0){
|
| | | ?>
|
| | | <form method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="action" value="reset-priority">
|
| | | <div class="mb-3">
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Reset Priority') ?></button>
|
| | | </div>
|
| | | </form>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-4">
|
| | | <div class="section">
|
| | | <form id="form-newcategory" action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="newCategory">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=categories">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="category"><?php _e('Add new category') ?>:</label>
|
| | | <input type="text" class="form-control" name="name" placeholder="Name" value="" minlength="2" maxlength="30" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="description"><?php _e('Description') ?>:</label>
|
| | | <textarea type="text" class="form-control" name="description" rows="3" placeholder="(Optional) Category description"></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="meta_description"><?php _e('Meta Description') ?>:</label>
|
| | | <textarea class="form-control" name="meta_description" rows="3" placeholder="(Optional) Category meta description"></textarea>
|
| | | </div>
|
| | | <?php
|
| | | if(CUSTOM_SLUG){ ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="slug"><?php _e('Category Slug') ?>:</label>
|
| | | <input type="text" class="form-control" name="slug" placeholder="adventure-game" value="" minlength="3" maxlength="30" required>
|
| | | </div>
|
| | | <?php }
|
| | | ?>
|
| | | <?php
|
| | | $extra_fields = get_extra_fields('category');
|
| | | if(count($extra_fields)){
|
| | | ?>
|
| | | <div class="extra-fields">
|
| | | <?php
|
| | | foreach ($extra_fields as $field) {
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
|
| | | <br>
|
| | | <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
|
| | | </label>
|
| | | <?php
|
| | | $default_value = $field['default_value'];
|
| | | $placeholder = $field['placeholder'];
|
| | | if($field['type'] === 'textarea'){
|
| | | echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
|
| | | } else if($field['type'] === 'number'){
|
| | | echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | } else if($field['type'] === 'text'){
|
| | | echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Add') ?></button>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div> |
| New file |
| | |
| | | <?php
|
| | | if(isset($_POST['action'])){
|
| | | if($_POST['action'] == 'reset-priority'){
|
| | | $cats = Category::getList()['results'];
|
| | | foreach ($cats as $cat) {
|
| | | $cat->priority = 0;
|
| | | $cat->update();
|
| | | }
|
| | | $_GET['status'] = 'reset';
|
| | | }
|
| | | }
|
| | | if(isset($_GET['status'])){
|
| | | $class = 'success';
|
| | | $message = '';
|
| | | if($_GET['status'] == 'added'){
|
| | | $message = 'New category added!';
|
| | | } elseif($_GET['status'] == 'exist'){
|
| | | $class = 'warning';
|
| | | $message = 'Category already exist!';
|
| | | } elseif($_GET['status'] == 'deleted'){
|
| | | $class = 'warning';
|
| | | $message = 'Category deleted!';
|
| | | } elseif($_GET['status'] == 'updated'){
|
| | | $message = 'Category updated!';
|
| | | if(isset($_GET['info'])){
|
| | | $message = $message.' '.$_GET['info'];
|
| | | }
|
| | | } elseif($_GET['status'] == 'reset'){
|
| | | $message = 'Category priority set to 0!';
|
| | | if(isset($_GET['info'])){
|
| | | $message = $message.' '.$_GET['info'];
|
| | | }
|
| | | }
|
| | | show_alert($message, $class);
|
| | | }
|
| | |
|
| | | if (isset($_GET['slug'])){
|
| | | if($_GET['slug'] === 'edit'){
|
| | | include 'core/categories-edit.php';
|
| | | }
|
| | | } else {
|
| | | include 'core/categories-list.php';
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | | require( dirname(__FILE__).'/../../classes/Collection.php' );
|
| | |
|
| | | if(isset($_GET['status'])){
|
| | | $type = 'success';
|
| | | $message = '';
|
| | | if($_GET['status'] == 'added'){
|
| | | $message = 'New collection added!';
|
| | | } elseif($_GET['status'] == 'exist'){
|
| | | $type = 'warning';
|
| | | $message = 'Collection already exist!';
|
| | | } elseif($_GET['status'] == 'deleted'){
|
| | | $type = 'warning';
|
| | | $message = 'Collection deleted!';
|
| | | } elseif($_GET['status'] == 'updated'){
|
| | | $message = 'Collection updated!';
|
| | | if(isset($_GET['info'])){
|
| | | $message = $message.' '.$_GET['info'];
|
| | | }
|
| | | }
|
| | | show_alert($message, $type);
|
| | | }
|
| | | ?>
|
| | | <div class="row">
|
| | | <div class="col-lg-8">
|
| | | <div class="section">
|
| | | <ul class="collection-list">
|
| | | <?php
|
| | | $results = array();
|
| | | $data = Collection::getList();
|
| | | if($data['totalRows'] > 0){
|
| | | $collections = $data['results'];
|
| | | foreach ($collections as $item) {
|
| | | echo '<li class="collection-item d-flex align-items-center">';
|
| | | echo esc_string($item->name);
|
| | | echo '<div style="margin-left: auto;">';
|
| | | echo '<span class="actions"><a class="editcollection" href="#" id="'.esc_int($item->id).'"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a><a class="remove-collection text-danger" href="#" id="'.esc_int($item->id).'"><i class="fa fa-trash circle" aria-hidden="true"></i></a></span>';
|
| | | echo '</div></li>';
|
| | | }
|
| | | } else {
|
| | | _e('No collections found!');
|
| | | }
|
| | | ?>
|
| | | </ul>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-4">
|
| | | <div class="section">
|
| | | <form id="form-newcollection" action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="newCollection">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=collections">
|
| | | <div class="mb-3">
|
| | | <label for="collection"><?php _e('Add new collection') ?>:</label>
|
| | | <input type="text" class="form-control" name="name" placeholder="Name" value="" minlength="2" maxlength="15" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label for="data">Game ids, separated by commas:</label>
|
| | | <input type="text" class="form-control" name="data" placeholder="2,4,11,12,23" value="" minlength="2" required>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Add') ?></button>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <!-- Modal -->
|
| | | <div class="modal fade" id="edit-collection" tabindex="-1" role="dialog" aria-labelledby="edit-collection-modal-label" aria-hidden="true">
|
| | | <div class="modal-dialog" role="document">
|
| | | <div class="modal-content">
|
| | | <div class="modal-header">
|
| | | <h5 class="modal-title" id="edit-collection-label"><?php _e('Edit collection') ?></h5>
|
| | | <button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button>
|
| | | </div>
|
| | | <div class="modal-body">
|
| | | <form id="form-editcollection" action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="editCollection">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=collections">
|
| | | <input type="hidden" id="edit-id" name="id" value=""/>
|
| | | <div class="mb-3">
|
| | | <label for="title"><?php _e('Collection name') ?>:</label>
|
| | | <input type="text" class="form-control" id="edit-name" name="name" placeholder="Name of the game" required minlength="2" maxlength="255" value=""/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label for="data"><?php _e('Game ids') ?>:</label>
|
| | | <textarea class="form-control" name="data" id="edit-data" rows="3" placeholder="2,4,11,12,23" value="" minlength="2" required maxlength="100000"></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label>Game list:</label>
|
| | | <select multiple class="form-control" id="collection-game-list" readonly="readonly">
|
| | | </select>
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary" value="<?php _e('Save changes') ?>" />
|
| | | <input type="button" class="btn btn-secondary" data-bs-dismiss="modal" value="<?php _e('Close') ?>" />
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div> |
| New file |
| | |
| | | <?php
|
| | | $warning_list = get_admin_warning();
|
| | | if(!empty($warning_list)){
|
| | | echo('<div class="site-warning">');
|
| | | foreach ($warning_list as $val) {
|
| | | show_alert($val, 'warning');
|
| | | }
|
| | | echo('</div>');
|
| | | }
|
| | | if(file_exists(ABSPATH.'static/') && file_exists(ABSPATH.'index_static.php')){
|
| | | show_alert('Static Site is active.', 'info');
|
| | | }
|
| | | ?>
|
| | | <div class="update-info"></div>
|
| | | <div class="row">
|
| | | <div class="col-lg-9">
|
| | | <div class="section section-stats">
|
| | | <select class="form-select stats-option" id="stats-option">
|
| | | <option value="week"><?php echo _t('Last %a days', 7) ?></option>
|
| | | <option value="month"><?php echo _t('Last %a days', 30) ?></option>
|
| | | </select>
|
| | | <h3 class="section-title">
|
| | | <i class="fas fa-chart-line"></i> <?php echo _t('Statistics') ?>
|
| | | </h3>
|
| | | <div class="container-stats">
|
| | | <div class="chart-container" style="position: relative; height:40vh; width:80vw">
|
| | | <canvas id="statistics"></canvas>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="section-boxes">
|
| | | <div class="boxes">
|
| | | <div class="row">
|
| | | <div class="col-6 col-md-3">
|
| | | <div class="box box-1">
|
| | | <h2 class="amount">
|
| | | <?php echo Game::getTotalGames() ?>
|
| | | </h2>
|
| | | <div class="box-info">
|
| | | <b><?php _e('Games') ?></b>
|
| | | <div class="small">
|
| | | <?php
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT COUNT(*) FROM games WHERE MONTH(createddate) = MONTH(CURRENT_DATE()) AND YEAR(createddate) = YEAR(CURRENT_DATE())";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $amount = $st->fetchColumn();
|
| | | _e('+%a this month', $amount);
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-6 col-md-3">
|
| | | <div class="box box-2">
|
| | | <h2 class="amount">
|
| | | <?php echo User::getTotalUsers() ?>
|
| | | </h2>
|
| | | <div class="box-info">
|
| | | <b><?php _e('Users') ?></b>
|
| | | <div class="small">
|
| | | <?php
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT COUNT(*) FROM users WHERE MONTH(join_date) = MONTH(CURRENT_DATE()) AND YEAR(join_date) = YEAR(CURRENT_DATE())";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $amount = $st->fetchColumn();
|
| | | _e('+%a this month', $amount);
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-6 col-md-3">
|
| | | <div class="box box-3">
|
| | | <h2 class="amount">
|
| | | <?php
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT COUNT(*) FROM comments";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | echo $st->fetchColumn();
|
| | | ?>
|
| | | </h2>
|
| | | <div class="box-info">
|
| | | <b><?php _e('Comments') ?></b>
|
| | | <div class="small">
|
| | | <?php
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT COUNT(*) FROM comments WHERE MONTH(created_date) = MONTH(CURRENT_DATE()) AND YEAR(created_date) = YEAR(CURRENT_DATE())";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $amount = $st->fetchColumn();
|
| | | _e('+%a this month', $amount);
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-6 col-md-3">
|
| | | <div class="box box-4">
|
| | | <h2 class="amount">
|
| | | <?php
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT COUNT(*) FROM posts";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | echo $st->fetchColumn();
|
| | | ?>
|
| | | </h2>
|
| | | <div class="box-info">
|
| | | <b><?php _e('Posts') ?></b>
|
| | | <div class="small">
|
| | | <?php
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT COUNT(*) FROM posts WHERE MONTH(created_date) = MONTH(CURRENT_DATE()) AND YEAR(created_date) = YEAR(CURRENT_DATE())";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $amount = $st->fetchColumn();
|
| | | _e('+%a this month', $amount);
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="row">
|
| | | <div class="col-lg-6">
|
| | | <div class="section section-full">
|
| | | <h3 class="section-title"><i class="fa fa-comments"></i> <?php _e('Comments') ?></h3>
|
| | | <?php
|
| | | $index = 0;
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM comments ORDER BY id DESC LIMIT 3";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll();
|
| | | //
|
| | | if(count($row)){
|
| | | ?>
|
| | | <div class="table-responsive">
|
| | | <table class="table custom-table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th>Sender</th>
|
| | | <th>Date</th>
|
| | | <th>Comment</th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody>
|
| | | <?php
|
| | | foreach ( $row as $item ) {
|
| | | $index++;
|
| | | ?>
|
| | | <tr>
|
| | | <td scope="row"><?php echo $index ?></td>
|
| | | <td>
|
| | | <?php echo $item['sender_username'] ?>
|
| | | </td>
|
| | | <td>
|
| | | <?php echo $item['created_date'] ?>
|
| | | </td>
|
| | | <td class="td-ellipsis">
|
| | | <?php echo $item['comment'] ?>
|
| | | </td>
|
| | | </tr>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | |
| | | </tbody>
|
| | | </table>
|
| | | </div>
|
| | | <div class="text-center section-bottom-link">
|
| | | <a href="dashboard.php?viewpage=plugin&name=comments-manager"><?php _e('Manage Comments') ?></a>
|
| | | </div>
|
| | | <?php
|
| | | } else {
|
| | | ?>
|
| | | <div class="general-wrapper">
|
| | | <?php _e('No comment') ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-6">
|
| | | <div class="section section-full">
|
| | | <h3 class="section-title"><i class="fas fa-flag"></i> <?php _e('Game Reports') ?></h3>
|
| | | <?php
|
| | | if(is_plugin_exist('game-reports')){
|
| | | $reports = get_pref('game-reports');
|
| | | if($reports){
|
| | | $reports = json_decode($reports, true);
|
| | | } else {
|
| | | $reports = [];
|
| | | }
|
| | | if(count($reports)){
|
| | | ?>
|
| | | <div class="table-responsive">
|
| | | <table class="table custom-table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th>Game</th>
|
| | | <th>Type</th>
|
| | | <th>Comment</th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody>
|
| | | <?php
|
| | | $index = 0;
|
| | | foreach ( $reports as $item ) {
|
| | | $index++;
|
| | | $color = '';
|
| | | if($item['type'] == 'bug'){
|
| | | $color = 'bg-warning';
|
| | | } elseif($item['type'] == 'error'){
|
| | | $color = 'bg-danger';
|
| | | } elseif($item['type'] == 'other'){
|
| | | $color = 'bg-success';
|
| | | }
|
| | | $game = Game::getById($item['game_id']);
|
| | | ?>
|
| | | <tr>
|
| | | <td scope="row"><?php echo $index ?></td>
|
| | | <td class="td-ellipsis">
|
| | | <a href="<?php echo get_permalink('game', $game->slug) ?>" target="_blank"><?php echo $game->title ?></a>
|
| | | </td>
|
| | | <td>
|
| | | <span class="<?php echo $color ?> text-dark"> <?php echo $item['type'] ?> </span>
|
| | | </td>
|
| | | <td class="td-ellipsis">
|
| | | <?php echo $item['comment'] ?>
|
| | | </td>
|
| | | </tr>
|
| | | <?php
|
| | | if($index >= 3){
|
| | | break;
|
| | | }
|
| | | }
|
| | | ?> |
| | | </tbody>
|
| | | </table>
|
| | | </div>
|
| | | <div class="text-center section-bottom-link">
|
| | | <a href="dashboard.php?viewpage=plugin&name=game-reports"><?php _e('Manage Reports') ?></a>
|
| | | </div>
|
| | | <?php
|
| | | } else {
|
| | | ?>
|
| | | <div class="general-wrapper">
|
| | | <?php _e('No report') ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | } else {
|
| | | ?>
|
| | | <div class="general-wrapper">
|
| | | <?php _e('Game Reports plugin not installed') ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?> |
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="section section-full">
|
| | | <h3 class="section-title"><i class="fas fa-dice-d6"></i> <?php echo _t('Top games') ?></h3>
|
| | | <div class="table-responsive">
|
| | | <table class="table custom-table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th><?php _e('Game Name') ?></th>
|
| | | <th><?php _e('Played') ?></th>
|
| | | <th><?php _e('Category') ?></th>
|
| | | <th><?php _e('Likes') ?></th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody>
|
| | | <?php
|
| | | $index = 0;
|
| | | $data = get_game_list('popular', 10);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) {
|
| | | $index++;
|
| | | ?>
|
| | | <tr>
|
| | | <td><?php echo esc_int($index); ?></td>
|
| | | <td class="td-ellipsis">
|
| | | <a href="<?php echo get_permalink('game', $game->slug) ?>" target="_blank"><?php echo esc_string($game->title); ?></a>
|
| | | </td>
|
| | | <td>
|
| | | <?php echo format_number_abbreviated(esc_int($game->views)); ?>
|
| | | </td>
|
| | | <td class="td-ellipsis">
|
| | | <?php echo '<span class="categories">'.esc_string($game->category).'</span>'; ?>
|
| | | </td>
|
| | | <td>
|
| | | <?php
|
| | | $vote_percentage = '';
|
| | | $value = "-";
|
| | | if($game->upvote+$game->downvote > 0){
|
| | | $vote_percentage = floor(($game->upvote/($game->upvote+$game->downvote))*100);
|
| | | $value = $vote_percentage.'%';
|
| | | }
|
| | | echo '<div class="row">';
|
| | | echo '<div class="col-4">'.$value.'</div>';
|
| | | echo '<div class="col-4"><i class="fa fa-thumbs-up" aria-hidden="true"></i>'.esc_int($game->upvote).'</div><div class="col-4"><i class="fa fa-thumbs-down" aria-hidden="true"></i>'.esc_int($game->downvote).'</div>';
|
| | | echo '</div>';
|
| | | ?>
|
| | | </td>
|
| | | </tr>
|
| | | <?php } ?>
|
| | | </tbody>
|
| | | </table>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-3">
|
| | | <?php if(!ADMIN_DEMO) echo('<div class="section"><div class="official-info"></div></div>') ?>
|
| | | <div class="section">
|
| | | <div class="quote-box">
|
| | | <div id="quote"></div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | if(isset($_SESSION['message'])){
|
| | | show_alert($_SESSION['message']['text'], $_SESSION['message']['type']);
|
| | | unset($_SESSION['message']);
|
| | | }
|
| | |
|
| | | if(isset($_GET['id'])){
|
| | | $game = Game::getById($_GET['id']);
|
| | | if($game){
|
| | | ?>
|
| | | <div class="section section-full">
|
| | | <ul class="nav nav-tabs custom-tab" role="tablist">
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link active"><?php _e('Edit game') ?></a>
|
| | | </li>
|
| | | </ul>
|
| | | <div class="general-wrapper">
|
| | | <div class="editgame-wrapper">
|
| | | <form id="form-uploadgame" action="request.php" enctype="multipart/form-data" autocomplete="off" method="post">
|
| | | <input type="hidden" name="action" value="editGame">
|
| | | <input type="hidden" name="redirect" value="dashboard.php?viewpage=gamelist&slug=edit&id=<?php echo $game->id ?>">
|
| | | <input type="hidden" name="id" value="<?php echo $game->id ?>">
|
| | | <div class="row">
|
| | | <div class="col-md-8">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="title"><?php _e('Game title') ?>:</label>
|
| | | <input type="text" class="form-control" name="title" value="<?php echo $game->title ?>" required/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="slug"><?php _e('Game slug') ?>:</label>
|
| | | <input type="text" class="form-control" name="slug" placeholder="game-title" value="<?php echo $game->slug ?>" minlength="3" maxlength="50" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="description"><?php _e('Description') ?>:</label>
|
| | | <textarea class="form-control" name="description" rows="3" required><?php echo $game->description ?></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="instructions"><?php _e('Instructions') ?>:</label>
|
| | | <textarea class="form-control" name="instructions" rows="3"><?php echo $game->instructions ?></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label"><?php _e('Game URL') ?>:</label>
|
| | | <input type="text" class="form-control" name="url" value="<?php echo $game->url ?>" minlength="3" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label"><?php _e('Game thumb_1') ?>:</label>
|
| | | <input type="text" class="form-control" name="thumb_1" value="<?php echo $game->thumb_1 ?>" minlength="3" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label"><?php _e('Game thumb_2') ?>:</label>
|
| | | <input type="text" class="form-control" name="thumb_2" value="<?php echo $game->thumb_2 ?>" minlength="3" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label"><?php _e('Game small thumbnail') ?>:</label>
|
| | | <input type="text" class="form-control" name="thumb_small" value="<?php echo $game->thumb_small ?>" minlength="3">
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="width"><?php _e('Game width') ?>:</label>
|
| | | <input type="number" class="form-control" name="width" value="<?php echo $game->width ?>" required/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="height"><?php _e('Game height') ?>:</label>
|
| | | <input type="number" class="form-control" name="height" value="<?php echo $game->height ?>" required/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="category"><?php _e('Category') ?>:</label>
|
| | | <select multiple class="form-control" name="category[]" size="8" required/>
|
| | | <?php
|
| | | $selected_categories = commas_to_array($game->category);
|
| | | $results = array();
|
| | | $data = Category::getList();
|
| | | $categories = $data['results'];
|
| | | foreach ($categories as $cat) {
|
| | | $selected = (in_array($cat->name, $selected_categories)) ? 'selected' : '';
|
| | | echo '<option '.$selected.'>'.$cat->name.'</option>';
|
| | | }
|
| | | ?>
|
| | | </select>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-4">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="tags"><?php _e('Tags') ?>:</label>
|
| | | <input type="text" class="form-control" name="tags" value="<?php echo $game->get_tags() ?>" id="tags-upload" placeholder="<?php _e('Separated by comma') ?>">
|
| | | </div>
|
| | | <div class="tag-list">
|
| | | <?php
|
| | | $tag_list = get_tags('usage');
|
| | | if(count($tag_list)){
|
| | | echo '<div class="mb-3">';
|
| | | foreach ($tag_list as $tag_name) {
|
| | | echo '<span class="badge rounded-pill bg-secondary btn-tag" data-target="tags-upload" data-value="'.$tag_name.'">'.$tag_name.'</span>';
|
| | | }
|
| | | echo '</div>';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | $extra_fields = get_extra_fields('game');
|
| | | if(count($extra_fields)){
|
| | | ?>
|
| | | <div class="extra-fields">
|
| | | <?php
|
| | | foreach ($extra_fields as $field) {
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
|
| | | <br>
|
| | | <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
|
| | | </label>
|
| | | <?php
|
| | | $default_value = $game->getExtraField($field['field_key']);
|
| | | $placeholder = $field['placeholder'];
|
| | | if($field['type'] === 'textarea'){
|
| | | echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
|
| | | } else if($field['type'] === 'number'){
|
| | | echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | } else if($field['type'] === 'text'){
|
| | | echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <input id="is_mobile" type="checkbox" name="is_mobile" <?php echo (isset($game->is_mobile) ? filter_var($game->is_mobile, FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
|
| | | <label class="form-label" for="is_mobile"><?php _e('Is mobile compatible') ?></label><br>
|
| | | <input id="published" type="checkbox" name="published" <?php echo (isset($game->published) ? filter_var($game->published, FILTER_VALIDATE_BOOLEAN) : true) ? 'checked' : ''; ?>>
|
| | | <label class="form-label" for="published"><?php _e('Published') ?></label><br>
|
| | | <p style="margin-left: 20px;" class="text-secondary">
|
| | | <?php _e('If unchecked, this game will set as Draft.') ?>
|
| | | </p>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save changes') ?></button>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <div class="row">
|
| | | <div class="col">
|
| | | <form class="has-validation">
|
| | | <input type="hidden" name="viewpage" value="gamelist" />
|
| | | <input type="hidden" name="action" value="search" />
|
| | | <div class="input-group has-validation">
|
| | | <input class="form-control rounded has-icon" type="text" placeholder="<?php _e('Search game') ?>..." name="key" minlength="2" required />
|
| | | <span class="input-icon">
|
| | | <i class="fa fa-search"></i>
|
| | | </span>
|
| | | </div>
|
| | | </form>
|
| | | </div>
|
| | | <div class="col">
|
| | | <form>
|
| | | <input type="hidden" name="viewpage" value="gamelist" />
|
| | | <input type="hidden" name="action" value="category" />
|
| | | <div class="input-group">
|
| | | <select name="key" class="form-select" onchange="this.form.submit()">
|
| | | <option value="" disabled selected hidden><?php _e('Category') ?></option>
|
| | | <?php
|
| | | $cur_cat_name = null;
|
| | | if(isset($_GET['action'])){
|
| | | if($_GET['action'] == 'category'){
|
| | | $cur_cat_name = esc_string($_GET['key']);
|
| | | }
|
| | | }
|
| | | $selected = '';
|
| | | $results = array();
|
| | | $data = Category::getList();
|
| | | $categories = $data['results'];
|
| | | foreach ($categories as $cat) {
|
| | | if(!is_null($cur_cat_name) && $cur_cat_name == $cat->name){
|
| | | $selected = 'selected';
|
| | | } else {
|
| | | $selected = '';
|
| | | }
|
| | | echo '<option '.$selected.'>'.ucfirst($cat->name).'</option>';
|
| | | }
|
| | | ?>
|
| | | </select>
|
| | | </div>
|
| | | </form>
|
| | | </div>
|
| | | <div class="col">
|
| | | <form class="has-validation">
|
| | | <input type="hidden" name="viewpage" value="gamelist" />
|
| | | <input type="hidden" name="action" value="source" />
|
| | | <div class="input-group has-validation">
|
| | | <input class="form-control rounded has-icon" type="text" placeholder="<?php _e('Source') ?>" name="key" minlength="2" required />
|
| | | <span class="input-icon">
|
| | | <i class="fa fa-code"></i>
|
| | | </span>
|
| | | </div>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | |
| | | <br>
|
| | | <div class="section section-full">
|
| | | <div class="table-responsive">
|
| | | <table class="table custom-table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th><?php _e('ID') ?></th>
|
| | | <th><?php _e('Thumbnail') ?></th>
|
| | | <th><?php _e('Mobile') ?></th>
|
| | | <th><?php _e('Game Name') ?></th>
|
| | | <th><?php _e('Category') ?></th>
|
| | | <th><?php _e('Source') ?></th>
|
| | | <th><?php _e('URL') ?></th>
|
| | | <th><?php _e('Action') ?></th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody>
|
| | | <?php
|
| | | $index = 0;
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = $_GET['page'];
|
| | | }
|
| | | $data = null;
|
| | | if(isset($_GET['action'])){
|
| | | if($_GET['action'] == 'search'){
|
| | | $data = Game::searchGame($_GET['key'], 20, 20*($cur_page-1));
|
| | | } elseif($_GET['action'] == 'category'){
|
| | | $cat_id = Category::getIdByName($_GET['key']);
|
| | | if(!is_null($cat_id)){
|
| | | $data = Category::getListByCategory($cat_id, 20, 20*($cur_page-1));
|
| | | }
|
| | | } elseif($_GET['action'] == 'source'){
|
| | | $data = Game::getListBySource($_GET['key'], 20, 20*($cur_page-1));
|
| | | }
|
| | | }
|
| | | if(is_null($data)) {
|
| | | $data = get_game_list('new', 20, 20*($cur_page-1));
|
| | | }
|
| | | $games = $data['results'];
|
| | | $total_game = $data['totalRows'];
|
| | | $total_page = $data['totalPages'];
|
| | | foreach ( $games as $game ) {
|
| | | $index++;
|
| | | $categories = $game->category;
|
| | | ?>
|
| | | <tr id="game-<?php echo esc_int($game->id)?>">
|
| | | <th scope="row"><?php echo esc_int($index+(20*($cur_page-1))); ?></th>
|
| | | <td>
|
| | | <?php echo esc_int($game->id) ?>
|
| | | </td>
|
| | | <td><img src="<?php echo get_small_thumb($game) ?>" width="60px" height="auto" class="gamelist"></td>
|
| | | <td class="td-ellipsis">
|
| | | <?php if($game->is_mobile){
|
| | | echo '<i class="text-success fas fa-check-circle"></i>';
|
| | | } else {
|
| | | echo '<i class="text-danger fas fa-times-circle"></i>';
|
| | | } ?>
|
| | | </td>
|
| | | <td class="td-ellipsis">
|
| | | <?php echo esc_string($game->title) ?>
|
| | | </td>
|
| | | <td class="td-ellipsis"><span class="categories"><?php echo esc_string($categories)?></span></td>
|
| | | <td>
|
| | | <?php echo esc_string($game->source) ?>
|
| | | </td>
|
| | | <td><a href="<?php echo get_permalink('game', $game->slug) ?>" target="_blank"><?php _e('Play') ?></a></td>
|
| | | <td>
|
| | | <span class="actions">
|
| | | <a class="editgame" href="dashboard.php?viewpage=gamelist&slug=edit&id=<?php echo esc_int($game->id)?>"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a>
|
| | | <a class="deletegame" data-id="<?php echo esc_int($game->id) ?>" href="#"><i class="fa fa-trash circle" aria-hidden="true"></i></a>
|
| | | </span>
|
| | | </td>
|
| | | </tr>
|
| | | <?php } ?>
|
| | | </tbody>
|
| | | </table>
|
| | | </div>
|
| | | <div class="general-wrapper">
|
| | | <p><?php _e('%a games in total.', esc_int($total_game)) ?></p>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation">
|
| | | <ul class="pagination pg-blue justify-content-center">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | $params = '';
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = $_GET['page'];
|
| | | }
|
| | | if(isset($_GET['action'])){
|
| | | $params .= "&action=".$_GET['action'];
|
| | | }
|
| | | if(isset($_GET['key'])){
|
| | | $params .= "&key=".$_GET['key'];
|
| | | }
|
| | | if($total_page){
|
| | | $max = 8;
|
| | | $start = 0;
|
| | | $end = $max;
|
| | | if($max > $total_page){
|
| | | $end = $total_page;
|
| | | } else {
|
| | | $start = $cur_page-$max/2;
|
| | | $end = $cur_page+$max/2;
|
| | | if($start < 0){
|
| | | $start = 0;
|
| | | }
|
| | | if($end - $start < $max-1){
|
| | | $end = $max;
|
| | | }
|
| | | if($end > $total_page){
|
| | | $end = $total_page;
|
| | | }
|
| | | }
|
| | | if($start > 0){
|
| | | echo '<li class="page-item"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=gamelist'.$params.'&page=1">1</a></li>';
|
| | | echo('<li class="page-item disabled"><span class="page-link">...</span></li>');
|
| | | }
|
| | | for($i = $start; $i<$end; $i++){
|
| | | $disabled = '';
|
| | | if($cur_page){
|
| | | if($cur_page == ($i+1)){
|
| | | $disabled = 'active disabled';
|
| | | }
|
| | | }
|
| | | echo '<li class="page-item '.$disabled.'"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=gamelist'.$params.'&page='.($i+1).'">'.($i+1).'</a></li>';
|
| | | }
|
| | | if($end < $total_page){
|
| | | echo('<li class="page-item disabled"><span class="page-link">...</span></li>');
|
| | | echo '<li class="page-item"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=gamelist'.$params.'&page='.($total_page).'">'.($total_page).'</a></li>';
|
| | | }
|
| | | }
|
| | | ?>
|
| | | </ul>
|
| | | </nav>
|
| | | <div class="text-center">
|
| | | <form>
|
| | | <input type="hidden" value="gamelist" name="viewpage" />
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="page">Page:</label>
|
| | | <select name="page" required>
|
| | | <?php
|
| | | if($total_page){
|
| | | for($i = 0; $i < $total_page; $i++ ){
|
| | | $selected = '';
|
| | | if(($i+1) == $cur_page){
|
| | | $selected = 'selected';
|
| | | }
|
| | | echo('<option value="'.($i+1).'" '.$selected.'>'.($i+1).'</option>');
|
| | | }
|
| | | }
|
| | | ?>
|
| | | </select>
|
| | | <input type="submit" value="Go"/>
|
| | | </div>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <br>
|
| | | <!-- DRAFT -->
|
| | | <?php
|
| | |
|
| | | $index = 0;
|
| | | $data = Game::getDraftList();
|
| | | $games = $data['results'];
|
| | | $total_game = $data['totalRows'];
|
| | | $total_page = $data['totalPages'];
|
| | |
|
| | | if(count($games) > 0){
|
| | |
|
| | | ?>
|
| | | <div class="section section-full">
|
| | | <h3 class="section-title">
|
| | | <?php _e('Draft') ?>
|
| | | </h3>
|
| | | <div class="table-responsive">
|
| | | <table class="table custom-table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th><?php _e('ID') ?></th>
|
| | | <th><?php _e('Thumbnail') ?></th>
|
| | | <th><?php _e('Mobile') ?></th>
|
| | | <th><?php _e('Game Name') ?></th>
|
| | | <th><?php _e('Category') ?></th>
|
| | | <th><?php _e('Source') ?></th>
|
| | | <th><?php _e('URL') ?></th>
|
| | | <th><?php _e('Action') ?></th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody>
|
| | | <?php
|
| | | foreach ( $games as $game ) {
|
| | | $index++;
|
| | | $categories = $game->category;
|
| | | ?>
|
| | | <tr id="game-<?php echo esc_int($game->id)?>">
|
| | | <th scope="row"><?php echo esc_int($index); ?></th>
|
| | | <td>
|
| | | <?php echo esc_int($game->id) ?>
|
| | | </td>
|
| | | <td><img src="<?php echo get_small_thumb($game) ?>" width="60px" height="auto" class="gamelist"></td>
|
| | | <td class="td-ellipsis">
|
| | | <?php if($game->is_mobile){
|
| | | echo '<i class="text-success fas fa-check-circle"></i>';
|
| | | } else {
|
| | | echo '<i class="text-danger fas fa-times-circle"></i>';
|
| | | } ?>
|
| | | </td>
|
| | | <td class="td-ellipsis">
|
| | | <?php echo esc_string($game->title) ?>
|
| | | </td>
|
| | | <td class="td-ellipsis"><span class="categories"><?php echo esc_string($categories)?></span></td>
|
| | | <td>
|
| | | <?php echo esc_string($game->source) ?>
|
| | | </td>
|
| | | <td><a href="<?php echo get_permalink('game', $game->slug) ?>" target="_blank"><?php _e('Play') ?></a></td>
|
| | | <td>
|
| | | <span class="actions">
|
| | | <a class="editgame" href="dashboard.php?viewpage=gamelist&slug=edit&id=<?php echo esc_int($game->id)?>"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a>
|
| | | <a class="deletegame" data-id="<?php echo esc_int($game->id) ?>" href="#"><i class="fa fa-trash circle" aria-hidden="true"></i></a>
|
| | | </span>
|
| | | </td>
|
| | | </tr>
|
| | | <?php } ?>
|
| | | </tbody>
|
| | | </table>
|
| | | </div>
|
| | | </div>
|
| | | <?php } ?> |
| New file |
| | |
| | | <?php
|
| | | if (isset($_GET['status'])) {
|
| | | if ($_GET['status'] == 'success') {
|
| | | show_alert(isset($_GET['info']) ? $_GET['info'] : 'Game successfully update!', 'success');
|
| | | } elseif ($_GET['status'] == 'deleted') {
|
| | | show_alert(isset($_GET['info']) ? $_GET['info'] : 'Game removed!', 'danger');
|
| | | }
|
| | | }
|
| | |
|
| | | if (isset($_GET['slug'])){
|
| | | if($_GET['slug'] === 'edit'){
|
| | | include 'core/gamelist-edit.php';
|
| | | }
|
| | | } else {
|
| | | include 'core/gamelist-list.php';
|
| | | }
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | $slug = isset($_GET['slug']) ? $_GET['slug'] : 'menus';
|
| | |
|
| | | $tab_list = array(
|
| | | 'menus' => 'Menus',
|
| | | 'widgets' => 'Widgets',
|
| | | );
|
| | |
|
| | | if($slug == 'menus'){
|
| | | require_once( 'core/menus.php' );
|
| | | } elseif($slug == 'widgets'){
|
| | | require_once( 'core/widgets.php' );
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | //include '../' .TEMPLATE_PATH . '/layout.php';
|
| | |
|
| | | if(isset($_POST['menu_data'])){
|
| | | if(USER_ADMIN && !ADMIN_DEMO){
|
| | | $array_menu = json_decode($_POST['menu_data'], true);
|
| | | $sql = "TRUNCATE TABLE menus";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | update_menu($array_menu);
|
| | | show_alert('Menu saved!', 'success');
|
| | | }
|
| | | }
|
| | |
|
| | | function update_menu($menu,$parent = 0)
|
| | | {
|
| | | global $conn;
|
| | | if (!empty($menu)) {
|
| | | foreach ($menu as $value) {
|
| | | $label = $value['label'];
|
| | | $name = 'top_nav';
|
| | | $url = (empty($value['url'])) ? '#' : $value['url'];
|
| | | $sql = "INSERT INTO menus (label, url, parent_id, name) VALUES (:label, :url, :parent, :name)";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':label', $label, PDO::PARAM_STR);
|
| | | $st->bindValue(':url', $url, PDO::PARAM_STR);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->bindValue(':parent', $parent, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $id = $conn->lastInsertId();
|
| | | if (array_key_exists('children', $value))
|
| | | update_menu($value['children'],$id);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function render_menu_item($id, $label, $url)
|
| | | {
|
| | | return '<li class="dd-item dd3-item" data-id="' . $id . '" data-label="' . $label . '" data-url="' . $url . '">' .
|
| | | '<div class="dd-handle dd3-handle" > Drag</div>' .
|
| | | '<div class="dd3-content"><span>' . $label . '</span>' .
|
| | | '<div class="item-edit"><i class="fa fa-pencil-alt" aria-hidden="true"></i></div>' .
|
| | | '</div>' .
|
| | | '<div class="item-settings d-none">' .
|
| | | '<div class="mb-3">' .
|
| | | '<label>Name</label><input type="text" class="form-control" name="navigation_label" value="' . $label . '">' .
|
| | | '</div>' .
|
| | | '<div class="mb-3">' .
|
| | | '<label>URL</label><input type="text" class="form-control" name="navigation_url" value="' . $url . '">' .
|
| | | '</div>' .
|
| | | '<p><a class="item-delete" href="javascript:;">Remove</a> | ' .
|
| | | '<a class="item-close" href="javascript:;">Close</a></p>' .
|
| | | '</div>';
|
| | |
|
| | | }
|
| | |
|
| | | function menu_tree($parent_id = 0)
|
| | | {
|
| | | global $conn;
|
| | | $items = '';
|
| | | $sql = "SELECT * FROM menus WHERE parent_id = :parent_id ORDER BY id ASC";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":parent_id", $parent_id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $result = $st->fetchAll();
|
| | | if (count($result)) {
|
| | | $items .= '<ol class="dd-list">';
|
| | | foreach ($result as $row) {
|
| | | $items .= render_menu_item($row['id'], $row['label'], $row['url']);
|
| | | $items .= menu_tree($row['id']);
|
| | | $items .= '</li>';
|
| | | }
|
| | | $items .= '</ol>';
|
| | | }
|
| | | return $items;
|
| | | }
|
| | |
|
| | | ?>
|
| | | <?php
|
| | | if(isset($_GET['status'])){
|
| | | $type = 'success';
|
| | | $message = '';
|
| | | if($_GET['status'] == 'saved'){
|
| | | $message = 'Layout saved!';
|
| | | }
|
| | | show_alert($message, $type);
|
| | | }
|
| | | ?>
|
| | | <div class="row">
|
| | | <div class="col-lg-8">
|
| | | <div class="section section-full">
|
| | | <ul class="nav nav-tabs custom-tab" role="tablist">
|
| | | <?php
|
| | | foreach($tab_list as $tab => $label){
|
| | | $active = '';
|
| | | if($tab == $slug){
|
| | | $active = 'active';
|
| | | }
|
| | | ?>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link <?php echo $active ?>" href="dashboard.php?viewpage=layout&slug=<?php echo $tab ?>"><?php _e($label) ?></a>
|
| | | </li>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </ul>
|
| | | <div class="general-wrapper">
|
| | | <div class="mb-4"></div>
|
| | | <form id="add-item">
|
| | | <div class="form-row">
|
| | | <div class="mb-3 col-md-6">
|
| | | <input type="text" name="name" class="form-control" placeholder="<?php _e('Name') ?>" required>
|
| | | </div>
|
| | | <div class="mb-3 col-md-6">
|
| | | <input type="text" name="url" class="form-control" placeholder="<?php _e('URL') ?>" required>
|
| | | </div>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('ADD MENU') ?></button>
|
| | | </form>
|
| | | <hr />
|
| | | <div class="dd" id="nestable">
|
| | | <?php
|
| | | $html_menu = menu_tree();
|
| | | echo (empty($html_menu)) ? '<ol class="dd-list"></ol>' : $html_menu;
|
| | | ?>
|
| | | </div>
|
| | | <hr />
|
| | | <div id="alert-menu-unsaved-changes" style="display: none;">
|
| | | <?php show_alert('Unsaved changes detected!', 'warning', false) ?>
|
| | | </div>
|
| | | <form action="dashboard.php?viewpage=layout" method="post">
|
| | | <input type="hidden" id="nestable-output" name="menu_data">
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('SAVE MENU') ?></button>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-4">
|
| | | <div class="section">
|
| | | <p><?php _e('Add menu items') ?></p>
|
| | | <div class="accordion" id="accordion-container">
|
| | | <div class="card">
|
| | | <div class="card-header" id="acc-head1">
|
| | | <a href="#" class="btn btn-header-link collapsed" data-bs-toggle="collapse" data-bs-target="#acc1"
|
| | | aria-expanded="true" aria-controls="acc1"><?php _e('Pages') ?></a>
|
| | | </div>
|
| | | <div id="acc1" class="collapse" aria-labelledby="acc-head1" data-bs-parent="#accordion-container">
|
| | | <div class="card-body">
|
| | | <form id="form-page-menu">
|
| | | <?php
|
| | |
|
| | | $data = Page::getList();
|
| | | $pages = $data['results'];
|
| | |
|
| | | if($pages){
|
| | | echo '<div class="ml-3">';
|
| | | foreach ($pages as $page) {
|
| | | echo '<div class="form-check">';
|
| | | echo '<input class="form-check-input" type="checkbox" name="'.$page->title.'" value="'.$page->slug.'" id="item-'.$page->slug.'" data-url="/'.SUB_FOLDER.str_replace( DOMAIN, '', get_permalink('page', $page->slug)).'">';
|
| | | echo '<label class="form-check-label" for="item-'.$page->slug.'">';
|
| | | echo $page->title;
|
| | | echo '</label></div>';
|
| | | }
|
| | | echo '</div><br>';
|
| | | echo '<input type="submit" class="btn btn-info btn-md" value="'. _t('ADD TO MENU') .'">';
|
| | | } else {
|
| | | _e('Empty');
|
| | | }
|
| | | ?>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="card">
|
| | | <div class="card-header" id="acc-head2">
|
| | | <a href="#" class="btn btn-header-link collapsed" data-bs-toggle="collapse" data-bs-target="#acc2"
|
| | | aria-expanded="true" aria-controls="acc2"><?php _e('Categories') ?></a>
|
| | | </div>
|
| | | <div id="acc2" class="collapse" aria-labelledby="acc-head2" data-bs-parent="#accordion-container">
|
| | | <div class="card-body">
|
| | | <form id="form-category-menu">
|
| | | <?php
|
| | |
|
| | | $data = Category::getList();
|
| | | $categories = $data['results'];
|
| | |
|
| | | if($categories){
|
| | | echo '<div class="ml-3">';
|
| | | foreach ($categories as $category) {
|
| | | echo '<div class="form-check">';
|
| | | echo '<input class="form-check-input" name="'.$category->name.'" type="checkbox" value="'.$category->slug.'" id="item-'.$category->slug.'" data-url="/'.SUB_FOLDER.str_replace( DOMAIN, '', get_permalink('category', $category->slug)).'">';
|
| | | echo '<label class="form-check-label" for="item-'.$category->slug.'">';
|
| | | echo $category->name;
|
| | | echo '</label></div>';
|
| | | }
|
| | | echo '</div><br>';
|
| | | echo '<input type="submit" class="btn btn-info btn-md" value="'. _t('ADD TO MENU') .'">';
|
| | | } else {
|
| | | _e('Empty');
|
| | | }
|
| | | ?>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | if(isset($_SESSION['message'])){
|
| | | show_alert($_SESSION['message']['text'], $_SESSION['message']['type']);
|
| | | unset($_SESSION['message']);
|
| | | }
|
| | |
|
| | | if(isset($_GET['id'])){
|
| | | $page = Page::getById($_GET['id']);
|
| | | if($page){
|
| | | ?>
|
| | | <div class="section section-full">
|
| | | <ul class="nav nav-tabs custom-tab" role="tablist">
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link active"><?php _e('Edit page') ?></a>
|
| | | </li>
|
| | | </ul>
|
| | | <div class="general-wrapper">
|
| | | <div class="editpage-wrapper">
|
| | | <form action="request.php" enctype="multipart/form-data" autocomplete="off" method="post">
|
| | | <input type="hidden" name="action" value="editPage">
|
| | | <input type="hidden" name="redirect" value="dashboard.php?viewpage=pages&slug=edit&id=<?php echo $page->id ?>">
|
| | | <input type="hidden" name="id" value="<?php echo $page->id ?>">
|
| | | <div class="row">
|
| | | <div class="col-md-8">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="title"><?php _e('Page title') ?>:</label>
|
| | | <input type="text" class="form-control" name="title" value="<?php echo $page->title ?>" required/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="slug"><?php _e('Page slug') ?>:</label>
|
| | | <input type="text" class="form-control" name="slug" placeholder="page-title" value="<?php echo $page->slug ?>" minlength="3" maxlength="50" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="content"><?php _e('Content') ?>:</label>
|
| | | <textarea class="form-control" name="content" placeholder="The HTML content of the page" maxlength="100000" rows="12" required><?php echo $page->content ?></textarea>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-4">
|
| | | <?php
|
| | | $extra_fields = get_extra_fields('page');
|
| | | if(count($extra_fields)){
|
| | | ?>
|
| | | <div class="extra-fields">
|
| | | <?php
|
| | | foreach ($extra_fields as $field) {
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="<?php echo $field['field_key'] ?>"><?php _e($field['title']) ?>:
|
| | | <br>
|
| | | <small class="fst-italic text-secondary"><?php echo $field['field_key'] ?></small>
|
| | | </label>
|
| | | <?php
|
| | | $default_value = $page->getExtraField($field['field_key']);
|
| | | $placeholder = $field['placeholder'];
|
| | | if($field['type'] === 'textarea'){
|
| | | echo '<textarea class="form-control" name="extra_fields['.$field['field_key'].']" rows="3">'.$default_value.'</textarea>';
|
| | | } else if($field['type'] === 'number'){
|
| | | echo '<input type="number" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | } else if($field['type'] === 'text'){
|
| | | echo '<input type="text" name="extra_fields['.$field['field_key'].']" class="form-control" placeholder="'.$placeholder.'" value="'.$default_value.'">';
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <input id="edit-nl2br" type="checkbox" name="nl2br" <?php echo $page->nl2br == 1 ? 'checked' : ''; ?>>
|
| | | <label class="form-label" for="edit-nl2br"><?php _e('Enable nl2br Formatting') ?></label>
|
| | | <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" aria-label="Convert line breaks in text to HTML <br> tags for proper formatting in the web view." data-bs-original-title="Convert line breaks in text to HTML <br> tags for proper formatting in the web view.">
|
| | | <i class="fas fa-question"></i>
|
| | | </span>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save changes') ?></button>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | | if (isset($_GET['status'])) {
|
| | | if ($_GET['status'] == 'success') {
|
| | | show_alert(isset($_GET['info']) ? $_GET['info'] : 'Page successfully add!', 'success');
|
| | | } elseif ($_GET['status'] == 'deleted') {
|
| | | show_alert(isset($_GET['info']) ? $_GET['info'] : 'Page removed!', 'danger');
|
| | | } elseif ($_GET['status'] == 'update') {
|
| | | show_alert(isset($_GET['info']) ? $_GET['info'] : 'Page successfully updated!', 'success');
|
| | | }
|
| | | }
|
| | |
|
| | | if (isset($_GET['slug']) && $_GET['slug'] == 'edit' && isset($_GET['id'])) {
|
| | | require('core/pages-edit.php');
|
| | | return;
|
| | | }
|
| | | ?>
|
| | |
|
| | | <div class="section section-full">
|
| | | <ul class="nav nav-tabs custom-tab" role="tablist">
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link active" data-bs-toggle="tab" href="#pagelist"><?php _e('Pages') ?></a>
|
| | | </li>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link" data-bs-toggle="tab" href="#addpage"><?php _e('Add page') ?></a>
|
| | | </li>
|
| | | </ul>
|
| | | <!-- Tab panes -->
|
| | | <div class="tab-content">
|
| | | <div class="tab-pane tab-container active" id="pagelist">
|
| | | <table class="table custom-table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th><?php _e('ID') ?></th>
|
| | | <th><?php _e('Title') ?></th>
|
| | | <th><?php _e('Created') ?></th>
|
| | | <th><?php _e('Slug') ?></th>
|
| | | <th><?php _e('URL') ?></th>
|
| | | <th><?php _e('Action') ?></th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody>
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = $_GET['page'];
|
| | | }
|
| | | $results = array();
|
| | | $data = Page::getList2(20, '', 20*($cur_page-1));
|
| | | $results['pages'] = $data['results'];
|
| | | $results['totalRows'] = $data['totalRows'];
|
| | | $index = 0;
|
| | | foreach ( $results['pages'] as $page ) {
|
| | | $index++;
|
| | | ?>
|
| | | <tr>
|
| | | <th scope="row"><?php echo esc_int($index); ?></th>
|
| | | <td>
|
| | | <?php echo esc_string($page->id)?>
|
| | | </td>
|
| | | <td>
|
| | | <?php echo esc_string($page->title)?>
|
| | | </td>
|
| | | <td>
|
| | | <?php echo $page->createdDate ?>
|
| | | </td>
|
| | | <td>
|
| | | <?php echo esc_string($page->slug)?>
|
| | | </td>
|
| | | <td><a href="<?php echo get_permalink('page', $page->slug) ?>" target="_blank"><?php _e('Visit') ?></a></td>
|
| | | <td><span class="actions">
|
| | | <a class="editpage" href="dashboard.php?viewpage=pages&slug=edit&id=<?php echo esc_int($page->id)?>" id="<?php echo esc_int($page->id)?>"><i class="fa fa-pencil-alt circle" aria-hidden="true"></i></a><a class="deletepage" href="#" id="<?php echo esc_int($page->id)?>"><i class="fa fa-trash circle" aria-hidden="true"></i></a></span>
|
| | | </td>
|
| | | </tr>
|
| | | <?php }
|
| | | ?>
|
| | | </tbody>
|
| | | </table>
|
| | | <div class="general-wrapper">
|
| | | <p><?php _e('%a pages in total.', esc_int($data['totalRows'])) ?></p>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation">
|
| | | <ul class="pagination pg-blue justify-content-center">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = $_GET['page'];
|
| | | }
|
| | | $total_page = $data['totalPages'];
|
| | | if($total_page){
|
| | | $max = 8;
|
| | | $start = 0;
|
| | | $end = $max;
|
| | | if($max > $total_page){
|
| | | $end = $total_page;
|
| | | } else {
|
| | | $start = $cur_page-$max/2;
|
| | | $end = $cur_page+$max/2;
|
| | | if($start < 0){
|
| | | $start = 0;
|
| | | }
|
| | | if($end - $start < $max-1){
|
| | | $end = $max;
|
| | | }
|
| | | if($end > $total_page){
|
| | | $end = $total_page;
|
| | | }
|
| | | }
|
| | | if($start > 0){
|
| | | echo '<li class="page-item"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=pages&page=1">1</a></li>';
|
| | | echo('<li class="page-item disabled"><span class="page-link">...</span></li>');
|
| | | }
|
| | | for($i = $start; $i<$end; $i++){
|
| | | $disabled = '';
|
| | | if($cur_page){
|
| | | if($cur_page == ($i+1)){
|
| | | $disabled = 'active disabled';
|
| | | }
|
| | | }
|
| | | echo '<li class="page-item '.$disabled.'"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=pages&page='.($i+1).'">'.($i+1).'</a></li>';
|
| | | }
|
| | | if($end < $total_page){
|
| | | echo('<li class="page-item disabled"><span class="page-link">...</span></li>');
|
| | | echo '<li class="page-item"><a class="page-link" href="'.DOMAIN.'admin/dashboard.php?viewpage=pages&page='.($total_page).'">'.($total_page).'</a></li>';
|
| | | }
|
| | | }
|
| | | ?>
|
| | | </ul>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="tab-pane tab-container fade" id="addpage">
|
| | | <div class="general-wrapper">
|
| | | <form id="form-newpage" method="post">
|
| | | <div class="row">
|
| | | <div class="col-12">
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="title"><?php _e('Page Title') ?>:</label>
|
| | | <input type="text" class="form-control" id="newpagetitle" name="title" placeholder="Name of the page" required autofocus maxlength="255" value=""/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="slug"><?php _e('Page Slug') ?>:</label>
|
| | | <input type="text" class="form-control" id="newpageslug" name="slug" placeholder="Page url ex: this-is-sample-page" required autofocus maxlength="255" value=""/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="content"><?php _e('Content') ?>:</label>
|
| | | <textarea class="form-control" name="content" rows="12" placeholder="The HTML content of the page" required maxlength="100000"></textarea>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="title"><?php _e('Created Date') ?>:</label>
|
| | | <input type="date" class="form-control" name="createdDate" placeholder="YYYY-MM-DD" required maxlength="10" value="<?php echo date( "Y-m-d" ) ?>" />
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <input id="edit-nl2br" type="checkbox" name="nl2br" checked>
|
| | | <label class="form-label" for="edit-nl2br"><?php _e('Enable nl2br Formatting') ?></label>
|
| | | <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" aria-label="Convert line breaks in text to HTML <br> tags for proper formatting in the web view." data-bs-original-title="Convert line breaks in text to HTML <br> tags for proper formatting in the web view.">
|
| | | <i class="fas fa-question"></i>
|
| | | </span>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary" name="saveChanges" value="<?php _e('Publish') ?>" />
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <!-- Modal -->
|
| | | <div class="modal fade" id="edit-page" tabindex="-1" role="dialog" aria-labelledby="edit-page-modal-label" aria-hidden="true">
|
| | | <div class="modal-dialog" role="document">
|
| | | <div class="modal-content">
|
| | | <div class="modal-header">
|
| | | <h5 class="modal-title" id="edit-page-label"><?php _e('Edit page') ?></h5>
|
| | | <button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button>
|
| | | </div>
|
| | | <div class="modal-body">
|
| | | <form id="form-editpage">
|
| | | <input type="hidden" id="edit-id" name="id" value=""/>
|
| | | <input type="hidden" id="edit-createdDate" name="createdDate" value=""/>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="title"><?php _e('Page Title') ?>:</label>
|
| | | <input type="text" class="form-control" id="edit-title" name="title" placeholder="Name of the page" required minlength="3" maxlength="255" value=""/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="slug"><?php _e('Page Slug') ?>:</label>
|
| | | <input type="text" class="form-control" id="edit-slug" name="slug" placeholder="Page url ex: this-is-sample-page" required minlength="3" maxlength="255" value=""/>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label" for="content"><?php _e('Content') ?>:</label>
|
| | | <textarea class="form-control" name="content" id="edit-content" rows="12" placeholder="The HTML content of the page" required minlength="3" maxlength="100000"></textarea>
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary" value="<?php _e('Save changes') ?>" />
|
| | | <input type="button" class="btn btn-secondary" data-bs-dismiss="modal" value="<?php _e('Close') ?>" />
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | if(ADMIN_DEMO){
|
| | | echo('Restricted for "DEMO" mode.');
|
| | | return;
|
| | | }
|
| | |
|
| | | if(isset($_GET['name'])){
|
| | | $_GET['name'] = esc_slug($_GET['name']);
|
| | | if(is_plugin_exist($_GET['name'])){
|
| | | $plugin = get_plugin_info($_GET['name']);
|
| | | echo '<h4 class="plugin-title">';
|
| | | echo $plugin['name'];
|
| | | if(isset($plugin['documentation'])){
|
| | | if (filter_var($plugin['documentation'], FILTER_VALIDATE_URL)) {
|
| | | echo '<a href="'.$plugin['documentation'].'" target="_blank" class="tooltip-doc-plugin" data-bs-toggle="tooltip" data-bs-placement="left" title="'._t('Click here to visit plugin manual or documentation.').'"><i class="fas fa-question"></i></a>';
|
| | | }
|
| | | }
|
| | | echo '</h4>';
|
| | | if(file_exists($plugin['path'] . '/admin-page.php')){
|
| | | require_once($plugin['path'] . '/admin-page.php');
|
| | | } else {
|
| | | // since v1.7.8 page.php is deprecated, use admin-page.php instead
|
| | | // this used for backward compatibility
|
| | | require_once($plugin['path'] . '/page.php');
|
| | | }
|
| | | } else {
|
| | | echo('<div class="section">');
|
| | | _e('Plugin %a is missing or removed.', $_GET['name']);
|
| | | echo('</div>');
|
| | | }
|
| | | } else {
|
| | | if(isset($_GET['status'])){
|
| | | if($_GET['status'] == 'success'){
|
| | | show_alert(isset($_GET['info']) ? $_GET['info'] : 'Plugin successfully installed!', 'success');
|
| | | } elseif($_GET['status'] == 'warning'){
|
| | | show_alert(isset($_GET['info']) ? $_GET['info'] : 'Failed to install!', 'warning');
|
| | | } elseif($_GET['status'] == 'error'){
|
| | | show_alert(isset($_GET['info']) ? $_GET['info'] : 'Error!', 'danger');
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | | <div id="action-alert" style="display: none;">
|
| | | <?php show_alert('Plugin updated!', 'success') ?>
|
| | | </div>
|
| | | <div class="row">
|
| | | <div class="col-lg-8">
|
| | | <div class="section section-full">
|
| | | <?php
|
| | |
|
| | | if(count($plugin_list) > 0){ ?>
|
| | | <div class="table-responsive">
|
| | | <table class="table custom-table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th><?php _e('Plugin') ?></th>
|
| | | <th><?php _e('Description') ?></th>
|
| | | <th><?php _e('Action') ?></th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody>
|
| | | <?php
|
| | | |
| | | $index = 0;
|
| | | foreach ($plugin_list as $plugin) {
|
| | | $index++;
|
| | | $is_active = substr($plugin['dir_name'], 0, 1) == '_' ? false : true;
|
| | | $plugin_class = $is_active ? 'plugin-active' : 'plugin-inactive';
|
| | | ?>
|
| | | <tr class='<?php echo $plugin_class ?>'>
|
| | | <th scope="row"><?php echo $index ?></th>
|
| | | <td>
|
| | | <strong><?php echo $plugin['name'] ?> <i class="plugin-update-icon text-success fas fa-exclamation-circle d-none t-<?php echo $plugin['dir_name'] ?>"></i></strong>
|
| | | <br>
|
| | | Version <?php echo $plugin['version'] ?> | By <a href="<?php echo $plugin['website'] ?>" target="_blank"><?php echo $plugin['author'] ?></a>
|
| | | </td>
|
| | | <td><?php echo $plugin['description'] ?></td>
|
| | | <td><?php if($is_active) {
|
| | | echo('<a href="#" id="'.$plugin['dir_name'].'" class="deactivate-plugin">'._t('Deactivate').'</a>');
|
| | | } else {
|
| | | echo('<a href="#" id="'.$plugin['dir_name'].'" class="activate-plugin">'._t('Activate').'</a>');
|
| | | } ?> | <a href="#" id="<?php echo $plugin['dir_name'] ?>" class="remove-plugin text-danger"><?php _e('Remove') ?></a>
|
| | | <div class="plugin-update-btn d-none b-<?php echo $plugin['dir_name'] ?>">
|
| | | <a href="#" data-id="<?php echo $plugin['dir_name'] ?>" class="update-plugin text-success"><?php _e('Update') ?></a>
|
| | | </div>
|
| | | </td>
|
| | | </tr>
|
| | | <?php
|
| | | }
|
| | |
|
| | | ?>
|
| | | </tbody>
|
| | | </table>
|
| | | </div>
|
| | | <?php } else {
|
| | | echo '<div class="general-wrapper">';
|
| | | _e('No plugins installed!');
|
| | | echo '</div>';
|
| | | } ?>
|
| | | |
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-4">
|
| | | <div class="section">
|
| | | <?php _e('Add new plugin') ?><br><br>
|
| | | <form id="form-upload-plugin" action="request.php" method="post" enctype="multipart/form-data">
|
| | | <div class="mb-3">
|
| | | <input type="hidden" name="action" value="pluginAction">
|
| | | <input type="hidden" name="plugin_action" value="upload_plugin">
|
| | | <input type="hidden" name="redirect" value="dashboard.php?viewpage=plugin">
|
| | | <label class="form-label" for="plugin_file"><?php _e('Upload plugin') ?> (zip):</label><br>
|
| | | <input type="file" class="form-control" name="plugin_file" accept=".zip"/><br>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload') ?></button>
|
| | | </div>
|
| | | </form>
|
| | | <button type="submit" class="check-plugin-update btn btn-info btn-md" data-none="<?php _e('No updates') ?>" data-avail="<?php _e('Update available') ?>"><?php _e('Check plugin updates') ?></button>
|
| | | <div class="mb-3"></div>
|
| | | <div class="plugin-repository-wrapper">
|
| | | <button type="submit" class="load-plugin-repo btn btn-success btn-md"><?php _e('Load plugin repository') ?></button>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <!-- Modal -->
|
| | | <div class="modal fade" id="plugin-repo" tabindex="-1" role="dialog" aria-labelledby="plugin-repo-modal-label" aria-hidden="true">
|
| | | <div class="modal-dialog" role="document">
|
| | | <div class="modal-content">
|
| | | <div class="modal-header">
|
| | | <h5 class="modal-title" id="plugin-repo-label"><?php _e('Plugin Repository') ?></h5>
|
| | | <button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button>
|
| | | </div>
|
| | | <div class="modal-body">
|
| | | <div class="plugin-repo-search">
|
| | | <input type="text" class="form-control" placeholder="<?php _e('Search plugin') ?>" id="plugin-search">
|
| | | </div>
|
| | | <div class="mb-3"></div>
|
| | | <div class="plugin-repo-container"></div>
|
| | | <div class="mb-3"></div>
|
| | | <input type="button" class="btn btn-secondary" data-bs-dismiss="modal" value="<?php _e('Close') ?>" />
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <script type="text/javascript">
|
| | | $(document).ready(function(){
|
| | | setTimeout(()=>{
|
| | | $('button.check-plugin-update').click();
|
| | | }, 100);
|
| | | $('button.load-plugin-repo').click(function() {
|
| | | let btn = $(this);
|
| | | $(this).hide();
|
| | | let wrapper = $('.plugin-repo-container');
|
| | | wrapper.html('<h3>Loading...</h3>');
|
| | | $.ajax({
|
| | | url: 'includes/ajax-actions.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {action: 'get_plugin_repo_list'},
|
| | | complete: function (data) {
|
| | | if(data.status == 200){
|
| | | $('#plugin-repo').modal('show');
|
| | | wrapper.html(data.responseText);
|
| | | //
|
| | | $('a.add-plugin-repo').click(function() {
|
| | | window.open('request.php?action=pluginAction&reqversion='+$(this).data('reqversion')+'&url='+$(this).data('url')+'&plugin_action=add_plugin&redirect=dashboard.php?viewpage=plugin', '_self');
|
| | | });
|
| | | } else {
|
| | | wrapper.html('<h3>Failed to load!</h3>');
|
| | | }
|
| | | btn.show();
|
| | | }
|
| | | });
|
| | | });
|
| | | $('#plugin-search').bind('keydown keypress keyup change', function() {
|
| | | let value = this.value.toLowerCase();
|
| | | if(value.length){
|
| | | let $tr = $(".plugin-repo-container tr").hide();
|
| | | $tr.filter(function() {
|
| | | return ($(this).find('.plugin-repo-name').text().toLowerCase()).indexOf(value) >= 0;
|
| | | }).show();
|
| | | }
|
| | | });
|
| | | });
|
| | | </script>
|
| | | <?php
|
| | | }
|
| | |
|
| | | ?>
|
| | | |
| New file |
| | |
| | | <?php
|
| | | $warning_list = get_admin_warning();
|
| | | if(!empty($warning_list)){
|
| | | echo('<div class="site-warning">');
|
| | | foreach ($warning_list as $val) {
|
| | | show_alert($val, 'warning');
|
| | | }
|
| | | echo('</div>');
|
| | | }
|
| | | if(isset($_GET['status'])){
|
| | | // Old method
|
| | | $type = 'success';
|
| | | $message = '';
|
| | | if($_GET['status'] == 'saved'){
|
| | | $message = 'Settings saved!';
|
| | | } elseif($_GET['status'] == 'error'){
|
| | | $type = 'danger';
|
| | | $message = 'Error!';
|
| | | if(isset($_GET['info'])){
|
| | | $message = $_GET['info'];
|
| | | }
|
| | | }
|
| | | if(isset($_SESSION['message'])&&($_SESSION['classmessage'])){
|
| | | show_alert($_SESSION['message'], $_SESSION['classmessage']);
|
| | | unset($_SESSION['message']);
|
| | | } else {
|
| | | show_alert($message, $type);
|
| | | }
|
| | | }
|
| | | if(isset($_SESSION['message'])){
|
| | | // [New] preferred method
|
| | | if(isset($_SESSION['message']['text'])){
|
| | | $type = 'success';
|
| | | if($_SESSION['message']['type'] === 'error' || $_SESSION['message']['type'] === 'danger'){
|
| | | $type = 'danger';
|
| | | }
|
| | | show_alert($_SESSION['message']['text'], $type);
|
| | | }
|
| | | unset($_SESSION['message']);
|
| | | }
|
| | | ?>
|
| | | <div class="section section-full">
|
| | | <ul class="nav nav-tabs custom-tab" role="tablist">
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link active" data-bs-toggle="tab" href="#general"><?php _e('General') ?></a>
|
| | | </li>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link" data-bs-toggle="tab" href="#advanced"><?php _e('Advanced') ?></a>
|
| | | </li>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link" data-bs-toggle="tab" href="#user"><?php _e('User') ?></a>
|
| | | </li>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link" data-bs-toggle="tab" href="#custom-path"><?php _e('Custom path') ?></a>
|
| | | </li>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link" data-bs-toggle="tab" href="#listings"><?php _e('Listings') ?></a>
|
| | | </li>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link" data-bs-toggle="tab" href="#other"><?php _e('Other') ?></a>
|
| | | </li>
|
| | | </ul>
|
| | | <div class="general-wrapper">
|
| | | <div class="tab-content">
|
| | | <div class="tab-pane tab-container active" id="general">
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="saveSettings">
|
| | | <input type="hidden" name="category" value="general">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
|
| | | <div class="mb-3 row">
|
| | | <label for="title" class="col-sm-2 col-form-label"><?php _e('Site title') ?>:</label>
|
| | | <div class="col-sm-10">
|
| | | <input type="text" class="form-control" name="data[site_title]" minlength="4" value="<?php echo esc_string(SITE_TITLE) ?>" required>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mb-3 row">
|
| | | <label for="description" class="col-sm-2 col-form-label"><?php _e('Site description') ?>:</label>
|
| | | <div class="col-sm-10">
|
| | | <input type="text" class="form-control" name="data[site_description]" minlength="4" value="<?php echo esc_string(SITE_DESCRIPTION) ?>" required>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mb-3 row">
|
| | | <label for="meta_description" class="col-sm-2 col-form-label"><?php _e('Meta description') ?>:</label>
|
| | | <div class="col-sm-10">
|
| | | <input type="text" class="form-control" name="data[meta_description]" minlength="4" value="<?php echo esc_string(META_DESCRIPTION) ?>" required>
|
| | | </div>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save changes') ?></button>
|
| | | </form>
|
| | | <br>
|
| | | <form id="form-updatelogo" action="request.php" method="post" enctype="multipart/form-data" onsubmit="return validateForm('form-updatelogo')" >
|
| | | <div class="mb-3">
|
| | | <input type="hidden" name="action" value="updateLogo">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
|
| | | <label for="logo" class="form-label"><?php _e('Site logo') ?>:</label><br>
|
| | | <img src="<?php echo DOMAIN . SITE_LOGO .'?v='.date('his') ?>" style="background-color: #aebfbc; padding: 10px"><br><br>
|
| | | <input type="file" class="form-control" name="logofile" accept=".png, .jpg, .jpeg, .gif"/>
|
| | | <div id="validation-message-form-updatelogo" class="text-danger"></div><br>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload') ?></button>
|
| | | <br><br>
|
| | | </div>
|
| | | </form>
|
| | | <form id="form-updateloginlogo" action="request.php" method="post" enctype="multipart/form-data" onsubmit="return validateForm('form-updateloginlogo')">
|
| | | <div class="mb-3">
|
| | | <input type="hidden" name="action" value="updateLoginLogo">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
|
| | | <label for="login-logo" class="form-label"><?php _e('Login logo') ?>:</label><br>
|
| | | <img src="<?php echo DOMAIN . 'images/login-logo.png?v='.date('his') ?>" style="background-color: #aebfbc; padding: 10px"><br><br>
|
| | | <input type="file" class="form-control" name="logofile" accept=".png" />
|
| | | <div id="validation-message-form-updateloginlogo" class="text-danger"></div><br>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload') ?></button>
|
| | | <br><br>
|
| | | </div>
|
| | | </form>
|
| | | <form id="form-updateicon" action="request.php" method="post" enctype="multipart/form-data">
|
| | | <div class="mb-3">
|
| | | <input type="hidden" name="action" value="updateIcon">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
|
| | | <label for="icon" class="form-label"><?php _e('Site icon') ?> (.ico file format):</label><br>
|
| | | <img src="<?php echo DOMAIN . 'favicon.ico'.'?v='.date('his') ?>" style="background-color: #aebfbc; padding: 10px; width: 50px;"><br><br>
|
| | | <input type="file" class="form-control" name="iconfile" accept=".ico" required /><br>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Upload') ?></button>
|
| | | <br><br>
|
| | | </div>
|
| | | </form>
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="saveSettings">
|
| | | <input type="hidden" name="category" value="general">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
|
| | | <div class="mb-3 row">
|
| | | <label for="code" class="col-sm-3 col-form-label"><?php _e('Site language') ?>:</label>
|
| | | <div class="col-sm-9">
|
| | | <?php
|
| | |
|
| | | $lang_list = ['en'];
|
| | | if(file_exists('../locales')){
|
| | | $files = scan_files('locales');
|
| | | foreach ($files as $file) {
|
| | | if(pathinfo($file, PATHINFO_EXTENSION) == 'json'){
|
| | | $lang_list[] = pathinfo($file, PATHINFO_FILENAME);
|
| | | }
|
| | | }
|
| | | }
|
| | | if(file_exists('../'.TEMPLATE_PATH.'/locales')){
|
| | | $files = scan_files(TEMPLATE_PATH.'/locales');
|
| | | foreach ($files as $file) {
|
| | | if(pathinfo($file, PATHINFO_EXTENSION) == 'json'){
|
| | | if(!in_array(pathinfo($file, PATHINFO_FILENAME), $lang_list)){
|
| | | $lang_list[] = pathinfo($file, PATHINFO_FILENAME);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | | <select class="form-select" name="data[language]" required>
|
| | | <?php
|
| | | foreach ($lang_list as $value) {
|
| | | $selected = '';
|
| | | if($value == get_setting_value('language')){
|
| | | $selected = 'selected';
|
| | | }
|
| | | echo '<option value="'.$value.'" '.$selected.'>'.strtoupper($value).'</option>';
|
| | | }
|
| | | ?>
|
| | | </select>
|
| | | </div>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
|
| | | </form>
|
| | | <div class="mb-3"></div>
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="updatePurchaseCode">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings">
|
| | | <div class="mb-3 row">
|
| | | <label for="code" class="col-sm-3 col-form-label"><span class="text-danger">*</span> <?php _e('Item purchase code') ?>:</label>
|
| | | <div class="col-sm-9">
|
| | | <input type="text" class="form-control" name="code" minlength="5" placeholder="101010-10aa-0101-01010-a1b010a01b10" value="<?php echo (check_purchase_code() ? '********************' : '') ?>" required>
|
| | | </div>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Update') ?></button>
|
| | | </form>
|
| | | </div>
|
| | |
|
| | | <div class="tab-pane tab-container fade" id="advanced">
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="saveSettings">
|
| | | <input type="hidden" name="category" value="advanced">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#advanced">
|
| | | <?php
|
| | |
|
| | | $group = get_setting_group('advanced');
|
| | | foreach ($group as $item) {
|
| | | if($item['type'] == 'bool'){
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <input id="<?php echo $item['name'] ?>" type="checkbox" name="data[<?php echo $item['name'] ?>]" value="1" <?php if ((int)$item['value']) { echo 'checked'; } ?>>
|
| | | <label for="<?php echo $item['name'] ?>"><?php _e($item['label']) ?></label>
|
| | | <?php if($item['tooltip'] != ''){ ?>
|
| | | <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" title="<?php echo $item['tooltip'] ?>">
|
| | | <i class="fas fa-question"></i>
|
| | | </span>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
|
| | | </form>
|
| | | <div class="mb-3"></div>
|
| | | <form action="../sitemap.php" method="post" class="<?php if( !PRETTY_URL ) echo('disabled-list') ?>">
|
| | | <div class="mb-3">
|
| | | <label><?php _e('Generate sitemap') ?>:</label><br>
|
| | | <p>Exclude all page url. only work if Pretty URL enabled.</p>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Generate sitemap') ?></button>
|
| | | </div>
|
| | | </form>
|
| | | </div>
|
| | |
|
| | | <div class="tab-pane tab-container fade" id="user">
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="saveSettings">
|
| | | <input type="hidden" name="category" value="user">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#user">
|
| | | <?php
|
| | |
|
| | | $group = get_setting_group('user');
|
| | | foreach ($group as $item) {
|
| | | if($item['type'] == 'bool'){
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <input id="<?php echo $item['name'] ?>" type="checkbox" name="data[<?php echo $item['name'] ?>]" value="1" <?php if ((int)$item['value']) { echo 'checked'; } ?>>
|
| | | <label for="<?php echo $item['name'] ?>"><?php _e($item['label']) ?></label>
|
| | | <?php if($item['tooltip'] != ''){ ?>
|
| | | <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" title="<?php echo $item['tooltip'] ?>">
|
| | | <i class="fas fa-question"></i>
|
| | | </span>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
|
| | | </form>
|
| | | </div>
|
| | |
|
| | | <div class="tab-pane tab-container fade" id="custom-path">
|
| | | <p>Custom URL base for page or category name.</p>
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="set_custom_path">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#custom-path">
|
| | | <?php
|
| | |
|
| | | $list = ['game','category','page','search','tag','login','register','user','post','full','splash'];
|
| | | foreach ($list as $name) {
|
| | | ?>
|
| | | <div class="mb-3 row">
|
| | | <label for="<?php echo $name ?>" class="col-sm-2 col-form-label"><?php echo $name ?></label>
|
| | | <div class="col-sm-6 col-md-4">
|
| | | <input type="text" class="form-control" name="list[]" value="<?php echo (get_custom_path($name) != $name) ? get_custom_path($name) : '' ?>">
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | |
|
| | | ?>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
|
| | | </form>
|
| | | </div>
|
| | |
|
| | | <div class="tab-pane tab-container fade" id="listings">
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="saveSettings">
|
| | | <input type="hidden" name="category" value="listings">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#listings">
|
| | | <?php
|
| | |
|
| | | $group = get_setting_group('listings');
|
| | | foreach ($group as $item) {
|
| | | if($item['type'] == 'number'){
|
| | | ?>
|
| | | <div class="mb-3 row">
|
| | | <label class="col-sm-3 col-form-label"><?php _e($item['label']) ?></label>
|
| | | <div class="col-sm-2">
|
| | | <input type="number" class="form-control" name="data[<?php echo $item['name'] ?>]" value="<?php echo esc_int($item['value']) ?>">
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
|
| | | </form>
|
| | | </div>
|
| | |
|
| | | <div class="tab-pane tab-container fade" id="other">
|
| | | <form action="request.php" method="post">
|
| | | <input type="hidden" name="action" value="saveSettings">
|
| | | <input type="hidden" name="category" value="other">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=settings#other">
|
| | | <?php
|
| | |
|
| | | $group = get_setting_group('other');
|
| | | foreach ($group as $item) {
|
| | | if($item['type'] == 'bool'){
|
| | | ?>
|
| | | <div class="mb-3">
|
| | | <input id="<?php echo $item['name'] ?>" type="checkbox" name="data[<?php echo $item['name'] ?>]" value="1" <?php if ((int)$item['value']) { echo 'checked'; } ?>>
|
| | | <label for="<?php echo $item['name'] ?>"><?php _e($item['label']) ?></label>
|
| | | <?php if($item['tooltip'] != ''){ ?>
|
| | | <span class="tooltip-info" data-bs-toggle="tooltip" data-bs-placement="right" title="<?php echo $item['tooltip'] ?>">
|
| | | <i class="fas fa-question"></i>
|
| | | </span>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Save') ?></button>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <!-- script validation file -->
|
| | | <script>
|
| | | document.addEventListener('DOMContentLoaded', (event) => {
|
| | | let hash = window.location.hash;
|
| | | if (hash) {
|
| | | let tabEl = document.querySelector(`.nav-link[href="${hash}"]`)
|
| | | let tab = new bootstrap.Tab(tabEl)
|
| | | tab.show()
|
| | | }
|
| | | });
|
| | | function validateForm(formId) {
|
| | | var fileInput = document.getElementById(formId).elements.logofile;
|
| | | var validationMessage = document.getElementById('validation-message-' + formId);
|
| | | if (!fileInput.value) {
|
| | | validationMessage.innerHTML = 'Please select a file.';
|
| | | return false;
|
| | | }
|
| | | return true;
|
| | | }
|
| | | </script>
|
| | | <!-- end script validation --> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | if(file_exists( ABSPATH . TEMPLATE_PATH . '/options.php' )){ // Fix bug open the page but there is no theme options
|
| | | ?>
|
| | | <div class="section section-full">
|
| | | <div class="general-wrapper">
|
| | | <?php
|
| | | if(file_exists( ABSPATH . TEMPLATE_PATH . '/options.php' )){
|
| | | require_once( ABSPATH . TEMPLATE_PATH . '/options.php' );
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | } else {
|
| | | echo '<h3>'._t('Current active theme doesn\'t support theme options!').'</h3>';
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | function is_theme_has_thumbail($theme_name){
|
| | |
|
| | | $path = ABSPATH . 'content/themes/' . $theme_name;
|
| | |
|
| | | if(file_exists( $path . '/thumbnail.png' )){
|
| | | return true;
|
| | | }
|
| | | }
|
| | |
|
| | | if(!USER_ADMIN){
|
| | | die('P');
|
| | | }
|
| | |
|
| | | if(isset($_POST['action'])){
|
| | | if( ADMIN_DEMO ){
|
| | | echo 'Restricted for DEMO mode';
|
| | | return;
|
| | | }
|
| | | if($_POST['action'] == 'upload_theme_file'){
|
| | | if(check_purchase_code()){
|
| | | echo '<h4>'._t('Going to install theme file').'</h4><br>';
|
| | | if (!file_exists('tmp')) {
|
| | | mkdir('tmp', 0755, true);
|
| | | }
|
| | | if(file_exists('tmp/tmp_theme')){
|
| | | delete_files('tmp/tmp_theme/');
|
| | | }
|
| | | if (!file_exists('tmp/tmp_theme')) {
|
| | | mkdir('tmp/tmp_theme', 0755, true);
|
| | | }
|
| | | if (!file_exists('tmp/tmp_theme/files')) {
|
| | | mkdir('tmp/tmp_theme/files', 0755, true);
|
| | | }
|
| | | $enter_epc = false;
|
| | | $target_dir = "tmp/tmp_theme/";
|
| | | $extract_dir = "tmp/tmp_theme/files/";
|
| | | $target_file = $target_dir . strtolower(str_replace(' ', '-', basename($_FILES["theme_file"]["name"])));
|
| | | $theme_dir = str_replace('.zip', '', basename($_FILES["theme_file"]["name"]));
|
| | | $uploadOk = 1;
|
| | | $error = [];
|
| | | $warning = [];
|
| | | $json;
|
| | | $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
|
| | | if($fileType != 'zip'){
|
| | | $uploadOk = 0;
|
| | | $error[] = 'File format must be zip!';
|
| | | }
|
| | | if($uploadOk) {
|
| | | if (move_uploaded_file($_FILES["theme_file"]["tmp_name"], $target_file)) {
|
| | | $zip = new ZipArchive;
|
| | | $res = $zip->open($target_file);
|
| | | if ($res === TRUE) {
|
| | | $zip->extractTo($extract_dir);
|
| | | $zip->close();
|
| | |
|
| | | if(file_exists(ABSPATH . 'content/themes/' . $theme_dir)){
|
| | | $warning[] = 'Theme folder for this theme is already exist';
|
| | | $warning[] = 'Existing theme folder will be overriden';
|
| | | }
|
| | | if(!file_exists( $extract_dir . 'info.json' )){
|
| | | $error[] = 'Theme info (info.json) doesn\'t exist';
|
| | | } else {
|
| | | $json = json_decode(file_get_contents($extract_dir . 'info.json'), true);
|
| | | }
|
| | | if(!file_exists( $extract_dir . 'home.php' )){
|
| | | $error[] = 'home.php doesn\'t exist';
|
| | | }
|
| | | if(!file_exists( $extract_dir . 'page.php' )){
|
| | | $error[] = 'page.php doesn\'t exist';
|
| | | }
|
| | | if(!file_exists( $extract_dir . 'game.php' )){
|
| | | $error[] = 'game.php doesn\'t exist';
|
| | | }
|
| | | if(!file_exists( $extract_dir . 'archive.php' )){
|
| | | $error[] = 'archive.php doesn\'t exist';
|
| | | }
|
| | | if(!file_exists( $extract_dir . 'search.php' )){
|
| | | $error[] = 'search.php doesn\'t exist';
|
| | | }
|
| | | if(file_exists( $extract_dir . 'css/epc.css' )){
|
| | | $enter_epc = true;
|
| | | }
|
| | | } else {
|
| | | echo 'doh!';
|
| | | }
|
| | | }
|
| | | }
|
| | | if(count($error)){
|
| | | foreach ($error as $value) {
|
| | | show_alert($value, 'danger');
|
| | | }
|
| | | } else {
|
| | | if(count($warning)){
|
| | | foreach ($warning as $value) {
|
| | | show_alert($value, 'warning');
|
| | | }
|
| | | }
|
| | | echo '<br><b>Theme name</b>: '.$json['name'];
|
| | | echo '<br><b>Version</b>: '.$json['version'];
|
| | | echo '<br><b>Author</b>: '.$json['author'];
|
| | | echo '<br><b>Website</b>: <a href="'.$json['website'].'" target="_blank">'.$json['website'].'</a>';
|
| | | echo '<br><b>Description</b>: '.$json['description'];
|
| | | echo '<br><br>This theme is targeted for CloudArcade v'.$json['target_version'].' or newer.<br>';
|
| | | if(to_numeric_version(VERSION) < to_numeric_version($json['target_version'])){
|
| | | show_alert('You\'re using older version of CloudArcade, update your CMS to meet the requirement.', 'warning');
|
| | | } else {
|
| | | ?>
|
| | | <br>
|
| | | <form id="form-upload-theme" action="dashboard.php?viewpage=themes" method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="action" value="install_theme">
|
| | | <input type="hidden" name="file_name" value="<?php echo $theme_dir ?>">
|
| | | <input type="hidden" name="theme_name" value="<?php echo $json['name'] ?>">
|
| | | <?php if($enter_epc) { ?>
|
| | | <div class="mb-3">
|
| | | <label for="theme-license"><?php _e('Purchase code') ?>:</label>
|
| | | <input type="text" style="max-width: 600px;" class="form-control" id="theme-license" name="epc" placeholder="<?php _e('Enter purchase code') ?>">
|
| | | </div>
|
| | | <?php } ?>
|
| | | <input type="button" class="btn btn-primary btn-md" value="Install theme" onclick="this.form.submit()"/>
|
| | | </form>
|
| | |
|
| | | <?php }
|
| | | }
|
| | | delete_files($extract_dir);
|
| | | } else {
|
| | | show_alert('Item purchase code is required!', 'warning');
|
| | | }
|
| | |
|
| | | } else if($_POST['action'] == 'install_theme'){
|
| | | $continue = true;
|
| | | if(isset($_POST['epc'])){
|
| | | $continue = false;
|
| | | $curl = curl_request('https://api.cloudarcade.net/verify/verify.php?code='.get_setting_value('purchase_code').'&ref='.DOMAIN.'&v='.VERSION.'&action=check_theme_epc&validate&epc='.$_POST['epc'].'&theme_name='.str_replace(' ', '%20', $_POST['theme_name']));
|
| | | if($curl == 'valid'){
|
| | | $continue = true;
|
| | | update_option('epc_theme_'.$_POST['file_name'], $_POST['epc']);
|
| | | } else {
|
| | | show_alert('Theme purchase code not valid!', 'danger');
|
| | | show_alert('Contact seller for more info', 'warning');
|
| | | }
|
| | | }
|
| | | if($continue){
|
| | | echo '<h4>'._t('Installing theme').'</h4><br>';
|
| | | $target_file = 'tmp/tmp_theme/'.$_POST['file_name'].'.zip';
|
| | | if(file_exists($target_file)){
|
| | | $zip = new ZipArchive;
|
| | | $res = $zip->open($target_file);
|
| | | if ($res === TRUE) {
|
| | | $zip->extractTo('../content/themes/'.$_POST['file_name']);
|
| | | $zip->close();
|
| | | show_alert('Theme installed', 'success');
|
| | | delete_files('tmp/tmp_theme/');
|
| | | echo '<div id="theme-installed"></div>';
|
| | | } else {
|
| | | echo 'doh!';
|
| | | }
|
| | | } else {
|
| | | show_alert('Theme file is missing', 'danger');
|
| | | }
|
| | | }
|
| | | } else if($_POST['action'] == 'update'){
|
| | | echo '<h4>'._t('Update theme').'</h4>';
|
| | | //
|
| | | $url = 'https://api.cloudarcade.net/themes/fetch.php?action=info&code='. check_purchase_code();
|
| | | $url .= '&name='.$_POST['theme'];
|
| | | $url .= '&ref='.DOMAIN.'&theme-version='.$_POST['version'].'&v='.VERSION;
|
| | | $curl = curl_request($url);
|
| | | if($curl != ''){
|
| | | $json = json_decode($curl, true);
|
| | | echo '<br><b>Theme name</b>: '.$json['name'];
|
| | | echo '<br><b>Version</b>: '.$json['version'];
|
| | | echo '<br><b>Author</b>: '.$json['author'];
|
| | | echo '<br><b>Website</b>: '.$json['website'];
|
| | | echo '<br><b>Description</b>: '.$json['description'];
|
| | | if(isset($json['release_date'])){
|
| | | echo '<br><b>Release date</b>: '.$json['release_date'];
|
| | | }
|
| | | echo '<br><b>Changelog</b>: '.$json['changelog'];
|
| | | if(isset($json['html'])){
|
| | | echo $json['html'];
|
| | | }
|
| | | echo '<br><br>This theme is targeted for CloudArcade v'.$json['target_version'].' or newer.<br><br>';
|
| | | if(to_numeric_version(VERSION) < to_numeric_version($json['target_version'])){
|
| | | show_alert('You\'re using older version of CloudArcade, update your CMS to meet the requirement.', 'warning');
|
| | | } else {
|
| | | ?>
|
| | | <br>
|
| | | <form action="dashboard.php?viewpage=themes" method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="action" value="dl_theme">
|
| | | <input type="hidden" name="theme" value="<?php echo $_POST['theme'] ?>">
|
| | | <input type="hidden" name="version" value="<?php echo $_POST['version'] ?>">
|
| | | <input type="hidden" name="link" value="<?php echo $json['link'] ?>">
|
| | | <input type="button" class="btn btn-primary btn-md" value="Update theme" onclick="this.form.submit()"/>
|
| | | </form>
|
| | |
|
| | | <?php }
|
| | | }
|
| | | } else if($_POST['action'] == 'dl_theme'){
|
| | | $path = $_POST['link'];
|
| | | $target = '../t-update.zip';
|
| | | $affected_files = [];
|
| | | // Create a cURL resource
|
| | | $ch = curl_init($path);
|
| | | // Set cURL options for retrieving the remote file
|
| | | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
| | | curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
|
| | | // Download the remote file and save it to the target file
|
| | | $remoteFile = curl_exec($ch);
|
| | | if($remoteFile !== false){
|
| | | $localFile = fopen($target, 'w');
|
| | | if($localFile){
|
| | | fwrite($localFile, $remoteFile);
|
| | | fclose($localFile);
|
| | | if(file_exists($target)){
|
| | | if (!file_exists(ABSPATH.'admin/backups')) {
|
| | | mkdir('backups/', 0755, true);
|
| | | }
|
| | | if(file_exists('../content/themes/'.$_POST['theme'].'/')){
|
| | | zip_files_recursive( '../content/themes/'.$_POST['theme'].'/', 'backups/'.$_SESSION['username'].'-'.$_POST['theme'].'-theme-backup-'.$_POST['version'].'-'.time().'-'.generate_random_strings().'.zip', [] );
|
| | | }
|
| | | $zip = new ZipArchive;
|
| | | $res = $zip->open($target);
|
| | | for( $i = 0; $i < $zip->numFiles; $i++ ){ |
| | | $stat = $zip->statIndex( $i );
|
| | | $name = basename( $stat['name'] );
|
| | | if(strpos($name, '.') !== false) {
|
| | | $affected_files[] = $name;
|
| | | }
|
| | | }
|
| | | if ($res === TRUE) {
|
| | | $zip->extractTo('../content/themes/'.$_POST['theme'].'/');
|
| | | $zip->close();
|
| | | } else {
|
| | | echo 'doh!';
|
| | | }
|
| | | unlink($target);
|
| | | show_alert('Theme updated!', 'success');
|
| | | show_alert('You can roll back to previous version if something happened.', 'info');
|
| | | echo '<div id="theme-updated"></div>';
|
| | | echo '<h4>'._t('Affected files').'</h4>';
|
| | | echo '<ol>';
|
| | | foreach ($affected_files as $key) {
|
| | | echo '<li>'.$key.'</li>';
|
| | | }
|
| | | echo '</ol>';
|
| | | echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
|
| | | }
|
| | | } else {
|
| | | echo 'Could not create local file';
|
| | | }
|
| | | } else {
|
| | | echo 'Could not download remote file';
|
| | | }
|
| | | // Close the cURL resource
|
| | | curl_close($ch);
|
| | | } else if($_POST['action'] == 'duplicate'){
|
| | | $json = [];
|
| | | $json_path = ABSPATH . 'content/themes/' . $_POST['theme'] . '/info.json';
|
| | | if(file_exists( $json_path )){
|
| | | $json = json_decode(file_get_contents( $json_path ), true);
|
| | | }
|
| | | echo '<h4>'._t('Duplicate theme').'</h4>';
|
| | | echo '<p>Duplicated themes (Or custom themes) can\'t receive any updates and safe from overwritten update files.</p>';
|
| | | ?>
|
| | | <div class="mb-4"></div>
|
| | | <form method="post">
|
| | | <input type="hidden" name="action" value="start_duplicate">
|
| | | <input type="hidden" name="target" value="<?php echo $_POST['theme'] ?>">
|
| | | <div class="mb-3">
|
| | | <label><?php _e('Theme Name') ?> (<?php _e('Must be unique') ?>):</label>
|
| | | <input type="text" style="max-width: 400px;" class="form-control" name="theme-name" placeholder="<?php _e('Latin characters only') ?>" value="<?php echo $json['name'] ?>" required>
|
| | | </div>
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Duplicate') ?></button>
|
| | | </form>
|
| | | <?php
|
| | | } else if($_POST['action'] == 'start_duplicate'){
|
| | | $theme_name = htmlspecialchars($_POST['theme-name']);
|
| | | if($theme_name != $_POST['theme-name']){
|
| | | show_alert('Error! Theme name contain special characters!', 'danger');
|
| | | } else {
|
| | | $theme_dir = strtolower(str_replace(' ', '-', $theme_name));
|
| | | $dirs = scan_folder('content/themes/');
|
| | | $exist = false;
|
| | | foreach ($dirs as $dir) {
|
| | | $json_path = ABSPATH . 'content/themes/' . $dir . '/info.json';
|
| | | if(file_exists( $json_path )){
|
| | | if($dir == $theme_dir){
|
| | | $exist = true;
|
| | | }
|
| | | }
|
| | | }
|
| | | if($exist){
|
| | | show_alert('Theme folder with this name already exist!', 'warning');
|
| | | } else {
|
| | | $base = '../content/themes/'.$theme_dir;
|
| | | if(!file_exists($base)){
|
| | | mkdir($base, 0755, true);
|
| | | }
|
| | | function recursive_copy($src,$dst) {
|
| | | $dir = opendir($src);
|
| | | @mkdir($dst);
|
| | | while(( $file = readdir($dir)) ) {
|
| | | if (( $file != '.' ) && ( $file != '..' )) {
|
| | | if ( is_dir($src . '/' . $file) ) {
|
| | | recursive_copy($src .'/'. $file, $dst .'/'. $file);
|
| | | }
|
| | | else {
|
| | | copy($src .'/'. $file,$dst .'/'. $file);
|
| | | }
|
| | | }
|
| | | }
|
| | | closedir($dir);
|
| | | }
|
| | | recursive_copy('../content/themes/'.$_POST['target'], $base);
|
| | | //
|
| | | $json = [];
|
| | | $json_path = ABSPATH . 'content/themes/' . $theme_dir . '/info.json';
|
| | | if(file_exists( $json_path )){
|
| | | $json = json_decode(file_get_contents( $json_path ), true);
|
| | | }
|
| | | $json['name'] = $theme_name;
|
| | | $json['release_date'] = date('d/m/Y');
|
| | | file_put_contents($json_path, json_encode($json));
|
| | | show_alert('Theme successfully duplicated!', 'success');
|
| | | }
|
| | | }
|
| | | } else if($_POST['action'] == 'delete'){
|
| | | if(THEME_NAME == $_POST['theme']){
|
| | | show_alert('Active theme can\'t be deleted!', 'warning');
|
| | | } else {
|
| | | echo '<h4>'._t('Are you sure want to delete %a theme?', $_POST['theme-name']).'</h4>';
|
| | | ?>
|
| | | <p>This action can't be undone</p>
|
| | | <div class="mb-4"></div>
|
| | | <form method="post">
|
| | | <input type="hidden" name="action" value="yes-delete">
|
| | | <input type="hidden" name="theme" value="<?php echo $_POST['theme'] ?>">
|
| | | <button type="submit" class="btn btn-danger btn-md"><?php _e('Delete') ?></button>
|
| | | </form>
|
| | | <?php
|
| | | }
|
| | | } else if($_POST['action'] == 'yes-delete'){
|
| | | if(file_exists('../content/themes/'.$_POST['theme'])){
|
| | | delete_files('../content/themes/'.$_POST['theme']);
|
| | | }
|
| | | show_alert('Theme files removed!', 'success');
|
| | | echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
|
| | | } else if($_POST['action'] == 'begin-install-with-code'){
|
| | | $curl = curl_request('https://api.cloudarcade.net/themes/install.php?code='.get_setting_value('purchase_code').'&ref='.DOMAIN.'&v='.VERSION.'&action=install&validate&email='.$_POST['email'].'&pcode='.$_POST['pcode']);
|
| | | if(is_valid_json($curl)){
|
| | | $json = json_decode($curl, true);
|
| | | if($json['status'] == 'valid'){
|
| | | $status = 'warning';
|
| | | $message = 'Null';
|
| | | $continue = true;
|
| | | if(file_exists('../content/themes/'.$json['name'])){
|
| | | show_alert('Failed to install!', 'warning');
|
| | | $status = 'warning';
|
| | | $message = 'Theme folder '.$json['name'].' already exist!';
|
| | | $continue = false;
|
| | | } else {
|
| | | mkdir('../content/themes/'.$json['name'], 0755, true);
|
| | | }
|
| | | if($continue){
|
| | | $target = '../the-file.zip';
|
| | | $_ch = curl_init();
|
| | | curl_setopt($_ch, CURLOPT_URL, $json['link']);
|
| | | curl_setopt($_ch, CURLOPT_SSL_VERIFYPEER, false);
|
| | | curl_setopt($_ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($_ch, CURLOPT_FOLLOWLOCATION, true);
|
| | | curl_setopt($_ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
|
| | | $remoteFile = curl_exec($_ch);
|
| | | if($remoteFile !== false){
|
| | | $localFile = fopen($target, 'w');
|
| | | if($localFile){
|
| | | fwrite($localFile, $remoteFile);
|
| | | fclose($localFile);
|
| | | if(file_exists($target)){
|
| | | $zip = new ZipArchive;
|
| | | $res = $zip->open($target);
|
| | | if ($res === TRUE) {
|
| | | $zip->extractTo('../content/themes/'.$json['name']);
|
| | | $zip->close();
|
| | | $status = 'success';
|
| | | $message = 'Theme installed!';
|
| | | } else {
|
| | | echo 'doh!';
|
| | | }
|
| | | unlink($target);
|
| | | }
|
| | | }
|
| | | }
|
| | | curl_close($_ch);
|
| | | }
|
| | | show_alert($message, $status);
|
| | | echo '<div id="theme-updated"></div>';
|
| | | echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
|
| | | } else {
|
| | | show_alert($json['message'], 'danger');
|
| | | }
|
| | | } else {
|
| | | show_alert('Server error!', 'danger');
|
| | | }
|
| | | }
|
| | | } else if(isset($_GET['action'])){
|
| | | if( ADMIN_DEMO ){
|
| | | echo 'Restricted for DEMO mode';
|
| | | return;
|
| | | }
|
| | | $action = $_GET['action'];
|
| | | if($action == 'details'){
|
| | | if(isset($_GET['theme'])){
|
| | | $json_path = ABSPATH . 'content/themes/' . $_GET['theme'] . '/info.json';
|
| | | if(file_exists( $json_path )){
|
| | | $json = json_decode(file_get_contents( $json_path ), true);
|
| | | echo '<br><b>Theme name</b>: '.$json['name'];
|
| | | echo '<br><b>Version</b>: '.$json['version'];
|
| | | echo '<br><b>Author</b>: '.$json['author'];
|
| | | echo '<br><b>Website</b>: <a href="'.$json['website'].'" target="_blank">'.$json['website'].'</a>';
|
| | | if(isset($json['documentation'])){
|
| | | echo '<br><b>Documentation</b>: <a href="'.$json['documentation'].'" target="_blank">'.$json['documentation'].'</a>';
|
| | | }
|
| | | echo '<br><b>Description</b>: '.$json['description'];
|
| | | if(isset($json['release_date'])){
|
| | | echo '<br><b>Release date</b>: '.$json['release_date'];
|
| | | }
|
| | | if(check_purchase_code()){
|
| | | ?>
|
| | | <div class="mb-4"></div>
|
| | | <form method="post">
|
| | | <input type="hidden" name="action" value="duplicate">
|
| | | <input type="hidden" name="theme" value="<?php echo $_GET['theme'] ?>">
|
| | | <button type="submit" class="btn btn-primary btn-md"><?php _e('Duplicate') ?></button>
|
| | | </form>
|
| | | <div class="mb-3"></div>
|
| | | <form method="post">
|
| | | <input type="hidden" name="action" value="delete">
|
| | | <input type="hidden" name="theme" value="<?php echo $_GET['theme'] ?>">
|
| | | <input type="hidden" name="theme-name" value="<?php echo $json['name'] ?>">
|
| | | <button type="submit" class="btn btn-danger btn-md"><?php _e('Delete') ?></button>
|
| | | </form>
|
| | | <?php
|
| | | }
|
| | | }
|
| | | }
|
| | | } else if($action == 'install-with-code'){
|
| | | ?>
|
| | | <div class="bs-callout bs-callout-info">
|
| | | If you've already purchased a theme, you can submit your purchase code here to install the theme.
|
| | | </div>
|
| | | <div class="row">
|
| | | <div class="col-md-4">
|
| | | <form method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="action" value="begin-install-with-code">
|
| | | <div class="mb-3">
|
| | | <label class="form-label"><?php _e('The email you are using for the purchase') ?></label>
|
| | | <input type="email" class="form-control" name="email" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <label class="form-label"><?php _e('Your theme purchase code') ?></label>
|
| | | <input type="text" class="form-control" name="pcode" required>
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary" value="<?php _e('Install') ?>">
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | } else if($action == 'upload-theme'){
|
| | | ?>
|
| | | <div class="bs-callout bs-callout-warning">
|
| | | Make sure you're uploading a theme file from a source you trust; otherwise, your theme file may contain malware or a backdoor that can harm your site.
|
| | | </div>
|
| | | <div class="row">
|
| | | <div class="col-md-4">
|
| | | <form method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="action" value="upload_theme_file">
|
| | | <div class="mb-3">
|
| | | <label class="form-label">Theme zip file</label>
|
| | | <input type="file" name="theme_file" class="form-control" accept=".zip">
|
| | | </div>
|
| | | <input type="submit" class="btn btn-primary" value="<?php _e('Upload theme') ?>">
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | } else if($action == 'activate-theme'){
|
| | | if(isset($_POST['theme_dir'])){
|
| | | $json_path = '../content/themes/' . $_POST['theme_dir'] . '/info.json';
|
| | | if(file_exists($json_path)){
|
| | | $theme = json_decode(file_get_contents( $json_path ), true);
|
| | | if(to_numeric_version($theme['target_version']) > to_numeric_version(VERSION)){
|
| | | show_alert('Failed to activate!', 'warning');
|
| | | echo '<div class="bs-callout bs-callout-warning">'._t('This theme require CloudArcade v%a or newer.', $theme['target_version']).'</div>';
|
| | | echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
|
| | | } else {
|
| | | // Theme activated
|
| | | update_setting('theme_name', $_POST['theme_dir']);
|
| | | show_alert('Theme activated!', 'success');
|
| | | echo '<a href="dashboard.php?viewpage=themes" class="btn btn-primary">'._t('Back to themes').'</a>';
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | } else {
|
| | | $dirs = scan_folder('content/themes/');
|
| | | $update_availabe = get_pref('updates');
|
| | | if(is_null($update_availabe)){
|
| | | $update_availabe = [];
|
| | | } else {
|
| | | $update_availabe = json_decode($update_availabe, true);
|
| | | if(!isset($update_availabe['themes'])){
|
| | | $update_availabe['themes'] = [];
|
| | | }
|
| | | }
|
| | | foreach ($dirs as $dir) {
|
| | | $json_path = ABSPATH . 'content/themes/' . $dir . '/info.json';
|
| | | if(file_exists( $json_path )){
|
| | | $theme = json_decode(file_get_contents( $json_path ), true);
|
| | | $disabled = '';
|
| | | $btn_label = _t('Activate');
|
| | | $thumb;
|
| | | if( THEME_NAME == $dir){
|
| | | $disabled = _t('disabled');
|
| | | $btn_label = _t('Activated');
|
| | | }
|
| | | if(is_theme_has_thumbail($dir)){
|
| | | $thumb = DOMAIN . 'content/themes/' . $dir . '/thumbnail.png'; |
| | | } else {
|
| | | $thumb = DOMAIN . 'images/theme-no-thumb.png'; |
| | | } ?>
|
| | |
|
| | | <div class="theme">
|
| | | <a href="dashboard.php?viewpage=themes&theme=<?php echo $dir ?>&action=details">
|
| | | <div class="theme-thumbnail">
|
| | | <img src="<?php echo $thumb ?>">
|
| | | <div class="theme-overlay">
|
| | | <i class="fas fa-info-circle"></i>
|
| | | </div>
|
| | | </div>
|
| | | </a>
|
| | | <?php if(isset($update_availabe['themes'][$dir])){ ?>
|
| | | <div class="theme-update-wrapper">
|
| | | <div class="theme-update-info">
|
| | | <?php _e('Update available!') ?>
|
| | | <div class="float-right">
|
| | | <form action="dashboard.php?viewpage=themes" method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="action" value="update">
|
| | | <input type="hidden" name="theme" value="<?php echo $dir ?>">
|
| | | <input type="hidden" name="version" value="<?php echo $theme['version'] ?>">
|
| | | <input type="button" class="text-primary" value="<?php _e('Update') ?>" onclick="this.form.submit()"/>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php } ?>
|
| | | <div class="theme-id-container">
|
| | | <div class="theme-name"> <?php echo $theme['name'] ?> </div>
|
| | | <div class="theme-action">
|
| | | <form action="dashboard.php?viewpage=themes&action=activate-theme" method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="theme_dir" value="<?php echo $dir ?>">
|
| | | <input type="submit" class="btn-theme btn btn-primary btn-sm" value="<?php echo $btn_label ?>" <?php echo $disabled ?>>
|
| | | </form>
|
| | | </div>
|
| | | <div class="theme-info">
|
| | | <div class="theme-author"><?php _e('Author') ?>: <a href="<?php echo $theme['website'] ?>" target="_blank"><?php echo $theme['author'] ?></a></div>
|
| | | <div class="theme-version">v<?php echo $theme['version'] ?></div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | |
|
| | | <div class="theme theme-add" id="add-theme">
|
| | | <i class="fa fa-plus-circle theme-add-icon"></i>
|
| | | </div>
|
| | |
|
| | | <?php } ?>
|
| | |
|
| | | <!-- Modal -->
|
| | | <div class="modal fade" id="modal-add-theme" tabindex="-1" role="dialog" aria-labelledby="add-theme-modal-label" aria-hidden="true">
|
| | | <div class="modal-dialog" role="document">
|
| | | <div class="modal-content">
|
| | | <div class="modal-header">
|
| | | <h5 class="modal-title" id="add-theme-label"><?php _e('Add new theme') ?></h5>
|
| | | <button type="button" class="btn-close text-white" data-bs-dismiss="modal" aria-label="Close"></button>
|
| | | </div>
|
| | | <div class="modal-body">
|
| | | <div class="mb-3">
|
| | | <a href="dashboard.php?viewpage=themes&action=install-with-code" class="btn btn-primary"><?php _e('Install with purchase code') ?></a>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <a href="dashboard.php?viewpage=themes&action=upload-theme" class="btn btn-primary"><?php _e('Upload theme') ?></a>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <script type="text/javascript">
|
| | | $(document).ready(function(){
|
| | | if($('#theme-updated').length){
|
| | | check_theme_update();
|
| | | }
|
| | | if($('#theme-installed').length){
|
| | | check_theme_update();
|
| | | }
|
| | | $('#add-theme').on('click', function(){
|
| | | $('#modal-add-theme').modal('show');
|
| | | });
|
| | | });
|
| | | </script> |
| New file |
| | |
| | | <?php
|
| | | if(isset($_GET['status'])){
|
| | | $type = 'success';
|
| | | $message = '';
|
| | | if($_GET['status'] == 'updated'){
|
| | | $message = 'CloudArcade successfully updated to version '.VERSION.'!';
|
| | | } elseif($_GET['status'] == 'error'){
|
| | | $type = 'warning';
|
| | | $message = 'Error: '.esc_string($_GET['info']);
|
| | | }
|
| | | show_alert($message, $type);
|
| | | }
|
| | | ?>
|
| | | <div class="check-update"></div>
|
| | | <div class="section">
|
| | | <?php
|
| | |
|
| | | if(!check_purchase_code() && !ADMIN_DEMO){
|
| | | echo('<div class="bs-callout bs-callout-warning"><p>Please provide your <b>Item Purchase code</b>. You can submit or update your Purchase code on site settings.</p><p><a href="https://help.market.envato.com/hc/en-us/articles/202822600-Where-Is-My-Purchase-Code" target="_blank">Where to get Envato purchase code?</a></p></div>');
|
| | | } else {
|
| | |
|
| | | if(!ADMIN_DEMO){
|
| | | if(function_exists('check_writeable')){
|
| | | if(!check_writeable()){
|
| | | $msg = 'CloudArcade don\'t have permissions to modify files, any settings can\'t be saved and can\'t do backup and update. Change all folders and files CHMOD to 777 to fix this.';
|
| | | show_alert($msg, 'warning');
|
| | | }
|
| | | }
|
| | | $pre = '';
|
| | | $beta = '';
|
| | | if(isset($_GET['beta'])){
|
| | | $beta = '&test';
|
| | | $pre = 'super';
|
| | | }
|
| | | $ch = curl_init('https://api.cloudarcade.net/verify/verify.php?action=next_update&ref='.DOMAIN.'&v='.VERSION.$beta);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | $curl = curl_exec($ch);
|
| | | $data = json_decode($curl, true);
|
| | | curl_close($ch);
|
| | | if(isset($data['log'])){
|
| | | $v_latest = esc_int($data['version']);
|
| | | $v_current = esc_int(VERSION);
|
| | | if($v_current < $v_latest){
|
| | | echo('<div class="bs-callout bs-callout-info">CloudArcade version '.$data['version'].' is available.</div>');
|
| | | if(isset($data['info'])){
|
| | | echo($data['info']);
|
| | | }
|
| | | echo('<p>Changelog:</p>');
|
| | | echo('<ul>');
|
| | | foreach ($data['log'] as $key) {
|
| | | echo('<li>'.$key.'</li>');
|
| | | }
|
| | | echo('</ul>');
|
| | | if(isset($data['html'])){
|
| | | echo($data['html']);
|
| | | }
|
| | | //
|
| | | ?>
|
| | | <div class="bs-callout bs-callout-info">Read more info about the update here <a href="https://cloudarcade.net/changelog/" target="_blank">https://cloudarcade.net/changelog/</a></div>
|
| | | <hr>
|
| | | <div class="progress mb-4 d-none">
|
| | | <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div>
|
| | | </div>
|
| | | <form id="form-update" method="post" enctype="multipart/form-data">
|
| | | <div class="form-group">
|
| | | <input type="hidden" name="action" value="updater">
|
| | | <input type="hidden" name="redirect" value="<?php echo DOMAIN ?>admin/dashboard.php?viewpage=update">
|
| | | <input type="hidden" name="code" minlength="5" value="<?php echo $pre.check_purchase_code() ?>" required/>
|
| | | <button type="submit" class="btn btn-primary btn-md" id="btn-update"><?php _e('Update') ?></button>
|
| | | </div>
|
| | | </form>
|
| | |
|
| | | <div id="update-error" class="d-none">
|
| | | <div class="bs-callout bs-callout-danger" id="u-error"></div>
|
| | | <?php _e('Server response') ?>:
|
| | | <div class="bs-callout bs-callout-warning" id="u-response"></div>
|
| | | </div>
|
| | |
|
| | | <?php
|
| | | } else {
|
| | | echo('<div class="bs-callout bs-callout-info">'._t('Congratulation! You are up to date.').'</div>');
|
| | | }
|
| | | }
|
| | | } else {
|
| | | echo('<div class="bs-callout bs-callout-info">'._t('Congratulation! You are up to date.').'</div>');
|
| | | }
|
| | |
|
| | | ?>
|
| | |
|
| | | <hr>
|
| | | <?php if(!ADMIN_DEMO){ ?>
|
| | | <h4>Got an issues after updating?</h4>
|
| | | <p>You can go back to previous version using <b>Backup Restore</b> plugin. Each update attept, system will create a backup file (Games and thumbnail files are not backed up).</p>
|
| | | <p>Have an unknown issues? you can contact me through <a href="https://codecanyon.net/user/redfoc" target="_blank">codecanyon profile</a> page.</p>
|
| | | <h4>How updater works?</h4>
|
| | | <p>Updater will override specific file and folder that have an update. Updater can also modify database table.</p>
|
| | | <?php } } ?>
|
| | | </div> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | $widget_data = get_pref('widgets') ?: "[]";
|
| | | $stored_widgets = json_decode($widget_data, true);
|
| | |
|
| | | require_once( '../content/themes/theme-functions.php' );
|
| | | require_once( '../' . TEMPLATE_PATH . '/functions.php' );
|
| | |
|
| | | if(isset($stored_widgets['head']) && empty($stored_widgets['head'])){
|
| | | $stored_widgets['head'] = json_decode('[{"id":"html","widget":"Widget_HTML","text":""}]', true);
|
| | | update_option('widgets', json_encode($stored_widgets));
|
| | | }
|
| | |
|
| | | ?>
|
| | |
|
| | | <div class="row">
|
| | | <div class="col-lg-8">
|
| | | <div class="section section-full">
|
| | | <ul class="nav nav-tabs custom-tab" role="tablist">
|
| | | <?php
|
| | | foreach($tab_list as $tab => $label){
|
| | | $active = '';
|
| | | if($tab == $slug){
|
| | | $active = 'active';
|
| | | }
|
| | | ?>
|
| | | <li class="nav-item" role="presentation">
|
| | | <a class="nav-link <?php echo $active ?>" href="dashboard.php?viewpage=layout&slug=<?php echo $tab ?>"><?php _e($label) ?></a>
|
| | | </li>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </ul>
|
| | | <div class="general-wrapper">
|
| | | <div class="mb-4"></div>
|
| | | <p><?php _e('Placement') ?>:</p>
|
| | | <p>
|
| | | <?php
|
| | | if(empty($registered_sidebars)){
|
| | | _e('There is no widget placement on your current theme!');
|
| | | } ?>
|
| | | </p>
|
| | | <div id="panel-area">
|
| | | <?php
|
| | |
|
| | | if(count($registered_sidebars)){
|
| | | $count = 0;
|
| | | foreach ($registered_sidebars as $item) {
|
| | | ?>
|
| | |
|
| | | <div class="panel panel-default panel-section" id="widget-panel" data-id="<?php echo $item['id'] ?>">
|
| | | <div class="panel-heading">
|
| | | <div class="panel-title" data-bs-toggle="collapse" data-bs-target="#<?php echo $item['id'] ?>"><?php echo $item['name'] ?></div>
|
| | | </div>
|
| | | <div id="<?php echo $item['id'] ?>" class="panel-collapse collapse">
|
| | | <div class="panel-description small">
|
| | | <?php echo $item['description'] ?>
|
| | | </div>
|
| | | <div class="panel-body">
|
| | | <?php
|
| | | if(isset($stored_widgets[$item['id']])){
|
| | | $list = $stored_widgets[$item['id']];
|
| | | $index = 0;
|
| | | foreach ($list as $item) {
|
| | | $count++;
|
| | | $key = $item['widget'];
|
| | | $widget;
|
| | | $missing = false;
|
| | | $inactive_class = '';
|
| | | if(widget_exists($item['widget'])){
|
| | | $widget = get_widget( $item['widget'], $item );
|
| | | } else {
|
| | | $widget = new Class {
|
| | | public $name;
|
| | | public $id_base;
|
| | | public function form($e = 0){
|
| | | echo 'This widget is missing or inactive.';
|
| | | }
|
| | | };
|
| | | $widget->name = $item['widget'];
|
| | | $widget->id_base = $item['id'];
|
| | | $missing = true;
|
| | | $inactive_class = 'widget-inactive';
|
| | | }
|
| | | |
| | | ?>
|
| | |
|
| | | <div class="widget-item-sortable">
|
| | | <div class="widget-item <?php echo $inactive_class ?>" data-bs-toggle="collapse" data-bs-target="#<?php echo 'ID_'.$count ?>">
|
| | | <div class="widget-title"><?php echo $widget->name ?></div>
|
| | | </div>
|
| | | <div id="<?php echo 'ID_'.$count ?>" class="item-panel-collapse collapse">
|
| | | <div class="widget-form">
|
| | | <form method="post">
|
| | | <input type="hidden" name="id" value="<?php echo $widget->id_base ?>">
|
| | | <input type="hidden" name="widget" value="<?php echo $key ?>">
|
| | | <?php $widget->form( $item ); ?>
|
| | | <div class="widget-control-actions">
|
| | | <div class="float-left widget-action-button-area">
|
| | | <span class="text-danger delete-widget"><?php _e('Delete') ?></span></span>
|
| | | </div>
|
| | | <?php if(!$missing){ ?>
|
| | | <div class="float-right">
|
| | | <button class="btn btn-primary btn-sm btn-save"><?php _e('Save') ?></button>
|
| | | </div>
|
| | | <?php } ?>
|
| | | <div class="clearfix"></div>
|
| | | </div>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <?php
|
| | | $index++;
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-4">
|
| | | <div class="section" id="available-widgets">
|
| | | <p><?php _e('Available Widgets') ?>:</p>
|
| | | <div class="widget-list">
|
| | | <?php
|
| | |
|
| | | if(count($widget_factory->widgets)){
|
| | | foreach ($widget_factory->widgets as $key => $widget) {
|
| | | ?>
|
| | |
|
| | | <div class="widget-block">
|
| | | <div class="widget-item-sortable">
|
| | | <div class="widget-item">
|
| | | <div class="widget-title"><?php echo $widget->name ?></div>
|
| | | <div class="d-none widget-inside">
|
| | | <div class="widget-item-sortable">
|
| | | <div class="widget-item" data-bs-toggle="collapse" data-bs-target="#ID_TO_REPLACE">
|
| | | <div class="widget-title"><?php echo $widget->name ?></div>
|
| | | </div>
|
| | | <div id="ID_TO_REPLACE" class="item-panel-collapse collapse">
|
| | | <div class="widget-form">
|
| | | <form method="post">
|
| | | <input type="hidden" name="id" value="<?php echo $widget->id_base ?>">
|
| | | <input type="hidden" name="widget" value="<?php echo $key ?>">
|
| | | <?php $widget->form(); ?>
|
| | | <div class="widget-control-actions">
|
| | | <div class="float-left widget-action-button-area">
|
| | | <span class="text-danger delete-widget"><?php _e('Delete') ?></span></span>
|
| | | </div>
|
| | | <div class="float-right">
|
| | | <button class="btn btn-primary btn-sm btn-save"><?php _e('Save') ?></button>
|
| | | </div>
|
| | | <div class="clearfix"></div>
|
| | | </div>
|
| | | </form>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="widget-description small">
|
| | | <?php echo $widget->description ?>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <?php
|
| | | }
|
| | | } ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <script type="text/javascript">
|
| | | $(document).ready(()=>{
|
| | | $( ".panel-body" ).sortable({
|
| | | placeholder: "ui-sortable-placeholder",
|
| | | stop: function(event, ui) {
|
| | | widget_item_drop(event, ui);
|
| | | },
|
| | | update: function(event, ui) {
|
| | | update_widget_position();
|
| | | }
|
| | | });
|
| | | $( ".widget-block > .widget-item-sortable" ).draggable({
|
| | | connectToSortable: ".panel-body",
|
| | | helper: "clone",
|
| | | revert: "invalid",
|
| | | revertDuration: 0,
|
| | | });
|
| | | $( ".panel-body" ).disableSelection();
|
| | |
|
| | | $( ".panel-body > .widget-item-sortable" ).each(function() {
|
| | | $(this).removeClass('ui-sortable-handle');
|
| | | });
|
| | |
|
| | | $(document).on('click', '.delete-widget', function() {
|
| | | let parent_id = $(this).parents().eq(7).attr('id');
|
| | | let cur_index = $(this).parents().eq(5).index();
|
| | | let data = {
|
| | | action: 'delete_widget',
|
| | | parent: parent_id,
|
| | | index: cur_index,
|
| | | }
|
| | | let self = $(this);
|
| | | if(confirm('Confirm delete')){
|
| | | ajax_action(data).then((res)=>{
|
| | | if(res == 'ok'){
|
| | | self.parents().eq(5).remove();
|
| | | } else {
|
| | | console.log(res);
|
| | | alert('Error, check console log for more info');
|
| | | }
|
| | | });
|
| | | }
|
| | | });
|
| | |
|
| | | $('body').on("submit", ".widget-form > form", function( event ) {
|
| | | let arr = $( this ).serializeArray();
|
| | | event.preventDefault();
|
| | |
|
| | | let parent_id = $(this).parents().eq(4).attr('id');
|
| | | let cur_index = $(this).parents().eq(2).index();
|
| | |
|
| | | let data = {
|
| | | action: 'update_widget',
|
| | | parent: parent_id,
|
| | | index: cur_index,
|
| | | data: fix_array(arr),
|
| | | }
|
| | | |
| | | ajax_action(data).then((res)=>{
|
| | | if(res == 'ok'){
|
| | | let btn = $(this).find('.float-right > button');
|
| | | btn.text('SAVED');
|
| | | btn.attr('disabled', 'disabled');
|
| | | } else {
|
| | | console.log(res);
|
| | | alert('Error, check console log for more info');
|
| | | }
|
| | | });
|
| | | });
|
| | |
|
| | | $('body').on("input change", ".widget-form > form", function( event ) {
|
| | | let btn = $(this).find('.float-right > button');
|
| | | btn.text('SAVE');
|
| | | btn.attr('disabled', false);
|
| | | });
|
| | |
|
| | | function widget_item_drop(event, ui){
|
| | | let content = ui.item.children('.widget-item').children('.widget-inside');
|
| | | if(content.length){
|
| | | //content.removeClass('d-none');
|
| | | const d = new Date();
|
| | | let uid = 'ID_'+d.getTime();
|
| | | let html = content.html().replace('ID_TO_REPLACE', uid);
|
| | | ui.item.replaceWith(html.replace('ID_TO_REPLACE', uid));
|
| | | $('#'+uid).collapse('toggle');
|
| | | update_widget_position();
|
| | | }
|
| | | }
|
| | |
|
| | | function update_widget_position(){
|
| | | let objs = {};
|
| | | $('.panel-section').each(function() {
|
| | | let id = $(this).data('id');
|
| | | let widgets = $(this).find('.widget-item-sortable');
|
| | | objs[id] = get_widget_list(widgets);
|
| | | });
|
| | |
|
| | | function get_widget_list(widgets){
|
| | | let arrs = [];
|
| | | widgets.each(function() {
|
| | | let arr = $(this).find('.widget-form > form').serializeArray();
|
| | | arrs.push(fix_array(arr));
|
| | | });
|
| | | return arrs;
|
| | | }
|
| | |
|
| | | let data = {
|
| | | action: 'save_widgets_position',
|
| | | data: objs,
|
| | | }
|
| | |
|
| | | ajax_action(data).then((res)=>{
|
| | | if(res == 'ok'){
|
| | | //
|
| | | } else {
|
| | | console.log(res);
|
| | | alert('Error, check console log for more info');
|
| | | }
|
| | | });
|
| | | }
|
| | |
|
| | | function fix_array(arr){
|
| | | let obj = {};
|
| | | arr.forEach((item)=>{
|
| | | obj[item.name] = item.value;
|
| | | });
|
| | | return obj;
|
| | | }
|
| | |
|
| | | function ajax_action(data){
|
| | | let wait = new Promise((res) => {
|
| | | $.ajax({
|
| | | url: 'includes/ajax-actions.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data:data,
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | res(data.responseText);
|
| | | }
|
| | | });
|
| | | });
|
| | | return wait;
|
| | | }
|
| | | });
|
| | | |
| | | </script> |
| New file |
| | |
| | | <?php
|
| | | session_start();
|
| | |
|
| | | $action = isset( $_POST['action'] ) ? $_POST['action'] : "";
|
| | |
|
| | | require "../config.php";
|
| | | require "../init.php";
|
| | | require "admin-functions.php";
|
| | |
|
| | | if ( !$login_user ) {
|
| | | header('Location: '. get_permalink('login'));
|
| | | return;
|
| | | }
|
| | |
|
| | | if(!USER_ADMIN){
|
| | | exit('Access forbidden!');
|
| | | }
|
| | |
|
| | | load_language('admin');
|
| | |
|
| | | require( "../includes/plugin.php" );
|
| | |
|
| | | if(count($plugin_list) > 0){
|
| | | // If plugin exist
|
| | | }
|
| | |
|
| | | $update_availabe = get_pref('updates');
|
| | | if(is_null($update_availabe)){
|
| | | $update_availabe = [];
|
| | | } else {
|
| | | $update_availabe = json_decode($update_availabe, true);
|
| | | }
|
| | |
|
| | | $pages = array (
|
| | | array(_t('Dashboard'), 'dashboard', 'home'),
|
| | | array(_t('Game list'), 'gamelist', 'gamepad'),
|
| | | array(_t('Add game'), 'addgame', 'plus-circle'),
|
| | | array(_t('Categories'), 'categories', 'th-large'),
|
| | | array(_t('Collections'), 'collections', 'th-list'),
|
| | | array(_t('Pages'), 'pages', 'book'),
|
| | | array(_t('Themes'), 'themes', 'palette'),
|
| | | array(_t('Plugins'), 'plugin', 'plug'),
|
| | | array(_t('Layout'), 'layout', 'columns'),
|
| | | array(_t('Settings'), 'settings', 'cog'),
|
| | | array(_t('Updater'), 'update', 'sync-alt'),
|
| | | );
|
| | |
|
| | | if(file_exists( ABSPATH . TEMPLATE_PATH . '/options.php' )){
|
| | | // Find the index of 'Themes' and insert 'Theme Options' after it
|
| | | $theme_index = array_search('themes', array_column($pages, 1));
|
| | | if ($theme_index !== false) {
|
| | | array_splice($pages, $theme_index + 1, 0, array(array(_t('Theme Options'), 'theme-options', 'paint-brush')));
|
| | | }
|
| | | }
|
| | |
|
| | | $page_name = 'Dashboard';
|
| | | $page_slug = 'dashboard';
|
| | | $page_icon = null;
|
| | | if(isset($_GET['viewpage'])){
|
| | | $page_slug = htmlspecialchars($_GET['viewpage']);
|
| | | }
|
| | |
|
| | | if(!check_purchase_code()){
|
| | | if($page_slug != 'settings'){
|
| | | header('Location: dashboard.php?viewpage=settings', true);
|
| | | exit();
|
| | | }
|
| | | for ($i=count($pages)-1; $i >= 0 ; $i--) { |
| | | if($pages[$i][1] != 'settings'){
|
| | | array_splice($pages, $i, 1);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | foreach ($pages as $item) {
|
| | | $active = '';
|
| | | if($item[1] == $page_slug){
|
| | | $page_name = _t(esc_string($item[0]));
|
| | | $page_slug = esc_string($item[1]);
|
| | | $page_icon = $item[2];
|
| | | $active = 'active';
|
| | | }
|
| | | }
|
| | |
|
| | | if(is_null($page_icon)){
|
| | | $page_icon = 'exclamation';
|
| | | }
|
| | |
|
| | | ?>
|
| | |
|
| | | <!DOCTYPE html>
|
| | | <html lang="en" class="theme-light">
|
| | | <head>
|
| | | <meta charset="utf-8">
|
| | | <title>Admin | <?php echo $page_name . ' - ' . SITE_TITLE ?></title>
|
| | | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
| | | <meta charset="UTF-8">
|
| | | <link rel="stylesheet" type="text/css" href="../vendor/bootstrap5/css/bootstrap.min.css" />
|
| | | <!-- Font Awesome icons (free version)-->
|
| | | <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous" defer>
|
| | | <link rel="stylesheet" type="text/css" href="style/admin.css?v=<?php echo VERSION ?>">
|
| | | <?php
|
| | | if ($page_slug == 'layout' || $page_slug == 'theme-options'){
|
| | | echo '<link rel="stylesheet" type="text/css" href="style/menus.css?v='.VERSION.'">';
|
| | | }
|
| | | if($page_slug == 'layout'){
|
| | | echo '<link rel="stylesheet" type="text/css" href="style/jquery.nestable.css?v='.VERSION.'">';
|
| | | }
|
| | | ?>
|
| | | <script type="text/javascript" src="../js/jquery-3.6.2.min.js"></script>
|
| | | <script type="text/javascript" src="../js/jquery-ui.min.js"></script>
|
| | | <script type="text/javascript" src="../vendor/bootstrap5/js/bootstrap.bundle.min.js"></script>
|
| | | <script type="text/javascript" src="../js/chart/utils.js"></script>
|
| | | <script type="text/javascript" src="../js/chart/Chart.min.js"></script>
|
| | | </head>
|
| | | <body>
|
| | | <div class="main-header">
|
| | | <nav class="navbar navbar-expand-lg navbar-light top-nav" id="mainNav">
|
| | | <div class="container-fluid">
|
| | | <button class="sidebar-toggler" type="button" onclick="openSidebar()">
|
| | | <span class="navbar-toggler-icon"></span>
|
| | | </button>
|
| | | <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#quickLinks" aria-controls="quickLinks" aria-expanded="false" aria-label="Toggle navigation">
|
| | | <span class="navbar-toggler-icon"></span>
|
| | | </button>
|
| | | <div class="collapse navbar-collapse justify-content-end" id="quickLinks">
|
| | | <div class="quicklinks">
|
| | | <a href="<?php echo DOMAIN ?>admin.php?action=logout" class="btn btn-sm btn-danger">
|
| | | <i class="fas fa-sign-out-alt"></i>
|
| | | </a>
|
| | | <a href="<?php echo DOMAIN ?>" target="_blank" class="btn btn-sm btn-primary">
|
| | | <i class="fas fa-external-link-alt"></i> <?php _e('VISIT SITE') ?>
|
| | | </a>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </nav>
|
| | | </div>
|
| | | <div class="admin-container">
|
| | | <div class="sidebar" id="sidebar">
|
| | | <a class="navbar-brand" href="#">
|
| | | <img src="../images/logo-horizontal.png" class="logo" alt="Logo">
|
| | | </a>
|
| | | <div class="admin-menu">
|
| | | <ul id="menu-list">
|
| | | <?php
|
| | | $i = 0;
|
| | | foreach ($pages as $item) {
|
| | | $active = '';
|
| | | if($item[1] == $page_slug){
|
| | | //$page_name = _t(esc_string($item[0]));
|
| | | //$page_slug = esc_string($item[1]);
|
| | | $active = 'active';
|
| | | }
|
| | | if($item[1] == 'plugin'){
|
| | | //Dropdown
|
| | | echo '<li class="'.$active.'">';
|
| | |
|
| | | ?>
|
| | | <div class="li-list dropdown-btn">
|
| | | <i class="fa fa-<?php echo $item[2] ?>" aria-hidden="true"></i>
|
| | | <?php echo esc_string($item[0]); ?>
|
| | | <i class="fa fa-caret-down"></i>
|
| | |
|
| | | </div>
|
| | | <?php
|
| | |
|
| | | echo '</li>';
|
| | |
|
| | | ?>
|
| | | |
| | | <div class="dropdown-container <?php echo $active ?>">
|
| | | <a href="?viewpage=<?php echo $item[1] ?>">
|
| | | <?php
|
| | | $selected_plugin = '';
|
| | | $active_child = '';
|
| | | if(isset($_GET['name'])){
|
| | | $selected_plugin = $_GET['name'];
|
| | | } else {
|
| | | $active_child = 'active';
|
| | | }
|
| | | ?>
|
| | | <div class="dropdown-list <?php echo $active_child ?>">
|
| | | <?php _e('Manage Plugins') ?>
|
| | | </div>
|
| | | </a>
|
| | | <?php
|
| | | foreach ($plugin_list as $plugin) {
|
| | | if(substr($plugin['dir_name'], 0, 1) != '_'){
|
| | | $active_child = '';
|
| | | if($selected_plugin == $plugin['dir_name']){
|
| | | $active_child = 'active';
|
| | | } ?>
|
| | | <a href="?viewpage=<?php echo $item[1] ?>&name=<?php echo $plugin['dir_name'] ?>">
|
| | | <div class="dropdown-list <?php echo $active_child ?>">
|
| | | <?php _e($plugin['name']) ?>
|
| | | </div>
|
| | | </a>
|
| | | <?php
|
| | | }
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | |
|
| | | <?php
|
| | | } else {
|
| | | //Regular menu
|
| | | echo '<li class="'.$active.'">';
|
| | | echo '<a href="?viewpage='.$item[1].'">';
|
| | | echo '<div class="li-list" name="dashboard"><i class="fa fa-'.$item[2].'" aria-hidden="true"></i>';
|
| | | echo esc_string($item[0]);
|
| | | if($item[1] == 'themes' || $item[1] == 'update'){
|
| | | if(isset($update_availabe[$item[1]])){
|
| | | echo '<i class="fa fa-exclamation-circle has-update-icon -u-'.$item[1].'"></i>';
|
| | | }
|
| | | }
|
| | | echo '</div></a>';
|
| | | echo '</li>';
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | ?>
|
| | | </ul>
|
| | |
|
| | | <div class="form-check custom-switch" style="margin-left: 20px;">
|
| | | <input type="checkbox" class="form-check-input" id="darkSwitch" onclick="toggleTheme()">
|
| | | <label class="form-check-label" for="darkSwitch"><?php _e('Dark Mode') ?></label>
|
| | | </div>
|
| | | <div class="cms justify-content-center" style="display: flex;">
|
| | | <a href="http://cloudarcade.net" target="_blank" style="margin-right: 10px">Cloud Arcade</a> v<?php echo VERSION ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="content" id="content">
|
| | | <?php if( ADMIN_DEMO ){
|
| | | show_alert('(Admin Demo) All actions are not saved.', 'warning');
|
| | | } ?>
|
| | |
|
| | | <h3 class="page-title"><i class="fa fa-<?php echo $page_icon ?>"></i> <?php echo esc_string($page_name); ?></h3>
|
| | |
|
| | | <?php include 'core/'.$page_slug.'.php'; ?>
|
| | |
|
| | | </div>
|
| | | <span id="cms-version" style="display: none;"><?php echo VERSION ?></span>
|
| | | </div>
|
| | | <script type="text/javascript" src="../js/script.js?v=<?php echo VERSION ?>"></script>
|
| | | <?php
|
| | | if ($page_slug == 'dashboard'){
|
| | | echo '<script type="text/javascript" src="../js/chart/stats.js?v='.VERSION.'"></script>';
|
| | | } elseif ($page_slug == 'layout'){
|
| | | echo '<script type="text/javascript" src="../js/jquery.nestable.js"></script>';
|
| | | echo '<script type="text/javascript" src="../js/menu.js?v='.VERSION.'"></script>';
|
| | | }
|
| | | ?>
|
| | | </body>
|
| | | </html> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require( '../../config.php' );
|
| | | require( '../../init.php' );
|
| | | require( '../admin-functions.php' );
|
| | |
|
| | | if(isset($_POST['action'])){
|
| | | $action = $_POST['action'];
|
| | | if($action == 'upload_image'){
|
| | | // Fix post / get issue on page.php Gallery plugin
|
| | | $_GET['action'] = $action;
|
| | | }
|
| | | $super_user = false;
|
| | | if( $login_user && USER_ADMIN && !ADMIN_DEMO ){
|
| | | $super_user = true;
|
| | | }
|
| | |
|
| | | if($action == 'save_widgets_position'){
|
| | | $data = $_POST['data'];
|
| | | if( $super_user ){
|
| | | update_option('widgets', json_encode($data));
|
| | | echo 'ok';
|
| | | }
|
| | | } elseif($action == 'update_widget'){
|
| | | $data = $_POST['data'];
|
| | | if( $super_user ){
|
| | | $widget_data = get_pref('widgets') ?: "[]";
|
| | | $stored_widgets = json_decode($widget_data, true);
|
| | | |
| | | foreach ($stored_widgets as $key => $item) {
|
| | | if($key == $_POST['parent']){
|
| | | $stored_widgets[$key][(int)$_POST['index']] = $data;
|
| | | break;
|
| | | }
|
| | | }
|
| | |
|
| | | update_option('widgets', json_encode($stored_widgets));
|
| | | echo 'ok';
|
| | | }
|
| | | } elseif($action == 'delete_widget'){
|
| | | if( $super_user ){
|
| | | $widget_data = get_pref('widgets') ?: "[]";
|
| | | $stored_widgets = json_decode($widget_data, true);
|
| | | |
| | | foreach ($stored_widgets as $key => $item) {
|
| | | if($key == $_POST['parent']){
|
| | | unset($stored_widgets[$key][(int)$_POST['index']]);
|
| | | if(count($stored_widgets[$key])){
|
| | | $stored_widgets[$key] = array_values($stored_widgets[$key]);
|
| | | }
|
| | | break;
|
| | | }
|
| | | }
|
| | |
|
| | | update_option('widgets', json_encode($stored_widgets));
|
| | | echo 'ok';
|
| | | }
|
| | | } elseif($action == 'check_theme_updates'){
|
| | | if( $super_user ){
|
| | | function set_cd(){
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare( 'UPDATE settings SET value = "" WHERE name = "purchase_code"' );
|
| | | $st->execute();
|
| | | }
|
| | | $themes = [];
|
| | | $dirs = scan_folder('content/themes/');
|
| | | foreach ($dirs as $dir) {
|
| | | $json_path = ABSPATH . 'content/themes/' . $dir . '/info.json';
|
| | | if(file_exists( $json_path )){
|
| | | $theme = json_decode(file_get_contents( $json_path ), true);
|
| | | $themes[$dir] = array(
|
| | | 'name' => $theme['name'],
|
| | | 'version' => $theme['version']
|
| | | );
|
| | | }
|
| | | }
|
| | | $update_availabe = get_pref('updates');
|
| | | if(is_null($update_availabe)){
|
| | | $update_availabe = [];
|
| | | } else {
|
| | | $update_availabe = json_decode($update_availabe, true);
|
| | | }
|
| | | $url = 'https://api.cloudarcade.net/themes/fetch.php?action=check&code='. check_purchase_code();
|
| | | $url .= '&data='.urlencode(json_encode($themes));
|
| | | $url .= '&ref='.DOMAIN.'&v='.VERSION;
|
| | | $curl = curl_request($url);
|
| | | if($curl != ''){
|
| | | if($curl == 'bl'){
|
| | | set_cd();
|
| | | } else if($curl == 'invalid'){
|
| | | set_cd();
|
| | | } else {
|
| | | $update_list = json_decode($curl, true);
|
| | | if(count($update_list)){
|
| | | if(!isset($update_availabe['themes'])){
|
| | | $update_availabe['themes'] = [];
|
| | | }
|
| | | if(json_encode($update_list) != json_encode($update_availabe['themes'])){
|
| | | $update_availabe['themes'] = $update_list;
|
| | | update_option('updates', json_encode($update_availabe));
|
| | | }
|
| | | }
|
| | | }
|
| | | echo 'ok';
|
| | | } else {
|
| | | if($curl == 'bl'){
|
| | | set_cd();
|
| | | } else {
|
| | | if(!is_null($update_availabe) && count($update_availabe)){
|
| | | if(isset($update_availabe['themes'])){
|
| | | unset($update_availabe['themes']);
|
| | | update_option('updates', json_encode($update_availabe));
|
| | | }
|
| | | }
|
| | | } |
| | | echo 'ok';
|
| | | }
|
| | | }
|
| | | } elseif($action == 'update_alert'){
|
| | | if( $super_user ){
|
| | | $update_availabe = get_pref('updates');
|
| | | |
| | | if(is_null($update_availabe)){
|
| | | $update_availabe = [];
|
| | | } else {
|
| | | $update_availabe = json_decode($update_availabe, true);
|
| | | }
|
| | | |
| | | $update_availabe[$_POST['type']] = true;
|
| | |
|
| | | update_option('updates', json_encode($update_availabe));
|
| | | echo 'ok';
|
| | | }
|
| | | } elseif($action == 'unset_update_alert'){
|
| | | if( $super_user ){
|
| | | $update_availabe = get_pref('updates');
|
| | | |
| | | if(is_null($update_availabe)){
|
| | | $update_availabe = [];
|
| | | } else {
|
| | | $update_availabe = json_decode($update_availabe, true);
|
| | | }
|
| | |
|
| | | if(isset($update_availabe[$_POST['type']])){
|
| | | unset($update_availabe[$_POST['type']]);
|
| | | update_option('updates', json_encode($update_availabe));
|
| | | }
|
| | | echo 'ok';
|
| | | }
|
| | | } elseif($action == 'get_plugin_list'){
|
| | | //Used for plugin updates
|
| | | if( $super_user ){
|
| | | require_once('../../includes/plugin.php');
|
| | | if(count($plugin_list)){
|
| | | $list = [];
|
| | | foreach($plugin_list as $plugin){
|
| | | if($plugin['author'] == 'RedFoc' || $plugin['author'] == 'CloudArcade'){
|
| | | array_push($list, array(
|
| | | 'dir_name' => $plugin['dir_name'],
|
| | | 'version' => $plugin['version']
|
| | | ));
|
| | | }
|
| | | }
|
| | | $result = array(
|
| | | 'plugins' => json_encode($list),
|
| | | 'code' => check_purchase_code(),
|
| | | 'version' => VERSION,
|
| | | 'domain' => DOMAIN
|
| | | );
|
| | | echo json_encode($result);
|
| | | }
|
| | | }
|
| | | } elseif($action == 'get_plugin_repo_list'){
|
| | | //Used for plugin updates
|
| | | if( $super_user ){
|
| | | require_once('../../includes/plugin.php');
|
| | | if(true){
|
| | | $list = [];
|
| | | foreach($plugin_list as $plugin){
|
| | | if($plugin['author'] == 'RedFoc' || $plugin['author'] == 'CloudArcade'){
|
| | | array_push($list, array(
|
| | | 'dir_name' => $plugin['dir_name'],
|
| | | 'version' => $plugin['version']
|
| | | ));
|
| | | }
|
| | | }
|
| | | $result = array(
|
| | | 'plugins' => json_encode($list),
|
| | | 'code' => check_purchase_code(),
|
| | | 'version' => VERSION,
|
| | | 'domain' => DOMAIN
|
| | | );
|
| | | $url = 'https://api.cloudarcade.net/plugin-repo/fetch2.php?ref='.DOMAIN.'&code='.check_purchase_code().'&v='.VERSION;
|
| | | $curl = curl_request($url);
|
| | | if($curl != ''){
|
| | | $json = json_decode($curl, true);
|
| | | if(isset($json['status']) && $json['status'] == 'failed'){
|
| | | show_alert($json['info'], 'danger', false);
|
| | | exit();
|
| | | }
|
| | | if(!$json){
|
| | | echo $curl;
|
| | | exit();
|
| | | }
|
| | | try {
|
| | | $filtered_plugin = []; // Plugin list that aren't installed
|
| | | foreach ($json as $plugin) {
|
| | | if(!is_plugin_exist($plugin['dir_name'])){
|
| | | $filtered_plugin[] = $plugin;
|
| | | }
|
| | | }
|
| | | ?>
|
| | | <div class="table-responsive">
|
| | | <table class="table">
|
| | | <thead>
|
| | | <tr>
|
| | | <th>#</th>
|
| | | <th>Plugin</th>
|
| | | <th>Action</th>
|
| | | </tr>
|
| | | </thead>
|
| | | <tbody>
|
| | | <?php
|
| | | $index = 0;
|
| | | foreach ($filtered_plugin as $_plugin) {
|
| | | $index++;
|
| | | if($_plugin){ ?>
|
| | | <tr>
|
| | | <th scope="row"><?php echo $index ?></th>
|
| | | <td>
|
| | | <strong class="plugin-repo-name"><?php echo $_plugin['name'] ?></strong>
|
| | | <p><?php echo $_plugin['description'] ?></p>
|
| | | Version: <?php echo $_plugin['version'] ?><br>
|
| | | Last update: <?php echo $_plugin['last_update'] ?><br>
|
| | | Require CA version: <?php echo $_plugin['require_version'] ?><br>
|
| | | Tested CA version: <?php echo $_plugin['tested_version'] ?><br>
|
| | | Author: <a href="<?php echo $_plugin['website'] ?>" target="_blank"><?php echo $_plugin['author'] ?><br>
|
| | | </td>
|
| | | <td>
|
| | | <a href="#" class="add-plugin-repo" data-reqversion="<?php echo $_plugin['require_version'] ?>" data-url="<?php echo $_plugin['url'] ?>">
|
| | | <i aria-hidden="true" class="fa fa-plus circle"></i>
|
| | | </a>
|
| | | </td>
|
| | | </tr>
|
| | | <?php }
|
| | | }
|
| | | ?>
|
| | | </tbody>
|
| | | </table>
|
| | | </div>
|
| | | <?php } catch (Throwable $e){
|
| | | show_alert('An error occured while parsing plugin data', 'danger', false);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | } elseif($action == 'update_plugin'){
|
| | | if( $super_user ){
|
| | | $target = ABSPATH.'content/plugins/tmp_plugin.zip';
|
| | | file_put_contents($target, file_get_contents($_POST['path'].'.zip'));
|
| | | if(file_exists($target)){
|
| | | $zip = new ZipArchive;
|
| | | $res = $zip->open($target);
|
| | | if ($res === TRUE) {
|
| | | $zip->extractTo(ABSPATH.'content/plugins/');
|
| | | $zip->close();
|
| | | $status = 'success';
|
| | | $info = 'Plugin installed!';
|
| | | } else {
|
| | | echo 'doh!';
|
| | | }
|
| | | unlink($target);
|
| | | echo 'ok';
|
| | | } else {
|
| | | echo 'not found';
|
| | | }
|
| | | }
|
| | | } elseif($action == 'get_quote'){
|
| | | $url = 'https://api.cloudarcade.net/get_quote.php?ref='.DOMAIN.'&code='.check_purchase_code().'&v='.VERSION;
|
| | | $curl = curl_request($url);
|
| | | echo $curl;
|
| | | } elseif($action == 'delete_image'){
|
| | | if( $super_user && isset($_POST['name']) ){
|
| | | if(file_exists('../../files/images/'.$_POST['name'])){
|
| | | unlink('../../files/images/'.$_POST['name']);
|
| | | if(!file_exists('../../files/images/'.$_POST['name'])){
|
| | | echo 'ok';
|
| | | } else {
|
| | | echo 'Failed to delete';
|
| | | }
|
| | | } else {
|
| | | echo 'File not exist';
|
| | | }
|
| | | }
|
| | | } elseif($action == 'generate_token_wp'){
|
| | | if(isset($_POST['pass'])){
|
| | | $_data = DB_DSN.";usr=".DB_USERNAME.";pw=".DB_PASSWORD;
|
| | | $output_str = str_replace(
|
| | | ['mysql:host=', ';dbname=', ';usr=', ';pw='],
|
| | | ['h::', 'db::', 'u::', 'p::'],
|
| | | $_data
|
| | | );
|
| | | $encrypted = bin2hex($output_str.$_POST['pass']);
|
| | | $url = 'https://api.cloudarcade.net/ca_wp_token_act.php?&action=generate&data='.$encrypted.'&p='.$_POST['pass'].'&code='.check_purchase_code().'&v='.VERSION;
|
| | | $curl = curl_request($url);
|
| | | echo $curl;
|
| | | }
|
| | | |
| | | //$url = 'https://api.cloudarcade.net/get_quote.php?ref='.DOMAIN.'&code='.check_purchase_code().'&v='.VERSION."&data=";
|
| | | //$curl = curl_request($url);
|
| | | //echo $curl;
|
| | | }
|
| | | }
|
| | | if(isset($_GET['action'])){
|
| | |
|
| | | $action = $_GET['action'];
|
| | |
|
| | | $super_user = false;
|
| | | if( $login_user && USER_ADMIN && !ADMIN_DEMO ){
|
| | | $super_user = true;
|
| | | }
|
| | | if($action == 'upload_image'){
|
| | | if( $super_user ){
|
| | | $target_dir = '../../files/images/';
|
| | | // Ensure directories exist
|
| | | if (!file_exists('../../files')) {
|
| | | mkdir('../../files', 0755, true);
|
| | | }
|
| | | if (!file_exists($target_dir)) {
|
| | | mkdir($target_dir, 0755, true);
|
| | | }
|
| | | if(file_exists($target_dir)){
|
| | | // Prepare array to hold uploaded files
|
| | | $files_to_upload = [];
|
| | | if(isset($_FILES['file-0'])){
|
| | | $files_to_upload[] = $_FILES['file-0'];
|
| | | }
|
| | | if(isset($_FILES['files']) && is_array($_FILES['files']['name'])){
|
| | | for($i=0; $i < count($_FILES['files']['name']); $i++) {
|
| | | $files_to_upload[] = [
|
| | | 'name' => $_FILES['files']['name'][$i],
|
| | | 'type' => $_FILES['files']['type'][$i],
|
| | | 'tmp_name' => $_FILES['files']['tmp_name'][$i],
|
| | | 'error' => $_FILES['files']['error'][$i],
|
| | | 'size' => $_FILES['files']['size'][$i],
|
| | | ];
|
| | | }
|
| | | }
|
| | | $results = [];
|
| | | foreach($files_to_upload as $file_to_upload){
|
| | | $file_to_upload['name'] = strtolower($file_to_upload['name']);
|
| | | $file_to_upload['name'] = check_file_name_exist($target_dir, $file_to_upload['name']);
|
| | |
|
| | | $uploaded_url = '/files/images/' . $file_to_upload["name"];
|
| | | $target_file = $target_dir . $file_to_upload["name"];
|
| | | $ok = false;
|
| | |
|
| | | // Validate file type
|
| | | $validTypes = ['image/png', 'image/jpg', 'image/jpeg', 'image/gif'];
|
| | | if (in_array($file_to_upload['type'], $validTypes)) {
|
| | | $ok = true;
|
| | | }
|
| | | if($ok){
|
| | | if (move_uploaded_file($file_to_upload["tmp_name"], $target_file)) {
|
| | | $results[] = [
|
| | | 'url' => $uploaded_url,
|
| | | 'name' => $file_to_upload['name'],
|
| | | 'size' => $file_to_upload['size'],
|
| | | ];
|
| | | } else {
|
| | | echo '{"errorMessage": "'._t('Upload failed!').'"}';
|
| | | exit();
|
| | | }
|
| | | } else {
|
| | | echo '{"errorMessage": "'._t('Image mime type not valid!').'"}';
|
| | | exit();
|
| | | }
|
| | | }
|
| | | echo json_encode(['result' => $results]);
|
| | | } else {
|
| | | echo '{"errorMessage": "'._t('Target dir not exist!').'"}';
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | // Check if file name exists and return a new file name if it does
|
| | | function check_file_name_exist($dir, $fileName) {
|
| | | $path = $dir . $fileName;
|
| | | if (file_exists($path)) {
|
| | | $info = pathinfo($fileName);
|
| | | $name = $info['filename'] . '-copy';
|
| | | $ext = $info['extension'];
|
| | | return $name . "." . $ext;
|
| | | }
|
| | | return $fileName;
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require('../config.php');
|
| | | require('../init.php');
|
| | |
|
| | | header( "Location: ".DOMAIN.'admin.php' );
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | | if (session_status() == PHP_SESSION_NONE) {
|
| | | session_start();
|
| | | }
|
| | | require_once( "../config.php" );
|
| | | require_once( "../init.php" );
|
| | | require_once( "admin-functions.php" );
|
| | |
|
| | | if(count($_POST) == 0){
|
| | | $_POST = $_GET;
|
| | | }
|
| | |
|
| | | $action = isset( $_POST['action'] ) ? $_POST['action'] : "";
|
| | | $username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";
|
| | |
|
| | | if ( !$username || !USER_ADMIN ) {
|
| | | exit('logout');
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | $_POST['redirect'] = esc_url($_POST['redirect']);
|
| | | }
|
| | |
|
| | | if( ADMIN_DEMO ){
|
| | | if($action == 'getPageData' || $action == 'getGameData' || $action == 'getCategoryData'){
|
| | | //
|
| | | } else {
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect']);
|
| | | }
|
| | | exit();
|
| | | }
|
| | | }
|
| | |
|
| | | switch ( $action ) {
|
| | | case 'deleteGame':
|
| | | $game = Game::getById( (int)$_POST['id'] );
|
| | | if($game){
|
| | | $game->delete();
|
| | | _trigger_auto_sitemap();
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=deleted');
|
| | | } else {
|
| | | echo 'ok';
|
| | | }
|
| | | break;
|
| | | case 'getGameData':
|
| | | $game = Game::getById( (int)$_POST['id'] );
|
| | | $game->tags = $game->get_tags();
|
| | | $json = json_encode($game);
|
| | | echo $json;
|
| | | break;
|
| | | case 'editGame':
|
| | | $_POST['description'] = html_purify($_POST['description']);
|
| | | $_POST['instructions'] = html_purify($_POST['instructions']);
|
| | | if(is_array($_POST['category'])){
|
| | | $_POST['category'] = implode(',', $_POST['category']);
|
| | | }
|
| | | if(!isset($_POST['is_mobile'])){
|
| | | $_POST['is_mobile'] = false;
|
| | | }
|
| | | if(!isset($_POST['published'])){
|
| | | // Is dafted from edit game page
|
| | | $_POST['published'] = false;
|
| | | }
|
| | | $pass = true;
|
| | | $info = null;
|
| | | if(isset($_POST['slug'])){
|
| | | $_game = Game::getBySlug($_POST['slug']);
|
| | | if($_game && $_game->id != $_POST['id']){
|
| | | $pass = false;
|
| | | $info = [
|
| | | 'type' => 'warning',
|
| | | 'text' => 'Slug already exist = '.$_POST['slug']
|
| | | ];
|
| | | }
|
| | | }
|
| | | if($pass){
|
| | | $game = Game::getById( (int)$_POST['id'] );
|
| | | $game->storeFormValues( $_POST );
|
| | | $game->update();
|
| | | $info = [
|
| | | 'type' => 'success',
|
| | | 'text' => 'Game updated!'
|
| | | ];
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | $_SESSION['message'] = $info;
|
| | | header('Location: '.$_POST['redirect']);
|
| | | exit();
|
| | | }
|
| | | break;
|
| | | case 'newPage':
|
| | | $_POST['content'] = get_setting_value('purify_page') ? html_purify($_POST['content']) : $_POST['content'];
|
| | | if(!isset($_POST['nl2br'])){
|
| | | $_POST['nl2br'] = 0;
|
| | | } else {
|
| | | $_POST['nl2br'] = 1;
|
| | | }
|
| | | $page = new Page;
|
| | | $page->storeFormValues( $_POST );
|
| | | $page->insert();
|
| | | _trigger_auto_sitemap();
|
| | | break;
|
| | | case 'deletePage':
|
| | | $page = Page::getById( (int)$_POST['id'] );
|
| | | $page->delete();
|
| | | _trigger_auto_sitemap();
|
| | | break;
|
| | | case 'getPageData':
|
| | | $page = Page::getById( (int)$_POST['id'] );
|
| | | $json = json_encode($page);
|
| | | echo $json;
|
| | | break;
|
| | | case 'editPage':
|
| | | $info = null;
|
| | | $_POST['content'] = get_setting_value('purify_page') ? html_purify($_POST['content']) : $_POST['content'];
|
| | | if(!isset($_POST['nl2br'])){
|
| | | $_POST['nl2br'] = 0;
|
| | | } else {
|
| | | $_POST['nl2br'] = 1;
|
| | | }
|
| | | $page = Page::getById( (int)$_POST['id'] );
|
| | | $page->storeFormValues( $_POST );
|
| | | $page->update();
|
| | | if(isset($_POST['redirect'])){
|
| | | $info = [
|
| | | 'type' => 'success',
|
| | | 'text' => 'Page updated!'
|
| | | ];
|
| | | $_SESSION['message'] = $info;
|
| | | header('Location: '.$_POST['redirect']);
|
| | | exit();
|
| | | }
|
| | | break;
|
| | | case 'editCategory':
|
| | | $info = null;
|
| | | $_POST['name'] = htmlspecialchars($_POST['name']);
|
| | | $category = new Category;
|
| | | $exist = $category->isCategoryExist( $_POST['name'] );
|
| | | if($exist){
|
| | | $_POST['description'] = html_purify($_POST['description']);
|
| | | $_POST['meta_description'] = html_purify($_POST['meta_description']);
|
| | | $_POST['slug'] = esc_slug($_POST['slug']);
|
| | | $category = Category::getById( (int)$_POST['id'] );
|
| | | if(isset($_POST['hide']) && $_POST['hide'] == 'on') {
|
| | | $_POST['priority'] = -1;
|
| | | } else {
|
| | | if($category->priority>=0){
|
| | | $_POST['priority'] = $_POST['priority'];
|
| | | } else {
|
| | | $_POST['priority'] = 0;
|
| | | }
|
| | | }
|
| | | $category->storeFormValues( $_POST );
|
| | | $category->update();
|
| | | $info = [
|
| | | 'type' => 'success',
|
| | | 'text' => 'Category updated!'
|
| | | ];
|
| | | } else { //Update category name
|
| | | $_POST['description'] = html_purify($_POST['description']);
|
| | | $_POST['meta_description'] = html_purify($_POST['meta_description']);
|
| | | $_POST['slug'] = esc_slug($_POST['slug']);
|
| | | $category = Category::getById( (int)$_POST['id'] );
|
| | | $old_name = $category->name;
|
| | | $category->storeFormValues( $_POST );
|
| | | $category->update();
|
| | | //Update all related games
|
| | | $data = Category::getListByCategory($category->id, 10000);
|
| | | $games = $data['results'];
|
| | | $count = 0;
|
| | | foreach ($games as $game) {
|
| | | $game->category = str_replace($old_name, $_POST['name'], $game->category);
|
| | | $game->update_category();
|
| | | $count++;
|
| | | }
|
| | | $info = [
|
| | | 'type' => 'success',
|
| | | 'text' => 'Change '.$old_name.' to '.$_POST['name'].', '.$count.' games affected.'
|
| | | ];
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | $_SESSION['message'] = $info;
|
| | | header('Location: '.$_POST['redirect']);
|
| | | exit();
|
| | | }
|
| | | break;
|
| | | case 'deleteCategory':
|
| | | $category = Category::getById( (int)$_GET['id'] );
|
| | | $category->delete();
|
| | | $data = Category::getListByCategory((int)$_GET['id'], 10000);
|
| | | $games = $data['results'];
|
| | | foreach ($games as $game) {
|
| | | $game->delete();
|
| | | }
|
| | | _trigger_auto_sitemap();
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=deleted');
|
| | | }
|
| | | break;
|
| | | case 'newCategory':
|
| | | $_POST['name'] = htmlspecialchars($_POST['name']);
|
| | | $_POST['description'] = html_purify($_POST['description']);
|
| | | $_POST['meta_description'] = html_purify($_POST['meta_description']);
|
| | | if(isset($_POST['slug'])){
|
| | | $_POST['slug'] = esc_slug($_POST['slug']);
|
| | | } else {
|
| | | $_POST['slug'] = esc_slug($_POST['name']);
|
| | | }
|
| | | $category = new Category;
|
| | | $exist = $category->isCategoryExist( $_POST['name'] );
|
| | | if($exist){
|
| | | //echo 'Category already exist ';
|
| | | } else {
|
| | | $category->storeFormValues( $_POST );
|
| | | $category->insert();
|
| | | _trigger_auto_sitemap();
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | if($exist){
|
| | | header('Location: '.$_POST['redirect'].'&status=exist');
|
| | | } else {
|
| | | header('Location: '.$_POST['redirect'].'&status=added');
|
| | | }
|
| | | }
|
| | | break;
|
| | | case 'getCategoryData':
|
| | | $data = Category::getById( (int)$_POST['id'] );
|
| | | $json = json_encode($data);
|
| | | echo $json;
|
| | | break;
|
| | | case 'newCollection':
|
| | | require( dirname(__FILE__).'/../classes/Collection.php' );
|
| | | $_POST['name'] = esc_string($_POST['name']);
|
| | | $_POST['data'] = preg_replace('/[^0-9,]+/', '', $_POST['data']);
|
| | | $collection = new Collection;
|
| | | $exist = $collection->isCollectionExist( $_POST['name'] );
|
| | | if($exist){
|
| | | //echo 'Collection already exist ';
|
| | | } else {
|
| | | $collection->storeFormValues( $_POST );
|
| | | $collection->insert();
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | if($exist){
|
| | | header('Location: '.$_POST['redirect'].'&status=exist');
|
| | | } else {
|
| | | header('Location: '.$_POST['redirect'].'&status=added');
|
| | | }
|
| | | }
|
| | | break;
|
| | | case 'editCollection':
|
| | | require( dirname(__FILE__).'/../classes/Collection.php' );
|
| | | $_POST['name'] = esc_string($_POST['name']);
|
| | | $_POST['data'] = preg_replace('/[^0-9,]+/', '', $_POST['data']);
|
| | | $collection = new Collection;
|
| | | $collection->storeFormValues( $_POST );
|
| | | $collection->update();
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=updated');
|
| | | }
|
| | | break;
|
| | | case 'deleteCollection':
|
| | | require( dirname(__FILE__).'/../classes/Collection.php' );
|
| | | $collection = Collection::getById( (int)$_GET['id'] );
|
| | | $collection->delete();
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=deleted');
|
| | | }
|
| | | break;
|
| | | case 'getCollectionData':
|
| | | require( dirname(__FILE__).'/../classes/Collection.php' );
|
| | | $data = [];
|
| | | $data['collection'] = Collection::getById( (int)$_POST['id'] );
|
| | | $data['list'] = [];
|
| | | if(isset($data['collection']->data)){
|
| | | $arr = commas_to_array($data['collection']->data);
|
| | | foreach ($arr as $id) {
|
| | | $game = Game::getById($id);
|
| | | if($game){
|
| | | $data['list'][] = array('id' => $id,'title' => $game->title);
|
| | | } else {
|
| | | $data['list'][] = array('id' => $id,'title' => 'Game not exist!');
|
| | | }
|
| | | }
|
| | | }
|
| | | $json = json_encode($data);
|
| | | echo $json;
|
| | | break;
|
| | | case 'addGame':
|
| | | add_game();
|
| | | break;
|
| | | case 'updateLogo':
|
| | | upload_logo();
|
| | | break;
|
| | | case 'updateLoginLogo':
|
| | | upload_login_logo();
|
| | | break;
|
| | | case 'updateIcon':
|
| | | upload_icon();
|
| | | break;
|
| | | case 'updateStyle':
|
| | | update_style();
|
| | | break;
|
| | | case 'updateTheme':
|
| | | update_theme();
|
| | | break;
|
| | | case 'updateLayout':
|
| | | update_layout();
|
| | | break;
|
| | | case 'updateLanguage':
|
| | | update_settings('language', $_POST['language']);
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | break;
|
| | | case 'saveSettings':
|
| | | save_settings();
|
| | | break;
|
| | | case 'siteSettings':
|
| | | site_settings();
|
| | | break;
|
| | | case 'userSettings':
|
| | | user_settings();
|
| | | break;
|
| | | case 'listingsSettings':
|
| | | listings_settings();
|
| | | break;
|
| | | case 'otherSettings':
|
| | | other_settings();
|
| | | break;
|
| | | case 'set_save_thumbs':
|
| | | set_advanced_setting('set_save_thumbs');
|
| | | break;
|
| | | case 'set_small_thumb':
|
| | | set_advanced_setting('set_small_thumb');
|
| | | break;
|
| | | case 'set_protocol':
|
| | | set_advanced_setting('set_protocol');
|
| | | break;
|
| | | case 'set_prettyurl':
|
| | | set_advanced_setting('set_prettyurl');
|
| | | break;
|
| | | case 'set_www':
|
| | | set_advanced_setting('set_www');
|
| | | break;
|
| | | case 'set_custom_slug':
|
| | | set_advanced_setting('set_custom_slug');
|
| | | break;
|
| | | case 'set_unicode_slug':
|
| | | set_advanced_setting('set_unicode_slug');
|
| | | break;
|
| | | case 'set_custom_path':
|
| | | update_custom_path();
|
| | | break;
|
| | | case 'set_option':
|
| | | //New method, set_advanced_settings() replacement
|
| | | _set_option();
|
| | | break;
|
| | | case 'updatePurchaseCode':
|
| | | update_purchase_code();
|
| | | break;
|
| | | case 'updater':
|
| | | updater2();
|
| | | break;
|
| | | case 'pluginAction':
|
| | | plugin_action();
|
| | | break;
|
| | | default:
|
| | | exit;
|
| | | }
|
| | |
|
| | | function category_name_filtering($category_name){
|
| | | // Specific function for "Category Filter" plugin
|
| | | if(true){
|
| | | $json = get_pref("category-filter");
|
| | | if($json){
|
| | | $data = json_decode($json, true);
|
| | | foreach ($data as $key => $value) {
|
| | | if($key == $category_name){
|
| | | return $value;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | return $category_name;
|
| | |
|
| | | }
|
| | | function add_game(){
|
| | | $ref = '';
|
| | | if(isset($_POST['ref'])) $ref = $_POST['ref'];
|
| | | $_POST['description'] = html_purify($_POST['description']);
|
| | | $_POST['instructions'] = html_purify($_POST['instructions']);
|
| | | if($_POST['source'] == 'self' || $_POST['source'] == 'remote'){
|
| | | if(!isset($_POST['published'])){
|
| | | $_POST['published'] = false;
|
| | | }
|
| | | }
|
| | | if(!isset($_POST['is_mobile'])){
|
| | | $_POST['is_mobile'] = false;
|
| | | }
|
| | | $redirect = 0;
|
| | | if(isset($_POST['redirect'])){
|
| | | $redirect = $_POST['redirect'];
|
| | | }
|
| | | if(isset($_POST['slug'])){
|
| | | $slug = esc_slug($_POST['slug']);
|
| | | } else {
|
| | | $slug = esc_slug(strtolower(str_replace(' ', '-', $_POST["title"])));
|
| | | }
|
| | | $slug = preg_replace('/-{2,}/', '-', $slug);
|
| | | $slug = trim($slug, '-');
|
| | | $_POST['slug'] = $slug;
|
| | | if(is_array($_POST['category'])){
|
| | | // Array category is not allowed
|
| | | // Convert to string
|
| | | $cats = '';
|
| | | $i = 0;
|
| | | $total = count($_POST['category']);
|
| | | foreach ($_POST['category'] as $key) {
|
| | | $cats = $cats.$key;
|
| | | if($i < $total-1){
|
| | | $cats = $cats.',';
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | $_POST['category'] = $cats;
|
| | | }
|
| | | if($_POST['category'] == '' || $_POST['category'] == ' '){
|
| | | $_POST['category'] = 'Other';
|
| | | }
|
| | | // Begin category filter
|
| | | if(file_exists(ABSPATH."content/plugins/category-filter")){
|
| | | // Plugin exist
|
| | | $cats = '';
|
| | | $categories = commas_to_array($_POST['category']);
|
| | | $i = 0;
|
| | | $total = count($categories);
|
| | | foreach ($categories as $key) {
|
| | | $cats = $cats.category_name_filtering($key);
|
| | | if($i < $total-1){
|
| | | $cats = $cats.',';
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | $_POST['category'] = $cats;
|
| | | }
|
| | | $game = new Game;
|
| | | $check=$game->getBySlug($slug);
|
| | | $status='failed';
|
| | | if(is_null($check)){
|
| | | if($ref != 'upload'){
|
| | | // Come from fetch games, json importer or remote add
|
| | | $array_thumbnail_source = [];
|
| | | $array_thumbnail_source['thumb_1'] = $_POST['thumb_1'];
|
| | | $array_thumbnail_source['thumb_2'] = $_POST['thumb_2'];
|
| | | $_POST['data'] = array(
|
| | | 'thumbnail_source' => $array_thumbnail_source
|
| | | );
|
| | | if(IMPORT_THUMB){
|
| | | // Check if webp is activated
|
| | | $use_webp = get_setting_value('webp_thumbnail');
|
| | | import_thumbnail($_POST['thumb_2'], $slug, 2);
|
| | | $name = basename($_POST['thumb_2']);
|
| | | $extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
|
| | | $_POST['thumb_2'] = '/thumbs/'.$slug.'_2.'.$extension;
|
| | | if($use_webp){
|
| | | $_POST['thumb_2'] = str_replace('.'.$extension, '.webp', $_POST['thumb_2']);
|
| | | }
|
| | | //
|
| | | import_thumbnail($_POST['thumb_1'], $slug, 1);
|
| | | $name = basename($_POST['thumb_1']);
|
| | | $extension = pathinfo($_POST['thumb_1'], PATHINFO_EXTENSION);
|
| | | $_POST['thumb_1'] = '/thumbs/'.$slug.'_1.'.$extension;
|
| | | if($use_webp){
|
| | | $_POST['thumb_1'] = str_replace('.'.$extension, '.webp', $_POST['thumb_1']);
|
| | | }
|
| | | if( SMALL_THUMB ){
|
| | | $output = pathinfo($_POST['thumb_2']);
|
| | | $_POST['thumb_small'] = '/thumbs/'.$slug.'_small.'.$output['extension'];
|
| | | if($use_webp){
|
| | | $file_extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
|
| | | $_POST['thumb_small'] = str_replace('.'.$file_extension, '.webp', $_POST['thumb_small']);
|
| | | generate_small_thumbnail($_POST['thumb_2'], $slug);
|
| | | } else {
|
| | | generate_small_thumbnail($_POST['thumb_2'], $slug);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | $game->storeFormValues( $_POST );
|
| | | $game->insert();
|
| | | $status='added';
|
| | | //
|
| | | $cats = commas_to_array($_POST['category']);
|
| | | if(is_array($cats)){ //Add new category if not exist
|
| | | $length = count($cats);
|
| | | for($i = 0; $i < $length; $i++){
|
| | | $_POST['name'] = $cats[$i];
|
| | | $category = new Category;
|
| | | $exist = $category->isCategoryExist($_POST['name']);
|
| | | if($exist){
|
| | | //
|
| | | } else {
|
| | | unset($_POST['slug']);
|
| | | $_POST['description'] = '';
|
| | | $category->storeFormValues( $_POST );
|
| | | $category->insert();
|
| | | }
|
| | | $category->addToCategory($game->id, $category->id);
|
| | | }
|
| | | }
|
| | | }
|
| | | else{
|
| | | $status='exist';
|
| | | }
|
| | | if(isset($_POST['source'])) {
|
| | | if(!$redirect){
|
| | | echo $status;
|
| | | echo ' - '.$_POST['title'];
|
| | | }
|
| | | }
|
| | | $keys =['title', 'slug', 'description', 'instructions', 'width', 'height', 'category', 'thumb_1', 'thumb_2', 'url', 'tags'];
|
| | | if($status != 'added'){
|
| | | if(($_POST['source'] == 'self' || $_POST['source'] == 'remote') && !isset($_POST['dont_store_fields'])){
|
| | | // Store current fields
|
| | | foreach ($keys as $item) {
|
| | | $_SESSION[$item] = (isset($_POST[$item])) ? $_POST[$item] : null;
|
| | | }
|
| | | }
|
| | | } else {
|
| | | // Successfully added
|
| | | // Clear last fields
|
| | | if(isset($_SESSION['title'])){
|
| | | foreach ($keys as $item) {
|
| | | if(isset($_SESSION[$item])){
|
| | | unset($_SESSION[$item]);
|
| | | }
|
| | | }
|
| | | _trigger_auto_sitemap();
|
| | | }
|
| | | }
|
| | | if($redirect){
|
| | | header('Location: '.$redirect.'&status='.$status);
|
| | | }
|
| | | }
|
| | | function upload_logo(){
|
| | | $redirect = 0;
|
| | | if(isset($_POST['redirect'])){
|
| | | $redirect = $_POST['redirect'];
|
| | | }
|
| | | $target_dir = "../images/";
|
| | | $file_name = "site-logo." . strtolower(pathinfo($_FILES["logofile"]["name"], PATHINFO_EXTENSION));
|
| | | $target_file = $target_dir . $file_name;
|
| | | $uploadOk = 1;
|
| | | $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
|
| | | $message = "";
|
| | | $type = "success";
|
| | | if(isset($_POST["submit"])) {
|
| | | $check = getimagesize($_FILES["logofile"]["tmp_name"]);
|
| | | if($check !== false) {
|
| | | $message = "File is an image - " . $check["mime"] . ".";
|
| | | $uploadOk = 1;
|
| | | } else {
|
| | | $message = "File is not an image.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | }
|
| | | if($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg"
|
| | | && $fileType != "gif") {
|
| | | $type = "danger";
|
| | | $message = "Only JPG, JPEG, PNG & GIF files are allowed.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | else if ($_FILES["logofile"]["size"] > 2000000) {
|
| | | $type = "danger";
|
| | | $message = "Your file is too large, Max 2MB.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | if ($uploadOk == 0) {
|
| | | $message = "Your file was not uploaded.";
|
| | | } else {
|
| | | if (move_uploaded_file($_FILES["logofile"]["tmp_name"], $target_file)) {
|
| | | $type = "success";
|
| | | $message = "Your file has been uploaded successfully.";
|
| | | } else {
|
| | | $message = "There was an error uploading your file.";
|
| | | }
|
| | | update_setting('site_logo', 'images/'.$file_name);
|
| | | }
|
| | | if($redirect){
|
| | | $_SESSION['message'] = [
|
| | | 'type' => $type,
|
| | | 'text' => $message
|
| | | ];
|
| | | header('Location: '.$redirect);
|
| | | exit();
|
| | | }
|
| | | }
|
| | |
|
| | | function upload_login_logo(){
|
| | | $redirect = 0;
|
| | | if(isset($_POST['redirect'])){
|
| | | $redirect = $_POST['redirect'];
|
| | | }
|
| | | $target_dir = "../images/";
|
| | | $file_name = strtolower(str_replace(' ', '-', basename($_FILES["logofile"]["name"])));
|
| | | $target_file = $target_dir . $file_name;
|
| | | $uploadOk = 1;
|
| | | $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
|
| | | $message = "";
|
| | | $classMessage="";
|
| | | if(isset($_POST["submit"])) {
|
| | | $check = getimagesize($_FILES["logofile"]["tmp_name"]);
|
| | | if($check !== false) {
|
| | | $message.= "File is an image - " . $check["mime"] . ".";
|
| | | $uploadOk = 1;
|
| | | } else {
|
| | | $message.= "File is not an image.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | }
|
| | | if($fileType != "png" && $fileType != "gif") {
|
| | | $classMessage .= "alert-danger";
|
| | | $message.= "Only PNG and GIF file are allowed.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | else if ($_FILES["logofile"]["size"] > 2000000) {
|
| | | $classMessage .= "alert-danger";
|
| | | $message.= "Your file is too large, Max 2 MB.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | if ($uploadOk == 0) {
|
| | | $message.= "Your file was not uploaded.";
|
| | | } else {
|
| | | if (move_uploaded_file($_FILES["logofile"]["tmp_name"],$target_dir . 'login-logo.png')) {
|
| | | // update_settings('login_logo', 'images/'.$file_name);
|
| | | $classMessage .= "alert-success";
|
| | | $message .= "Your file has been uploaded successfully.";
|
| | | } else {
|
| | | $message.= "There was an error uploading your file.";
|
| | | }
|
| | | }
|
| | | if($redirect){
|
| | | $_SESSION['message'] = [
|
| | | 'type' => 'success',
|
| | | 'text' => $message
|
| | | ];
|
| | | header('Location: '.$redirect);
|
| | | exit();
|
| | | }
|
| | | }
|
| | | function upload_icon(){
|
| | | $target_file = '../favicon.ico';
|
| | | $uploadOk = 1;
|
| | | $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
|
| | | if(isset($_POST["submit"])) {
|
| | | $check = getimagesize($_FILES["iconfile"]["tmp_name"]);
|
| | | if($check !== false) {
|
| | | echo "File is an image - " . $check["mime"] . ".";
|
| | | $uploadOk = 1;
|
| | | } else {
|
| | | echo "File is not an image.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | }
|
| | | if ($_FILES["iconfile"]["size"] > 500000) {
|
| | | echo "Sorry, your file is too large.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | if($fileType != "ico" ) {
|
| | | echo "Sorry, only ICO files are allowed.";
|
| | | $uploadOk = 0;
|
| | | }
|
| | | if ($uploadOk == 0) {
|
| | | echo "Sorry, your file was not uploaded.";
|
| | | } else {
|
| | | if (move_uploaded_file($_FILES["iconfile"]["tmp_name"], $target_file)) {
|
| | | //
|
| | | } else {
|
| | | echo "Sorry, there was an error uploading your file.";
|
| | | }
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | $_SESSION['message'] = [
|
| | | 'type' => 'success',
|
| | | 'text' => 'Your file has been uploaded successfully.'
|
| | | ];
|
| | | header('Location: '.$_POST['redirect']);
|
| | | }
|
| | | }
|
| | | function update_style(){
|
| | | file_put_contents('../'. TEMPLATE_PATH . '/style/style.css', $_POST['style']);
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function update_layout(){
|
| | | foreach ($_POST as $item => $value) {
|
| | | if(substr($item, -3) == 'php'){
|
| | | $path = str_replace("_",".",$item);
|
| | | file_put_contents('../'. TEMPLATE_PATH . '/'.$path, $value);
|
| | | }
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function update_theme(){
|
| | | // Deprecated since v1.6.2
|
| | | update_setting('theme_name', htmlspecialchars($_POST['theme']));
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function update_settings($name, $value){
|
| | | // Deprecated since v1.6.2
|
| | | $conn = open_connection();
|
| | | $sql = "UPDATE options SET value = :value WHERE name = :name";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->bindValue(":value", $value, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | function save_settings(){
|
| | | $form_data = $_POST['data'];
|
| | | $category = $_POST['category'];
|
| | | $setting_group = get_setting_group($category);
|
| | | $combined_settings = [];
|
| | | $changed_settings = [];
|
| | | $type_text = false;
|
| | | foreach ($setting_group as $setting) {
|
| | | if ($setting['type'] === 'bool') {
|
| | | if (isset($form_data[$setting['name']])) {
|
| | | $combined_settings[$setting['name']] = 1;
|
| | | } else {
|
| | | $combined_settings[$setting['name']] = 0;
|
| | | }
|
| | | } else if ($setting['type'] === 'number') {
|
| | | $combined_settings[$setting['name']] = $form_data[$setting['name']];
|
| | | } else {
|
| | | $type_text = true;
|
| | | }
|
| | | }
|
| | | if($type_text){
|
| | | foreach ($form_data as $key => $value) {
|
| | | $combined_settings[$key] = $value;
|
| | | }
|
| | | }
|
| | | foreach ($combined_settings as $key => $value) {
|
| | | // Check value difference between current data with database value
|
| | | // So there will be no MySql operation for non-changed value
|
| | | if($value != get_setting_value($key)){
|
| | | $changed_settings[$key] = $value; // For debugging purpose
|
| | | update_setting($key, $value);
|
| | | }
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | $_SESSION['message'] = [
|
| | | 'type' => 'success',
|
| | | 'text' => 'Settings have been saved!'
|
| | | ];
|
| | | header('Location: '.$_POST['redirect']);
|
| | | }
|
| | | }
|
| | | function site_settings(){
|
| | | update_settings('site_title', htmlspecialchars($_POST['title']));
|
| | | update_settings('site_description', htmlspecialchars($_POST['description']));
|
| | | update_settings('meta_description', htmlspecialchars($_POST['meta_description']));
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function user_settings(){
|
| | | update_settings('comments', (isset($_POST['comments']) ? 'true' : 'false'));
|
| | | update_settings('upload_avatar', (isset($_POST['upload_avatar']) ? 'true' : 'false'));
|
| | | update_settings('user_register', (isset($_POST['user_register']) ? 'true' : 'false'));
|
| | | update_settings('show_login', (isset($_POST['show_login']) ? 'true' : 'false'));
|
| | | update_settings('moderate_comment', (isset($_POST['moderate_comment']) ? 'true' : 'false'));
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function listings_settings(){
|
| | | update_settings('search_results_per_page', esc_int($_POST['search_results_per_page']));
|
| | | update_settings('category_results_per_page', esc_int($_POST['category_results_per_page']));
|
| | | update_settings('post_results_per_page', esc_int($_POST['post_results_per_page']));
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function other_settings(){
|
| | | update_settings('splash', (isset($_POST['splash']) ? 'true' : 'false'));
|
| | | update_settings('show_ad_on_splash', (isset($_POST['show_ad_on_splash']) ? 'true' : 'false'));
|
| | | update_settings('trailing_slash', (isset($_POST['trailing_slash']) ? 'true' : 'false'));
|
| | | update_settings('lang_code_in_url', (isset($_POST['lang_code_in_url']) ? 'true' : 'false'));
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function set_advanced_setting($type){
|
| | | if($type == 'set_save_thumbs'){
|
| | | $val = 'false';
|
| | | if(isset($_POST['value'])){
|
| | | $val = 'true';
|
| | | }
|
| | | update_settings('import_thumb', $val);
|
| | | } elseif($type == 'set_small_thumb'){
|
| | | $val = 'false';
|
| | | if(isset($_POST['value'])){
|
| | | $val = 'true';
|
| | | }
|
| | | update_settings('small_thumb', $val);
|
| | | } elseif($type == 'set_protocol'){
|
| | | $val = 'http://';
|
| | | if(isset($_POST['value'])){
|
| | | $val = 'https://';
|
| | | }
|
| | | update_settings('url_protocol', $val);
|
| | | } elseif($type == 'set_prettyurl'){
|
| | | $val = 'false';
|
| | | if(isset($_POST['value'])){
|
| | | $val = 'true';
|
| | | }
|
| | | update_settings('pretty_url', $val);
|
| | | } elseif($type == 'set_custom_slug'){
|
| | | $val = 'false';
|
| | | if(isset($_POST['value'])){
|
| | | $val = 'true';
|
| | | }
|
| | | update_settings('custom_slug', $val);
|
| | | } elseif($type == 'set_unicode_slug'){
|
| | | $val = 'false';
|
| | | if(isset($_POST['value'])){
|
| | | $val = 'true';
|
| | | }
|
| | | update_settings('unicode_slug', $val);
|
| | | } elseif($type == 'set_www'){
|
| | | $val = 'false';
|
| | | if(isset($_POST['value'])){
|
| | | $val = 'true';
|
| | | }
|
| | | update_settings('use_www', $val);
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function _set_option(){
|
| | | //set_advanced_setting($type) replacement
|
| | | //Use prefs ! options
|
| | | $status = 'error';
|
| | | if(isset($_POST['key'])){
|
| | | $status = 'saved';
|
| | | if(!$_POST['value']){ //if null
|
| | | $_POST['value'] = 0;
|
| | | }
|
| | | update_option($_POST['key'], $_POST['value']);
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status='.$status);
|
| | | }
|
| | | }
|
| | | function update_purchase_code(){
|
| | | $message = 'Item Purchase code updated!';
|
| | | $status = 'success';
|
| | | $curl = curl_request('https://api.cloudarcade.net/v2/validate.php?code='.$_POST['code'].'&ref='.DOMAIN.'&v='.VERSION.'&action=update_code');
|
| | | if(is_valid_json($curl)){
|
| | | $json = json_decode($curl, true);
|
| | | if($json['status'] === 'success' || $json['status'] === 'valid'){
|
| | | $message = 'Item Purchase code updated!';
|
| | | $status = 'success';
|
| | | update_setting('purchase_code', $_POST['code']);
|
| | | } else {
|
| | | $message = $json['message'];
|
| | | $status = 'error';
|
| | | }
|
| | | } else {
|
| | | $status = 'error';
|
| | | $message = 'Error! json not valid!';
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | $_SESSION['message'] = [
|
| | | 'type' => $status,
|
| | | 'text' => $message
|
| | | ];
|
| | | header('Location: '.$_POST['redirect']);
|
| | | }
|
| | | }
|
| | | function set_save_thumbs(){
|
| | | $bool = 'false';
|
| | | if(IMPORT_THUMB){
|
| | | $bool = 'true';
|
| | | }
|
| | | $val = 'false';
|
| | | if(isset($_POST['value'])){
|
| | | $val = 'true';
|
| | | }
|
| | | update_settings('import_thumb', $val);
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status=saved');
|
| | | }
|
| | | }
|
| | | function upload_thumb($url){
|
| | | if($url) {
|
| | | $data = file_get_contents($url);
|
| | | $name = basename($url);
|
| | | $new = '../thumbs/'.$name;
|
| | | file_put_contents($new, $data);
|
| | | }
|
| | | }
|
| | |
|
| | | function update_custom_path(){
|
| | | $arr = array();
|
| | | $list = ['game','category','page','search','tag','login','register','user','post','full','splash'];
|
| | | $fill = $_POST['list'];
|
| | | $i = 0;
|
| | | foreach ($fill as $value) {
|
| | | if($value){
|
| | | $value = esc_slug($value);
|
| | | }
|
| | | if($value){
|
| | | $arr[$value] = $list[$i];
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | $res = '';
|
| | | if(count($arr)){
|
| | | $res = json_encode($arr);
|
| | | }
|
| | | update_setting('custom_path', $res);
|
| | | if(isset($_POST['redirect'])){
|
| | | $_SESSION['message'] = [
|
| | | 'type' => 'success',
|
| | | 'text' => 'Settings have been saved!'
|
| | | ];
|
| | | header('Location: '.$_POST['redirect']);
|
| | | }
|
| | | }
|
| | | function updater2(){
|
| | | $status = 'null';
|
| | | $info_data = '';
|
| | | $code = esc_string($_POST['code']);
|
| | | if(!ADMIN_DEMO && USER_ADMIN){
|
| | | $curl = curl_request('https://api.cloudarcade.net/verify/verify.php?code='.$code.'&ref='.DOMAIN.'&action=update&v='.VERSION);
|
| | | $data = json_decode($curl, true);
|
| | | if(isset($data['log'])){
|
| | | backup_cms('../', 'part');
|
| | | if(isset($data['content'])){
|
| | | $path = $data['path'];
|
| | | file_put_contents("rf_execute.php", htmlspecialchars_decode($data['content']));
|
| | | include 'rf_execute.php';
|
| | | unlink('rf_execute.php');
|
| | | }
|
| | | $status = 'updated';
|
| | | } elseif(isset($data['error'])) {
|
| | | $status = 'error';
|
| | | $info_data = $data['description'];
|
| | | } else {
|
| | | $status = 'error';
|
| | | $info_data = json_encode($data);
|
| | | }
|
| | | $result = array(
|
| | | 'status' => $status,
|
| | | 'info' => $info_data,
|
| | | );
|
| | | echo json_encode($result);
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status='.$status.'&info='.$info_data);
|
| | | }
|
| | | }
|
| | | function plugin_action(){
|
| | | $status = '';
|
| | | $info = '';
|
| | | if(isset($_POST['plugin_action'])){
|
| | | if(isset($_POST['name'])){
|
| | | $target_dir = ABSPATH . 'content/plugins/' . $_POST['name'];
|
| | | if(is_dir( $target_dir )){
|
| | | if($_POST['plugin_action'] == 'activate'){
|
| | | rename($target_dir, ABSPATH . 'content/plugins/' . substr($_POST['name'], 1));
|
| | | $status = 'success';
|
| | | $info = 'Plugin activated!';
|
| | | } else if($_POST['plugin_action'] == 'deactivate'){
|
| | | rename($target_dir, ABSPATH . 'content/plugins/' . '_' . $_POST['name']);
|
| | | $status = 'warning';
|
| | | $info = 'Plugin deactivated!';
|
| | | } else if($_POST['plugin_action'] == 'remove'){
|
| | | delete_files($target_dir);
|
| | | if(file_exists($target_dir)){
|
| | | rmdir($target_dir);
|
| | | }
|
| | | $status = 'warning';
|
| | | $info = 'Plugin removed!';
|
| | | }
|
| | | }
|
| | | }
|
| | | if(isset($_POST['url']) && $_POST['plugin_action'] == 'add_plugin'){
|
| | | if(isset($_POST['reqversion']) && esc_int(VERSION) >= esc_int($_POST['reqversion'])){
|
| | | $target = ABSPATH.'content/plugins/tmp_plugin.zip';
|
| | | // Create a cURL resource
|
| | | $ch = curl_init();
|
| | | // Set cURL options for retrieving the remote file
|
| | | curl_setopt($ch, CURLOPT_URL, $_POST['url']);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
| | | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
| | | curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
|
| | | // Download the remote file and save it to the target file
|
| | | $remoteFile = curl_exec($ch);
|
| | | if($remoteFile !== false){
|
| | | $localFile = fopen($target, 'w');
|
| | | if($localFile){
|
| | | fwrite($localFile, $remoteFile);
|
| | | fclose($localFile);
|
| | |
|
| | | if(file_exists($target)){
|
| | | $zip = new ZipArchive;
|
| | | $res = $zip->open($target);
|
| | | if ($res === TRUE) {
|
| | | $zip->extractTo(ABSPATH.'content/plugins/');
|
| | | $zip->close();
|
| | | $status = 'success';
|
| | | $info = 'Plugin installed!';
|
| | | } else {
|
| | | echo 'doh!';
|
| | | }
|
| | | unlink($target);
|
| | | } else {
|
| | | echo 'not found';
|
| | | }
|
| | | } else {
|
| | | echo 'Could not create local file';
|
| | | }
|
| | | } else {
|
| | | echo 'Could not download remote file';
|
| | | }
|
| | | // Close the cURL resource
|
| | | curl_close($ch);
|
| | | } else {
|
| | | $status = 'error';
|
| | | $info = 'Failed to install!. You\'re using CA v'.VERSION.' and this plugin require CA v'.$_POST['reqversion'];
|
| | | }
|
| | | }
|
| | |
|
| | | if($_POST['plugin_action'] == 'upload_plugin'){
|
| | | $status = 'error';
|
| | | if(isset($_FILES['plugin_file'])){ //Upload plugin
|
| | | $target_file = ABSPATH . 'content/plugins/' . strtolower(str_replace(' ', '-', basename($_FILES["plugin_file"]["name"])));
|
| | | $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
|
| | | $uploadOk = 1;
|
| | | if($fileType !== 'zip'){
|
| | | $uploadOk = 0;
|
| | | }
|
| | | if ($uploadOk) {
|
| | | if (move_uploaded_file($_FILES["plugin_file"]["tmp_name"], $target_file)) {
|
| | | //
|
| | | } else {
|
| | | $uploadOk = 0;
|
| | | }
|
| | | }
|
| | | if ($uploadOk) {
|
| | | $zip = new ZipArchive;
|
| | | $res = $zip->open($target_file);
|
| | | if ($res === TRUE) {
|
| | | $zip->extractTo(ABSPATH . 'content/plugins/');
|
| | | $zip->close();
|
| | | $status = 'success';
|
| | | $info = 'Plugin uploaded!';
|
| | | } else {
|
| | | $uploadOk = 0;
|
| | | }
|
| | | unlink($target_file);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | if(isset($_POST['redirect'])){
|
| | | header('Location: '.$_POST['redirect'].'&status='.$status.'&info='.$info);
|
| | | }
|
| | | }
|
| | |
|
| | | function _trigger_auto_sitemap(){
|
| | | return;
|
| | | if( PRETTY_URL ){
|
| | | if(get_setting_value('auto_sitemap')){
|
| | | $sitemap_file = null;
|
| | | if(file_exists('../index.php')){
|
| | | $sitemap_file = '../sitemap.xml';
|
| | | }
|
| | | if(!$sitemap_file){
|
| | | return;
|
| | | }
|
| | | include_once '../includes/plugin.php';
|
| | | if(file_exists(PLUGIN_PATH.'posts/Post.php')){
|
| | | include_once PLUGIN_PATH.'posts/Post.php';
|
| | | }
|
| | | $str = '<?xml version="1.0" encoding="UTF-8"?>
|
| | | <urlset
|
| | | xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
| | | xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
|
| | | http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
| | | <!-- generated by CloudArcade -->';
|
| | |
|
| | | //domain
|
| | | $str = $str.'
|
| | | <url>
|
| | | <loc>'.DOMAIN.'</loc>
|
| | | <priority>1.00</priority>
|
| | | </url>';
|
| | | //categories
|
| | | $cats = get_all_categories();
|
| | | foreach ($cats as $cat) {
|
| | | if (strpos($cat->slug, '&') == false) {
|
| | | $str = $str.'
|
| | | <url>
|
| | | <loc>'.get_permalink('category', $cat->slug).'</loc>
|
| | | <changefreq>weekly</changefreq>
|
| | | </url>';
|
| | | }
|
| | | }
|
| | | //blog
|
| | | if(defined('POST_ACTIVE')){
|
| | | $posts = Post::getList()['results'];
|
| | | if($posts){
|
| | | foreach ($posts as $post) {
|
| | | if (strpos($post->slug, '&') == false) {
|
| | | $str = $str.'
|
| | | <url>
|
| | | <loc>'.get_permalink('post', $post->slug).'</loc>
|
| | | </url>';
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | //games
|
| | | $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $sql = "SELECT slug FROM games";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $games = $st -> fetchAll();
|
| | | $conn = null;
|
| | | foreach ($games as $game) {
|
| | | if (strpos($game['slug'], '&') == false) {
|
| | | $str = $str.'
|
| | | <url>
|
| | | <loc>'.get_permalink('game', $game['slug']).'</loc>
|
| | | </url>';
|
| | | }
|
| | | }
|
| | | $str = $str.'</urlset>';
|
| | | $sitemap = fopen($sitemap_file, "w") or die("Unable to open file!");
|
| | | $content = $str;
|
| | | fwrite($sitemap, $content);
|
| | | fclose($sitemap);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | @font-face {
|
| | | font-family: 'Poppins';
|
| | | src: url('fonts/Poppins-Light.ttf') format('truetype');
|
| | | font-weight: 300;
|
| | | font-style: normal;
|
| | | }
|
| | |
|
| | | @font-face {
|
| | | font-family: 'Poppins';
|
| | | src: url('fonts/Poppins-Regular.ttf') format('truetype');
|
| | | font-weight: 400;
|
| | | font-style: normal;
|
| | | }
|
| | |
|
| | | @font-face {
|
| | | font-family: 'Poppins';
|
| | | src: url('fonts/Poppins-Medium.ttf') format('truetype');
|
| | | font-weight: 500;
|
| | | font-style: normal;
|
| | | }
|
| | |
|
| | | @font-face {
|
| | | font-family: 'Poppins';
|
| | | src: url('fonts/Poppins-SemiBold.ttf') format('truetype');
|
| | | font-weight: 600;
|
| | | font-style: normal;
|
| | | }
|
| | |
|
| | | body {
|
| | | font-family: 'Poppins';
|
| | | font-weight: 300;
|
| | | background-color: #f8f9fe;
|
| | | color: #212529;
|
| | | }
|
| | | a {
|
| | | color: #1190bc;
|
| | | text-decoration: none;
|
| | | }
|
| | | strong {
|
| | | font-weight: bold;
|
| | | }
|
| | | #sidebar {
|
| | | background-color: #262c48;
|
| | | color: #94a0b0;
|
| | | position: fixed;
|
| | | top: 0;
|
| | | bottom: 0;
|
| | | width: 260px;
|
| | | overflow-x: hidden;
|
| | | white-space: nowrap;
|
| | | z-index: 1;
|
| | | transition: 0.3s;
|
| | | }
|
| | | #sidebar a:hover {
|
| | | text-decoration: none;
|
| | | }
|
| | | .sidebar-toggler, .navbar-toggler {
|
| | | background: unset;
|
| | | border: none;
|
| | | padding: 15px;
|
| | | }
|
| | | ul#menu-list {
|
| | | list-style: none;
|
| | | padding-left: 0;
|
| | | }
|
| | | .dropdown-list {
|
| | | color: #8a8a8c;
|
| | | padding: 13px 6px 13px 48px;
|
| | | }
|
| | | .dropdown-list:hover, .dropdown-list.active {
|
| | | background-color: #3a4657;
|
| | | }
|
| | | .li-list {
|
| | | color: #94a0b0;
|
| | | padding: 6px;
|
| | | padding-left: 16px;
|
| | | margin: 10px 0 10px 5px;
|
| | | }
|
| | | .li-list i {
|
| | | margin-right: 10px;
|
| | | }
|
| | | .li-list:hover, .active .li-list {
|
| | | color: #19bae0;
|
| | | padding: 6px;
|
| | | padding-left: 16px;
|
| | | margin-left: 0;
|
| | | }
|
| | | #menu-list li:hover {
|
| | | border-left: 5px solid #19bae0;
|
| | | text-decoration: none;
|
| | | }
|
| | | #menu-list li.active {
|
| | | border-left: 5px solid #19bae0;
|
| | | }
|
| | |
|
| | | .dropdown-container {
|
| | | display: none;
|
| | | background-color: #313755;
|
| | | }
|
| | | .dropdown-container.active {
|
| | | display: block;
|
| | | }
|
| | |
|
| | | .fa-caret-down {
|
| | | float: right;
|
| | | padding-right: 8px;
|
| | | }
|
| | |
|
| | | .tooltip-info {
|
| | | font-size: 13px;
|
| | | background-color: #6e7bb9;
|
| | | padding: 1px 6px;
|
| | | border-radius: 20px;
|
| | | margin-left: 8px;
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | #content {
|
| | | padding: 30px 30px;
|
| | | margin-left: 260px;
|
| | | margin-top: 42px;
|
| | | max-width: 1200px;
|
| | | margin-bottom: 40px;
|
| | | transition: 0.3s;
|
| | | }
|
| | | #content-bar {
|
| | | margin-left: 260px;
|
| | | transition: 0.3s;
|
| | | }
|
| | | .section {
|
| | | background-color: #fff;
|
| | | border-radius: 10px;
|
| | | padding: 20px;
|
| | | margin-bottom: 30px;
|
| | | overflow: hidden;
|
| | | box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15);
|
| | | }
|
| | | .section-bottom-link {
|
| | | margin-top: 10px;
|
| | | padding-bottom: 20px;
|
| | | }
|
| | | .section-full {
|
| | | padding: 0;
|
| | | }
|
| | | .section-title {
|
| | | font-size: 1.2rem;
|
| | | }
|
| | | .general-wrapper {
|
| | | padding: 20px;
|
| | | }
|
| | | .admin-menu {
|
| | | margin-top: 20px;
|
| | | }
|
| | | .main-header {
|
| | | position: fixed;
|
| | | width: 100%;
|
| | | top: 0;
|
| | | z-index: 10;
|
| | | }
|
| | | .navbar {
|
| | | margin-left: 260px;
|
| | | height: 55px;
|
| | | padding: 0;
|
| | | background: #fff;
|
| | | box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15);
|
| | | transition: 0.3s;
|
| | | }
|
| | | .navbar .quicklinks {
|
| | | margin-right: 10px;
|
| | | }
|
| | | .navbar a {
|
| | | color: #fff;
|
| | | }
|
| | | .page-title {
|
| | | margin-top: 5px;
|
| | | margin-bottom: 20px;
|
| | | }
|
| | | button.remove-category {
|
| | | margin-left: auto;
|
| | | }
|
| | | .category-item span.badge {
|
| | | margin-left: 20px;
|
| | | }
|
| | | .tag-list span.badge {
|
| | | margin-left: 5px;
|
| | | }
|
| | | .tag-list span.badge:hover {
|
| | | cursor: pointer;
|
| | | }
|
| | | span.btn-tag {
|
| | | background-color: #a2a9ca!important;
|
| | | }
|
| | | .logo {
|
| | | margin: 10px;
|
| | | padding: 6px;
|
| | | height: 50px;
|
| | | margin-left: 10px;
|
| | | }
|
| | | .install-form, .login-form, .register-form {
|
| | | max-width: 400px;
|
| | | background-color: #FFF;
|
| | | padding: 30px 10px;
|
| | | border-radius: 10px;
|
| | | margin: auto;
|
| | | }
|
| | | .login-logo {
|
| | | margin-bottom: 30px;
|
| | | }
|
| | | .install-body, .login-body {
|
| | | background-color: #eee;
|
| | | }
|
| | | .install-container, .login-container {
|
| | | margin-top: 180px;
|
| | | }
|
| | | .register-container {
|
| | | margin-top: 30px;
|
| | | margin-bottom: 30px;
|
| | | }
|
| | | ul.category-list, ul.collection-list, ul.plugin-translations-list {
|
| | | margin-bottom: 0;
|
| | | padding-left: 0;
|
| | | }
|
| | | .category-list .category-item, .collection-list .collection-item, .plugin-translations-list .plugin-translation-item {
|
| | | padding: 8px 8px 8px 20px;
|
| | | border: 1px solid #dcdfe3;
|
| | | margin: 15px 10px;
|
| | | border-radius: 5px;
|
| | | }
|
| | |
|
| | | span.categories {
|
| | | color: #d6793a;
|
| | | }
|
| | |
|
| | | .has-translation-cur {
|
| | | background-color: #95d5b1;
|
| | | color: #000000;
|
| | | }
|
| | |
|
| | | .has-translation-other {
|
| | | background-color: #ddd892;
|
| | | color: #000000;
|
| | | }
|
| | |
|
| | | /* Quotes */
|
| | | #quote {
|
| | | overflow: hidden;
|
| | | opacity: 1;
|
| | | transition: all 0.8s cubic-bezier(0.44, 1.13, 0.58, 1);
|
| | | }
|
| | | .quote-text {
|
| | | |
| | | }
|
| | | .author {
|
| | | font-weight: 600;
|
| | | font-style: italic; |
| | | float: right;
|
| | | margin-right: 5px;
|
| | | }
|
| | | .disabled-list {
|
| | | opacity: 0.5;
|
| | | pointer-events: none;
|
| | | cursor: default;
|
| | | }
|
| | | .btn {
|
| | | padding-left: 15px;
|
| | | padding-right: 15px;
|
| | | border-radius: 7px!important;
|
| | | }
|
| | | .btn-primary {
|
| | | background-color: #19bae0;
|
| | | border-color: #19bae0;
|
| | | }
|
| | |
|
| | | .bs-callout {
|
| | | margin: 20px 0;
|
| | | padding: 15px 30px 15px 15px;
|
| | | border-left: 5px solid #eee;
|
| | | }
|
| | | .bs-callout h4 {
|
| | | margin-top: 0;
|
| | | }
|
| | | .bs-callout p:last-child {
|
| | | margin-bottom: 0;
|
| | | }
|
| | | .bs-callout code,
|
| | | .bs-callout .highlight {
|
| | | background-color: #fff;
|
| | | }
|
| | |
|
| | | .bs-callout-danger {
|
| | | background-color: #fcf2f2;
|
| | | border-color: #d9534f;
|
| | | }
|
| | | .bs-callout-warning {
|
| | | background-color: #fefbed;
|
| | | border-color: #f0ad4e;
|
| | | }
|
| | | .bs-callout-info {
|
| | | background-color: #f0f7fd;
|
| | | border-color: #5bc0de;
|
| | | }
|
| | | .fetch-games.fade {
|
| | | display: none;
|
| | | }
|
| | | .fetch-games.show {
|
| | | display: block;
|
| | | }
|
| | | .official-info {
|
| | | margin: 10px;
|
| | | }
|
| | |
|
| | | /* Table */
|
| | |
|
| | | table.table a {
|
| | | color: #1190bc;
|
| | | }
|
| | | table.table a:hover {
|
| | | color: #064c64;
|
| | | }
|
| | | /* Search */
|
| | |
|
| | | .has-search .form-control {
|
| | | padding-left: 2.375rem;
|
| | | }
|
| | |
|
| | | .has-search .form-control-feedback {
|
| | | position: absolute;
|
| | | z-index: 1;
|
| | | display: block;
|
| | | width: 2.375rem;
|
| | | height: 2.375rem;
|
| | | line-height: 2.375rem;
|
| | | text-align: center;
|
| | | pointer-events: none;
|
| | | color: #aaa;
|
| | | }
|
| | |
|
| | | /* Icons */
|
| | |
|
| | | .fa-thumbs-down {
|
| | | color: #ec505d;
|
| | | margin-right: 10px;
|
| | | }
|
| | | .fa-thumbs-up {
|
| | | color: #29badd;
|
| | | margin-right: 10px;
|
| | | }
|
| | | .fa-plus.circle {
|
| | | color: #17af71;
|
| | | }
|
| | | .fa-pencil-alt.circle {
|
| | | color: #1190bc;
|
| | | }
|
| | | .fa-trash.circle {
|
| | | color: #e75963;
|
| | | }
|
| | | .fa.circle {
|
| | | padding: 0.5em 0.57em;
|
| | | border: 1px solid;
|
| | | border-radius: 50%;
|
| | | margin-right: 5px;
|
| | | }
|
| | |
|
| | | img.gamelist {
|
| | | border-radius: 10px;
|
| | | width: 60px;
|
| | | height: 60px;
|
| | | }
|
| | |
|
| | | .pagination .page-item.disabled .page-link {
|
| | | color: #fff!important;
|
| | | }
|
| | | .badge {
|
| | | box-shadow: none;
|
| | | }
|
| | | .badge-primary {
|
| | | color: #fff !important;
|
| | | background-color: #4285f4 !important;
|
| | | }
|
| | | .badge-pill {
|
| | | padding-right: 0.6em;
|
| | | padding-left: 0.6em;
|
| | | border-radius: 10rem;
|
| | | }
|
| | | .btn {
|
| | | border-radius: 10px;
|
| | | box-shadow: none;
|
| | | }
|
| | | .cms {
|
| | | margin-top: 50px;
|
| | | margin-bottom: 15px;
|
| | | }
|
| | | .login-title {
|
| | | text-align: center;
|
| | | margin-bottom: 25px;
|
| | | font-weight: 400;
|
| | | color: #212529;
|
| | | }
|
| | | .modal-dialog .modal-content {
|
| | | border-radius: 10px;
|
| | | }
|
| | |
|
| | | /* Stats */
|
| | |
|
| | | canvas {
|
| | | -moz-user-select: none;
|
| | | -webkit-user-select: none;
|
| | | -ms-user-select: none;
|
| | | }
|
| | | .chart-container {
|
| | | width: 840px;
|
| | | }
|
| | | .container-stats {
|
| | | margin-top: 30px;
|
| | | display: flex;
|
| | | flex-direction: row;
|
| | | flex-wrap: wrap;
|
| | | justify-content: center;
|
| | | }
|
| | | .stats-option {
|
| | | position: absolute;
|
| | | width: 170px;
|
| | | right: 30px;
|
| | | }
|
| | | .section-stats {
|
| | | position: relative;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | /* Theme */
|
| | |
|
| | | .theme {
|
| | | float: left;
|
| | | margin-right: 30px;
|
| | | margin-bottom: 35px;
|
| | | background-color: #fff;
|
| | | border-radius: 10px;
|
| | | overflow: hidden;
|
| | | box-shadow: 0 2px 10px 0 rgba(0,0,0,0.08);
|
| | | }
|
| | | .theme-id-container {
|
| | | padding: 15px;
|
| | | }
|
| | | .theme-thumbnail img {
|
| | | width: 300px;
|
| | | height: 220px;
|
| | | }
|
| | | .theme-name {
|
| | | font-size: 20px;
|
| | | display: inline-block;
|
| | | }
|
| | | .theme-action {
|
| | | float: right;
|
| | | }
|
| | | .theme-action button {
|
| | | margin: 0;
|
| | | }
|
| | | .theme-info {
|
| | | margin-top: 10px;
|
| | | margin-bottom: 30px;
|
| | | }
|
| | | .theme-author {
|
| | | float: left;
|
| | | }
|
| | | .theme-version {
|
| | | float: right;
|
| | | }
|
| | | .plugin-repo-container {
|
| | | max-height: 600px;
|
| | | overflow-x: auto;
|
| | | }
|
| | | .plugin-inactive {
|
| | | opacity: 0.5;
|
| | | }
|
| | | h4.plugin-title {
|
| | | margin-bottom: 15px;
|
| | | }
|
| | | .tooltip-doc-plugin {
|
| | | font-weight: normal;
|
| | | font-size: 16px;
|
| | | background-color: #94abbf;
|
| | | color: #fff;
|
| | | padding: 3px 7px;
|
| | | border-radius: 30px;
|
| | | float: right;
|
| | | }
|
| | |
|
| | | .widget-item {
|
| | | cursor: pointer;
|
| | | padding: 12px 18px;
|
| | | border: 1px solid #dee2e6;
|
| | | background-color: #f6f7f7;
|
| | | }
|
| | |
|
| | | .theme-dark .widget-item {
|
| | | border-color: #48517d;
|
| | | background-color: #333a59;
|
| | | }
|
| | |
|
| | | .widget-title {
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .widget-form {
|
| | | padding: 12px 18px;
|
| | | border: 1px solid #dee2e6;
|
| | | background-color: #fff;
|
| | | border-top: none;
|
| | | }
|
| | |
|
| | | .theme-dark .widget-form {
|
| | | border-color: #48517d;
|
| | | background-color: #2c3351;
|
| | | }
|
| | |
|
| | | .widget-description {
|
| | | padding: 12px 18px;
|
| | | }
|
| | |
|
| | | .panel-default {
|
| | | margin: 10px 0 0 0;
|
| | | border: 1px solid #dee2e6;
|
| | | padding: 0 18px;
|
| | | }
|
| | |
|
| | | .theme-dark .panel-default {
|
| | | border-color: #48517d;
|
| | | }
|
| | |
|
| | | .panel-collapse .collapsing {
|
| | | /*transition: unset;*/
|
| | | }
|
| | |
|
| | | .panel-description {
|
| | | margin-bottom: 10px;
|
| | | }
|
| | |
|
| | | .panel-body {
|
| | | min-height: 128px;
|
| | | margin-bottom: 18px;
|
| | | }
|
| | |
|
| | | .panel-title {
|
| | | position: relative;
|
| | | margin: 12px 0;
|
| | | cursor: pointer;
|
| | | }
|
| | | |
| | | .panel-title::after, .panel-body .widget-title::after {
|
| | | content: "\f0d7";
|
| | | top: -2px;
|
| | | right: 0px;
|
| | | position: absolute;
|
| | | font-weight:900;
|
| | | font-family: "Font Awesome 5 Free";
|
| | | }
|
| | |
|
| | | .panel-title[aria-expanded="true"]::after {
|
| | | content: "\f0d8";
|
| | | }
|
| | |
|
| | | .ui-sortable-placeholder {
|
| | | margin-top: 12px;
|
| | | border: 2px dashed #ccdfd8;
|
| | | height: 50px;
|
| | | width: 100%;
|
| | | background: #f7fdfa;
|
| | | }
|
| | |
|
| | | .theme-dark .ui-sortable-placeholder {
|
| | | border-color: #6987b7;
|
| | | background: #3e4562;
|
| | | }
|
| | |
|
| | | .widget-action-button-area {
|
| | | margin-top: 10px;
|
| | | }
|
| | |
|
| | | .panel-default .widget-item-sortable {
|
| | | margin-top: 12px;
|
| | | }
|
| | |
|
| | | .small {
|
| | | font-size: 0.85rem;
|
| | | font-weight: unset;
|
| | | }
|
| | |
|
| | | .delete-widget:hover {
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .widget-inactive {
|
| | | opacity: 0.5;
|
| | | }
|
| | |
|
| | | .theme-overlay {
|
| | | position: absolute;
|
| | | top: 0;
|
| | | bottom: 0;
|
| | | left: 0;
|
| | | right: 0;
|
| | | height: 100%;
|
| | | width: 100%;
|
| | | opacity: 0;
|
| | | transition: .3s ease;
|
| | | background: rgba(0, 0, 0, 0.4);
|
| | | }
|
| | |
|
| | | .theme-overlay i {
|
| | | color: white;
|
| | | font-size: 40px;
|
| | | position: absolute;
|
| | | top: 50%;
|
| | | left: 50%;
|
| | | transform: translate(-50%, -50%);
|
| | | -ms-transform: translate(-50%, -50%);
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .theme-overlay:hover {
|
| | | opacity: 1;
|
| | | }
|
| | |
|
| | | .theme-thumbnail {
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .theme-update-wrapper {
|
| | | position: relative;
|
| | | top: -80px;
|
| | | }
|
| | |
|
| | | .theme-update-info {
|
| | | position: absolute;
|
| | | width: 100%;
|
| | | border-left: 4px solid #ffb486;
|
| | | color: #856404;
|
| | | background-color: #fff3cd;
|
| | | padding: .85rem 1.25rem;
|
| | | }
|
| | |
|
| | | .theme-add {
|
| | | width: 300px;
|
| | | height: 310px;
|
| | | border: 2px dashed #c6d7f0;
|
| | | }
|
| | |
|
| | | .theme-add-icon {
|
| | | color: #19bae0;
|
| | | font-size: 80px;
|
| | | margin-left: 50%;
|
| | | margin-top: 50%;
|
| | | transform: translate(-50%, -50%);
|
| | | pointer-events: none;
|
| | | }
|
| | |
|
| | | .theme-add:hover {
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .label-theme-add {
|
| | | position: absolute;
|
| | | width: 300px;
|
| | | height: 310px;
|
| | | }
|
| | |
|
| | | .theme-upload {
|
| | | width: 300px;
|
| | | height: 310px;
|
| | | border: 2px dashed #c6d7f0;
|
| | | }
|
| | |
|
| | | .theme-upload-icon {
|
| | | color: #19bae0;
|
| | | font-size: 80px;
|
| | | margin-left: 50%;
|
| | | margin-top: 50%;
|
| | | transform: translate(-50%, -50%);
|
| | | pointer-events: none;
|
| | | }
|
| | |
|
| | | .label-theme-upload:hover {
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .label-theme-upload {
|
| | | position: absolute;
|
| | | width: 300px;
|
| | | height: 310px;
|
| | | }
|
| | |
|
| | | .has-update-icon {
|
| | | float: right;
|
| | | margin-right: 14px!important;
|
| | | color: #f26262;
|
| | | margin-top: 4px;
|
| | | }
|
| | |
|
| | | #available-widgets {
|
| | | position: sticky;
|
| | | top: 90px;
|
| | | max-height: 85vh;
|
| | | overflow-y: scroll;
|
| | | }
|
| | |
|
| | | .td-ellipsis {
|
| | | overflow: hidden;
|
| | | white-space: nowrap;
|
| | | text-overflow: ellipsis;
|
| | | max-width: 0;
|
| | | }
|
| | |
|
| | | /* TABLE */
|
| | |
|
| | | .table thead th {
|
| | | font-weight: normal;
|
| | | }
|
| | | .section-full .section-title {
|
| | | padding: 20px;
|
| | | }
|
| | | .custom-table thead th {
|
| | | padding-top: 16px;
|
| | | padding-bottom: 16px;
|
| | | border-top: 2px solid;
|
| | | border-color: #eee;
|
| | | }
|
| | | .custom-table tbody td {
|
| | | padding-top: 16px;
|
| | | padding-bottom: 16px;
|
| | | border-color: #eee;
|
| | | }
|
| | | .custom-table thead {
|
| | | background-color: #f6f9fc;
|
| | | }
|
| | | .custom-table table {
|
| | | border: none;
|
| | | }
|
| | | .custom-table tr td:first-child, .custom-table tr th:first-child {
|
| | | padding-left: 20px;
|
| | | }
|
| | | .custom-table tr td:last-child, .custom-table tr th:last-child {
|
| | | padding-right: 20px;
|
| | | }
|
| | |
|
| | | /* BOXES */
|
| | |
|
| | | .boxes {
|
| | | color: #fff;
|
| | | }
|
| | | .box {
|
| | | padding: 30px 25px;
|
| | | border-radius: 7px;
|
| | | margin-bottom: 30px;
|
| | | box-shadow: 0 0 2rem 0 rgba(136, 152, 170, .15);
|
| | | }
|
| | | .box h2.amount {
|
| | | font-weight: 600;
|
| | | }
|
| | | .box-info {
|
| | | font-weight: 500;
|
| | | }
|
| | | .box-1 {
|
| | | background-color: #ee7586;
|
| | | }
|
| | | .box-2 {
|
| | | background-color: #4cd29a;
|
| | | }
|
| | | .box-3 {
|
| | | background-color: #f2b260;
|
| | | }
|
| | | .box-4 {
|
| | | background-color: #70aaf7;
|
| | | }
|
| | |
|
| | | span.input-icon {
|
| | | position: absolute;
|
| | | top: 7px;
|
| | | left: 10px;
|
| | | }
|
| | |
|
| | | input[type=text].has-icon {
|
| | | padding-left: 35px;
|
| | | }
|
| | |
|
| | | .list-group-item {
|
| | | color: unset;
|
| | | }
|
| | |
|
| | | /* TABS */
|
| | |
|
| | | .custom-tab {
|
| | | background-color: #6e7bb9;
|
| | | padding: 20px 20px 0 20px;
|
| | | }
|
| | | .custom-tab .nav-link {
|
| | | background-color: #acb5e3;
|
| | | margin-left: 5px;
|
| | | color: rgba(0, 0, 0, 0.51);
|
| | | }
|
| | | .custom-tab .nav-link a {
|
| | | color: unset;
|
| | | }
|
| | |
|
| | | /* Dark Mode */
|
| | | .theme-dark body {
|
| | | background-color: #1c203a;
|
| | | color: #adbcce;
|
| | | }
|
| | | .theme-dark a, .theme-dark table.table a {
|
| | | color: #29badd;
|
| | | }
|
| | | .theme-dark .quicklinks a {
|
| | | color: #fff;
|
| | | }
|
| | | .theme-dark .bs-callout {
|
| | | color: #262c48;
|
| | | }
|
| | | .theme-dark .section {
|
| | | background-color: #262c48;
|
| | | box-shadow: 0 0 2rem 0 rgba(0, 0, 0, 0.15);
|
| | | }
|
| | | .theme-dark .custom-table thead {
|
| | | background-color: #3b4366;
|
| | | }
|
| | | .theme-dark .custom-tab {
|
| | | background-color: #5e6795;
|
| | | }
|
| | | .theme-dark .custom-tab .nav-link {
|
| | | background-color: #7780ae;
|
| | | }
|
| | | .theme-dark .theme {
|
| | | background-color: #262c48;
|
| | | }
|
| | | .theme-dark #sidebar {
|
| | | background-color: #262c48;
|
| | | }
|
| | | .theme-dark .navbar {
|
| | | background-color: #262c48;
|
| | | box-shadow: none;
|
| | | }
|
| | | .theme-dark .li-list {
|
| | | color: #adbcce;
|
| | | }
|
| | | .theme-dark .li-list:hover, .active .li-list {
|
| | | color: #19bae0;
|
| | | }
|
| | | .theme-dark .table {
|
| | | color: #adbcce;
|
| | | }
|
| | | .theme-dark .table td {
|
| | | border-color: #3b4a5e;
|
| | | }
|
| | | .theme-dark .table th {
|
| | | border-color: #3b4a5e;
|
| | | }
|
| | | .theme-dark .table thead th {
|
| | | border-color: #3b4a5e;
|
| | | }
|
| | | .theme-dark .nav-tabs .nav-item.show .nav-link, .theme-dark .nav-tabs .nav-link.active, .theme-dark .nav-tabs .nav-link:focus, .theme-dark .nav-tabs .nav-link:hover {
|
| | | color: #76889f;
|
| | | background-color: #212644;
|
| | | border-color: #48517d;
|
| | | border-bottom: 1px solid #262c48;
|
| | | }
|
| | | .theme-dark .nav-tabs {
|
| | | border-bottom: 1px solid #48517d;
|
| | | }
|
| | | .theme-dark .list-group-item {
|
| | | background-color: #262c48;
|
| | | border: 1px solid rgba(0,0,0,.2);
|
| | | }
|
| | | .theme-dark .form-control, .theme-dark .form-select {
|
| | | background-color: #1c203a;
|
| | | border: 1px solid #3b4a5e;
|
| | | color: unset;
|
| | | }
|
| | | .theme-dark .pagination .page-item .page-link {
|
| | | color: unset;
|
| | | }
|
| | | .theme-dark .modal-content {
|
| | | background-color: #262c48;
|
| | | }
|
| | | .theme-dark .modal-header {
|
| | | border-bottom: 1px solid #48517d;
|
| | | }
|
| | | .theme-dark .close {
|
| | | color: #adbcce;
|
| | | }
|
| | | .theme-dark .category-list .category-item, .theme-dark .collection-list .collection-item, .theme-dark .plugin-translations-list .plugin-translation-item {
|
| | | border: 1px solid #3b4a5e;
|
| | | }
|
| | | .theme-dark .dropdown-list:hover, .theme-dark .dropdown-list.active {
|
| | | background-color: #434960;
|
| | | }
|
| | | .theme-dark .dropdown-container {
|
| | | background-color: #313755;
|
| | | }
|
| | | .theme-dark .image-gallery-item {
|
| | | border: 1px solid #4d5579;
|
| | | }
|
| | |
|
| | | @media(max-width: 768px){
|
| | | .navbar {
|
| | | margin-left: 0;
|
| | | }
|
| | | #sidebar {
|
| | | width: 0px;
|
| | | }
|
| | | #content {
|
| | | margin-left: 0px;
|
| | | padding: 30px 15px;
|
| | | }
|
| | | #content-bar {
|
| | | margin-left: 0px;
|
| | | }
|
| | | } |
| New file |
| | |
| | | .ad_overlay {
|
| | | position: fixed;
|
| | | height: 100%;
|
| | | width: 100%;
|
| | | top: 0;
|
| | | right: 0;
|
| | | bottom: 0;
|
| | | left: 0;
|
| | | background: rgba(0,0,0,0.8);
|
| | | }
|
| | |
|
| | | .ad_popup {
|
| | | max-width: 600px;
|
| | | width: 80%;
|
| | | max-height: 300px;
|
| | | height: 80%;
|
| | | padding: 20px;
|
| | | position: relative;
|
| | | background: #fff;
|
| | | margin: 20px auto;
|
| | | }
|
| | |
|
| | | #ad_close {
|
| | | position: absolute;
|
| | | top: 10px;
|
| | | right: 10px;
|
| | | cursor: pointer;
|
| | | color: #000;
|
| | | }
|
| | | .popbox {
|
| | | position: fixed;
|
| | | top: 0;
|
| | | left: 0;
|
| | | bottom: 0;
|
| | | width: 100%;
|
| | | /* z-index: 1000000; */
|
| | | }
|
| | | .popup-overlay {
|
| | | position: absolute;
|
| | | top: 0;
|
| | | left: 0;
|
| | | bottom: 0;
|
| | | width: 100%;
|
| | | z-index: 1;
|
| | | background: rgba(0,0,0,.7);
|
| | | }
|
| | | .popbox-close-button {
|
| | | position: absolute;
|
| | | width: 35px;
|
| | | height: 35px;
|
| | | line-height: 28px;
|
| | | text-align: center;
|
| | | top: 10px;
|
| | | right: 10px;
|
| | | background-color: #fff;
|
| | | box-shadow: 0 -1px 1px 0 rgb(0 0 0 / 20%);
|
| | | border: none;
|
| | | border-radius: 50%;
|
| | | cursor: pointer;
|
| | | font-weight: bold;
|
| | | padding: 0;
|
| | | }
|
| | | .popbox-close-button:after {
|
| | | display: inline-block;
|
| | | content: "\00d7";
|
| | | }
|
| | | .pop-content {
|
| | | /* width: 850px; */
|
| | | /* height: 450px; */
|
| | | /* display: block; */
|
| | | position: absolute;
|
| | | top: 50%;
|
| | | left: 50%;
|
| | | z-index: 2;
|
| | | transform: translate(-50%, -50%);
|
| | | }
|
| | | .banner-content {
|
| | | box-shadow: 0 3px 20px 0 rgb(0 0 0 / 50%);
|
| | | }
|
| | | #ad-delay {
|
| | | color: #fff;
|
| | | font-size: 20px;
|
| | | }
|
| | | .ad-loader {
|
| | | border: 8px solid #f3f3f3;
|
| | | border-radius: 50%;
|
| | | border-top: 8px solid #3498db;
|
| | | width: 60px;
|
| | | height: 60px;
|
| | | -webkit-animation: spin 2s linear infinite; /* Safari */
|
| | | animation: spin 2s linear infinite;
|
| | | }
|
| | |
|
| | | /* Safari */
|
| | | @-webkit-keyframes spin {
|
| | | 0% { -webkit-transform: rotate(0deg); }
|
| | | 100% { -webkit-transform: rotate(360deg); }
|
| | | }
|
| | |
|
| | | @keyframes spin {
|
| | | 0% { transform: rotate(0deg); }
|
| | | 100% { transform: rotate(360deg); }
|
| | | }
|
| | | /* ADSENSE */
|
| | | .pop-content #content {
|
| | | width: 100vw;
|
| | | height: 100vh;
|
| | | }
|
| | | #video-container {
|
| | | position: relative;
|
| | | /* forces the container to match a 16x9 aspect ratio */
|
| | | /* replace with 75% for a 4:3 aspect ratio, if needed */
|
| | | padding-bottom: 56.25%;
|
| | | }
|
| | |
|
| | | #video-element {
|
| | | /* forces the contents to fill the container */
|
| | | position: absolute;
|
| | | top: 0;
|
| | | left: 0;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | }
|
| | | #ad-container {
|
| | | position: absolute;
|
| | | top: 0;
|
| | | left: 0;
|
| | | width: 100%;
|
| | | }
|
| | | #ca-ads {
|
| | | position: fixed;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | top: 0;
|
| | | left: 0;
|
| | | z-index: 1000;
|
| | | } |
| New file |
| | |
| | | .dd {
|
| | | position: relative;
|
| | | display: block;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | list-style: none;
|
| | | line-height: 20px;
|
| | | max-width: 700px;
|
| | | }
|
| | |
|
| | | .dd-list {
|
| | | display: block;
|
| | | position: relative;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | list-style: none; }
|
| | | .dd-list .dd-list {
|
| | | padding-left: 30px; }
|
| | |
|
| | | .dd-item,
|
| | | .dd-empty,
|
| | | .dd-placeholder {
|
| | | display: block;
|
| | | position: relative;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | min-height: 20px;
|
| | | line-height: 20px; }
|
| | |
|
| | | .dd-handle {
|
| | | display: block;
|
| | | height: 30px;
|
| | | margin: 5px 0;
|
| | | padding: 5px 10px;
|
| | | color: #333;
|
| | | text-decoration: none;
|
| | | font-weight: bold;
|
| | | border: 1px solid #ccc;
|
| | | background: #fafafa;
|
| | | border-radius: 3px;
|
| | | box-sizing: border-box; }
|
| | | .dd-handle:hover {
|
| | | color: #2ea8e5;
|
| | | background: #fff; }
|
| | |
|
| | | .dd-item > button {
|
| | | position: relative;
|
| | | cursor: pointer;
|
| | | float: left;
|
| | | width: 25px;
|
| | | height: 20px;
|
| | | margin: 5px 0;
|
| | | padding: 0;
|
| | | text-indent: 100%;
|
| | | white-space: nowrap;
|
| | | overflow: hidden;
|
| | | border: 0;
|
| | | background: transparent;
|
| | | line-height: 1;
|
| | | text-align: center;
|
| | | font-weight: bold; }
|
| | | .dd-item > button:before {
|
| | | display: block;
|
| | | position: absolute;
|
| | | width: 100%;
|
| | | text-align: center;
|
| | | text-indent: 0; }
|
| | | .dd-item > button.dd-expand:before {
|
| | | content: '+'; }
|
| | | .dd-item > button.dd-collapse:before {
|
| | | content: '-'; }
|
| | |
|
| | | .dd-expand {
|
| | | display: none; }
|
| | |
|
| | | .dd-collapsed .dd-list,
|
| | | .dd-collapsed .dd-collapse {
|
| | | display: none; }
|
| | |
|
| | | .dd-collapsed .dd-expand {
|
| | | display: block; }
|
| | |
|
| | | .dd-empty,
|
| | | .dd-placeholder {
|
| | | margin: 5px 0;
|
| | | padding: 0;
|
| | | min-height: 30px;
|
| | | background: #f2fbff;
|
| | | border: 1px dashed #b6bcbf;
|
| | | box-sizing: border-box;
|
| | | -moz-box-sizing: border-box; }
|
| | |
|
| | | .dd-dragel {
|
| | | position: absolute;
|
| | | pointer-events: none;
|
| | | z-index: 9999; }
|
| | | .dd-dragel > .dd-item .dd-handle {
|
| | | margin-top: 0; }
|
| | | .dd-dragel .dd-handle {
|
| | | box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, 0.1); }
|
| | |
|
| | | .dd-nochildren .dd-placeholder {
|
| | | display: none; }
|
| New file |
| | |
| | | /**
|
| | | * Nestable Draggable Handles
|
| | | */
|
| | | .dd3-content {
|
| | | padding: 12px 20px 11px 54px;
|
| | | border: 1px solid #dee2e6;
|
| | | border-radius: 5px;
|
| | | background: #fff;
|
| | | }
|
| | |
|
| | | .dd-handle {
|
| | | border: none;
|
| | | }
|
| | |
|
| | | .theme-dark .dd3-content {
|
| | | border: 1px solid #48517d;
|
| | | background: #333a59;
|
| | | }
|
| | |
|
| | | .dd3-content:hover {
|
| | | color: #2ea8e5;
|
| | | }
|
| | |
|
| | | .theme-dark .dd3-content:hover {
|
| | | background: #323a60;
|
| | | }
|
| | |
|
| | | .dd-dragel > .dd3-item > .dd3-content {
|
| | | margin: 0;
|
| | | }
|
| | |
|
| | | |
| | | .dd3-item {
|
| | | margin: 15px 0;
|
| | | }
|
| | | .dd3-item > button {
|
| | | margin-left: 30px;
|
| | | }
|
| | |
|
| | | .dd3-handle {
|
| | | position: absolute;
|
| | | margin: 0;
|
| | | left: 0;
|
| | | top: 0;
|
| | | cursor: move;
|
| | | width: 45px;
|
| | | height: 45px;
|
| | | text-indent: 70px;
|
| | | white-space: nowrap;
|
| | | overflow: hidden;
|
| | | background: #c9d3e1;
|
| | | border-radius: 5px 0 0 5px;
|
| | | }
|
| | |
|
| | | .dd3-handle:hover {
|
| | | background: #abb8ca;
|
| | | }
|
| | |
|
| | | .theme-dark .dd3-handle {
|
| | | border-color: #48517d;
|
| | | background-color: #464f79;
|
| | | }
|
| | |
|
| | | .theme-dark .dd-empty, .theme-dark .dd-placeholder {
|
| | | border-color: #6987b7;
|
| | | background: #3e4562;
|
| | | }
|
| | |
|
| | | .dd3-handle:before {
|
| | | font-family: "Font Awesome 5 Free";
|
| | | content: "\f0b2";
|
| | | display: block;
|
| | | position: absolute;
|
| | | left: 0;
|
| | | top: 12px;
|
| | | width: 100%;
|
| | | text-align: center;
|
| | | text-indent: 0;
|
| | | color: #fff;
|
| | | font-size: 20px;
|
| | | font-weight: bolder;
|
| | | }
|
| | |
|
| | | .item-edit {
|
| | | float: right;
|
| | | color: #1190bc;
|
| | | cursor: pointer;
|
| | | }
|
| | | .item-edit:hover {
|
| | | text-decoration: underline;
|
| | | }
|
| | |
|
| | | .item-settings.d-none {
|
| | | display: none!important;
|
| | | }
|
| | | .item-settings {
|
| | | display: block;
|
| | | padding: 10px;
|
| | | position: relative;
|
| | | z-index: 10;
|
| | | border: 1px solid #e5e5e5;
|
| | | background: #fff;
|
| | | border-top: none;
|
| | | box-shadow: 0 1px 1px rgba(0,0,0,.04);
|
| | | }
|
| | | .theme-dark .item-settings {
|
| | | border-color: #48517d;
|
| | | background: #2c3351;
|
| | | }
|
| | | .item-settings p {
|
| | | margin-top: 0;
|
| | | }
|
| | |
|
| | | .item-settings p label {
|
| | | color: #666;
|
| | | line-height: 1.5;
|
| | | }
|
| | |
|
| | | .item-settings p label input {
|
| | | border: 1px solid #ddd;
|
| | | box-shadow: inset 0 1px 2px rgba(0,0,0,.07);
|
| | | background-color: #fff;
|
| | | color: #32373c;
|
| | | outline: 0;
|
| | | border-spacing: 0;
|
| | | width: -webkit-fill-available;
|
| | | clear: both;
|
| | | margin: 0;
|
| | | padding: 5px;
|
| | | border-radius: 0;
|
| | | }
|
| | |
|
| | | .item-settings .item-delete {
|
| | | color: #a00;
|
| | | }
|
| | |
|
| | | .theme-dark .item-settings .item-delete {
|
| | | color: #ff5f5f;
|
| | | }
|
| | |
|
| | | #accordion-container .card {
|
| | | border: 0;
|
| | | box-shadow: none;
|
| | | border: 1px solid #eee;
|
| | | font-weight: 300;
|
| | | margin-bottom: 10px;
|
| | | }
|
| | |
|
| | | .theme-dark #accordion-container .card {
|
| | | border-color: #48517d;
|
| | | }
|
| | |
|
| | | .theme-dark .card-header {
|
| | | background-color: #333a59;
|
| | | }
|
| | |
|
| | | .theme-dark #accordion-container .card .card-header .btn-header-link {
|
| | | color: unset;
|
| | | }
|
| | |
|
| | | .theme-dark .card-body {
|
| | | background: #2c3351;
|
| | | }
|
| | |
|
| | | #accordion-container .card-header {
|
| | | padding: 0;
|
| | | border: 0;
|
| | | }
|
| | |
|
| | | #accordion-container .card .card-header .btn-header-link {
|
| | | display: block;
|
| | | text-align: left;
|
| | | color: #222;
|
| | | }
|
| | |
|
| | | #accordion-container .card .card-header .btn-header-link:after {
|
| | | content: "\f107";
|
| | | font-family: 'Font Awesome 5 Free';
|
| | | font-weight: 900;
|
| | | float: right;
|
| | | }
|
| | |
|
| | | #accordion-container .card .card-header .btn-header-link.collapsed:after {
|
| | | content: "\f106";
|
| | | }
|
| | |
|
| | | #accordion-container .card .collapsing {
|
| | | |
| | | }
|
| | |
|
| | | #accordion-container .card .collapse {
|
| | | border: 0;
|
| | | }
|
| | |
|
| | | #accordion-container .card .collapse.show {
|
| | | |
| | | }
|
| | |
|
| | | #accordion-container .card-header .btn {
|
| | | margin: 0;
|
| | | text-transform: none;
|
| | | font-size: 1rem;
|
| | | }
|
| | |
|
| | | #accordion-container .card-header .btn:hover, .card-header .btn:focus, .card-header .btn:active {
|
| | | box-shadow: none;
|
| | | }
|
| | |
|
| | | #form-icons .row img {
|
| | | max-width: 70px;
|
| | | } |
| New file |
| | |
| | | <?php
|
| | | session_start();
|
| | | require_once('../config.php');
|
| | | require_once('../init.php');
|
| | |
|
| | | $action = isset( $_POST['action'] ) ? $_POST['action'] : "";
|
| | | $username = isset( $_SESSION['username'] ) ? $_SESSION['username'] : "";
|
| | |
|
| | | if ( $action != "login" && $action != "logout" && !$username ) {
|
| | | exit('logout');
|
| | | }
|
| | |
|
| | | if( !USER_ADMIN ){
|
| | | exit('p');
|
| | | }
|
| | |
|
| | | if( ADMIN_DEMO ){
|
| | | header('Location: dashboard.php?viewpage=addgame');
|
| | | exit();
|
| | | }
|
| | | if (!file_exists('tmp')) {
|
| | | mkdir('tmp', 0755, true);
|
| | | }
|
| | | if (!file_exists('../games')) {
|
| | | mkdir('../games', 0755, true);
|
| | | }
|
| | | $target_dir = "tmp/";
|
| | | $target_file = $target_dir . strtolower(str_replace(' ', '-', basename($_FILES["gamefile"]["name"])));
|
| | | $folder_name = 0;
|
| | | if(isset($_POST['slug'])){
|
| | | $_POST['slug'] = esc_slug($_POST['slug']);
|
| | | $folder_name = $_POST['slug'];
|
| | | } else {
|
| | | $folder_name = esc_slug($_POST['title']);
|
| | | }
|
| | |
|
| | | $uploadOk = 1;
|
| | | $error = array();
|
| | |
|
| | | if (isset($_SERVER['CONTENT_LENGTH'])) {
|
| | | if($_SERVER['CONTENT_LENGTH'] > convert_to_bytes(ini_get('upload_max_filesize'))){
|
| | | $uploadOk = 0;
|
| | | $error['err'] = 'You file size is too large, your php.ini upload_max_filesize is '.ini_get('upload_max_filesize');
|
| | | }
|
| | | }
|
| | |
|
| | | function convert_to_bytes($val) {
|
| | | $val = trim($val);
|
| | | $last = strtolower($val[strlen($val)-1]);
|
| | | $val = (int)$val;
|
| | | switch($last) {
|
| | | // The 'G' modifier is available since PHP 5.1.0
|
| | | case 'g':
|
| | | $val *= 1024;
|
| | | case 'm':
|
| | | $val *= 1024;
|
| | | case 'k':
|
| | | $val *= 1024;
|
| | | }
|
| | | return $val;
|
| | | }
|
| | |
|
| | | $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
|
| | | if($fileType != 'zip'){
|
| | | $uploadOk = 0;
|
| | | }
|
| | |
|
| | | $have_icon_512 = false; //Used for Construct 3 game
|
| | | $generate_thumbnail = false;
|
| | |
|
| | | if ($uploadOk == 0) {
|
| | | //echo "error1";
|
| | | } else {
|
| | | if (move_uploaded_file($_FILES["gamefile"]["tmp_name"], $target_file)) {
|
| | | $check = array();
|
| | | $check['index'] = 'false';
|
| | | $check['thumb_1'] = false;
|
| | | $check['thumb_2'] = false;
|
| | | //uploaded
|
| | | $za = new ZipArchive();
|
| | | $za->open($target_file);
|
| | | for( $i = 0; $i < $za->numFiles; $i++ ){
|
| | | $stat = $za->statIndex( $i );
|
| | | $name = $stat['name'];
|
| | | if($name == 'index.html'){
|
| | | $check['index'] = $name;
|
| | | }
|
| | | if($name == 'thumb_1.png' || $name == 'thumb_1.jpg' || $name == 'thumb_1.jpeg' || $name == 'thumb_1.PNG' || $name == 'thumb_1.JPG'){
|
| | | if(!$check['thumb_1']){
|
| | | $check['thumb_1'] = $name;
|
| | | }
|
| | | }
|
| | | if($name == 'thumb_2.png' || $name == 'thumb_2.jpg' || $name == 'thumb_2.jpeg' || $name == 'thumb_2.PNG' || $name == 'thumb_2.JPG'){
|
| | | if(!$check['thumb_2']){
|
| | | $check['thumb_2'] = $name;
|
| | | }
|
| | | }
|
| | | if($name == 'icons/icon-512.png'){
|
| | | $have_icon_512 = true;
|
| | | }
|
| | | }
|
| | | if(!$check['thumb_1'] && !$check['thumb_2'] && $have_icon_512){
|
| | | $check['thumb_1'] = 'thumb_1.png';
|
| | | $check['thumb_2'] = 'thumb_2.png';
|
| | | $generate_thumbnail = true;
|
| | | }
|
| | | $za->close();
|
| | | } else {
|
| | | echo "error2";
|
| | | }
|
| | | }
|
| | |
|
| | | if($uploadOk == 1){
|
| | | if(!$check['index']){
|
| | | $error['err1'] = 'No index.html on root detected!';
|
| | | $uploadOk = 0;
|
| | | }
|
| | | if(!$check['thumb_1']){
|
| | | $error['err2'] = 'No thumb_1.jpg/png on root detected!';
|
| | | $uploadOk = 0;
|
| | | }
|
| | | if(!$check['thumb_2']){
|
| | | $error['err3'] = 'No thumb_2.jpg/png on root detected!';
|
| | | $uploadOk = 0;
|
| | | }
|
| | | }
|
| | | if($uploadOk == 0){
|
| | | $error['err0'] = 'Upload failed!';
|
| | | unlink($target_file);
|
| | | // Store current fields
|
| | | $keys =['title', 'slug', 'description', 'instructions', 'width', 'height', 'category', 'thumb_1', 'thumb_2', 'url', 'tags'];
|
| | | foreach ($keys as $item) {
|
| | | $_SESSION[$item] = (isset($_POST[$item])) ? $_POST[$item] : null;
|
| | | }
|
| | | header('Location: dashboard.php?viewpage=addgame&status=error&error-data='.json_encode($error));
|
| | | } else {
|
| | | $zip = new ZipArchive;
|
| | | $res = $zip->open($target_file);
|
| | | if ($res === TRUE) {
|
| | | $zip->extractTo('../games/'.$folder_name.'/');
|
| | | $zip->close();
|
| | | } else {
|
| | | echo 'doh!';
|
| | | }
|
| | | unlink($target_file);
|
| | | if($generate_thumbnail){
|
| | | require_once('../includes/commons.php');
|
| | | // Begin generate thumbnail
|
| | | try {
|
| | | $target_img = '../games/'.$folder_name.'/icons/icon-512.png';
|
| | | if(file_exists($target_img)){
|
| | | imgCopy($target_img, '../games/'.$folder_name.'/thumb_1.png', 512, 384);
|
| | | imgCopy($target_img, '../games/'.$folder_name.'/thumb_2.png', 512, 512);
|
| | | }
|
| | | } catch(Exception $e) {
|
| | | var_dump($e);
|
| | | }
|
| | | }
|
| | | $cats = '';
|
| | | $i = 0;
|
| | | $total = count($_POST['category']);
|
| | | foreach ($_POST['category'] as $key) {
|
| | | $cats = $cats.$key;
|
| | | if($i < $total-1){
|
| | | $cats = $cats.',';
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | $_POST['ref'] = 'upload';
|
| | | $_POST['action'] = 'addGame';
|
| | | $_POST['category'] = $cats;
|
| | | $_POST['thumb_1'] = '/games/'.$folder_name.'/'.$check['thumb_1'];
|
| | | $_POST['thumb_2'] = '/games/'.$folder_name.'/'.$check['thumb_2'];
|
| | | $_POST['url'] = '/games/'.$folder_name.'/';
|
| | | if( SMALL_THUMB ){
|
| | | $output = pathinfo($check['thumb_2']);
|
| | | $_POST['thumb_small'] = '/games/'.$folder_name.'/'.$folder_name.'_small.'.$output['extension'];
|
| | | imgResize('..'.$_POST['thumb_2'], 160, 160, $folder_name);
|
| | | }
|
| | | //
|
| | | $_POST['redirect'] = 'dashboard.php?viewpage=addgame&status=uploaded';
|
| | | require 'request.php';
|
| | | }
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | | if(!isset($_SESSION['username'])){
|
| | | if(isset($_COOKIE['ca_auth'])){
|
| | | $data = CA_Auth::get_data();
|
| | | if($data){
|
| | | $user = User::getByUsername(CA_Auth::decrypt($data, 'f'));
|
| | | if($user){
|
| | | $_SESSION['username'] = $user->username;
|
| | | CA_Auth::update_token();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | class CA_Auth {
|
| | | //
|
| | | public static function generate_token($length = 10, $hash = true) {
|
| | | $chars = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghijklmnopqrstuvwxyz';
|
| | | $str = substr(str_shuffle($chars), 0, $length);
|
| | | if($hash){
|
| | | return password_hash($str, PASSWORD_DEFAULT);
|
| | | } else {
|
| | | return $str;
|
| | | }
|
| | | }
|
| | |
|
| | | public static function insert($data){
|
| | | $token = self::generate_token();
|
| | |
|
| | | $conn = open_connection();
|
| | | $sql = 'INSERT INTO sessions ( token, data ) |
| | | VALUES ( :token, :data )';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":token", $token, PDO::PARAM_STR);
|
| | | $st->bindValue(":data", $data, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | |
|
| | | setcookie('ca_auth', $token, time() + (60 * 60 * 24 * 30 * 3), "/");
|
| | | }
|
| | |
|
| | | public static function update_token($old_token = null){
|
| | | $new_token = self::generate_token();
|
| | | if(is_null($old_token)){
|
| | | if(isset($_COOKIE['ca_auth'])){
|
| | | $old_token = $_COOKIE['ca_auth'];
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = 'UPDATE sessions SET token = :new_token WHERE token = :old_token';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":new_token", $new_token, PDO::PARAM_STR);
|
| | | $st->bindValue(":old_token", $old_token, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | |
|
| | | setcookie('ca_auth', $new_token, time() + (60 * 60 * 24 * 30 * 3), "/");
|
| | | }
|
| | |
|
| | | public static function delete($token = null){
|
| | | if(is_null($token)){
|
| | | if(isset($_COOKIE['ca_auth'])){
|
| | | $token = $_COOKIE['ca_auth'];
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = 'DELETE FROM sessions WHERE token = :token';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":token", $token, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | |
|
| | | setcookie('ca_auth', time() - 3600);
|
| | | }
|
| | |
|
| | | public static function get_data($token = null){
|
| | | if(is_null($token)){
|
| | | if(isset($_COOKIE['ca_auth'])){
|
| | | $token = $_COOKIE['ca_auth'];
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM sessions WHERE token = :token";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":token", $token, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll();
|
| | | if(count($row) == 1){
|
| | | return $row[0]['data'];
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | public static function decrypt($str, $key){
|
| | | $cipher = "AES-128-CTR";
|
| | | $ivlen = openssl_cipher_iv_length($cipher);
|
| | | $iv = '1234567891011121';
|
| | | return openssl_decrypt($str, $cipher, $key, $options=0, $iv);
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | | /**
|
| | | * Class to handle game categories
|
| | | */
|
| | |
|
| | | class Category
|
| | | {
|
| | | public $id = null;
|
| | | public $name = null;
|
| | | public $slug = null;
|
| | | public $priority = 0;
|
| | | public $description = "";
|
| | | public $meta_description = "";
|
| | | public $fields = "";
|
| | | public $extra_fields = null;
|
| | |
|
| | | public function __construct($data = array())
|
| | | {
|
| | | if (isset($data['id'])) $this->id = (int)$data['id'];
|
| | | if (isset($data['name'])) $this->name = $data['name'];
|
| | | if (isset($data['description'])) $this->description = $data['description'];
|
| | | if (isset($data['meta_description'])) $this->meta_description = $data['meta_description'];
|
| | | if (isset($data['fields'])) $this->fields = $data['fields'];
|
| | | if (isset($data['priority'])) $this->priority = (int)$data['priority'];
|
| | | if ( isset( $data['slug'] ) ) {
|
| | | $this->slug = strtolower(str_replace(' ', '-', str_replace('.', '', $data["slug"])));
|
| | | } else {
|
| | | if ( isset( $data['name'] ) ) $this->slug = strtolower(str_replace(' ', '-', $data["name"]));
|
| | | }
|
| | | if(isset($data['extra_fields'])){
|
| | | if(is_array($data['extra_fields'])){
|
| | | $data['extra_fields'] = json_encode($data['extra_fields']);
|
| | | }
|
| | | $this->extra_fields = $data['extra_fields'];
|
| | | }
|
| | | if($this->priority > 10000){
|
| | | // Fix possible bug
|
| | | $this->priority = 10000;
|
| | | }
|
| | | if($this->priority < -100){
|
| | | // Fix possible bug
|
| | | $this->priority = -100;
|
| | | }
|
| | | }
|
| | |
|
| | | public function storeFormValues($params)
|
| | | {
|
| | | $this->__construct($params);
|
| | | }
|
| | |
|
| | | public static function getById($id)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM categories WHERE id = :id";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new Category($row);
|
| | | }
|
| | |
|
| | | public static function getBySlug($slug)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM categories WHERE slug = :slug LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":slug", $slug, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new Category($row);
|
| | | }
|
| | |
|
| | | public static function getByName($name)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM categories WHERE name = :name LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new Category($row);
|
| | | }
|
| | |
|
| | | public static function getIdByName($name)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM categories WHERE name = :name LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if($row){
|
| | | return $row['id'];
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | public static function getIdBySlug($slug)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM categories WHERE slug = :slug limit 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":slug", $slug, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if( $row ) {
|
| | | return $row['id'];
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | public static function getList($numRows = 1000)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM categories
|
| | | ORDER BY priority DESC, name ASC LIMIT :numRows";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":numRows", $numRows, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $list = array();
|
| | | while ($row = $st->fetch())
|
| | | {
|
| | | $category = new Category($row);
|
| | | $list[] = $category;
|
| | | }
|
| | | $totalRows = $conn->query('SELECT count(*) FROM categories')->fetchColumn();
|
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows
|
| | | ));
|
| | | }
|
| | |
|
| | | public static function getCategoryCount($id)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT count(*) FROM cat_links WHERE categoryid = :id";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $totalRows = $st->fetchColumn();
|
| | | return $totalRows;
|
| | | }
|
| | |
|
| | | public static function getListByCategory($id, int $amount, int $page = 0)
|
| | | {
|
| | | $additional_condition = '';
|
| | | if(defined('IS_VISITOR_PAGE')){
|
| | | if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
|
| | | $additional_condition = 'AND games.is_mobile = 1';
|
| | | }
|
| | | }
|
| | | $id = (int)$id;
|
| | | // Get only published games.
|
| | | $sql = "SELECT games.id FROM games |
| | | JOIN cat_links ON games.id = cat_links.gameid |
| | | WHERE cat_links.categoryid = $id AND games.published = 1 $additional_condition |
| | | ORDER BY cat_links.id DESC LIMIT $amount OFFSET $page";
|
| | | $cached_result = null;
|
| | | if(is_cached_query_allowed()){
|
| | | $data_value = get_cached_query($sql);
|
| | | if(!is_null($data_value)){
|
| | | $cached_result = json_decode($data_value, true);
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $rows;
|
| | | if(!$cached_result){
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $rows = $st->fetchAll();
|
| | | if(is_cached_query_allowed()){
|
| | | set_cached_query($sql, json_encode($rows));
|
| | | }
|
| | | } else {
|
| | | $rows = $cached_result;
|
| | | }
|
| | | $list = array();
|
| | | foreach ($rows as $item) {
|
| | | $game = new Game;
|
| | | $res = $game->getById($item['id']);
|
| | | array_push($list, $res);
|
| | | }
|
| | | // Count only published games.
|
| | | $sql = "SELECT COUNT(*) FROM games |
| | | JOIN cat_links ON games.id = cat_links.gameid |
| | | WHERE cat_links.categoryid = $id AND games.published = 1 $additional_condition";
|
| | | $cached_result2 = null;
|
| | | if(is_cached_query_allowed()){
|
| | | $data_value = get_cached_query($sql);
|
| | | if(!is_null($data_value)){
|
| | | $cached_result2 = json_decode($data_value, true);
|
| | | }
|
| | | }
|
| | | $totalRows = null;
|
| | | if(is_null($cached_result2)){
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $totalRows = $st->fetchColumn();
|
| | | if(is_cached_query_allowed()){
|
| | | set_cached_query($sql, json_encode($totalRows));
|
| | | }
|
| | | } else {
|
| | | $totalRows = $cached_result2;
|
| | | }
|
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows,
|
| | | "totalPages" => ceil($totalRows / $amount)
|
| | | ));
|
| | | }
|
| | |
|
| | | public static function getListByCategories($ids, int $amount, int $page = 0, $random = true){
|
| | | // Deprecated since v1.8.7 (Previously used for similar games), replaced with Game::fetchSimilarGames() for better performance
|
| | | $conn = open_connection();
|
| | | $random_order = '';
|
| | | if ($random) {
|
| | | $random_order = ' ORDER BY rand()';
|
| | | }
|
| | | $sql = "SELECT cl1.* FROM `cat_links` as cl1 ,( SELECT DISTINCT `gameid`,`categoryid` FROM `cat_links`";
|
| | | if ($ids) {
|
| | | $sql .= " WHERE `categoryid` IN (" . implode(',', $ids) . ")";
|
| | | }
|
| | | $sql .= $random_order . " LIMIT $amount OFFSET $page ) as cl2 WHERE cl2.gameid = cl1.gameid";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $rows = $st->fetchAll();
|
| | | $list = array();
|
| | | $gameIds = [];
|
| | | foreach ($rows as $row) {
|
| | | if (count($gameIds) > $amount) {
|
| | | break;
|
| | | }
|
| | | if (!in_array($row['gameid'], $gameIds)) {
|
| | | $gameIds[] = $row['gameid'];
|
| | | }
|
| | | }
|
| | | $is_only_mobile = false;
|
| | | if(defined('IS_VISITOR_PAGE')){
|
| | | if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
|
| | | $is_only_mobile = true;
|
| | | }
|
| | | }
|
| | | foreach ($gameIds as $gameId) {
|
| | | if (count($list) < $amount) {
|
| | | $game = new Game;
|
| | | $res = $game->getById($gameId);
|
| | | if ($res && $res->published) {
|
| | | if($is_only_mobile && $res->is_mobile){
|
| | | array_push($list, $res);
|
| | | }
|
| | | if(!$is_only_mobile){
|
| | | array_push($list, $res);
|
| | | }
|
| | | }
|
| | | } else {
|
| | | break;
|
| | | }
|
| | | }
|
| | | return array(
|
| | | "results" => $list,
|
| | | "totalRows" => count($list),
|
| | | "totalPages" => 1
|
| | | );
|
| | | }
|
| | |
|
| | | public function addToCategory($gameID, $catID)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "INSERT INTO cat_links ( gameid, categoryid ) VALUES ( :gameID, :catID )";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":gameID", $gameID, PDO::PARAM_INT);
|
| | | $st->bindValue(":catID", $catID, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $this->id = $conn->lastInsertId();
|
| | | }
|
| | |
|
| | | public function isCategoryExist($name)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT * FROM categories WHERE name = :name limit 1';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row)
|
| | | {
|
| | | $this->id = $row['id'];
|
| | | }
|
| | | if ($row)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | else
|
| | | {
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | public function getExtraField($key)
|
| | | {
|
| | | if($this->extra_fields != null){
|
| | | $fields = json_decode($this->extra_fields, true);
|
| | | if(isset($fields[$key])){
|
| | | return $fields[$key];
|
| | | }
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | public function get_fields()
|
| | | {
|
| | | if($this->fields != ''){
|
| | | return json_decode($this->fields, true);
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | public function get_field($key)
|
| | | {
|
| | | if($this->fields != ''){
|
| | | $fields = json_decode($this->fields, true);
|
| | | if(isset($fields[$key])){
|
| | | return $fields[$key];
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | public function insert()
|
| | | { |
| | | if (!is_null($this->id)) trigger_error("Category::insert(): Attempt to insert a Category object that already has its ID property set (to $this->id).", E_USER_ERROR);
|
| | | // Clean-up slug string
|
| | | $this->slug = preg_replace('/-+/', '-', preg_replace('/^-+|-+$/', '', $this->slug));
|
| | | $conn = open_connection();
|
| | | $sql = "INSERT INTO categories ( name, slug, description, meta_description, extra_fields, priority ) VALUES ( :name, :slug, :description, :meta_description, :extra_fields, :priority )";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $this->name, PDO::PARAM_STR);
|
| | | $st->bindValue(":slug", esc_slug($this->slug), PDO::PARAM_STR);
|
| | | $st->bindValue(":description", $this->description, PDO::PARAM_STR);
|
| | | $st->bindValue(":meta_description", $this->meta_description, PDO::PARAM_STR);
|
| | | $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
|
| | | $st->bindValue(":priority", $this->priority, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $this->id = $conn->lastInsertId();
|
| | | }
|
| | |
|
| | | public function update()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("Category::update(): Attempt to update a Category object that does not have its ID property set.", E_USER_ERROR);
|
| | | //$prev_name = Category::getById($this->id)->name;
|
| | | //
|
| | | // Clean-up slug string
|
| | | $this->slug = preg_replace('/-+/', '-', preg_replace('/^-+|-+$/', '', $this->slug));
|
| | | $conn = open_connection();
|
| | | $sql = "UPDATE categories SET name=:name, slug=:slug, priority=:priority, description=:description, meta_description=:meta_description, fields=:fields, extra_fields=:extra_fields WHERE id = :id";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $this->name, PDO::PARAM_STR);
|
| | | $st->bindValue(":slug", $this->slug, PDO::PARAM_STR);
|
| | | $st->bindValue(":description", $this->description, PDO::PARAM_STR);
|
| | | $st->bindValue(":meta_description", $this->meta_description, PDO::PARAM_STR);
|
| | | $st->bindValue(":fields", $this->fields, PDO::PARAM_STR);
|
| | | $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":priority", $this->priority, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public function delete()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("Category::delete(): Attempt to delete a Category object that does not have its ID property set.", E_USER_ERROR);
|
| | |
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare("DELETE FROM categories WHERE id = :id LIMIT 1");
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | ?>
|
| New file |
| | |
| | | <?php
|
| | | /**
|
| | | * Class to handle game collections
|
| | | */
|
| | |
|
| | | class Collection
|
| | | {
|
| | | public $id = null;
|
| | | public $name = null;
|
| | | public $data = null;
|
| | |
|
| | | public function __construct($data = array())
|
| | | {
|
| | | if (isset($data['id'])) $this->id = (int)$data['id'];
|
| | | if (isset($data['name'])) $this->name = $data['name'];
|
| | | if (isset($data['data'])) $this->data = $data['data'];
|
| | | }
|
| | |
|
| | | public function storeFormValues($params)
|
| | | {
|
| | | $this->__construct($params);
|
| | | }
|
| | |
|
| | | public static function getById($id)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM collections WHERE id = :id";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new Collection($row);
|
| | | }
|
| | |
|
| | | public static function getByName($name)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM collections WHERE name = :name LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new Collection($row);
|
| | | }
|
| | |
|
| | | public static function getIdByName($name)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM collections WHERE name = :name limit 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | return $row['id'];
|
| | | }
|
| | |
|
| | | public static function getList($numRows = 1000000)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM collections
|
| | | ORDER BY name ASC LIMIT :numRows";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":numRows", $numRows, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $list = array();
|
| | |
|
| | | while ($row = $st->fetch())
|
| | | {
|
| | | $Collection = new Collection($row);
|
| | | $list[] = $Collection;
|
| | | }
|
| | | $totalRows = $conn->query('SELECT count(*) FROM collections')->fetchColumn();
|
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows
|
| | | ));
|
| | | }
|
| | |
|
| | | public static function getListByCollection($name, $amount = 12, $page = 0)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM collections WHERE name = :name";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch(PDO::FETCH_ASSOC);
|
| | | $list = array();
|
| | | if($row){
|
| | | // The data is exist
|
| | | if(isset($row['data'])){
|
| | | $data = explode(',', $row['data']);
|
| | | $i = 0;
|
| | | foreach ($data as $id)
|
| | | {
|
| | | if($i < $amount){
|
| | | $game = new Game;
|
| | | $res = $game->getById($id);
|
| | | if($res){
|
| | | array_push($list, $res);
|
| | | }
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => count($list),
|
| | | ));
|
| | | }
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | public function isCollectionExist($name)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT * FROM collections WHERE name = :name limit 1';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row)
|
| | | {
|
| | | $this->id = $row['id'];
|
| | | }
|
| | | if ($row)
|
| | | {
|
| | | return true;
|
| | | }
|
| | | else
|
| | | {
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | public function insert()
|
| | | { |
| | | if (!is_null($this->id)) trigger_error("Collection::insert(): Attempt to insert a Collection object that already has its ID property set (to $this->id).", E_USER_ERROR);
|
| | |
|
| | | $conn = open_connection();
|
| | | $sql = "INSERT INTO collections ( name, data ) VALUES ( :name, :data )";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $this->name, PDO::PARAM_STR);
|
| | | $st->bindValue(":data", $this->data, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $this->id = $conn->lastInsertId();
|
| | | }
|
| | |
|
| | | public function update()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("Collection::update(): Attempt to update a Collection object that does not have its ID property set.", E_USER_ERROR);
|
| | | //$prev_name = Collection::getById($this->id)->name;
|
| | | //
|
| | | $conn = open_connection();
|
| | | $sql = "UPDATE collections SET name=:name, data=:data WHERE id = :id";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":name", $this->name, PDO::PARAM_STR);
|
| | | $st->bindValue(":data", $this->data, PDO::PARAM_STR);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public function delete()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("Collection::delete(): Attempt to delete a Collection object that does not have its ID property set.", E_USER_ERROR);
|
| | |
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare("DELETE FROM collections WHERE id = :id LIMIT 1");
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | ?>
|
| New file |
| | |
| | | <?php
|
| | | class Game
|
| | | {
|
| | | public $id = null;
|
| | | public $createdDate = null;
|
| | | public $title = null;
|
| | | public $description = null;
|
| | | public $instructions = null;
|
| | | public $category = null;
|
| | | public $source = null;
|
| | | public $thumb_1 = null;
|
| | | public $thumb_2 = null;
|
| | | public $thumb_small = '';
|
| | | public $url = null;
|
| | | public $width = null;
|
| | | public $height = null;
|
| | | public $tags = null;
|
| | | public $views = null;
|
| | | public $upvote = null;
|
| | | public $downvote = null;
|
| | | public $slug = null;
|
| | | public $last_modified = null;
|
| | | public $is_mobile = true;
|
| | | public $published = true;
|
| | | public $fields = '';
|
| | | public $extra_fields = null;
|
| | |
|
| | | public function __construct($data = array())
|
| | | {
|
| | | if (isset($data['id'])) $this->id = (int)$data['id'];
|
| | | if (isset($data['createddate'])) $this->createdDate = $data['createddate'];
|
| | | if (isset($data['last_modified'])) $this->last_modified = $data['last_modified'];
|
| | | if (isset($data['title'])) {
|
| | | if(get_setting_value('disable_iconv')){
|
| | | $this->title = $data['title'];
|
| | | } else {
|
| | | $this->title = iconv("utf-8", "utf-8//ignore", $data['title']);
|
| | | }
|
| | | }
|
| | | if (isset($data['description'])) {
|
| | | if(get_setting_value('disable_iconv')){
|
| | | $this->description = $data['description'];
|
| | | } else {
|
| | | $this->description = iconv("utf-8", "utf-8//ignore", $data['description']);
|
| | | }
|
| | | }
|
| | | if (isset($data['instructions'])) {
|
| | | if(get_setting_value('disable_iconv')){
|
| | | $this->instructions = $data['instructions'];
|
| | | } else {
|
| | | $this->instructions = iconv("utf-8", "utf-8//ignore", $data['instructions']);
|
| | | }
|
| | | }
|
| | | if (isset($data['category'])) $this->category = $data['category'];
|
| | | if (isset($data['source'])) $this->source = $data['source'];
|
| | | if (isset($data['thumb_1'])) $this->thumb_1 = $data['thumb_1'];
|
| | | if (isset($data['thumb_2'])) $this->thumb_2 = $data['thumb_2'];
|
| | | if (isset($data['thumb_small'])) $this->thumb_small = $data['thumb_small'];
|
| | | if (isset($data['url'])) $this->url = $data['url'];
|
| | | if (isset($data['width'])) $this->width = $data['width'];
|
| | | if (isset($data['height'])) $this->height = $data['height'];
|
| | | if (isset($data['tags'])) $this->tags = $data['tags'];
|
| | | if (isset($data['views'])) $this->views = $data['views'];
|
| | | if (isset($data['upvote'])) $this->upvote = $data['upvote'];
|
| | | if (isset($data['downvote'])) $this->downvote = $data['downvote'];
|
| | | if (isset($data['fields'])) $this->fields = $data['fields'];
|
| | | if (isset($data['is_mobile'])) $this->is_mobile = filter_var($data['is_mobile'], FILTER_VALIDATE_BOOLEAN) ? true : false;
|
| | | if (isset($data['published'])) $this->published = $data['published'];
|
| | | if (isset($data['slug'])){
|
| | | $this->slug = strtolower(str_replace(' ', '-', $data["slug"]));
|
| | | } else {
|
| | | if (isset($data['title'])) $this->slug = strtolower(str_replace(' ', '-', $data["title"]));
|
| | | }
|
| | | if(isset($data['extra_fields'])){
|
| | | if(is_array($data['extra_fields'])){
|
| | | $data['extra_fields'] = json_encode($data['extra_fields']);
|
| | | }
|
| | | $this->extra_fields = $data['extra_fields'];
|
| | | }
|
| | | }
|
| | |
|
| | | public function storeFormValues($params)
|
| | | {
|
| | | $this->__construct($params);
|
| | | $this->createdDate = date('Y-m-d H:i:s');
|
| | | // Parse and store the publication date
|
| | | if (isset($params['cratedDate']))
|
| | | {
|
| | |
|
| | | /*if ( count($createdDate) == 3 ) {
|
| | | list ( $y, $m, $d ) = $createdDate;
|
| | | $this->createdDate = mktime ( 0, 0, 0, $m, $d, $y );
|
| | | }*/
|
| | | }
|
| | | }
|
| | |
|
| | | public static function getById($id)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $id = (int)$id;
|
| | | $sql = "SELECT *, UNIX_TIMESTAMP(createdDate) AS createdDate FROM games WHERE id = $id limit 1";
|
| | | $cached_result = null;
|
| | | if(is_cached_query_allowed()){
|
| | | $data_value = get_cached_query($sql);
|
| | | if(!is_null($data_value)){
|
| | | $cached_result = json_decode($data_value, true);
|
| | | }
|
| | | }
|
| | | $row;
|
| | | if(is_null($cached_result)){
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if(is_cached_query_allowed()){
|
| | | set_cached_query($sql, json_encode($row));
|
| | | }
|
| | | } else {
|
| | | $row = $cached_result;
|
| | | }
|
| | | if ($row) return new Game($row); //$row
|
| | | }
|
| | |
|
| | | public static function getByTitle($title)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT * FROM games WHERE title = :title';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":title", $title, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new Game($row);
|
| | | }
|
| | |
|
| | | public static function getBySlug($slug)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $slug = $conn->quote($slug);
|
| | | $sql = "SELECT * FROM games WHERE slug = $slug LIMIT 1";
|
| | | $cached_result = null;
|
| | | if(is_cached_query_allowed()){
|
| | | $data_value = get_cached_query($sql);
|
| | | if(!is_null($data_value)){
|
| | | $cached_result = json_decode($data_value, true);
|
| | | }
|
| | | }
|
| | | $row;
|
| | | if(is_null($cached_result)){
|
| | | $st = $conn->prepare($sql);
|
| | | //$st->bindValue(":slug", $slug, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if(is_cached_query_allowed()){
|
| | | set_cached_query($sql, json_encode($row));
|
| | | }
|
| | | } else {
|
| | | $row = $cached_result;
|
| | | }
|
| | | if ($row) return new Game($row);
|
| | | }
|
| | |
|
| | | public static function getList(int $amount = 1000, $sort = 'id DESC', int $page = 0, $count = true)
|
| | | {
|
| | | $additional_condition = '';
|
| | | if(defined('IS_VISITOR_PAGE')){
|
| | | if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
|
| | | $additional_condition = 'AND is_mobile = 1';
|
| | | }
|
| | | }
|
| | | $sql = "SELECT * FROM games WHERE published = 1 $additional_condition ORDER BY $sort LIMIT $amount OFFSET $page";
|
| | | $cached_result = null;
|
| | | if(is_cached_query_allowed() && $sort != 'RAND()'){
|
| | | $data_value = get_cached_query($sql);
|
| | | if(!is_null($data_value)){
|
| | | $cached_result = json_decode($data_value, true);
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $rows = null;
|
| | | if(is_null($cached_result)){
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $rows = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | if(is_cached_query_allowed() && $sort != 'RAND()'){
|
| | | set_cached_query($sql, json_encode($rows));
|
| | | }
|
| | | } else {
|
| | | $rows = $cached_result;
|
| | | }
|
| | | $list = array();
|
| | | $total = count($rows);
|
| | | for($i=0; $i<$total; $i++)
|
| | | {
|
| | | $game = new Game($rows[$i]);
|
| | | $list[] = $game;
|
| | | }
|
| | | $totalRows = 0;
|
| | | if($count){
|
| | | $sql = "SELECT count(*) FROM games";
|
| | | $cached_result2 = null;
|
| | | if(is_cached_query_allowed()){
|
| | | $data_value = get_cached_query($sql);
|
| | | if(!is_null($data_value)){
|
| | | $cached_result2 = json_decode($data_value, true);
|
| | | }
|
| | | }
|
| | | if(is_null($cached_result2)){
|
| | | $totalRows = $conn->query($sql)->fetchColumn();
|
| | | if(is_cached_query_allowed()){
|
| | | set_cached_query($sql, json_encode($totalRows));
|
| | | }
|
| | | } else {
|
| | | $totalRows = $cached_result2;
|
| | | }
|
| | | } else {
|
| | | $totalRows = count($list);
|
| | | }
|
| | | $totalPages = 0;
|
| | | if (count($list))
|
| | | {
|
| | | $totalPages = ceil($totalRows / $amount);
|
| | | }
|
| | | $result = (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows,
|
| | | "totalPages" => $totalPages
|
| | | ));
|
| | | return $result;
|
| | | }
|
| | |
|
| | | public static function getDraftList(int $amount = 1000, $sort = 'id DESC', int $page = 0, $count = true)
|
| | | {
|
| | | // Get games on draft or unpublished
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM games WHERE published = 0
|
| | | ORDER BY " . $sort . " LIMIT $amount OFFSET $page";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $list = array();
|
| | | while ($row = $st->fetch())
|
| | | {
|
| | | $game = new Game($row);
|
| | | $list[] = $game;
|
| | | }
|
| | | $totalRows = 0;
|
| | | if($count){
|
| | | $totalRows = $conn->query('SELECT count(*) FROM games')->fetchColumn();
|
| | | } else {
|
| | | $totalRows = count($list);
|
| | | }
|
| | | $totalPages = 0;
|
| | | if (count($list))
|
| | | {
|
| | | $totalPages = ceil($totalRows / $amount);
|
| | | }
|
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows,
|
| | | "totalPages" => $totalPages
|
| | | ));
|
| | | }
|
| | |
|
| | | public function getSimilarGames(int $amount = 12){
|
| | | // Get list of similar games based on current game categories
|
| | | if(!is_null($this->id)){
|
| | | $current_game_id = $this->id;
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT g.id
|
| | | FROM games g
|
| | | JOIN cat_links cl ON g.id = cl.gameid
|
| | | WHERE cl.categoryid IN (
|
| | | SELECT categoryid
|
| | | FROM cat_links
|
| | | WHERE gameid = $current_game_id
|
| | | ) AND g.id != $current_game_id
|
| | | GROUP BY g.id
|
| | | ORDER BY COUNT(cl.categoryid) DESC, rand()
|
| | | LIMIT $amount";
|
| | |
|
| | | $stmt = $conn->prepare($sql);
|
| | | $stmt->execute();
|
| | | $gameIDs = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
|
| | | //
|
| | | $is_only_mobile = false;
|
| | | if(defined('IS_VISITOR_PAGE')){
|
| | | if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
|
| | | $is_only_mobile = true;
|
| | | }
|
| | | }
|
| | | //
|
| | | $list = array();
|
| | | foreach ($gameIDs as $gameId) {
|
| | | if (count($list) < $amount) {
|
| | | $game = new Game;
|
| | | $res = $game->getById($gameId);
|
| | | if ($res && $res->published) {
|
| | | if($is_only_mobile && $res->is_mobile){
|
| | | array_push($list, $res);
|
| | | }
|
| | | if(!$is_only_mobile){
|
| | | array_push($list, $res);
|
| | | }
|
| | | }
|
| | | } else {
|
| | | break;
|
| | | }
|
| | | }
|
| | | return array(
|
| | | "results" => $list,
|
| | | "totalRows" => count($list),
|
| | | "totalPages" => 1
|
| | | );
|
| | | } else {
|
| | | echo 'Error 191';
|
| | | }
|
| | | }
|
| | |
|
| | | public static function getTotalGames(){
|
| | | // Get total games amount excluding draft
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT COUNT(*) FROM games WHERE published = 1";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | return $st->fetchColumn();
|
| | | }
|
| | |
|
| | | public static function searchGame($keyword, int $amount = 20, int $page = 0){
|
| | | $additional_condition = '';
|
| | | if(defined('IS_VISITOR_PAGE')){
|
| | | if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
|
| | | $additional_condition = 'AND is_mobile = 1';
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM games WHERE title LIKE :keyword
|
| | | AND published = 1 $additional_condition ORDER BY id DESC LIMIT $amount OFFSET $page";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":keyword", '%'. $keyword .'%', PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll();
|
| | | $list = array();
|
| | | foreach ($row as $item) {
|
| | | $list[] = new Game($item);
|
| | | }
|
| | | $sql = "SELECT count(*) FROM games WHERE title LIKE :keyword";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":keyword", '%'. $keyword .'%', PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $totalRows = $st->fetchColumn();
|
| | | $totalPages = 0;
|
| | | if (count($list))
|
| | | {
|
| | | $totalPages = ceil($totalRows / $amount);
|
| | | }
|
| | | |
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows,
|
| | | "totalPages" => $totalPages
|
| | | ));
|
| | | }
|
| | |
|
| | | public static function getListBySource($source, int $amount = 20, int $page = 0){
|
| | | $additional_condition = '';
|
| | | if(defined('IS_VISITOR_PAGE')){
|
| | | if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
|
| | | $additional_condition = 'AND is_mobile = 1';
|
| | | }
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM games WHERE source = :source
|
| | | AND published = 1 $additional_condition ORDER BY id DESC LIMIT $amount OFFSET $page";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":source", $source, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll();
|
| | | $list = array();
|
| | | foreach ($row as $item) {
|
| | | $list[] = new Game($item);
|
| | | }
|
| | | $sql = "SELECT count(*) FROM games WHERE source = :source";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":source", $source, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $totalRows = $st->fetchColumn();
|
| | | $totalPages = 0;
|
| | | if (count($list))
|
| | | {
|
| | | $totalPages = ceil($totalRows / $amount);
|
| | | }
|
| | |
|
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows,
|
| | | "totalPages" => $totalPages
|
| | | ));
|
| | | }
|
| | |
|
| | | public static function getListByTag($tag, int $amount = 1000, $sort = 'id DESC', int $offset = 0, $count = true)
|
| | | {
|
| | | $additional_condition = '';
|
| | | if(defined('IS_VISITOR_PAGE')){
|
| | | if(get_setting_value('hide_pc_on_mobile') && is_mobile_device()){
|
| | | $additional_condition = 'AND games.is_mobile = 1';
|
| | | }
|
| | | }
|
| | | $allowed_sort_columns = ['id DESC', 'id ASC'];
|
| | | $sort_column = in_array($sort, $allowed_sort_columns) ? $sort : 'id DESC';
|
| | | // Calculate the OFFSET based on page number and amount per page
|
| | | $conn = open_connection();
|
| | | $tag = $conn->quote($tag);
|
| | | $sql = "SELECT games.* |
| | | FROM games
|
| | | INNER JOIN tag_links ON games.id = tag_links.game_id
|
| | | INNER JOIN tags ON tag_links.tag_id = tags.id
|
| | | WHERE tags.name = $tag AND games.published = 1 $additional_condition
|
| | | ORDER BY $sort_column LIMIT $amount OFFSET $offset";
|
| | | $cached_result = null;
|
| | | if(is_cached_query_allowed()){
|
| | | $data_value = get_cached_query($sql);
|
| | | if(!is_null($data_value)){
|
| | | $cached_result = json_decode($data_value, true);
|
| | | }
|
| | | }
|
| | | $rows;
|
| | | if(is_null($cached_result)){
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $rows = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | if(is_cached_query_allowed()){
|
| | | set_cached_query($sql, json_encode($rows));
|
| | | }
|
| | | } else {
|
| | | $rows = $cached_result;
|
| | | }
|
| | | $list = [];
|
| | | $total = count($rows);
|
| | | for($i=0; $i<$total; $i++)
|
| | | {
|
| | | $game = new Game($rows[$i]);
|
| | | $list[] = $game;
|
| | | }
|
| | | $totalRows = 0;
|
| | | if($count){
|
| | | // Adjust the count query to include the same conditions as your main query
|
| | | $countSql = "SELECT COUNT(*) |
| | | FROM games
|
| | | INNER JOIN tag_links ON games.id = tag_links.game_id
|
| | | INNER JOIN tags ON tag_links.tag_id = tags.id
|
| | | WHERE tags.name = $tag AND games.published = 1 $additional_condition";
|
| | | $cached_result2 = null;
|
| | | if(is_cached_query_allowed()){
|
| | | $data_value = get_cached_query($countSql);
|
| | | if(!is_null($data_value)){
|
| | | $cached_result2 = json_decode($data_value, true);
|
| | | }
|
| | | }
|
| | | if(is_null($cached_result2)){
|
| | | $countSt = $conn->prepare($countSql);
|
| | | $countSt->execute();
|
| | | $totalRows = $countSt->fetchColumn();
|
| | | if(is_cached_query_allowed()){
|
| | | set_cached_query($countSql, json_encode($totalRows));
|
| | | }
|
| | | } else {
|
| | | $totalRows = $cached_result2;
|
| | | }
|
| | | } else {
|
| | | $totalRows = count($list);
|
| | | }
|
| | | $totalPages = ceil($totalRows / $amount);
|
| | | return [
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows,
|
| | | "totalPages" => $totalPages
|
| | | ];
|
| | | }
|
| | |
|
| | | public static function update_views($slug)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = 'UPDATE games SET views = views + 1 WHERE slug = :slug';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":slug", $slug, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | // Update trends
|
| | | $sql = 'SELECT slug FROM trends WHERE slug = :slug AND created = :created';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":slug", $slug, PDO::PARAM_STR);
|
| | | $st->bindValue(":created", date('Y-m-d'), PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if($row){
|
| | | // Record is exist
|
| | | // Begin update
|
| | | $sql = 'UPDATE trends SET views = views + 1 WHERE slug = :slug AND created = :created';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":slug", $slug, PDO::PARAM_STR);
|
| | | $st->bindValue(":created", date('Y-m-d'), PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | } else {
|
| | | // Not exist
|
| | | // Begin create record
|
| | | $sql = 'INSERT INTO trends ( views, created, slug ) VALUES ( 1, :created, :slug )';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":slug", $slug, PDO::PARAM_STR);
|
| | | $st->bindValue(":created", date('Y-m-d'), PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | }
|
| | | // Remove old trends record
|
| | | if(rand(0, 1000) <= 10){ // The chance this script being executed is 1%
|
| | | $date = new \DateTime('now');
|
| | | // remove 30 days
|
| | | $date->sub(new DateInterval('P30D')); |
| | | $sql = "DELETE FROM trends WHERE created < '{$date->format('Y-m-d')}' ";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | }
|
| | | }
|
| | |
|
| | | public static function upvote($id)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = 'UPDATE games SET upvote = upvote + 1 WHERE id = :id';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public static function downvote($id)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = 'UPDATE games SET downvote = downvote + 1 WHERE id = :id';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public function getExtraField($key)
|
| | | {
|
| | | if($this->extra_fields != null){
|
| | | $fields = json_decode($this->extra_fields, true);
|
| | | if(isset($fields[$key])){
|
| | | return $fields[$key];
|
| | | }
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | public function get_fields()
|
| | | {
|
| | | if($this->fields != ''){
|
| | | return json_decode($this->fields, true);
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | public function get_field($key)
|
| | | {
|
| | | if($this->fields != ''){
|
| | | $fields = json_decode($this->fields, true);
|
| | | if(isset($fields[$key])){
|
| | | return $fields[$key];
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | public function get_tags(){
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT tags.name
|
| | | FROM tags
|
| | | INNER JOIN tag_links ON tags.id = tag_links.tag_id
|
| | | WHERE tag_links.game_id = :game_id';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':game_id', $this->id);
|
| | | $st->execute();
|
| | | $tag_names = $st->fetchAll(PDO::FETCH_COLUMN);
|
| | | if(count($tag_names)){
|
| | | return implode(',', $tag_names);
|
| | | } else {
|
| | | return '';
|
| | | }
|
| | | }
|
| | |
|
| | | public function getCategoryList(bool $all = false){
|
| | | // Get category list for this game
|
| | | // Replacing old ineficient method "category" string
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT categoryid FROM cat_links WHERE gameid = :gameid";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue('gameid', $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $rows = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | $ids = [];
|
| | | foreach ($rows as $item) {
|
| | | $ids[] = $item['categoryid'];
|
| | | }
|
| | | if(count($ids)){
|
| | | $placeholders = implode(',', array_fill(0, count($ids), '?'));
|
| | | $sql = "SELECT id, name, slug, priority FROM categories WHERE id IN ($placeholders)";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute($ids);
|
| | | $rows = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | if(!$all){
|
| | | // Excluding hidden categories
|
| | | foreach ($rows as $key => $item) {
|
| | | if((int)$item['priority'] < 0){
|
| | | unset($rows[$key]);
|
| | | }
|
| | | }
|
| | | }
|
| | | return $rows;
|
| | | }
|
| | | return [];
|
| | | }
|
| | |
|
| | | public function get_categories(){
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT tags.name
|
| | | FROM tags
|
| | | INNER JOIN tag_links ON tags.id = tag_links.tag_id
|
| | | WHERE tag_links.game_id = :game_id';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':game_id', $this->id);
|
| | | $st->execute();
|
| | | $tag_names = $st->fetchAll(PDO::FETCH_COLUMN);
|
| | | if(count($tag_names)){
|
| | | return implode(',', $tag_names);
|
| | | } else {
|
| | | return '';
|
| | | }
|
| | | }
|
| | |
|
| | | public function update_category()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("Game::update(): Attempt to update an Game object that does not have its ID property set.", E_USER_ERROR);
|
| | | $prev_cats = Game::getById($this->id)->category; //Get previous category
|
| | | //
|
| | | $conn = open_connection();
|
| | | $sql = "UPDATE games SET category=:category WHERE id = :id";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":category", $this->category, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public function update_tags($tags = ''){
|
| | | $conn = open_connection();
|
| | | // Split the tag string into an array of tag names
|
| | | $tags = preg_replace('/[^\p{L}0-9\s,]/u', '', $tags);
|
| | | $tags = preg_replace('/\s+/', ' ', $tags);
|
| | | $tags = str_replace('#', '', $tags);
|
| | | $tags = strtolower($tags);
|
| | | $_tag_names = explode(",", $tags);
|
| | | $tag_names = [];
|
| | | foreach ($_tag_names as $_tag) {
|
| | | $_tag = trim($_tag);
|
| | | $_tag = str_replace(' ', '-', $_tag);
|
| | | $length = strlen($_tag);
|
| | | if($length >= 2 && $length <= 15){
|
| | | if(!in_array($_tag, $tag_names)){
|
| | | $tag_names[] = $_tag;
|
| | | }
|
| | | }
|
| | | }
|
| | | // Insert new tags into the tags table, and retrieve their ids
|
| | | $tag_ids = array();
|
| | | foreach ($tag_names as $tag_name) {
|
| | | if($tag_name == '') continue;
|
| | | // Check if the tag already exists in the tags table
|
| | | $sql = 'SELECT id FROM tags WHERE name = :name';
|
| | | $st = $conn->prepare($sql);
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(":name", $tag_name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch(PDO::FETCH_ASSOC);
|
| | | if ($row) {
|
| | | // If the tag already exists, use its id
|
| | | $tag_ids[] = $row['id'];
|
| | | } else {
|
| | | // If the tag does not exist, insert it and use the new id
|
| | | $sql = 'INSERT INTO tags (name) VALUES (:name)';
|
| | | $st = $conn->prepare($sql);
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(":name", $tag_name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $tag_ids[] = $conn->lastInsertId();
|
| | | }
|
| | | }
|
| | | // Insert the game-tag relationships into the tag_links table
|
| | | foreach ($tag_ids as $tag_id) {
|
| | | $sql = 'INSERT INTO tag_links (game_id, tag_id) VALUES (:game_id, :tag_id)';
|
| | | $st = $conn->prepare($sql);
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(":game_id", $this->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":tag_id", $tag_id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | //
|
| | | $sql = 'UPDATE tags SET usage_count = usage_count + 1 WHERE id = :tag_id';
|
| | | $st = $conn->prepare($sql);
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(':tag_id', $tag_id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | | }
|
| | |
|
| | | public function insert()
|
| | | {
|
| | | if (!is_null($this->id)) trigger_error("Game::insert(): Attempt to insert an Game object that already has its ID property set (to $this->id).", E_USER_ERROR);
|
| | | $conn = open_connection();
|
| | | $conn->beginTransaction(); // Start a transaction to ensure atomicity of inserts
|
| | | try {
|
| | | $sql = 'INSERT INTO games ( createdDate, title, description, instructions, category, source, thumb_1, thumb_2, thumb_small, url, width, height, slug, tags, views, upvote, downvote, data, extra_fields, is_mobile, published ) |
| | | VALUES ( :createdDate, :title, :description, :instructions, :category, :source, :thumb_1, :thumb_2, :thumb_small, :url, :width, :height, :slug, :tags, 0, 0, 0, :data, :extra_fields, :is_mobile, :published )';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":createdDate", $this->createdDate, PDO::PARAM_STR);
|
| | | $st->bindValue(":title", $this->title, PDO::PARAM_STR);
|
| | | $st->bindValue(":description", $this->description, PDO::PARAM_STR);
|
| | | $st->bindValue(":instructions", $this->instructions, PDO::PARAM_STR);
|
| | | $st->bindValue(":category", $this->category, PDO::PARAM_STR);
|
| | | $st->bindValue(":source", $this->source, PDO::PARAM_STR);
|
| | | $st->bindValue(":thumb_1", $this->thumb_1, PDO::PARAM_STR);
|
| | | $st->bindValue(":thumb_2", $this->thumb_2, PDO::PARAM_STR);
|
| | | $st->bindValue(":thumb_small", $this->thumb_small, PDO::PARAM_STR);
|
| | | $st->bindValue(":url", $this->url, PDO::PARAM_STR);
|
| | | $st->bindValue(":width", $this->width, PDO::PARAM_STR);
|
| | | $st->bindValue(":height", $this->height, PDO::PARAM_STR);
|
| | | $st->bindValue(":slug", esc_slug($this->slug), PDO::PARAM_STR);
|
| | | $st->bindValue(":tags", ($this->tags) ? $this->tags : '', PDO::PARAM_STR);
|
| | | $st->bindValue(":data", isset($_POST['data']) ? json_encode($_POST['data']) : '', PDO::PARAM_STR);
|
| | | $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
|
| | | $st->bindValue(":is_mobile", $this->is_mobile, PDO::PARAM_BOOL);
|
| | | $st->bindValue(":published", $this->published, PDO::PARAM_BOOL);
|
| | | $st->execute();
|
| | | $game_id = $conn->lastInsertId();
|
| | | $this->id = $game_id;
|
| | | if(!is_null($this->tags) && $this->tags != ''){ // Have tags
|
| | | $this->update_tags($this->tags);
|
| | | }
|
| | | // Commit the transaction
|
| | | $conn->commit();
|
| | | } catch (Exception $e) {
|
| | | // Roll back the transaction on error
|
| | | $conn->rollBack();
|
| | | throw $e;
|
| | | }
|
| | | }
|
| | |
|
| | | public function update()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("Game::update(): Attempt to update an Game object that does not have its ID property set.", E_USER_ERROR);
|
| | | $prev_cats = Game::getById($this->id)->category; //Get previous category
|
| | | //
|
| | | $conn = open_connection();
|
| | | $conn->beginTransaction(); // Start a transaction
|
| | | try {
|
| | | $sql = "UPDATE games SET title=:title, slug=:slug, description=:description, instructions=:instructions, category=:category, thumb_1=:thumb_1, thumb_2=:thumb_2, thumb_small=:thumb_small, url=:url, width=:width, height=:height, fields=:fields, extra_fields=:extra_fields, last_modified=:last_modified, is_mobile=:is_mobile, published=:published WHERE id = :id";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":last_modified", date('Y-m-d H:i:s'), PDO::PARAM_STR);
|
| | | $st->bindValue(":title", $this->title, PDO::PARAM_STR);
|
| | | $st->bindValue(":slug", $this->slug, PDO::PARAM_STR);
|
| | | $st->bindValue(":description", $this->description, PDO::PARAM_STR);
|
| | | $st->bindValue(":instructions", $this->instructions, PDO::PARAM_STR);
|
| | | $st->bindValue(":category", $this->category, PDO::PARAM_STR);
|
| | | $st->bindValue(":thumb_1", $this->thumb_1, PDO::PARAM_STR);
|
| | | $st->bindValue(":thumb_2", $this->thumb_2, PDO::PARAM_STR);
|
| | | $st->bindValue(":thumb_small", $this->thumb_small, PDO::PARAM_STR);
|
| | | $st->bindValue(":url", $this->url, PDO::PARAM_STR);
|
| | | $st->bindValue(":width", $this->width, PDO::PARAM_INT);
|
| | | $st->bindValue(":height", $this->height, PDO::PARAM_INT);
|
| | | $st->bindValue(":fields", $this->fields, PDO::PARAM_STR);
|
| | | $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
|
| | | $st->bindValue(":is_mobile", $this->is_mobile, PDO::PARAM_BOOL);
|
| | | $st->bindValue(":published", $this->published, PDO::PARAM_BOOL);
|
| | | $st->execute();
|
| | |
|
| | | // Update category listing
|
| | | if($prev_cats != $this->category){
|
| | | $st = $conn->prepare("DELETE FROM cat_links WHERE gameid = :id");
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | |
|
| | | $cats = commas_to_array($this->category);
|
| | | if(is_array($cats)){ //Add new category if not exist
|
| | | $length = count($cats);
|
| | | for($i = 0; $i < $length; $i++){
|
| | | $category = Category::getByName($cats[$i]);
|
| | | $category->addToCategory($this->id, $category->id);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | // Update tags
|
| | | $old_tags = $this->get_tags();
|
| | | $new_tags = $this->tags;
|
| | | if($old_tags != $new_tags){
|
| | | // Tags has been changed
|
| | | if($old_tags != ''){
|
| | | $st = $conn->prepare("DELETE FROM tag_links WHERE game_id = :id");
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | | if($new_tags != ''){
|
| | | $this->update_tags($this->tags);
|
| | | }
|
| | | }
|
| | | // Commit the transaction
|
| | | $conn->commit();
|
| | | } catch (Exception $e) {
|
| | | // Roll back the transaction on error
|
| | | $conn->rollBack();
|
| | | throw $e;
|
| | | }
|
| | | |
| | | }
|
| | |
|
| | | public function delete()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("Game::delete(): Attempt to delete an Game object that does not have its ID property set.", E_USER_ERROR);
|
| | |
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare("DELETE FROM games WHERE id = :id LIMIT 1");
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | |
|
| | | $st = $conn->prepare("DELETE FROM cat_links WHERE gameid = :id");
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | // Remove trends
|
| | | $st = $conn->prepare("DELETE FROM trends WHERE slug = :slug");
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(":slug", $this->slug, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | // Remove tag_links
|
| | | $st = $conn->prepare("DELETE FROM tag_links WHERE game_id = :game_id");
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $st->bindValue(":game_id", $this->id, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | //
|
| | | if ($this->source == 'self') // Remove game files
|
| | | {
|
| | | $src = '..' . $this->url;
|
| | | $this->remove_game_folder($src);
|
| | | }
|
| | | if(substr($this->thumb_1, 0, 8) == '/thumbs/'){ // Remove thumbnail files
|
| | | if(file_exists('..'.$this->thumb_1)){
|
| | | unlink('..'.$this->thumb_1);
|
| | | }
|
| | | }
|
| | | if(substr($this->thumb_2, 0, 8) == '/thumbs/'){ // Remove thumbnail files
|
| | | if(file_exists('..'.$this->thumb_2)){
|
| | | unlink('..'.$this->thumb_2);
|
| | | }
|
| | | }
|
| | | if(substr($this->thumb_small, 0, 8) == '/thumbs/'){ // Remove thumbnail files
|
| | | if(file_exists('..'.$this->thumb_small)){
|
| | | unlink('..'.$this->thumb_small);
|
| | | }
|
| | | }
|
| | | // Remove all content translations
|
| | | delete_content_translation('game', $this->id);
|
| | | }
|
| | | public function remove_game_folder($dir)
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("Does not have its ID property set.", E_USER_ERROR);
|
| | | if (is_dir($dir))
|
| | | {
|
| | | $files = scandir($dir);
|
| | | foreach ($files as $file) if ($file != "." && $file != "..") $this->remove_game_folder("$dir/$file");
|
| | | rmdir($dir);
|
| | | }
|
| | | else if (file_exists($dir)) unlink($dir);
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| New file |
| | |
| | | <?php
|
| | |
|
| | | class Page
|
| | | {
|
| | | public $id = null;
|
| | | public $createdDate = null;
|
| | | public $slug = null;
|
| | | public $title = null;
|
| | | public $content = null;
|
| | | public $nl2br = 1;
|
| | | public $fields = '';
|
| | | public $extra_fields = null;
|
| | |
|
| | | public function __construct( $data=array() ) {
|
| | | if ( isset( $data['id'] ) ) $this->id = (int) $data['id'];
|
| | | if ( isset( $data['createdDate'] ) ) $this->createdDate = (int) $data['createdDate'];
|
| | | if ( isset( $data['title'] ) ) $this->title = htmlspecialchars($data['title']);
|
| | | if ( isset( $data['content'] ) ) $this->content = $data['content'];
|
| | | if ( isset( $data['nl2br'] ) ) $this->nl2br = (int)$data['nl2br'];
|
| | | if ( isset($data['fields']) ) $this->fields = $data['fields'];
|
| | | if ( isset( $data['slug'] ) ) $this->slug = htmlspecialchars(strtolower(str_replace(' ', '-', $data["slug"])));
|
| | | if(isset($data['extra_fields'])){
|
| | | if(is_array($data['extra_fields'])){
|
| | | $data['extra_fields'] = json_encode($data['extra_fields']);
|
| | | }
|
| | | $this->extra_fields = $data['extra_fields'];
|
| | | }
|
| | | }
|
| | |
|
| | | public function storeFormValues ( $params ) {
|
| | |
|
| | | // Store all the parameters
|
| | | $this->__construct( $params );
|
| | |
|
| | | // Parse and store the publication date
|
| | | if ( isset($params['createdDate']) ) {
|
| | | $createdDate = explode ( '-', $params['createdDate'] );
|
| | |
|
| | | if ( count($createdDate) == 3 ) {
|
| | | list ( $y, $m, $d ) = $createdDate;
|
| | | $this->createdDate = mktime ( 0, 0, 0, $m, $d, $y );
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public static function getById( $id ) {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT *, UNIX_TIMESTAMP(createdDate) AS createdDate FROM pages WHERE id = :id";
|
| | | $st = $conn->prepare( $sql );
|
| | | $st->bindValue( ":id", $id, PDO::PARAM_INT );
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ( $row ) return new Page( $row );
|
| | | }
|
| | |
|
| | | public static function getBySlug( $slug ) {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT *, UNIX_TIMESTAMP(createdDate) AS createdDate FROM pages WHERE slug = :slug";
|
| | | $st = $conn->prepare( $sql );
|
| | | $st->bindValue( ":slug", $slug, PDO::PARAM_STR );
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ( $row ) return new Page( $row );
|
| | | }
|
| | |
|
| | | public static function getList( $numRows=1000000 ) {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT id, slug, title, fields, extra_fields, UNIX_TIMESTAMP(createdDate) AS createdDate
|
| | | FROM pages
|
| | | ORDER BY createdDate DESC LIMIT :numRows";
|
| | |
|
| | | $st = $conn->prepare( $sql );
|
| | | $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
|
| | | $st->execute();
|
| | | $list = array();
|
| | | while ( $row = $st->fetch() ) {
|
| | | $page = new Page( $row );
|
| | | $list[] = $page;
|
| | | }
|
| | | $totalRows = $conn->query('SELECT count(*) FROM pages')->fetchColumn();
|
| | | return ( array ( "results" => $list, "totalRows" => $totalRows ) );
|
| | | }
|
| | |
|
| | | public static function getList2(int $amount = 1000, $sort = 'id DESC', int $page = 0, $count = true)
|
| | | {
|
| | | // Improvement for getList(), this function is work for pagination list
|
| | | // The $sort is disabled for now
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT id, createdDate, slug, title, fields, extra_fields FROM pages ORDER BY createdDate DESC LIMIT :amount OFFSET :page";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue( ":amount", $amount, PDO::PARAM_INT );
|
| | | $st->bindValue( ":page", $page, PDO::PARAM_INT );
|
| | | $st->execute();
|
| | | $list = array();
|
| | | while ($row = $st->fetch())
|
| | | {
|
| | | $page = new Page($row);
|
| | | $page->createdDate = $row['createdDate']; // Fix bug
|
| | | $list[] = $page;
|
| | | }
|
| | | $totalRows = 0;
|
| | | if($count){
|
| | | $totalRows = $conn->query('SELECT count(*) FROM pages')->fetchColumn();
|
| | | } else {
|
| | | $totalRows = count($list);
|
| | | }
|
| | | $totalPages = 0;
|
| | | if (count($list))
|
| | | {
|
| | | $totalPages = ceil($totalRows / $amount);
|
| | | }
|
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows,
|
| | | "totalPages" => $totalPages
|
| | | ));
|
| | | }
|
| | |
|
| | | public function getExtraField($key)
|
| | | {
|
| | | if($this->extra_fields != null){
|
| | | $fields = json_decode($this->extra_fields, true);
|
| | | if(isset($fields[$key])){
|
| | | return $fields[$key];
|
| | | }
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | public function get_fields()
|
| | | {
|
| | | if($this->fields != ''){
|
| | | return json_decode($this->fields, true);
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | public function get_field($key)
|
| | | {
|
| | | if($this->fields != ''){
|
| | | $fields = json_decode($this->fields, true);
|
| | | if(isset($fields[$key])){
|
| | | return $fields[$key];
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | public function insert() {
|
| | | if ( !is_null( $this->id ) ) trigger_error ( "Page::insert(): Attempt to insert an Page object that already has its ID property set (to $this->id).", E_USER_ERROR );
|
| | |
|
| | | $conn = open_connection();
|
| | | $sql = "INSERT INTO pages ( createdDate, title, content, nl2br, slug, extra_fields ) VALUES ( FROM_UNIXTIME(:createdDate), :title, :content, :nl2br, :slug, :extra_fields )";
|
| | | $st = $conn->prepare ( $sql );
|
| | | $st->bindValue( ":createdDate", $this->createdDate, PDO::PARAM_INT );
|
| | | $st->bindValue( ":title", $this->title, PDO::PARAM_STR );
|
| | | $st->bindValue( ":content", $this->content, PDO::PARAM_STR );
|
| | | $st->bindValue( ":nl2br", $this->nl2br, PDO::PARAM_INT );
|
| | | $st->bindValue( ":slug", esc_slug($this->slug), PDO::PARAM_STR );
|
| | | $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $this->id = $conn->lastInsertId();
|
| | | }
|
| | |
|
| | | public function update() {
|
| | | if ( is_null( $this->id ) ) trigger_error ( "Page::update(): Attempt to update an Page object that does not have its ID property set.", E_USER_ERROR );
|
| | | |
| | | $conn = open_connection();
|
| | | $sql = "UPDATE pages SET title=:title, content=:content, nl2br=:nl2br, slug=:slug, fields=:fields, extra_fields=:extra_fields WHERE id = :id";
|
| | | $st = $conn->prepare ( $sql );
|
| | | $st->bindValue( ":title", $this->title, PDO::PARAM_STR );
|
| | | $st->bindValue( ":content", $this->content, PDO::PARAM_STR );
|
| | | $st->bindValue( ":nl2br", $this->nl2br, PDO::PARAM_INT );
|
| | | $st->bindValue( ":slug", $this->slug, PDO::PARAM_STR );
|
| | | $st->bindValue( ":fields", $this->fields, PDO::PARAM_STR );
|
| | | $st->bindValue(":extra_fields", $this->extra_fields, PDO::PARAM_STR);
|
| | | $st->bindValue( ":id", $this->id, PDO::PARAM_INT );
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public function delete() {
|
| | | if ( is_null( $this->id ) ) trigger_error ( "Page::delete(): Attempt to delete an Page object that does not have its ID property set.", E_USER_ERROR );
|
| | |
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare ( "DELETE FROM pages WHERE id = :id LIMIT 1" );
|
| | | $st->bindValue( ":id", $this->id, PDO::PARAM_INT );
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | class User {
|
| | | public $id = null;
|
| | | public $username = null;
|
| | | public $password = null;
|
| | | public $email = null;
|
| | | public $birth_date = null;
|
| | | public $join_date = null;
|
| | | public $gender = null;
|
| | | public $role = null;
|
| | | public $data = null;
|
| | | public $avatar = 0;
|
| | | public $bio = '';
|
| | | public $xp = 0;
|
| | | public $rank = '-';
|
| | | public $level = 1;
|
| | |
|
| | | public function __construct($data = array())
|
| | | {
|
| | | if (isset($data['id'])) $this->id = (int)$data['id'];
|
| | | if (isset($data['username'])) $this->username = $data['username'];
|
| | | if (isset($data['password'])) $this->password = $data['password'];
|
| | | if (isset($data['email'])) $this->email = $data['email'];
|
| | | if (isset($data['birth_date'])) $this->birth_date = $data['birth_date'];
|
| | | if (isset($data['join_date'])) $this->join_date = $data['join_date'];
|
| | | if (isset($data['gender'])) $this->gender = $data['gender'];
|
| | | if (isset($data['data'])) $this->data = json_decode($data['data'], true);
|
| | | if (isset($data['avatar'])) $this->avatar = $data['avatar'];
|
| | | if (isset($data['role'])) $this->role = $data['role'];
|
| | | if (isset($data['bio'])) $this->bio = $data['bio'];
|
| | | if (isset($data['xp'])) $this->xp = $data['xp'];
|
| | | if(is_null($this->xp)){
|
| | | $this->xp = 0;
|
| | | }
|
| | | if(is_null($this->birth_date)){
|
| | | $this->birth_date = date('Y-m-d');
|
| | | }
|
| | |
|
| | | if(!$this->data){
|
| | | $this->data = array();
|
| | | $this->data['likes'] = [];
|
| | | }
|
| | |
|
| | | if(file_exists(ABSPATH.'includes/rank.json')){
|
| | | $rank = json_decode(file_get_contents(ABSPATH.'includes/rank.json'), true);
|
| | | if($rank){
|
| | | $index = 0;
|
| | | foreach ($rank as $name => $value) {
|
| | | if($this->xp >= $value){
|
| | | $index++;
|
| | | $this->level = $index;
|
| | | $this->rank = $name;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public function storeFormValues($params)
|
| | | {
|
| | | $this->__construct($params);
|
| | | if(is_null($this->join_date)){
|
| | | $this->join_date = date('Y-m-d');
|
| | | }
|
| | | }
|
| | |
|
| | | public static function getById($id)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM users WHERE id = :id";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new User($row); //$row
|
| | | }
|
| | |
|
| | | public static function getByUsername($username)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM users WHERE username = :username LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":username", $username, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new User($row); //$row
|
| | | }
|
| | |
|
| | | public static function getList(int $amount = 30, $sort = 'desc', int $offset = 0)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM users
|
| | | ORDER BY id $sort LIMIT $amount OFFSET $offset";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $list = array();
|
| | |
|
| | | while ($row = $st->fetch())
|
| | | {
|
| | | $user = new User($row);
|
| | | $list[] = $user;
|
| | | }
|
| | | $totalRows = $conn->query('SELECT count(*) FROM users')->fetchColumn();
|
| | | $totalPages = 0;
|
| | | if (count($list))
|
| | | {
|
| | | $totalPages = ceil($totalRows / $amount);
|
| | | }
|
| | | return (array(
|
| | | "results" => $list,
|
| | | "totalRows" => $totalRows,
|
| | | "totalPages" => $totalPages
|
| | | ));
|
| | | }
|
| | |
|
| | | public static function getByEmail($email)
|
| | | {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM users WHERE email = :email LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":email", $email, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) return new User($row); //$row
|
| | | }
|
| | |
|
| | | public function array_id_exist($id)
|
| | | {
|
| | | if(!is_null($this->id)){
|
| | | if(!is_null($this->data) || isset($this->data['likes'])){
|
| | | $index = 1;
|
| | | foreach ($this->data['likes'] as $val) {
|
| | | if($val == $id){
|
| | | return $index;
|
| | | }
|
| | | $index++;
|
| | | }
|
| | | return false;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public function favoriteGames()
|
| | | {
|
| | | if(!is_null($this->id)){
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM favorites WHERE user_id = :user_id ORDER BY id DESC";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":user_id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll();
|
| | | return $row;
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | public static function getTotalUsers(){
|
| | | // Get total users
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT COUNT(*) FROM users";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | return $st->fetchColumn();
|
| | | }
|
| | |
|
| | | public function like($id)
|
| | | {
|
| | | if(!is_null($this->id)){
|
| | | if(is_null($this->data) || $this->data == ''){
|
| | | $this->data = array();
|
| | | $this->data['likes'] = array();
|
| | | }
|
| | | if(!$this->array_id_exist($id)){
|
| | | array_push($this->data['likes'], $id);
|
| | | }
|
| | | $this->xp += 10;
|
| | | $this->update_data();
|
| | | $this->update_xp();
|
| | | } else {
|
| | | echo "User is null";
|
| | | }
|
| | | }
|
| | |
|
| | | public function dislike($id)
|
| | | {
|
| | | if(!is_null($this->id)){
|
| | | if(is_null($this->data) || $this->data == ''){
|
| | | $this->data = array();
|
| | | $this->data['likes'] = array();
|
| | | }
|
| | | $arr = $this->array_id_exist($id);
|
| | | if($arr){
|
| | | array_splice($this->data['likes'], $arr-1, 1);
|
| | | $this->update_data();
|
| | | }
|
| | | } else {
|
| | | echo "User is null";
|
| | | }
|
| | | }
|
| | |
|
| | | public function insert()
|
| | | {
|
| | | if (!is_null($this->id)) trigger_error("User::insert(): Attempt to insert an User object that already has its ID property set (to $this->id).", E_USER_ERROR);
|
| | |
|
| | | if(!$this->avatar){
|
| | | $this->avatar = rand(1,20);
|
| | | }
|
| | |
|
| | | $conn = open_connection();
|
| | | $sql = 'INSERT INTO users ( username, password, email, birth_date, join_date, gender, data, role, avatar ) |
| | | VALUES ( :username, :password, :email, :birth_date, :join_date, :gender, :data, :role, :avatar )';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":username", $this->username, PDO::PARAM_STR);
|
| | | $st->bindValue(":password", $this->password, PDO::PARAM_STR);
|
| | | $st->bindValue(":email", $this->email, PDO::PARAM_STR);
|
| | | $st->bindValue(":birth_date", $this->birth_date, PDO::PARAM_STR);
|
| | | $st->bindValue(":join_date", $this->join_date, PDO::PARAM_STR);
|
| | | $st->bindValue(":gender", $this->gender, PDO::PARAM_STR);
|
| | | $st->bindValue(":data", json_encode($this->data), PDO::PARAM_STR);
|
| | | $st->bindValue(":role", 'user', PDO::PARAM_STR);
|
| | | $st->bindValue(":avatar", $this->avatar, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $this->id = $conn->lastInsertId();
|
| | | }
|
| | |
|
| | | public function update_data()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("User::update(): Attempt to update an User object that does not have its ID property set.", E_USER_ERROR);
|
| | | //
|
| | | $conn = open_connection();
|
| | | $sql = "UPDATE users SET data=:data WHERE id = :id";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":data", json_encode($this->data), PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public function update_xp()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("User::update(): Attempt to update an User object that does not have its ID property set.", E_USER_ERROR);
|
| | | //
|
| | | $conn = open_connection();
|
| | | $sql = "UPDATE users SET xp=:xp WHERE id = :id";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":xp", $this->xp, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public function add_xp($val)
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("User::update(): Attempt to update an User object that does not have its ID property set.", E_USER_ERROR);
|
| | | //
|
| | | $this->xp += (int)$val;
|
| | | |
| | | $conn = open_connection();
|
| | | $sql = "UPDATE users SET xp=:xp WHERE id = :id";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":xp", $this->xp, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | public function update()
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("User::update(): Attempt to update an User object that does not have its ID property set.", E_USER_ERROR);
|
| | | //
|
| | | $conn = open_connection();
|
| | | $sql = "UPDATE users SET username=:username, password=:password, email=:email, birth_date=:birth_date, gender=:gender, bio=:bio, avatar=:avatar WHERE id = :id";
|
| | |
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":username", $this->username, PDO::PARAM_STR);
|
| | | $st->bindValue(":password", $this->password, PDO::PARAM_STR);
|
| | | $st->bindValue(":email", $this->email, PDO::PARAM_STR);
|
| | | $st->bindValue(":birth_date", $this->birth_date, PDO::PARAM_STR);
|
| | | $st->bindValue(":gender", $this->gender, PDO::PARAM_STR);
|
| | | $st->bindValue(":bio", $this->bio, PDO::PARAM_STR);
|
| | | $st->bindValue(":avatar", $this->avatar, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | |
|
| | | }
|
| | |
|
| | | public function delete( $pass = null )
|
| | | {
|
| | | if (is_null($this->id)) trigger_error("User::delete(): Attempt to delete an User object that does not have its ID property set.", E_USER_ERROR);
|
| | |
|
| | | if(password_verify($pass, $this->password) || USER_ADMIN){
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare("DELETE FROM users WHERE id = :id LIMIT 1");
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | //Delete its avatar if exist
|
| | | if(file_exists( ABSPATH.'images/avatar/'.$this->username.'.png' )){
|
| | | unlink( ABSPATH.'images/avatar/'.$this->username.'.png' );
|
| | | }
|
| | |
|
| | | //Remove all comments from this user
|
| | | $st = $conn->prepare("DELETE FROM comments WHERE sender_id = :id");
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | |
|
| | | //Remove all scores from this user
|
| | | $st = $conn->prepare("DELETE FROM scores WHERE user_id = :id");
|
| | | $st->bindValue(":id", $this->id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| New file |
| | |
| | | <?php
|
| | |
|
| | | $widget_factory;
|
| | |
|
| | | $registered_sidebars = array();
|
| | | |
| | | class Widget {
|
| | | public $name;
|
| | | public $id_base;
|
| | | public $description = '';
|
| | |
|
| | | public function __construct() {
|
| | | // actual widget processes
|
| | | }
|
| | | |
| | | public function widget( $instance, $args ) {
|
| | | // outputs the content of the widget
|
| | | }
|
| | | |
| | | public function form( $instance ) {
|
| | | echo '<p class="no-options-widget">' . __( 'There are no options for this widget.' ) . '</p>';
|
| | | return 'noform';
|
| | | }
|
| | | |
| | | public function update( $new_instance, $old_instance ) {
|
| | | return $new_instance;
|
| | | }
|
| | | }
|
| | |
|
| | | class Widget_Factory {
|
| | | public $widgets = array();
|
| | |
|
| | | public function register( $widget ) {
|
| | | if ( $widget instanceof Widget ) {
|
| | | $this->widgets[ spl_object_hash( $widget ) ] = $widget;
|
| | | } else {
|
| | | $this->widgets[ $widget ] = new $widget();
|
| | | }
|
| | | }
|
| | |
|
| | | public function unregister( $widget ) {
|
| | | if ( $widget instanceof WP_Widget ) {
|
| | | unset( $this->widgets[ spl_object_hash( $widget ) ] );
|
| | | } else {
|
| | | unset( $this->widgets[ $widget ] );
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | $widget_factory = new Widget_Factory();
|
| | |
|
| | | function register_widget($widget){
|
| | | global $widget_factory;
|
| | | $widget_factory->register($widget);
|
| | | }
|
| | |
|
| | | function the_widget( $widget, $instance = array(), $args = array() ){
|
| | | global $widget_factory;
|
| | | if ( ! isset( $widget_factory->widgets[ $widget ] ) ) {
|
| | | return;
|
| | | }
|
| | |
|
| | | $widget_obj = $widget_factory->widgets[ $widget ];
|
| | | if ( ! ( $widget_obj instanceof Widget ) ) {
|
| | | return;
|
| | | }
|
| | |
|
| | | $widget_obj->widget( $instance, $args );
|
| | | }
|
| | |
|
| | | function get_widget( $widget, $instance = array(), $args = array() ){
|
| | | global $widget_factory;
|
| | | if ( ! isset( $widget_factory->widgets[ $widget ] ) ) {
|
| | | return;
|
| | | }
|
| | |
|
| | | $widget_obj = $widget_factory->widgets[ $widget ];
|
| | | if ( ! ( $widget_obj instanceof Widget ) ) {
|
| | | return;
|
| | | }
|
| | |
|
| | | return $widget_obj;
|
| | | }
|
| | |
|
| | | function widget_exists($widget){
|
| | | global $widget_factory;
|
| | | if(isset($widget_factory->widgets[ $widget ])){
|
| | | return true;
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | require( ABSPATH . 'includes/widgets.php' );
|
| | | |
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | if(!file_exists( __DIR__."/connect.php") ){
|
| | | if(file_exists("install.php")){
|
| | | header('Location: install.php');
|
| | | } elseif(file_exists("../install.php")) {
|
| | | header('Location: ../install.php');
|
| | | }
|
| | | exit('CloudArcade not installed yet.');
|
| | | }
|
| | |
|
| | | require("connect.php");
|
| | | require("includes/version.php");
|
| | |
|
| | | function handleException( $exception ) {
|
| | | echo($exception);
|
| | | error_log( $exception->getMessage() );
|
| | | }
|
| | |
|
| | | ini_set('display_errors', 1);
|
| | | ini_set('display_startup_errors', 1);
|
| | | error_reporting(E_ALL);
|
| | |
|
| | | set_exception_handler( 'handleException' );
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | | define( "DB_DSN", "mysql:host=db_host;dbname=db_name" );
|
| | | define( "DB_USERNAME", "db_user" );
|
| | | define( "DB_PASSWORD", "db_password" );
|
| | | ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container text-center">
|
| | | <img src="<?php echo DOMAIN . TEMPLATE_PATH . "/images/404.png" ?>">
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <div class="content-wrapper">
|
| | | <h3 class="item-title"><?php _e('%a Games', esc_string($archive_title)) ?></h3>
|
| | | <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
|
| | | <?php
|
| | | if($category->description != ''){
|
| | | echo '<p class="category-description">';
|
| | | echo "$category->description</p>";
|
| | | }
|
| | | ?>
|
| | | <div class="game-container">
|
| | | <div class="grid-layout grid-wrapper">
|
| | | <?php foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation example">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = esc_int($_GET['page']);
|
| | | }
|
| | | render_pagination($total_page, $cur_page, 8, 'category', $_GET['slug']);
|
| | | ?>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | function list_categories(){
|
| | | $categories = fetch_all_categories();
|
| | | echo '<ul class="links list-categories">';
|
| | | foreach ($categories as $item) {
|
| | | echo '<a href="'. get_permalink('category', $item->slug) .'"><li>'. esc_string($item->name) .'</li></a>';
|
| | | }
|
| | | echo '</ul>';
|
| | | }
|
| | | function list_games($type, $amount, $count = false){
|
| | | echo '<div class="row">';
|
| | | $data = fetch_games_by_type($type, $amount, 0, $count);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <div class="col-4 list-tile">
|
| | | <a href="<?php echo get_permalink('game', $game->slug) ?>">
|
| | | <div class="list-game">
|
| | | <div class="list-thumbnail"><img src="<?php echo get_small_thumb($game) ?>" class="small-thumb" alt="<?php echo esc_string($game->title) ?>"></div>
|
| | | </div>
|
| | | </a>
|
| | | </div>
|
| | | <?php }
|
| | | echo '</div>';
|
| | | }
|
| | | function list_games_by_category($cat, $amount){
|
| | | // Deprecated, not used anymore
|
| | | echo '<div class="grid-layout grid-wrapper">';
|
| | | $data = get_game_list_category($cat, $amount);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php }
|
| | | echo '</div>';
|
| | | }
|
| | | function list_games_by_categories($cat, $amount){
|
| | | // Deprecated, not used anymore
|
| | | echo '<div class="grid-layout grid-wrapper">';
|
| | | $data = get_game_list_categories($cat, $amount);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php }
|
| | | echo '</div>';
|
| | | }
|
| | |
|
| | | function show_user_profile_header(){
|
| | |
|
| | | global $login_user;
|
| | |
|
| | | if($login_user){
|
| | | ?>
|
| | | <div class="user-avatar">
|
| | | <img src="<?php echo get_user_avatar() ?>">
|
| | | </div>
|
| | | <ul class="user-links hidden">
|
| | | <li>
|
| | | <strong>
|
| | | <?php echo $login_user->username ?>
|
| | | </strong>
|
| | | <div class="label-xp"><?php echo $login_user->xp ?>xp</div>
|
| | | </li>
|
| | | <hr>
|
| | | <a href="<?php echo get_permalink('user', $login_user->username) ?>">
|
| | | <li><?php _e('My Profile') ?></li>
|
| | | </a>
|
| | | <a href="<?php echo get_permalink('user', $login_user->username, array('edit' => 'edit')) ?>">
|
| | | <li><?php _e('Edit Profile') ?></li>
|
| | | </a>
|
| | | <hr>
|
| | | <a href="<?php echo DOMAIN ?>admin.php?action=logout">
|
| | | <li class="text-danger"><?php _e('Log Out') ?></li>
|
| | | </a>
|
| | | </ul>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Head',
|
| | | 'id' => 'head',
|
| | | 'description' => 'HTML element before </head>',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Sidebar 1',
|
| | | 'id' => 'sidebar-1',
|
| | | 'description' => 'Right sidebar',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Footer 1',
|
| | | 'id' => 'footer-1',
|
| | | 'description' => 'Footer 1',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Footer 2',
|
| | | 'id' => 'footer-2',
|
| | | 'description' => 'Footer 2',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Footer 3',
|
| | | 'id' => 'footer-3',
|
| | | 'description' => 'Footer 3',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Top Content',
|
| | | 'id' => 'top-content',
|
| | | 'description' => 'Above main content element. Recommended for Ad banner placement.',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Bottom Content',
|
| | | 'id' => 'bottom-content',
|
| | | 'description' => 'Under main content element. Recommended for Ad banner placement.',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Homepage Bottom',
|
| | | 'id' => 'homepage-bottom',
|
| | | 'description' => 'Bottom content on homepage. Can be used to show site description or explaining about your site.',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Footer Copyright',
|
| | | 'id' => 'footer-copyright',
|
| | | 'description' => 'Copyright section.',
|
| | | ));
|
| | |
|
| | | class widget_game_list extends Widget {
|
| | | function __construct() {
|
| | | $this->name = 'Game List';
|
| | | $this->id_base = 'game-list';
|
| | | $this->description = 'Show game list ( Grid ). Is recommedned to put this on sidebar.';
|
| | | }
|
| | | public function widget( $instance, $args = array() ){
|
| | | $label = isset($instance['label']) ? $instance['label'] : '';
|
| | | $class = isset($instance['class']) ? $instance['class'] : 'widget';
|
| | | $type = isset($instance['type']) ? $instance['type'] : 'new';
|
| | | $amount = isset($instance['amount']) ? $instance['amount'] : 9;
|
| | |
|
| | | echo '<div class="'.$class.'">';
|
| | |
|
| | | if($label != ''){
|
| | | $icon = 'fa-plus';
|
| | | if($type != 'new'){
|
| | | $icon = 'fa-gamepad';
|
| | | }
|
| | | echo '<h4 class="widget-title"><i class="fa '.$icon.'" aria-hidden="true"></i>'.$label.'</h4>';
|
| | | }
|
| | |
|
| | | list_games($type, (int)$amount);
|
| | | echo '</div>';
|
| | | }
|
| | |
|
| | | public function form( $instance = array() ){
|
| | |
|
| | | if(!isset( $instance['label'] )){
|
| | | $instance['label'] = '';
|
| | | }
|
| | | if(!isset( $instance['type'] )){
|
| | | $instance['type'] = 'new';
|
| | | }
|
| | | if(!isset( $instance['amount'] )){
|
| | | $instance['amount'] = 9;
|
| | | }
|
| | | if(!isset( $instance['class'] )){
|
| | | $instance['class'] = 'widget';
|
| | | }
|
| | | ?>
|
| | | <div class="form-group">
|
| | | <label><?php _e('Widget label/title (optional)') ?>:</label>
|
| | | <input type="text" class="form-control" name="label" placeholder="NEW GAMES" value="<?php echo $instance['label'] ?>">
|
| | | </div>
|
| | | <div class="form-group">
|
| | | <label><?php _e('Sort game list by') ?>:</label>
|
| | | <select class="form-control" name="type">
|
| | | <?php
|
| | |
|
| | | $opts = array(
|
| | | 'new' => 'New',
|
| | | 'popular' => 'Popular',
|
| | | 'random' => 'Random',
|
| | | 'likes' => 'Likes',
|
| | | 'trending' => 'Trending'
|
| | | );
|
| | |
|
| | | foreach ($opts as $key => $value) {
|
| | | $selected = '';
|
| | | if($key == $instance['type']){
|
| | | $selected = 'selected';
|
| | | }
|
| | | echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
|
| | | }
|
| | | ?>
|
| | | </select>
|
| | | </div>
|
| | | <div class="form-group">
|
| | | <label><?php _e('Amount') ?>:</label>
|
| | | <input type="number" class="form-control" name="amount" placeholder="9" min="1" value="<?php echo $instance['amount'] ?>">
|
| | | </div>
|
| | | <div class="form-group">
|
| | | <label><?php _e('Div class (Optional)') ?>:</label>
|
| | | <input type="text" class="form-control" name="class" placeholder="widget" value="<?php echo $instance['class'] ?>">
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | register_widget( 'widget_game_list' );
|
| | |
|
| | | if(file_exists(ABSPATH . TEMPLATE_PATH . '/includes/custom.php')){
|
| | | include(ABSPATH . TEMPLATE_PATH . '/includes/custom.php');
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <div class="content-wrapper">
|
| | | <div class="row">
|
| | | <div class="col-md-9 game-content">
|
| | | <div class="game-iframe-container">
|
| | | <iframe class="game-iframe" id="game-area" src="<?php echo get_game_url($game); ?>" frameborder="0" allowfullscreen></iframe>
|
| | | </div>
|
| | | <div class="single-info-container">
|
| | | <div class="header-left">
|
| | | <h1 class="single-title"><?php echo htmlspecialchars( $game->title )?></h1>
|
| | | <p><?php _e('Played %a times.', esc_int($game->views)) ?></p>
|
| | | </div>
|
| | | <div class="header-right">
|
| | | <div class="stats-vote">
|
| | | <?php
|
| | | $vote_percentage = '- ';
|
| | | if($game->upvote+$game->downvote > 0){
|
| | | $vote_percentage = floor(($game->upvote/($game->upvote+$game->downvote))*100);
|
| | | }
|
| | | ?>
|
| | | <div class="txt-stats"><b class="text-success"><?php echo $vote_percentage ?>%</b> (<?php echo $game->upvote ?>/<?php echo $game->upvote+$game->downvote ?>)</div>
|
| | | <?php if($login_user){
|
| | | $favorited_class = '';
|
| | | if(is_favorited_game($game->id)){
|
| | | $favorited_class = 'color-red';
|
| | | }
|
| | | ?>
|
| | | <i class="icon-vote fa fa-heart <?php echo $favorited_class ?>" id="favorite" data-id="<?php echo $game->id ?>"></i>
|
| | | <?php } ?>
|
| | | <i class="icon-vote fa fa-thumbs-up" id="upvote" data-id="<?php echo $game->id ?>"></i>
|
| | | <i class="icon-vote fa fa-thumbs-down" id="downvote" data-id="<?php echo $game->id ?>"></i>
|
| | | <div class="vote-status"></div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="action-btn">
|
| | | <!-- <div class="single-icon"><i class="fa fa-external-link-square" aria-hidden="true"></i><a href="<?php echo get_permalink('full', $game->slug); ?>" target="_blank"><?php _e('Open in new window') ?></a></div>
|
| | | <div class="single-icon"><i class="fa fa-expand" aria-hidden="true"></i><a href="#" onclick="open_fullscreen()"><?php _e('Fullscreen') ?></a></div> -->
|
| | | <?php
|
| | | if(defined('GAME_REPORTS')){
|
| | | ?><div class="single-icon"><i class="fa fa-bug" aria-hidden="true"></i><a href="#" id="report-game"><?php _e('Report') ?></a></div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | <div class="social-share"><a href="https://www.facebook.com/sharer/sharer.php?u=<?php echo htmlspecialchars(get_cur_url()); ?>" target="_blank">
|
| | | <img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/facebook.png' ?>" alt="share" class="social-icon">
|
| | | </a></div>
|
| | | <div class="social-share"><a href="https://twitter.com/intent/tweet?url=<?php echo htmlspecialchars(get_cur_url()); ?>" target="_blank">
|
| | | <img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/twitter.png' ?>" alt="share" class="social-icon">
|
| | | </a></div>
|
| | | </div>
|
| | | </div>
|
| | | <b><?php _e('Description') ?>:</b>
|
| | | <div class="single-description">
|
| | | <?php echo nl2br( $game->description )?>
|
| | | </div>
|
| | | <br>
|
| | | <b><?php _e('Instructions') ?>:</b>
|
| | | <div class="single-instructions">
|
| | | <?php echo nl2br( $game->instructions )?>
|
| | | </div>
|
| | | <br>
|
| | | <?php if(can_show_leaderboard()) { ?>
|
| | | <div class="single-leaderboard">
|
| | | <div id="content-leaderboard" class="table-responsive" data-id="<?php echo $game->id ?>"></div>
|
| | | </div>
|
| | | <?php } ?>
|
| | | <br>
|
| | | <b><?php _e('Categories') ?>:</b>
|
| | | <p class="cat-list"> |
| | | <?php if ( $game->category ) {
|
| | | $categories = $game->getCategoryList();
|
| | | foreach ($categories as $cat) {
|
| | | $category = Category::getById($cat['id']);
|
| | | ?>
|
| | | <a href="<?php echo get_permalink('category', $category->slug) ?>" class="cat-link"><?php echo esc_string($category->name) ?></a>
|
| | | <?php
|
| | | }
|
| | | } ?>
|
| | | </p>
|
| | | <?php
|
| | | $tag_string = $game->get_tags();
|
| | | if($tag_string != ''){
|
| | | echo '<b>'._t('Tags').':</b>';
|
| | | echo '<div class="game-tag-list">';
|
| | | $tags = explode(',', $tag_string);
|
| | | foreach ($tags as $tag_name) {
|
| | | echo '<a href="'. get_permalink('tag', $tag_name) .'" class="tag-item">';
|
| | | echo esc_string($tag_name);
|
| | | echo '</a>';
|
| | | }
|
| | | echo '</div>';
|
| | | }
|
| | | ?>
|
| | | <?php if(get_setting_value('comments')){
|
| | | echo '<div class="mt-4"></div>';
|
| | | echo '<b>'._t('Comments').':</b>';
|
| | | render_game_comments($game->id);
|
| | | } ?>
|
| | | </div>
|
| | | <div class="col-md-3">
|
| | | <?php include TEMPLATE_PATH . "/parts/sidebar.php" ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | <div class="bottom-container">
|
| | | <h3 class="item-title"><i class="fa fa-thumbs-up" aria-hidden="true"></i><?php _e('SIMILAR GAMES') ?></h3>
|
| | | <div class="grid-layout grid-wrapper">
|
| | | <?php
|
| | | $data = fetch_similar_games($game, 12);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) {
|
| | | include TEMPLATE_PATH . "/includes/grid.php";
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <h3 class="item-title"><i class="fa fa-plus" aria-hidden="true"></i><?php _e('NEW GAMES') ?></h3>
|
| | | <div class="grid-layout grid-wrapper" id="section-new-games">
|
| | | <?php
|
| | | $index = 0;
|
| | | $games = fetch_games_by_type('new', 30, 0, false)['results'];
|
| | | foreach ( $games as $game ) { $index++; ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid-masonry.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <!-- Load more games -->
|
| | | <div class="load-more-games-wrapper">
|
| | | <!-- Template -->
|
| | | <div class="item-append-template" style="display: none;">
|
| | | <div class="grid-item item-grid">
|
| | | <a href="<?php echo get_permalink('game') ?>{{slug}}">
|
| | | <div class="list-game">
|
| | | <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="{{thumbnail}}" class="small-thumb lazyload" alt="{{title}}"></div>
|
| | | <div class="list-title">
|
| | | <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-{{rating}}.png' ?>" alt="rating"></div>{{title}}
|
| | | </div>
|
| | | </div>
|
| | | </a>
|
| | | </div>
|
| | | </div>
|
| | | <!-- The button -->
|
| | | <div class="btn btn-primary btn-load-more-games">
|
| | | <?php _e('Load more games') ?> <i class="fa fa-chevron-down" aria-hidden="true"></i>
|
| | | </div>
|
| | | </div>
|
| | | <h3 class="item-title"><i class="fa fa-certificate" aria-hidden="true"></i><?php _e('POPULAR GAMES') ?></h3>
|
| | | <div class="grid-layout grid-wrapper">
|
| | | <?php
|
| | | $games = fetch_games_by_type('popular', 14, 0, false)['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <h3 class="item-title"><i class="fa fa-gamepad" aria-hidden="true"></i><?php _e('YOU MAY LIKE') ?></h3>
|
| | | <div class="grid-layout grid-wrapper">
|
| | | <?php
|
| | | $games = fetch_games_by_type('random', 14, 0, false)['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | <div class="mb-4 mt-4 hp-bottom-container">
|
| | | <?php widget_aside('homepage-bottom') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | /*
|
| | |
|
| | | Used for custom Widgets and custom Widget placements
|
| | |
|
| | | This file will not be overwritten by the updater
|
| | |
|
| | | */
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <footer class="footer">
|
| | | <div class="container">
|
| | | <div class="row">
|
| | | <div class="col-lg-3">
|
| | | <div class="footer-1">
|
| | | <?php widget_aside('footer-1') ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-3">
|
| | | <div class="footer-2">
|
| | | <?php widget_aside('footer-2') ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-3">
|
| | | <div class="footer-3">
|
| | | <?php widget_aside('footer-3') ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-lg-3">
|
| | | <div class="footer-4">
|
| | | <?php widget_aside('footer-4') ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </footer>
|
| | | <div class="copyright py-4 text-center">
|
| | | <div class="container">
|
| | | <?php
|
| | | if(isset($stored_widgets['footer-copyright'])){
|
| | | widget_aside('footer-copyright');
|
| | | } else {
|
| | | echo SITE_TITLE . ' © '.date('Y').'. All rights reserved.';
|
| | | }
|
| | | ?>
|
| | | <span class="dsb-panel">
|
| | | <?php
|
| | | // if(is_login() && USER_ADMIN ){
|
| | | // echo '<a href="'.DOMAIN.'admin.php">Admin Dashboard</a>';
|
| | | // } else {
|
| | | // echo 'V-'.VERSION;
|
| | | // }
|
| | | echo '<a href="'.DOMAIN.'page/privacy-policy">Privacy Policy</a>';
|
| | | ?>
|
| | | <?php
|
| | | echo '|';
|
| | | ?>
|
| | | <?php
|
| | | echo '<a href="'.DOMAIN.'page/page/contact-us">Contact Us</a>';
|
| | | ?>
|
| | | </span>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/jquery-3.6.2.min.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/lazysizes.min.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/bootstrap.bundle.min.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN ?>js/comment-system.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/script.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/custom.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN ?>js/stats.js"></script>
|
| | | <?php run_hook('footer') ?>
|
| | | <?php load_plugin_footers() ?>
|
| | | </body>
|
| | | </html> |
| New file |
| | |
| | | <?php
|
| | | $span = '';
|
| | | $thumb = get_small_thumb($game);
|
| | | if($index == 1 || $index == 9 || $index == 15 || $index == 23){
|
| | | $span = 'span-2';
|
| | | $thumb = esc_url($game->thumb_2);
|
| | | if(substr($thumb, 0, 1) == '/'){
|
| | | $thumb = DOMAIN . substr($thumb, 1);
|
| | | }
|
| | | }
|
| | | ?>
|
| | | <div class="grid-item <?php echo esc_string($span) ?> item-grid">
|
| | | <a href="<?php echo get_permalink('game', $game->slug) ?>">
|
| | | <div class="list-game">
|
| | | <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="<?php echo $thumb ?>" class="small-thumb lazyload" alt="<?php echo esc_string($game->title) ?>"></div>
|
| | | <div class="list-title">
|
| | | <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-'.get_rating('5', $game).'.png' ?>" alt="rating"></div>
|
| | | <?php echo esc_string($game->title); ?>
|
| | | </div>
|
| | | </div>
|
| | | </a>
|
| | | </div> |
| New file |
| | |
| | | <div class="grid-item item-grid">
|
| | | <a href="<?php echo get_permalink('game', $game->slug) ?>">
|
| | | <div class="list-game">
|
| | | <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="<?php echo get_small_thumb($game) ?>" class="small-thumb lazyload" alt="<?php echo esc_string($game->title) ?>"></div>
|
| | | <div class="list-title">
|
| | | <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-'.get_rating('5', $game).'.png' ?>" alt="rating"></div><?php echo esc_string($game->title); ?>
|
| | | </div>
|
| | | </div>
|
| | | </a>
|
| | | </div> |
| New file |
| | |
| | | <!DOCTYPE html>
|
| | | <html <?php the_html_attrs() ?>>
|
| | | <head>
|
| | | <meta charset="utf-8">
|
| | | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
| | | <title><?php echo get_page_title() ?></title>
|
| | | <?php the_canonical_link() ?>
|
| | | <meta name="description" content="<?php echo substr(esc_string($meta_description), 0, 160) ?>">
|
| | | <?php
|
| | | if(isset($game)){ //Game page
|
| | | ?>
|
| | | <meta name="twitter:card" content="summary_large_image" />
|
| | | <meta name="twitter:title" content="<?php echo htmlspecialchars( $page_title )?>" />
|
| | | <meta name="twitter:description" content="<?php echo substr(esc_string($meta_description), 0, 200) ?>" />
|
| | | <?php
|
| | | if(isset($game->thumb_1)){
|
| | | $thumb = $game->thumb_1;
|
| | | if(substr($thumb, 0, 1) == '/'){
|
| | | $thumb = DOMAIN . substr($thumb, 1);
|
| | | }
|
| | | echo('<meta name="twitter:image:src" content="'.$thumb.'">');
|
| | | echo('<meta property="og:image" content="'.$thumb.'">');
|
| | | }
|
| | | }
|
| | | ?>
|
| | | <?php load_plugin_headers() ?>
|
| | | <!-- Google fonts-->
|
| | | <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css" />
|
| | | <link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/bootstrap.min.css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/jquery-comments.css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/user.css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/style.css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/custom.css" />
|
| | | <!-- Font Awesome icons (free version)-->
|
| | | <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
|
| | | <?php widget_aside('head') ?>
|
| | | </head>
|
| | | <body id="page-top">
|
| | | <!-- Navigation-->
|
| | | <div class="container site-container">
|
| | | <div class="site-content">
|
| | | <nav class="navbar navbar-expand-lg navbar-dark top-nav" id="mainNav">
|
| | | <div class="container">
|
| | | <button class="navbar-toggler navbar-toggler-left collapsed" type="button" data-toggle="collapse" data-target="#navb" aria-expanded="false">
|
| | | <span class="navbar-toggler-icon"></span>
|
| | | </button>
|
| | | <a class="navbar-brand js-scroll-trigger" href="<?php echo DOMAIN ?>"><img src="<?php echo DOMAIN . SITE_LOGO ?>" class="site-logo" alt="site-logo"></a>
|
| | | <?php include TEMPLATE_PATH . "/parts/navigation-top.php" ?>
|
| | | <?php show_user_profile_header() ?>
|
| | | </div>
|
| | | </nav>
|
| | | <div class="nav-categories">
|
| | | <div class="container">
|
| | | <?php include TEMPLATE_PATH . "/parts/navigation-categories.php" ?>
|
| | | </div>
|
| | | </div> |
| New file |
| | |
| | | {
|
| | | "name": "Dark Grid",
|
| | | "version": "1.1.7",
|
| | | "author": "CloudArcade",
|
| | | "description": "Dark Grid Theme",
|
| | | "website": "https://cloudarcade.net",
|
| | | "release_date": "30/08/2023",
|
| | | "changelog": "Implement load more games, implement new comment system, better search, fix bugs.",
|
| | | "type":"theme",
|
| | | "target_version": "1.6.5"
|
| | | } |
| New file |
| | |
| | | /*! |
| | | * Bootstrap v4.5.2 (https://getbootstrap.com/) |
| | | * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) |
| | | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) |
| | | */ |
| | | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function s(){return(s=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;function r(t){var n=this,i=!1;return e(this).one(a.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||a.triggerTransitionEnd(n)}),t),this}var a={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),s=parseFloat(i);return o||s?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],s=e[i],r=s&&a.isElement(s)?"element":null===(l=s)||"undefined"==typeof l?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+r+'" but expected type "'+o+'".')}var l},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?a.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};a.jQueryDetection(),e.fn.emulateTransitionEnd=r,e.event.special[a.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var l="alert",c=e.fn[l],h=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=a.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=a.getTransitionDurationFromElement(t);e(t).one(a.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),e.fn[l]=h._jQueryInterface,e.fn[l].Constructor=h,e.fn[l].noConflict=function(){return e.fn[l]=c,h._jQueryInterface};var u=e.fn.button,d=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var s=i.querySelector(".active");s&&e(s).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();("LABEL"!==i.tagName||o&&"checkbox"!==o.type)&&d._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var s=0,r=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;s<r;s++){var a=t[s];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=d._jQueryInterface,e.fn.button.Constructor=d,e.fn.button.noConflict=function(){return e.fn.button=u,d._jQueryInterface};var f="carousel",g=".bs.carousel",m=e.fn[f],p={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},v={TOUCH:"touch",PEN:"pen"},b=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(a.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(g),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=s({},p,t),a.typeCheckConfig(f,t,_),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),s=this._items.length-1;if((i&&0===o||n&&o===s)&&!this._config.wrap)return e;var r=(o+("prev"===t?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),s=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(s),s},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,s,r=this,l=this._element.querySelector(".active.carousel-item"),c=this._getItemIndex(l),h=n||l&&this._getItemByDirection(t,l),u=this._getItemIndex(h),d=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",s="left"):(i="carousel-item-right",o="carousel-item-prev",s="right"),h&&e(h).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(h,s).isDefaultPrevented()&&l&&h){this._isSliding=!0,d&&this.pause(),this._setActiveIndicatorElement(h);var f=e.Event("slid.bs.carousel",{relatedTarget:h,direction:s,from:c,to:u});if(e(this._element).hasClass("slide")){e(h).addClass(o),a.reflow(h),e(l).addClass(i),e(h).addClass(i);var g=parseInt(h.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=a.getTransitionDurationFromElement(l);e(l).one(a.TRANSITION_END,(function(){e(h).removeClass(i+" "+o).addClass("active"),e(l).removeClass("active "+o+" "+i),r._isSliding=!1,setTimeout((function(){return e(r._element).trigger(f)}),0)})).emulateTransitionEnd(m)}else e(l).removeClass("active"),e(h).addClass("active"),this._isSliding=!1,e(this._element).trigger(f);d&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=s({},p,e(this).data());"object"==typeof n&&(o=s({},o,n));var r="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=a.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var r=s({},e(o).data(),e(this).data()),l=this.getAttribute("data-slide-to");l&&(r.interval=!1),t._jQueryInterface.call(e(o),r),l&&e(o).data("bs.carousel").to(l),n.preventDefault()}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return p}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",b._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);b._jQueryInterface.call(o,o.data())}})),e.fn[f]=b._jQueryInterface,e.fn[f].Constructor=b,e.fn[f].noConflict=function(){return e.fn[f]=m,b._jQueryInterface};var y="collapse",E=e.fn[y],w={toggle:!0,parent:""},T={toggle:"boolean",parent:"(string|element)"},C=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var s=n[i],r=a.getSelectorFromElement(s),l=[].slice.call(document.querySelectorAll(r)).filter((function(e){return e===t}));null!==r&&l.length>0&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var s=e.Event("show.bs.collapse");if(e(this._element).trigger(s),!s.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var r=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[r]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(r[0].toUpperCase()+r.slice(1)),c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[r]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(c),this._element.style[r]=this._element[l]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",a.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s<o;s++){var r=this._triggerArray[s],l=a.getSelectorFromElement(r);if(null!==l)e([].slice.call(document.querySelectorAll(l))).hasClass("show")||e(r).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(c)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=s({},w,t)).toggle=Boolean(t.toggle),a.typeCheckConfig(y,t,T),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;a.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',s=[].slice.call(n.querySelectorAll(o));return e(s).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=a.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),r=s({},w,i.data(),"object"==typeof n&&n?n:{});if(!o&&r.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(r.toggle=!1),o||(o=new t(this,r),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return w}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=a.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();C._jQueryInterface.call(t,i)}))})),e.fn[y]=C._jQueryInterface,e.fn[y].Constructor=C,e.fn[y].noConflict=function(){return e.fn[y]=E,C._jQueryInterface};var S="dropdown",k=e.fn[S],D=new RegExp("38|40|27"),N={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},A={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},I=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var i=t.prototype;return i.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},i.show=function(i){if(void 0===i&&(i=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var o={relatedTarget:this._element},s=e.Event("show.bs.dropdown",o),r=t._getParentFromElement(this._element);if(e(r).trigger(s),!s.isDefaultPrevented()){if(!this._inNavbar&&i){if("undefined"==typeof n)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var l=this._element;"parent"===this._config.reference?l=r:a.isElement(this._config.reference)&&(l=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(l=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new n(l,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",o))}}},i.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},i.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},i.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},i._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},i._getConfig=function(t){return t=s({},this.constructor.Default,e(this._element).data(),t),a.typeCheckConfig(S,t,this.constructor.DefaultType),t},i._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},i._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},i._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},i._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},i._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),s({},t,this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,s=i.length;o<s;o++){var r=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(r).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(r,n.target))){var h=e.Event("hide.bs.dropdown",l);e(r).trigger(h),h.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(r).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=a.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!D.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var s=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==s.length){var r=s.indexOf(n.target);38===n.which&&r>0&&r--,40===n.which&&r<s.length-1&&r++,r<0&&(r=0),s[r].focus()}}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return N}},{key:"DefaultType",get:function(){return A}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',I._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",I._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",I._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),I._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[S]=I._jQueryInterface,e.fn[S].Constructor=I,e.fn[S].noConflict=function(){return e.fn[S]=k,I._jQueryInterface};var O=e.fn.modal,j={backdrop:!0,keyboard:!0,focus:!0,show:!0},x={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},P=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var s=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(s)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=s({},j,t),a.typeCheckConfig("modal",t,x),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;var i=this._element.scrollHeight>document.documentElement.clientHeight;i||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var o=a.getTransitionDurationFromElement(this._dialog);e(this._element).off(a.TRANSITION_END),e(this._element).one(a.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),i||e(t._element).one(a.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&a.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var s=e.Event("shown.bs.modal",{relatedTarget:t}),r=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(s)};if(i){var l=a.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(a.TRANSITION_END,r).emulateTransitionEnd(l)}else r()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&a.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var s=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var r=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,s=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(s)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,s=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(s)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,s=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(s)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),r=s({},j,e(this).data(),"object"==typeof n&&n?n:{});if(o||(o=new t(this,r),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else r.show&&o.show(i)}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return j}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=a.getSelectorFromElement(this);o&&(n=document.querySelector(o));var r=e(n).data("bs.modal")?"toggle":s({},e(n).data(),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var l=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||l.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));P._jQueryInterface.call(e(n),r,this)})),e.fn.modal=P._jQueryInterface,e.fn.modal.Constructor=P,e.fn.modal.noConflict=function(){return e.fn.modal=O,P._jQueryInterface};var R=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],L={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},q=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,F=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Q(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),s=[].slice.call(i.body.querySelectorAll("*")),r=function(t,n){var i=s[t],r=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[r]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===R.indexOf(n)||Boolean(t.nodeValue.match(q)||t.nodeValue.match(F));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,s=i.length;o<s;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=s.length;a<l;a++)r(a);return i.body.innerHTML}var B="tooltip",H=e.fn[B],U=new RegExp("(^|\\s)bs-tooltip\\S+","g"),M=["sanitize","whiteList","sanitizeFn"],W={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},V={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},z={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:L,popperConfig:null},K={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},X=function(){function t(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var i=t.prototype;return i.enable=function(){this._isEnabled=!0},i.disable=function(){this._isEnabled=!1},i.toggleEnabled=function(){this._isEnabled=!this._isEnabled},i.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},i.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},i.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var o=a.findShadowRoot(this.element),s=e.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),l=a.getUID(this.constructor.NAME);r.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&e(r).addClass("fade");var c="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(c);this.addAttachmentClass(h);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,this._getPopperConfig(h)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=a.getTransitionDurationFromElement(this.tip);e(this.tip).one(a.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},i.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),s=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var r=a.getTransitionDurationFromElement(i);e(i).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s();this._hoverState=""}},i.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},i.isWithContent=function(){return Boolean(this.getTitle())},i.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},i.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},i.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},i.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Q(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},i.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},i._getPopperConfig=function(t){var e=this;return s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},i._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},i._getContainer=function(){return!1===this.config.container?document.body:a.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},i._getAttachment=function(t){return V[t.toUpperCase()]},i._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},i._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},i._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},i._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},i._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},i._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==M.indexOf(t)&&delete n[t]})),"number"==typeof(t=s({},this.constructor.Default,n,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a.typeCheckConfig(B,t,this.constructor.DefaultType),t.sanitize&&(t.template=Q(t.template,t.whiteList,t.sanitizeFn)),t},i._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},i._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(U);null!==n&&n.length&&t.removeClass(n.join(""))},i._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},i._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return z}},{key:"NAME",get:function(){return B}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return K}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return W}}]),t}();e.fn[B]=X._jQueryInterface,e.fn[B].Constructor=X,e.fn[B].noConflict=function(){return e.fn[B]=H,X._jQueryInterface};var Y="popover",$=e.fn[Y],J=new RegExp("(^|\\s)bs-popover\\S+","g"),G=s({},X.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),Z=s({},X.DefaultType,{content:"(string|element|function)"}),tt={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},et=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,n.__proto__=i;var r=s.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},r.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(J);null!==n&&n.length>0&&t.removeClass(n.join(""))},s._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new s(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},o(s,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return G}},{key:"NAME",get:function(){return Y}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return tt}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return Z}}]),s}(X);e.fn[Y]=et._jQueryInterface,e.fn[Y].Constructor=et,e.fn[Y].noConflict=function(){return e.fn[Y]=$,et._jQueryInterface};var nt="scrollspy",it=e.fn[nt],ot={offset:10,method:"auto",target:""},st={offset:"number",method:"string",target:"(string|element)"},rt=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,s=a.getSelectorFromElement(t);if(s&&(n=document.querySelector(s)),n){var r=n.getBoundingClientRect();if(r.width||r.height)return[e(n)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=s({},ot,"object"==typeof t&&t?t:{})).target&&a.isElement(t.target)){var n=e(t.target).attr("id");n||(n=a.getUID(nt),e(t.target).attr("id",n)),t.target="#"+n}return a.typeCheckConfig(nt,t,st),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return ot}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);rt._jQueryInterface.call(i,i.data())}})),e.fn[nt]=rt._jQueryInterface,e.fn[nt].Constructor=rt,e.fn[nt].noConflict=function(){return e.fn[nt]=it,rt._jQueryInterface};var at=e.fn.tab,lt=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],s=a.getSelectorFromElement(this._element);if(o){var r="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(r)))[i.length-1]}var l=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(l),e(this._element).trigger(c),!c.isDefaultPrevented()&&!l.isDefaultPrevented()){s&&(n=document.querySelector(s)),this._activate(this._element,o);var h=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,s=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],r=i&&s&&e(s).hasClass("fade"),l=function(){return o._transitionComplete(t,s,i)};if(s&&r){var c=a.getTransitionDurationFromElement(s);e(s).removeClass("show").one(a.TRANSITION_END,l).emulateTransitionEnd(c)}else l()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),a.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var s=e(t).closest(".dropdown")[0];if(s){var r=[].slice.call(s.querySelectorAll(".dropdown-toggle"));e(r).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),lt._jQueryInterface.call(e(this),"show")})),e.fn.tab=lt._jQueryInterface,e.fn.tab.Constructor=lt,e.fn.tab.noConflict=function(){return e.fn.tab=at,lt._jQueryInterface};var ct=e.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},ut={animation:!0,autohide:!0,delay:500},dt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),a.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s({},ut,e(this._element).data(),"object"==typeof t&&t?t:{}),a.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},n._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return ut}}]),t}();e.fn.toast=dt._jQueryInterface,e.fn.toast.Constructor=dt,e.fn.toast.noConflict=function(){return e.fn.toast=ct,dt._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=b,t.Collapse=C,t.Dropdown=I,t.Modal=P,t.Popover=et,t.Scrollspy=rt,t.Tab=lt,t.Toast=dt,t.Tooltip=X,t.Util=a,Object.defineProperty(t,"__esModule",{value:!0})})); |
| | | //# sourceMappingURL=bootstrap.min.js.map |
| New file |
| | |
| | | /*
|
| | |
|
| | | Custom script
|
| | |
|
| | | This file will not be overwritten by the updater
|
| | |
|
| | | */ |
| New file |
| | |
| | | /*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ |
| | | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w}); |
| New file |
| | |
| | | /*! jQuery v3.6.2 | (c) OpenJS Foundation and other contributors | jquery.org/license */ |
| | | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},S=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||S).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.2",E=function(e,t){return new E.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:f,constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(n){return this.pushStack(E.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(E.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||E.isPlainObject(n)?n:{},i=!1,a[t]=E.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},E.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?E.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,S,y,s,c,v,E="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector("+c+")"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==r?r:d.attributes||!S?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=y)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[E]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[E]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[E]||(e[E]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,y,v,e){return y&&!y[E]&&(y=Ce(y)),v&&!v[E]&&(v=Ce(v,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(null,t,p,r):H.apply(t,p)})}function Se(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Se(e.slice(s,n)),n<r&&Se(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,y,v,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Se(t[n]))[E]?i.push(a):o.push(a);(a=A(e,(y=o,m=0<(v=i).length,x=0<y.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!S);while(s=y[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=v[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ve(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!S,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=E.split("").sort(j).join("")===E,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=E.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1<i.call(n,e)!==r}):E.filter(n,e,r)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,i[t],n);return 1<r?E.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?E(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&E(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(E(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(r,i){E.fn[r]=function(e,t){var n=E.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=E.filter(t,n)),1<this.length&&(H[r]||E.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},E.each(e.match(P)||[],function(e,t){n[t]=!0}),n):E.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){E.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return E.each(arguments,function(e,t){var n;while(-1<(n=E.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},E.extend({Deferred:function(e){var o=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return E.Deferred(function(r){E.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),C.setTimeout(t))}}return E.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?E.extend(e,a):a}},s={};return E.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=E.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){C.setTimeout(function(){throw e})};var F=E.Deferred();function $(){S.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),E.ready()}E.fn.ready=function(e){return F.then(e)["catch"](function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||F.resolveWith(S,[E])}}),E.ready.then=F.then,"complete"===S.readyState||"loading"!==S.readyState&&!S.documentElement.doScroll?C.setTimeout(E.ready):(S.addEventListener("DOMContentLoaded",$),C.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=E.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||E.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}E.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),E.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):B(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:E.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===n?this:this.each(function(){var e=E.queue(this,t,n);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=E.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=S.documentElement,ie=function(e){return E.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===E.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,"")},u=s(),l=n&&n[3]||(E.cssNumber[t]?"":"px"),c=e.nodeType&&(E.cssNumber[t]||"px"!==l&&+u)&&te.exec(E.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)E.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,E.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=E.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}E.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?E(this).show():E(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,v.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))E.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+E.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;E.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<E.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return S.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Se(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Ee(e,i,o){o?(Y.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&E.event.add(e,i,we)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(re,i),n.guid||(n.guid=E.guid++),(u=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},c=E.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),E.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=E.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||E.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[l],n,r,!0);E.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=E.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=E.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=E.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((E.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<E(i,this).index(l):E.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(t,e){E.event.special[t]={setup:function(){return Ee(this,t,Ce),!1},trigger:function(){return Ee(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){E.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||E.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),E.fn.extend({on:function(e,t,n,r){return Se(this,e,t,n,r)},one:function(e,t,n,r){return Se(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){E.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)E.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=E.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=E.map(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=E.clone(u,!0,!0),s&&E.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,E.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&E.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?E._evalUrl&&!u.noModule&&E._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?E.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||E.cleanData(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(e,"script")),c},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;E.inArray(this,n)<0&&(E.cleanData(ye(this)),t&&t.replaceChild(e,this))},n)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){E.fn[e]=function(e){for(var t,n=[],r=E(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),E(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace($e,"$1")||void 0),""!==a||ie(e)||(a=E.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=S.createElement("div"),l=S.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===l.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=S.createElement("table"),t=S.createElement("tr"),n=S.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=S.createElement("div").style,Xe={};function Ve(e){var t=E.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=E.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=E.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=E.css(e,"border"+ne[a]+"Width",!0,i))):(u+=E.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=E.css(e,"border"+ne[a]+"Width",!0,i):s+=E.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Me(e),i=(!v.boxSizingReliable()||n)&&"border-box"===E.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===E.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===E.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Re.test(t),l=e.style;if(u||(t=Ve(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Re.test(t)||(t=Ve(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,u){E.cssHooks[u]={get:function(e,t,n){if(t)return!Ge.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===E.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=E.css(e,u)),Je(0,t,s)}}}),E.cssHooks.marginLeft=_e(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(i,o){E.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(E.cssHooks[i+o].set=Je)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a<i;a++)o[t[a]]=E.css(e,t[a],!1,r);return o}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=et.prototype.init,E.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===S.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,E.fx.interval),E.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=E.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=E.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(E._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return E.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),E.fx.timer(E.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}E.Animation=E.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=Y.get(e,"fxshow");for(r in n.queue||(null==(a=E._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,E.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=Y.get(e,"display")),"none"===(c=E.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=E.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===E.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)E.style(e,r,d[r])})),u=ct(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&"object"==typeof e?E.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return E.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=E.isEmptyObject(t),o=E.speed(e,n,r),a=function(){var e=ft(this,E.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=E.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||E.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=E.timers,o=n?n.length:0;for(t.finish=!0,E.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,r){var i=E.fn[r];E.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),E.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){E.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),tt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){nt||(nt=!0,st())},E.fx.stop=function(){nt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(r,e){return r=E.fx&&E.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=S.createElement("input"),it=S.createElement("select").appendChild(S.createElement("option")),rt.type="checkbox",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=S.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||E.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function yt(e){return(e.match(P)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){E(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=E(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;E.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,E(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(r=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:yt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=E(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=E.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<E.inArray(E.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||S],d=y.call(e,"type")?e.type:e,h=y.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||S,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+E.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[E.expando]?e:new E.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:E.makeArray(t,[e]),c=E.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||S)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),E.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),E.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){E.event.simulate(r,e.target,E.event.fix(e))};E.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},St=/\?/;E.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||E.error("Invalid XML: "+(n?E.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Et=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))E.each(e,function(e,t){r||Et.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(n+"["+t+"]",e[t],r,i)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Dt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=S.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function $t(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,E.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Bt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Wt.href=Tt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,E.ajaxSettings),t):Bt(E.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,y=E.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?E(v):E.event,x=E.Deferred(),b=E.Callbacks("once memory"),w=y.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(y.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=S.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=E.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=E.event&&y.global)&&0==E.active++&&E.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(St.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(St.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(E.lastModified[f]&&T.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&T.setRequestHeader("If-None-Match",E.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(y,T,n)),!i&&-1<E.inArray("script",y.dataTypes)&&E.inArray("json",y.dataTypes)<0&&(y.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(E.etag[f]=u)),204===e||"HEAD"===y.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--E.active||E.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,i){E[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),E.ajax(E.extend({url:e,type:i,dataType:r,data:t,success:n},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,n){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,n)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){E(this).wrapInner(n.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){E(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=E.ajaxSettings.xhr();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,E.ajaxTransport(function(i){var o,a;if(v.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=E("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=yt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&E.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?E("<div>").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,i},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=A,E.isFunction=m,E.isWindow=x,E.camelCase=X,E.type=w,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return E});var Yt=C.jQuery,Qt=C.$;return E.noConflict=function(e){return C.$===E&&(C.$=Qt),e&&C.jQuery===E&&(C.jQuery=Yt),E},"undefined"==typeof e&&(C.jQuery=C.$=E),E}); |
| New file |
| | |
| | | /*! lazysizes - v5.3.0 */ |
| | | |
| | | !function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a<H.minSize&&t&&!e._lazysizesWidth){a=t.offsetWidth;t=t.parentNode}return a},ee=function(){var a,i;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;a=true;i=false;while(e.length){e.shift()()}a=false};var e=function(e,t){if(a&&!t){e.apply(this,arguments)}else{n.push(e);if(!i){i=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(a,e){return e?function(){ee(a)}:function(){var e=this;var t=arguments;ee(function(){a.apply(e,t)})}},ae=function(e){var a;var i=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){a=false;i=f.now();e()};var s=o&&n>49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e<i){I(n,i-e)}else{(o||r)(r)}};return function(){a=f.now();if(!t){t=I(n,i)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var M=0;var N=-1;var L=function(e){M--;if(!e||M<0||!e.target){M=0}};var x=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var W=function(e,t){var a;var i=e;var r=x(e);g-=t;b+=t;p-=t;C+=t;while(r&&(i=i.offsetParent)&&i!=D.body&&i!=O){r=(Z(i,"opacity")||1)>0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&p<a.right&&b>a.top-1&&g<a.bottom+1}}return r};var t=function(){var e,t,a,i,r,n,s,o,l,u,f,c;var d=k.elements;if((h=H.loadMode)&&M<8&&(e=d.length)){t=0;N++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(o=d[t][$]("data-expand"))||!(n=o*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&M<1&&N>2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",i)}}if(!a.detail.dataAttr){Y(e,a.detail)}});var i=function(e,t,a){var i;var r=e.parentNode;if(r){a=s(e,r,a);i=X(e,"lazybeforesizes",{width:a,dataAttr:!!t});if(!i.defaultPrevented){a=i.detail.width;if(a&&a!==e._lazysizesWidth){n(e,r,i,a)}}}};var e=function(){var e;var t=a.length;if(t){e=0;for(;e<t;e++){i(a[e])}}};var t=ie(e);return{_:function(){a=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:i}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{}); |
| New file |
| | |
| | | "use strict";
|
| | | if ($('#tpl-comment-section').length) {
|
| | | const gameId = $('#tpl-comment-section').attr('data-id');
|
| | | const commentSystem = new CommentSystem(gameId);
|
| | | }
|
| | | $(function() {
|
| | | const formSearch = document.querySelector("form.search-bar");
|
| | | if (formSearch) {
|
| | | formSearch.addEventListener("submit", function(event) {
|
| | | event.preventDefault();
|
| | | const input = formSearch.querySelector("input[name='slug']");
|
| | | const sanitizedValue = input.value.replace(/ /g, "-");
|
| | | input.value = sanitizedValue;
|
| | | if (input.value.length >= 2) {
|
| | | formSearch.submit();
|
| | | }
|
| | | });
|
| | | }
|
| | | // Load more games
|
| | | let last_offset = 0;
|
| | | let load_amount = 0;
|
| | | const newGamesContainer = $('#section-new-games');
|
| | |
|
| | | if (newGamesContainer.length) {
|
| | | load_amount = 28;
|
| | | last_offset = newGamesContainer.children().length;
|
| | | if (load_amount < 28) {
|
| | | $('.btn-load-more-games').remove();
|
| | | } else {
|
| | | $('.btn-load-more-games').click(() => {
|
| | | fetchMoreGames(load_amount, 'new');
|
| | | });
|
| | | }
|
| | | }
|
| | |
|
| | | async function fetchMoreGames(amount, sort_by) {
|
| | | try {
|
| | | const response = await $.ajax({
|
| | | url: "/includes/fetch.php",
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {amount: amount, offset: last_offset, sort_by: sort_by},
|
| | | });
|
| | | appendFetchedGames(response);
|
| | | } catch (error) {
|
| | | console.log(error);
|
| | | }
|
| | | }
|
| | |
|
| | | function appendFetchedGames(data) {
|
| | | last_offset += data.length;
|
| | | const templateHTML = $('.item-append-template').html(); // Get the inner HTML of the template
|
| | | data.forEach((item) => {
|
| | | let rating = 0;
|
| | | item['upvote'] = Number(item['upvote']);
|
| | | item['downvote'] = Number(item['downvote']);
|
| | | let totalRevs = item['upvote']+item['downvote'];
|
| | | if(totalRevs > 0){
|
| | | rating = (Math.round((item['upvote']/(item['upvote']+item['downvote'])) * 5));
|
| | | }
|
| | | // Clone the HTML template
|
| | | let clonedHTML = templateHTML;
|
| | | // Replace placeholders
|
| | | console.log(item['title'])
|
| | | clonedHTML = clonedHTML.replace(/{{slug}}/g, item['slug']);
|
| | | clonedHTML = clonedHTML.replace(/{{thumbnail}}/g, item['thumb_2']);
|
| | | clonedHTML = clonedHTML.replace(/{{title}}/g, item['title']);
|
| | | clonedHTML = clonedHTML.replace(/{{rating}}/g, rating);
|
| | | // Convert the HTML string to a jQuery object
|
| | | const clonedElement = $(clonedHTML);
|
| | | // Further modifications if necessary, for example, replacing the rating image src
|
| | | // Append the new element to newGamesContainer
|
| | | newGamesContainer.append(clonedElement);
|
| | | });
|
| | | if (data.length < load_amount) {
|
| | | $('.btn-load-more-games').remove();
|
| | | }
|
| | | }
|
| | | // End
|
| | | var $nav = $('nav.greedy');
|
| | | var $btn = $('nav.greedy button');
|
| | | var $vlinks = $('nav.greedy .links');
|
| | | var $hlinks = $('nav.greedy .hidden-links');
|
| | |
|
| | | var numOfItems = 0;
|
| | | var totalSpace = 0;
|
| | | var breakWidths = [];
|
| | |
|
| | | // Get initial state
|
| | | $vlinks.children().outerWidth(function(i, w) {
|
| | | totalSpace += w;
|
| | | numOfItems += 1;
|
| | | breakWidths.push(totalSpace);
|
| | | });
|
| | |
|
| | | var availableSpace, numOfVisibleItems, requiredSpace;
|
| | |
|
| | | function check() {
|
| | |
|
| | | // Get instant state
|
| | | availableSpace = $vlinks.width() - 10;
|
| | | numOfVisibleItems = $vlinks.children().length;
|
| | | requiredSpace = breakWidths[numOfVisibleItems - 1];
|
| | |
|
| | | // There is not enought space
|
| | | if (requiredSpace > availableSpace) {
|
| | | $vlinks.children().last().prependTo($hlinks);
|
| | | numOfVisibleItems -= 1;
|
| | | check();
|
| | | // There is more than enough space
|
| | | } else if (availableSpace > breakWidths[numOfVisibleItems]) {
|
| | | $hlinks.children().first().appendTo($vlinks);
|
| | | numOfVisibleItems += 1;
|
| | | }
|
| | | // Update the button accordingly
|
| | | $btn.attr("count", numOfItems - numOfVisibleItems);
|
| | | if (numOfVisibleItems === numOfItems) {
|
| | | $btn.addClass('hidden');
|
| | | } else $btn.removeClass('hidden');
|
| | | }
|
| | |
|
| | | // Window listeners
|
| | | $(window).resize(function() {
|
| | | check();
|
| | | });
|
| | |
|
| | | $btn.on('click', function() {
|
| | | $hlinks.toggleClass('hidden');
|
| | | });
|
| | |
|
| | | check();
|
| | |
|
| | | });
|
| | | function open_fullscreen() {
|
| | | let game = document.getElementById("game-area");
|
| | | if (game.requestFullscreen) {
|
| | | game.requestFullscreen();
|
| | | } else if (game.mozRequestFullScreen) { /* Firefox */
|
| | | game.mozRequestFullScreen();
|
| | | } else if (game.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
|
| | | game.webkitRequestFullscreen();
|
| | | } else if (game.msRequestFullscreen) { /* IE/Edge */
|
| | | game.msRequestFullscreen();
|
| | | }
|
| | | };
|
| | | var can_resize = false;
|
| | | if($('iframe#game-area').length){
|
| | | can_resize = true;
|
| | | resize_game_iframe();
|
| | | load_leaderboard({type: 'top', amount: 10});
|
| | | }
|
| | | function resize_game_iframe(){
|
| | | if(can_resize){
|
| | | let iframe = $("iframe.game-iframe");
|
| | | let size = {
|
| | | width: Number(iframe.attr('width')),
|
| | | height: Number(iframe.attr('height')),
|
| | | }
|
| | | let ratio = (size.height/size.width)*100;
|
| | | let win_ratio = (window.innerHeight/window.innerWidth)*100;
|
| | | if(win_ratio <= 110){
|
| | | if(ratio > 80){
|
| | | ratio = 80;
|
| | | }
|
| | | } else if(win_ratio >= 130){
|
| | | if(ratio < 100){
|
| | | ratio = 100;
|
| | | }
|
| | | }
|
| | | $('.game-iframe-container').css('padding-top', ratio+'%');
|
| | | }
|
| | | }
|
| | |
|
| | | function load_leaderboard(conf){
|
| | | if($('#content-leaderboard').length){
|
| | | let g_id = $('#content-leaderboard').data('id');
|
| | | $.ajax({
|
| | | url: '/includes/api.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'action': 'get_scoreboard', 'game-id': g_id, 'conf': JSON.stringify(conf)},
|
| | | complete: function (data) {
|
| | | if(data.responseText){
|
| | | show_leaderboard(JSON.parse(data.responseText));
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | | function show_leaderboard(data){
|
| | | let html = '<table class="table table-dark"><thead class="thead-dark"><tr><th scope="col">#</th><th scope="col">Username</th><th scope="col">Score</th><th scope="col">Date</th></tr></thead><tbody>';
|
| | | let index = 1;
|
| | | data.forEach((item)=>{
|
| | | html += '<tr><th scope="row">'+index+'</th><td>'+item.username+'</td><td>'+item.score+'</td><td>'+item.created_date.substr(0, 10)+'</td></tr>';
|
| | | index++;
|
| | | });
|
| | | html += '</tbody></table>';
|
| | | $('#content-leaderboard').html(html);
|
| | | }
|
| | | (function(){
|
| | | $("#navb").on('show.bs.collapse', function(){
|
| | | $('.user-avatar').hide();
|
| | | });
|
| | | $("#navb").on('hidden.bs.collapse', function(){
|
| | | $('.user-avatar').show();
|
| | | });
|
| | | resize_game_iframe();
|
| | | $(window).resize(function() {
|
| | | resize_game_iframe();
|
| | | });
|
| | | $('.stats-vote #favorite').on('click', function() {
|
| | | let data_id = $(this).attr('data-id');
|
| | | let btn = $(this);
|
| | | $.ajax({
|
| | | url: '/includes/vote.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'favorite': true, 'action': 'favorite', 'id': data_id},
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | btn.addClass('active');
|
| | | btn.addClass('disabled');
|
| | | }
|
| | | });
|
| | | });
|
| | | $('.stats-vote #upvote').on('click', function() {
|
| | | let data_id = $(this).attr('data-id');
|
| | | $.ajax({
|
| | | url: '/includes/vote.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'vote': true, 'action': 'upvote', 'id': data_id},
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | $('.icon-vote').hide();
|
| | | let elem = $('.vote-status');
|
| | | elem.addClass('text-success');
|
| | | elem.append('Liked!');
|
| | | }
|
| | | });
|
| | | });
|
| | | $('.stats-vote #downvote').on('click', function() {
|
| | | let data_id = $(this).attr('data-id');
|
| | | $.ajax({
|
| | | url: '/includes/vote.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'vote': true, 'action': 'downvote', 'id': data_id},
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | $('.icon-vote').hide();
|
| | | let elem = $('.vote-status');
|
| | | elem.addClass('text-danger');
|
| | | elem.append('Disliked!');
|
| | | }
|
| | | });
|
| | | });
|
| | | $('.user-avatar').on('click', ()=>{
|
| | | let element = $('.user-links');
|
| | | if (element.is(":hidden")) {
|
| | | element.removeClass('hidden');
|
| | | } else element.addClass('hidden');
|
| | | });
|
| | | $('#btn_prev').on('click', function() {
|
| | | $('.profile-gamelist ul').animate({
|
| | | scrollLeft: '-=150'
|
| | | }, 300, 'swing');
|
| | | });
|
| | | |
| | | $('#btn_next').on('click', function() {
|
| | | $('.profile-gamelist ul').animate({
|
| | | scrollLeft: '+=150'
|
| | | }, 300, 'swing');
|
| | | });
|
| | | $('#f_prev').on('click', function() {
|
| | | $('.favorite-gamelist ul').animate({
|
| | | scrollLeft: '-=150'
|
| | | }, 300, 'swing');
|
| | | });
|
| | | |
| | | $('#f_next').on('click', function() {
|
| | | $('.favorite-gamelist ul').animate({
|
| | | scrollLeft: '+=150'
|
| | | }, 300, 'swing');
|
| | | });
|
| | | $('.delete-comment').on('click', function() {
|
| | | let id = $(this).attr('data-id');
|
| | | $.ajax({
|
| | | url: '/includes/comment.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'delete': true, 'id': id},
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | if(data.responseText === 'deleted'){
|
| | | $('.id-'+id).remove();
|
| | | }
|
| | | }
|
| | | }, this);
|
| | | });
|
| | | })(); |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <div class="row">
|
| | | <div class="col-md-9">
|
| | | <h1 class="singlepage-title"><?php echo htmlspecialchars( $page->title )?></h1>
|
| | | <div class="page-content">
|
| | | <?php echo nl2br($page->content) ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-3">
|
| | | <?php include TEMPLATE_PATH . "/parts/sidebar.php" ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <nav class='greedy'>
|
| | | <?php list_categories() ?>
|
| | | <button><?php _e('MORE') ?></button>
|
| | | <ul class='hidden-links hidden'></ul>
|
| | | </nav> |
| New file |
| | |
| | | <div class="navbar-collapse collapse justify-content-end" id="navb">
|
| | | <ul class="navbar-nav ml-auto text-uppercase">
|
| | | <?php render_nav_menu('top_nav', array(
|
| | | 'no_ul' => true,
|
| | | 'li_class' => 'nav-item',
|
| | | 'a_class' => 'nav-link',
|
| | | )); ?>
|
| | | <li class="nav-item">
|
| | | <?php
|
| | | if(is_null($login_user)){
|
| | | if(get_setting_value('show_login')){
|
| | | echo('<a class="nav-link" href="'.get_permalink('login').'">'._t('Login').'</a>');
|
| | | }
|
| | | }
|
| | | ?>
|
| | | </li>
|
| | | </ul>
|
| | | <form class="form-inline my-2 my-lg-0 search-bar" action="/index.php">
|
| | | <div class="input-group">
|
| | | <input type="hidden" name="viewpage" value="search" />
|
| | | <input type="text" class="form-control rounded-left search" placeholder="<?php _e('Search game') ?>" name="slug" minlength="2" required />
|
| | | <div class="input-group-append">
|
| | | <button type="submit" class="btn btn-search" type="button">
|
| | | <i class="fa fa-search"></i>
|
| | | </button>
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | | </div> |
| New file |
| | |
| | | <div class="sidebar">
|
| | | <?php widget_aside('sidebar-1') ?>
|
| | | </div> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="post-container">
|
| | | <div class="content-wrapper">
|
| | | <h3 class="page-title"><?php _e('LATEST POSTS') ?></h3>
|
| | | <section class="blog-list">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($url_params[1])){
|
| | | $_GET['page'] = $url_params[1];
|
| | | if(!is_numeric($_GET['page'])){
|
| | | $_GET['page'] = 1;
|
| | | }
|
| | | }
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = htmlspecialchars($_GET['page']);
|
| | | if(!is_numeric($cur_page)){
|
| | | $cur_page = 1;
|
| | | }
|
| | | }
|
| | | $items_per_page = get_setting_value('post_results_per_page');
|
| | | $data = Post::getList($items_per_page, 'created_date DESC', $items_per_page*($cur_page-1));
|
| | | $total_posts = $data['totalRows'];
|
| | | $total_page = $data['totalPages'];
|
| | | $posts = $data['results'];
|
| | | foreach($posts as $post){
|
| | | ?>
|
| | | <div class="post-item">
|
| | | <div class="post-media">
|
| | | <div class="post-thumb">
|
| | | <img src="<?php echo ($post->thumbnail_url) ? $post->thumbnail_url : DOMAIN . 'images/post-no-thumb.png' ?>" alt="<?php echo $post->title ?>">
|
| | | </div>
|
| | | <div class="post-body">
|
| | | <h3 class="post-title">
|
| | | <a href="<?php echo get_permalink('post', $post->slug) ?>"><?php echo $post->title ?></a>
|
| | | </h3>
|
| | | <div class="post-meta">
|
| | | <span class="date">Published on <?php echo gmdate("j M Y", $post->created_date) ?></span>
|
| | | </div>
|
| | | <div class="post-intro">
|
| | | <?php echo mb_strimwidth(strip_tags($post->content), 0, 250, "...") ?>
|
| | | </div>
|
| | | <a class="more-link" href="<?php echo get_permalink('post', $post->slug) ?>">Read more →</a>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </section>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation example">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = esc_string($_GET['page']);
|
| | | }
|
| | | render_pagination($total_page, $cur_page, 8, 'post', '');
|
| | | ?>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <div class="row">
|
| | | <div class="col-md-9">
|
| | | <h1 class="singlepage-title"><?php echo htmlspecialchars( $post->title )?></h1>
|
| | | <div class="post-meta">
|
| | | Published on <?php echo gmdate("j M Y", $post->created_date) ?>
|
| | | </div>
|
| | | <div class="page-content">
|
| | | <?php echo nl2br($post->content) ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-3">
|
| | | <?php include TEMPLATE_PATH . "/parts/sidebar.php" ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <div class="content-wrapper">
|
| | | <h3 class="item-title"><?php _e('%a Games', htmlspecialchars($archive_title)) ?></h3>
|
| | | <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
|
| | | <div class="game-container">
|
| | | <div class="grid-layout grid-wrapper">
|
| | | <?php foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation example">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($url_params[2])){
|
| | | $cur_page = (int)$url_params[2];
|
| | | }
|
| | | render_pagination($total_page, $cur_page, 8, 'search', $_GET['slug']);
|
| | | ?>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | /*! |
| | | * Bootstrap v4.5.2 (https://getbootstrap.com/) |
| | | * Copyright 2011-2020 The Bootstrap Authors |
| | | * Copyright 2011-2020 Twitter, Inc. |
| | | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) |
| | | */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} |
| New file |
| | |
| | | /*
|
| | |
|
| | | Custom style
|
| | |
|
| | | You can override the default class or style here
|
| | |
|
| | | This file will not be overwritten by the updater
|
| | |
|
| | | */ |
| New file |
| | |
| | | /*jquery-comments.js 1.5.0
|
| | |
|
| | | (c) 2017 Joona Tykkyläinen, Viima Solutions Oy
|
| | | jquery-comments may be freely distributed under the MIT license.
|
| | | For all details and documentation:
|
| | | http://viima.github.io/jquery-comments/*/
|
| | |
|
| | | .jquery-comments * {
|
| | | box-sizing: border-box;
|
| | | text-shadow: none;
|
| | | }
|
| | |
|
| | | .jquery-comments a[href]:not(.tag) {
|
| | | color: #2793e6;
|
| | | text-decoration: none;
|
| | | }
|
| | |
|
| | | .jquery-comments a[href]:not(.tag):hover {
|
| | | text-decoration: underline;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea, .jquery-comments input, .jquery-comments button {
|
| | | -webkit-appearance: none;
|
| | | -moz-appearance: none;
|
| | | -ms-appearance: none;
|
| | | appearance: none;
|
| | |
|
| | | vertical-align: top;
|
| | | border-radius: 0;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | border: 0;
|
| | | outline: 0;
|
| | | background: rgba(0, 0, 0, 0);
|
| | | }
|
| | |
|
| | | .jquery-comments button {
|
| | | vertical-align: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments .tag {
|
| | | color: inherit;
|
| | | font-size: 0.9em;
|
| | | line-height: 1.2em;
|
| | | background: #ddd;
|
| | | border: 1px solid #ccc;
|
| | | padding: 0.05em 0.4em;
|
| | | cursor: pointer;
|
| | | font-weight: normal;
|
| | | border-radius: 1em;
|
| | | transition: all 0.2s linear;
|
| | | white-space: nowrap;
|
| | | display: inline-block;
|
| | | text-decoration: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .attachments .tag {
|
| | | white-space: normal;
|
| | | word-break: break-all;
|
| | |
|
| | | padding: 0.05em 0.5em;
|
| | | line-height: 1.3em;
|
| | |
|
| | | margin-top: 0.3em;
|
| | | margin-right: 0.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments .attachments .tag > i:first-child {
|
| | | margin-right: 0.4em;
|
| | | }
|
| | |
|
| | | .jquery-comments .attachments .tag .delete {
|
| | | display: inline;
|
| | | font-size: 14px;
|
| | | color: #888;
|
| | | |
| | | position: relative;
|
| | | padding: 2px;
|
| | | padding-right: 4px;
|
| | | right: -4px;
|
| | | }
|
| | |
|
| | | .jquery-comments .attachments .tag:hover .delete {
|
| | | color: black;
|
| | | }
|
| | |
|
| | | .jquery-comments .tag:hover {
|
| | | text-decoration: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .tag:not(.deletable):hover {
|
| | | background-color: #d8edf8;
|
| | | border-color: #2793e6;
|
| | | }
|
| | |
|
| | | .jquery-comments [contentEditable=true]:empty:not(:focus):before{
|
| | | content:attr(data-placeholder);
|
| | | color: #CCC;
|
| | | position: inherit;
|
| | | pointer-events: none;
|
| | | }
|
| | |
|
| | | .jquery-comments i.fa {
|
| | | width: 1em;
|
| | | height: 1em;
|
| | | background-size: cover;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .jquery-comments i.fa.image:before {
|
| | | content: "";
|
| | | }
|
| | |
|
| | | .jquery-comments .spinner {
|
| | | font-size: 2em;
|
| | | text-align: center;
|
| | | padding: 0.5em;
|
| | | margin: 0;
|
| | | color: #666;
|
| | | }
|
| | |
|
| | | .jquery-comments .spinner.inline {
|
| | | font-size: inherit;
|
| | | padding: 0;
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | .jquery-comments ul {
|
| | | list-style: none;
|
| | | padding: 0;
|
| | | margin: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments .profile-picture {
|
| | | float: left;
|
| | | width: 3.6rem;
|
| | | height: 3.6rem;
|
| | | max-width: 50px;
|
| | | max-height: 50px;
|
| | | background-size: cover;
|
| | | background-repeat: no-repeat;
|
| | | background-position: center center;
|
| | | }
|
| | |
|
| | | .jquery-comments i.profile-picture {
|
| | | font-size: 3.4em;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .jquery-comments .profile-picture.round {
|
| | | border-radius: 50%;
|
| | | }
|
| | |
|
| | | .jquery-comments .commenting-field.main{
|
| | | margin-bottom: 0.75em;
|
| | | }
|
| | |
|
| | | .jquery-comments .commenting-field.main .profile-picture {
|
| | | margin-bottom: 1rem;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper {
|
| | | overflow: hidden;
|
| | | padding-left: 15px;
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper:before {
|
| | | content: " ";
|
| | | position: absolute;
|
| | | border: 5px solid #6F69A4;;
|
| | | left: 5px;
|
| | | top: 0;
|
| | | width: 10px;
|
| | | height: 10px;
|
| | | box-sizing: border-box;
|
| | | border-bottom-color: rgba(0, 0, 0, 0);
|
| | | border-left-color: rgba(0, 0, 0, 0);
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .inline-button {
|
| | | cursor: pointer;
|
| | | right: 0;
|
| | | z-index: 10;
|
| | | position: absolute;
|
| | | border: .5em solid rgba(0,0,0,0);
|
| | | box-sizing: content-box;
|
| | | font-size: inherit;
|
| | | overflow: hidden;
|
| | | opacity: 0.5;
|
| | |
|
| | | -webkit-user-select: none;
|
| | | -moz-user-select: none;
|
| | | -ms-user-select: none;
|
| | | user-select: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .inline-button:hover {
|
| | | opacity: 1;
|
| | | }
|
| | |
|
| | | .jquery-comments:not(.mobile) .commenting-field-scrollable .textarea-wrapper .inline-button {
|
| | | margin-right: 15px; /* Because of scrollbar */
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .inline-button i {
|
| | | font-size: 1.2em;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .upload input {
|
| | | cursor: pointer;
|
| | | position: absolute;
|
| | | top: 0;
|
| | | right: 0;
|
| | | min-width: 100%;
|
| | | height: 100%;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | opacity: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .close {
|
| | | width: 1em;
|
| | | height: 1em;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .textarea {
|
| | | margin: 0;
|
| | | outline: 0;
|
| | | overflow-y: auto;
|
| | | overflow-x: hidden;
|
| | | cursor: text;
|
| | |
|
| | | border: 1px solid #6F69A4;;
|
| | | background: #332F5B;;
|
| | | font-size: 1em;
|
| | | line-height: 1.45em;
|
| | | padding: .25em .8em;
|
| | | padding-right: 2em;
|
| | | }
|
| | |
|
| | | .jquery-comments:not(.mobile) .commenting-field-scrollable .textarea-wrapper .textarea {
|
| | | padding-right: calc(2em + 15px); /* Because of scrollbar */
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > .attachments {
|
| | | padding-top: .3em;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span {
|
| | | float: right;
|
| | | line-height: 1.6em;
|
| | | margin-top: .4em;
|
| | | border: 1px solid rgba(0, 0, 0, 0);
|
| | | color: #FFF;
|
| | | padding: 0 1em;
|
| | | font-size: 1em;
|
| | | opacity: .5;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span:not(:first-child) {
|
| | | margin-right: .5em;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span.enabled {
|
| | | opacity: 1;
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span:not(.enabled) {
|
| | | pointer-events: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span.enabled:hover {
|
| | | opacity: .9;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span.upload {
|
| | | position: relative;
|
| | | overflow: hidden;
|
| | | background-color: #999;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation {
|
| | | clear: both;
|
| | |
|
| | | color: #999;
|
| | | border-bottom: 2px solid #CCC;
|
| | | line-height: 2em;
|
| | | font-size: 1em;
|
| | | margin-bottom: 0.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper {
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li {
|
| | | display: inline-block;
|
| | | position: relative;
|
| | | padding: 0 1em;
|
| | | cursor: pointer;
|
| | | text-align: center;
|
| | |
|
| | | -webkit-user-select: none;
|
| | | -moz-user-select: none;
|
| | | -ms-user-select: none;
|
| | | user-select: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li.active,
|
| | | .jquery-comments ul.navigation li:hover {
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li.active:after {
|
| | | content: " ";
|
| | | display: block;
|
| | | right: 0;
|
| | | height: 2px;
|
| | | background: #000;
|
| | | position: absolute;
|
| | | bottom: -2px;
|
| | | left: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li[data-sort-key="attachments"] {
|
| | | float: right;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li[data-sort-key="attachments"] i {
|
| | | margin-right: 0.25em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | @media screen and (max-width: 600px) {
|
| | | .jquery-comments ul.navigation .navigation-wrapper {
|
| | | display: none;
|
| | | }
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive {
|
| | | display: inline;
|
| | | }
|
| | | }
|
| | |
|
| | | .jquery-comments.responsive ul.navigation .navigation-wrapper {
|
| | | display: none;
|
| | | }
|
| | | .jquery-comments.responsive ul.navigation .navigation-wrapper.responsive {
|
| | | display: inline;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive li.title {
|
| | | padding: 0 1.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive li.title header:after {
|
| | | display: inline-block;
|
| | | content: "";
|
| | | border-left: 0.3em solid rgba(0, 0, 0, 0) !important;
|
| | | border-right: 0.3em solid rgba(0, 0, 0, 0) !important;
|
| | | border-top: 0.4em solid #CCC;
|
| | | margin-left: 0.5em;
|
| | | position: relative;
|
| | | top: -0.1em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive li.title.active header:after,
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive li.title:hover header:after {
|
| | | border-top-color: #000;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown {
|
| | | display: none;
|
| | | position: absolute;
|
| | | background: #FFF;
|
| | | z-index: 99;
|
| | | line-height: 1.2em;
|
| | |
|
| | | border: 1px solid #CCC;
|
| | | box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
| | | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
| | | -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
| | | -ms-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown.autocomplete {
|
| | | margin-top: 0.25em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li {
|
| | | display: block;
|
| | | white-space: nowrap;
|
| | | clear: both;
|
| | | padding: 0.6em;
|
| | | font-weight: normal;
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li.active {
|
| | | background: #EEE;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li a {
|
| | | display: block;
|
| | | text-decoration: none;
|
| | | color: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .profile-picture {
|
| | | float: left;
|
| | | width: 2.4em;
|
| | | height: 2.4em;
|
| | | margin-right: 0.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .details {
|
| | | display: inline-block;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .name {
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .details.no-email {
|
| | | line-height: 2.4em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .email {
|
| | | color: #999;
|
| | | font-size: 0.95em;
|
| | | margin-top: 0.1em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown {
|
| | | left: 0;
|
| | | width: 100%;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li {
|
| | | color: #000;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li.active {
|
| | | color: #FFF;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li:hover:not(.active) {
|
| | | background: #F5F5F5;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li:after {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .no-data {
|
| | | display: none;
|
| | | margin: 1em;
|
| | | text-align: center;
|
| | | font-size: 1.5em;
|
| | | color: #CCC;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main:empty ~ .no-comments {
|
| | | display: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul#attachment-list:empty ~ .no-attachments {
|
| | | display: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment {
|
| | | clear: both;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-wrapper,
|
| | | .jquery-comments ul.main li.toggle-all,
|
| | | .jquery-comments ul.main li.comment .commenting-field {
|
| | | padding: .5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-wrapper {
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main > li.comment:first-child > .comment-wrapper {
|
| | | border-top: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-wrapper > .profile-picture {
|
| | | margin-right: 1rem;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment time {
|
| | | float: right;
|
| | | line-height: 1.4em;
|
| | | margin-left: .5em;
|
| | | font-size: 0.8em;
|
| | | color: #666;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header {
|
| | | line-height: 1.4em;
|
| | | word-break: break-word;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header > * {
|
| | | margin-right: .5rem;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header .name {
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header .reply-to {
|
| | | color: #999;
|
| | | font-size: .8em;
|
| | | font-weight: normal;
|
| | | vertical-align: top;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header .reply-to i {
|
| | | margin-right: .25rem;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header .new {
|
| | | background: #2793e6;
|
| | | font-size: 0.8em;
|
| | | padding: 0.2em 0.6em;
|
| | | color: #fff;
|
| | | font-weight: normal;
|
| | | border-radius: 1em;
|
| | | vertical-align: bottom;
|
| | | word-break: normal;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper{
|
| | | line-height: 1.4em;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .jquery-comments.mobile ul.main li.comment .child-comments li.comment .wrapper{
|
| | | overflow: visible;
|
| | | }
|
| | |
|
| | | /* Content */
|
| | | .jquery-comments ul.main li.comment .wrapper .content {
|
| | | white-space: pre-line;
|
| | | word-break: break-word;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .content time.edited {
|
| | | float: inherit;
|
| | | margin: 0;
|
| | | font-size: .9em;
|
| | | font-style: italic;
|
| | | color: #999;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .content time.edited:before {
|
| | | content: " - ";
|
| | | }
|
| | |
|
| | | /* Attachments */
|
| | | .jquery-comments ul.main li.comment .wrapper .attachments .tags:not(:empty) {
|
| | | margin-bottom: 0.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .attachments .previews .preview {
|
| | | display: inline-block;
|
| | | margin-top: .25em;
|
| | | margin-right: .25em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .attachments .previews .preview > * {
|
| | | max-width: 100%;
|
| | | max-height: 200px;
|
| | | width: auto;
|
| | | height: auto;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .attachments .previews .preview > *:focus {
|
| | | outline: none;
|
| | | }
|
| | |
|
| | | /* Actions */
|
| | | .jquery-comments.mobile ul.main li.comment .actions {
|
| | | font-size: 1em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions > * {
|
| | | color: #999;
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action {
|
| | | display: inline-block;
|
| | | cursor: pointer;
|
| | | margin-left: 1em;
|
| | | margin-right: 1em;
|
| | | line-height: 1.5em;
|
| | | font-size: 0.9em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action:first-child {
|
| | | margin-left: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote {
|
| | | cursor: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote .upvote-count {
|
| | | margin-right: .5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote .upvote-count:empty {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote i {
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action:not(.upvote):hover,
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote:not(.highlight-font) i:hover {
|
| | | color: #666;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.delete {
|
| | | opacity: 0.5;
|
| | | pointer-events: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.delete.enabled {
|
| | | opacity: 1;
|
| | | pointer-events: auto;
|
| | | }
|
| | |
|
| | | .jquery-comments ul#attachment-list li.comment .actions .action:not(.delete) {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul#attachment-list li.comment .actions .action.delete {
|
| | | margin: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments ul#attachment-list li.comment .actions .separator {
|
| | | display: none;
|
| | | }
|
| | |
|
| | |
|
| | | /* Child comments */
|
| | | .jquery-comments ul.main li.comment .child-comments > *:before { /* Margin for second level content */
|
| | | content: "";
|
| | | height: 1px;
|
| | | float: left;
|
| | |
|
| | | width: calc(3.6em + .5em); /* Profile picture width plus margin */
|
| | | max-width: calc(50px + .5em); /* Profile picture max width plus margin */
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments .profile-picture {
|
| | | width: 2.4rem;
|
| | | height: 2.4rem;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments i.profile-picture {
|
| | | font-size: 2.4em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all {
|
| | | padding-top: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all span:first-child {
|
| | | vertical-align: middle;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all span:first-child:hover {
|
| | | cursor: pointer;
|
| | | text-decoration: underline;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all .caret {
|
| | | display: inline-block;
|
| | | vertical-align: middle;
|
| | | width: 0;
|
| | | height: 0;
|
| | |
|
| | | margin-left: .5em;
|
| | | border: .3em solid;
|
| | | margin-top: .35em;
|
| | |
|
| | | border-left-color: rgba(0, 0, 0, 0);
|
| | | border-bottom-color: rgba(0, 0, 0, 0);
|
| | | border-right-color: rgba(0, 0, 0, 0);
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all .caret.up {
|
| | | border-top-color: rgba(0, 0, 0, 0);
|
| | | border-bottom-color: inherit;
|
| | | margin-top: -.2em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments .togglable-reply {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments .visible {
|
| | | display: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment.hidden {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | /* Editing comment */
|
| | | .jquery-comments ul.main li.comment.edit > .comment-wrapper > *:not(.commenting-field) {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment.edit > .comment-wrapper .commenting-field {
|
| | | padding-left: 0 !important;
|
| | | padding-right: 0 !important;
|
| | | }
|
| | |
|
| | | /* Drag & drop attachments */
|
| | | .jquery-comments.drag-ongoing {
|
| | | overflow-y: hidden !important;
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay {
|
| | | display: table;
|
| | | position: fixed;
|
| | | z-index: 99;
|
| | |
|
| | | top: 0;
|
| | | left: 0;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | background: rgba(0,0,0,0.3)
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay .droppable-container {
|
| | | display: table-cell;
|
| | | vertical-align: middle;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay .droppable-container .droppable {
|
| | | background: #FFF;
|
| | | color: #CCC;
|
| | | padding: 6em;
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay .droppable-container .droppable.drag-over {
|
| | | color: #999;
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay .droppable-container .droppable i {
|
| | | margin-bottom: 5px;
|
| | | }
|
| | |
|
| | | /* Read-only mode */
|
| | | .jquery-comments.read-only .commenting-field {
|
| | | display: none;
|
| | | }
|
| | | .jquery-comments.read-only .actions {
|
| | | display: none;
|
| | | }
|
| | | .comments-container {
|
| | | padding: 10px;
|
| | | border: 1px solid #29254f;
|
| | | margin-top: 50px;
|
| | | }
|
| | | .comments-container #comments {
|
| | | margin: 15px 0;
|
| | | } |
| New file |
| | |
| | | body {
|
| | | margin: 0;
|
| | | font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
| | | font-size: 1rem;
|
| | | font-weight: 400;
|
| | | line-height: 1.5;
|
| | | color: #8296a5;
|
| | | text-align: left;
|
| | | background-color: #080618;
|
| | | }
|
| | |
|
| | | *,
|
| | | ::before,
|
| | | ::after {
|
| | | box-sizing: border-box;
|
| | | }
|
| | |
|
| | | a {
|
| | | color: #6c9cc6;
|
| | | text-decoration: none;
|
| | | background-color: transparent;
|
| | | }
|
| | |
|
| | | a:hover {
|
| | | color: #9cc5e8;
|
| | | }
|
| | |
|
| | | /*
|
| | | Grid Start
|
| | |
|
| | | True Masonry by balazs_sziklai
|
| | | https://codepen.io/balazs_sziklai*/
|
| | |
|
| | | .grid-layout {
|
| | | display: grid;
|
| | | grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
|
| | | grid-gap: 10px;
|
| | | grid-auto-rows: minmax(140px, auto);
|
| | | grid-auto-flow: dense;
|
| | | }
|
| | |
|
| | | .grid-item {
|
| | | border-radius: 5px;
|
| | | &:nth-child(odd) {
|
| | | background-color: #424242;
|
| | | }
|
| | | }
|
| | |
|
| | | .span-2 {
|
| | | grid-column-end: span 2;
|
| | | grid-row-end: span 2;
|
| | | }
|
| | |
|
| | | .span-3 {
|
| | | grid-column-end: span 3;
|
| | | grid-row-end: span 3;
|
| | | }
|
| | |
|
| | | /*End Grid*/
|
| | |
|
| | | .install-body, .login-body {
|
| | | background-color: #080618;
|
| | | }
|
| | |
|
| | | .install-form, .login-form, .register-form {
|
| | | background-color: #120e31;
|
| | | }
|
| | |
|
| | | .site-content {
|
| | | background-color: #120e31;
|
| | | }
|
| | | .site-container {
|
| | | max-width: 1440px;
|
| | | }
|
| | | .top-nav {
|
| | | font-weight: bold;
|
| | | background-color: #120e31;
|
| | | padding: 0;
|
| | | }
|
| | |
|
| | | .text-uppercase {
|
| | | text-transform: uppercase !important;
|
| | | }
|
| | |
|
| | | .fixed-top {
|
| | | position: fixed;
|
| | | top: 0;
|
| | | right: 0;
|
| | | left: 0;
|
| | | z-index: 1030;
|
| | | }
|
| | |
|
| | | .navbar-expand-lg {
|
| | | flex-flow: row nowrap;
|
| | | justify-content: flex-start;
|
| | | }
|
| | |
|
| | | .navbar {
|
| | | position: relative;
|
| | | display: flex;
|
| | | flex-wrap: wrap;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | padding: 0;
|
| | | }
|
| | |
|
| | | .navbar-brand {
|
| | | display: inline-block;
|
| | | padding-top: 0.3125rem;
|
| | | padding-bottom: 0.3125rem;
|
| | | margin-right: 1rem;
|
| | | font-size: 1.25rem;
|
| | | line-height: inherit;
|
| | | white-space: nowrap;
|
| | | }
|
| | |
|
| | | a.nav-link {
|
| | | color: #d1dbe3!important;
|
| | | }
|
| | | li.nav-item:hover {
|
| | | background-color: #29254f;
|
| | | border-radius: 10px;
|
| | | }
|
| | |
|
| | | .text-white {
|
| | | color: #fff !important;
|
| | | }
|
| | |
|
| | | article,
|
| | | aside,
|
| | | figcaption,
|
| | | figure,
|
| | | footer,
|
| | | header,
|
| | | hgroup,
|
| | | main,
|
| | | nav,
|
| | | section {
|
| | | display: block;
|
| | | }
|
| | |
|
| | | .copyright {
|
| | | background-color: #120e31;
|
| | | }
|
| | |
|
| | | .text-center {
|
| | | text-align: center !important;
|
| | | }
|
| | |
|
| | | .footer {
|
| | | padding-top: 3rem;
|
| | | padding-bottom: 3rem;
|
| | | background-color: #29254f;
|
| | | }
|
| | |
|
| | | img.small-thumb {
|
| | | width: 100%;
|
| | | border-radius: 10px;
|
| | | }
|
| | |
|
| | | .list-content {
|
| | | padding: 0px;
|
| | | }
|
| | |
|
| | | .list-game {
|
| | | border-radius: 5px;
|
| | | }
|
| | |
|
| | | .grid-layout .list-title {
|
| | | overflow: hidden;
|
| | | margin: .35714em;
|
| | | color: #fff;
|
| | | text-overflow: ellipsis;
|
| | | white-space: nowrap;
|
| | | text-align: center;
|
| | | position: relative;
|
| | | bottom: 65px;
|
| | | margin-bottom: -53px;
|
| | | opacity: 0;
|
| | | font-weight: bold;
|
| | | }
|
| | | @media(hover: hover) and (pointer: fine) {
|
| | | .grid-layout .list-game:hover > .list-title {
|
| | | opacity: 1;
|
| | | transition: all 0.5s ease;
|
| | | }
|
| | | .list-thumbnail:hover {
|
| | | opacity: 0.5;
|
| | | transition: all 0.5s ease;
|
| | | }
|
| | | }
|
| | |
|
| | | .grid-wrapper {
|
| | | margin-bottom: 30px;
|
| | | }
|
| | |
|
| | | .game-container {
|
| | | margin: 30px 0;
|
| | | }
|
| | |
|
| | | .list-category {
|
| | | position: absolute;
|
| | | bottom: 5px;
|
| | | }
|
| | |
|
| | | h1.single-title {
|
| | | font-size: 1.75rem;
|
| | | }
|
| | |
|
| | | .single-title {
|
| | | margin-top: 20px;
|
| | | padding-bottom: 10px;
|
| | | font-weight: bold;
|
| | | color: #cbdbe3;
|
| | | }
|
| | |
|
| | | .single-info-container {
|
| | | padding-bottom: 5px;
|
| | | border-bottom: 1px solid #29254f;
|
| | | margin-bottom: 20px;
|
| | | }
|
| | |
|
| | | .single-icon {
|
| | | background-color: #29254f;
|
| | | margin-right: 10px;
|
| | | padding: 8px 16px;
|
| | | border-radius: 15px;
|
| | | display: inline-block;
|
| | | margin-bottom: 10px;
|
| | | }
|
| | |
|
| | | .social-share {
|
| | | position: relative;
|
| | | top: -2px;
|
| | | margin-right: 10px;
|
| | | display: inline-block;
|
| | | margin-bottom: 10px;
|
| | | }
|
| | | .social-icon {
|
| | | width: 38px;
|
| | | height: 38px;
|
| | | }
|
| | |
|
| | | .sidebar {
|
| | | display: block;
|
| | | }
|
| | |
|
| | | .sidebar .list-tile {
|
| | | padding-left: 3px;
|
| | | padding-right: 3px;
|
| | | }
|
| | |
|
| | | .sidebar .list-game {
|
| | | margin-bottom: 8px;
|
| | | }
|
| | |
|
| | | .page-title {
|
| | | font-weight: bold;
|
| | | margin-top: 20px;
|
| | | }
|
| | | h1.singlepage-title {
|
| | | font-size: 1.75rem;
|
| | | }
|
| | | .singlepage-title {
|
| | | padding-bottom: 10px;
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .page-content,
|
| | | .game-content {
|
| | | margin-bottom: 30px;
|
| | | }
|
| | |
|
| | | .site-logo {
|
| | | padding: 5px;
|
| | | }
|
| | |
|
| | | .nav-categories {
|
| | | background-color: #29254f;
|
| | | white-space: nowrap;
|
| | | }
|
| | |
|
| | | h3.item-title {
|
| | | font-weight: bold;
|
| | | font-size: 1.3rem;
|
| | | margin: 20px 0;
|
| | | display: inline-block;
|
| | | background-color: #29254f;
|
| | | color: #cbdbe3;
|
| | | padding: 10px 20px;
|
| | | border-radius: 10px;
|
| | | }
|
| | |
|
| | | .item-title i,
|
| | | .single-icon i,
|
| | | h4 i {
|
| | | margin-right: 9px;
|
| | | }
|
| | |
|
| | | ul.list-categories {
|
| | | list-style-type: none;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .list-categories li {
|
| | | float: left;
|
| | | display: block;
|
| | | text-align: center;
|
| | | padding: 8px 16px;
|
| | | text-decoration: none;
|
| | | }
|
| | |
|
| | | .list-categories li:hover {
|
| | | background-color: #6190bf;
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | nav.greedy {
|
| | | position: relative;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | }
|
| | |
|
| | | nav.greedy button {
|
| | | padding: 6px 16px;
|
| | | text-decoration: none;
|
| | | border: none;
|
| | | background-color: #6190bf;
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | nav.greedy button.hidden {
|
| | | transition: none;
|
| | | border-right: 0.5rem solid #b6b6b6;
|
| | | width: 0;
|
| | | padding: 0;
|
| | | overflow: hidden;
|
| | | display: none;
|
| | | }
|
| | |
|
| | | nav.greedy button::after {
|
| | | content: attr(count);
|
| | | display: inline-flex;
|
| | | width: 30px;
|
| | | height: 30px;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | background: #ab31d7;
|
| | | color: #f2f2f2;
|
| | | border-radius: 50%;
|
| | | font-size: 14px;
|
| | | line-height: 14px;
|
| | | margin-left: 1rem;
|
| | | margin-right: calc(-1rem + -8px);
|
| | | }
|
| | |
|
| | | ul.links {
|
| | | display: flex;
|
| | | flex: 1;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | ul.links li {
|
| | | flex: none;
|
| | | }
|
| | |
|
| | | ul.hidden-links {
|
| | | position: absolute;
|
| | | background: #fff;
|
| | | right: 0;
|
| | | top: 100%;
|
| | | z-index: 1;
|
| | | text-align: left;
|
| | | list-style: none;
|
| | | background-color: #fff;
|
| | | background-clip: padding-box;
|
| | | border: 1px solid rgba(0, 0, 0, .15);
|
| | | border-radius: .25rem;
|
| | | padding-left: 0;
|
| | | box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
|
| | | }
|
| | |
|
| | | ul.hidden-links li {
|
| | | padding-right: 2rem;
|
| | | }
|
| | |
|
| | | ul.hidden-links a {
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | ul.hidden-links.hidden {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | ul.hidden-links li {
|
| | | padding: 1rem;
|
| | | min-width: 220px;
|
| | | }
|
| | |
|
| | | ul.hidden-links li:hover {
|
| | | background-color: #eee;
|
| | | }
|
| | |
|
| | | .cat-list {
|
| | | margin-top: 20px;
|
| | | }
|
| | |
|
| | | .cat-link {
|
| | | padding: 8px 16px;
|
| | | background-color: #29254f;
|
| | | margin-right: 10px;
|
| | | border-radius: 15px;
|
| | | }
|
| | |
|
| | | h4.widget-title {
|
| | | font-weight: bold;
|
| | | padding-bottom: 10px;
|
| | | font-size: 26px;
|
| | | border-bottom: 1px solid #29254f;
|
| | | margin-bottom: 20px;
|
| | | font-size: 1.3rem;
|
| | | color: #cbdbe3;
|
| | | }
|
| | |
|
| | | .sidebar .row {
|
| | | margin-right: 0;
|
| | | margin-left: 0;
|
| | | }
|
| | |
|
| | | .sidebar .widget {
|
| | | margin-bottom: 20px;
|
| | | }
|
| | |
|
| | | .bottom-container {
|
| | | margin: 30px 0;
|
| | | }
|
| | |
|
| | | .banner-ads {
|
| | | text-align: center;
|
| | | margin: 10px 0;
|
| | | }
|
| | |
|
| | | img {
|
| | | max-width: 100%;
|
| | | }
|
| | |
|
| | | .content-wrapper {
|
| | | margin-top: 30px;
|
| | | }
|
| | |
|
| | | .pagination-wrapper {
|
| | | margin-bottom: 30px;
|
| | | }
|
| | |
|
| | | .page-link {
|
| | | color: #cbdbe3;
|
| | | background-color: rgba(66, 60, 121, 0.7);
|
| | | border: 1px solid #656097;
|
| | | }
|
| | |
|
| | | .page-link:hover {
|
| | | color: #cbdbe3;
|
| | | background-color: #8589bf;
|
| | | border-color: #656097;
|
| | | }
|
| | |
|
| | | .page-item.disabled .page-link {
|
| | | color: #9a95c4;
|
| | | background-color: #544f86 !important;
|
| | | border-color: #8985aa;
|
| | | }
|
| | |
|
| | | .game-iframe-container {
|
| | | position: relative;
|
| | | overflow: hidden;
|
| | | height: 600px;
|
| | | display: block;
|
| | | }
|
| | | .game-iframe {
|
| | | position: absolute;
|
| | | top: 0;
|
| | | left: 0;
|
| | | bottom: 0;
|
| | | right: 0;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | }
|
| | | .nav-item {
|
| | | margin: 0 5px;
|
| | | }
|
| | | .search-bar {
|
| | | margin-left: 10px;
|
| | | }
|
| | | @media (max-width: 992px) {
|
| | | #navb {
|
| | | margin: 15px 0;
|
| | | }
|
| | | .nav-item {
|
| | | margin: 0 10px;
|
| | | }
|
| | | li.nav-item:hover {
|
| | | background-color: #29254f;
|
| | | border-radius: 0px;
|
| | | }
|
| | | .nav-link {
|
| | | padding-left: 15px!important;
|
| | | }
|
| | | }
|
| | | @media (max-width: 1440px) {
|
| | | .site-container {
|
| | | padding: 0;
|
| | | }
|
| | | }
|
| | | input.search {
|
| | | background-color: #332f5b;
|
| | | border-color: #6c6799;
|
| | | }
|
| | | .btn-search {
|
| | | background-color: #6f69a4;
|
| | | }
|
| | | .stats-vote {
|
| | | text-align: right;
|
| | | margin-top: 20px;
|
| | | }
|
| | | .stats-vote i {
|
| | | font-size: 30px;
|
| | | padding: 6px;
|
| | | }
|
| | | .stats-vote i:hover {
|
| | | color: #1abc9c;
|
| | | cursor: pointer;
|
| | | }
|
| | | .header-left {
|
| | | display: inline-block;
|
| | | }
|
| | | .header-right {
|
| | | display: inline-block;
|
| | | float: right;
|
| | | margin-left: 30px;
|
| | | }
|
| | | .vote-status {
|
| | | font-size: 18px;
|
| | | font-weight: bold;
|
| | | }
|
| | | /* Post list */
|
| | |
|
| | | .post-item {
|
| | | margin-bottom: 3rem !important;
|
| | | }
|
| | | .post-media {
|
| | | display: flex;
|
| | | align-items: flex-start;
|
| | | }
|
| | | .blog-list .post-thumb {
|
| | | width: 120px;
|
| | | height: 120px;
|
| | | }
|
| | | .post-thumb {
|
| | | display: flex;
|
| | | margin-right: 1rem;
|
| | | }
|
| | | .post-thumb img {
|
| | | object-fit: cover;
|
| | | object-position: center;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | }
|
| | | .post-title {
|
| | | margin-bottom: .25rem;
|
| | | font-weight: bold;
|
| | | font-size: 1.5rem;
|
| | | }
|
| | | .post-meta .date {
|
| | | color: #8f8f8f;
|
| | | font-size: 0.8125rem;
|
| | | }
|
| | | .post-meta {
|
| | | color: #8f8f8f;
|
| | | }
|
| | | .blog-list {
|
| | | margin-top: 30px;
|
| | | }
|
| | | @media (max-width: 576px) {
|
| | | .blog-list .post-thumb {
|
| | | display: none;
|
| | | }
|
| | | }
|
| | |
|
| | | /* End post */
|
| | |
|
| | | .dropdown-menu {
|
| | | position: absolute;
|
| | | background: #fff;
|
| | | background-clip: border-box;
|
| | | right: 0;
|
| | | top: 100%;
|
| | | z-index: 2;
|
| | | text-align: left;
|
| | | list-style: none;
|
| | | font-weight: normal;
|
| | | background-clip: padding-box;
|
| | | border: 1px solid rgba(0, 0, 0, .15);
|
| | | border-radius: .25rem;
|
| | | padding-left: 0;
|
| | | box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
|
| | | margin-top: 10px;
|
| | | }
|
| | |
|
| | | .dropdown-icon {
|
| | | margin-left: 10px;
|
| | | }
|
| | |
|
| | | .nav-item {
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .nav-item-child {
|
| | | padding: 0.6rem 1rem;
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | .nav-link-child {
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | .nav-item-child:hover {
|
| | | background-color: #cddbe8;
|
| | | }
|
| | | .category-description {
|
| | | background-color: #1f1b42;
|
| | | padding: 10px 15px;
|
| | | }
|
| | | .game-tag-list {
|
| | | display: flex;
|
| | | flex-wrap: wrap;
|
| | | margin-top: 8px;
|
| | | }
|
| | | .tag-item {
|
| | | padding: 4px 14px;
|
| | | background: #29254f;
|
| | | margin-right: 8px;
|
| | | margin-top: 8px;
|
| | | border-radius: 8px;
|
| | | }
|
| | | .color-red {
|
| | | color: #bb4d4d;
|
| | | }
|
| | | i.disabled {
|
| | | opacity: 0.5;
|
| | | pointer-events: none; |
| | | }
|
| | |
|
| | | .load-more-games-wrapper {
|
| | | text-align: center;
|
| | | margin-top: 20px;
|
| | | margin-bottom: 40px;
|
| | | }
|
| | |
|
| | | /* NEW COMMENT SYSTEM */
|
| | |
|
| | | #tpl-comment-section {
|
| | | margin-top: 30px;
|
| | | margin-bottom: 20px;
|
| | | }
|
| | |
|
| | | #comment-form {
|
| | | display: flex;
|
| | | margin-bottom: 30px;
|
| | | border-bottom: 1px solid #29254f;
|
| | | }
|
| | | .comment-profile-avatar {
|
| | | margin-right: 20px;
|
| | | }
|
| | | .comment-profile-avatar img {
|
| | | border-radius: 50%;
|
| | | float: left;
|
| | | width: 3.6rem;
|
| | | height: 3.6rem;
|
| | | max-width: 50px;
|
| | | max-height: 50px;
|
| | | }
|
| | | .comment-form-wrapper {
|
| | | background: #332F5B;
|
| | | margin-bottom: 30px;
|
| | | box-shadow: 0px 4px 8px 0px rgba(50, 50, 50, 0.1);
|
| | | border: 1px solid #6F69A4;
|
| | | border-radius: 12px;
|
| | | padding: 15px;
|
| | | width: 100%;
|
| | | }
|
| | | textarea.tpl-comment-input {
|
| | | background: #332F5B;
|
| | | color: #8296a5;
|
| | | }
|
| | | textarea.tpl-comment-input:focus {
|
| | | background: #332F5B;
|
| | | color: #8296a5;
|
| | | }
|
| | | .comment-form-wrapper textarea {
|
| | | padding: 0;
|
| | | border: 0;
|
| | | }
|
| | | .post-comment-btn-wrapper {
|
| | | float: right;
|
| | | margin-top: 15px;
|
| | | }
|
| | | textarea#comment-input {
|
| | | height: 100px;
|
| | | }
|
| | | .user-comment-wrapper {
|
| | | display: flex;
|
| | | }
|
| | | .tpl-user-comment {
|
| | | border-bottom: 1px solid #29254f;
|
| | | margin-bottom: 30px;
|
| | | }
|
| | | .tpl-comment-children .tpl-user-comment:last-child {
|
| | | border-bottom: none;
|
| | | }
|
| | | img.tpl-user-comment-avatar {
|
| | | border-radius: 50%;
|
| | | float: left;
|
| | | width: 3.6rem;
|
| | | height: 3.6rem;
|
| | | max-width: 50px;
|
| | | max-height: 50px;
|
| | | margin-right: 20px;
|
| | | }
|
| | | .tpl-comment-children img.tpl-user-comment-avatar {
|
| | | max-width: 40px;
|
| | | max-height: 40px;
|
| | | }
|
| | | .tpl-comment-author {
|
| | | font-weight: bold;
|
| | | }
|
| | | .tpl-user-comment .comment-content {
|
| | | margin-bottom: 20px;
|
| | | width: 100%;
|
| | | }
|
| | | .tpl-comment-timestamp {
|
| | | margin-top: 3px;
|
| | | font-size: 15px;
|
| | | color: #938fb5;
|
| | | }
|
| | | .tpl-comment-text {
|
| | | margin-top: 13px;
|
| | | white-space: unset;
|
| | | }
|
| | | .comment-actions {
|
| | | margin-top: 15px;
|
| | | }
|
| | | .comment-action-right {
|
| | | float: right;
|
| | | }
|
| | | .comment-action-left {
|
| | | float: left;
|
| | | }
|
| | | .tpl-comment-children {
|
| | | display: block;
|
| | | margin-left: 70px;
|
| | | }
|
| | | .tpl-reply-form {
|
| | | display: flex;
|
| | | }
|
| | | .comment-reply-wrapper {
|
| | | margin-left: 70px;
|
| | | background: #332F5B;
|
| | | margin-bottom: 30px;
|
| | | box-shadow: 0px 4px 8px 0px rgba(50, 50, 50, 0.1);
|
| | | border: 1px solid #6F69A4;
|
| | | border-radius: 12px;
|
| | | padding: 15px;
|
| | | width: 100%;
|
| | | }
|
| | | textarea.tpl-reply-input {
|
| | | background: #332F5B;
|
| | | color: #8296a5;
|
| | | }
|
| | | textarea.tpl-reply-input:focus {
|
| | | background: #332F5B;
|
| | | color: #8296a5;
|
| | | }
|
| | | .comment-reply-wrapper textarea {
|
| | | padding: 0;
|
| | | border: 0;
|
| | | }
|
| | | .reply-action-buttons {
|
| | | float: right;
|
| | | margin-top: 15px;
|
| | | }
|
| | | .tpl-btn-cancel-reply {
|
| | | color: #938fb5;
|
| | | }
|
| | | #tpl-btn-load-more-comments {
|
| | | color: #938fb5;
|
| | | }
|
| | | .comment-require-login-wrapper {
|
| | | display: flex;
|
| | | margin-bottom: 40px;
|
| | | }
|
| | | .comment-require-login-wrapper .comment-alert {
|
| | | padding: 10px;
|
| | | background-color: #29254F;
|
| | | text-align: center;
|
| | | width: 100%;
|
| | | border-radius: 8px;
|
| | | } |
| New file |
| | |
| | | .user-avatar img {
|
| | | width: 40px;
|
| | | }
|
| | | .user-avatar {
|
| | | margin-left: 20px;
|
| | | border-radius: 50%;
|
| | | overflow: hidden;
|
| | | cursor: pointer;
|
| | | }
|
| | | ul.user-links {
|
| | | position: absolute;
|
| | | background: #fff;
|
| | | right: 0;
|
| | | top: 100%;
|
| | | z-index: 2;
|
| | | text-align: left;
|
| | | list-style: none;
|
| | | font-weight: normal;
|
| | | background-clip: padding-box;
|
| | | border: 1px solid rgba(0, 0, 0, .15);
|
| | | border-radius: .25rem;
|
| | | padding-left: 0;
|
| | | box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
|
| | | }
|
| | | ul.user-links li {
|
| | | padding: 1rem;
|
| | | min-width: 220px;
|
| | | color: #2c3e50;
|
| | | }
|
| | | ul.user-links.hidden {
|
| | | display: none;
|
| | | }
|
| | | .user-links hr {
|
| | | margin: 0;
|
| | | }
|
| | | #mainNav .container {
|
| | | position: relative;
|
| | | padding: 0 10px;
|
| | | }
|
| | | .section {
|
| | | background-color: #29254f;
|
| | | border-radius: 10px;
|
| | | padding: 15px;
|
| | | margin-bottom: 30px;
|
| | | box-shadow: 2px 2px 5px 0 rgba(0,0,0,0.05);
|
| | | }
|
| | | .section-title {
|
| | | font-size: 1.3rem;
|
| | | }
|
| | | .page-title {
|
| | | margin-top: 5px;
|
| | | margin-bottom: 20px;
|
| | | }
|
| | | .profile-username {
|
| | | font-size: 20px;
|
| | | font-weight: bold;
|
| | | margin-top: 20px;
|
| | | }
|
| | | .user-page {
|
| | | background-color: #120e31;
|
| | | color: #b4b8bb;
|
| | | }
|
| | | .user-page .single-title {
|
| | | margin-top: 0;
|
| | | margin-bottom: 10px;
|
| | | padding-top: 25px;
|
| | | font-size: 1.5rem;
|
| | | }
|
| | | .user-page .section-title {
|
| | | font-weight: bold;
|
| | | margin-bottom: 15px;
|
| | | }
|
| | | .profile-bio {
|
| | | margin-top: 10px;
|
| | | }
|
| | | .profile-join {
|
| | | color: #d6793a;
|
| | | font-style: italic;
|
| | | }
|
| | | .progress-bar {
|
| | | background-color: #19bae0;
|
| | | }
|
| | | .level-badge {
|
| | | float: left;
|
| | | margin-right: 10px;
|
| | | }
|
| | | .profile-game-item {
|
| | | max-width: 80px;
|
| | | border-radius: 10px;
|
| | | overflow: hidden;
|
| | | margin-right: 15px;
|
| | | }
|
| | | .profile-gamelist-horizontal {
|
| | | position: relative;
|
| | | }
|
| | | .profile-gamelist-horizontal ul {
|
| | | overflow: hidden;
|
| | | white-space: nowrap;
|
| | | display: block;
|
| | | list-style: none;
|
| | | padding: 0;
|
| | | margin-bottom: 0;
|
| | | }
|
| | |
|
| | | .profile-gamelist-horizontal li {
|
| | | display: inline-block;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .profile-comment-item {
|
| | | position: relative;
|
| | | border: 1px solid #6f69a4;
|
| | | padding: 15px;
|
| | | border-radius: 10px;
|
| | | margin-top: 20px;
|
| | | }
|
| | |
|
| | | .comment-date {
|
| | | font-style: italic;
|
| | | }
|
| | |
|
| | | .btn-left {
|
| | | position: absolute;
|
| | | left: 0;
|
| | | background-color: #fff;
|
| | | border-radius: 50%;
|
| | | top: 14px;
|
| | | margin: 5px;
|
| | | box-shadow: 0 0 5px 0 rgba(0,0,0,0.3);
|
| | | z-index: 1;
|
| | | }
|
| | | .btn-right {
|
| | | position: absolute;
|
| | | right: 0;
|
| | | background-color: #fff;
|
| | | border-radius: 50%;
|
| | | top: 14px;
|
| | | margin: 5px;
|
| | | box-shadow: 0 0 5px 0 rgba(0,0,0,0.3);
|
| | | z-index: 1;
|
| | | }
|
| | | .label-xp {
|
| | | color: #d6793a;
|
| | | font-style: italic;
|
| | | }
|
| | | .delete-comment {
|
| | | position: absolute;
|
| | | right: 10px;
|
| | | bottom: 10px;
|
| | | cursor: pointer;
|
| | | }
|
| | | .input-hidden {
|
| | | position: absolute;
|
| | | left: -9999px;
|
| | | }
|
| | |
|
| | | input[type=radio]:checked + label>img {
|
| | | border: 1px solid #fff;
|
| | | box-shadow: 0 0 0 3px #14ca14;
|
| | | }
|
| | |
|
| | | .avatar-chooser .col-3 {
|
| | | padding-right: 5px;
|
| | | padding-left: 5px;
|
| | | }
|
| | |
|
| | | .avatar-chooser {
|
| | | margin-right: 0;
|
| | | margin-left: 0;
|
| | | } |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <div class="content-wrapper">
|
| | | <h3 class="item-title"><?php _e('%a Games', esc_string($tag_name)) ?></h3>
|
| | | <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
|
| | | <div class="game-container">
|
| | | <div class="grid-layout grid-wrapper">
|
| | | <?php foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation example">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = esc_string($_GET['page']);
|
| | | }
|
| | | render_pagination($total_page, $cur_page, 8, 'tag', $_GET['slug']);
|
| | | ?>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container text-center">
|
| | | <img src="<?php echo DOMAIN . TEMPLATE_PATH . "/images/404.png" ?>">
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <div class="content-wrapper">
|
| | | <h3 class="item-title"><?php _e('%a Games', esc_string($archive_title)) ?></h3>
|
| | | <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
|
| | | <?php
|
| | | if($category->description != ''){
|
| | | echo '<p class="category-description">';
|
| | | echo "$category->description</p>";
|
| | | }
|
| | | ?>
|
| | | <div class="game-container">
|
| | | <div class="row">
|
| | | <?php foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation example">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = esc_int($_GET['page']);
|
| | | }
|
| | | render_pagination($total_page, $cur_page, 8, 'category', $_GET['slug']);
|
| | | ?>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | function list_categories(){
|
| | | $categories = fetch_all_categories();
|
| | | echo '<ul class="links list-categories">';
|
| | | foreach ($categories as $item) {
|
| | | echo '<a href="'. get_permalink('category', $item->slug) .'"><li>'. esc_string($item->name) .'</li></a>';
|
| | | }
|
| | | echo '</ul>';
|
| | | }
|
| | | function list_games($type, $amount, $count = false){
|
| | | echo '<div class="row">';
|
| | | $data = fetch_games_by_type($type, $amount, 0, $count);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <div class="col-4 list-tile">
|
| | | <a href="<?php echo get_permalink('game', $game->slug) ?>">
|
| | | <div class="list-game">
|
| | | <div class="list-thumbnail"><img src="<?php echo get_small_thumb($game) ?>" class="small-thumb" alt="<?php echo esc_string($game->title) ?>"></div>
|
| | | <div class="list-content">
|
| | | <div class="list-title"><?php echo esc_string($game->title); ?></div>
|
| | | </div>
|
| | | </div>
|
| | | </a>
|
| | | </div>
|
| | | <?php }
|
| | | echo '</div>';
|
| | | }
|
| | | function list_games_by_category($cat, $amount){
|
| | | // Deprecated, not used anymore
|
| | | echo '<div class="row">';
|
| | | $data = get_game_list_category($cat, $amount);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php }
|
| | | echo '</div>';
|
| | | }
|
| | | function list_games_by_categories($cat, $amount){
|
| | | // Deprecated, not used anymore
|
| | | echo '<div class="row">';
|
| | | $data = get_game_list_categories($cat, $amount);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php }
|
| | | echo '</div>';
|
| | | }
|
| | |
|
| | | function show_user_profile_header(){
|
| | |
|
| | | global $login_user;
|
| | |
|
| | | if($login_user){
|
| | | ?>
|
| | | <div class="user-avatar">
|
| | | <img src="<?php echo get_user_avatar() ?>">
|
| | | </div>
|
| | | <ul class="user-links hidden">
|
| | | <li>
|
| | | <strong>
|
| | | <?php echo $login_user->username ?>
|
| | | </strong>
|
| | | <div class="label-xp"><?php echo $login_user->xp ?>xp</div>
|
| | | </li>
|
| | | <hr>
|
| | | <a href="<?php echo get_permalink('user', $login_user->username) ?>">
|
| | | <li><?php _e('My Profile') ?></li>
|
| | | </a>
|
| | | <a href="<?php echo get_permalink('user', $login_user->username, array('edit' => 'edit')) ?>">
|
| | | <li><?php _e('Edit Profile') ?></li>
|
| | | </a>
|
| | | <hr>
|
| | | <a href="<?php echo DOMAIN ?>admin.php?action=logout">
|
| | | <li class="text-danger"><?php _e('Log Out') ?></li>
|
| | | </a>
|
| | | </ul>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Head',
|
| | | 'id' => 'head',
|
| | | 'description' => 'HTML element before </head>',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Sidebar 1',
|
| | | 'id' => 'sidebar-1',
|
| | | 'description' => 'Right sidebar',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Footer 1',
|
| | | 'id' => 'footer-1',
|
| | | 'description' => 'Footer 1',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Footer 2',
|
| | | 'id' => 'footer-2',
|
| | | 'description' => 'Footer 2',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Footer 3',
|
| | | 'id' => 'footer-3',
|
| | | 'description' => 'Footer 3',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Top Content',
|
| | | 'id' => 'top-content',
|
| | | 'description' => 'Above main content element. Recommended for Ad banner placement.',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Bottom Content',
|
| | | 'id' => 'bottom-content',
|
| | | 'description' => 'Under main content element. Recommended for Ad banner placement.',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Homepage Bottom',
|
| | | 'id' => 'homepage-bottom',
|
| | | 'description' => 'Bottom content on homepage. Can be used to show site description or explaining about your site.',
|
| | | ));
|
| | |
|
| | | register_sidebar(array(
|
| | | 'name' => 'Footer Copyright',
|
| | | 'id' => 'footer-copyright',
|
| | | 'description' => 'Copyright section.',
|
| | | ));
|
| | |
|
| | | class widget_game_list extends Widget {
|
| | | function __construct() {
|
| | | $this->name = 'Game List';
|
| | | $this->id_base = 'game-list';
|
| | | $this->description = 'Show game list ( Grid ). Is recommedned to put this on sidebar.';
|
| | | }
|
| | | public function widget( $instance, $args = array() ){
|
| | | $label = isset($instance['label']) ? $instance['label'] : '';
|
| | | $class = isset($instance['class']) ? $instance['class'] : 'widget';
|
| | | $type = isset($instance['type']) ? $instance['type'] : 'new';
|
| | | $amount = isset($instance['amount']) ? $instance['amount'] : 9;
|
| | |
|
| | | echo '<div class="'.$class.'">';
|
| | |
|
| | | if($label != ''){
|
| | | $icon = 'fa-plus';
|
| | | if($type != 'new'){
|
| | | $icon = 'fa-gamepad';
|
| | | }
|
| | | echo '<h4 class="widget-title"><i class="fa '.$icon.'" aria-hidden="true"></i>'.$label.'</h4>';
|
| | | }
|
| | |
|
| | | list_games($type, (int)$amount);
|
| | | echo '</div>';
|
| | | }
|
| | |
|
| | | public function form( $instance = array() ){
|
| | |
|
| | | if(!isset( $instance['label'] )){
|
| | | $instance['label'] = '';
|
| | | }
|
| | | if(!isset( $instance['type'] )){
|
| | | $instance['type'] = 'new';
|
| | | }
|
| | | if(!isset( $instance['amount'] )){
|
| | | $instance['amount'] = 9;
|
| | | }
|
| | | if(!isset( $instance['class'] )){
|
| | | $instance['class'] = 'widget';
|
| | | }
|
| | | ?>
|
| | | <div class="form-group">
|
| | | <label><?php _e('Widget label/title (optional)') ?>:</label>
|
| | | <input type="text" class="form-control" name="label" placeholder="NEW GAMES" value="<?php echo $instance['label'] ?>">
|
| | | </div>
|
| | | <div class="form-group">
|
| | | <label><?php _e('Sort game list by') ?>:</label>
|
| | | <select class="form-control" name="type">
|
| | | <?php
|
| | |
|
| | | $opts = array(
|
| | | 'new' => 'New',
|
| | | 'popular' => 'Popular',
|
| | | 'random' => 'Random',
|
| | | 'likes' => 'Likes',
|
| | | 'trending' => 'Trending'
|
| | | );
|
| | |
|
| | | foreach ($opts as $key => $value) {
|
| | | $selected = '';
|
| | | if($key == $instance['type']){
|
| | | $selected = 'selected';
|
| | | }
|
| | | echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
|
| | | }
|
| | | ?>
|
| | | </select>
|
| | | </div>
|
| | | <div class="form-group">
|
| | | <label><?php _e('Amount') ?>:</label>
|
| | | <input type="number" class="form-control" name="amount" placeholder="9" min="1" value="<?php echo $instance['amount'] ?>">
|
| | | </div>
|
| | | <div class="form-group">
|
| | | <label><?php _e('Div class (Optional)') ?>:</label>
|
| | | <input type="text" class="form-control" name="class" placeholder="widget" value="<?php echo $instance['class'] ?>">
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | |
|
| | | register_widget( 'widget_game_list' );
|
| | |
|
| | | if(file_exists(ABSPATH . TEMPLATE_PATH . '/includes/custom.php')){
|
| | | include(ABSPATH . TEMPLATE_PATH . '/includes/custom.php');
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <div class="content-wrapper">
|
| | | <div class="row">
|
| | | <div class="col-md-9 game-content">
|
| | | <div class="game-iframe-container">
|
| | | <iframe class="game-iframe" id="game-area" src="<?php echo get_game_url($game); ?>" frameborder="0" allowfullscreen></iframe>
|
| | | </div>
|
| | | <div class="single-info-container">
|
| | | <div class="header-left">
|
| | | <h1 class="single-title"><?php echo htmlspecialchars( $game->title )?></h1>
|
| | | <p><?php _e('Played %a times.', esc_int($game->views)) ?></p>
|
| | | </div>
|
| | | <div class="header-right">
|
| | | <div class="stats-vote">
|
| | | <?php
|
| | | $vote_percentage = '- ';
|
| | | if($game->upvote+$game->downvote > 0){
|
| | | $vote_percentage = floor(($game->upvote/($game->upvote+$game->downvote))*100);
|
| | | }
|
| | | ?>
|
| | | <div class="txt-stats"><b class="text-success"><?php echo $vote_percentage ?>%</b> (<?php echo $game->upvote ?>/<?php echo $game->upvote+$game->downvote ?>)</div>
|
| | | <?php if($login_user){
|
| | | $favorited_class = '';
|
| | | if(is_favorited_game($game->id)){
|
| | | $favorited_class = 'color-red';
|
| | | }
|
| | | ?>
|
| | | <i class="icon-vote fa fa-heart <?php echo $favorited_class ?>" id="favorite" data-id="<?php echo $game->id ?>"></i>
|
| | | <?php } ?>
|
| | | <i class="icon-vote fa fa-thumbs-up" id="upvote" data-id="<?php echo $game->id ?>"></i>
|
| | | <i class="icon-vote fa fa-thumbs-down" id="downvote" data-id="<?php echo $game->id ?>"></i>
|
| | | <div class="vote-status"></div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="action-btn">
|
| | | <div class="single-icon"><i class="fa fa-external-link-square" aria-hidden="true"></i><a href="<?php echo get_permalink('full', $game->slug); ?>" target="_blank"><?php _e('Open in new window') ?></a></div>
|
| | | <div class="single-icon"><i class="fa fa-expand" aria-hidden="true"></i><a href="#" onclick="open_fullscreen()"><?php _e('Fullscreen') ?></a></div>
|
| | | <?php
|
| | | if(defined('GAME_REPORTS')){
|
| | | ?><div class="single-icon"><i class="fa fa-bug" aria-hidden="true"></i><a href="#" id="report-game"><?php _e('Report') ?></a></div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | <div class="social-share"><a href="https://www.facebook.com/sharer/sharer.php?u=<?php echo htmlspecialchars(get_cur_url()); ?>" target="_blank">
|
| | | <img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/facebook.png' ?>" alt="share" class="social-icon">
|
| | | </a></div>
|
| | | <div class="social-share"><a href="https://twitter.com/intent/tweet?url=<?php echo htmlspecialchars(get_cur_url()); ?>" target="_blank">
|
| | | <img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/twitter.png' ?>" alt="share" class="social-icon">
|
| | | </a></div>
|
| | | </div>
|
| | | </div>
|
| | | <b><?php _e('Description') ?>:</b>
|
| | | <div class="single-description">
|
| | | <?php echo nl2br( $game->description )?>
|
| | | </div>
|
| | | <br>
|
| | | <b><?php _e('Instructions') ?>:</b>
|
| | | <div class="single-instructions">
|
| | | <?php echo nl2br( $game->instructions )?>
|
| | | </div>
|
| | | <br>
|
| | | <?php if(can_show_leaderboard()) { ?>
|
| | | <div class="single-leaderboard">
|
| | | <div id="content-leaderboard" class="table-responsive" data-id="<?php echo $game->id ?>"></div>
|
| | | </div>
|
| | | <?php } ?>
|
| | | <br>
|
| | | <b><?php _e('Categories') ?>:</b>
|
| | | <p class="cat-list"> |
| | | <?php if ( $game->category ) {
|
| | | $categories = $game->getCategoryList();
|
| | | foreach ($categories as $cat) {
|
| | | $category = Category::getById($cat['id']);
|
| | | ?>
|
| | | <a href="<?php echo get_permalink('category', $category->slug) ?>" class="cat-link"><?php echo esc_string($category->name) ?></a>
|
| | | <?php
|
| | | }
|
| | | } ?>
|
| | | </p>
|
| | | <?php
|
| | | $tag_string = $game->get_tags();
|
| | | if($tag_string != ''){
|
| | | echo '<b>'._t('Tags').':</b>';
|
| | | echo '<div class="game-tag-list">';
|
| | | $tags = explode(',', $tag_string);
|
| | | foreach ($tags as $tag_name) {
|
| | | echo '<a href="'. get_permalink('tag', $tag_name) .'" class="tag-item">';
|
| | | echo esc_string($tag_name);
|
| | | echo '</a>';
|
| | | }
|
| | | echo '</div>';
|
| | | }
|
| | | ?>
|
| | | <?php if(get_setting_value('comments')){
|
| | | echo '<div class="mt-4"></div>';
|
| | | echo '<b>'._t('Comments').':</b>';
|
| | | render_game_comments($game->id);
|
| | | } ?>
|
| | | </div>
|
| | | <div class="col-md-3">
|
| | | <?php include TEMPLATE_PATH . "/parts/sidebar.php" ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | <div class="bottom-container">
|
| | | <h3 class="item-title"><i class="fa fa-thumbs-up" aria-hidden="true"></i><?php _e('SIMILAR GAMES') ?></h3>
|
| | | <div class="row">
|
| | | <?php
|
| | | $data = fetch_similar_games($game, 12);
|
| | | $games = $data['results'];
|
| | | foreach ( $games as $game ) {
|
| | | include TEMPLATE_PATH . "/includes/grid.php";
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <h3 class="item-title"><i class="fa fa-plus" aria-hidden="true"></i><?php _e('NEW GAMES') ?></h3>
|
| | | <div class="row" id="section-new-games">
|
| | | <?php
|
| | | $games = fetch_games_by_type('new', 12, 0, false)['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <!-- Load more games -->
|
| | | <div class="load-more-games-wrapper">
|
| | | <!-- Template -->
|
| | | <div class="item-append-template" style="display: none;">
|
| | | <div class="col-md-2 col-sm-3 col-4 item-grid">
|
| | | <a href="<?php echo get_permalink('game') ?>{{slug}}">
|
| | | <div class="list-game">
|
| | | <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="{{thumbnail}}" class="small-thumb lazyload" alt="{{title}}"></div>
|
| | | <div class="list-content">
|
| | | <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-{{rating}}.png' ?>" alt="rating"></div>
|
| | | <div class="list-title">{{title}}</div>
|
| | | </div>
|
| | | </div>
|
| | | </a>
|
| | | </div>
|
| | | </div>
|
| | | <!-- The button -->
|
| | | <div class="btn btn-primary btn-load-more-games">
|
| | | <?php _e('Load more games') ?> <i class="fa fa-chevron-down" aria-hidden="true"></i>
|
| | | </div>
|
| | | </div>
|
| | | <h3 class="item-title"><i class="fa fa-certificate" aria-hidden="true"></i><?php _e('POPULAR GAMES') ?></h3>
|
| | | <div class="row">
|
| | | <?php
|
| | | $games = fetch_games_by_type('popular', 12, 0, false)['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <h3 class="item-title"><i class="fa fa-gamepad" aria-hidden="true"></i><?php _e('YOU MAY LIKE') ?></h3>
|
| | | <div class="row">
|
| | | <?php
|
| | | $games = fetch_games_by_type('random', 12, 0, false)['results'];
|
| | | foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | <div class="mb-4 mt-4 hp-bottom-container">
|
| | | <?php widget_aside('homepage-bottom') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | /*
|
| | |
|
| | | Used for custom Widgets and custom Widget placements
|
| | |
|
| | | This file will not be overwritten by the updater
|
| | |
|
| | | */
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <footer class="footer text-center">
|
| | | <div class="container">
|
| | | <div class="row">
|
| | | <div class="col-lg-4 mb-5 mb-lg-0">
|
| | | <?php widget_aside('footer-1') ?>
|
| | | </div>
|
| | | <div class="col-lg-4 mb-5 mb-lg-0">
|
| | | <?php widget_aside('footer-2') ?>
|
| | | </div>
|
| | | <div class="col-lg-4">
|
| | | <?php widget_aside('footer-3') ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </footer>
|
| | | <div class="copyright py-4 text-center text-white">
|
| | | <div class="container">
|
| | | <?php
|
| | | if(isset($stored_widgets['footer-copyright'])){
|
| | | widget_aside('footer-copyright');
|
| | | } else {
|
| | | echo SITE_TITLE . ' © '.date('Y').'. All rights reserved.';
|
| | | }
|
| | | ?>
|
| | | <span class="dsb-panel">
|
| | | <?php
|
| | | // if(is_login() && USER_ADMIN ){
|
| | | // echo '<a href="'.DOMAIN.'admin.php">Admin Dashboard</a>';
|
| | | // } else {
|
| | | // echo 'V-'.VERSION;
|
| | | // }
|
| | | echo '<a href="'.DOMAIN.'page/privacy-policy">Privacy Policy</a>';
|
| | | ?>
|
| | | <?php
|
| | | echo '|';
|
| | | ?>
|
| | | <?php
|
| | | echo '<a href="'.DOMAIN.'page/contact-us">Contact Us</a>';
|
| | | ?>
|
| | | </span>
|
| | | </div>
|
| | | </div>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/jquery-3.6.2.min.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/lazysizes.min.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/bootstrap.min.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN ?>js/comment-system.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/script.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN . TEMPLATE_PATH ?>/js/custom.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN ?>js/stats.js"></script>
|
| | | <?php load_plugin_footers() ?>
|
| | | </body>
|
| | | </html> |
| New file |
| | |
| | | <div class="col-md-2 col-sm-3 col-4 item-grid">
|
| | | <a href="<?php echo get_permalink('game', $game->slug) ?>">
|
| | | <div class="list-game">
|
| | | <div class="list-thumbnail"><img src="<?php echo get_template_path(); ?>/images/thumb-placeholder1.png" data-src="<?php echo get_small_thumb($game) ?>" class="small-thumb lazyload" alt="<?php echo esc_string($game->title) ?>"></div>
|
| | | <div class="list-content">
|
| | | <div class="star-rating text-center"><img src="<?php echo DOMAIN . TEMPLATE_PATH . '/images/star-'.get_rating('5', $game).'.png' ?>" alt="rating"></div>
|
| | | <div class="list-title"><?php echo esc_string($game->title); ?></div>
|
| | | </div>
|
| | | </div>
|
| | | </a>
|
| | | </div> |
| New file |
| | |
| | | <!DOCTYPE html>
|
| | | <html <?php the_html_attrs() ?>>
|
| | | <head>
|
| | | <meta charset="utf-8">
|
| | | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
| | | <title><?php echo get_page_title() ?></title>
|
| | | <meta name="description" content="<?php echo substr(esc_string($meta_description), 0, 160) ?>">
|
| | | <?php the_canonical_link() ?>
|
| | | <?php
|
| | | if(isset($game)){ //Game page
|
| | | ?>
|
| | | <meta name="twitter:card" content="summary_large_image" />
|
| | | <meta name="twitter:title" content="<?php echo htmlspecialchars( $page_title )?>" />
|
| | | <meta name="twitter:description" content="<?php echo substr(esc_string($meta_description), 0, 200) ?>" />
|
| | | <?php
|
| | | if(isset($game->thumb_1)){
|
| | | $thumb = $game->thumb_1;
|
| | | if(substr($thumb, 0, 1) == '/'){
|
| | | $thumb = DOMAIN . substr($thumb, 1);
|
| | | }
|
| | | echo('<meta name="twitter:image:src" content="'.$thumb.'">');
|
| | | echo('<meta property="og:image" content="'.$thumb.'">');
|
| | | }
|
| | | }
|
| | | ?>
|
| | | <?php load_plugin_headers() ?>
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/bootstrap.min.css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/jquery-comments.css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/user.css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/style.css" />
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN . TEMPLATE_PATH; ?>/style/custom.css" />
|
| | | <!-- Font Awesome icons (free version)-->
|
| | | <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
|
| | | <!-- Google fonts-->
|
| | | <link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css" />
|
| | | <link href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic" rel="stylesheet" type="text/css" />
|
| | | <?php widget_aside('head') ?>
|
| | | </head>
|
| | | <body id="page-top">
|
| | | <!-- Navigation-->
|
| | | <nav class="navbar navbar-expand-lg navbar-dark top-nav" id="mainNav">
|
| | | <div class="container">
|
| | | <button id="toggler" class="navbar-toggler navbar-toggler-left collapsed" type="button" data-toggle="collapse" data-target="#navb" aria-expanded="false">
|
| | | <span class="navbar-toggler-icon"></span>
|
| | | </button>
|
| | | <a class="navbar-brand js-scroll-trigger" href="<?php echo DOMAIN ?>"><img src="<?php echo DOMAIN .SITE_LOGO ?>" class="site-logo" alt="site-logo"></a>
|
| | | <?php include TEMPLATE_PATH . "/parts/navigation-top.php" ?>
|
| | | <?php show_user_profile_header() ?>
|
| | | </div>
|
| | | </nav>
|
| | | <div class="nav-categories">
|
| | | <div class="container">
|
| | | <?php include TEMPLATE_PATH . "/parts/navigation-categories.php" ?>
|
| | | </div>
|
| | | </div> |
| New file |
| | |
| | | {
|
| | | "name": "Default",
|
| | | "version": "1.1.7",
|
| | | "author": "CloudArcade",
|
| | | "description": "Default Theme",
|
| | | "website": "https://cloudarcade.net",
|
| | | "release_date": "30/08/2023",
|
| | | "changelog": "Implement load more games, implement new comment system, better search, fix bugs.",
|
| | | "type":"theme",
|
| | | "target_version": "1.6.5"
|
| | | } |
| New file |
| | |
| | | /*! |
| | | * Bootstrap v4.5.2 (https://getbootstrap.com/) |
| | | * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) |
| | | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) |
| | | */ |
| | | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function o(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function s(){return(s=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;function r(t){var n=this,i=!1;return e(this).one(a.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||a.triggerTransitionEnd(n)}),t),this}var a={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var n=e(t).css("transition-duration"),i=e(t).css("transition-delay"),o=parseFloat(n),s=parseFloat(i);return o||s?(n=n.split(",")[0],i=i.split(",")[0],1e3*(parseFloat(n)+parseFloat(i))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){e(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],s=e[i],r=s&&a.isElement(s)?"element":null===(l=s)||"undefined"==typeof l?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+r+'" but expected type "'+o+'".')}var l},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?a.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};a.jQueryDetection(),e.fn.emulateTransitionEnd=r,e.event.special[a.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(e(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var l="alert",c=e.fn[l],h=function(){function t(t){this._element=t}var n=t.prototype;return n.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},n.dispose=function(){e.removeData(this._element,"bs.alert"),this._element=null},n._getRootElement=function(t){var n=a.getSelectorFromElement(t),i=!1;return n&&(i=document.querySelector(n)),i||(i=e(t).closest(".alert")[0]),i},n._triggerCloseEvent=function(t){var n=e.Event("close.bs.alert");return e(t).trigger(n),n},n._removeElement=function(t){var n=this;if(e(t).removeClass("show"),e(t).hasClass("fade")){var i=a.getTransitionDurationFromElement(t);e(t).one(a.TRANSITION_END,(function(e){return n._destroyElement(t,e)})).emulateTransitionEnd(i)}else this._destroyElement(t)},n._destroyElement=function(t){e(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.alert");o||(o=new t(this),i.data("bs.alert",o)),"close"===n&&o[n](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),e.fn[l]=h._jQueryInterface,e.fn[l].Constructor=h,e.fn[l].noConflict=function(){return e.fn[l]=c,h._jQueryInterface};var u=e.fn.button,d=function(){function t(t){this._element=t}var n=t.prototype;return n.toggle=function(){var t=!0,n=!0,i=e(this._element).closest('[data-toggle="buttons"]')[0];if(i){var o=this._element.querySelector('input:not([type="hidden"])');if(o){if("radio"===o.type)if(o.checked&&this._element.classList.contains("active"))t=!1;else{var s=i.querySelector(".active");s&&e(s).removeClass("active")}t&&("checkbox"!==o.type&&"radio"!==o.type||(o.checked=!this._element.classList.contains("active")),e(o).trigger("change")),o.focus(),n=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(n&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&e(this._element).toggleClass("active"))},n.dispose=function(){e.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.button");i||(i=new t(this),e(this).data("bs.button",i)),"toggle"===n&&i[n]()}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=t.target,i=n;if(e(n).hasClass("btn")||(n=e(n).closest(".btn")[0]),!n||n.hasAttribute("disabled")||n.classList.contains("disabled"))t.preventDefault();else{var o=n.querySelector('input:not([type="hidden"])');if(o&&(o.hasAttribute("disabled")||o.classList.contains("disabled")))return void t.preventDefault();("LABEL"!==i.tagName||o&&"checkbox"!==o.type)&&d._jQueryInterface.call(e(n),"toggle")}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var n=e(t.target).closest(".btn")[0];e(n).toggleClass("focus",/^focus(in)?$/.test(t.type))})),e(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var s=0,r=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;s<r;s++){var a=t[s];"true"===a.getAttribute("aria-pressed")?a.classList.add("active"):a.classList.remove("active")}})),e.fn.button=d._jQueryInterface,e.fn.button.Constructor=d,e.fn.button.noConflict=function(){return e.fn.button=u,d._jQueryInterface};var f="carousel",g=".bs.carousel",m=e.fn[f],p={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},_={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},v={TOUCH:"touch",PEN:"pen"},b=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var n=t.prototype;return n.next=function(){this._isSliding||this._slide("next")},n.nextWhenVisible=function(){!document.hidden&&e(this._element).is(":visible")&&"hidden"!==e(this._element).css("visibility")&&this.next()},n.prev=function(){this._isSliding||this._slide("prev")},n.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(a.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},n.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},n.to=function(t){var n=this;this._activeElement=this._element.querySelector(".active.carousel-item");var i=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)e(this._element).one("slid.bs.carousel",(function(){return n.to(t)}));else{if(i===t)return this.pause(),void this.cycle();var o=t>i?"next":"prev";this._slide(o,this._items[t])}},n.dispose=function(){e(this._element).off(g),e.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},n._getConfig=function(t){return t=s({},p,t),a.typeCheckConfig(f,t,_),t},n._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},n._addEventListeners=function(){var t=this;this._config.keyboard&&e(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&e(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},n._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var n=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},i=function(e){t._pointerEvent&&v[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};e(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(e(this._element).on("pointerdown.bs.carousel",(function(t){return n(t)})),e(this._element).on("pointerup.bs.carousel",(function(t){return i(t)})),this._element.classList.add("pointer-event")):(e(this._element).on("touchstart.bs.carousel",(function(t){return n(t)})),e(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),e(this._element).on("touchend.bs.carousel",(function(t){return i(t)})))}},n._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},n._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},n._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),s=this._items.length-1;if((i&&0===o||n&&o===s)&&!this._config.wrap)return e;var r=(o+("prev"===t?-1:1))%this._items.length;return-1===r?this._items[this._items.length-1]:this._items[r]},n._triggerSlideEvent=function(t,n){var i=this._getItemIndex(t),o=this._getItemIndex(this._element.querySelector(".active.carousel-item")),s=e.Event("slide.bs.carousel",{relatedTarget:t,direction:n,from:o,to:i});return e(this._element).trigger(s),s},n._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var n=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));e(n).removeClass("active");var i=this._indicatorsElement.children[this._getItemIndex(t)];i&&e(i).addClass("active")}},n._slide=function(t,n){var i,o,s,r=this,l=this._element.querySelector(".active.carousel-item"),c=this._getItemIndex(l),h=n||l&&this._getItemByDirection(t,l),u=this._getItemIndex(h),d=Boolean(this._interval);if("next"===t?(i="carousel-item-left",o="carousel-item-next",s="left"):(i="carousel-item-right",o="carousel-item-prev",s="right"),h&&e(h).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(h,s).isDefaultPrevented()&&l&&h){this._isSliding=!0,d&&this.pause(),this._setActiveIndicatorElement(h);var f=e.Event("slid.bs.carousel",{relatedTarget:h,direction:s,from:c,to:u});if(e(this._element).hasClass("slide")){e(h).addClass(o),a.reflow(h),e(l).addClass(i),e(h).addClass(i);var g=parseInt(h.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=a.getTransitionDurationFromElement(l);e(l).one(a.TRANSITION_END,(function(){e(h).removeClass(i+" "+o).addClass("active"),e(l).removeClass("active "+o+" "+i),r._isSliding=!1,setTimeout((function(){return e(r._element).trigger(f)}),0)})).emulateTransitionEnd(m)}else e(l).removeClass("active"),e(h).addClass("active"),this._isSliding=!1,e(this._element).trigger(f);d&&this.cycle()}},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.carousel"),o=s({},p,e(this).data());"object"==typeof n&&(o=s({},o,n));var r="string"==typeof n?n:o.slide;if(i||(i=new t(this,o),e(this).data("bs.carousel",i)),"number"==typeof n)i.to(n);else if("string"==typeof r){if("undefined"==typeof i[r])throw new TypeError('No method named "'+r+'"');i[r]()}else o.interval&&o.ride&&(i.pause(),i.cycle())}))},t._dataApiClickHandler=function(n){var i=a.getSelectorFromElement(this);if(i){var o=e(i)[0];if(o&&e(o).hasClass("carousel")){var r=s({},e(o).data(),e(this).data()),l=this.getAttribute("data-slide-to");l&&(r.interval=!1),t._jQueryInterface.call(e(o),r),l&&e(o).data("bs.carousel").to(l),n.preventDefault()}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return p}}]),t}();e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",b._dataApiClickHandler),e(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),n=0,i=t.length;n<i;n++){var o=e(t[n]);b._jQueryInterface.call(o,o.data())}})),e.fn[f]=b._jQueryInterface,e.fn[f].Constructor=b,e.fn[f].noConflict=function(){return e.fn[f]=m,b._jQueryInterface};var y="collapse",E=e.fn[y],w={toggle:!0,parent:""},T={toggle:"boolean",parent:"(string|element)"},C=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var s=n[i],r=a.getSelectorFromElement(s),l=[].slice.call(document.querySelectorAll(r)).filter((function(e){return e===t}));null!==r&&l.length>0&&(this._selector=r,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var n=t.prototype;return n.toggle=function(){e(this._element).hasClass("show")?this.hide():this.show()},n.show=function(){var n,i,o=this;if(!this._isTransitioning&&!e(this._element).hasClass("show")&&(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),!(n&&(i=e(n).not(this._selector).data("bs.collapse"))&&i._isTransitioning))){var s=e.Event("show.bs.collapse");if(e(this._element).trigger(s),!s.isDefaultPrevented()){n&&(t._jQueryInterface.call(e(n).not(this._selector),"hide"),i||e(n).data("bs.collapse",null));var r=this._getDimension();e(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[r]=0,this._triggerArray.length&&e(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(r[0].toUpperCase()+r.slice(1)),c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){e(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[r]="",o.setTransitioning(!1),e(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(c),this._element.style[r]=this._element[l]+"px"}}},n.hide=function(){var t=this;if(!this._isTransitioning&&e(this._element).hasClass("show")){var n=e.Event("hide.bs.collapse");if(e(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",a.reflow(this._element),e(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s<o;s++){var r=this._triggerArray[s],l=a.getSelectorFromElement(r);if(null!==l)e([].slice.call(document.querySelectorAll(l))).hasClass("show")||e(r).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[i]="";var c=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(){t.setTransitioning(!1),e(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(c)}}},n.setTransitioning=function(t){this._isTransitioning=t},n.dispose=function(){e.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},n._getConfig=function(t){return(t=s({},w,t)).toggle=Boolean(t.toggle),a.typeCheckConfig(y,t,T),t},n._getDimension=function(){return e(this._element).hasClass("width")?"width":"height"},n._getParent=function(){var n,i=this;a.isElement(this._config.parent)?(n=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',s=[].slice.call(n.querySelectorAll(o));return e(s).each((function(e,n){i._addAriaAndCollapsedClass(t._getTargetFromElement(n),[n])})),n},n._addAriaAndCollapsedClass=function(t,n){var i=e(t).hasClass("show");n.length&&e(n).toggleClass("collapsed",!i).attr("aria-expanded",i)},t._getTargetFromElement=function(t){var e=a.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.collapse"),r=s({},w,i.data(),"object"==typeof n&&n?n:{});if(!o&&r.toggle&&"string"==typeof n&&/show|hide/.test(n)&&(r.toggle=!1),o||(o=new t(this,r),i.data("bs.collapse",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return w}}]),t}();e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=e(this),i=a.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));e(o).each((function(){var t=e(this),i=t.data("bs.collapse")?"toggle":n.data();C._jQueryInterface.call(t,i)}))})),e.fn[y]=C._jQueryInterface,e.fn[y].Constructor=C,e.fn[y].noConflict=function(){return e.fn[y]=E,C._jQueryInterface};var S="dropdown",k=e.fn[S],D=new RegExp("38|40|27"),N={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},A={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},I=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var i=t.prototype;return i.toggle=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")){var n=e(this._menu).hasClass("show");t._clearMenus(),n||this.show(!0)}},i.show=function(i){if(void 0===i&&(i=!1),!(this._element.disabled||e(this._element).hasClass("disabled")||e(this._menu).hasClass("show"))){var o={relatedTarget:this._element},s=e.Event("show.bs.dropdown",o),r=t._getParentFromElement(this._element);if(e(r).trigger(s),!s.isDefaultPrevented()){if(!this._inNavbar&&i){if("undefined"==typeof n)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var l=this._element;"parent"===this._config.reference?l=r:a.isElement(this._config.reference)&&(l=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(l=this._config.reference[0])),"scrollParent"!==this._config.boundary&&e(r).addClass("position-static"),this._popper=new n(l,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===e(r).closest(".navbar-nav").length&&e(document.body).children().on("mouseover",null,e.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),e(this._menu).toggleClass("show"),e(r).toggleClass("show").trigger(e.Event("shown.bs.dropdown",o))}}},i.hide=function(){if(!this._element.disabled&&!e(this._element).hasClass("disabled")&&e(this._menu).hasClass("show")){var n={relatedTarget:this._element},i=e.Event("hide.bs.dropdown",n),o=t._getParentFromElement(this._element);e(o).trigger(i),i.isDefaultPrevented()||(this._popper&&this._popper.destroy(),e(this._menu).toggleClass("show"),e(o).toggleClass("show").trigger(e.Event("hidden.bs.dropdown",n)))}},i.dispose=function(){e.removeData(this._element,"bs.dropdown"),e(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},i.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},i._addEventListeners=function(){var t=this;e(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},i._getConfig=function(t){return t=s({},this.constructor.Default,e(this._element).data(),t),a.typeCheckConfig(S,t,this.constructor.DefaultType),t},i._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},i._getPlacement=function(){var t=e(this._element.parentNode),n="bottom-start";return t.hasClass("dropup")?n=e(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?n="right-start":t.hasClass("dropleft")?n="left-start":e(this._menu).hasClass("dropdown-menu-right")&&(n="bottom-end"),n},i._detectNavbar=function(){return e(this._element).closest(".navbar").length>0},i._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},i._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),s({},t,this._config.popperConfig)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.dropdown");if(i||(i=new t(this,"object"==typeof n?n:null),e(this).data("bs.dropdown",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},t._clearMenus=function(n){if(!n||3!==n.which&&("keyup"!==n.type||9===n.which))for(var i=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),o=0,s=i.length;o<s;o++){var r=t._getParentFromElement(i[o]),a=e(i[o]).data("bs.dropdown"),l={relatedTarget:i[o]};if(n&&"click"===n.type&&(l.clickEvent=n),a){var c=a._menu;if(e(r).hasClass("show")&&!(n&&("click"===n.type&&/input|textarea/i.test(n.target.tagName)||"keyup"===n.type&&9===n.which)&&e.contains(r,n.target))){var h=e.Event("hide.bs.dropdown",l);e(r).trigger(h),h.isDefaultPrevented()||("ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),i[o].setAttribute("aria-expanded","false"),a._popper&&a._popper.destroy(),e(c).removeClass("show"),e(r).removeClass("show").trigger(e.Event("hidden.bs.dropdown",l)))}}}},t._getParentFromElement=function(t){var e,n=a.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(n){if(!(/input|textarea/i.test(n.target.tagName)?32===n.which||27!==n.which&&(40!==n.which&&38!==n.which||e(n.target).closest(".dropdown-menu").length):!D.test(n.which))&&!this.disabled&&!e(this).hasClass("disabled")){var i=t._getParentFromElement(this),o=e(i).hasClass("show");if(o||27!==n.which){if(n.preventDefault(),n.stopPropagation(),!o||o&&(27===n.which||32===n.which))return 27===n.which&&e(i.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void e(this).trigger("click");var s=[].slice.call(i.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return e(t).is(":visible")}));if(0!==s.length){var r=s.indexOf(n.target);38===n.which&&r>0&&r--,40===n.which&&r<s.length-1&&r++,r<0&&(r=0),s[r].focus()}}}},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return N}},{key:"DefaultType",get:function(){return A}}]),t}();e(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',I._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",I._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",I._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),I._jQueryInterface.call(e(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),e.fn[S]=I._jQueryInterface,e.fn[S].Constructor=I,e.fn[S].noConflict=function(){return e.fn[S]=k,I._jQueryInterface};var O=e.fn.modal,j={backdrop:!0,keyboard:!0,focus:!0,show:!0},x={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},P=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var n=t.prototype;return n.toggle=function(t){return this._isShown?this.hide():this.show(t)},n.show=function(t){var n=this;if(!this._isShown&&!this._isTransitioning){e(this._element).hasClass("fade")&&(this._isTransitioning=!0);var i=e.Event("show.bs.modal",{relatedTarget:t});e(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),e(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return n.hide(t)})),e(this._dialog).on("mousedown.dismiss.bs.modal",(function(){e(n._element).one("mouseup.dismiss.bs.modal",(function(t){e(t.target).is(n._element)&&(n._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return n._showElement(t)})))}},n.hide=function(t){var n=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var i=e.Event("hide.bs.modal");if(e(this._element).trigger(i),this._isShown&&!i.isDefaultPrevented()){this._isShown=!1;var o=e(this._element).hasClass("fade");if(o&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),e(document).off("focusin.bs.modal"),e(this._element).removeClass("show"),e(this._element).off("click.dismiss.bs.modal"),e(this._dialog).off("mousedown.dismiss.bs.modal"),o){var s=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,(function(t){return n._hideModal(t)})).emulateTransitionEnd(s)}else this._hideModal()}}},n.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return e(t).off(".bs.modal")})),e(document).off("focusin.bs.modal"),e.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},n.handleUpdate=function(){this._adjustDialog()},n._getConfig=function(t){return t=s({},j,t),a.typeCheckConfig("modal",t,x),t},n._triggerBackdropTransition=function(){var t=this;if("static"===this._config.backdrop){var n=e.Event("hidePrevented.bs.modal");if(e(this._element).trigger(n),n.defaultPrevented)return;var i=this._element.scrollHeight>document.documentElement.clientHeight;i||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var o=a.getTransitionDurationFromElement(this._dialog);e(this._element).off(a.TRANSITION_END),e(this._element).one(a.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),i||e(t._element).one(a.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,o)})).emulateTransitionEnd(o),this._element.focus()}else this.hide()},n._showElement=function(t){var n=this,i=e(this._element).hasClass("fade"),o=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),e(this._dialog).hasClass("modal-dialog-scrollable")&&o?o.scrollTop=0:this._element.scrollTop=0,i&&a.reflow(this._element),e(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var s=e.Event("shown.bs.modal",{relatedTarget:t}),r=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,e(n._element).trigger(s)};if(i){var l=a.getTransitionDurationFromElement(this._dialog);e(this._dialog).one(a.TRANSITION_END,r).emulateTransitionEnd(l)}else r()},n._enforceFocus=function(){var t=this;e(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(n){document!==n.target&&t._element!==n.target&&0===e(t._element).has(n.target).length&&t._element.focus()}))},n._setEscapeEvent=function(){var t=this;this._isShown?e(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||e(this._element).off("keydown.dismiss.bs.modal")},n._setResizeEvent=function(){var t=this;this._isShown?e(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):e(window).off("resize.bs.modal")},n._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){e(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),e(t._element).trigger("hidden.bs.modal")}))},n._removeBackdrop=function(){this._backdrop&&(e(this._backdrop).remove(),this._backdrop=null)},n._showBackdrop=function(t){var n=this,i=e(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",i&&this._backdrop.classList.add(i),e(this._backdrop).appendTo(document.body),e(this._element).on("click.dismiss.bs.modal",(function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&n._triggerBackdropTransition()})),i&&a.reflow(this._backdrop),e(this._backdrop).addClass("show"),!t)return;if(!i)return void t();var o=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,t).emulateTransitionEnd(o)}else if(!this._isShown&&this._backdrop){e(this._backdrop).removeClass("show");var s=function(){n._removeBackdrop(),t&&t()};if(e(this._element).hasClass("fade")){var r=a.getTransitionDurationFromElement(this._backdrop);e(this._backdrop).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s()}else t&&t()},n._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},n._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},n._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},n._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var n=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),i=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(n,i){var o=i.style.paddingRight,s=e(i).css("padding-right");e(i).data("padding-right",o).css("padding-right",parseFloat(s)+t._scrollbarWidth+"px")})),e(i).each((function(n,i){var o=i.style.marginRight,s=e(i).css("margin-right");e(i).data("margin-right",o).css("margin-right",parseFloat(s)-t._scrollbarWidth+"px")}));var o=document.body.style.paddingRight,s=e(document.body).css("padding-right");e(document.body).data("padding-right",o).css("padding-right",parseFloat(s)+this._scrollbarWidth+"px")}e(document.body).addClass("modal-open")},n._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));e(t).each((function(t,n){var i=e(n).data("padding-right");e(n).removeData("padding-right"),n.style.paddingRight=i||""}));var n=[].slice.call(document.querySelectorAll(".sticky-top"));e(n).each((function(t,n){var i=e(n).data("margin-right");"undefined"!=typeof i&&e(n).css("margin-right",i).removeData("margin-right")}));var i=e(document.body).data("padding-right");e(document.body).removeData("padding-right"),document.body.style.paddingRight=i||""},n._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(n,i){return this.each((function(){var o=e(this).data("bs.modal"),r=s({},j,e(this).data(),"object"==typeof n&&n?n:{});if(o||(o=new t(this,r),e(this).data("bs.modal",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](i)}else r.show&&o.show(i)}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return j}}]),t}();e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var n,i=this,o=a.getSelectorFromElement(this);o&&(n=document.querySelector(o));var r=e(n).data("bs.modal")?"toggle":s({},e(n).data(),e(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var l=e(n).one("show.bs.modal",(function(t){t.isDefaultPrevented()||l.one("hidden.bs.modal",(function(){e(i).is(":visible")&&i.focus()}))}));P._jQueryInterface.call(e(n),r,this)})),e.fn.modal=P._jQueryInterface,e.fn.modal.Constructor=P,e.fn.modal.noConflict=function(){return e.fn.modal=O,P._jQueryInterface};var R=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],L={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},q=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,F=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function Q(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),s=[].slice.call(i.body.querySelectorAll("*")),r=function(t,n){var i=s[t],r=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var a=[].slice.call(i.attributes),l=[].concat(e["*"]||[],e[r]||[]);a.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===R.indexOf(n)||Boolean(t.nodeValue.match(q)||t.nodeValue.match(F));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,s=i.length;o<s;o++)if(n.match(i[o]))return!0;return!1})(t,l)||i.removeAttribute(t.nodeName)}))},a=0,l=s.length;a<l;a++)r(a);return i.body.innerHTML}var B="tooltip",H=e.fn[B],U=new RegExp("(^|\\s)bs-tooltip\\S+","g"),M=["sanitize","whiteList","sanitizeFn"],W={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},V={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},z={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:L,popperConfig:null},K={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},X=function(){function t(t,e){if("undefined"==typeof n)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var i=t.prototype;return i.enable=function(){this._isEnabled=!0},i.disable=function(){this._isEnabled=!1},i.toggleEnabled=function(){this._isEnabled=!this._isEnabled},i.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},i.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},i.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var o=a.findShadowRoot(this.element),s=e.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var r=this.getTipElement(),l=a.getUID(this.constructor.NAME);r.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&e(r).addClass("fade");var c="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,h=this._getAttachment(c);this.addAttachmentClass(h);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,r,this._getPopperConfig(h)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var d=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=a.getTransitionDurationFromElement(this.tip);e(this.tip).one(a.TRANSITION_END,d).emulateTransitionEnd(f)}else d()}},i.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),s=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var r=a.getTransitionDurationFromElement(i);e(i).one(a.TRANSITION_END,s).emulateTransitionEnd(r)}else s();this._hoverState=""}},i.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},i.isWithContent=function(){return Boolean(this.getTitle())},i.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},i.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},i.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},i.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Q(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},i.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},i._getPopperConfig=function(t){var e=this;return s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},i._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},i._getContainer=function(){return!1===this.config.container?document.body:a.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},i._getAttachment=function(t){return V[t.toUpperCase()]},i._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},i._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},i._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},i._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},i._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},i._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==M.indexOf(t)&&delete n[t]})),"number"==typeof(t=s({},this.constructor.Default,n,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a.typeCheckConfig(B,t,this.constructor.DefaultType),t.sanitize&&(t.template=Q(t.template,t.whiteList,t.sanitizeFn)),t},i._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},i._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(U);null!==n&&n.length&&t.removeClass(n.join(""))},i._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},i._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return z}},{key:"NAME",get:function(){return B}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return K}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return W}}]),t}();e.fn[B]=X._jQueryInterface,e.fn[B].Constructor=X,e.fn[B].noConflict=function(){return e.fn[B]=H,X._jQueryInterface};var Y="popover",$=e.fn[Y],J=new RegExp("(^|\\s)bs-popover\\S+","g"),G=s({},X.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),Z=s({},X.DefaultType,{content:"(string|element|function)"}),tt={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},et=function(t){var n,i;function s(){return t.apply(this,arguments)||this}i=t,(n=s).prototype=Object.create(i.prototype),n.prototype.constructor=n,n.__proto__=i;var r=s.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},r.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(J);null!==n&&n.length>0&&t.removeClass(n.join(""))},s._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new s(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},o(s,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return G}},{key:"NAME",get:function(){return Y}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return tt}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return Z}}]),s}(X);e.fn[Y]=et._jQueryInterface,e.fn[Y].Constructor=et,e.fn[Y].noConflict=function(){return e.fn[Y]=$,et._jQueryInterface};var nt="scrollspy",it=e.fn[nt],ot={offset:10,method:"auto",target:""},st={offset:"number",method:"string",target:"(string|element)"},rt=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,s=a.getSelectorFromElement(t);if(s&&(n=document.querySelector(s)),n){var r=n.getBoundingClientRect();if(r.width||r.height)return[e(n)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},n._getConfig=function(t){if("string"!=typeof(t=s({},ot,"object"==typeof t&&t?t:{})).target&&a.isElement(t.target)){var n=e(t.target).attr("id");n||(n=a.getUID(nt),e(t.target).attr("id",n)),t.target="#"+n}return a.typeCheckConfig(nt,t,st),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},n._activate=function(t){this._activeTarget=t,this._clear();var n=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),i=e([].slice.call(document.querySelectorAll(n.join(","))));i.hasClass("dropdown-item")?(i.closest(".dropdown").find(".dropdown-toggle").addClass("active"),i.addClass("active")):(i.addClass("active"),i.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),i.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),e(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},n._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.scrollspy");if(i||(i=new t(this,"object"==typeof n&&n),e(this).data("bs.scrollspy",i)),"string"==typeof n){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"Default",get:function(){return ot}}]),t}();e(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=t.length;n--;){var i=e(t[n]);rt._jQueryInterface.call(i,i.data())}})),e.fn[nt]=rt._jQueryInterface,e.fn[nt].Constructor=rt,e.fn[nt].noConflict=function(){return e.fn[nt]=it,rt._jQueryInterface};var at=e.fn.tab,lt=function(){function t(t){this._element=t}var n=t.prototype;return n.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass("active")||e(this._element).hasClass("disabled"))){var n,i,o=e(this._element).closest(".nav, .list-group")[0],s=a.getSelectorFromElement(this._element);if(o){var r="UL"===o.nodeName||"OL"===o.nodeName?"> li > .active":".active";i=(i=e.makeArray(e(o).find(r)))[i.length-1]}var l=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(l),e(this._element).trigger(c),!c.isDefaultPrevented()&&!l.isDefaultPrevented()){s&&(n=document.querySelector(s)),this._activate(this._element,o);var h=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,h):h()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,s=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],r=i&&s&&e(s).hasClass("fade"),l=function(){return o._transitionComplete(t,s,i)};if(s&&r){var c=a.getTransitionDurationFromElement(s);e(s).removeClass("show").one(a.TRANSITION_END,l).emulateTransitionEnd(c)}else l()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),a.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&e(t.parentNode).hasClass("dropdown-menu")){var s=e(t).closest(".dropdown")[0];if(s){var r=[].slice.call(s.querySelectorAll(".dropdown-toggle"));e(r).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),lt._jQueryInterface.call(e(this),"show")})),e.fn.tab=lt._jQueryInterface,e.fn.tab.Constructor=lt,e.fn.tab.noConflict=function(){return e.fn.tab=at,lt._jQueryInterface};var ct=e.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},ut={animation:!0,autohide:!0,delay:500},dt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),a.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s({},ut,e(this._element).data(),"object"==typeof t&&t?t:{}),a.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=a.getTransitionDurationFromElement(this._element);e(this._element).one(a.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},n._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},o(t,null,[{key:"VERSION",get:function(){return"4.5.2"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return ut}}]),t}();e.fn.toast=dt._jQueryInterface,e.fn.toast.Constructor=dt,e.fn.toast.noConflict=function(){return e.fn.toast=ct,dt._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=b,t.Collapse=C,t.Dropdown=I,t.Modal=P,t.Popover=et,t.Scrollspy=rt,t.Tab=lt,t.Toast=dt,t.Tooltip=X,t.Util=a,Object.defineProperty(t,"__esModule",{value:!0})})); |
| | | //# sourceMappingURL=bootstrap.min.js.map |
| New file |
| | |
| | | /*
|
| | |
|
| | | Custom script
|
| | |
|
| | | This file will not be overwritten by the updater
|
| | |
|
| | | */ |
| New file |
| | |
| | | /*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ |
| | | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w}); |
| New file |
| | |
| | | /*! jQuery v3.6.2 | (c) OpenJS Foundation and other contributors | jquery.org/license */ |
| | | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},S=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||S).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.2",E=function(e,t){return new E.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:f,constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(n){return this.pushStack(E.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(E.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||E.isPlainObject(n)?n:{},i=!1,a[t]=E.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},E.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?E.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,S,y,s,c,v,E="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector("+c+")"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==r?r:d.attributes||!S?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=y)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[E]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[E]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[E]||(e[E]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,y,v,e){return y&&!y[E]&&(y=Ce(y)),v&&!v[E]&&(v=Ce(v,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(null,t,p,r):H.apply(t,p)})}function Se(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Se(e.slice(s,n)),n<r&&Se(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,y,v,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Se(t[n]))[E]?i.push(a):o.push(a);(a=A(e,(y=o,m=0<(v=i).length,x=0<y.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!S);while(s=y[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=v[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ve(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!S,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=E.split("").sort(j).join("")===E,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=E.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1<i.call(n,e)!==r}):E.filter(n,e,r)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,i[t],n);return 1<r?E.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?E(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&E(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(E(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(r,i){E.fn[r]=function(e,t){var n=E.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=E.filter(t,n)),1<this.length&&(H[r]||E.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},E.each(e.match(P)||[],function(e,t){n[t]=!0}),n):E.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){E.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return E.each(arguments,function(e,t){var n;while(-1<(n=E.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},E.extend({Deferred:function(e){var o=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return E.Deferred(function(r){E.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),C.setTimeout(t))}}return E.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?E.extend(e,a):a}},s={};return E.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=E.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){C.setTimeout(function(){throw e})};var F=E.Deferred();function $(){S.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),E.ready()}E.fn.ready=function(e){return F.then(e)["catch"](function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||F.resolveWith(S,[E])}}),E.ready.then=F.then,"complete"===S.readyState||"loading"!==S.readyState&&!S.documentElement.doScroll?C.setTimeout(E.ready):(S.addEventListener("DOMContentLoaded",$),C.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=E.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||E.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}E.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),E.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):B(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:E.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===n?this:this.each(function(){var e=E.queue(this,t,n);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=E.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=S.documentElement,ie=function(e){return E.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===E.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,"")},u=s(),l=n&&n[3]||(E.cssNumber[t]?"":"px"),c=e.nodeType&&(E.cssNumber[t]||"px"!==l&&+u)&&te.exec(E.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)E.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,E.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=E.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}E.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?E(this).show():E(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,v.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))E.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+E.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;E.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<E.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return S.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Se(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Ee(e,i,o){o?(Y.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&E.event.add(e,i,we)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(re,i),n.guid||(n.guid=E.guid++),(u=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},c=E.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),E.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=E.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||E.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[l],n,r,!0);E.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=E.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=E.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=E.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((E.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<E(i,this).index(l):E.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(t,e){E.event.special[t]={setup:function(){return Ee(this,t,Ce),!1},trigger:function(){return Ee(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){E.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||E.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),E.fn.extend({on:function(e,t,n,r){return Se(this,e,t,n,r)},one:function(e,t,n,r){return Se(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){E.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)E.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=E.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=E.map(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=E.clone(u,!0,!0),s&&E.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,E.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&E.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?E._evalUrl&&!u.noModule&&E._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?E.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||E.cleanData(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(e,"script")),c},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;E.inArray(this,n)<0&&(E.cleanData(ye(this)),t&&t.replaceChild(e,this))},n)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){E.fn[e]=function(e){for(var t,n=[],r=E(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),E(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace($e,"$1")||void 0),""!==a||ie(e)||(a=E.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=S.createElement("div"),l=S.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===l.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=S.createElement("table"),t=S.createElement("tr"),n=S.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=S.createElement("div").style,Xe={};function Ve(e){var t=E.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=E.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=E.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=E.css(e,"border"+ne[a]+"Width",!0,i))):(u+=E.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=E.css(e,"border"+ne[a]+"Width",!0,i):s+=E.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Me(e),i=(!v.boxSizingReliable()||n)&&"border-box"===E.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===E.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===E.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Re.test(t),l=e.style;if(u||(t=Ve(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Re.test(t)||(t=Ve(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,u){E.cssHooks[u]={get:function(e,t,n){if(t)return!Ge.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===E.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=E.css(e,u)),Je(0,t,s)}}}),E.cssHooks.marginLeft=_e(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(i,o){E.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(E.cssHooks[i+o].set=Je)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a<i;a++)o[t[a]]=E.css(e,t[a],!1,r);return o}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=et.prototype.init,E.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===S.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,E.fx.interval),E.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=E.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=E.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(E._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return E.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),E.fx.timer(E.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}E.Animation=E.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=Y.get(e,"fxshow");for(r in n.queue||(null==(a=E._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,E.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=Y.get(e,"display")),"none"===(c=E.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=E.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===E.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)E.style(e,r,d[r])})),u=ct(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&"object"==typeof e?E.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return E.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=E.isEmptyObject(t),o=E.speed(e,n,r),a=function(){var e=ft(this,E.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=E.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||E.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=E.timers,o=n?n.length:0;for(t.finish=!0,E.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,r){var i=E.fn[r];E.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),E.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){E.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),tt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){nt||(nt=!0,st())},E.fx.stop=function(){nt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(r,e){return r=E.fx&&E.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=S.createElement("input"),it=S.createElement("select").appendChild(S.createElement("option")),rt.type="checkbox",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=S.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||E.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function yt(e){return(e.match(P)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){E(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=E(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;E.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,E(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(r=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:yt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=E(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=E.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<E.inArray(E.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||S],d=y.call(e,"type")?e.type:e,h=y.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||S,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+E.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[E.expando]?e:new E.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:E.makeArray(t,[e]),c=E.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||S)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),E.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),E.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){E.event.simulate(r,e.target,E.event.fix(e))};E.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},St=/\?/;E.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||E.error("Invalid XML: "+(n?E.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Et=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))E.each(e,function(e,t){r||Et.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(n+"["+t+"]",e[t],r,i)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Dt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=S.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function $t(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,E.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Bt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Wt.href=Tt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,E.ajaxSettings),t):Bt(E.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,y=E.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?E(v):E.event,x=E.Deferred(),b=E.Callbacks("once memory"),w=y.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(y.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=S.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=E.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=E.event&&y.global)&&0==E.active++&&E.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(St.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(St.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(E.lastModified[f]&&T.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&T.setRequestHeader("If-None-Match",E.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(y,T,n)),!i&&-1<E.inArray("script",y.dataTypes)&&E.inArray("json",y.dataTypes)<0&&(y.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(E.etag[f]=u)),204===e||"HEAD"===y.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--E.active||E.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,i){E[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),E.ajax(E.extend({url:e,type:i,dataType:r,data:t,success:n},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,n){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,n)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){E(this).wrapInner(n.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){E(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=E.ajaxSettings.xhr();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,E.ajaxTransport(function(i){var o,a;if(v.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=E("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=yt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&E.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?E("<div>").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,i},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=A,E.isFunction=m,E.isWindow=x,E.camelCase=X,E.type=w,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return E});var Yt=C.jQuery,Qt=C.$;return E.noConflict=function(e){return C.$===E&&(C.$=Qt),e&&C.jQuery===E&&(C.jQuery=Yt),E},"undefined"==typeof e&&(C.jQuery=C.$=E),E}); |
| New file |
| | |
| | | /*! lazysizes - v5.3.0 */ |
| | | |
| | | !function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a<H.minSize&&t&&!e._lazysizesWidth){a=t.offsetWidth;t=t.parentNode}return a},ee=function(){var a,i;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;a=true;i=false;while(e.length){e.shift()()}a=false};var e=function(e,t){if(a&&!t){e.apply(this,arguments)}else{n.push(e);if(!i){i=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(a,e){return e?function(){ee(a)}:function(){var e=this;var t=arguments;ee(function(){a.apply(e,t)})}},ae=function(e){var a;var i=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){a=false;i=f.now();e()};var s=o&&n>49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e<i){I(n,i-e)}else{(o||r)(r)}};return function(){a=f.now();if(!t){t=I(n,i)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var M=0;var N=-1;var L=function(e){M--;if(!e||M<0||!e.target){M=0}};var x=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var W=function(e,t){var a;var i=e;var r=x(e);g-=t;b+=t;p-=t;C+=t;while(r&&(i=i.offsetParent)&&i!=D.body&&i!=O){r=(Z(i,"opacity")||1)>0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&p<a.right&&b>a.top-1&&g<a.bottom+1}}return r};var t=function(){var e,t,a,i,r,n,s,o,l,u,f,c;var d=k.elements;if((h=H.loadMode)&&M<8&&(e=d.length)){t=0;N++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(o=d[t][$]("data-expand"))||!(n=o*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&M<1&&N>2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>2&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",i)}}if(!a.detail.dataAttr){Y(e,a.detail)}});var i=function(e,t,a){var i;var r=e.parentNode;if(r){a=s(e,r,a);i=X(e,"lazybeforesizes",{width:a,dataAttr:!!t});if(!i.defaultPrevented){a=i.detail.width;if(a&&a!==e._lazysizesWidth){n(e,r,i,a)}}}};var e=function(){var e;var t=a.length;if(t){e=0;for(;e<t;e++){i(a[e])}}};var t=ie(e);return{_:function(){a=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:i}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{}); |
| New file |
| | |
| | | "use strict";
|
| | | if ($('#tpl-comment-section').length) {
|
| | | const gameId = $('#tpl-comment-section').attr('data-id');
|
| | | const commentSystem = new CommentSystem(gameId);
|
| | | }
|
| | | $(function() {
|
| | | const formSearch = document.querySelector("form.search-bar");
|
| | | if (formSearch) {
|
| | | formSearch.addEventListener("submit", function(event) {
|
| | | event.preventDefault();
|
| | | const input = formSearch.querySelector("input[name='slug']");
|
| | | const sanitizedValue = input.value.replace(/ /g, "-");
|
| | | input.value = sanitizedValue;
|
| | | if (input.value.length >= 2) {
|
| | | formSearch.submit();
|
| | | }
|
| | | });
|
| | | }
|
| | | // Load more games
|
| | | let last_offset = 0;
|
| | | let load_amount = 0;
|
| | | const newGamesContainer = $('#section-new-games');
|
| | |
|
| | | if (newGamesContainer.length) {
|
| | | load_amount = newGamesContainer.children().length;
|
| | | last_offset = newGamesContainer.children().length;
|
| | | if (load_amount < 12) {
|
| | | $('.btn-load-more-games').remove();
|
| | | } else {
|
| | | $('.btn-load-more-games').click(() => {
|
| | | fetchMoreGames(load_amount, 'new');
|
| | | });
|
| | | }
|
| | | }
|
| | |
|
| | | async function fetchMoreGames(amount, sort_by) {
|
| | | try {
|
| | | const response = await $.ajax({
|
| | | url: "/includes/fetch.php",
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {amount: amount, offset: last_offset, sort_by: sort_by},
|
| | | });
|
| | | appendFetchedGames(response);
|
| | | } catch (error) {
|
| | | console.log(error);
|
| | | }
|
| | | }
|
| | |
|
| | | function appendFetchedGames(data) {
|
| | | last_offset += data.length;
|
| | | const templateHTML = $('.item-append-template').html(); // Get the inner HTML of the template
|
| | | data.forEach((item) => {
|
| | | let rating = 0;
|
| | | item['upvote'] = Number(item['upvote']);
|
| | | item['downvote'] = Number(item['downvote']);
|
| | | let totalRevs = item['upvote']+item['downvote'];
|
| | | if(totalRevs > 0){
|
| | | rating = (Math.round((item['upvote']/(item['upvote']+item['downvote'])) * 5));
|
| | | }
|
| | | // Clone the HTML template
|
| | | let clonedHTML = templateHTML;
|
| | | // Replace placeholders
|
| | | console.log(item['title'])
|
| | | clonedHTML = clonedHTML.replace(/{{slug}}/g, item['slug']);
|
| | | clonedHTML = clonedHTML.replace(/{{thumbnail}}/g, item['thumb_2']);
|
| | | clonedHTML = clonedHTML.replace(/{{title}}/g, item['title']);
|
| | | clonedHTML = clonedHTML.replace(/{{rating}}/g, rating);
|
| | | // Convert the HTML string to a jQuery object
|
| | | const clonedElement = $(clonedHTML);
|
| | | // Further modifications if necessary, for example, replacing the rating image src
|
| | | // Append the new element to newGamesContainer
|
| | | newGamesContainer.append(clonedElement);
|
| | | });
|
| | | if (data.length < load_amount) {
|
| | | $('.btn-load-more-games').remove();
|
| | | }
|
| | | }
|
| | | // End
|
| | | var $nav = $('nav.greedy');
|
| | | var $btn = $('nav.greedy button');
|
| | | var $vlinks = $('nav.greedy .links');
|
| | | var $hlinks = $('nav.greedy .hidden-links');
|
| | |
|
| | | var numOfItems = 0;
|
| | | var totalSpace = 0;
|
| | | var breakWidths = [];
|
| | |
|
| | | // Get initial state
|
| | | $vlinks.children().outerWidth(function(i, w) {
|
| | | totalSpace += w;
|
| | | numOfItems += 1;
|
| | | breakWidths.push(totalSpace);
|
| | | });
|
| | |
|
| | | var availableSpace, numOfVisibleItems, requiredSpace;
|
| | |
|
| | | function check() {
|
| | |
|
| | | // Get instant state
|
| | | availableSpace = $vlinks.width() - 10;
|
| | | numOfVisibleItems = $vlinks.children().length;
|
| | | requiredSpace = breakWidths[numOfVisibleItems - 1];
|
| | |
|
| | | // There is not enought space
|
| | | if (requiredSpace > availableSpace) {
|
| | | $vlinks.children().last().prependTo($hlinks);
|
| | | numOfVisibleItems -= 1;
|
| | | check();
|
| | | // There is more than enough space
|
| | | } else if (availableSpace > breakWidths[numOfVisibleItems]) {
|
| | | $hlinks.children().first().appendTo($vlinks);
|
| | | numOfVisibleItems += 1;
|
| | | }
|
| | | // Update the button accordingly
|
| | | $btn.attr("count", numOfItems - numOfVisibleItems);
|
| | | if (numOfVisibleItems === numOfItems) {
|
| | | $btn.addClass('hidden');
|
| | | } else $btn.removeClass('hidden');
|
| | | }
|
| | |
|
| | | // Window listeners
|
| | | $(window).resize(function() {
|
| | | check();
|
| | | });
|
| | |
|
| | | $btn.on('click', function() {
|
| | | $hlinks.toggleClass('hidden');
|
| | | });
|
| | |
|
| | | check();
|
| | |
|
| | | });
|
| | | function open_fullscreen() {
|
| | | let game = document.getElementById("game-area");
|
| | | if (game.requestFullscreen) {
|
| | | game.requestFullscreen();
|
| | | } else if (game.mozRequestFullScreen) { /* Firefox */
|
| | | game.mozRequestFullScreen();
|
| | | } else if (game.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
|
| | | game.webkitRequestFullscreen();
|
| | | } else if (game.msRequestFullscreen) { /* IE/Edge */
|
| | | game.msRequestFullscreen();
|
| | | }
|
| | | };
|
| | | var can_resize = false;
|
| | | if($('iframe#game-area').length){
|
| | | can_resize = true;
|
| | | resize_game_iframe();
|
| | | load_leaderboard({type: 'top', amount: 10});
|
| | | }
|
| | | function resize_game_iframe(){
|
| | | if(can_resize){
|
| | | let iframe = $("iframe.game-iframe");
|
| | | let size = {
|
| | | width: Number(iframe.attr('width')),
|
| | | height: Number(iframe.attr('height')),
|
| | | }
|
| | | let ratio = (size.height/size.width)*100;
|
| | | let win_ratio = (window.innerHeight/window.innerWidth)*100;
|
| | | if(win_ratio <= 110){
|
| | | if(ratio > 80){
|
| | | ratio = 80;
|
| | | }
|
| | | } else if(win_ratio >= 130){
|
| | | if(ratio < 100){
|
| | | ratio = 100;
|
| | | }
|
| | | }
|
| | | //console.log(ratio);
|
| | | //console.log(win_ratio);
|
| | | $('.game-iframe-container').css('padding-top', ratio+'%');
|
| | | }
|
| | | }
|
| | | function load_leaderboard(conf){
|
| | | if($('#content-leaderboard').length){
|
| | | let g_id = $('#content-leaderboard').data('id');
|
| | | $.ajax({
|
| | | url: '/includes/api.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'action': 'get_scoreboard', 'game-id': g_id, 'conf': JSON.stringify(conf)},
|
| | | complete: function (data) {
|
| | | if(data.responseText){
|
| | | show_leaderboard(JSON.parse(data.responseText));
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | | function show_leaderboard(data){
|
| | | let html = '<table class="table"><thead class="thead-dark"><tr><th scope="col">#</th><th scope="col">Username</th><th scope="col">Score</th><th scope="col">Date</th></tr></thead><tbody>';
|
| | | let index = 1;
|
| | | data.forEach((item)=>{
|
| | | html += '<tr><th scope="row">'+index+'</th><td>'+item.username+'</td><td>'+item.score+'</td><td>'+item.created_date.substr(0, 10)+'</td></tr>';
|
| | | index++;
|
| | | });
|
| | | html += '</tbody></table>';
|
| | | $('#content-leaderboard').html(html);
|
| | | }
|
| | | (function(){
|
| | | $("#navb").on('show.bs.collapse', function(){
|
| | | $('.user-avatar').hide();
|
| | | });
|
| | | $("#navb").on('hidden.bs.collapse', function(){
|
| | | $('.user-avatar').show();
|
| | | });
|
| | | resize_game_iframe();
|
| | | $(window).resize(function() {
|
| | | resize_game_iframe();
|
| | | });
|
| | | $('.stats-vote #favorite').on('click', function() {
|
| | | let data_id = $(this).attr('data-id');
|
| | | let btn = $(this);
|
| | | $.ajax({
|
| | | url: '/includes/vote.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'favorite': true, 'action': 'favorite', 'id': data_id},
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | btn.addClass('active');
|
| | | btn.addClass('disabled');
|
| | | }
|
| | | });
|
| | | });
|
| | | $('.stats-vote #upvote').on('click', function() {
|
| | | let data_id = $(this).attr('data-id');
|
| | | $.ajax({
|
| | | url: '/includes/vote.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'vote': true, 'action': 'upvote', 'id': data_id},
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | $('.icon-vote').hide();
|
| | | let elem = $('.vote-status');
|
| | | elem.addClass('text-success');
|
| | | elem.append('Liked!');
|
| | | }
|
| | | });
|
| | | });
|
| | | $('.stats-vote #downvote').on('click', function() {
|
| | | let data_id = $(this).attr('data-id');
|
| | | $.ajax({
|
| | | url: '/includes/vote.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'vote': true, 'action': 'downvote', 'id': data_id},
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | $('.icon-vote').hide();
|
| | | let elem = $('.vote-status');
|
| | | elem.addClass('text-danger');
|
| | | elem.append('Disliked!');
|
| | | }
|
| | | });
|
| | | });
|
| | | $('.user-avatar').on('click', ()=>{
|
| | | let element = $('.user-links');
|
| | | if (element.is(":hidden")) {
|
| | | element.removeClass('hidden');
|
| | | } else element.addClass('hidden');
|
| | | });
|
| | | $('#btn_prev').on('click', function() {
|
| | | $('.profile-gamelist ul').animate({
|
| | | scrollLeft: '-=150'
|
| | | }, 300, 'swing');
|
| | | });
|
| | | |
| | | $('#btn_next').on('click', function() {
|
| | | $('.profile-gamelist ul').animate({
|
| | | scrollLeft: '+=150'
|
| | | }, 300, 'swing');
|
| | | });
|
| | | $('#f_prev').on('click', function() {
|
| | | $('.favorite-gamelist ul').animate({
|
| | | scrollLeft: '-=150'
|
| | | }, 300, 'swing');
|
| | | });
|
| | | |
| | | $('#f_next').on('click', function() {
|
| | | $('.favorite-gamelist ul').animate({
|
| | | scrollLeft: '+=150'
|
| | | }, 300, 'swing');
|
| | | });
|
| | | $('.delete-comment').on('click', function() {
|
| | | let id = $(this).attr('data-id');
|
| | | $.ajax({
|
| | | url: '/includes/comment.php',
|
| | | type: 'POST',
|
| | | dataType: 'json',
|
| | | data: {'delete': true, 'id': id},
|
| | | success: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | error: function (data) {
|
| | | //console.log(data.responseText);
|
| | | },
|
| | | complete: function (data) {
|
| | | console.log(data.responseText);
|
| | | if(data.responseText === 'deleted'){
|
| | | $('.id-'+id).remove();
|
| | | }
|
| | | }
|
| | | }, this);
|
| | | });
|
| | | })(); |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <div class="row">
|
| | | <div class="col-md-9">
|
| | | <h1 class="singlepage-title"><?php echo htmlspecialchars( $page->title )?></h1>
|
| | | <div class="page-content">
|
| | | <?php echo nl2br($page->content) ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-3">
|
| | | <?php include TEMPLATE_PATH . "/parts/sidebar.php" ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <nav class='greedy'>
|
| | | <?php list_categories() ?>
|
| | | <button><?php _e('MORE') ?></button>
|
| | | <ul class='hidden-links hidden'></ul>
|
| | | </nav> |
| New file |
| | |
| | | <div class="navbar-collapse collapse justify-content-end" id="navb">
|
| | | <ul class="navbar-nav ml-auto text-uppercase">
|
| | | <?php render_nav_menu('top_nav', array(
|
| | | 'no_ul' => true,
|
| | | 'li_class' => 'nav-item',
|
| | | 'a_class' => 'nav-link',
|
| | | )); ?>
|
| | | <li class="nav-item">
|
| | | <?php
|
| | | if(is_null($login_user)){
|
| | | if(get_setting_value('show_login')){
|
| | | echo('<a class="nav-link" href="'.get_permalink('login').'">'._t('Login').'</a>');
|
| | | }
|
| | | }
|
| | | ?>
|
| | | </li>
|
| | | </ul>
|
| | | <form class="form-inline my-2 my-lg-0 search-bar" action="/index.php">
|
| | | <div class="input-group">
|
| | | <input type="hidden" name="viewpage" value="search" />
|
| | | <input type="text" class="form-control rounded-left search" placeholder="<?php _e('Search game') ?>" name="slug" minlength="2" required />
|
| | | <div class="input-group-append">
|
| | | <button type="submit" class="btn btn-secondary" type="button">
|
| | | <i class="fa fa-search"></i>
|
| | | </button>
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | | </div> |
| New file |
| | |
| | | <div class="sidebar">
|
| | | <?php widget_aside('sidebar-1') ?>
|
| | | </div> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="post-container">
|
| | | <div class="content-wrapper">
|
| | | <h3 class="page-title"><?php _e('LATEST POSTS') ?></h3>
|
| | | <section class="blog-list">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($url_params[1])){
|
| | | $_GET['page'] = $url_params[1];
|
| | | if(!is_numeric($_GET['page'])){
|
| | | $_GET['page'] = 1;
|
| | | }
|
| | | }
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = htmlspecialchars($_GET['page']);
|
| | | if(!is_numeric($cur_page)){
|
| | | $cur_page = 1;
|
| | | }
|
| | | }
|
| | | $items_per_page = get_setting_value('post_results_per_page');
|
| | | $data = Post::getList($items_per_page, 'created_date DESC', $items_per_page*($cur_page-1));
|
| | | $total_posts = $data['totalRows'];
|
| | | $total_page = $data['totalPages'];
|
| | | $posts = $data['results'];
|
| | | foreach($posts as $post){
|
| | | ?>
|
| | | <div class="post-item">
|
| | | <div class="post-media">
|
| | | <div class="post-thumb">
|
| | | <img src="<?php echo ($post->thumbnail_url) ? $post->thumbnail_url : DOMAIN . 'images/post-no-thumb.png' ?>" alt="<?php echo $post->title ?>">
|
| | | </div>
|
| | | <div class="post-body">
|
| | | <h3 class="post-title">
|
| | | <a href="<?php echo get_permalink('post', $post->slug) ?>"><?php echo $post->title ?></a>
|
| | | </h3>
|
| | | <div class="post-meta">
|
| | | <span class="date">Published on <?php echo gmdate("j M Y", $post->created_date) ?></span>
|
| | | </div>
|
| | | <div class="post-intro">
|
| | | <?php echo mb_strimwidth(strip_tags($post->content), 0, 250, "...") ?>
|
| | | </div>
|
| | | <a class="more-link" href="<?php echo get_permalink('post', $post->slug) ?>">Read more →</a>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | ?>
|
| | | </section>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation example">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = esc_string($_GET['page']);
|
| | | }
|
| | | render_pagination($total_page, $cur_page, 8, 'post', '');
|
| | | ?>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <div class="row">
|
| | | <div class="col-md-9">
|
| | | <h1 class="singlepage-title"><?php echo htmlspecialchars( $post->title )?></h1>
|
| | | <div class="post-meta">
|
| | | Published on <?php echo gmdate("j M Y", $post->created_date) ?>
|
| | | </div>
|
| | | <div class="page-content">
|
| | | <?php echo nl2br($post->content) ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="col-md-3">
|
| | | <?php include TEMPLATE_PATH . "/parts/sidebar.php" ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <div class="content-wrapper">
|
| | | <h3 class="item-title"><?php _e('%a Games', htmlspecialchars($archive_title)) ?></h3>
|
| | | <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
|
| | | <div class="game-container">
|
| | | <div class="row">
|
| | | <?php foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation example">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($url_params[2])){
|
| | | $cur_page = (int)$url_params[2];
|
| | | }
|
| | | render_pagination($total_page, $cur_page, 8, 'search', $_GET['slug']);
|
| | | ?>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | /*! |
| | | * Bootstrap v4.5.2 (https://getbootstrap.com/) |
| | | * Copyright 2011-2020 The Bootstrap Authors |
| | | * Copyright 2011-2020 Twitter, Inc. |
| | | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) |
| | | */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} |
| New file |
| | |
| | | /*
|
| | |
|
| | | Custom style
|
| | |
|
| | | You can override the default class or style here
|
| | |
|
| | | This file will not be overwritten by the updater
|
| | |
|
| | | */ |
| New file |
| | |
| | | /*jquery-comments.js 1.5.0
|
| | |
|
| | | (c) 2017 Joona Tykkyläinen, Viima Solutions Oy
|
| | | jquery-comments may be freely distributed under the MIT license.
|
| | | For all details and documentation:
|
| | | http://viima.github.io/jquery-comments/*/
|
| | |
|
| | | .jquery-comments * {
|
| | | box-sizing: border-box;
|
| | | text-shadow: none;
|
| | | }
|
| | |
|
| | | .jquery-comments a[href]:not(.tag) {
|
| | | color: #2793e6;
|
| | | text-decoration: none;
|
| | | }
|
| | |
|
| | | .jquery-comments a[href]:not(.tag):hover {
|
| | | text-decoration: underline;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea, .jquery-comments input, .jquery-comments button {
|
| | | -webkit-appearance: none;
|
| | | -moz-appearance: none;
|
| | | -ms-appearance: none;
|
| | | appearance: none;
|
| | |
|
| | | vertical-align: top;
|
| | | border-radius: 0;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | border: 0;
|
| | | outline: 0;
|
| | | background: rgba(0, 0, 0, 0);
|
| | | }
|
| | |
|
| | | .jquery-comments button {
|
| | | vertical-align: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments .tag {
|
| | | color: inherit;
|
| | | font-size: 0.9em;
|
| | | line-height: 1.2em;
|
| | | background: #ddd;
|
| | | border: 1px solid #ccc;
|
| | | padding: 0.05em 0.4em;
|
| | | cursor: pointer;
|
| | | font-weight: normal;
|
| | | border-radius: 1em;
|
| | | transition: all 0.2s linear;
|
| | | white-space: nowrap;
|
| | | display: inline-block;
|
| | | text-decoration: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .attachments .tag {
|
| | | white-space: normal;
|
| | | word-break: break-all;
|
| | |
|
| | | padding: 0.05em 0.5em;
|
| | | line-height: 1.3em;
|
| | |
|
| | | margin-top: 0.3em;
|
| | | margin-right: 0.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments .attachments .tag > i:first-child {
|
| | | margin-right: 0.4em;
|
| | | }
|
| | |
|
| | | .jquery-comments .attachments .tag .delete {
|
| | | display: inline;
|
| | | font-size: 14px;
|
| | | color: #888;
|
| | | |
| | | position: relative;
|
| | | padding: 2px;
|
| | | padding-right: 4px;
|
| | | right: -4px;
|
| | | }
|
| | |
|
| | | .jquery-comments .attachments .tag:hover .delete {
|
| | | color: black;
|
| | | }
|
| | |
|
| | | .jquery-comments .tag:hover {
|
| | | text-decoration: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .tag:not(.deletable):hover {
|
| | | background-color: #d8edf8;
|
| | | border-color: #2793e6;
|
| | | }
|
| | |
|
| | | .jquery-comments [contentEditable=true]:empty:not(:focus):before{
|
| | | content:attr(data-placeholder);
|
| | | color: #CCC;
|
| | | position: inherit;
|
| | | pointer-events: none;
|
| | | }
|
| | |
|
| | | .jquery-comments i.fa {
|
| | | width: 1em;
|
| | | height: 1em;
|
| | | background-size: cover;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .jquery-comments i.fa.image:before {
|
| | | content: "";
|
| | | }
|
| | |
|
| | | .jquery-comments .spinner {
|
| | | font-size: 2em;
|
| | | text-align: center;
|
| | | padding: 0.5em;
|
| | | margin: 0;
|
| | | color: #666;
|
| | | }
|
| | |
|
| | | .jquery-comments .spinner.inline {
|
| | | font-size: inherit;
|
| | | padding: 0;
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | .jquery-comments ul {
|
| | | list-style: none;
|
| | | padding: 0;
|
| | | margin: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments .profile-picture {
|
| | | float: left;
|
| | | width: 3.6rem;
|
| | | height: 3.6rem;
|
| | | max-width: 50px;
|
| | | max-height: 50px;
|
| | | background-size: cover;
|
| | | background-repeat: no-repeat;
|
| | | background-position: center center;
|
| | | }
|
| | |
|
| | | .jquery-comments i.profile-picture {
|
| | | font-size: 3.4em;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .jquery-comments .profile-picture.round {
|
| | | border-radius: 50%;
|
| | | }
|
| | |
|
| | | .jquery-comments .commenting-field.main{
|
| | | margin-bottom: 0.75em;
|
| | | }
|
| | |
|
| | | .jquery-comments .commenting-field.main .profile-picture {
|
| | | margin-bottom: 1rem;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper {
|
| | | overflow: hidden;
|
| | | padding-left: 15px;
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper:before {
|
| | | content: " ";
|
| | | position: absolute;
|
| | | border: 5px solid #D5D5D5;
|
| | | left: 5px;
|
| | | top: 0;
|
| | | width: 10px;
|
| | | height: 10px;
|
| | | box-sizing: border-box;
|
| | | border-bottom-color: rgba(0, 0, 0, 0);
|
| | | border-left-color: rgba(0, 0, 0, 0);
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper:after {
|
| | | content: " ";
|
| | | position: absolute;
|
| | | border: 7px solid #FFF;
|
| | | left: 7px;
|
| | | top: 1px;
|
| | | width: 10px;
|
| | | height: 10px;
|
| | | box-sizing: border-box;
|
| | | border-bottom-color: rgba(0, 0, 0, 0);
|
| | | border-left-color: rgba(0, 0, 0, 0);
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .inline-button {
|
| | | cursor: pointer;
|
| | | right: 0;
|
| | | z-index: 10;
|
| | | position: absolute;
|
| | | border: .5em solid rgba(0,0,0,0);
|
| | | box-sizing: content-box;
|
| | | font-size: inherit;
|
| | | overflow: hidden;
|
| | | opacity: 0.5;
|
| | |
|
| | | -webkit-user-select: none;
|
| | | -moz-user-select: none;
|
| | | -ms-user-select: none;
|
| | | user-select: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .inline-button:hover {
|
| | | opacity: 1;
|
| | | }
|
| | |
|
| | | .jquery-comments:not(.mobile) .commenting-field-scrollable .textarea-wrapper .inline-button {
|
| | | margin-right: 15px; /* Because of scrollbar */
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .inline-button i {
|
| | | font-size: 1.2em;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .upload input {
|
| | | cursor: pointer;
|
| | | position: absolute;
|
| | | top: 0;
|
| | | right: 0;
|
| | | min-width: 100%;
|
| | | height: 100%;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | opacity: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .close {
|
| | | width: 1em;
|
| | | height: 1em;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .textarea {
|
| | | margin: 0;
|
| | | outline: 0;
|
| | | overflow-y: auto;
|
| | | overflow-x: hidden;
|
| | | cursor: text;
|
| | |
|
| | | border: 1px solid #CCC;;
|
| | | background: #FFF;
|
| | | font-size: 1em;
|
| | | line-height: 1.45em;
|
| | | padding: .25em .8em;
|
| | | padding-right: 2em;
|
| | | }
|
| | |
|
| | | .jquery-comments:not(.mobile) .commenting-field-scrollable .textarea-wrapper .textarea {
|
| | | padding-right: calc(2em + 15px); /* Because of scrollbar */
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > .attachments {
|
| | | padding-top: .3em;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span {
|
| | | float: right;
|
| | | line-height: 1.6em;
|
| | | margin-top: .4em;
|
| | | border: 1px solid rgba(0, 0, 0, 0);
|
| | | color: #FFF;
|
| | | padding: 0 1em;
|
| | | font-size: 1em;
|
| | | opacity: .5;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span:not(:first-child) {
|
| | | margin-right: .5em;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span.enabled {
|
| | | opacity: 1;
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span:not(.enabled) {
|
| | | pointer-events: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span.enabled:hover {
|
| | | opacity: .9;
|
| | | }
|
| | |
|
| | | .jquery-comments .textarea-wrapper .control-row > span.upload {
|
| | | position: relative;
|
| | | overflow: hidden;
|
| | | background-color: #999;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation {
|
| | | clear: both;
|
| | |
|
| | | color: #999;
|
| | | border-bottom: 2px solid #CCC;
|
| | | line-height: 2em;
|
| | | font-size: 1em;
|
| | | margin-bottom: 0.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper {
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li {
|
| | | display: inline-block;
|
| | | position: relative;
|
| | | padding: 0 1em;
|
| | | cursor: pointer;
|
| | | text-align: center;
|
| | |
|
| | | -webkit-user-select: none;
|
| | | -moz-user-select: none;
|
| | | -ms-user-select: none;
|
| | | user-select: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li.active,
|
| | | .jquery-comments ul.navigation li:hover {
|
| | | color: #000;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li.active:after {
|
| | | content: " ";
|
| | | display: block;
|
| | | right: 0;
|
| | | height: 2px;
|
| | | background: #000;
|
| | | position: absolute;
|
| | | bottom: -2px;
|
| | | left: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li[data-sort-key="attachments"] {
|
| | | float: right;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation li[data-sort-key="attachments"] i {
|
| | | margin-right: 0.25em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | @media screen and (max-width: 600px) {
|
| | | .jquery-comments ul.navigation .navigation-wrapper {
|
| | | display: none;
|
| | | }
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive {
|
| | | display: inline;
|
| | | }
|
| | | }
|
| | |
|
| | | .jquery-comments.responsive ul.navigation .navigation-wrapper {
|
| | | display: none;
|
| | | }
|
| | | .jquery-comments.responsive ul.navigation .navigation-wrapper.responsive {
|
| | | display: inline;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive li.title {
|
| | | padding: 0 1.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive li.title header:after {
|
| | | display: inline-block;
|
| | | content: "";
|
| | | border-left: 0.3em solid rgba(0, 0, 0, 0) !important;
|
| | | border-right: 0.3em solid rgba(0, 0, 0, 0) !important;
|
| | | border-top: 0.4em solid #CCC;
|
| | | margin-left: 0.5em;
|
| | | position: relative;
|
| | | top: -0.1em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive li.title.active header:after,
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive li.title:hover header:after {
|
| | | border-top-color: #000;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown {
|
| | | display: none;
|
| | | position: absolute;
|
| | | background: #FFF;
|
| | | z-index: 99;
|
| | | line-height: 1.2em;
|
| | |
|
| | | border: 1px solid #CCC;
|
| | | box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
| | | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
| | | -moz-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
| | | -ms-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown.autocomplete {
|
| | | margin-top: 0.25em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li {
|
| | | display: block;
|
| | | white-space: nowrap;
|
| | | clear: both;
|
| | | padding: 0.6em;
|
| | | font-weight: normal;
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li.active {
|
| | | background: #EEE;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li a {
|
| | | display: block;
|
| | | text-decoration: none;
|
| | | color: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .profile-picture {
|
| | | float: left;
|
| | | width: 2.4em;
|
| | | height: 2.4em;
|
| | | margin-right: 0.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .details {
|
| | | display: inline-block;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .name {
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .details.no-email {
|
| | | line-height: 2.4em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.dropdown li .email {
|
| | | color: #999;
|
| | | font-size: 0.95em;
|
| | | margin-top: 0.1em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown {
|
| | | left: 0;
|
| | | width: 100%;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li {
|
| | | color: #000;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li.active {
|
| | | color: #FFF;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li:hover:not(.active) {
|
| | | background: #F5F5F5;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.navigation .navigation-wrapper.responsive ul.dropdown li:after {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments .no-data {
|
| | | display: none;
|
| | | margin: 1em;
|
| | | text-align: center;
|
| | | font-size: 1.5em;
|
| | | color: #CCC;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main:empty ~ .no-comments {
|
| | | display: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul#attachment-list:empty ~ .no-attachments {
|
| | | display: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment {
|
| | | clear: both;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-wrapper,
|
| | | .jquery-comments ul.main li.toggle-all,
|
| | | .jquery-comments ul.main li.comment .commenting-field {
|
| | | padding: .5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-wrapper {
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main > li.comment:first-child > .comment-wrapper {
|
| | | border-top: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-wrapper > .profile-picture {
|
| | | margin-right: 1rem;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment time {
|
| | | float: right;
|
| | | line-height: 1.4em;
|
| | | margin-left: .5em;
|
| | | font-size: 0.8em;
|
| | | color: #666;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header {
|
| | | line-height: 1.4em;
|
| | | word-break: break-word;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header > * {
|
| | | margin-right: .5rem;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header .name {
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header .reply-to {
|
| | | color: #999;
|
| | | font-size: .8em;
|
| | | font-weight: normal;
|
| | | vertical-align: top;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header .reply-to i {
|
| | | margin-right: .25rem;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .comment-header .new {
|
| | | background: #2793e6;
|
| | | font-size: 0.8em;
|
| | | padding: 0.2em 0.6em;
|
| | | color: #fff;
|
| | | font-weight: normal;
|
| | | border-radius: 1em;
|
| | | vertical-align: bottom;
|
| | | word-break: normal;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper{
|
| | | line-height: 1.4em;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .jquery-comments.mobile ul.main li.comment .child-comments li.comment .wrapper{
|
| | | overflow: visible;
|
| | | }
|
| | |
|
| | | /* Content */
|
| | | .jquery-comments ul.main li.comment .wrapper .content {
|
| | | white-space: pre-line;
|
| | | word-break: break-word;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .content time.edited {
|
| | | float: inherit;
|
| | | margin: 0;
|
| | | font-size: .9em;
|
| | | font-style: italic;
|
| | | color: #999;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .content time.edited:before {
|
| | | content: " - ";
|
| | | }
|
| | |
|
| | | /* Attachments */
|
| | | .jquery-comments ul.main li.comment .wrapper .attachments .tags:not(:empty) {
|
| | | margin-bottom: 0.5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .attachments .previews .preview {
|
| | | display: inline-block;
|
| | | margin-top: .25em;
|
| | | margin-right: .25em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .attachments .previews .preview > * {
|
| | | max-width: 100%;
|
| | | max-height: 200px;
|
| | | width: auto;
|
| | | height: auto;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .wrapper .attachments .previews .preview > *:focus {
|
| | | outline: none;
|
| | | }
|
| | |
|
| | | /* Actions */
|
| | | .jquery-comments.mobile ul.main li.comment .actions {
|
| | | font-size: 1em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions > * {
|
| | | color: #999;
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action {
|
| | | display: inline-block;
|
| | | cursor: pointer;
|
| | | margin-left: 1em;
|
| | | margin-right: 1em;
|
| | | line-height: 1.5em;
|
| | | font-size: 0.9em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action:first-child {
|
| | | margin-left: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote {
|
| | | cursor: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote .upvote-count {
|
| | | margin-right: .5em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote .upvote-count:empty {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote i {
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action:not(.upvote):hover,
|
| | | .jquery-comments ul.main li.comment .actions .action.upvote:not(.highlight-font) i:hover {
|
| | | color: #666;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.delete {
|
| | | opacity: 0.5;
|
| | | pointer-events: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .actions .action.delete.enabled {
|
| | | opacity: 1;
|
| | | pointer-events: auto;
|
| | | }
|
| | |
|
| | | .jquery-comments ul#attachment-list li.comment .actions .action:not(.delete) {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul#attachment-list li.comment .actions .action.delete {
|
| | | margin: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments ul#attachment-list li.comment .actions .separator {
|
| | | display: none;
|
| | | }
|
| | |
|
| | |
|
| | | /* Child comments */
|
| | | .jquery-comments ul.main li.comment .child-comments > *:before { /* Margin for second level content */
|
| | | content: "";
|
| | | height: 1px;
|
| | | float: left;
|
| | |
|
| | | width: calc(3.6em + .5em); /* Profile picture width plus margin */
|
| | | max-width: calc(50px + .5em); /* Profile picture max width plus margin */
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments .profile-picture {
|
| | | width: 2.4rem;
|
| | | height: 2.4rem;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments i.profile-picture {
|
| | | font-size: 2.4em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all {
|
| | | padding-top: 0;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all span:first-child {
|
| | | vertical-align: middle;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all span:first-child:hover {
|
| | | cursor: pointer;
|
| | | text-decoration: underline;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all .caret {
|
| | | display: inline-block;
|
| | | vertical-align: middle;
|
| | | width: 0;
|
| | | height: 0;
|
| | |
|
| | | margin-left: .5em;
|
| | | border: .3em solid;
|
| | | margin-top: .35em;
|
| | |
|
| | | border-left-color: rgba(0, 0, 0, 0);
|
| | | border-bottom-color: rgba(0, 0, 0, 0);
|
| | | border-right-color: rgba(0, 0, 0, 0);
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments li.toggle-all .caret.up {
|
| | | border-top-color: rgba(0, 0, 0, 0);
|
| | | border-bottom-color: inherit;
|
| | | margin-top: -.2em;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments .togglable-reply {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment .child-comments .visible {
|
| | | display: inherit;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment.hidden {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | /* Editing comment */
|
| | | .jquery-comments ul.main li.comment.edit > .comment-wrapper > *:not(.commenting-field) {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .jquery-comments ul.main li.comment.edit > .comment-wrapper .commenting-field {
|
| | | padding-left: 0 !important;
|
| | | padding-right: 0 !important;
|
| | | }
|
| | |
|
| | | /* Drag & drop attachments */
|
| | | .jquery-comments.drag-ongoing {
|
| | | overflow-y: hidden !important;
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay {
|
| | | display: table;
|
| | | position: fixed;
|
| | | z-index: 99;
|
| | |
|
| | | top: 0;
|
| | | left: 0;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | background: rgba(0,0,0,0.3)
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay .droppable-container {
|
| | | display: table-cell;
|
| | | vertical-align: middle;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay .droppable-container .droppable {
|
| | | background: #FFF;
|
| | | color: #CCC;
|
| | | padding: 6em;
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay .droppable-container .droppable.drag-over {
|
| | | color: #999;
|
| | | }
|
| | |
|
| | | .jquery-comments .droppable-overlay .droppable-container .droppable i {
|
| | | margin-bottom: 5px;
|
| | | }
|
| | |
|
| | | /* Read-only mode */
|
| | | .jquery-comments.read-only .commenting-field {
|
| | | display: none;
|
| | | }
|
| | | .jquery-comments.read-only .actions {
|
| | | display: none;
|
| | | }
|
| | | .comments-container {
|
| | | padding: 10px;
|
| | | border: 1px solid #dcdfe3;
|
| | | margin-top: 50px;
|
| | | }
|
| | | .comments-container #comments {
|
| | | margin: 15px 0;
|
| | | } |
| New file |
| | |
| | | body {
|
| | | margin: 0;
|
| | | font-family: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
| | | font-size: 1rem;
|
| | | font-weight: 400;
|
| | | line-height: 1.5;
|
| | | color: #2c3e50;
|
| | | text-align: left;
|
| | | }
|
| | |
|
| | | *,
|
| | | ::before,
|
| | | ::after {
|
| | | box-sizing: border-box;
|
| | | }
|
| | |
|
| | | a {
|
| | | color: #1abc9c;
|
| | | text-decoration: none;
|
| | | background-color: transparent;
|
| | | }
|
| | |
|
| | | a:hover {
|
| | | color: #117964;
|
| | | text-decoration: underline;
|
| | | }
|
| | |
|
| | | #mainNav {
|
| | | padding: 0;
|
| | | transition: padding-top 0.3s, padding-bottom 0.3s;
|
| | | font-weight: 700;
|
| | | background-color: #2c3e50;
|
| | | }
|
| | |
|
| | | .nav-link:hover {
|
| | | background-color: #4e6984;
|
| | | }
|
| | |
|
| | | .text-uppercase {
|
| | | text-transform: uppercase !important;
|
| | | }
|
| | |
|
| | | .fixed-top {
|
| | | position: fixed;
|
| | | top: 0;
|
| | | right: 0;
|
| | | left: 0;
|
| | | z-index: 1030;
|
| | | }
|
| | |
|
| | | .navbar-expand-lg {
|
| | | flex-flow: row nowrap;
|
| | | justify-content: flex-start;
|
| | | }
|
| | |
|
| | | .navbar {
|
| | | position: relative;
|
| | | display: flex;
|
| | | flex-wrap: wrap;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | padding: 0.5rem 1rem;
|
| | | padding-top: 0.5rem;
|
| | | padding-bottom: 0.5rem;
|
| | | }
|
| | |
|
| | | #mainNav .navbar-brand {
|
| | | font-size: 1.75em;
|
| | | transition: font-size 0.3s;
|
| | | }
|
| | |
|
| | | #mainNav .navbar-brand {
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | .navbar-brand {
|
| | | display: inline-block;
|
| | | padding-top: 0.3125rem;
|
| | | padding-bottom: 0.3125rem;
|
| | | margin-right: 1rem;
|
| | | font-size: 1.25rem;
|
| | | line-height: inherit;
|
| | | white-space: nowrap;
|
| | | }
|
| | |
|
| | | #mainNav .navbar-nav li.nav-item a.nav-link {
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | .text-white {
|
| | | color: #fff !important;
|
| | | }
|
| | |
|
| | | .bg-primary {
|
| | | background-color: #1abc9c !important;
|
| | | }
|
| | |
|
| | | article,
|
| | | aside,
|
| | | figcaption,
|
| | | figure,
|
| | | footer,
|
| | | header,
|
| | | hgroup,
|
| | | main,
|
| | | nav,
|
| | | section {
|
| | | display: block;
|
| | | }
|
| | |
|
| | | .copyright {
|
| | | background-color: #1a252f;
|
| | | }
|
| | |
|
| | | .text-center {
|
| | | text-align: center !important;
|
| | | }
|
| | |
|
| | | .footer {
|
| | | padding-top: 3rem;
|
| | | padding-bottom: 3rem;
|
| | | background-color: #2c3e50;
|
| | | color: #fff;
|
| | | }
|
| | |
|
| | | img.small-thumb {
|
| | | width: 100%;
|
| | | }
|
| | |
|
| | | .list-content {
|
| | | padding: 0px;
|
| | | }
|
| | |
|
| | | .list-game {
|
| | | margin-bottom: 20px;
|
| | | box-shadow: 0px 1px 6px 0px rgba(50, 50, 50, 0.25);
|
| | | border-radius: 5px;
|
| | | padding: 5px;
|
| | | }
|
| | |
|
| | | .list-title {
|
| | | overflow: hidden;
|
| | | margin: .35714em;
|
| | | color: #434343;
|
| | | text-overflow: ellipsis;
|
| | | white-space: nowrap;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .game-container {
|
| | | margin: 30px 0;
|
| | | }
|
| | |
|
| | | .list-category {
|
| | | position: absolute;
|
| | | bottom: 5px;
|
| | | }
|
| | |
|
| | | .single-title {
|
| | | margin-top: 20px;
|
| | | padding-bottom: 10px;
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | h1.single-title {
|
| | | font-size: 1.75rem;
|
| | | }
|
| | |
|
| | | .single-info-container {
|
| | | padding-bottom: 5px;
|
| | | border-bottom: 1px solid #ccc;
|
| | | margin-bottom: 20px;
|
| | | }
|
| | |
|
| | | .single-icon {
|
| | | background-color: #eee;
|
| | | margin-right: 10px;
|
| | | padding: 8px 16px;
|
| | | border-radius: 15px;
|
| | | display: inline-block;
|
| | | margin-bottom: 10px;
|
| | | }
|
| | |
|
| | | .social-share {
|
| | | position: relative;
|
| | | top: -2px;
|
| | | margin-right: 10px;
|
| | | display: inline-block;
|
| | | margin-bottom: 10px;
|
| | | }
|
| | | .social-icon {
|
| | | width: 38px;
|
| | | height: 38px;
|
| | | }
|
| | |
|
| | | .single-icon a {
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | .sidebar {
|
| | | display: block;
|
| | | }
|
| | |
|
| | | .sidebar .list-tile {
|
| | | padding-left: 3px;
|
| | | padding-right: 3px;
|
| | | }
|
| | |
|
| | | .sidebar .list-game {
|
| | | margin-bottom: 8px;
|
| | | }
|
| | |
|
| | | .page-title {
|
| | | font-weight: bold;
|
| | | margin-top: 20px;
|
| | | }
|
| | | h1.singlepage-title {
|
| | | font-size: 1.75rem;
|
| | | }
|
| | | .singlepage-title {
|
| | | padding-bottom: 10px;
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | .page-content,
|
| | | .game-content {
|
| | | margin-bottom: 30px;
|
| | | }
|
| | |
|
| | | .site-logo {
|
| | | padding: 5px;
|
| | | }
|
| | |
|
| | | .nav-categories {
|
| | | box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
|
| | | padding: 5px;
|
| | | white-space: nowrap;
|
| | | }
|
| | |
|
| | | h3.item-title {
|
| | | font-weight: bold;
|
| | | padding-bottom: 10px;
|
| | | font-size: 1.3rem;
|
| | | border-bottom: 1px solid #ccc;
|
| | | margin-bottom: 20px;
|
| | | margin-top: 20px;
|
| | | }
|
| | |
|
| | | .item-title i,
|
| | | .single-icon i,
|
| | | h4 i {
|
| | | margin-right: 9px;
|
| | | }
|
| | |
|
| | | .item-grid {
|
| | | padding-right: 10px;
|
| | | padding-left: 10px;
|
| | | }
|
| | |
|
| | | ul.list-categories {
|
| | | list-style-type: none;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .list-categories li {
|
| | | float: left;
|
| | | display: block;
|
| | | text-align: center;
|
| | | padding: 8px 16px;
|
| | | text-decoration: none;
|
| | | border-radius: 15px;
|
| | | border: 1px solid #ccc;
|
| | | margin: 8px;
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | .list-categories li:hover {
|
| | | background-color: #899fb5;
|
| | | color: #fff;
|
| | | border: 1px solid #899fb5;
|
| | | }
|
| | |
|
| | | nav.greedy {
|
| | | position: relative;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | }
|
| | |
|
| | | nav.greedy button {
|
| | | padding: 6px 16px;
|
| | | text-decoration: none;
|
| | | border-radius: 15px;
|
| | | border: 1px solid #ccc;
|
| | | margin: 0;
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | nav.greedy button.hidden {
|
| | | transition: none;
|
| | | border-right: 0.5rem solid #b6b6b6;
|
| | | width: 0;
|
| | | padding: 0;
|
| | | overflow: hidden;
|
| | | display: none;
|
| | | }
|
| | |
|
| | | nav.greedy button::after {
|
| | | content: attr(count);
|
| | | display: inline-flex;
|
| | | width: 30px;
|
| | | height: 30px;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | background: #4cb9fb;
|
| | | color: #f2f2f2;
|
| | | border-radius: 50%;
|
| | | font-size: 14px;
|
| | | line-height: 14px;
|
| | | margin-left: 1rem;
|
| | | margin-right: calc(-1rem + -8px);
|
| | | }
|
| | |
|
| | | ul.links {
|
| | | display: flex;
|
| | | flex: 1;
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | ul.links li {
|
| | | flex: none;
|
| | | }
|
| | |
|
| | | ul.hidden-links {
|
| | | position: absolute;
|
| | | background: #fff;
|
| | | right: 0;
|
| | | top: 100%;
|
| | | z-index: 1;
|
| | | text-align: left;
|
| | | list-style: none;
|
| | | background-color: #fff;
|
| | | background-clip: padding-box;
|
| | | border: 1px solid rgba(0, 0, 0, .15);
|
| | | border-radius: .25rem;
|
| | | padding-left: 0;
|
| | | box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
|
| | | }
|
| | |
|
| | | ul.hidden-links li {
|
| | | padding-right: 2rem;
|
| | | }
|
| | |
|
| | | ul.hidden-links a {
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | ul.hidden-links.hidden {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | ul.hidden-links li {
|
| | | padding: 1rem;
|
| | | min-width: 220px;
|
| | | }
|
| | |
|
| | | ul.hidden-links li:hover {
|
| | | background-color: #eee;
|
| | | }
|
| | |
|
| | | .cat-list {
|
| | | margin-top: 20px;
|
| | | }
|
| | |
|
| | | .cat-link {
|
| | | padding: 8px 16px;
|
| | | background-color: #eee;
|
| | | margin-right: 10px;
|
| | | color: #2c3e50;
|
| | | border-radius: 15px;
|
| | | }
|
| | |
|
| | | h4.widget-title {
|
| | | font-weight: bold;
|
| | | padding-bottom: 10px;
|
| | | font-size: 26px;
|
| | | border-bottom: 1px solid #ccc;
|
| | | margin-bottom: 20px;
|
| | | font-size: 1.3rem;
|
| | | }
|
| | |
|
| | | .sidebar .row {
|
| | | margin-right: 0;
|
| | | margin-left: 0;
|
| | | }
|
| | |
|
| | | .sidebar .widget {
|
| | | margin-bottom: 20px;
|
| | | }
|
| | |
|
| | | .bottom-container {
|
| | | margin: 30px 0;
|
| | | }
|
| | |
|
| | | .banner-ads {
|
| | | text-align: center;
|
| | | margin: 10px 0;
|
| | | }
|
| | |
|
| | | img {
|
| | | max-width: 100%;
|
| | | }
|
| | |
|
| | | .content-wrapper {
|
| | | margin-top: 30px;
|
| | | }
|
| | |
|
| | | .pagination-wrapper {
|
| | | margin-bottom: 30px;
|
| | | }
|
| | |
|
| | | .game-iframe-container {
|
| | | position: relative;
|
| | | overflow: hidden;
|
| | | height: 600px;
|
| | | display: block;
|
| | | }
|
| | | .game-iframe {
|
| | | position: absolute;
|
| | | top: 0;
|
| | | left: 0;
|
| | | bottom: 0;
|
| | | right: 0;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | }
|
| | | .nav-item {
|
| | | margin: 0 5px;
|
| | | }
|
| | | .search-bar {
|
| | | margin-left: 10px;
|
| | | }
|
| | | @media (max-width: 992px) {
|
| | | #navb {
|
| | | margin: 15px 0;
|
| | | }
|
| | | .nav-item {
|
| | | margin: 0 10px;
|
| | | }
|
| | | a.nav-link {
|
| | | padding-left: 10px!important;
|
| | | }
|
| | | }
|
| | | .stats-vote {
|
| | | text-align: right;
|
| | | margin-top: 20px;
|
| | | }
|
| | | .stats-vote i {
|
| | | font-size: 30px;
|
| | | padding: 6px;
|
| | | }
|
| | | .stats-vote i:hover {
|
| | | color: #1abc9c;
|
| | | cursor: pointer;
|
| | | }
|
| | | .header-left {
|
| | | display: inline-block;
|
| | | }
|
| | | .header-right {
|
| | | display: inline-block;
|
| | | float: right;
|
| | | margin-left: 30px;
|
| | | }
|
| | | .vote-status {
|
| | | font-size: 18px;
|
| | | font-weight: bold;
|
| | | }
|
| | |
|
| | | /* Post list */
|
| | |
|
| | | .post-item {
|
| | | margin-bottom: 3rem !important;
|
| | | }
|
| | | .post-media {
|
| | | display: flex;
|
| | | align-items: flex-start;
|
| | | }
|
| | | .blog-list .post-thumb {
|
| | | width: 120px;
|
| | | height: 120px;
|
| | | }
|
| | | .post-thumb {
|
| | | display: flex;
|
| | | margin-right: 1rem;
|
| | | }
|
| | | .post-thumb img {
|
| | | object-fit: cover;
|
| | | object-position: center;
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | }
|
| | | .post-title {
|
| | | margin-bottom: .25rem;
|
| | | font-weight: bold;
|
| | | font-size: 1.5rem;
|
| | | }
|
| | | .post-title a {
|
| | | color: #2c3e50;
|
| | | }
|
| | | .post-meta .date {
|
| | | color: #8f8f8f;
|
| | | font-size: 0.8125rem;
|
| | | }
|
| | | .post-meta {
|
| | | color: #8f8f8f;
|
| | | }
|
| | | .blog-list {
|
| | | margin-top: 30px;
|
| | | }
|
| | | @media (max-width: 576px) {
|
| | | .blog-list .post-thumb {
|
| | | display: none;
|
| | | }
|
| | | }
|
| | |
|
| | | /* End post */
|
| | |
|
| | | .dropdown-menu {
|
| | | position: absolute;
|
| | | background: #fff;
|
| | | background-clip: border-box;
|
| | | right: 0;
|
| | | top: 100%;
|
| | | z-index: 2;
|
| | | text-align: left;
|
| | | list-style: none;
|
| | | font-weight: normal;
|
| | | background-clip: padding-box;
|
| | | border: 1px solid rgba(0, 0, 0, .15);
|
| | | border-radius: .25rem;
|
| | | padding-left: 0;
|
| | | box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
|
| | | margin-top: 10px;
|
| | | }
|
| | |
|
| | | .dropdown-icon {
|
| | | margin-left: 10px;
|
| | | }
|
| | |
|
| | | .nav-item {
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .nav-item-child {
|
| | | padding: 0.6rem 1rem;
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | .nav-link-child {
|
| | | color: #2c3e50;
|
| | | }
|
| | |
|
| | | .nav-item-child:hover {
|
| | | background-color: #cddbe8;
|
| | | }
|
| | | .category-description {
|
| | | background-color: #f4f4f4;
|
| | | padding: 10px 15px;
|
| | | }
|
| | |
|
| | | .game-tag-list {
|
| | | display: flex;
|
| | | flex-wrap: wrap;
|
| | | margin-top: 8px;
|
| | | }
|
| | | .tag-item {
|
| | | padding: 4px 14px;
|
| | | background: #eee;
|
| | | color: #2c3e50;
|
| | | margin-right: 8px;
|
| | | margin-top: 8px;
|
| | | border-radius: 8px;
|
| | | }
|
| | |
|
| | | .load-more-games-wrapper {
|
| | | text-align: center;
|
| | | margin-top: 20px;
|
| | | margin-bottom: 40px;
|
| | | }
|
| | |
|
| | | /* Comments */
|
| | |
|
| | | .comment-user-avatar {
|
| | | position: absolute;
|
| | | width: 50px;
|
| | | height: 50px;
|
| | | }
|
| | | .comment-user-avatar img {
|
| | | border-radius: 50%;
|
| | | }
|
| | | .comment-avatar {
|
| | | float: left;
|
| | | width: 50px;
|
| | | height: 50px;
|
| | | }
|
| | | .comment-avatar img {
|
| | | border-radius: 50%;
|
| | | }
|
| | | .comment-input {
|
| | | margin-left: 65px;
|
| | | }
|
| | | .comment-btn-post {
|
| | | text-align: right;
|
| | | }
|
| | | .comment-p {
|
| | | margin-top: 23px;
|
| | | }
|
| | | .comment-p .comment-date {
|
| | | float: right;
|
| | | color: #666;
|
| | | font-size: 0.8em;
|
| | | }
|
| | | .comment-username {
|
| | | font-weight: bold;
|
| | | }
|
| | | .comment-details {
|
| | | margin-left: 65px;
|
| | | }
|
| | | .comment-text {
|
| | | white-space: pre-line;
|
| | | }
|
| | | .color-red {
|
| | | color: #bb4d4d;
|
| | | }
|
| | | i.disabled {
|
| | | opacity: 0.5;
|
| | | pointer-events: none; |
| | | }
|
| | |
|
| | | /* NEW COMMENT SYSTEM */
|
| | |
|
| | | #tpl-comment-section {
|
| | | margin-top: 30px;
|
| | | margin-bottom: 20px;
|
| | | }
|
| | |
|
| | | #comment-form {
|
| | | display: flex;
|
| | | margin-bottom: 30px;
|
| | | border-bottom: 1px solid #E2E2E2;
|
| | | }
|
| | | .comment-profile-avatar {
|
| | | margin-right: 20px;
|
| | | }
|
| | | .comment-profile-avatar img {
|
| | | border-radius: 50%;
|
| | | float: left;
|
| | | width: 3.6rem;
|
| | | height: 3.6rem;
|
| | | max-width: 50px;
|
| | | max-height: 50px;
|
| | | }
|
| | | .comment-form-wrapper {
|
| | | background: #fff;
|
| | | margin-bottom: 30px;
|
| | | box-shadow: 0px 4px 8px 0px rgba(50, 50, 50, 0.1);
|
| | | border: 1px solid #E2E2E2;
|
| | | border-radius: 12px;
|
| | | padding: 15px;
|
| | | width: 100%;
|
| | | }
|
| | | .comment-form-wrapper textarea {
|
| | | padding: 0;
|
| | | border: 0;
|
| | | }
|
| | | .post-comment-btn-wrapper {
|
| | | float: right;
|
| | | margin-top: 15px;
|
| | | }
|
| | | textarea#comment-input {
|
| | | height: 100px;
|
| | | }
|
| | | .user-comment-wrapper {
|
| | | display: flex;
|
| | | }
|
| | | .tpl-user-comment {
|
| | | border-bottom: 1px solid #E2E2E2;
|
| | | margin-bottom: 30px;
|
| | | }
|
| | | .tpl-comment-children .tpl-user-comment:last-child {
|
| | | border-bottom: none;
|
| | | }
|
| | | img.tpl-user-comment-avatar {
|
| | | border-radius: 50%;
|
| | | float: left;
|
| | | width: 3.6rem;
|
| | | height: 3.6rem;
|
| | | max-width: 50px;
|
| | | max-height: 50px;
|
| | | margin-right: 20px;
|
| | | }
|
| | | .tpl-comment-children img.tpl-user-comment-avatar {
|
| | | max-width: 40px;
|
| | | max-height: 40px;
|
| | | }
|
| | | .tpl-comment-author {
|
| | | font-weight: bold;
|
| | | }
|
| | | .tpl-user-comment .comment-content {
|
| | | margin-bottom: 20px;
|
| | | width: 100%;
|
| | | }
|
| | | .tpl-comment-timestamp {
|
| | | margin-top: 3px;
|
| | | font-size: 15px;
|
| | | color: #797979;
|
| | | }
|
| | | .tpl-comment-text {
|
| | | margin-top: 13px;
|
| | | white-space: unset;
|
| | | }
|
| | | .comment-actions {
|
| | | margin-top: 15px;
|
| | | }
|
| | | .comment-action-right {
|
| | | float: right;
|
| | | }
|
| | | .comment-action-left {
|
| | | float: left;
|
| | | }
|
| | | .tpl-comment-children {
|
| | | display: block;
|
| | | margin-left: 70px;
|
| | | }
|
| | | .tpl-reply-form {
|
| | | display: flex;
|
| | | }
|
| | | .comment-reply-wrapper {
|
| | | margin-left: 70px;
|
| | | background: #fff;
|
| | | margin-bottom: 30px;
|
| | | box-shadow: 0px 4px 8px 0px rgba(50, 50, 50, 0.1);
|
| | | border: 1px solid #E2E2E2;
|
| | | border-radius: 12px;
|
| | | padding: 15px;
|
| | | width: 100%;
|
| | | }
|
| | | .comment-reply-wrapper textarea {
|
| | | padding: 0;
|
| | | border: 0;
|
| | | }
|
| | | .reply-action-buttons {
|
| | | float: right;
|
| | | margin-top: 15px;
|
| | | }
|
| | | .tpl-btn-cancel-reply {
|
| | | color: #797979;
|
| | | }
|
| | | #tpl-btn-load-more-comments {
|
| | | color: #797979;
|
| | | }
|
| | | .comment-require-login-wrapper {
|
| | | display: flex;
|
| | | margin-bottom: 40px;
|
| | | }
|
| | | .comment-require-login-wrapper .comment-alert {
|
| | | padding: 10px;
|
| | | background-color: #EDEDED;
|
| | | text-align: center;
|
| | | width: 100%;
|
| | | border-radius: 8px;
|
| | | } |
| New file |
| | |
| | | .user-avatar img {
|
| | | width: 40px;
|
| | | }
|
| | | .user-avatar {
|
| | | margin-left: 20px;
|
| | | border-radius: 50%;
|
| | | overflow: hidden;
|
| | | cursor: pointer;
|
| | | }
|
| | | ul.user-links {
|
| | | position: absolute;
|
| | | background: #fff;
|
| | | right: 0;
|
| | | top: 100%;
|
| | | z-index: 2;
|
| | | text-align: left;
|
| | | list-style: none;
|
| | | font-weight: normal;
|
| | | background-clip: padding-box;
|
| | | border: 1px solid rgba(0, 0, 0, .15);
|
| | | border-radius: .25rem;
|
| | | padding-left: 0;
|
| | | box-shadow: 0 4px 12px 0 rgba(43, 43, 43, 0.1);
|
| | | }
|
| | | ul.user-links li {
|
| | | padding: 1rem;
|
| | | min-width: 220px;
|
| | | color: #2c3e50;
|
| | | }
|
| | | ul.user-links.hidden {
|
| | | display: none;
|
| | | }
|
| | | .user-links hr {
|
| | | margin: 0;
|
| | | }
|
| | | #mainNav .container {
|
| | | position: relative;
|
| | | padding: 0 10px;
|
| | | }
|
| | | .section {
|
| | | background-color: #fff;
|
| | | border-radius: 10px;
|
| | | padding: 15px;
|
| | | margin-bottom: 30px;
|
| | | box-shadow: 2px 2px 5px 0 rgba(0,0,0,0.05);
|
| | | }
|
| | | .section-title {
|
| | | font-size: 1.3rem;
|
| | | }
|
| | | .page-title {
|
| | | margin-top: 5px;
|
| | | margin-bottom: 20px;
|
| | | }
|
| | | .profile-username {
|
| | | font-size: 20px;
|
| | | font-weight: bold;
|
| | | margin-top: 20px;
|
| | | }
|
| | | .user-page {
|
| | | background-color: #f6f8fb;
|
| | | }
|
| | | .user-page .single-title {
|
| | | margin-top: 0;
|
| | | margin-bottom: 10px;
|
| | | padding-top: 25px;
|
| | | font-size: 1.5rem;
|
| | | }
|
| | | .user-page .section-title {
|
| | | font-weight: bold;
|
| | | margin-bottom: 15px;
|
| | | }
|
| | | .profile-bio {
|
| | | margin-top: 10px;
|
| | | }
|
| | | .profile-join {
|
| | | color: #d6793a;
|
| | | font-style: italic;
|
| | | }
|
| | | .progress-bar {
|
| | | background-color: #19bae0;
|
| | | }
|
| | | .level-badge {
|
| | | float: left;
|
| | | margin-right: 10px;
|
| | | }
|
| | | .profile-game-item {
|
| | | max-width: 80px;
|
| | | border-radius: 10px;
|
| | | overflow: hidden;
|
| | | margin-right: 15px;
|
| | | }
|
| | | .profile-gamelist-horizontal {
|
| | | position: relative;
|
| | | }
|
| | | .profile-gamelist-horizontal ul {
|
| | | overflow: hidden;
|
| | | white-space: nowrap;
|
| | | display: block;
|
| | | list-style: none;
|
| | | padding: 0;
|
| | | margin-bottom: 0;
|
| | | }
|
| | |
|
| | | .profile-gamelist-horizontal li {
|
| | | display: inline-block;
|
| | | text-align: center;
|
| | | }
|
| | |
|
| | | .profile-comment-item {
|
| | | position: relative;
|
| | | border: 1px solid #dcdfe3;
|
| | | padding: 15px;
|
| | | border-radius: 10px;
|
| | | margin-top: 20px;
|
| | | }
|
| | |
|
| | | .comment-date {
|
| | | font-style: italic;
|
| | | }
|
| | |
|
| | | .btn-left {
|
| | | position: absolute;
|
| | | left: 0;
|
| | | background-color: #fff;
|
| | | border-radius: 50%;
|
| | | top: 14px;
|
| | | margin: 5px;
|
| | | box-shadow: 0 0 5px 0 rgba(0,0,0,0.3);
|
| | | z-index: 1;
|
| | | }
|
| | | .btn-right {
|
| | | position: absolute;
|
| | | right: 0;
|
| | | background-color: #fff;
|
| | | border-radius: 50%;
|
| | | top: 14px;
|
| | | margin: 5px;
|
| | | box-shadow: 0 0 5px 0 rgba(0,0,0,0.3);
|
| | | z-index: 1;
|
| | | }
|
| | | .label-xp {
|
| | | color: #d6793a;
|
| | | font-style: italic;
|
| | | }
|
| | | .delete-comment {
|
| | | position: absolute;
|
| | | right: 10px;
|
| | | bottom: 10px;
|
| | | cursor: pointer;
|
| | | }
|
| | | .input-hidden {
|
| | | position: absolute;
|
| | | left: -9999px;
|
| | | }
|
| | |
|
| | | input[type=radio]:checked + label>img {
|
| | | border: 1px solid #fff;
|
| | | box-shadow: 0 0 0 3px #14ca14;
|
| | | }
|
| | |
|
| | | .avatar-chooser .col-3 {
|
| | | padding-right: 5px;
|
| | | padding-left: 5px;
|
| | | }
|
| | |
|
| | | .avatar-chooser {
|
| | | margin-right: 0;
|
| | | margin-left: 0;
|
| | | } |
| New file |
| | |
| | | <?php include TEMPLATE_PATH . "/includes/header.php" ?>
|
| | | <div class="container">
|
| | | <div class="game-container">
|
| | | <?php widget_aside('top-content') ?>
|
| | | <div class="content-wrapper">
|
| | | <h3 class="item-title"><?php _e('%a Games', esc_string($tag_name)) ?></h3>
|
| | | <p><?php _e('%a games in total.', esc_int($total_games)) ?> <?php _e('Page %a of %b', esc_int($cur_page), esc_int($total_page)) ?></p>
|
| | | <div class="game-container">
|
| | | <div class="row">
|
| | | <?php foreach ( $games as $game ) { ?>
|
| | | <?php include TEMPLATE_PATH . "/includes/grid.php" ?>
|
| | | <?php } ?>
|
| | | </div>
|
| | | </div>
|
| | | <div class="pagination-wrapper">
|
| | | <nav aria-label="Page navigation example">
|
| | | <?php
|
| | | $cur_page = 1;
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = esc_string($_GET['page']);
|
| | | }
|
| | | render_pagination($total_page, $cur_page, 8, 'tag', $_GET['slug']);
|
| | | ?>
|
| | | </nav>
|
| | | </div>
|
| | | </div>
|
| | | <?php widget_aside('bottom-content') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php include TEMPLATE_PATH . "/includes/footer.php" ?> |
| New file |
| | |
| | | <?php
|
| | | /**
|
| | | * Do not modify this file or code!
|
| | | * |
| | | * File: theme-functions.php
|
| | | * |
| | | * This script is used to define a collection of functions that are specifically designed |
| | | * for theme related functionality. This can include things like rendering HTML components,
|
| | | * handling pagination, or setting up multilingual support.
|
| | | * |
| | | * The functions defined in this file are designed to be used in various parts of the theme |
| | | * templates or plugins, offering a way to abstract common functionality and promote reusability.
|
| | | * |
| | | * Please note that this file may be updated frequently during CMS updates. |
| | | * It is recommended NOT to modify this file directly, as your changes may be |
| | | * overwritten during an update.
|
| | | */
|
| | |
|
| | | // Global array to store all the hooks
|
| | | $hooks = [];
|
| | | // Global array to store all the filters
|
| | | $filters = [];
|
| | | // Global array to store all the shortcodes
|
| | | $shortcodes = [];
|
| | |
|
| | | function add_to_hook($hook_name, $callback) {
|
| | | // Function to add callbacks to hooks
|
| | | // Usage : add_to_hook('head', 'your_function_name') or add_to_hook('head', function() { echo 'test';});
|
| | | global $hooks;
|
| | | if (!isset($hooks[$hook_name])) {
|
| | | $hooks[$hook_name] = [];
|
| | | }
|
| | | $hooks[$hook_name][] = $callback;
|
| | | }
|
| | |
|
| | | function run_hook($hook_name) {
|
| | | // Function to execute the hooks
|
| | | global $hooks;
|
| | | if (isset($hooks[$hook_name])) {
|
| | | foreach ($hooks[$hook_name] as $callback) {
|
| | | call_user_func($callback);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function the_head($position) {
|
| | | // Run hooks based on the position parameter
|
| | | // Executed inside head tag
|
| | | global $base_taxonomy;
|
| | | if ($position === 'top') {
|
| | | if($base_taxonomy === '404'){
|
| | | // Page 404
|
| | | // Add noindex meta
|
| | | add_to_hook('head_top', function() {
|
| | | echo '<meta name="robots" content="noindex">'.PHP_EOL;
|
| | | });
|
| | | } else {
|
| | | if(get_setting_value('lang_code_in_url') && PRETTY_URL){ // Activate multilingual
|
| | | add_to_hook('head_top', function() {
|
| | | // Add alternate link tag
|
| | | global $lang_code;
|
| | | $language_ids = [];
|
| | | if(get_setting_value('allow_slug_translation')){
|
| | | // Skip this, prevent potential bug
|
| | | return;
|
| | | }
|
| | | if (isset($_SESSION['language_ids'])) {
|
| | | $language_ids = $_SESSION['language_ids']; // Cached
|
| | | } else {
|
| | | if (file_exists(ABSPATH . 'locales/public/')) {
|
| | | $files = scandir(ABSPATH . 'locales/public/');
|
| | | foreach ($files as $file) {
|
| | | if (pathinfo($file, PATHINFO_EXTENSION) === 'json') {
|
| | | $file_name_without_extension = pathinfo($file, PATHINFO_FILENAME);
|
| | | if (strlen($file_name_without_extension) >= 1 && strlen($file_name_without_extension) <= 3) {
|
| | | $language_ids[] = $file_name_without_extension;
|
| | | }
|
| | | }
|
| | | }
|
| | | $_SESSION['language_ids'] = $language_ids;
|
| | | } else if (file_exists(ABSPATH . TEMPLATE_PATH . '/locales/')) { // Backward compatibility
|
| | | $files = scandir(ABSPATH . TEMPLATE_PATH . '/locales/');
|
| | | foreach ($files as $file) {
|
| | | if (pathinfo($file, PATHINFO_EXTENSION) === 'json') {
|
| | | $file_name_without_extension = pathinfo($file, PATHINFO_FILENAME);
|
| | | if (strlen($file_name_without_extension) >= 1 && strlen($file_name_without_extension) <= 3) {
|
| | | $language_ids[] = $file_name_without_extension;
|
| | | }
|
| | | }
|
| | | }
|
| | | $_SESSION['language_ids'] = $language_ids;
|
| | | }
|
| | | }
|
| | | if(get_setting_value('disable_en_language') && count($language_ids) > 0){
|
| | | //
|
| | | } else {
|
| | | if (!in_array('en', $language_ids)) {
|
| | | $language_ids[] = 'en';
|
| | | }
|
| | | }
|
| | | if (!isset($_SESSION['language_ids'])) {
|
| | | $_SESSION['language_ids'] = $language_ids; // Cached
|
| | | }
|
| | | foreach ($language_ids as $lang_id) {
|
| | | $alternate_url = DOMAIN . $lang_id . substr($_SERVER['REQUEST_URI'], strlen($lang_code)+1);
|
| | | echo '<link rel="alternate" hreflang="'.$lang_id.'" href="'.$alternate_url.'">'.PHP_EOL;
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | | run_hook('head_top');
|
| | | } elseif ($position === 'bottom') {
|
| | | run_hook('head_bottom');
|
| | | }
|
| | | }
|
| | |
|
| | | function add_filter($tag, $function_to_add) {
|
| | | global $filters;
|
| | | /*
|
| | | Sample usage:
|
| | | .
|
| | | add_filter('filter_meta_description', function($desc) {
|
| | | return "Modified: " . $desc;
|
| | | });
|
| | | */
|
| | | if (!isset($filters[$tag])) {
|
| | | $filters[$tag] = [];
|
| | | }
|
| | | $filters[$tag][] = $function_to_add;
|
| | | }
|
| | |
|
| | | add_filter('meta_description', function($data) {
|
| | | global $base_taxonomy;
|
| | | if($base_taxonomy === 'game'){ // Is single game page
|
| | | global $game;
|
| | | if($game){
|
| | | $value = $game->getExtraField('meta_description');
|
| | | if($value){ // Have meta_description value
|
| | | return $value;
|
| | | }
|
| | | }
|
| | | } else if($base_taxonomy === 'post'){
|
| | | global $post;
|
| | | if($post){
|
| | | $value = $post->getExtraField('meta_description');
|
| | | if($value){ // Have meta_description value
|
| | | return $value;
|
| | | }
|
| | | }
|
| | | }
|
| | | return $data;
|
| | | });
|
| | |
|
| | | function apply_filters($tag, $value) {
|
| | | global $filters;
|
| | | /*
|
| | | Sample usage:
|
| | | .
|
| | | $meta_description = apply_filters('filter_meta_description', $meta_description);
|
| | | */
|
| | | if (!isset($filters[$tag])) {
|
| | | return $value;
|
| | | }
|
| | | foreach ($filters[$tag] as $func) {
|
| | | $value = call_user_func($func, $value);
|
| | | }
|
| | | return $value;
|
| | | }
|
| | |
|
| | | function add_shortcode($tag, $callback) {
|
| | | // Add a new shortcode
|
| | | /*
|
| | | Sample usage:
|
| | | .
|
| | | add_shortcode('bold', function($content) {
|
| | | return '<strong>' . $content . '</strong>';
|
| | | });
|
| | | .
|
| | | add_shortcode('italic', function($content, $atts = []) {
|
| | | return '<em>' . $content . '</em>';
|
| | | });
|
| | | */
|
| | | global $shortcodes;
|
| | | $shortcodes[$tag] = $callback;
|
| | | }
|
| | |
|
| | | function run_shortcode($text) {
|
| | | global $shortcodes;
|
| | | foreach ($shortcodes as $tag => $callback) {
|
| | | if (is_callable($callback)) {
|
| | | // Match both self-closing and enclosing shortcodes
|
| | | $text = preg_replace_callback(
|
| | | "/\[$tag(.*?)(\/)?\](?:(.*?)\[\/$tag\])?/s",
|
| | | function($matches) use ($callback) {
|
| | | $params = [];
|
| | | if (preg_match_all('/\s*([\w-]+)="([^"]*)"/', $matches[1], $attr)) {
|
| | | $params = array_combine($attr[1], $attr[2]);
|
| | | }
|
| | | return call_user_func($callback, $matches[3] ?? '', $params);
|
| | | },
|
| | | $text
|
| | | );
|
| | | }
|
| | | }
|
| | | return $text;
|
| | | }
|
| | |
|
| | | function render_pagination($total_page, $cur_page = 1, $display_limit = 8, $pageType = 'category', $slug = '', $htmlOptions = []) {
|
| | | $defaults = [
|
| | | 'container' => 'ul',
|
| | | 'container_class' => 'pagination justify-content-center',
|
| | | 'item' => 'li',
|
| | | 'item_class' => 'page-item',
|
| | | 'link' => 'a',
|
| | | 'link_class' => 'page-link',
|
| | | 'disabled_class' => 'disabled'
|
| | | ];
|
| | |
|
| | | $htmlOptions = array_merge($defaults, $htmlOptions);
|
| | | |
| | | $paginationHTML = "<{$htmlOptions['container']} class=\"{$htmlOptions['container_class']}\">";
|
| | |
|
| | | if($total_page) {
|
| | | $start = max(0, $cur_page - ceil($display_limit / 2));
|
| | | $end = min($start + $display_limit, $total_page);
|
| | |
|
| | | if ($start > 0) {
|
| | | $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']}\"><{$htmlOptions['link']} class=\"{$htmlOptions['link_class']}\" href=\"". get_permalink($pageType, $slug) ."\">1</{$htmlOptions['link']}></{$htmlOptions['item']}>";
|
| | | $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']} {$htmlOptions['disabled_class']}\"><span class=\"{$htmlOptions['link_class']}\">...</span></{$htmlOptions['item']}>";
|
| | | }
|
| | |
|
| | | for ($i = $start; $i < $end; $i++) {
|
| | | $disabled = $cur_page == ($i + 1) ? $htmlOptions['disabled_class'] : '';
|
| | | $page_number = $i + 1;
|
| | | $page_url = $page_number > 1 ? get_permalink($pageType, $slug, array('page' => $page_number)) : get_permalink($pageType, $slug);
|
| | | $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']} {$disabled}\"><{$htmlOptions['link']} class=\"{$htmlOptions['link_class']}\" href=\"{$page_url}\">". ($page_number) ."</{$htmlOptions['link']}></{$htmlOptions['item']}>";
|
| | | }
|
| | |
|
| | | if ($end < $total_page) {
|
| | | $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']} {$htmlOptions['disabled_class']}\"><span class=\"{$htmlOptions['link_class']}\">...</span></{$htmlOptions['item']}>";
|
| | | $paginationHTML .= "<{$htmlOptions['item']} class=\"{$htmlOptions['item_class']}\"><{$htmlOptions['link']} class=\"{$htmlOptions['link_class']}\" href=\"". get_permalink($pageType, $slug, array('page' => $total_page)) ."\">{$total_page}</{$htmlOptions['link']}></{$htmlOptions['item']}>";
|
| | | }
|
| | | }
|
| | | $paginationHTML .= "</{$htmlOptions['container']}>";
|
| | | echo $paginationHTML;
|
| | | }
|
| | |
|
| | | function the_html_attrs() {
|
| | | /*
|
| | | * This function is used to print HTML attributes inside the <html> tag for multilingual support |
| | | * and Right-to-Left (RTL) language handling. It considers the language code (ISO 639-1) for |
| | | * setting the "lang" attribute and also checks if the language is RTL to set the "dir" attribute.
|
| | | */
|
| | | global $lang_code;
|
| | | // List of RTL language codes.
|
| | | $rtl_langs = ['ar', 'fa', 'ur', 'he', 'iw', 'yi', 'ku', 'ps', 'sd', 'ug', 'dv'];
|
| | | // Check if current language is RTL.
|
| | | $dir = in_array($lang_code, $rtl_langs) ? 'rtl' : 'ltr';
|
| | | if(get_setting_value('disable_rtl')){
|
| | | $dir = 'ltr';
|
| | | }
|
| | | // Print the lang and dir attributes.
|
| | | echo "lang=\"{$lang_code}\" dir=\"{$dir}\"";
|
| | | }
|
| | |
|
| | | function the_canonical_link() {
|
| | | // Check if the custom override function exists
|
| | | if (function_exists('the_custom_canonical_link')) {
|
| | | the_custom_canonical_link();
|
| | | return;
|
| | | }
|
| | | $canonical_url = get_canonical_url();
|
| | | echo "<link rel=\"canonical\" href=\"{$canonical_url}\" />".PHP_EOL;
|
| | | }
|
| | |
|
| | | function get_canonical_url(){
|
| | | global $url_params;
|
| | | global $base_taxonomy;
|
| | | $allowed_taxonomy = ['homepage', 'game', 'category', 'search', 'post', 'page', 'tag'];
|
| | | if($base_taxonomy != 'homepage' && $base_taxonomy != 'post'){
|
| | | if(!PRETTY_URL || count($url_params) <= 1 || count($url_params) > 2) return;
|
| | | }
|
| | | if(!in_array($base_taxonomy, $allowed_taxonomy)){
|
| | | return;
|
| | | }
|
| | | $canonical_url;
|
| | | if($base_taxonomy == 'homepage'){
|
| | | $canonical_url = DOMAIN;
|
| | | if(get_setting_value('lang_code_in_url')){
|
| | | global $lang_code;
|
| | | $canonical_url .= $lang_code;
|
| | | }
|
| | | if(get_setting_value('trailing_slash') && substr($canonical_url, -1) != '/'){
|
| | | $canonical_url .= '/';
|
| | | }
|
| | | } else if($base_taxonomy == 'post'){
|
| | | $canonical_url = get_permalink($url_params[0]);
|
| | | } else {
|
| | | if(get_setting_value('allow_slug_translation')){
|
| | | if($base_taxonomy == 'category' || $base_taxonomy == 'tag'){
|
| | | if(_t('slug:'.$url_params[1]) != 'slug:'.$url_params[1]){
|
| | | $url_params[1] = _t('slug:'.$url_params[1]);
|
| | | }
|
| | | }
|
| | | }
|
| | | $canonical_url = get_permalink($url_params[0], $url_params[1]);
|
| | | }
|
| | | return $canonical_url;
|
| | | }
|
| | |
|
| | | function fetch_games_by_type($type, $amount=12, $page=0, $count=true){
|
| | | // Fetches a list of games based on different criteria: 'new', 'random', 'popular', 'likes', and 'trending'.
|
| | | $data = [];
|
| | | if ($type == 'trending') {
|
| | | $conn = open_connection();
|
| | | $date = new \DateTime('now');
|
| | | $date->sub(new DateInterval('P7D'));
|
| | | $sql = "SELECT * FROM trends WHERE created >= '{$date->format('Y-m-d')}'";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | $list = array();
|
| | | if(count($row)){
|
| | | foreach ($row as $item) {
|
| | | if(isset($list[$item['slug']])){
|
| | | $list[$item['slug']] += (int)$item['views'];
|
| | | } else {
|
| | | $list[$item['slug']] = (int)$item['views'];
|
| | | }
|
| | | }
|
| | | arsort($list);
|
| | | $i = 0;
|
| | | foreach ($list as $slug => $views) {
|
| | | if($i < $amount){
|
| | | $game = Game::getBySlug($slug);
|
| | | if($game){
|
| | | $data[] = $game;
|
| | | }
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | }
|
| | | return (array(
|
| | | "results" => $data,
|
| | | "totalRows" => count($list),
|
| | | "totalPages" => 1
|
| | | ));
|
| | | } else {
|
| | | switch($type) {
|
| | | case 'new':
|
| | | $order_by = 'id DESC';
|
| | | break;
|
| | | case 'random':
|
| | | $order_by = 'RAND()';
|
| | | break;
|
| | | case 'popular':
|
| | | $order_by = 'views DESC';
|
| | | break;
|
| | | case 'likes':
|
| | | $order_by = 'upvote DESC';
|
| | | break;
|
| | | default:
|
| | | throw new InvalidArgumentException('Invalid type provided');
|
| | | }
|
| | | return Game::getList($amount, $order_by, $page, $count);
|
| | | }
|
| | | }
|
| | |
|
| | | function fetch_collection($name, $amount = 12){
|
| | | // Fetches a game collection based on a specified name.
|
| | | $data = Collection::getListByCollection( $name, $amount );
|
| | | return $data;
|
| | | }
|
| | |
|
| | | function fetch_games_by_category($cat_name, $amount, $page = 0) {
|
| | | // Fetches a list of games from a specific category.
|
| | | $cat_id = Category::getIdByName($cat_name);
|
| | | $data = Category::getListByCategory($cat_id, $amount, $page);
|
| | | return $data;
|
| | | }
|
| | |
|
| | | function fetch_games_by_tag($tag_name, $amount, $offset = 0, $count = false) {
|
| | | // Fetches a list of games from a specific tag.
|
| | | $data = Game::getListByTag($tag_name, $amount, 'id DESC', $offset, $count);
|
| | | return $data;
|
| | | }
|
| | |
|
| | | function fetch_similar_games($game, $amount, $page = 0, $random = true) {
|
| | | // This function is used to get the list of similar games based on current $game categories
|
| | | // Mostly used for single-game page "Similar Games" section
|
| | | // $category_list = $game->getCategoryList(); // Excluding hidden categories
|
| | | // $ids = array_map(function($category) {
|
| | | // return $category['id'];
|
| | | // }, $category_list);
|
| | | // $data = Category::getListByCategories($ids, $amount, $page, $random);
|
| | | // return $data;
|
| | | return $game->getSimilarGames($amount);
|
| | | }
|
| | |
|
| | | function fetch_all_categories($show_hidden_category = false, $show_empty_category = false){
|
| | | // Get the list of all categories
|
| | | $data = Category::getList();
|
| | | $results = $data['results'];
|
| | | foreach ($results as $key => $category) {
|
| | | if(!$show_hidden_category && $category->priority < 0){
|
| | | unset($results[$key]);
|
| | | continue;
|
| | | }
|
| | | if(!$show_empty_category && Category::getCategoryCount($category->id) == 0){
|
| | | unset($results[$key]);
|
| | | continue;
|
| | | }
|
| | | }
|
| | | return $results;
|
| | | }
|
| | |
|
| | | function get_page_title($title_template = 'default'){
|
| | | // Check if the custom override function exists
|
| | | if (function_exists('get_custom_page_title')) {
|
| | | $custom_title = get_custom_page_title();
|
| | | if($custom_title != 'default'){
|
| | | return htmlspecialchars($custom_title);
|
| | | }
|
| | | }
|
| | | global $base_taxonomy;
|
| | | $content_title = null;
|
| | | switch($base_taxonomy){
|
| | | case 'game':
|
| | | global $game;
|
| | | $content_title = $game->title;
|
| | | break;
|
| | | case 'full':
|
| | | global $game;
|
| | | $content_title = $game->title;
|
| | | break;
|
| | | case 'splash':
|
| | | global $game;
|
| | | $content_title = $game->title;
|
| | | break;
|
| | | case 'category':
|
| | | global $category;
|
| | | $content_title = _t($category->name);
|
| | | break;
|
| | | case 'tag':
|
| | | global $tag_name;
|
| | | $content_title = _t($tag_name);
|
| | | break;
|
| | | case 'user':
|
| | | global $url_params;
|
| | | $content_title = $url_params[1];
|
| | | break;
|
| | | case 'page':
|
| | | global $page;
|
| | | $content_title = $page->title;
|
| | | break;
|
| | | case 'post':
|
| | | global $post;
|
| | | if(isset($post)){
|
| | | $content_title = $post->title;
|
| | | } else {
|
| | | $content_title = _t('Posts');
|
| | | }
|
| | | break;
|
| | | case '404':
|
| | | $content_title = '404';
|
| | | break;
|
| | | case 'search':
|
| | | $content_title = _t('Search %a Games', $_GET['slug']);
|
| | | break;
|
| | | default:
|
| | | global $page_title;
|
| | | if(isset($page_title)){
|
| | | $content_title = $page_title;
|
| | | } else {
|
| | | $content_title = get_site_info('title');
|
| | | }
|
| | | }
|
| | | if($title_template == 'default'){
|
| | | if($base_taxonomy == 'user'){
|
| | | return htmlspecialchars($content_title);
|
| | | } else {
|
| | | return htmlspecialchars($content_title . ' | ' . get_site_info('description'));
|
| | | }
|
| | | } else {
|
| | | $title_template = str_replace('{content_title}', $content_title, $title_template);
|
| | | $title_template = str_replace('{site_description}', get_site_info('description'), $title_template);
|
| | | $title_template = str_replace('{site_title}', get_site_info('title'), $title_template);
|
| | | return htmlspecialchars($title_template);
|
| | | }
|
| | | }
|
| | |
|
| | | function get_current_user_data(){
|
| | | // Get current logged-in visitor data or info
|
| | | // return null if visitor is not logged-in user
|
| | | if(is_login()){
|
| | | global $login_user;
|
| | | return $login_user;
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | function get_theme_header(){
|
| | | global $page_title;
|
| | | global $meta_description;
|
| | | global $login_user;
|
| | | if(file_exists(TEMPLATE_PATH . '/header.php')){
|
| | | include TEMPLATE_PATH . '/header.php';
|
| | | } else if(file_exists(TEMPLATE_PATH . '/includes/header.php')){
|
| | | include TEMPLATE_PATH . '/includes/header.php';
|
| | | }
|
| | | }
|
| | |
|
| | | function get_theme_sidebar(){
|
| | | global $page_title;
|
| | | global $meta_description;
|
| | | global $login_user;
|
| | | if(file_exists(TEMPLATE_PATH . '/sidebar.php')){
|
| | | include TEMPLATE_PATH . '/sidebar.php';
|
| | | } else if(file_exists(TEMPLATE_PATH . '/includes/sidebar.php')){
|
| | | include TEMPLATE_PATH . '/includes/sidebar.php';
|
| | | } else if(file_exists(TEMPLATE_PATH . '/parts/sidebar.php')){
|
| | | include TEMPLATE_PATH . '/parts/sidebar.php';
|
| | | }
|
| | | }
|
| | |
|
| | | function get_theme_footer(){
|
| | | global $page_title;
|
| | | global $meta_description;
|
| | | global $login_user;
|
| | | if(file_exists(TEMPLATE_PATH . '/footer.php')){
|
| | | include TEMPLATE_PATH . '/footer.php';
|
| | | } else if(file_exists(TEMPLATE_PATH . '/includes/footer.php')){
|
| | | include TEMPLATE_PATH . '/includes/footer.php';
|
| | | }
|
| | | }
|
| | |
|
| | | function can_show_leaderboard(){
|
| | | // Check if current $game can show leaderboard or not by checking game source
|
| | | // return true if current game is self-upload/hosted
|
| | | global $game;
|
| | | if(isset($game)){
|
| | | if($game->source == 'self'){
|
| | | return true;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function render_game_comments($game_id){
|
| | | if(get_setting_value('comments')){
|
| | | if (function_exists('custom_render_game_comments')) {
|
| | | custom_render_game_comments($game_id);
|
| | | return;
|
| | | } else {
|
| | | ?>
|
| | | <div id="tpl-comment-section" data-id="<?php echo esc_int($game_id) ?>">
|
| | | <?php if(is_login()){ ?>
|
| | | <div id="comment-form">
|
| | | <div class="comment-profile-avatar">
|
| | | <img src="<?php echo get_user_avatar() ?>">
|
| | | </div>
|
| | | <div class="comment-form-wrapper" id="tpl-comment-form">
|
| | | <div class="tpl-alert-tooshort" style="display: none;"><?php _e('Your comment is too short. Please enter at least {{min}} characters.') ?></div>
|
| | | <textarea class="form-control tpl-comment-input" rows="3" placeholder="Enter your comment here..."></textarea>
|
| | | <div class="post-comment-btn-wrapper">
|
| | | <button class="btn btn-primary tpl-post-comment-btn btn-sm"><?php _e('Post comment') ?></button>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <?php } else { ?>
|
| | | <div class="comment-require-login-wrapper">
|
| | | <div class="comment-profile-avatar">
|
| | | <img src="<?php echo DOMAIN . 'images/default_profile.png' ?>">
|
| | | </div>
|
| | | <div class="comment-alert">
|
| | | <?php _e('You must log in to write a comment.') ?>
|
| | | </div>
|
| | | </div>
|
| | | <?php } ?>
|
| | | <div id="tpl-comment-list">
|
| | | </div>
|
| | | <!-- Comment template -->
|
| | | <div id="tpl-comment-template" style="display:none;">
|
| | | <!-- User comment template -->
|
| | | <div class="tpl-user-comment" data-id="{{comment_id}}">
|
| | | <div class="user-comment-wrapper">
|
| | | <div class="user-comment-avatar">
|
| | | <img class="tpl-user-comment-avatar" src="{{profile_picture_url}}" alt="User Avatar">
|
| | | </div>
|
| | | <div class="comment-content">
|
| | | <div class="tpl-comment-author">{{fullname}}</div>
|
| | | <div class="tpl-comment-timestamp">{{created}}</div>
|
| | | <div class="tpl-comment-text">{{content}}</div>
|
| | | <div class="comment-actions">
|
| | | <div class="comment-action-left">
|
| | | <div class="reply-wrapper">
|
| | | <a href="#" onclick="return false;" class="tpl-btn-show-replies" data-id="{{comment_id}}"><i class="fa fa-comment-o" aria-hidden="true"></i> <?php _e('Show replies') ?></a>
|
| | | <a href="#" onclick="return false;" class="tpl-btn-hide-replies" data-id="{{comment_id}}"><i class="fa fa-comment-o" aria-hidden="true"></i> <?php _e('Hide replies') ?></a>
|
| | | </div>
|
| | | </div>
|
| | | <?php if(is_login()){ ?>
|
| | | <div class="comment-action-right">
|
| | | <a href="#" class="tpl-comment-reply" data-id="{{comment_id}}">
|
| | | <i class="fa fa-reply" aria-hidden="true"></i> Reply
|
| | | </a>
|
| | | </div>
|
| | | <?php } ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div class="tpl-reply-form-wrapper"></div>
|
| | | <div class="tpl-comment-children"></div>
|
| | | </div>
|
| | | <!-- Reply form template -->
|
| | | <div class="tpl-reply-form">
|
| | | <div class="comment-reply-wrapper">
|
| | | <textarea class="form-control tpl-reply-input" placeholder="Your reply..."></textarea>
|
| | | <div class="reply-action-buttons">
|
| | | <button class="btn btn-sm tpl-btn-cancel-reply" data-id="{{comment_id}}"><?php _e('Cancel') ?></button>
|
| | | <button class="btn btn-primary btn-sm tpl-btn-send-reply" data-id="{{comment_id}}"><?php _e('Reply') ?></button>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <div id="tpl-btn-load-more-comments" class="btn" style="display: none;"><?php _e('Load more comments') ?> <i class="fa fa-chevron-down" aria-hidden="true"></i></div>
|
| | | </div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function get_site_info($type){
|
| | | if($type == 'title'){
|
| | | if(_t('_site_title') !== '_site_title'){ // Have a translation
|
| | | return _t('_site_title');
|
| | | } else {
|
| | | return SITE_TITLE;
|
| | | }
|
| | | } else if($type == 'description'){
|
| | | if(_t('_site_description') !== '_site_description'){ // Have a translation
|
| | | return _t('_site_description');
|
| | | } else {
|
| | | return SITE_DESCRIPTION;
|
| | | }
|
| | | } else if($type == 'meta_description'){
|
| | | if(_t('_meta_description') !== '_meta_description'){ // Have a translation
|
| | | return _t('_meta_description');
|
| | | } else {
|
| | | return META_DESCRIPTION;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function fetch_all_tags($sort = 'random', $limit = 100){
|
| | | // $sort = name, usage, random
|
| | | return get_tags($sort, $limit);
|
| | | }
|
| | |
|
| | | function is_home(){
|
| | | global $base_taxonomy;
|
| | | if($base_taxonomy == 'homepage'){
|
| | | return true;
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function is_game(){
|
| | | global $base_taxonomy;
|
| | | if($base_taxonomy == 'game'){
|
| | | global $game;
|
| | | if(isset($game)){
|
| | | return true;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function is_search(){
|
| | | global $base_taxonomy;
|
| | | if($base_taxonomy == 'search'){
|
| | | return true;
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function is_category(){
|
| | | global $base_taxonomy;
|
| | | if($base_taxonomy == 'category'){
|
| | | return true;
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function is_page(){
|
| | | global $base_taxonomy;
|
| | | if($base_taxonomy == 'page'){
|
| | | global $page;
|
| | | if(isset($page)){
|
| | | return true;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function is_post(){
|
| | | global $base_taxonomy;
|
| | | if($base_taxonomy == 'post'){
|
| | | global $post;
|
| | | if(isset($post)){
|
| | | return true;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function is_tag(){
|
| | | global $base_taxonomy;
|
| | | if($base_taxonomy == 'tag'){
|
| | | global $tag;
|
| | | if(isset($tag)){
|
| | | return true;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function home_url( $path = '' ){
|
| | | return rtrim(DOMAIN, '/') . $path;
|
| | | }
|
| | |
|
| | | function render_nav_menu($name = 'top_nav', $args = array()){
|
| | | $defaults = array(
|
| | | 'container' => '',
|
| | | 'container_id' => '',
|
| | | 'container_class' => '',
|
| | | 'no_ul' => false,
|
| | | 'ul_id' => '',
|
| | | 'ul_class' => '',
|
| | | 'li_id' => '',
|
| | | 'li_class' => 'nav-item',
|
| | | 'li_class_parent' => 'dropdown',
|
| | | 'a_class' => 'nav-link',
|
| | | 'a_class_parent' => 'dropdown-toggle',
|
| | | 'after_parent' => '',
|
| | | 'children' => array(),
|
| | | );
|
| | | |
| | | $args = merge_args( $args, $defaults );
|
| | |
|
| | | $array_menu = nav_menu_array($name);
|
| | | if(count($array_menu)){
|
| | | if($args['container'] != ''){
|
| | | echo '<'.$args['container'];
|
| | | echo !empty($args['container_id']) ? ' id="'.$args['container_id'].'"' : '';
|
| | | echo !empty($args['container_class']) ? ' class="'.$args['container_class'].'"' : '';
|
| | | echo '>';
|
| | | }
|
| | | if(!$args['no_ul']){
|
| | | echo '<ul';
|
| | | echo !empty($args['ul_id']) ? ' id="'.$args['ul_id'].'"' : '';
|
| | | echo !empty($args['ul_class']) ? ' class="'.$args['ul_class'].'"' : '';
|
| | | echo '>';
|
| | | }
|
| | | foreach($array_menu as $menu){
|
| | | $parent_class = '';
|
| | | if(isset($menu['children'])){
|
| | | $parent_class = !empty($args['li_class_parent']) ? $args['li_class_parent'] : '';
|
| | | }
|
| | | echo '<li';
|
| | | echo !empty($args['li_id']) ? ' id="'.$args['li_id'].'"' : '';
|
| | | echo !empty($args['li_class']) ? ' class="'.$args['li_class'].' '.$parent_class.'"' : '';
|
| | | echo '>';
|
| | | if(isset($menu['children'])){
|
| | | $menu['url'] = '#';
|
| | | }
|
| | | $a_class_parent = '';
|
| | | if(isset($menu['children'])){
|
| | | $a_class_parent = $args['a_class_parent'];
|
| | | $menu['url'] = '#';
|
| | | }
|
| | | echo '<a class="'.$args['a_class'].' '.$a_class_parent.'" href="'.$menu['url'].'"';
|
| | | if(isset($menu['children'])){
|
| | | echo ' data-bs-toggle="dropdown"';
|
| | | }
|
| | | echo '>';
|
| | | echo _t($menu['label']);
|
| | | if(isset($menu['children'])){
|
| | | echo $args['after_parent'];
|
| | | }
|
| | | echo '</a>';
|
| | | if(isset($menu['children'])){
|
| | | render_nav_children($menu['children'], $args['children']);
|
| | | }
|
| | | echo '</li>';
|
| | | }
|
| | | if(!$args['no_ul']){
|
| | | echo '</ul>';
|
| | | }
|
| | | if($args['container'] != ''){
|
| | | echo '</'.$args['container'].'>';
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function render_nav_children($array_menu, $args){
|
| | | $defaults = array(
|
| | | 'no_ul' => false,
|
| | | 'ul_id' => '',
|
| | | 'ul_class' => 'dropdown-menu',
|
| | | 'li_id' => '',
|
| | | 'li_class' => 'nav-item-child',
|
| | | 'li_class_parent' => 'dropdown-submenu',
|
| | | 'a_class' => 'nav-link-child',
|
| | | 'a_class_parent' => 'dropdown-toggle',
|
| | | 'submenu_ul_class' => 'submenu dropdown-menu' // class for sub-menu <ul>
|
| | | );
|
| | | |
| | | $args = merge_args($args, $defaults);
|
| | |
|
| | | if (count($array_menu)) {
|
| | | if (!$args['no_ul']) {
|
| | | echo '<ul role="menu" ';
|
| | | echo !empty($args['ul_id']) ? ' id="' . $args['ul_id'] . '"' : '';
|
| | | echo !empty($args['ul_class']) ? ' class="' . $args['ul_class'] . '"' : '';
|
| | | echo '>';
|
| | | }
|
| | | foreach ($array_menu as $menu) {
|
| | | $is_parent = false;
|
| | | if(!empty($menu['children'])){
|
| | | $is_parent = true;
|
| | | }
|
| | | echo '<li';
|
| | | echo !empty($args['li_id']) ? ' id="' . $args['li_id'] . '"' : '';
|
| | | echo !empty($args['li_class']) ? ' class="' . $args['li_class'] . ' ' . ($is_parent ? $args['li_class_parent'] : '') . '"' : '';
|
| | | echo '>';
|
| | | $a_class_parent = '';
|
| | | if ($is_parent) {
|
| | | // Is parent
|
| | | $menu['url'] = '#';
|
| | | $a_class_parent = $args['a_class_parent'];
|
| | | }
|
| | | echo '<a class="' . $args['a_class'] . ' ' . $a_class_parent.'" href="' . $menu['url'] . '">';
|
| | | echo _t($menu['label']);
|
| | | echo '</a>';
|
| | | if ($is_parent) {
|
| | | // Recursive call to render children
|
| | | $child_args = $args;
|
| | | $child_args['ul_class'] = $args['submenu_ul_class']; // Change class for sub-menu
|
| | | render_nav_children($menu['children'], $child_args);
|
| | | }
|
| | | echo '</li>';
|
| | | }
|
| | | if (!$args['no_ul']) {
|
| | | echo '</ul>';
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function get_content_title_translation($content_type, $content_id, $original_title){
|
| | | // This function can only be used if "lang code in url" is activated
|
| | | // This function is used to translate content title, especialy games in content loop or list.
|
| | | // This function is marked as slow-execution script that may can slow down your site load
|
| | | // Reason why it slow : each call do database iteration to fetch the translated title
|
| | | global $lang_url_enabled;
|
| | | global $language_file_exist;
|
| | | global $lang_code;
|
| | | if(PRETTY_URL && $lang_url_enabled && $language_file_exist){
|
| | | if($lang_code != 'en'){
|
| | | $translated_title = get_content_translation($content_type, $content_id, $lang_code, 'title');
|
| | | if($translated_title){
|
| | | return esc_string($translated_title);
|
| | | }
|
| | | }
|
| | | }
|
| | | return esc_string($original_title);
|
| | | }
|
| | |
|
| | | function get_slug_translation($slug){
|
| | | $translated_slug = _t('slug:'.$slug);
|
| | | if($translated_slug == 'slug:'.$slug){
|
| | | // No translation, return original
|
| | | return $slug;
|
| | | } else {
|
| | | return $translated_slug;
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | [
|
| | | {
|
| | | "name": "site_title",
|
| | | "type": "text",
|
| | | "category": "general",
|
| | | "label": "Site title",
|
| | | "tooltip": "",
|
| | | "value": "Cloud Arcade"
|
| | | },
|
| | | {
|
| | | "name": "site_description",
|
| | | "type": "text",
|
| | | "category": "general",
|
| | | "label": "Site description",
|
| | | "tooltip": "",
|
| | | "value": "Play HTML5 Games"
|
| | | },
|
| | | {
|
| | | "name": "meta_description",
|
| | | "type": "text",
|
| | | "category": "general",
|
| | | "label": "Meta description",
|
| | | "tooltip": "",
|
| | | "value": "Play HTML5 Games for Free"
|
| | | },
|
| | | {
|
| | | "name": "site_logo",
|
| | | "type": "url",
|
| | | "category": "general",
|
| | | "label": "Site logo",
|
| | | "tooltip": "",
|
| | | "value": "images\/cloudarcade-logo.png"
|
| | | },
|
| | | {
|
| | | "name": "language",
|
| | | "type": "text",
|
| | | "category": "general",
|
| | | "label": "Language",
|
| | | "tooltip": "",
|
| | | "value": "en"
|
| | | },
|
| | | {
|
| | | "name": "purchase_code",
|
| | | "type": "text",
|
| | | "category": "general",
|
| | | "label": "Purchase code",
|
| | | "tooltip": "",
|
| | | "value": ""
|
| | | },
|
| | | {
|
| | | "name": "theme_name",
|
| | | "type": "text",
|
| | | "category": "",
|
| | | "label": "Theme name",
|
| | | "tooltip": "",
|
| | | "value": "default"
|
| | | },
|
| | | {
|
| | | "name": "import_thumb",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "Save\/import thumbnails",
|
| | | "tooltip": "Save game thumbnails from fetch and remote games to local server. images also compressed and can reduce file size up to 80%. Page will be loaded more quickly.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "small_thumb",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "Small thumbnails",
|
| | | "tooltip": "Generate small thumbnail (160x160 px) from thumb_2. Can be used to replace thumb_2 for faster page load, since thumb_2 have 512px size. *Require active import thumbnails.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "webp_thumbnail",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "WEBP thumbnails",
|
| | | "tooltip": "Webp is a next gen image format for web. Reduce file size up to 80% compared to regular PNG or JPG and also SEO friendly. *Require active import thumbnails.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "custom_slug",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "Custom slug",
|
| | | "tooltip": "Let you set the slug of games, posts and pages url manually.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "pretty_url",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "Pretty url",
|
| | | "tooltip": "(Recommended) SEO Friendly URL. If you're using Nginx, you need to update Rewrite Rules before activating Pretty URL.",
|
| | | "value": 1
|
| | | },
|
| | | {
|
| | | "name": "unicode_slug",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "Unicode slug",
|
| | | "tooltip": "Use non-latin characters (Arabic, Russian, Chinese.etc) for slug or url. There's no guarantee it will work flawlessly without any compatibility issues.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "use_https",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "Use HTTPS",
|
| | | "tooltip": "If your site running over https, active this.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "use_www",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "Use WWW",
|
| | | "tooltip": "Use WWW url, all permalink will be www.your-domain.com",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "auto_sitemap",
|
| | | "type": "bool",
|
| | | "category": "advanced",
|
| | | "label": "Auto sitemap",
|
| | | "tooltip": "Automatically update sitemap after add or remove content.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "comments",
|
| | | "type": "bool",
|
| | | "category": "user",
|
| | | "label": "Comments",
|
| | | "tooltip": "Allow user to post a comment",
|
| | | "value": 1
|
| | | },
|
| | | {
|
| | | "name": "upload_avatar",
|
| | | "type": "bool",
|
| | | "category": "user",
|
| | | "label": "Upload avatar",
|
| | | "tooltip": "Allow registered user to upload their avatar",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "user_register",
|
| | | "type": "bool",
|
| | | "category": "user",
|
| | | "label": "User\/player registration",
|
| | | "tooltip": "",
|
| | | "value": 1
|
| | | },
|
| | | {
|
| | | "name": "custom_path",
|
| | | "type": "textarea",
|
| | | "category": "",
|
| | | "label": "Custom path",
|
| | | "tooltip": "",
|
| | | "value": ""
|
| | | },
|
| | | {
|
| | | "name": "show_login",
|
| | | "type": "bool",
|
| | | "category": "user",
|
| | | "label": "Show login",
|
| | | "tooltip": "Show login link in the theme navigation menu",
|
| | | "value": 1
|
| | | },
|
| | | {
|
| | | "name": "moderate_comment",
|
| | | "type": "bool",
|
| | | "category": "user",
|
| | | "label": "Moderate comment",
|
| | | "tooltip": "All user comments must be approved before availabe for public",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "captcha",
|
| | | "type": "bool",
|
| | | "category": "user",
|
| | | "label": "CAPTCHA",
|
| | | "tooltip": "Show CAPTCHA on registration page.",
|
| | | "value": 1
|
| | | },
|
| | | {
|
| | | "name": "require_email",
|
| | | "type": "bool",
|
| | | "category": "user",
|
| | | "label": "Require Email for Registration",
|
| | | "tooltip": "Users need to fill out the email form for registration.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "splash",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Splash Screen (Self uploaded)",
|
| | | "tooltip": "Show splash screen before game loaded. Only work for uploaded games.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "show_ad_on_splash",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Show Ad On Splash",
|
| | | "tooltip": "",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "trailing_slash",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Trailing slash",
|
| | | "tooltip": "A trailing slash is a forward slash (\/) at the end of a URL. If activated, your url will be domain.com\/game\/title\/",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "lang_code_in_url",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Language code in URL",
|
| | | "tooltip": "When activated, your URL will contain a language ID, such as domain.com\/en\/game\/title for English or domain.com\/fr\/game\/title for French. This can be utilized for multilingual sites.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "purify_page",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Sanitize HTML on Pages",
|
| | | "tooltip": "Allows you to use all HTML tags in page content without HTML filtering.",
|
| | | "value": 1
|
| | | },
|
| | | {
|
| | | "name": "disable_rtl",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Disable RTL",
|
| | | "tooltip": "If your site layout breaks after switching to an RTL (Right to Left) language, activate this option to switch it back to LTR.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "allow_splash_on_remote_games",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Allow splash screen on remote games",
|
| | | "tooltip": "Display splash screen for remotely added games.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "disable_en_language",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Disable English language",
|
| | | "tooltip": "If you are using a multilingual URL and don't want to use the English language, activate this option.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "hide_pc_on_mobile",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Hide PC Games on Mobile",
|
| | | "tooltip": "PC games will not be shown or loaded on mobile devices.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "search_results_per_page",
|
| | | "type": "number",
|
| | | "category": "listings",
|
| | | "label": "Search",
|
| | | "tooltip": "",
|
| | | "value": 36
|
| | | },
|
| | | {
|
| | | "name": "category_results_per_page",
|
| | | "type": "number",
|
| | | "category": "listings",
|
| | | "label": "Category",
|
| | | "tooltip": "",
|
| | | "value": 36
|
| | | },
|
| | | {
|
| | | "name": "post_results_per_page",
|
| | | "type": "number",
|
| | | "category": "listings",
|
| | | "label": "Posts",
|
| | | "tooltip": "",
|
| | | "value": 10
|
| | | },
|
| | | {
|
| | | "name": "disable_iconv",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Disable iconv()",
|
| | | "tooltip": "If you get iconv() related error when add games, check this.",
|
| | | "value": 0
|
| | | },
|
| | | {
|
| | | "name": "allow_slug_translation",
|
| | | "type": "bool",
|
| | | "category": "other",
|
| | | "label": "Allow Slug Translation",
|
| | | "tooltip": "Allow localization or translation for category and tag slug.",
|
| | | "value": 0
|
| | | }
|
| | | ] |
| New file |
| | |
| | | DROP TABLE IF EXISTS users; |
| | |
|
| | | CREATE TABLE users |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | username VARCHAR(255) NOT NULL,
|
| | | password TEXT NOT NULL, |
| | | role VARCHAR(255) NOT NULL,
|
| | | join_date DATE NULL DEFAULT NULL,
|
| | | birth_date DATE NULL DEFAULT NULL,
|
| | | gender varchar(15) NULL DEFAULT NULL,
|
| | | data text NULL DEFAULT NULL,
|
| | | email varchar(40) NULL DEFAULT NULL,
|
| | | bio varchar(180) NULL DEFAULT NULL,
|
| | | xp varchar(180) NULL DEFAULT 0,
|
| | | avatar varchar(180) NULL DEFAULT 0,
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS loginlogs; |
| | |
|
| | | CREATE TABLE loginlogs (
|
| | | id SMALLINT UNSIGNED NOT NULL auto_increment,
|
| | | IpAddress varbinary(16) NOT NULL,
|
| | | TryTime bigint(20) NOT NULL,
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS login_history; |
| | |
|
| | | CREATE TABLE login_history (
|
| | | id SMALLINT UNSIGNED NOT NULL auto_increment,
|
| | | ip varbinary(16) NOT NULL,
|
| | | data MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS categories; |
| | |
|
| | | CREATE TABLE categories |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | slug VARCHAR(30) NOT NULL,
|
| | | description MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | meta_description MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | fields TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | extra_fields mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | priority smallint(6) NOT NULL DEFAULT '0',
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS cat_links; |
| | |
|
| | | CREATE TABLE cat_links |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | gameid SMALLINT UNSIGNED NOT NULL,
|
| | | categoryid SMALLINT UNSIGNED NOT NULL,
|
| | | PRIMARY KEY (id) |
| | | ); |
| | |
|
| | | DROP TABLE IF EXISTS pages; |
| | |
|
| | | CREATE TABLE pages |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | createddate DATE NOT NULL,
|
| | | title VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | slug VARCHAR(255) NOT NULL,
|
| | | content MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | nl2br tinyint(4) NOT NULL DEFAULT '1',
|
| | | fields TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | extra_fields mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS posts; |
| | |
|
| | | CREATE TABLE posts |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | created_date DATE NOT NULL,
|
| | | title VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | slug VARCHAR(255) NOT NULL,
|
| | | thumbnail_url VARCHAR(255) NOT NULL,
|
| | | content MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | fields TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | extra_fields mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS games; |
| | |
|
| | | CREATE TABLE games |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | createddate DATE NOT NULL,
|
| | | title VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | description MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, |
| | | instructions MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, |
| | | category TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, |
| | | source TEXT NOT NULL, |
| | | thumb_1 VARCHAR(255) NOT NULL,
|
| | | thumb_2 VARCHAR(255) NOT NULL,
|
| | | thumb_small VARCHAR(255) NOT NULL,
|
| | | url TEXT NOT NULL, |
| | | width TEXT NOT NULL, |
| | | height TEXT NOT NULL, |
| | | tags TEXT NOT NULL, |
| | | views INT NOT NULL, |
| | | upvote INT NOT NULL, |
| | | downvote INT NOT NULL,
|
| | | slug VARCHAR(255) NOT NULL,
|
| | | data MEDIUMTEXT NULL DEFAULT NULL,
|
| | | is_mobile TINYINT(1) NOT NULL DEFAULT '1',
|
| | | last_modified DATETIME NULL DEFAULT NULL,
|
| | | fields TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | extra_fields mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | published tinyint(1) NOT NULL DEFAULT '1',
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS votelogs; |
| | |
|
| | | CREATE TABLE votelogs |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | game_id SMALLINT UNSIGNED NOT NULL,
|
| | | ip varbinary(16) NOT NULL,
|
| | | action TEXT NOT NULL, |
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS favorites; |
| | |
|
| | | CREATE TABLE favorites |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | game_id SMALLINT UNSIGNED NOT NULL,
|
| | | user_id SMALLINT UNSIGNED NOT NULL,
|
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS collections; |
| | |
|
| | | CREATE TABLE collections |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | data MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS comments;
|
| | |
|
| | | CREATE TABLE comments (
|
| | | id int(10) unsigned NOT NULL AUTO_INCREMENT,
|
| | | game_id int(10) NOT NULL,
|
| | | parent_id int(10) unsigned DEFAULT NULL,
|
| | | comment varchar(400) NOT NULL,
|
| | | sender_id int(40) NOT NULL,
|
| | | sender_username varchar(20) NOT NULL,
|
| | | created_date DATETIME NULL DEFAULT NULL,
|
| | | approved tinyint(4) NOT NULL DEFAULT '1',
|
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS scores;
|
| | |
|
| | | CREATE TABLE scores |
| | | ( |
| | | id SMALLINT UNSIGNED NOT NULL auto_increment, |
| | | created_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
| | | game_id int(40) NOT NULL,
|
| | | user_id int(40) NOT NULL,
|
| | | score INT(6) UNSIGNED NOT NULL DEFAULT '0',
|
| | | PRIMARY KEY (id) |
| | | );
|
| | |
|
| | | CREATE TABLE IF NOT EXISTS statistics (
|
| | | id int(11) unsigned NOT NULL AUTO_INCREMENT,
|
| | | created_date date DEFAULT NULL,
|
| | | page_views varchar(255) DEFAULT NULL,
|
| | | unique_visitor varchar(255) DEFAULT NULL,
|
| | | data mediumtext DEFAULT NULL,
|
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS stats_ip_address; |
| | |
|
| | | CREATE TABLE stats_ip_address (
|
| | | id int(11) unsigned NOT NULL AUTO_INCREMENT,
|
| | | ip_address varchar(255) DEFAULT NULL,
|
| | | created_date date DEFAULT NULL,
|
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS sessions; |
| | |
|
| | | CREATE TABLE sessions (
|
| | | token varchar(400) NOT NULL,
|
| | | data text NOT NULL
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS prefs;
|
| | |
|
| | | CREATE TABLE prefs (
|
| | | id int(11) NOT NULL AUTO_INCREMENT,
|
| | | name varchar(255) NOT NULL,
|
| | | value text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS menus;
|
| | |
|
| | | CREATE TABLE menus (
|
| | | id int(11) unsigned NOT NULL AUTO_INCREMENT,
|
| | | label varchar(255) CHARACTER SET utf8 DEFAULT NULL,
|
| | | url varchar(512) CHARACTER SET utf8 DEFAULT NULL,
|
| | | parent_id int(11) DEFAULT NULL,
|
| | | name varchar(255) DEFAULT NULL,
|
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS trends;
|
| | |
|
| | | CREATE TABLE trends (
|
| | | id int(11) NOT NULL AUTO_INCREMENT,
|
| | | game_id int(11) DEFAULT NULL,
|
| | | views int(11) NOT NULL,
|
| | | created date NOT NULL,
|
| | | slug varchar(255) CHARACTER SET utf8 NOT NULL,
|
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS tags;
|
| | |
|
| | | CREATE TABLE tags (
|
| | | id smallint(11) unsigned NOT NULL AUTO_INCREMENT,
|
| | | name varchar(255) CHARACTER SET utf8 DEFAULT NULL,
|
| | | usage_count int(11) NOT NULL DEFAULT '0',
|
| | | extra_fields varchar(6000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | PRIMARY KEY (id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS tag_links;
|
| | |
|
| | | CREATE TABLE tag_links (
|
| | | game_id smallint(11) unsigned NOT NULL,
|
| | | tag_id smallint(11) unsigned NOT NULL,
|
| | | PRIMARY KEY (game_id,tag_id)
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS settings;
|
| | |
|
| | | CREATE TABLE settings (
|
| | | id INT PRIMARY KEY AUTO_INCREMENT,
|
| | | name VARCHAR(255) NOT NULL,
|
| | | type VARCHAR(255) NOT NULL,
|
| | | category VARCHAR(255) NOT NULL,
|
| | | label MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | tooltip MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | description MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci,
|
| | | value MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS translations;
|
| | |
|
| | | CREATE TABLE translations
|
| | | (
|
| | | id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
| | | content_type VARCHAR(50) NOT NULL, -- e.g., 'game', 'post', 'category'
|
| | | content_id INT UNSIGNED NOT NULL, -- corresponds to the relevant table but not a foreign key
|
| | | language VARCHAR(5) NOT NULL, -- e.g., 'en', 'fr', etc.
|
| | | field VARCHAR(50) NOT NULL, -- e.g., 'title', 'description', 'content'
|
| | | translation MEDIUMTEXT NOT NULL,
|
| | | PRIMARY KEY (id),
|
| | | INDEX idx_translations (content_type, content_id, language, field) -- An index for faster lookups
|
| | | );
|
| | |
|
| | | DROP TABLE IF EXISTS extra_fields;
|
| | |
|
| | | CREATE TABLE extra_fields
|
| | | (
|
| | | id INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
| | | content_type VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | field_key VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | title VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | type VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | placeholder VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | default_value VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
| | | meta TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
| | | PRIMARY KEY (id)
|
| | | );
|
| New file |
| | |
| | | <?php
|
| | |
|
| | | if (session_status() == PHP_SESSION_NONE) {
|
| | | session_start();
|
| | | }
|
| | |
|
| | | require( '../config.php' );
|
| | | require( '../init.php' );
|
| | |
|
| | | if(isset($_POST['action'])){
|
| | | $score = null;
|
| | | if($_POST['action'] === 'submit'){
|
| | | if($login_user){ //Only logged in user
|
| | | $user_id = $login_user->id;
|
| | | if(isset($_POST['value']) && isset($_POST['ref'])){
|
| | | $score = $_POST['value'];
|
| | | $score = base64_decode($score);
|
| | | $score = $score*1.33;
|
| | | if (strpos($score, '.')) { |
| | | //invalid
|
| | | } else {
|
| | | $game = Game::getBySlug($_POST['ref']);
|
| | | if($game){
|
| | | $game_id = $game->id;
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT score FROM scores WHERE user_id = :user_id AND game_id = :game_id LIMIT 1';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
|
| | | $st->bindValue(":user_id", $user_id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if($row){ //Update existing data
|
| | | if($row['score'] < $score){
|
| | | $sql = 'UPDATE scores SET score = :score WHERE user_id = :user_id AND game_id = :game_id LIMIT 1';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
|
| | | $st->bindValue(":user_id", $user_id, PDO::PARAM_INT);
|
| | | $st->bindValue(":score", $score, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | | } else {
|
| | | $sql = 'INSERT INTO scores (game_id, user_id, score) VALUES ( :game_id, :user_id, :score)';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
|
| | | $st->bindValue(":user_id", $user_id, PDO::PARAM_INT);
|
| | | $st->bindValue(":score", $score, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | | //
|
| | | $login_user->xp += 10;
|
| | | $login_user->update_xp();
|
| | | //
|
| | | echo 'ok';
|
| | | }
|
| | | }
|
| | | } else {
|
| | | die('x');
|
| | | }
|
| | | } |
| | | } elseif ($_POST['action'] === 'get_current_user'){
|
| | | if($login_user){
|
| | | $user = array();
|
| | | $user['username'] = $login_user->username;
|
| | | $user['id'] = $login_user->id;
|
| | | $user['gender'] = $login_user->gender;
|
| | | $user['join_date'] = $login_user->join_date;
|
| | | $user['birth_date'] = $login_user->birth_date;
|
| | | echo json_encode($user);
|
| | | }
|
| | | } elseif ($_POST['action'] === 'get_user_score'){
|
| | | //Get current user score
|
| | | if($login_user){
|
| | | $user_id = $login_user->id;
|
| | | $game = Game::getBySlug($_POST['ref']);
|
| | | if(!$game){
|
| | | die();
|
| | | }
|
| | | $game_id = $game->id;
|
| | | $sql = "SELECT score FROM scores WHERE user_id = :user_id AND game_id = :game_id LIMIT 1";
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":user_id", $user_id, PDO::PARAM_INT);
|
| | | $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $res = $st->fetch();
|
| | | if($res){
|
| | | echo $res['score'];
|
| | | } else {
|
| | | echo 0;
|
| | | }
|
| | | }
|
| | | } elseif ($_POST['action'] === 'get_score_rank'){
|
| | | //Get current user score rank
|
| | | if($login_user){
|
| | | $user_id = $login_user->id;
|
| | | $game = Game::getBySlug($_POST['ref']);
|
| | | if(!$game){
|
| | | die();
|
| | | }
|
| | | $game_id = $game->id;
|
| | | $sql = "SELECT * FROM scores WHERE game_id = :game_id ORDER by score DESC LIMIT 5000";
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | if(count($row)){
|
| | | $i = 0;
|
| | | foreach ($row as $item) {
|
| | | $i++;
|
| | | if($item['user_id'] == $user_id){
|
| | | echo $i;
|
| | | return;
|
| | | }
|
| | | }
|
| | | }
|
| | | echo 0;
|
| | | }
|
| | | } elseif ($_POST['action'] === 'get_scoreboard'){
|
| | | if(isset($_POST['conf'])){
|
| | | $config = json_decode($_POST['conf'], true);
|
| | | $type = $config['type'];
|
| | | $amount = 10;
|
| | | if(isset($config['amount'])){
|
| | | $amount = $config['amount'];
|
| | | }
|
| | | $sql = null;
|
| | | $game = null;
|
| | | $game_id = null;
|
| | | if(isset($_POST['ref'])){
|
| | | //Old method
|
| | | $game = Game::getBySlug($_POST['ref']);
|
| | | if($game){
|
| | | $game_id = $game->id;
|
| | | }
|
| | | } elseif(isset($_POST['game-id'])){
|
| | | //New preferred method
|
| | | $game_id = (int)$_POST['game-id'];
|
| | | }
|
| | | if(!$game_id){
|
| | | die();
|
| | | }
|
| | | if($type === 'top-all'){
|
| | | $sql = "SELECT * FROM scores ORDER by score DESC, created_date ASC LIMIT ".$amount;
|
| | | } elseif($type === 'top-all-day'){
|
| | | $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER by score DESC LIMIT ".$amount;
|
| | | } elseif($type === 'top-all-week'){
|
| | | $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER by score DESC LIMIT ".$amount;
|
| | | } elseif($type === 'top-all-month'){
|
| | | $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER by score DESC LIMIT ".$amount;
|
| | | } elseif($type === 'top'){
|
| | | $sql = "SELECT * FROM scores WHERE game_id = ".$game_id." ORDER by score DESC LIMIT ".$amount;
|
| | | } elseif($type === 'top-day'){
|
| | | $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 DAY) AND game_id = ".$game_id." ORDER by score DESC LIMIT ".$amount;
|
| | | } elseif($type === 'top-week'){
|
| | | $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 WEEK) AND game_id = ".$game_id." ORDER by score DESC LIMIT ".$amount;
|
| | | } elseif($type === 'top-month'){
|
| | | $sql = "SELECT * FROM scores WHERE created_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) AND game_id = ".$game_id." ORDER by score DESC LIMIT ".$amount;
|
| | | }
|
| | | if($sql){
|
| | | $conn = open_connection();
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | //
|
| | | $row = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | $list = [];
|
| | | foreach($row as $item){
|
| | | $item['game_title'] = Game::getById($item['game_id'])->title;
|
| | | $item['username'] = User::getById($item['user_id'])->username;
|
| | | array_push($list, $item);
|
| | | }
|
| | | echo json_encode($list);
|
| | | } |
| | | }
|
| | | } elseif ($_POST['action'] === 'load_ad'){
|
| | | if(isset($_POST['value'])){
|
| | | $tags = get_pref('ads-manager');
|
| | | if($tags){
|
| | | $tags = json_decode($tags, true);
|
| | | $selected = null;
|
| | | foreach ($tags as $tag => $item) {
|
| | | if(strtolower($_POST['value']) == strtolower($tag)){
|
| | | $selected = $item;
|
| | | $selected['type'] = strtolower($tag);
|
| | | break;
|
| | | }
|
| | | }
|
| | | if(!$selected){
|
| | | foreach ($tags as $tag => $item) {
|
| | | if($item['default']){
|
| | | $selected = $item;
|
| | | $selected['type'] = strtolower($tag);
|
| | | break;
|
| | | }
|
| | | }
|
| | | }
|
| | | if($selected['type'] == 'banner'){
|
| | | if($selected['selected'] == 'random'){
|
| | | if(isset($selected['data']) && $selected['data']){
|
| | | $picked_banner = $selected['data'][rand(0, count($selected['data'])-1)];
|
| | | $selected['value'] = $picked_banner['image'];
|
| | | $selected['url'] = $picked_banner['url'];
|
| | | $selected['name'] = $picked_banner['name'];
|
| | | //Add show stats
|
| | | $ad_stats = get_pref('ads-manager-stats');
|
| | | if($ad_stats){
|
| | | $ad_stats = json_decode($ad_stats, true);
|
| | | } else {
|
| | | $ad_stats = array();
|
| | | }
|
| | | if(!isset($ad_stats[$picked_banner['name']])){
|
| | | $ad_stats[$picked_banner['name']] = array();
|
| | | $ad_stats[$picked_banner['name']]['views'] = 0;
|
| | | $ad_stats[$picked_banner['name']]['clicks'] = 0;
|
| | | }
|
| | | $ad_stats[$picked_banner['name']]['views']++;
|
| | | update_option('ads-manager-stats', json_encode($ad_stats));
|
| | | //End
|
| | | }
|
| | | }
|
| | | $selected['delay'] = 5;
|
| | | }
|
| | | echo json_encode($selected);
|
| | | } else {
|
| | | echo '{"error": "Ads Manager plugin not installed."}';
|
| | | }
|
| | | }
|
| | | } elseif ($_POST['action'] === 'ad_clicked'){
|
| | | if(isset($_POST['value'])){
|
| | | //Add click stats
|
| | | $name = $_POST['value'];
|
| | | $ad_stats = get_pref('ads-manager-stats');
|
| | | if($ad_stats){
|
| | | $ad_stats = json_decode($ad_stats, true);
|
| | | } else {
|
| | | $ad_stats = array();
|
| | | }
|
| | | if(!isset($ad_stats[$name])){
|
| | | $ad_stats[$name] = array();
|
| | | $ad_stats[$name]['views'] = 0;
|
| | | $ad_stats[$name]['clicks'] = 0;
|
| | | }
|
| | | $ad_stats[$name]['clicks']++;
|
| | | update_option('ads-manager-stats', json_encode($ad_stats));
|
| | | //End
|
| | | }
|
| | | } elseif ($_POST['action'] === 'get_ad_config'){
|
| | | if(get_pref_bool('ads-manager-active')){
|
| | | $result = array(
|
| | | 'status' => 'active',
|
| | | 'h5_client_id' => get_pref('ads-manager-h5-clientID')
|
| | | );
|
| | | echo json_encode($result);
|
| | | } else {
|
| | | $result = array(
|
| | | 'status' => 'inactive',
|
| | | 'h5_client_id' => ''
|
| | | );
|
| | | echo json_encode($result);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | ["admin","login","demo","administrator","super","default"] |
| New file |
| | |
| | | ["just_sample","another_sample"] |
| New file |
| | |
| | | ["just_sample","another_sample"] |
| New file |
| | |
| | | <?php |
| | | |
| | | if (session_status() == PHP_SESSION_NONE) { |
| | | session_start(); |
| | | } |
| | | |
| | | function get_random_string($length = 5) { |
| | | $characters = '0123456789abcdefghijklmnopqrstuvwxyz'; |
| | | $charactersLength = strlen($characters); |
| | | $randomString = ''; |
| | | for ($i = 0; $i < $length; $i++) { |
| | | $randomString .= $characters[rand(0, $charactersLength - 1)]; |
| | | } |
| | | return $randomString; |
| | | } |
| | | |
| | | $str = get_random_string(); |
| | | $_SESSION['captcha'] = $str; |
| | | |
| | | header("Content-type: image/png"); |
| | | header("Cache-Control: no-store, no-cache, must-revalidate"); |
| | | header("Pragma: no-cache"); |
| | | header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); |
| | | |
| | | $img_handle = ImageCreate(80, 35) or die("X"); |
| | | $back_color = ImageColorAllocate($img_handle, 102, 102, 153); |
| | | $txt_color = ImageColorAllocate($img_handle, 255, 255, 255); |
| | | ImageString($img_handle, 30, 15, 10, $str, $txt_color); |
| | | Imagepng($img_handle); |
| | | |
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require('../config.php');
|
| | | require('../init.php');
|
| | |
|
| | | if(get_setting_value('comments')){
|
| | | if(isset($_POST['send']) && $login_user){
|
| | | // Deprecated since v165
|
| | | // Replaced with new Comment system
|
| | | // Still kept for compatibility with the old commenting system
|
| | | $conn = open_connection();
|
| | | if(isset($_POST['source']) && $_POST['source'] == 'jquery-comments'){
|
| | | if(!$_POST['parent']){
|
| | | $_POST['parent'] = null;
|
| | | }
|
| | | $_POST['content'] = trim_string(comment_filtering($_POST['content']));
|
| | | $approved = 1;
|
| | | if(get_setting_value('moderate_comment') && $login_user->role != 'admin'){
|
| | | // Moderate comment is activated
|
| | | $approved = 0;
|
| | | }
|
| | | $sql = 'INSERT INTO comments (parent_id, game_id, comment, sender_id, sender_username, created_date, approved) VALUES (:parent_id, :game_id, :comment, :sender_id, :sender_username, :created_date, :approved)';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":parent_id", $_POST['parent'], PDO::PARAM_INT);
|
| | | $st->bindValue(":game_id", $_POST['game_id'], PDO::PARAM_INT);
|
| | | $st->bindValue(":comment", $_POST['content'], PDO::PARAM_STR);
|
| | | $st->bindValue(":sender_id", $login_user->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":sender_username", $login_user->username, PDO::PARAM_STR);
|
| | | $st->bindValue(":created_date", date('Y-m-d H:i:s'), PDO::PARAM_STR);
|
| | | $st->bindValue(":approved", $approved, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | |
|
| | | $login_user->add_xp(20);
|
| | |
|
| | | echo('success');
|
| | | }
|
| | | }
|
| | | if(isset($_POST['load']) && isset($_POST['game_id'])){
|
| | | // Deprecated since v165
|
| | | // Replaced with new Comment system
|
| | | // Still kept for compatibility with the old commenting system
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT * FROM comments WHERE game_id = :game_id AND approved = 1 ORDER BY id asc, parent_id asc LIMIT 50';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":game_id", $_POST['game_id'], PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | $list = array();
|
| | | foreach ($row as $item) {
|
| | | $item['avatar'] = get_user_avatar($item['sender_username']);
|
| | | $list[] = $item;
|
| | | }
|
| | | echo json_encode((array)$list);
|
| | | }
|
| | | // New comment system
|
| | | if(isset($_POST['send_comment']) && $login_user){
|
| | | if(strlen($_POST['content']) < 2){
|
| | | echo('too short');
|
| | | return;
|
| | | }
|
| | | $conn = open_connection();
|
| | | $parent_id = isset($_POST['parent']) && $_POST['parent'] !== '' ? (int)$_POST['parent'] : null;
|
| | | $_POST['content'] = trim_string(comment_filtering($_POST['content']));
|
| | | $approved = 1;
|
| | | if(get_setting_value('moderate_comment') && $login_user->role != 'admin'){
|
| | | // Moderate comment is activated
|
| | | $approved = 0;
|
| | | }
|
| | | $sql = 'INSERT INTO comments (parent_id, game_id, comment, sender_id, sender_username, created_date, approved) VALUES (:parent_id, :game_id, :comment, :sender_id, :sender_username, :created_date, :approved)';
|
| | | $st = $conn->prepare($sql);
|
| | | if ($parent_id === null) {
|
| | | $st->bindValue(":parent_id", $parent_id, PDO::PARAM_NULL);
|
| | | } else {
|
| | | $st->bindValue(":parent_id", $parent_id, PDO::PARAM_INT);
|
| | | }
|
| | | $st->bindValue(":game_id", $_POST['game_id'], PDO::PARAM_INT);
|
| | | $st->bindValue(":comment", $_POST['content'], PDO::PARAM_STR);
|
| | | $st->bindValue(":sender_id", $login_user->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":sender_username", $login_user->username, PDO::PARAM_STR);
|
| | | $st->bindValue(":created_date", date('Y-m-d H:i:s'), PDO::PARAM_STR);
|
| | | $st->bindValue(":approved", $approved, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $login_user->add_xp(20);
|
| | | echo('success');
|
| | | } elseif(isset($_POST['load_root_comments']) && isset($_POST['game_id']) && isset($_POST['amount'])) {
|
| | | $conn = open_connection();
|
| | | $offset = isset($_POST['offset']) ? (int)$_POST['offset'] : 0;
|
| | | $limit = (int)$_POST['amount'];
|
| | | if($limit > 30){
|
| | | $limit = 30;
|
| | | }
|
| | | $sql = 'SELECT c.*, COUNT(r.id) as reply_count |
| | | FROM comments c
|
| | | LEFT JOIN comments r ON c.id = r.parent_id
|
| | | WHERE c.game_id = :game_id AND (c.parent_id IS NULL OR c.parent_id = 0) AND c.approved = 1
|
| | | GROUP BY c.id
|
| | | ORDER BY c.id DESC LIMIT '.$limit.' OFFSET :offset';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":game_id", $_POST['game_id'], PDO::PARAM_INT);
|
| | | $st->bindValue(":offset", $offset, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | $list = [];
|
| | | foreach ($row as $item) {
|
| | | $item['avatar'] = get_user_avatar($item['sender_username']);
|
| | | $item['has_replies'] = $item['reply_count'] > 0;
|
| | | $item['server_date'] = date('Y-m-d H:i:s');
|
| | | unset($item['reply_count']); // remove the reply_count as it's not needed anymore
|
| | | $list[] = $item;
|
| | | }
|
| | | echo json_encode((array)$list);
|
| | | } elseif(isset($_POST['load_replies']) && isset($_POST['parent_id']) && isset($_POST['amount'])) {
|
| | | $conn = open_connection();
|
| | | $limit = (int)$_POST['amount'];
|
| | | if($limit > 30){
|
| | | $limit = 30;
|
| | | }
|
| | | $sql = 'SELECT * FROM comments WHERE parent_id = :parent_id AND approved = 1 ORDER BY id DESC LIMIT '.$limit;
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":parent_id", $_POST['parent_id'], PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | $list = [];
|
| | | foreach ($row as $item) {
|
| | | $item['avatar'] = get_user_avatar($item['sender_username']);
|
| | | $item['server_date'] = date('Y-m-d H:i:s');
|
| | | $list[] = $item;
|
| | | }
|
| | | echo json_encode((array)$list);
|
| | | }
|
| | |
|
| | | }
|
| | |
|
| | | if(isset($_POST['delete']) && $login_user){
|
| | | $conn = open_connection();
|
| | | if( USER_ADMIN && !ADMIN_DEMO){
|
| | | $sql = 'DELETE FROM comments WHERE id = :id LIMIT 1';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $_POST['id'], PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | } else {
|
| | | $sql = 'DELETE FROM comments WHERE sender_id = :sender_id AND id = :id LIMIT 1';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":sender_id", $login_user->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":id", $_POST['id'], PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | | echo 'deleted';
|
| | | }
|
| | |
|
| | | if(isset($_POST['approve']) && $login_user && USER_ADMIN){
|
| | | $conn = open_connection();
|
| | | $sql = 'UPDATE comments SET approved = 1 WHERE id = :id LIMIT 1';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":id", $_POST['id'], PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | echo 'ok';
|
| | | }
|
| | |
|
| | | function comment_filtering($comment){
|
| | | if(file_exists(ABSPATH.'includes/banned-words-comment.json')){
|
| | | $words = json_decode(file_get_contents(ABSPATH.'includes/banned-words-comment.json'), true);
|
| | | $comment = str_ireplace($words, '***', $comment);
|
| | | }
|
| | | return $comment;
|
| | | }
|
| | |
|
| | | function trim_string($str) {
|
| | | if (strlen($str) > 400) {
|
| | | return substr($str, 0, 397) . '...';
|
| | | }
|
| | | return $str;
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | defined('ABSPATH') or die('abcd commons');
|
| | |
|
| | | function get_all_categories(){
|
| | | // Excluding hidden categories
|
| | | $data = Category::getList();
|
| | | $results = $data['results'];
|
| | | foreach ($results as $key => $category) {
|
| | | if($category->priority < 0){
|
| | | unset($results[$key]);
|
| | | }
|
| | | }
|
| | | return $results;
|
| | | }
|
| | | function get_user($username){
|
| | | $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
|
| | | $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
| | | $sql = 'SELECT * FROM users WHERE username = :username';
|
| | | $st = $conn->prepare( $sql );
|
| | | $st->bindValue( ":username", $username, PDO::PARAM_STR );
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | $conn = null;
|
| | | if ( $row ) return $row;
|
| | | return false;
|
| | | }
|
| | | function is_login(){
|
| | | if(isset( $_SESSION['username'] )){
|
| | | return true;
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | | function show_logout(){
|
| | | // Not used
|
| | | if(is_login()){
|
| | | echo '<a href="'.DOMAIN.'admin.php?action=logout"> Log out </a>';
|
| | | }
|
| | | }
|
| | | function get_permalink($type, $slug = '', $arrs = []){
|
| | | /*
|
| | | Usage:
|
| | | - get_permalink('game', 'super-mario');
|
| | | - get_permalink('category', 'action', ['page' => 1]);
|
| | | - get_permalink('user', 'admin', ['action' => 'edit', 'page' => 2]);
|
| | | */
|
| | | $custom_type = get_custom_path($type);
|
| | | $params = '';
|
| | | $lang_id = '';
|
| | | $end_slash = '';
|
| | | if(count($arrs)){
|
| | | foreach ($arrs as $key => $value) {
|
| | | if( PRETTY_URL ){
|
| | | $params .= '/'.$value;
|
| | | } else {
|
| | | $params .= '&'.$key.'='.$value;
|
| | | }
|
| | | }
|
| | | if($slug == ''){
|
| | | $params = substr($params, 1);
|
| | | }
|
| | | }
|
| | | if(PRETTY_URL && $slug){
|
| | | // Add slash in the end of url
|
| | | if (strpos($params, '.') !== false) { //true
|
| | | //
|
| | | } else { //false
|
| | | if(get_setting_value('trailing_slash')){
|
| | | if(substr($slug.$params, -1) != '/'){
|
| | | $end_slash = '/';
|
| | | }
|
| | | }
|
| | | }
|
| | | if(get_setting_value('lang_code_in_url')){
|
| | | global $lang_code;
|
| | | if(isset($lang_code)){
|
| | | $lang_id = $lang_code.'/';
|
| | | }
|
| | | }
|
| | | }
|
| | | if($type == 'game' && $slug === ''){
|
| | | // Fix bug for get link without slug, include lang code
|
| | | if($lang_id === '' && get_setting_value('lang_code_in_url')){
|
| | | global $lang_code;
|
| | | if(isset($lang_code)){
|
| | | $lang_id = $lang_code.'/';
|
| | | }
|
| | | }
|
| | | }
|
| | | if($type == 'game'){
|
| | | if( PRETTY_URL ){
|
| | | return DOMAIN . $lang_id.$custom_type.'/' . $slug . $end_slash;
|
| | | } else {
|
| | | return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
|
| | | }
|
| | | } else if($type == 'archive'){
|
| | | if( PRETTY_URL ){
|
| | | return DOMAIN . $lang_id.$custom_type.'/' . $slug . $end_slash;
|
| | | } else {
|
| | | return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
|
| | | }
|
| | | } else if($type == 'search'){
|
| | | if( PRETTY_URL ){
|
| | | return DOMAIN . $lang_id.$custom_type.'/' . $slug . $params . $end_slash;
|
| | | } else {
|
| | | return DOMAIN . 'index.php?viewpage='.$custom_type.'&key=' . $slug . $params;
|
| | | }
|
| | | } else if($type == 'category'){
|
| | | $slug = strtolower($slug);
|
| | | if(get_setting_value('allow_slug_translation') && function_exists('get_slug_translation')){
|
| | | $slug = get_slug_translation(strtolower($slug));
|
| | | }
|
| | | if( PRETTY_URL ){
|
| | | return DOMAIN . $lang_id.$custom_type.'/' . $slug . $params . $end_slash;
|
| | | } else {
|
| | | return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
|
| | | }
|
| | | } else if($type == 'tag'){
|
| | | $slug = strtolower($slug);
|
| | | if(get_setting_value('allow_slug_translation') && function_exists('get_slug_translation')){
|
| | | $slug = get_slug_translation(strtolower($slug));
|
| | | }
|
| | | if( PRETTY_URL ){
|
| | | return DOMAIN . $lang_id.$custom_type.'/' . $slug . $params . $end_slash;
|
| | | } else {
|
| | | return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
|
| | | }
|
| | | } else if($type == 'page'){
|
| | | if( PRETTY_URL ){
|
| | | return DOMAIN . $lang_id.$custom_type.'/' . $slug . $params . $end_slash;
|
| | | } else {
|
| | | return DOMAIN . 'index.php?viewpage='.$custom_type.'&slug=' . $slug . $params;
|
| | | }
|
| | | } else {
|
| | | if( PRETTY_URL ){
|
| | | if(!$slug){
|
| | | $slug = '';
|
| | | }
|
| | | return DOMAIN . $lang_id . $custom_type .'/' . $slug . $params . $end_slash;
|
| | | } else {
|
| | | if(!$slug){
|
| | | $slug = '';
|
| | | } else {
|
| | | $slug = '&slug='.$slug;
|
| | | }
|
| | | return DOMAIN . 'index.php?viewpage=' . $custom_type . $slug . $params;
|
| | | }
|
| | | }
|
| | | }
|
| | | function get_small_thumb($game){
|
| | | $thumb = (isset($game->thumb_small) && $game->thumb_small != '' ? esc_url($game->thumb_small) : esc_url($game->thumb_2));
|
| | | if(substr($thumb, 0, 1) == '/'){
|
| | | $thumb = DOMAIN . substr($thumb, 1);
|
| | | }
|
| | | return $thumb;
|
| | | }
|
| | | function get_game_url($game){
|
| | | $url = esc_url($game->url);
|
| | | if(substr($url, 0, 7) == '/games/'){
|
| | | if(get_setting_value('splash')){
|
| | | $url = get_permalink('splash', $game->slug);
|
| | | return $url;
|
| | | } else {
|
| | | $url = DOMAIN . substr($url, 1);
|
| | | }
|
| | | } elseif($game->source == 'gamedistribution'){
|
| | | //GameDistributon new url
|
| | | $url .= '?gd_sdk_referrer_url='.get_permalink('game', $game->slug);
|
| | | } elseif($game->source == 'remote'){
|
| | | if(get_setting_value('splash') && get_setting_value('allow_splash_on_remote_games')){
|
| | | $url = get_permalink('splash', $game->slug);
|
| | | }
|
| | | }
|
| | | return $url;
|
| | | }
|
| | | function commas_to_array($str){
|
| | | return preg_split("/\,/", $str);
|
| | | }
|
| | | function html_purify($html_content){
|
| | | require_once ABSPATH.'vendor/HTMLPurifier/HTMLPurifier.auto.php';
|
| | | $config = HTMLPurifier_Config::createDefault();
|
| | | $purifier = new HTMLPurifier($config);
|
| | | $clean_html = $purifier->purify($html_content);
|
| | | return $clean_html;
|
| | | }
|
| | | function esc_string($str){
|
| | | if($str == '') return $str;
|
| | | return strip_tags($str);
|
| | | }
|
| | | function esc_int($int){
|
| | | return (int)preg_replace('/[^0-9]/', '', $int);
|
| | | }
|
| | | function esc_url($str){
|
| | | return $str;
|
| | | // Pass it for now, previously using filter_var($str, FILTER_SANITIZE_URL) that are now deprecated.
|
| | | }
|
| | | function esc_slug($str){
|
| | | if($str == '') return $str;
|
| | | if(UNICODE_SLUG){
|
| | | return esc_unicode_slug($str);
|
| | | } else {
|
| | | // Allow unicode letters without UNICODE SLUG
|
| | | return strtolower(preg_replace('/[^\p{L}0-9_-]/u', '-', $str));
|
| | | }
|
| | | }
|
| | | function esc_unicode_slug($str){
|
| | | // Not actually used anymore, esc_slug() already allowing unicode letters
|
| | | return preg_replace('/[^\p{L}0-9_-]/u', '-', $str);
|
| | | }
|
| | | function imgResize($path, $rs_width=160, $rs_height=160, $slug = '') {
|
| | | // deprecated since v.1.7.1
|
| | | // use admin-functions.php generate_small_thumbnail() instead of call this function directly
|
| | | // this function is used to generate small thumbnail
|
| | | $x = getimagesize($path);
|
| | | $width = $x['0'];
|
| | | $height = $x['1'];
|
| | | switch ($x['mime']) {
|
| | | case "image/gif":
|
| | | $img = imagecreatefromgif($path);
|
| | | break;
|
| | | case "image/jpg":
|
| | | case "image/jpeg":
|
| | | $img = imagecreatefromjpeg($path);
|
| | | break;
|
| | | case "image/png":
|
| | | $img = imagecreatefrompng($path);
|
| | | break;
|
| | | }
|
| | | $img_base = imagecreatetruecolor($rs_width, $rs_height);
|
| | | if($x['mime'] == "image/png"){
|
| | | imageAlphaBlending($img_base, false);
|
| | | imageSaveAlpha($img_base, true);
|
| | | }
|
| | | imagecopyresampled($img_base, $img, 0, 0, 0, 0, $rs_width, $rs_height, $width, $height);
|
| | | $path_info = pathinfo($path);
|
| | | $output = $path_info['dirname'].'/'.$slug.'_small.'.$path_info['extension'];
|
| | | switch ($path_info['extension']) {
|
| | | case "gif":
|
| | | imagegif($img_base, $output); |
| | | break;
|
| | | case "jpg":
|
| | | case "jpeg":
|
| | | imagejpeg($img_base, $output, 100); // No compression
|
| | | break;
|
| | | case "png":
|
| | | imagepng($img_base, $output, 6); // No compression
|
| | | break;
|
| | | }
|
| | | }
|
| | | function imgCopy($path, $new_file, $rs_width=160, $rs_height=160) {
|
| | | $x = getimagesize($path);
|
| | | $width = $x['0'];
|
| | | $height = $x['1'];
|
| | | switch ($x['mime']) {
|
| | | case "image/gif":
|
| | | $img = imagecreatefromgif($path);
|
| | | break;
|
| | | case "image/jpg":
|
| | | case "image/jpeg":
|
| | | $img = imagecreatefromjpeg($path);
|
| | | break;
|
| | | case "image/png":
|
| | | $img = imagecreatefrompng($path);
|
| | | break;
|
| | | }
|
| | | $img_base = imagecreatetruecolor($rs_width, $rs_height);
|
| | | if($x['mime'] == "image/png"){
|
| | | imageAlphaBlending($img_base, false);
|
| | | imageSaveAlpha($img_base, true);
|
| | | }
|
| | | imagecopyresampled($img_base, $img, 0, 0, 0, 0, $rs_width, $rs_height, $width, $height);
|
| | | $path_info = pathinfo($path);
|
| | | $output = $new_file;
|
| | | switch ($path_info['extension']) {
|
| | | case "gif":
|
| | | imagegif($img_base, $output); |
| | | break;
|
| | | case "jpg":
|
| | | case "jpeg":
|
| | | imagejpeg($img_base, $output);
|
| | | break;
|
| | | case "png":
|
| | | imagepng($img_base, $output);
|
| | | break;
|
| | | }
|
| | | }
|
| | | function image_to_webp($file_path, $quality = 100, $new_file = null, $destroy_original_file = false){
|
| | | $img = null;
|
| | | $_img = getimagesize($file_path);
|
| | | $img_format;
|
| | | if(!$_img) return;
|
| | | switch ($_img['mime']) {
|
| | | case "image/jpg":
|
| | | case "image/jpeg":
|
| | | $img = imagecreatefromjpeg($file_path);
|
| | | $img_format = 'jpg';
|
| | | break;
|
| | | case "image/png":
|
| | | $img = imagecreatefrompng($file_path);
|
| | | $img_format = 'png';
|
| | | break;
|
| | | case "image/gif":
|
| | | $img = imagecreatefromgif($file_path);
|
| | | $img_format = 'gif';
|
| | | break;
|
| | | }
|
| | | if(!$img_format){
|
| | | return false;
|
| | | }
|
| | | $file_extension = pathinfo($file_path, PATHINFO_EXTENSION);
|
| | | if(!$new_file){
|
| | | $new_file = str_replace('.'.$file_extension, '.webp', $file_path);
|
| | | }
|
| | | if($img_format == 'png' || $img_format == 'gif'){
|
| | | imagepalettetotruecolor($img);
|
| | | imagealphablending($img, true);
|
| | | imagesavealpha($img, true);
|
| | | }
|
| | | imagewebp($img, $new_file, -1); // No compression
|
| | | imagedestroy($img);
|
| | | if($destroy_original_file){
|
| | | unlink($file_path);
|
| | | }
|
| | | }
|
| | | function webp_to_image($file_path, $quality = 100, $new_format = 'jpg', $destroy_original_file = false){
|
| | | if($new_format != 'jpg' && $new_format != 'png'){
|
| | | echo 'File format must be jpg or png';
|
| | | return;
|
| | | }
|
| | | if(pathinfo($file_path, PATHINFO_EXTENSION) != 'webp'){
|
| | | echo 'File to convert must be .webp';
|
| | | return;
|
| | | }
|
| | | $img = imagecreatefromwebp($file_path);
|
| | | if($new_format == 'png'){
|
| | | imagepng($img, str_replace('.webp', '.'.$new_format, $file_path));
|
| | | } elseif($new_format == 'jpg'){
|
| | | imagejpeg($img, str_replace('.webp', '.'.$new_format, $file_path));
|
| | | }
|
| | | if(!$img){
|
| | | return;
|
| | | }
|
| | | imagedestroy($img);
|
| | | if($destroy_original_file){
|
| | | unlink($file_path);
|
| | | }
|
| | | }
|
| | |
|
| | | function webp_resize($file_path, $new_file = null, $newwidth = 160, $newheight = 160, $quality = 95){
|
| | | // Deprecated since v.1.7.1, replaced with generate_small_thumbnail() admin-functions.php
|
| | | // Used for small thumb
|
| | | $file_extension = pathinfo($file_path, PATHINFO_EXTENSION);
|
| | | if($file_extension != 'webp'){
|
| | | return;
|
| | | }
|
| | | if(!$new_file){
|
| | | $new_file = $file_path;
|
| | | }
|
| | | $_img = getimagesize($file_path);
|
| | | $width = $_img['0'];
|
| | | $height = $_img['1'];
|
| | | $img = imagecreatefromwebp($file_path);
|
| | | $new_img = imagecreatetruecolor($newwidth, $newheight);
|
| | | imagecopyresized($new_img, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
|
| | | //output
|
| | | imagewebp($new_img, $new_file, -1); // No compression
|
| | | }
|
| | | function check_purchase_code(){
|
| | | return get_setting_value('purchase_code') == '' ? null : get_setting_value('purchase_code');
|
| | | }
|
| | | function get_admin_warning(){
|
| | | $results = [];
|
| | | if(!check_purchase_code() && !ADMIN_DEMO){
|
| | | array_push($results, 'Please provide your <b>Item Purchase code</b>. You can submit or update your Purchase code on site settings.');
|
| | | }
|
| | | if(URL_PROTOCOL == 'http://'){
|
| | | if(is_https()){
|
| | | array_push($results, 'You\'re using HTTPS but current config use HTTP, you can switch to HTTPS in Settings -> Advanced.');
|
| | | }
|
| | | }
|
| | | if(!check_writeable()){
|
| | | array_push($results, 'CloudArcade don\'t have permissions to modify files, uploaded files can\'t be saved and can\'t do backup or update. Change all folders and files CHMOD to 777 to fix this.');
|
| | | }
|
| | | if(!class_exists('ZipArchive')){
|
| | | array_push($results, '"ZipArchive" extension is missing or disabled. Can\'t do backup or update.');
|
| | | }
|
| | | if(!function_exists('curl_init')) {
|
| | | array_push($results, '"The cURL extension is missing or disabled. Please activate it in php.ini."');
|
| | | }
|
| | | if( (int)phpversion() < 7){
|
| | | array_push($results, 'You\'re using PHP v-'.phpversion().', CloudArcade is requires PHP v-7.xx');
|
| | | }
|
| | | return $results;
|
| | | }
|
| | | function is_https() {
|
| | | if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
|
| | | return true;
|
| | | } elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') {
|
| | | return true;
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | | function check_writeable(){
|
| | | if (is_writable('../config.php') && is_writable('../site-settings.php') && is_writable('../admin/upload.php')) {
|
| | | return true;
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | | function get_cur_url(){
|
| | | if(SUB_FOLDER && SUB_FOLDER != ''){
|
| | | return DOMAIN . substr(str_replace(SUB_FOLDER, '', $_SERVER['REQUEST_URI']), 1);
|
| | | } else {
|
| | | return DOMAIN . substr($_SERVER['REQUEST_URI'], 1);
|
| | | }
|
| | | }
|
| | | function get_rating($type, $game){
|
| | | if($type == '5'){
|
| | | if($game->upvote+$game->downvote > 0){
|
| | | return round(($game->upvote/($game->upvote+$game->downvote))*5);
|
| | | } else {
|
| | | return 0;
|
| | | }
|
| | | } else if($type == '5-decimal'){
|
| | | if($game->upvote+$game->downvote > 0){
|
| | | return number_format(($game->upvote/($game->upvote+$game->downvote))*5, 1);
|
| | | } else {
|
| | | return 0;
|
| | | }
|
| | | }
|
| | | }
|
| | | function is_user_admin($username){
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM users WHERE username = :username";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":username", $username, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if ($row) {
|
| | | if($row['role'] === 'admin'){
|
| | | return true;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function scan_folder($path){
|
| | | $array = [];
|
| | |
|
| | | $dirs = scandir( ABSPATH . $path);
|
| | | $dirs = array_diff($dirs, array('.', '..'));
|
| | |
|
| | | foreach ($dirs as $dir) {
|
| | | if(is_dir( ABSPATH . $path . $dir)){
|
| | | if($dir != '.' || $dir != '..'){
|
| | | array_push($array, $dir);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | return $array;
|
| | | }
|
| | |
|
| | | function scan_files($path){
|
| | | $directory = new \RecursiveDirectoryIterator(ABSPATH.$path);
|
| | | $iterator = new \RecursiveIteratorIterator($directory);
|
| | | $files = array();
|
| | | foreach ($iterator as $info) {
|
| | | if (is_file($info->getPathname())) {
|
| | | $files[] = str_replace(ABSPATH, '', $info->getPathname());
|
| | | }
|
| | | }
|
| | | return $files;
|
| | | }
|
| | |
|
| | | function delete_files($target) {
|
| | | if(is_dir($target)){
|
| | | $files = glob( $target . '*', GLOB_MARK );
|
| | | foreach( $files as $file ){
|
| | | delete_files( $file ); |
| | | }
|
| | | if(is_dir($target)){
|
| | | rmdir( $target );
|
| | | }
|
| | | } elseif(is_file($target)) {
|
| | | unlink( $target ); |
| | | }
|
| | | }
|
| | |
|
| | | function do_backup($root_path, $backup_type = 'part'){
|
| | | // Deprecated since v1.6.9, replaced with backup_cms()
|
| | | // Backup directory and file name
|
| | | if (extension_loaded('zip') && is_login() && USER_ADMIN && !ADMIN_DEMO) {
|
| | | $backup_dir = $root_path.'/admin/backups';
|
| | | if (!file_exists($backup_dir)) {
|
| | | mkdir($backup_dir, 0755, true);
|
| | | }
|
| | | $backup_file = $_SESSION['username'].'-cloudarcade-backup-'.$backup_type.'-'.VERSION.'-'.time().'-'.generate_random_strings().'.zip';
|
| | | // Exclusions (file and directory names to exclude from backup)
|
| | | $ignore_extensions = ['zip', 'rar', '7z'];
|
| | | $exclusions = array('cloudarcade', 'private', 'cache', 'temp', 'thumbs', 'vendor', 'games', 'files', 'backups');
|
| | | if($backup_type == 'full'){
|
| | | $exclusions = array('cloudarcade', 'private', 'cache', 'temp', 'backups');
|
| | | }
|
| | | add_to_zip( $root_path, ABSPATH . 'admin/backups/'.$backup_file, $exclusions, $ignore_extensions );
|
| | | }
|
| | | }
|
| | |
|
| | | function add_to_zip($source, $destination, $ignore_folder = [], $ignore_extensions = []) {
|
| | | // Deprecated since v1.6.9, replaced with zip_files_recursive()
|
| | | if (extension_loaded('zip') && is_login()) {
|
| | | if (file_exists($source)) {
|
| | | $zip = new ZipArchive();
|
| | | if ($zip->open($destination, ZIPARCHIVE::CREATE)) {
|
| | | $max_size = 20 * 1024 * 1024; // 20 MB
|
| | | if (is_dir($source)) {
|
| | | $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST);
|
| | | foreach ($files as $file) {
|
| | | $ignored = false;
|
| | | foreach ($ignore_folder as $ignore) {
|
| | | if (stripos($file, $ignore) !== false) {
|
| | | $ignored = true;
|
| | | break;
|
| | | }
|
| | | }
|
| | | if ($ignored) {
|
| | | continue;
|
| | | }
|
| | | $relativePath = str_replace('\\', '/', str_replace($source . DIRECTORY_SEPARATOR, '', $file));
|
| | | if (is_dir($file)) {
|
| | | if (count(glob("$file/*")) > 0) { //If folder not empty
|
| | | $zip->addEmptyDir($relativePath . '/');
|
| | | }
|
| | | } else if (is_file($file)) {
|
| | | // Ignore files larger than 20 MB
|
| | | if (filesize($file) > $max_size) {
|
| | | continue;
|
| | | }
|
| | | // Ignore archive files
|
| | | $ext = pathinfo($file, PATHINFO_EXTENSION);
|
| | | if (in_array($ext, $ignore_extensions)) {
|
| | | continue;
|
| | | }
|
| | | $zip->addFromString($relativePath, file_get_contents($file));
|
| | | }
|
| | | }
|
| | | } else if (is_file($source)) {
|
| | | // Ignore files larger than 20 MB
|
| | | if (filesize($source) > $max_size) {
|
| | | return false;
|
| | | }
|
| | | // Ignore archive files
|
| | | $ext = pathinfo($source, PATHINFO_EXTENSION);
|
| | | if (in_array($ext, $ignore_extensions)) {
|
| | | return false;
|
| | | }
|
| | | $zip->addFromString(basename($source), file_get_contents($source));
|
| | | }
|
| | | }
|
| | | return $zip->close();
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | function generate_random_strings($length = 10) {
|
| | | $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
| | | $charactersLength = strlen($characters);
|
| | | $randomString = '';
|
| | | for ($i = 0; $i < $length; $i++) {
|
| | | $randomString .= $characters[rand(0, $charactersLength - 1)];
|
| | | }
|
| | | return $randomString;
|
| | | }
|
| | |
|
| | | function getIpAddr() {
|
| | | if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
|
| | | $ipAddr = $_SERVER["HTTP_CF_CONNECTING_IP"];
|
| | | } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) {
|
| | | $ipAddr = $_SERVER['HTTP_CLIENT_IP'];
|
| | | } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
| | | $ipAddr = strtok($_SERVER['HTTP_X_FORWARDED_FOR'], ',');
|
| | | } else {
|
| | | $ipAddr = $_SERVER['REMOTE_ADDR'];
|
| | | }
|
| | | if(strlen($ipAddr) > 16){
|
| | | $ipAddr = '0.0.0.0';
|
| | | }
|
| | | return $ipAddr;
|
| | | }
|
| | |
|
| | | function get_user_avatar($username = null){
|
| | | global $login_user;
|
| | | $user;
|
| | | if(!$username){
|
| | | if($login_user){
|
| | | $username = $login_user->username;
|
| | | $user = $login_user;
|
| | | }
|
| | | } else {
|
| | | $cur_user = User::getByUsername($username);
|
| | | if($cur_user){
|
| | | $user = $cur_user;
|
| | | }
|
| | | }
|
| | | if($user){
|
| | | if(file_exists(ABSPATH.'images/avatar/'.$username.'.png')){
|
| | | return DOMAIN.'images/avatar/'.$username.'.png';
|
| | | } elseif($user->avatar){
|
| | | return DOMAIN.'images/avatar/default/'.$user->avatar.'.png';
|
| | | }
|
| | | }
|
| | | return DOMAIN.'images/default_profile.png';
|
| | | }
|
| | |
|
| | | $lang_data = [];
|
| | |
|
| | | function load_language($type){
|
| | | global $lang_data;
|
| | | global $language_file_exist;
|
| | | $file = '';
|
| | | if($type === 'index'){
|
| | | $lang = get_setting_value('language');
|
| | | if(isset($_GET['lang'])){
|
| | | // Set dynamic language
|
| | | if(strlen($_GET['lang']) <= 3){
|
| | | setcookie('lang', $_GET['lang'], strtotime('+3 months'), '/');
|
| | | $lang = $_GET['lang'];
|
| | | }
|
| | | }
|
| | | if(isset($_COOKIE['lang']) && !isset($_GET['lang'])){
|
| | | // Load saved dynamic language
|
| | | $lang = $_COOKIE['lang'];
|
| | | }
|
| | | $file = ABSPATH.'locales/public/'.$lang.'.json';
|
| | | if(!file_exists($file)){
|
| | | $file = TEMPLATE_PATH.'/locales/'.$lang.'.json'; // Old path, backward compatibility
|
| | | }
|
| | | if(!file_exists($file)){
|
| | | if(isset($_COOKIE['lang']) && !isset($_GET['lang'])){
|
| | | // Language selected is not exist anymore, the remove cookie data
|
| | | // To avoid developer confusion
|
| | | setcookie('lang', '', time() - 3600, '/');
|
| | | }
|
| | | }
|
| | | } elseif($type === 'admin'){
|
| | | $file = ABSPATH.'locales/admin/'.get_setting_value('language').'.json';
|
| | | if(!file_exists($file)){
|
| | | $file = ABSPATH.'locales/'.get_setting_value('language').'.json';
|
| | | }
|
| | | }
|
| | | if(file_exists($file)){
|
| | | $lang_data = json_decode(file_get_contents($file), true);
|
| | | }
|
| | | }
|
| | |
|
| | | function translate($str, $val1 = null, $val2 = null){
|
| | | global $lang_data;
|
| | | $translated = $str;
|
| | | if(isset($lang_data[$str])){
|
| | | $translated = $lang_data[$str];
|
| | | }
|
| | | if(!is_null($val1)){
|
| | | $translated = str_replace('%a', $val1, $translated);
|
| | | }
|
| | | if(!is_null($val2)){
|
| | | $translated = str_replace('%b', $val2, $translated);
|
| | | }
|
| | | return $translated;
|
| | | }
|
| | |
|
| | | function _t($str, $val1 = null, $val2 = null){
|
| | | return translate($str, $val1, $val2);
|
| | | }
|
| | |
|
| | | function _e($str, $val1 = null, $val2 = null){
|
| | | echo translate($str, $val1, $val2);
|
| | | }
|
| | |
|
| | | function get_translation_key($translated_str) {
|
| | | global $lang_data;
|
| | | // Instead of get value by a key, this function return a key by value
|
| | | foreach ($lang_data as $key => $value) {
|
| | | if ($value === $translated_str) {
|
| | | return $key;
|
| | | }
|
| | | }
|
| | | return null; // Return null if no matching key is found
|
| | | }
|
| | |
|
| | | function get_base_taxonomy($page_name){
|
| | | // Get original base
|
| | | $custom_path_data = get_setting_value('custom_path');
|
| | | if(!empty($custom_path_data)){
|
| | | if(isset($custom_path_data[$page_name])){
|
| | | return $custom_path_data[$page_name];
|
| | | }
|
| | | }
|
| | | return $page_name;
|
| | | }
|
| | |
|
| | | function get_custom_path($base_name){
|
| | | // Changed in v1.6.2
|
| | | // Replacing convert_to_custom_path()
|
| | | $custom_path_data = get_setting_value('custom_path');
|
| | | if (!empty($custom_path_data)) {
|
| | | $custom_name = array_search($base_name, $custom_path_data);
|
| | | if($custom_name){
|
| | | return $custom_name;
|
| | | }
|
| | | }
|
| | | return $base_name;
|
| | | }
|
| | |
|
| | | function convert_to_custom_path($page_name){
|
| | | // Deprecated since v1.6.2
|
| | | global $options;
|
| | | if(isset($options['custom_path']) && $options['custom_path']){
|
| | | $custom_name = array_search($page_name, $options['custom_path']);
|
| | | if($custom_name){
|
| | | return $custom_name;
|
| | | }
|
| | | }
|
| | | return $page_name;
|
| | | }
|
| | |
|
| | | function str_encrypt($str, $key){
|
| | | $cipher = "AES-128-CTR";
|
| | | $ivlen = openssl_cipher_iv_length($cipher);
|
| | | $iv = '1234567891011121';
|
| | | return openssl_encrypt($str, $cipher, $key, $options=0, $iv);
|
| | | }
|
| | |
|
| | | function str_decrypt($str, $key){
|
| | | $cipher = "AES-128-CTR";
|
| | | $ivlen = openssl_cipher_iv_length($cipher);
|
| | | $iv = '1234567891011121';
|
| | | return openssl_decrypt($str, $cipher, $key, $options=0, $iv);
|
| | | }
|
| | |
|
| | | function show_alert($message, $type, $btn = true){
|
| | | if($type === 'error'){
|
| | | $type = 'danger';
|
| | | }
|
| | | echo '<div class="alert alert-'.$type.' alert-dismissible fade show" role="alert">'._t($message);
|
| | | if($btn){
|
| | | echo '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>';
|
| | | }
|
| | | echo '</div>';
|
| | | }
|
| | |
|
| | | function get_option($name){
|
| | | // Deprecated since v1.5.7, use get_pref() instead
|
| | | global $conn;
|
| | | $sql = "SELECT * FROM prefs WHERE name = :name";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if($row){
|
| | | return $row['value'];
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | function update_option($name, $value){
|
| | | // Deprecated since v1.5.7, use set_pref() instead
|
| | | global $conn;
|
| | | $sql = "SELECT id FROM prefs WHERE name = :name";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if($row){
|
| | | $sql = "UPDATE prefs SET value = :value WHERE name = :name";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':value', $value, PDO::PARAM_STR);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | } else {
|
| | | $sql = "INSERT INTO prefs (name, value) VALUES (:name, :value)";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':value', $value, PDO::PARAM_STR);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | }
|
| | | }
|
| | |
|
| | | function get_pref($name){
|
| | | // Alternative for get_option()
|
| | | // Reason: better naming
|
| | | global $conn;
|
| | | $sql = "SELECT * FROM prefs WHERE name = :name";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if($row){
|
| | | return $row['value'];
|
| | | } else {
|
| | | // Return null if key doesnt exist
|
| | | return null;
|
| | | }
|
| | | }
|
| | |
|
| | | function get_pref_bool($name){
|
| | | // Return boolean value
|
| | | // Only for "true" or "false" value
|
| | | $value = get_pref($name);
|
| | | if(is_null($value)){
|
| | | // The key is not exist
|
| | | return false;
|
| | | } else {
|
| | | if($value == 'true'){
|
| | | return true;
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function set_pref($name, $value){
|
| | | // Alternative for update_option()
|
| | | // Reason: better naming
|
| | | global $conn;
|
| | | $sql = "SELECT id FROM prefs WHERE name = :name";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $row = $st->fetch();
|
| | | if($row){
|
| | | $sql = "UPDATE prefs SET value = :value WHERE name = :name";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':value', $value, PDO::PARAM_STR);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | } else {
|
| | | $sql = "INSERT INTO prefs (name, value) VALUES (:name, :value)";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':value', $value, PDO::PARAM_STR);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | }
|
| | | }
|
| | |
|
| | | function remove_pref($name){
|
| | | global $conn;
|
| | | $sql = "DELETE FROM prefs WHERE name = :name LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | }
|
| | |
|
| | | function register_sidebar( $args = array() ){
|
| | | global $registered_sidebars;
|
| | |
|
| | | $i = count( $registered_sidebars ) + 1;
|
| | |
|
| | | $id_is_empty = empty( $args['id'] );
|
| | |
|
| | | $defaults = array(
|
| | | 'name' => 'Sidebar X',
|
| | | 'id' => "sidebar-$i",
|
| | | 'description' => '',
|
| | | );
|
| | |
|
| | | $sidebar = merge_args($args, $defaults);
|
| | |
|
| | | $registered_sidebars[ $sidebar['id'] ] = $sidebar;
|
| | |
|
| | | return $sidebar['id'];
|
| | | }
|
| | |
|
| | | function merge_args($args, $defaults = array()){
|
| | | foreach ($args as $key => $value) {
|
| | | $defaults[$key] = $value;
|
| | | }
|
| | | return $defaults;
|
| | | }
|
| | |
|
| | | function widget_aside($name, $args = array()){
|
| | | global $stored_widgets;
|
| | | global $registered_sidebars;
|
| | | if(isset($registered_sidebars[$name])){
|
| | | if(isset($stored_widgets[$name])){
|
| | | $list = $stored_widgets[$name];
|
| | | if(count($list)){
|
| | | foreach ($list as $item) {
|
| | | $key = $item['widget'];
|
| | | $widget;
|
| | | if(widget_exists($item['widget'])){
|
| | | $widget = get_widget( $item['widget'], $item );
|
| | | } else {
|
| | | continue;
|
| | | }
|
| | | $widget->widget( $item );
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function nav_get_children($name, $parent_id = 0){
|
| | | global $conn;
|
| | | $items = [];
|
| | | $sql = "SELECT * FROM menus WHERE parent_id = :parent_id AND name = :name ORDER BY id ASC";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":parent_id", $parent_id, PDO::PARAM_INT);
|
| | | $st->bindValue(":name", $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $result = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | if (count($result)) {
|
| | | foreach ($result as $row) {
|
| | | $child = nav_get_children($name, $row['id']);
|
| | | if($child){
|
| | | $row['children'] = $child;
|
| | | }
|
| | | $items[] = $row;
|
| | | }
|
| | | } else {
|
| | | $items = [];
|
| | | }
|
| | | return $items;
|
| | | }
|
| | |
|
| | | function nav_menu_array($name = 'top_nav'){
|
| | | return nav_get_children($name, 0);
|
| | | }
|
| | |
|
| | | function get_template_path(){
|
| | | return DOMAIN . TEMPLATE_PATH;
|
| | | }
|
| | |
|
| | | function get_category_icon($slug, $array = []){
|
| | | foreach ($array as $key => $item) {
|
| | | foreach ($item as $child) {
|
| | | if($child == $slug){
|
| | | return $key;
|
| | | }
|
| | | }
|
| | | }
|
| | | return 'other';
|
| | | }
|
| | |
|
| | | function is_favorited_game($game_id){
|
| | | // Check if a game is favorited by current user
|
| | | global $login_user;
|
| | | global $conn;
|
| | | if($login_user){
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT * FROM favorites WHERE user_id = :user_id AND game_id = :game_id LIMIT 1";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":user_id", $login_user->id, PDO::PARAM_INT);
|
| | | $st->bindValue(":game_id", $game_id, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | $row = $st->fetch(PDO::FETCH_ASSOC);
|
| | | if($row){
|
| | | return true;
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | function format_number_abbreviated($number) {
|
| | | if($number >= 1000){
|
| | | return substr($number, 0, -3).'k';
|
| | | }
|
| | | return $number;
|
| | | }
|
| | |
|
| | | function get_tags($sort = 'random', $limit = 20){
|
| | | global $conn;
|
| | | $_sort;
|
| | | if($sort == 'name'){
|
| | | $_sort = 'tags.name ASC';
|
| | | } else if($sort == 'usage'){
|
| | | $_sort = 'tags.usage_count DESC';
|
| | | } else {
|
| | | $_sort = 'RAND()';
|
| | | }
|
| | | $_limit = (int)$limit;
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT name FROM tags
|
| | | ORDER BY '.$_sort.'
|
| | | LIMIT '.$_limit;
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $tag_names = $st->fetchAll(PDO::FETCH_COLUMN);
|
| | | return $tag_names;
|
| | | }
|
| | | function get_tag_usage($name){
|
| | | global $conn;
|
| | | $conn = open_connection();
|
| | | $sql = 'SELECT usage_count FROM tags
|
| | | WHERE name = :name LIMIT 1';
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(':name', $name, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $count = $st->fetch(PDO::FETCH_ASSOC);
|
| | | return $count['usage_count'];
|
| | | }
|
| | | function get_tag_extra_field($tag, $key) {
|
| | | $json = null;
|
| | | if (is_object($tag) && isset($tag->extra_fields)) {
|
| | | $json = $tag->extra_fields;
|
| | | } elseif (is_array($tag) && isset($tag['extra_fields'])) {
|
| | | $json = $tag['extra_fields'];
|
| | | }
|
| | | if ($json !== null) {
|
| | | $fields = json_decode($json, true);
|
| | | if (json_last_error() !== JSON_ERROR_NONE) {
|
| | | return null;
|
| | | }
|
| | | if (isset($fields[$key]) && $fields[$key] !== '') {
|
| | | return $fields[$key];
|
| | | }
|
| | | }
|
| | | return null;
|
| | | }
|
| | | function get_setting_value($name){
|
| | | if(isset(SETTINGS[$name])){
|
| | | return SETTINGS[$name]['value'];
|
| | | }
|
| | | throw new Exception("Key does not exist = ".$name);
|
| | | }
|
| | |
|
| | | function get_setting($name){
|
| | | if(isset(SETTINGS[$name])){
|
| | | return SETTINGS[$name];
|
| | | }
|
| | | throw new Exception("Key does not exist = ".$name);
|
| | | }
|
| | |
|
| | | function is_valid_json($json) {
|
| | | json_decode($json);
|
| | | return (json_last_error() === JSON_ERROR_NONE);
|
| | | }
|
| | |
|
| | | function get_csrf_token() {
|
| | | if (empty($_SESSION['csrf_token'])) {
|
| | | $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
|
| | | }
|
| | | return $_SESSION['csrf_token'];
|
| | | }
|
| | |
|
| | | function verify_csrf_token() {
|
| | | if (!isset($_POST['csrf_token']) || !isset($_SESSION['csrf_token'])) {
|
| | | return false;
|
| | | }
|
| | | $isValid = hash_equals($_SESSION['csrf_token'], $_POST['csrf_token']);
|
| | | // Regenerate the token
|
| | | $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
|
| | | return $isValid;
|
| | | }
|
| | |
|
| | | function get_content_translation($content_type, $content_id, $language, $field = 'all') {
|
| | | // Sample usage : get_content_translation('game', 1, 'en', 'title');
|
| | | $conn = open_connection();
|
| | | if ($field === 'all') {
|
| | | $sql = "SELECT field, translation FROM translations WHERE content_type = :content_type AND content_id = :content_id AND language = :language";
|
| | | $stmt = $conn->prepare($sql);
|
| | | $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
|
| | | $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
|
| | | $stmt->bindParam(':language', $language, PDO::PARAM_STR);
|
| | | } else {
|
| | | $sql = "SELECT translation FROM translations WHERE content_type = :content_type AND content_id = :content_id AND language = :language AND field = :field";
|
| | | $stmt = $conn->prepare($sql);
|
| | | $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
|
| | | $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
|
| | | $stmt->bindParam(':language', $language, PDO::PARAM_STR);
|
| | | $stmt->bindParam(':field', $field, PDO::PARAM_STR);
|
| | | }
|
| | | $stmt->execute();
|
| | | if ($field === 'all') {
|
| | | $translations = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); // This will fetch the results in key-value pairs ['title' => 'Translation of title', 'description' => 'Translation of description']
|
| | | return $translations;
|
| | | } else {
|
| | | $translation = $stmt->fetchColumn();
|
| | | return $translation === false ? null : $translation; // Will return null if no result found
|
| | | }
|
| | | }
|
| | |
|
| | | function has_content_translation($content_type, $content_id, $language = null, $specific_field = 'all') {
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT 1 FROM translations WHERE content_type = :content_type AND content_id = :content_id";
|
| | | if ($language !== null) {
|
| | | $sql .= " AND language = :language";
|
| | | }
|
| | | if ($specific_field !== 'all') {
|
| | | $sql .= " AND field = :field";
|
| | | }
|
| | | $sql .= " LIMIT 1"; // Added LIMIT 1 for better performance
|
| | | $stmt = $conn->prepare($sql);
|
| | | $stmt->bindParam(':content_type', $content_type, PDO::PARAM_STR);
|
| | | $stmt->bindParam(':content_id', $content_id, PDO::PARAM_INT);
|
| | | if ($language !== null) {
|
| | | $stmt->bindParam(':language', $language, PDO::PARAM_STR);
|
| | | }
|
| | | if ($specific_field !== 'all') {
|
| | | $stmt->bindParam(':field', $specific_field, PDO::PARAM_STR);
|
| | | }
|
| | | $stmt->execute();
|
| | | return $stmt->fetchColumn() !== false;
|
| | | }
|
| | |
|
| | | function get_current_user_hash(){
|
| | | // Only current logged in user that can get their password (hashed)
|
| | | // used in user.php
|
| | | global $login_user;
|
| | | if(is_login() && isset($login_user)){
|
| | | $user = get_user($login_user->username);
|
| | | if($user){
|
| | | return $user['password'];
|
| | | }
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | function is_mobile_device(){
|
| | | // Used to check current visitor is using mobile device or not. return boolean.
|
| | | // $_SESSION used for caching, no need to call the library multiple times
|
| | | if(isset($_SESSION['_is_mobile_device'])){
|
| | | return $_SESSION['_is_mobile_device'];
|
| | | } else {
|
| | | require_once ABSPATH.'vendor/MobileDetect/MobileDetect.php';
|
| | | $detect = new \Detection\MobileDetect;
|
| | | $_SESSION['_is_mobile_device'] = $detect->isMobile();
|
| | | return $_SESSION['_is_mobile_device'];
|
| | | }
|
| | | }
|
| | |
|
| | | function has_admin_access(){
|
| | | if(is_login() && USER_ADMIN && !ADMIN_DEMO){
|
| | | return true;
|
| | | } else {
|
| | | return false;
|
| | | }
|
| | | }
|
| | |
|
| | | function is_cached_query_allowed(){
|
| | | if(defined('SKIP_QUERY_CACHE')){
|
| | | return false;
|
| | | }
|
| | | return true;
|
| | | }
|
| | |
|
| | | function get_cached_query($query_key){
|
| | | global $caching_system;
|
| | | if(!is_null($caching_system)){
|
| | | if($caching_system instanceof Memcached || $caching_system instanceof Memcache){
|
| | | $data = $caching_system->get($query_key);
|
| | | if($data !== false){
|
| | | if(get_pref_bool('query-cache_debug')){
|
| | | echo '<div style="position: relative; z-index: 1000;"><div style="background: red; color: #fff; position: absolute;">Cached: '.ucfirst(get_pref('query-cache_active')).'</div></div>';
|
| | | }
|
| | | return $data;
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | } else if($caching_system instanceof Redis){
|
| | | if($caching_system->exists($query_key)){
|
| | | if(get_pref_bool('query-cache_debug')){
|
| | | echo '<div style="position: relative; z-index: 1000;"><div style="background: red; color: #fff; position: absolute;">Cached: '.ucfirst(get_pref('query-cache_active')).'</div></div>';
|
| | | }
|
| | | return $caching_system->get($query_key);
|
| | | } else {
|
| | | return null;
|
| | | }
|
| | | }
|
| | | }
|
| | | return null;
|
| | | }
|
| | |
|
| | | function set_cached_query($query_key, $json_data){
|
| | | if(!is_string($json_data)){
|
| | | $json_data = json_encode($json_data);
|
| | | }
|
| | | global $caching_system;
|
| | | $expire_time = 7200; // seconds
|
| | | if(!is_null($caching_system)){
|
| | | if($caching_system instanceof Memcached || $caching_system instanceof Memcache){
|
| | | $exists = $caching_system->get('exists_'.$query_key);
|
| | | if(!$exists) {
|
| | | if($caching_system instanceof Memcached){
|
| | | $caching_system->set($query_key, $json_data, $expire_time);
|
| | | $caching_system->set('exists_'.$query_key, true, $expire_time);
|
| | | } else {
|
| | | $caching_system->set($query_key, $json_data, 0, $expire_time);
|
| | | $caching_system->set('exists_'.$query_key, true, 0, $expire_time);
|
| | | }
|
| | | }
|
| | | } else if($caching_system instanceof Redis){
|
| | | if(!$caching_system->exists($query_key)){
|
| | | $caching_system->set($query_key, $json_data, ['ex' => $expire_time]);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | if(!defined('CRON')){
|
| | | die('p');
|
| | | }
|
| | |
|
| | | $data = get_pref('cron-job');
|
| | |
|
| | | define("LIMIT", 3);
|
| | | $game_count = 0;
|
| | | $log_txt = "";
|
| | |
|
| | | if(!is_null($data)){
|
| | | $data = json_decode($data, true);
|
| | | if(isset($data['auto-post'])){
|
| | | $task_date = $data['auto-post']['date'];
|
| | | $cur_date = date("Y-m-d H:i:s");
|
| | | if($cur_date >= $task_date){
|
| | | $datetime1 = date_create($cur_date);
|
| | | $datetime2 = date_create($task_date);
|
| | | $interval = date_diff($datetime1, $datetime2);
|
| | | $diff = $interval->format('%d');
|
| | |
|
| | | if($diff < 4){
|
| | | $new_task_date = date('Y-m-d H:i:s', strtotime('+8 hours', strtotime(date('Y-m-d H:i:s'))));
|
| | | $data['auto-post']['date'] = $new_task_date;
|
| | | update_option('cron-job', json_encode($data));
|
| | | auto_add_games($data);
|
| | | } else { //More than 4 days inactive
|
| | | echo 'remove';
|
| | | unset($data['auto-post']);
|
| | | update_option('cron-job', json_encode($data));
|
| | | }
|
| | | } else {
|
| | | if(!defined('CRON')){
|
| | | echo 'on the way';
|
| | | }
|
| | | }
|
| | | } else {
|
| | | //Inactive
|
| | | }
|
| | | }
|
| | |
|
| | | function auto_add_games($data){
|
| | | if(!ADMIN_DEMO){
|
| | | add_to_log();
|
| | | $data['auto-post']['last-status'] = 'null';
|
| | | $url = 'https://api.cloudarcade.net/fetch-auto.php?action=fetch&code='. check_purchase_code();
|
| | | $url .= '&data='.json_encode($data['auto-post']['list']);
|
| | | $url .= '&ref='.DOMAIN.'&v='.VERSION;
|
| | | $ch = curl_init($url);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
| | | curl_setopt($ch, CURLOPT_TIMEOUT, 10);
|
| | | $curl = curl_exec($ch);
|
| | | curl_close($ch);
|
| | | $game_data = json_decode($curl, true);
|
| | | if(isset($game_data['error'])){
|
| | | add_to_log('Failed auto add games: '.$curl);
|
| | | } else if($game_data){
|
| | | foreach ($game_data as $a => $b) {
|
| | | foreach ($b as $item) {
|
| | | $item['tags'] = '';
|
| | | x_add_game2($item);
|
| | | }
|
| | | }
|
| | | } else {
|
| | | add_to_log('Failed auto add games. Null');
|
| | | }
|
| | | write_log();
|
| | | }
|
| | | }
|
| | |
|
| | | function x_add_game2($data){
|
| | | $_POST = $data;
|
| | | // Copied from request.php add_game()
|
| | | $ref = '';
|
| | | if(isset($_POST['ref'])) $ref = $_POST['ref'];
|
| | | $_POST['description'] = html_purify($_POST['description']);
|
| | | $_POST['instructions'] = html_purify($_POST['instructions']);
|
| | | if($_POST['source'] == 'self' || $_POST['source'] == 'remote'){
|
| | | if(!isset($_POST['published'])){
|
| | | $_POST['published'] = false;
|
| | | }
|
| | | }
|
| | | if(!isset($_POST['is_mobile'])){
|
| | | $_POST['is_mobile'] = false;
|
| | | }
|
| | | $redirect = 0;
|
| | | if(isset($_POST['redirect'])){
|
| | | $redirect = $_POST['redirect'];
|
| | | }
|
| | | if(isset($_POST['slug'])){
|
| | | $slug = esc_slug($_POST['slug']);
|
| | | } else {
|
| | | $slug = esc_slug(strtolower(str_replace(' ', '-', $_POST["title"])));
|
| | | }
|
| | | $slug = preg_replace('/-{2,}/', '-', $slug);
|
| | | $slug = trim($slug, '-');
|
| | | $_POST['slug'] = $slug;
|
| | | if(is_array($_POST['category'])){
|
| | | // Array category is not allowed
|
| | | // Convert to string
|
| | | $cats = '';
|
| | | $i = 0;
|
| | | $total = count($_POST['category']);
|
| | | foreach ($_POST['category'] as $key) {
|
| | | $cats = $cats.$key;
|
| | | if($i < $total-1){
|
| | | $cats = $cats.',';
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | $_POST['category'] = $cats;
|
| | | }
|
| | | if($_POST['category'] == '' || $_POST['category'] == ' '){
|
| | | $_POST['category'] = 'Other';
|
| | | }
|
| | | // Begin category filter
|
| | | if(file_exists(ABSPATH."content/plugins/category-filter")){
|
| | | // Plugin exist
|
| | | $cats = '';
|
| | | $categories = commas_to_array($_POST['category']);
|
| | | $i = 0;
|
| | | $total = count($categories);
|
| | | foreach ($categories as $key) {
|
| | | $cats = $cats.category_name_filtering($key);
|
| | | if($i < $total-1){
|
| | | $cats = $cats.',';
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | $_POST['category'] = $cats;
|
| | | }
|
| | | $game = new Game;
|
| | | $check=$game->getBySlug($slug);
|
| | | $status='failed';
|
| | | if(is_null($check)){
|
| | | if($ref != 'upload'){
|
| | | // Come from fetch games
|
| | | if(IMPORT_THUMB){
|
| | | // Check if webp is activated
|
| | | $use_webp = get_setting_value('webp_thumbnail');
|
| | | import_thumbnail($_POST['thumb_2'], $slug, 2);
|
| | | $name = basename($_POST['thumb_2']);
|
| | | $extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
|
| | | $_POST['thumb_2'] = '/thumbs/'.$slug.'_2.'.$extension;
|
| | | if($use_webp){
|
| | | $file_extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
|
| | | $_POST['thumb_2'] = str_replace('.'.$file_extension, '.webp', $_POST['thumb_2']);
|
| | | }
|
| | | //
|
| | | import_thumbnail($_POST['thumb_1'], $slug, 1);
|
| | | $name = basename($_POST['thumb_1']);
|
| | | $extension = pathinfo($_POST['thumb_1'], PATHINFO_EXTENSION);
|
| | | $_POST['thumb_1'] = '/thumbs/'.$slug.'_1.'.$extension;
|
| | | if($use_webp){
|
| | | $file_extension = pathinfo($_POST['thumb_1'], PATHINFO_EXTENSION);
|
| | | $_POST['thumb_1'] = str_replace('.'.$file_extension, '.webp', $_POST['thumb_1']);
|
| | | }
|
| | | if( SMALL_THUMB ){
|
| | | $output = pathinfo($_POST['thumb_2']);
|
| | | $_POST['thumb_small'] = '/thumbs/'.$slug.'_small.'.$output['extension'];
|
| | | if($use_webp){
|
| | | $file_extension = pathinfo($_POST['thumb_2'], PATHINFO_EXTENSION);
|
| | | $_POST['thumb_small'] = str_replace('.'.$file_extension, '.webp', $_POST['thumb_small']);
|
| | | generate_small_thumbnail($_POST['thumb_2'], $slug);
|
| | | } else {
|
| | | generate_small_thumbnail($_POST['thumb_2'], $slug);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | $game->storeFormValues( $_POST );
|
| | | $game->insert();
|
| | | $status='added';
|
| | | //
|
| | | $cats = commas_to_array($_POST['category']);
|
| | | if(is_array($cats)){ //Add new category if not exist
|
| | | $length = count($cats);
|
| | | for($i = 0; $i < $length; $i++){
|
| | | $_POST['name'] = $cats[$i];
|
| | | $category = new Category;
|
| | | $exist = $category->isCategoryExist($_POST['name']);
|
| | | if($exist){
|
| | | //
|
| | | } else {
|
| | | unset($_POST['slug']);
|
| | | $_POST['description'] = '';
|
| | | $category->storeFormValues( $_POST );
|
| | | $category->insert();
|
| | | }
|
| | | $category->addToCategory($game->id, $category->id);
|
| | | }
|
| | | }
|
| | | }
|
| | | else{
|
| | | $status='exist';
|
| | | }
|
| | | $keys =['title', 'slug', 'description', 'instructions', 'width', 'height', 'category', 'thumb_1', 'thumb_2', 'url', 'tags'];
|
| | | if($status != 'added'){
|
| | | if($_POST['source'] == 'self' || $_POST['source'] == 'remote'){
|
| | | // Store current fields
|
| | | foreach ($keys as $item) {
|
| | | $_SESSION[$item] = (isset($_POST[$item])) ? $_POST[$item] : null;
|
| | | }
|
| | | }
|
| | | } else {
|
| | | // Successfully added
|
| | | // Clear last fields
|
| | | if(isset($_SESSION['title'])){
|
| | | foreach ($keys as $item) {
|
| | | if(isset($_SESSION[$item])){
|
| | | unset($_SESSION[$item]);
|
| | | }
|
| | | }
|
| | | }
|
| | | add_to_log('Game added - '.$_POST['source'].' - '.$slug);
|
| | | }
|
| | | if($status == 'exist'){
|
| | | add_to_log('Game alredy exist - '.$_POST['source'].' - '.$slug);
|
| | | $status='exist';
|
| | | }
|
| | | }
|
| | |
|
| | | function category_name_filtering($category_name){
|
| | | // Specific function for "Category Filter" plugin
|
| | | if(true){
|
| | | $json = get_pref("category-filter");
|
| | | if($json){
|
| | | $data = json_decode($json, true);
|
| | | foreach ($data as $key => $value) {
|
| | | if($key == $category_name){
|
| | | return $value;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | return $category_name;
|
| | | }
|
| | | function generate_small_thumbnail($path, $slug){
|
| | | // copied from admin-functions.php
|
| | | $parent_dir = dirname(__FILE__) . '/../'; // CloudArcade root / installation folder
|
| | | if(!file_exists($parent_dir.$path)){
|
| | | echo 'error 910: img file not found!';
|
| | | return;
|
| | | }
|
| | | // $use_webp = get_setting_value('webp_thumbnail');
|
| | | $path_info = pathinfo($path);
|
| | | $root_folder = explode ("/", $path);
|
| | | $output = "thumbs/" . $slug . "_small." . $path_info['extension'];
|
| | | if($path_info['extension'] == 'webp'){
|
| | | // WEBP thumbnail
|
| | | $file_extension = pathinfo($path, PATHINFO_EXTENSION);
|
| | | $output = str_replace('.'.$file_extension, '.webp', $output);
|
| | | $_img = getimagesize($parent_dir.$path);
|
| | | $width = $_img['0'];
|
| | | $height = $_img['1'];
|
| | | $img = imagecreatefromwebp($parent_dir.$path);
|
| | | $new_img = imagecreatetruecolor(160, 160);
|
| | | imagecopyresized($new_img, $img, 0, 0, 0, 0, 160, 160, $width, $height);
|
| | | //output
|
| | | imagewebp($new_img, $parent_dir.$output, -1); // No compression
|
| | | } else {
|
| | | // PNG, JPG, GIF
|
| | | $x = getimagesize($parent_dir.$path);
|
| | | $width = $x['0'];
|
| | | $height = $x['1'];
|
| | | switch ($x['mime']) {
|
| | | case "image/gif":
|
| | | $img = imagecreatefromgif($parent_dir.$path);
|
| | | break;
|
| | | case "image/jpg":
|
| | | case "image/jpeg":
|
| | | $img = imagecreatefromjpeg($parent_dir.$path);
|
| | | break;
|
| | | case "image/png":
|
| | | $img = imagecreatefrompng($parent_dir.$path);
|
| | | break;
|
| | | }
|
| | | $img_base = imagecreatetruecolor(160, 160);
|
| | | if($x['mime'] == "image/png"){
|
| | | imageAlphaBlending($img_base, false);
|
| | | imageSaveAlpha($img_base, true);
|
| | | }
|
| | | imagecopyresampled($img_base, $img, 0, 0, 0, 0, 160, 160, $width, $height);
|
| | | $path_info = pathinfo($parent_dir.$path);
|
| | | switch ($path_info['extension']) {
|
| | | case "gif":
|
| | | imagegif($img_base, $parent_dir.$output); // No compression
|
| | | break;
|
| | | case "jpg":
|
| | | case "jpeg":
|
| | | imagejpeg($img_base, $parent_dir.$output, 100); // No compression
|
| | | break;
|
| | | case "png":
|
| | | imagepng($img_base, $parent_dir.$output, 6); // Balance compression
|
| | | break;
|
| | | }
|
| | | imagedestroy($img);
|
| | | imagedestroy($img_base);
|
| | | }
|
| | | }
|
| | | function import_thumbnail($url, $game_slug, $index = null){
|
| | | // copied from admin-functions.php
|
| | | $parent_dir = dirname(__FILE__) . '/../'; // CloudArcade root / installation folder
|
| | | if($url) {
|
| | | if (!file_exists($parent_dir.'thumbs')) {
|
| | | mkdir($parent_dir.'thumbs', 0777, true);
|
| | | }
|
| | | $extension = pathinfo($url, PATHINFO_EXTENSION);
|
| | | $identifier = '';
|
| | | if(!is_null($index)){
|
| | | $identifier = '_'.$index;
|
| | | }
|
| | | $new = $parent_dir.'thumbs/'.$game_slug.$identifier.'.'.$extension;
|
| | | if( get_setting_value('webp_thumbnail') ){
|
| | | // Using WEBP format
|
| | | $file_extension = pathinfo($url, PATHINFO_EXTENSION);
|
| | | $new = str_replace('.'.$file_extension, '.webp', $new);
|
| | | // Create a cURL resource
|
| | | $ch = curl_init();
|
| | | // Set cURL options for retrieving the remote image file
|
| | | curl_setopt($ch, CURLOPT_URL, $url);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
| | | curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
|
| | | // Retrieve the remote image and save it to a local file
|
| | | $remoteImage = curl_exec($ch);
|
| | | if($remoteImage !== false){
|
| | | $localFile = fopen($new, 'w');
|
| | | if($localFile){
|
| | | fwrite($localFile, $remoteImage);
|
| | | fclose($localFile);
|
| | | } else {
|
| | | echo 'Could not create local file';
|
| | | }
|
| | | } else {
|
| | | echo 'Could not download remote image';
|
| | | }
|
| | | // Close the cURL resource
|
| | | curl_close($ch);
|
| | | image_to_webp($new, 100, $new);
|
| | | } else {
|
| | | // Using JPG/PNG/GIF format
|
| | | save_remote_thumbnail($url, $new);
|
| | | }
|
| | | }
|
| | | }
|
| | | function save_remote_thumbnail($source, $destination, $quality = 100) {
|
| | | // copied from admin-functions.php
|
| | | $ch = curl_init();
|
| | | // Set cURL options for retrieving the remote image file
|
| | | curl_setopt($ch, CURLOPT_URL, $source);
|
| | | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| | | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
| | | curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
|
| | | // Retrieve the remote image and create an image resource from it
|
| | | $remoteImage = curl_exec($ch);
|
| | | if($remoteImage !== false){
|
| | | $image = imagecreatefromstring($remoteImage);
|
| | | if($image !== false){
|
| | | $info = getimagesizefromstring($remoteImage);
|
| | | if ($info['mime'] == 'image/png'){
|
| | | imageAlphaBlending($image, true);
|
| | | imageSaveAlpha($image, true);
|
| | | imagepng($image, $destination, 6);
|
| | | } else if($info['mime'] == 'image/jpg' || $info['mime'] == 'image/jpeg') {
|
| | | imagejpeg($image, $destination, 100); // No compression
|
| | | } else if($info['mime'] == 'image/gif') {
|
| | | imagegif($image, $destination);
|
| | | }
|
| | | imagedestroy($image);
|
| | | } else {
|
| | | echo 'Could not create image resource';
|
| | | }
|
| | | } else {
|
| | | echo 'Could not download remote image';
|
| | | }
|
| | | // Close the cURL resource
|
| | | curl_close($ch);
|
| | | }
|
| | | function add_to_log($msg = ""){
|
| | | global $log_txt;
|
| | | if($msg == ""){
|
| | | $log_txt .= "---- Executed - ".date('Y-m-d H:i:s');
|
| | | } else {
|
| | | $log_txt .= $msg;
|
| | | }
|
| | | $log_txt .= PHP_EOL;
|
| | | }
|
| | | function write_log(){
|
| | | global $log_txt;
|
| | | if($log_txt != ""){
|
| | | $path = ABSPATH . PLUGIN_PATH . '/auto-publish';
|
| | | if(file_exists($path . '/log.txt')){
|
| | | $filesizeKB = filesize($path . '/log.txt') / 1024;
|
| | | if($filesizeKB >= 50){
|
| | | file_put_contents($path . '/log_prev.txt', file_get_contents($path . '/log.txt'));
|
| | | unlink($path . '/log.txt');
|
| | | }
|
| | | }
|
| | | if(file_exists($path)){
|
| | | $full_log = "";
|
| | | if(file_exists($path . '/log.txt')){
|
| | | $full_log = file_get_contents($path . '/log.txt');
|
| | | }
|
| | | $full_log = $log_txt.$full_log;
|
| | | file_put_contents($path . '/log.txt', $full_log);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require( '../config.php' );
|
| | | require( '../init.php' );
|
| | |
|
| | | $content_type = 'game';
|
| | |
|
| | | if(isset($_POST['type'])){
|
| | | $content_type = $_POST['type'];
|
| | | }
|
| | |
|
| | | if($content_type == 'game'){
|
| | | if(isset($_POST['category_id'])){
|
| | | $cat_id = (int)$_POST['category_id'];
|
| | | $amount = isset($_POST['amount']) ? (int)$_POST['amount'] : 10;
|
| | | $offset = isset($_POST['offset']) ? (int)$_POST['offset'] : 0;
|
| | | $data = Category::getListByCategory( $cat_id, $amount, $offset );
|
| | | if($data){
|
| | | echo json_encode($data['results']);
|
| | | } else {
|
| | | echo '[]';
|
| | | }
|
| | | } else {
|
| | | if(isset($_POST['sort_by'])){
|
| | | $sort = $_POST['sort_by'];
|
| | | $amount = isset($_POST['amount']) ? (int)$_POST['amount'] : 10;
|
| | | $offset = isset($_POST['offset']) ? (int)$_POST['offset'] : 0;
|
| | | $result = [];
|
| | | if($sort == 'new'){
|
| | | $data = Game::getList( $amount, 'id DESC', $offset );
|
| | | $result = $data['results'];
|
| | | } elseif($sort == 'random'){
|
| | | $data = Game::getList( $amount, 'RAND()', $offset );
|
| | | $result = $data['results'];
|
| | | } elseif($sort == 'popular'){
|
| | | $data = Game::getList( $amount, 'views DESC', $offset );
|
| | | $result = $data['results'];
|
| | | } elseif($sort == 'likes'){
|
| | | $data = Game::getList( $amount, 'upvote DESC', $offset );
|
| | | $result = $data['results'];
|
| | | }
|
| | | echo json_encode($result);
|
| | | } |
| | | }
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | // Deprecated since v1.6.4 replaced with theme-functions.php
|
| | | // However, this script maybe still used in admin area
|
| | |
|
| | | function get_game_list($type, $amount=12, $page=0, $count=true){
|
| | | if($type == 'new'){
|
| | | $data = Game::getList( $amount, 'id DESC', $page, $count );
|
| | | return $data;
|
| | | } elseif($type == 'random'){
|
| | | $data = Game::getList( $amount, 'RAND()', $page, $count );
|
| | | return $data;
|
| | | } elseif($type == 'popular'){
|
| | | $data = Game::getList( $amount, 'views DESC', $page, $count );
|
| | | return $data;
|
| | | } elseif($type == 'likes'){
|
| | | $data = Game::getList( $amount, 'upvote DESC', $page, $count );
|
| | | return $data;
|
| | | } elseif($type == 'trending'){
|
| | | // Last 7 days trending
|
| | | $data = [];
|
| | | $conn = open_connection();
|
| | | $date = new \DateTime('now');
|
| | | // Get last 7 days
|
| | | $date->sub(new DateInterval('P7D')); |
| | | $sql = "SELECT * FROM trends WHERE created >= '{$date->format('Y-m-d')}'";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $row = $st->fetchAll(PDO::FETCH_ASSOC);
|
| | | $list = array();
|
| | | if(count($row)){
|
| | | foreach ($row as $item) {
|
| | | if(isset($list[$item['slug']])){
|
| | | $list[$item['slug']] += (int)$item['views'];
|
| | | } else {
|
| | | $list[$item['slug']] = (int)$item['views'];
|
| | | }
|
| | | }
|
| | | arsort($list);
|
| | | $i = 0;
|
| | | foreach ($list as $slug => $views) {
|
| | | if($i < $amount){
|
| | | $game = Game::getBySlug($slug);
|
| | | if($game){
|
| | | $data[] = $game;
|
| | | }
|
| | | }
|
| | | $i++;
|
| | | }
|
| | | }
|
| | | return (array(
|
| | | "results" => $data,
|
| | | "totalRows" => count($list),
|
| | | "totalPages" => 1
|
| | | ));
|
| | | }
|
| | | }
|
| | | function get_collection($name, $amount = 12){
|
| | | $data = Collection::getListByCollection( $name, $amount );
|
| | | return $data;
|
| | | }
|
| | | function get_game_list_category($cat_name, $amount, $page=0){
|
| | | $cat_id = Category::getIdByName( $cat_name );
|
| | | $data = Category::getListByCategory( $cat_id, $amount, $page );
|
| | | return $data;
|
| | | }
|
| | | function get_game_list_category_id($cat_id, $amount, $page=0){
|
| | | $data = Category::getListByCategory( $cat_id, $amount, $page );
|
| | | return $data;
|
| | | }
|
| | | function get_game_list_categories($arr, $amount, $page=0, $random = true){
|
| | | $ids = array();
|
| | | foreach ($arr as $cat_name) {
|
| | | $cat_id = Category::getIdByName( $cat_name );
|
| | | array_push($ids, $cat_id);
|
| | | }
|
| | | $data = Category::getListByCategories( $ids, $amount, $page, $random );
|
| | | return $data;
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require_once( ABSPATH . CLASS_PATH . "/Page.php" );
|
| | | require_once( ABSPATH . CLASS_PATH . "/Category.php" );
|
| | | require_once( ABSPATH . CLASS_PATH . "/Game.php" );
|
| | | require_once( ABSPATH . CLASS_PATH . "/User.php" );
|
| | | require_once( ABSPATH . CLASS_PATH . "/Auth.php" );
|
| | | require_once( ABSPATH . CLASS_PATH . "/Widget.php" );
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php |
| | | |
| | | define( "ADMIN_DEMO", false ); |
| | | |
| | | require( 'sub-folder.php' ); |
| | | |
| | | define('SETTINGS', fetch_settings_data()); // SETTINGS is a replacement for $options |
| | | |
| | | function fetch_settings_data(){ |
| | | if(defined('SETTINGS')){ |
| | | return SETTINGS; |
| | | } else { |
| | | $conn = open_connection(); |
| | | $sql = "SELECT * FROM settings"; |
| | | $st = $conn->prepare($sql); |
| | | $st->execute(); |
| | | $rows = $st->fetchAll(PDO::FETCH_ASSOC); |
| | | $assoc_array = []; // Convert to associative array |
| | | foreach ($rows as $item) { |
| | | if($item['name'] == 'custom_path'){ |
| | | if($item['value'] != ''){ |
| | | $item['value'] = json_decode($item['value'], true); |
| | | } else { |
| | | $item['value'] = []; |
| | | } |
| | | } |
| | | if($item['type'] == 'bool' || $item['type'] == 'number'){ |
| | | $item['value'] = (int)$item['value']; |
| | | } |
| | | $assoc_array[$item['name']] = $item; |
| | | } |
| | | return $assoc_array; |
| | | } |
| | | } |
| | | |
| | | $options = []; |
| | | |
| | | foreach (SETTINGS as $key => $value) { |
| | | // Compatibility mode |
| | | // $options is dropped, but many themes still depend on it |
| | | if($value['type'] == 'bool'){ |
| | | $str_bool = 'false'; |
| | | if($value['value']){ |
| | | $str_bool = 'true'; |
| | | } |
| | | $options[$key] = $str_bool; |
| | | } else { |
| | | $options[$key] = $value['value']; |
| | | } |
| | | } |
| | | unset($options['purchase_code']); |
| | | |
| | | if(ADMIN_DEMO){ |
| | | // Allow dynamic theme |
| | | $theme = 'arcade-one'; |
| | | if(isset($_GET['theme'])){ |
| | | $filtered_theme_dir = preg_replace('/[^a-zA-Z0-9_-]/', '', $_GET['theme']); |
| | | $json_path = ABSPATH . 'content/themes/' . $filtered_theme_dir . '/info.json'; |
| | | if(file_exists( $json_path )){ |
| | | $theme = $_GET['theme']; |
| | | $_SESSION['theme'] = $_GET['theme']; |
| | | } |
| | | } elseif(isset($_SESSION['theme'])){ |
| | | $theme = $_SESSION['theme']; |
| | | } |
| | | $options['theme_name'] = $theme; |
| | | } |
| | | |
| | | $www = ''; |
| | | if(defined('IS_VISITOR_PAGE') && SETTINGS['use_www']['value']){ |
| | | // www only work in visitor page and will be ignored in the admin panel |
| | | // this will prevent admin panel error (false configuration from user) |
| | | if(substr($_SERVER['SERVER_NAME'], 0, 4) != 'www.'){ |
| | | $www = 'www.'; |
| | | } |
| | | } |
| | | |
| | | define( "PRETTY_URL", SETTINGS['pretty_url']['value'] ); |
| | | $url_protocol = 'http://'; |
| | | if(SETTINGS['use_https']['value']){ |
| | | $url_protocol = 'https://'; |
| | | } |
| | | define( "URL_PROTOCOL", $url_protocol ); |
| | | define( "DOMAIN", URL_PROTOCOL . $www . $_SERVER['SERVER_NAME'] . get_domain_port() . '/' . SUB_FOLDER ); |
| | | define( "SITE_DOMAIN", $_SERVER['SERVER_NAME'] ); |
| | | |
| | | // if($options['custom_path']){ |
| | | // $options['custom_path'] = json_decode($options['custom_path'], true); |
| | | // } |
| | | |
| | | function get_domain_port(){ |
| | | //Used for localhost with port |
| | | $port = $_SERVER['SERVER_PORT']; |
| | | if($port && $port === '8080'){ |
| | | return ':'.$port; |
| | | } else { |
| | | return ''; |
| | | } |
| | | } |
| | | |
| | | function load_site_settings(){ |
| | | // Deprecated since v1.6.2 |
| | | $conn = open_connection(); |
| | | $sql = "SELECT * FROM options"; |
| | | $st = $conn->prepare($sql); |
| | | $st->execute(); |
| | | $row = $st->fetchAll(); |
| | | $opt = array(); |
| | | foreach ($row as $item) { |
| | | $opt[$item['name']] = $item['value']; |
| | | } |
| | | return $opt; |
| | | } |
| | | |
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | $base_taxonomy = '404';
|
| | |
|
| | | require_once( TEMPLATE_PATH . '/functions.php' );
|
| | |
|
| | | $page_title = '404 - '._t('Page not found').' | '.SITE_TITLE;
|
| | | $meta_description = _t('Page not found');
|
| | |
|
| | | require( TEMPLATE_PATH . '/404.php' );
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require_once( ABSPATH . 'includes/page-category.php' );
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require_once( TEMPLATE_PATH . '/functions.php' );
|
| | |
|
| | | if(PRETTY_URL){
|
| | | if(count($url_params) > 3 || count($url_params) < 2){
|
| | | // Category page only contains 3 parameter max,
|
| | | // If more than that or less than 2, the url is not valid
|
| | | // Show 404 screen
|
| | | require( ABSPATH . 'includes/page-404.php' );
|
| | | return;
|
| | | }
|
| | | if(isset($url_params[2]) && !is_numeric($url_params[2])){
|
| | | // Page number should be a number
|
| | | // Show 404 screen
|
| | | require( ABSPATH . 'includes/page-404.php' );
|
| | | return;
|
| | | }
|
| | | }
|
| | |
|
| | | $cur_page = 1;
|
| | | if(isset($url_params[2])){
|
| | | $_GET['page'] = $url_params[2];
|
| | | if(!is_numeric($_GET['page'])){
|
| | | $_GET['page'] = 1;
|
| | | }
|
| | | }
|
| | | if(isset($_GET['page'])){
|
| | | $cur_page = htmlspecialchars($_GET['page']);
|
| | | if(!is_numeric($cur_page)){
|
| | | $cur_page = 1;
|
| | | }
|
| | | }
|
| | |
|
| | | if(get_setting_value('allow_slug_translation')){
|
| | | $_original_slug = get_translation_key($_GET['slug']);
|
| | | if($_original_slug && substr($_original_slug, 0, 5) == 'slug:'){
|
| | | // The slug have a translation
|
| | | $_GET['slug'] = str_replace('slug:', '', $_original_slug); // The slug variable is modified
|
| | | }
|
| | | }
|
| | |
|
| | | $category = Category::getBySlug($_GET['slug']);
|
| | |
|
| | | if($category){
|
| | | if($lang_code != 'en'){
|
| | | // If use translation (localization)
|
| | | // Begin translate the content if has translation
|
| | | $translated_fields = get_content_translation('category', $category->id, $lang_code, 'all');
|
| | | if(!is_null($translated_fields)){
|
| | | $category->name = isset($translated_fields['name']) ? $translated_fields['name'] : $category->name;
|
| | | $category->description = isset($translated_fields['description']) ? $translated_fields['description'] : $category->description;
|
| | | $category->meta_description = isset($translated_fields['meta_description']) ? $translated_fields['meta_description'] : $category->meta_description;
|
| | | }
|
| | | }
|
| | |
|
| | | $items_per_page = get_setting_value('category_results_per_page');
|
| | | $data = get_game_list_category_id($category->id, $items_per_page, $items_per_page*($cur_page-1));
|
| | | $games = $data['results'];
|
| | | $total_games = $data['totalRows'];
|
| | | $total_page = $data['totalPages'];
|
| | | if($cur_page > $total_page){
|
| | | // Page number is more than actual maximum page
|
| | | require( ABSPATH . 'includes/page-404.php' );
|
| | | return;
|
| | | }
|
| | | if(isset($category->meta_description) && $category->meta_description != ''){
|
| | | $meta_description = $category->meta_description;
|
| | | } else {
|
| | | $meta_description = _t('Play %a Games', $category->name).' | '.SITE_DESCRIPTION;
|
| | | }
|
| | | $archive_title = _t($category->name);
|
| | | $page_title = _t('%a Games', $category->name).' | '.SITE_DESCRIPTION;
|
| | | if(file_exists(TEMPLATE_PATH . '/category.php')){
|
| | | // category.php is preferred over archive.php |
| | | require( TEMPLATE_PATH . '/category.php' );
|
| | | } else {
|
| | | // For backward compatibility
|
| | | require( TEMPLATE_PATH . '/archive.php' );
|
| | | }
|
| | | } else {
|
| | | require( ABSPATH . 'includes/page-404.php' );
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | //New window page for gameplay
|
| | |
|
| | | require_once( TEMPLATE_PATH . '/functions.php' );
|
| | |
|
| | | if ( !isset($_GET['slug']) || !$_GET['slug'] ) {
|
| | | require( ABSPATH . 'includes/page-404.php' );
|
| | | return;
|
| | | }
|
| | |
|
| | | $_GET['slug'] = htmlspecialchars($_GET['slug']);
|
| | |
|
| | | $game = Game::getBySlug( $_GET['slug'] );
|
| | | if($game){
|
| | | if($game->source == 'self' && get_setting_value('splash')){
|
| | | require( ABSPATH . 'includes/page-splash.php' );
|
| | | return;
|
| | | }
|
| | | $page_title = $game->title;
|
| | | $meta_description = str_replace(array('"', "'"), "", strip_tags($game->description));
|
| | |
|
| | | ?>
|
| | |
|
| | | <!DOCTYPE html>
|
| | | <html>
|
| | | <head>
|
| | | <meta charset="utf-8">
|
| | | <title><?php echo $page_title ?></title>
|
| | | <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
|
| | | <meta name="description" content="<?php echo $meta_description ?>">
|
| | | <meta name="robots" content="noindex">
|
| | | <style type="text/css">
|
| | | body {
|
| | | color: #eee;
|
| | | line-height: 1.43;
|
| | | position: inherit;
|
| | | margin: 0;
|
| | | padding: 0;
|
| | | background-color: #000;
|
| | | overflow: hidden;
|
| | | height: 100%;
|
| | | }
|
| | | #game-content {
|
| | | position: absolute;
|
| | | top: 0;
|
| | | left: 0;
|
| | | width: 0;
|
| | | height: 0;
|
| | | overflow: hidden;
|
| | | max-width: 100%;
|
| | | max-height: 100%;
|
| | | min-width: 100%;
|
| | | min-height: 100%;
|
| | | box-sizing: border-box;
|
| | | }
|
| | | </style>
|
| | | </head>
|
| | | <body>
|
| | | <?php
|
| | | $url = esc_url($game->url);
|
| | | if($game->source == 'gamedistribution'){
|
| | | //GameDistributon new url
|
| | | $url .= '?gd_sdk_referrer_url='.get_permalink('full', $game->slug);
|
| | | }
|
| | | ?>
|
| | | <iframe id="game-content" frameborder="0" allow="autoplay" allowfullscreen="" seamless="" scrolling="no" src="<?php echo $url ?>"></iframe>
|
| | | </body>
|
| | | </html>
|
| | |
|
| | | <?php
|
| | | } else {
|
| | | require( ABSPATH . 'includes/page-404.php' );
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require_once( TEMPLATE_PATH . '/functions.php' );
|
| | |
|
| | | // if ( !isset($_GET['slug']) || !$_GET['slug'] ) {
|
| | | // require( ABSPATH . 'includes/page-homepage.php' );
|
| | | // return;
|
| | | // }
|
| | |
|
| | | if(count($url_params) != 2){
|
| | | // The number of parameter is not match
|
| | | require( ABSPATH . 'includes/page-404.php' );
|
| | | return;
|
| | | }
|
| | |
|
| | | $_GET['slug'] = htmlspecialchars($_GET['slug']);
|
| | |
|
| | | Game::update_views( $_GET['slug'] );
|
| | | $game = Game::getBySlug( $_GET['slug'] );
|
| | |
|
| | | if($game && !$game->published){
|
| | | // This game is drafted
|
| | | if(is_login() && USER_ADMIN){
|
| | | // Show message for admin user
|
| | | echo '<div class="alert alert-warning alert-draft" style="z-index: 1000;">The game has not been published yet and is currently in draft mode.</div>';
|
| | | } else {
|
| | | $game = null;
|
| | | // Show 404 page for visitor
|
| | | }
|
| | | }
|
| | |
|
| | | if($game){
|
| | | if($lang_code != 'en'){
|
| | | // If use translation (localization)
|
| | | // Begin translate the content if has translation
|
| | | $translated_fields = get_content_translation('game', $game->id, $lang_code, 'all');
|
| | | if(!is_null($translated_fields)){
|
| | | $game->title = isset($translated_fields['title']) ? $translated_fields['title'] : $game->title;
|
| | | $game->description = isset($translated_fields['description']) ? $translated_fields['description'] : $game->description;
|
| | | $game->instructions = isset($translated_fields['instructions']) ? $translated_fields['instructions'] : $game->instructions;
|
| | | }
|
| | | }
|
| | | |
| | | $page_title = $game->title . ' | '.SITE_DESCRIPTION;
|
| | | $meta_description = str_replace(array('"', "'"), "", strip_tags($game->description));
|
| | |
|
| | | require( TEMPLATE_PATH . '/game.php' );
|
| | | } else {
|
| | | require( ABSPATH . 'includes/page-404.php' );
|
| | | }
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | require_once( TEMPLATE_PATH . '/functions.php' );
|
| | |
|
| | | $page_title = get_site_info('title');
|
| | | $meta_description = get_site_info('meta_description');
|
| | |
|
| | | require( TEMPLATE_PATH . '/home.php' );
|
| | |
|
| | | ?> |
| New file |
| | |
| | | <?php
|
| | |
|
| | | if(is_login()){
|
| | | $user_data = get_user($_POST['username']);
|
| | | if($user_data['role'] === 'admin'){
|
| | | header('Location: '.DOMAIN.'admin/dashboard.php');
|
| | | return;
|
| | | } else {
|
| | | header('Location: '.get_permalink('user', $_SESSION['username']));
|
| | | return;
|
| | | }
|
| | | }
|
| | |
|
| | | if (!isset($url_params)) {
|
| | | // $url_params is undefined, which means that page-login.php is being loaded from admin.php instead of index.php.
|
| | | // $url_params is handled in index.php.
|
| | | $url_params = ['login'];
|
| | | }
|
| | |
|
| | | $errors = array();
|
| | |
|
| | | if (defined('GOOGLE_LOGIN')){
|
| | | if(isset($_POST['credential'])){
|
| | | $payload = json_decode(base64_decode(str_replace('_', '/', str_replace('-','+',explode('.', $_POST['credential'])[1]))), true);
|
| | | if(isset($payload['sub'])){
|
| | | $username = str_replace(' ', '-', $payload['name']);
|
| | | $user_data = get_user($username);
|
| | | if(!$user_data){
|
| | | //User not exist
|
| | | //Register new user
|
| | | $user = new User;
|
| | | $_POST['username'] = $username;
|
| | | $_POST['password'] = password_hash($payload['sub'], PASSWORD_DEFAULT);
|
| | | $_POST['email'] = $payload['email'];
|
| | | $_POST['birth_date'] = date('Y-m-d');
|
| | | $_POST['gender'] = 'unset';
|
| | | $user->storeFormValues($_POST);
|
| | | $user->insert();
|
| | | }
|
| | | //
|
| | | $_POST['username'] = $username;
|
| | | $_POST['password'] = $payload['sub'];
|
| | | $_POST['login'] = true;
|
| | | $_POST['remember'] = true;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | if ( isset( $_POST['login'] ) ) {
|
| | | $user_data = get_user($_POST['username']);
|
| | | if($user_data){
|
| | | if(password_verify($_POST['password'], $user_data['password'])){
|
| | | $_SESSION['username'] = $_POST['username'];
|
| | |
|
| | | if(isset($_POST['remember'])){
|
| | | CA_Auth::insert(str_encrypt($_SESSION['username'], 'f'));
|
| | | }
|
| | |
|
| | | if($user_data['role'] === 'admin'){
|
| | | header('Location: '.DOMAIN.'admin/dashboard.php');
|
| | | update_login_history('success');
|
| | | return;
|
| | | } else {
|
| | | header('Location: '.get_permalink('user', $_SESSION['username']));
|
| | | return;
|
| | | }
|
| | | }
|
| | | }
|
| | | $errors[] = _t('Incorrect username or password.');
|
| | | }
|
| | |
|
| | | if (isset($_POST['login'])) {
|
| | | $timer = time() - 30;
|
| | | $ip_address = getIpAddr();
|
| | | // Getting total count of hits on the basis of IP
|
| | | $conn = open_connection();
|
| | | $sql = "SELECT count(*) FROM loginlogs WHERE TryTime > :timer and IpAddress = :ip_address";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":timer", $timer, PDO::PARAM_INT);
|
| | | $st->bindValue(":ip_address", $ip_address, PDO::PARAM_STR);
|
| | | $st->execute();
|
| | | $totalRows = $st->fetchColumn();
|
| | | $total_count = $totalRows;
|
| | | if ($total_count == 10) {
|
| | | $errors[] = _t('To many failed login attempts. Please login after 30 sec.');
|
| | | } else {
|
| | | $total_count++;
|
| | | $rem_attm = 10 - $total_count;
|
| | | if ($rem_attm == 0) {
|
| | | $errors[] = _t('To many failed login attempts. Please login after 30 sec.');
|
| | | } else {
|
| | | $errors[] = _t('%a attempts remaining.', $rem_attm);
|
| | | }
|
| | | $try_time = time();;
|
| | | $sql = "INSERT INTO loginlogs(IpAddress,TryTime) VALUES(:ip_address, :try_time)";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":ip_address", $ip_address, PDO::PARAM_STR);
|
| | | $st->bindValue(":try_time", $try_time, PDO::PARAM_INT);
|
| | | $st->execute();
|
| | | }
|
| | | }
|
| | |
|
| | | function update_login_history($status = 'null'){
|
| | | $ip_address = getIpAddr();
|
| | | $data = array(
|
| | | 'username' => $_POST['username'],
|
| | | 'password' => '***',
|
| | | 'date' => date("Y-m-d H:i:s"),
|
| | | 'status' => $status,
|
| | | 'agent' => 'null',
|
| | | 'country' => 'null',
|
| | | 'city' => 'null',
|
| | | );
|
| | | if($_SERVER['HTTP_USER_AGENT']){
|
| | | $data['agent'] = $_SERVER['HTTP_USER_AGENT'];
|
| | | }
|
| | | $conn = open_connection();
|
| | | $sql = "INSERT INTO login_history(ip, data) VALUES(:ip_address, :data)";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->bindValue(":ip_address", $ip_address, PDO::PARAM_STR);
|
| | | $st->bindValue(":data", json_encode($data), PDO::PARAM_STR);
|
| | | $st->execute();
|
| | |
|
| | | $sql = "SELECT * FROM login_history";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | $count = $st->rowCount();
|
| | | if($count > 100){
|
| | | $sql = "DELETE FROM login_history ORDER BY id ASC LIMIT 10";
|
| | | $st = $conn->prepare($sql);
|
| | | $st->execute();
|
| | | }
|
| | | }
|
| | |
|
| | | ?>
|
| | | <!DOCTYPE html>
|
| | | <html>
|
| | | <head>
|
| | | <meta charset="utf-8">
|
| | | <title><?php _e('Login') ?> | <?php echo SITE_TITLE ?></title>
|
| | | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
|
| | | <meta name="robots" content="noindex">
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN ?>/vendor/bootstrap5/css/bootstrap.min.css" />
|
| | | <!-- Font Awesome icons (free version)-->
|
| | | <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous" defer>
|
| | | <link rel="stylesheet" type="text/css" href="<?php echo DOMAIN ?>admin/style/admin.css">
|
| | | <?php
|
| | | if(file_exists( ABSPATH . TEMPLATE_PATH . '/css/style.css')){
|
| | | echo '<link rel="stylesheet" type="text/css" href="'.get_template_path().'/css/style.css">';
|
| | | } elseif(file_exists( ABSPATH . TEMPLATE_PATH . '/style/style.css')){
|
| | | echo '<link rel="stylesheet" type="text/css" href="'.get_template_path().'/style/style.css">';
|
| | | }
|
| | | if(file_exists( ABSPATH . TEMPLATE_PATH . '/css/custom.css')){
|
| | | echo '<link rel="stylesheet" type="text/css" href="'.get_template_path().'/css/custom.css">';
|
| | | } elseif(file_exists( ABSPATH . TEMPLATE_PATH . '/style/custom.css')){
|
| | | echo '<link rel="stylesheet" type="text/css" href="'.get_template_path().'/style/custom.css">';
|
| | | }
|
| | | if(defined('GOOGLE_LOGIN')){
|
| | | echo '<script src="https://accounts.google.com/gsi/client" async defer></script>';
|
| | | }
|
| | | ?>
|
| | | </head>
|
| | | <body class="login-body">
|
| | | <div class="login-container">
|
| | | <div class="login-form">
|
| | | <div class="container">
|
| | | <div class="login-logo text-center">
|
| | | <img src="<?php echo DOMAIN ?>images/login-logo.png">
|
| | | </div>
|
| | | <?php
|
| | | if(count($url_params) == 1) {
|
| | | ?>
|
| | | <form method="POST" enctype="multipart/form-data">
|
| | | <?php
|
| | | if(count($errors) > 0){
|
| | | foreach ($errors as $msg) {
|
| | | show_alert($msg, 'warning');
|
| | | }
|
| | | }
|
| | | if(isset($_SESSION['message'])){
|
| | | // Come from registration
|
| | | show_alert($_SESSION['message']['text'], $_SESSION['message']['type']);
|
| | | unset($_SESSION['message']);
|
| | | }
|
| | | ?>
|
| | | <input type="hidden" name="login" value="true" />
|
| | | <div class="mb-3">
|
| | | <input type="text" id="username" name="username" placeholder="<?php _e('Username') ?>" class="form-control" value="" required>
|
| | | </div>
|
| | | <div class="mb-3">
|
| | | <input type="password" id="password" name="password" autocomplete="new-password" placeholder="<?php _e('Password') ?>" class="form-control" value="" required>
|
| | | </div>
|
| | | <div class="form-check">
|
| | | <input type="checkbox" class="form-check-input" name="remember" id="remember-me" checked>
|
| | | <label class="form-check-label" for="remember-me"><?php _e('Remember me') ?></label>
|
| | | </div>
|
| | | <br>
|
| | | <div class="text-center">
|
| | | <button type="submit" class="btn btn-info btn-block"><?php _e('Login') ?></button>
|
| | | </div>
|
| | | <?php if(defined('GOOGLE_LOGIN')){
|
| | | render_google_login_btn();
|
| | | } ?>
|
| | | <div class="login-links mt-3">
|
| | | <?php if(get_setting_value('user_register')){ ?>
|
| | | <div class="text-center link-register"><?php _e('Or') ?> <a href="<?php echo get_permalink('register') ?>"><?php _e('Register') ?></a></div>
|
| | | <?php } ?>
|
| | | <?php if(get_plugin_info('mailer') && get_plugin_info('forgot-password') && get_pref_bool('forgot-password-enabled')){ ?>
|
| | | <div class="text-center link-forgot-password"><a href="<?php echo get_permalink('login', 'forgot') ?>"><?php _e('Forgot password?') ?></a></div>
|
| | | <?php } ?>
|
| | | </div>
|
| | | <div class="text-center mt-3"><a href="<?php echo DOMAIN ?>">< <?php _e('Back to Home') ?></a></div>
|
| | | </form>
|
| | | <?php
|
| | | } else if(count($url_params) == 2 && $url_params[1] == 'forgot') {
|
| | | if(get_plugin_info('mailer') && get_plugin_info('forgot-password') && get_pref_bool('forgot-password-enabled')){
|
| | | if(!isset($_POST['action'])){
|
| | | ?>
|
| | | <form method="post" enctype="multipart/form-data">
|
| | | <input type="hidden" name="action" value="forgot-password">
|
| | | <div class="mb-3">
|
| | | <input type="email" class="form-control" name="email" value="" placeholder="Your email" required>
|
| | | </div>
|
| | | <div class="text-center">
|
| | | <button class="btn btn-primary btn-sm"><?php _e('Request a new password') ?></button>
|
| | | </div>
|
| | | </form>
|
| | | <?php
|
| | | } else {
|
| | | if(isset($_POST['email'])){
|
| | | require_once get_plugin_info('forgot-password')['path'] . '/fp_req.php';
|
| | | fp_req_password($_POST['email']);
|
| | | show_alert('New password sent to your mail.', 'success');
|
| | | }
|
| | | }
|
| | | ?>
|
| | | <div class="text-center mt-3"><a href="<?php echo get_permalink('login') ?>">< <?php _e('Back to Login') ?></a></div>
|
| | | <?php
|
| | | }
|
| | | }
|
| | | ?>
|
| | | </div>
|
| | | </div>
|
| | | </div>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN ?>js/jquery-3.6.2.min.js"></script>
|
| | | <script type="text/javascript" src="<?php echo DOMAIN ?>/vendor/bootstrap5/js/bootstrap.min.js"></script>
|
| | | </body>
|
| | | </html> |
| CloudArcade/cloudarcade/cloudarcade/includes/page-page.php
CloudArcade/cloudarcade/cloudarcade/includes/page-post.php
CloudArcade/cloudarcade/cloudarcade/includes/page-register.php
CloudArcade/cloudarcade/cloudarcade/includes/page-search.php
CloudArcade/cloudarcade/cloudarcade/includes/page-splash.php
CloudArcade/cloudarcade/cloudarcade/includes/page-tag.php
CloudArcade/cloudarcade/cloudarcade/includes/page-user-edit.php
CloudArcade/cloudarcade/cloudarcade/includes/page-user-profile.php
CloudArcade/cloudarcade/cloudarcade/includes/page-user.php
CloudArcade/cloudarcade/cloudarcade/includes/plugin.php
CloudArcade/cloudarcade/cloudarcade/includes/rank.json
CloudArcade/cloudarcade/cloudarcade/includes/sessions.php
CloudArcade/cloudarcade/cloudarcade/includes/statistics.php
CloudArcade/cloudarcade/cloudarcade/includes/sub-folder.php
CloudArcade/cloudarcade/cloudarcade/includes/user.php
CloudArcade/cloudarcade/cloudarcade/includes/version.php
CloudArcade/cloudarcade/cloudarcade/includes/vote.php
CloudArcade/cloudarcade/cloudarcade/includes/widgets.php
CloudArcade/cloudarcade/cloudarcade/index.php
CloudArcade/cloudarcade/cloudarcade/init.php
CloudArcade/cloudarcade/cloudarcade/install.php
CloudArcade/cloudarcade/cloudarcade/js/ads.js
CloudArcade/cloudarcade/cloudarcade/js/api.js
CloudArcade/cloudarcade/cloudarcade/js/chart/Chart.min.js
CloudArcade/cloudarcade/cloudarcade/js/chart/stats.js
CloudArcade/cloudarcade/cloudarcade/js/chart/utils.js
CloudArcade/cloudarcade/cloudarcade/js/comment-system.js
CloudArcade/cloudarcade/cloudarcade/js/jquery-3.6.2.min.js
CloudArcade/cloudarcade/cloudarcade/js/jquery-comments.min.js
CloudArcade/cloudarcade/cloudarcade/js/jquery-ui.min.js
CloudArcade/cloudarcade/cloudarcade/js/jquery.nestable.js
CloudArcade/cloudarcade/cloudarcade/js/menu.js
CloudArcade/cloudarcade/cloudarcade/js/script.js
CloudArcade/cloudarcade/cloudarcade/js/stats.js
CloudArcade/cloudarcade/cloudarcade/site-settings.php
CloudArcade/cloudarcade/cloudarcade/sitemap.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.auto.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.autoload-legacy.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.autoload.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.composer.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.func.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.includes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.kses.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.path.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier.safe-includes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Arborize.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrCollections.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/AlphaValue.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Background.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Border.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Color.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Composite.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Filter.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Font.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/FontFamily.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Ident.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Length.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/ListStyle.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Multiple.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Number.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/Percentage.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/TextDecoration.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/CSS/URI.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Clone.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Enum.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Bool.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Class.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Color.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/ContentEditable.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/FrameTarget.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/ID.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Length.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/LinkTypes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/MultiLength.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Nmtokens.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/HTML/Pixels.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Integer.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Lang.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Switch.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/Text.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Email.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/Host.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/IPv4.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrDef/URI/IPv6.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Background.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BdoDir.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BgColor.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/BoolToCSS.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Border.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/EnumToCSS.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ImgRequired.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ImgSpace.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Input.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Lang.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Length.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Name.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/NameSync.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Nofollow.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeEmbed.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeObject.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/SafeParam.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/ScriptRequired.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetBlank.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetNoopener.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/TargetNoreferrer.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTransform/Textarea.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrTypes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/AttrValidator.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Bootstrap.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/CSSDefinition.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Chameleon.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Custom.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Empty.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/List.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Optional.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Required.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/StrictBlockquote.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ChildDef/Table.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Config.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Builder/Xml.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Exception.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange/Directive.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Interchange/Id.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/InterchangeBuilder.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/Validator.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/ValidatorAtom.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema.ser
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedClasses.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedFrameTargets.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRel.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.AllowedRev.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ClassUseCDATA.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultImageAlt.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImage.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultInvalidImageAlt.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.DefaultTextDir.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.EnableID.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ForbiddenClasses.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.ID.HTML5.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklist.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDBlacklistRegexp.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefix.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Attr.IDPrefixLocal.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.AutoParagraph.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Custom.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.DisplayLinkURI.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.Linkify.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.DocURL.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.PurifierLinkify.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.Predicate.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.Exceptions.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.RemoveNbsp.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveEmpty.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/AutoFormat.RemoveSpansWithoutAttributes.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowDuplicates.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowImportant.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowTricky.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedFonts.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.AllowedProperties.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.DefinitionRev.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.ForbiddenProperties.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.MaxImgLength.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.Proprietary.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/CSS.Trusted.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.DefinitionImpl.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPath.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Cache.SerializerPermissions.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyFixLt.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AggressivelyRemoveScript.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowHostnameUnderscore.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.AllowParseManyTags.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.CollectErrors.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.ColorKeywords.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.ConvertDocumentToFragment.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.DirectLexLineNumberSyncInterval.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.DisableExcludes.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EnableIDNA.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.Encoding.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidChildren.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeInvalidTags.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.EscapeNonASCIICharacters.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.HiddenElements.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.Language.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.LegacyEntityDecoder.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.LexerImpl.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.MaintainLineNumbers.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.NormalizeNewlines.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveInvalidImg.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveProcessingInstructions.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Core.RemoveScriptContents.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.Custom.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Escaping.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.Scope.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.TidyImpl.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.ExtractStyleBlocks.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Filter.YouTube.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Allowed.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedAttributes.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedComments.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedCommentsRegexp.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedElements.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.AllowedModules.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Attr.Name.UseCDATA.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.BlockWrapper.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.CoreModules.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.CustomDoctype.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionID.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.DefinitionRev.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Doctype.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.FlashAllowFullScreen.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenAttributes.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.ForbiddenElements.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Forms.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.MaxImgLength.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Nofollow.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Parent.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Proprietary.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeEmbed.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeIframe.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeObject.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.SafeScripting.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Strict.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetBlank.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoopener.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TargetNoreferrer.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyAdd.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyLevel.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.TidyRemove.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.Trusted.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/HTML.XHTML.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.CommentScriptContents.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.FixInnerHTML.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.FlashCompat.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.Newline.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.SortAttr.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Output.TidyFormat.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/Test.ForceNoIconv.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.AllowedSchemes.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Base.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefaultScheme.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionID.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DefinitionRev.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Disable.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternal.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableExternalResources.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.DisableResources.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Host.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.HostBlacklist.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MakeAbsolute.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.Munge.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeResources.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.MungeSecretKey.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.OverrideAllowedSchemes.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/URI.SafeIframeRegexp.txt
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ConfigSchema/schema/info.ini
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ContentSets.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Context.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Definition.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Memory.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Decorator/Template.php.in
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Null.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/CSS/4.13.0,4114918a13a428a8482a8a449792a5a8747582b5,1.ser
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/HTML/4.13.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/HTML/4.15.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/README
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/URI/4.13.0,3478238e680361cd87bf880f5b3cc50a1e7abc6c,1.ser
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCache/Serializer/URI/4.15.0,3478238e680361cd87bf880f5b3cc50a1e7abc6c,1.ser
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DefinitionCacheFactory.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Doctype.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/DoctypeRegistry.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ElementDef.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Encoder.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityLookup.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityLookup/entities.ser
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/EntityParser.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ErrorCollector.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/ErrorStruct.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Exception.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter/ExtractStyleBlocks.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Filter/YouTube.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Generator.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLDefinition.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Bdo.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/CommonAttributes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Edit.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Forms.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Hypertext.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Iframe.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Image.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Legacy.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/List.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Name.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Nofollow.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Object.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Presentation.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Proprietary.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Ruby.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeEmbed.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeObject.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/SafeScripting.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Scripting.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/StyleAttribute.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tables.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Target.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetBlank.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetNoopener.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/TargetNoreferrer.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Text.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Name.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Proprietary.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Strict.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/Transitional.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/XHTML.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModule/XMLCommonAttributes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/HTMLModuleManager.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/IDAccumulator.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/AutoParagraph.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/DisplayLinkURI.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/Linkify.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/PurifierLinkify.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/RemoveEmpty.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Injector/SafeObject.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Language.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Language/messages/en.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/LanguageFactory.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Length.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/DOMLex.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/DirectLex.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Lexer/PH5P.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Comment.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Element.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Node/Text.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PercentEncoder.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/CSSDefinition.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.css
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.js
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/ConfigForm.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Printer/HTMLDefinition.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PropertyList.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/PropertyListIterator.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Queue.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/Composite.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/Core.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/FixNesting.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/MakeWellFormed.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/RemoveForeignElements.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Strategy/ValidateAttributes.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/StringHash.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/StringHashParser.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform/Font.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TagTransform/Simple.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Comment.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Empty.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/End.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Start.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Tag.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Token/Text.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/TokenFactory.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URI.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIDefinition.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableExternal.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableExternalResources.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/DisableResources.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/HostBlacklist.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/MakeAbsolute.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/Munge.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIFilter/SafeIframe.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIParser.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/data.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/file.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/ftp.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/http.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/https.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/mailto.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/news.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/nntp.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URIScheme/tel.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/URISchemeRegistry.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/UnitConverter.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser/Flexible.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParser/Native.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/VarParserException.php
CloudArcade/cloudarcade/cloudarcade/vendor/HTMLPurifier/HTMLPurifier/Zipper.php
CloudArcade/cloudarcade/cloudarcade/vendor/MobileDetect/MobileDetect.php
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/css/bootstrap.min.css
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/css/bootstrap.min.css.map
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.bundle.min.js
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.min.js
CloudArcade/cloudarcade/cloudarcade/vendor/bootstrap5/js/bootstrap.min.js.map
CloudArcade/cloudarcade/read-me.txt
CloudArcade/cloudarcade/unpack.php
CloudArcade/documentation/documentation.html
CloudArcade/documentation/setup.html |