From fcf92829e86c0fef56051a43462f9191efdb400e Mon Sep 17 00:00:00 2001 From: VirtuBrick <139835327+VirtuBrick@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:59:13 -0500 Subject: [PATCH] Initial commit --- .gitignore | 10 + README.md | 100 + app/__init__.py | 415 ++ app/enums/AssetType.py | 70 + app/enums/BanType.py | 10 + app/enums/ChatStyle.py | 6 + app/enums/CryptomusPaymentStatus.py | 17 + app/enums/GiftcardType.py | 8 + app/enums/LimitedItemTransferMethod.py | 7 + app/enums/MembershipType.py | 7 + app/enums/PlaceRigChoice.py | 6 + app/enums/PlaceYear.py | 17 + app/enums/TradeStatus.py | 8 + app/enums/TransactionType.py | 9 + app/extensions.py | 708 +++ app/files/2012Studio.lua | 0 app/files/2014Gameserver.lua | 367 ++ app/files/2014Join.lua | 331 ++ app/files/2016Gameserver.lua | 213 + app/files/AnimationThumbnail.png | Bin 0 -> 44652 bytes app/files/AudioThumbnail.png | Bin 0 -> 42139 bytes app/files/Baseplate.rbxlx | 415 ++ app/files/CoreGui/107893730 | 1107 +++++ app/files/CoreGui/152908679 | 264 ++ app/files/CoreGui/153556783 | 564 +++ app/files/CoreGui/153556822 | 247 ++ app/files/CoreGui/157877000 | 1038 +++++ app/files/CoreGui/158948138 | 175 + app/files/CoreGui/35914081 | 290 ++ app/files/CoreGui/35914620 | 70 + app/files/CoreGui/36040464 | 35 + app/files/CoreGui/36040483 | 36 + app/files/CoreGui/36040495 | 36 + app/files/CoreGui/36051740 | 707 +++ app/files/CoreGui/36868950 | 109 + app/files/CoreGui/37801172 | 115 + app/files/CoreGui/37801173 | 74 + app/files/CoreGui/39250920 | 560 +++ app/files/CoreGui/45284430 | 3844 +++++++++++++++++ app/files/CoreGui/45374389 | 23 + app/files/CoreGui/46295863 | 2153 +++++++++ app/files/CoreGui/46295864 | 2098 +++++++++ app/files/CoreGui/48488235 | 3074 +++++++++++++ app/files/CoreGui/48488236 | 2425 +++++++++++ app/files/CoreGui/48488398 | 306 ++ app/files/CoreGui/48488451 | 72 + app/files/CoreGui/53878047 | 874 ++++ app/files/CoreGui/53878048 | 790 ++++ app/files/CoreGui/53878053 | 968 +++++ app/files/CoreGui/53878057 | 1098 +++++ app/files/CoreGui/53878058 | 883 ++++ app/files/CoreGui/59002209 | 1 + app/files/CoreGui/59431535 | 204 + app/files/CoreGui/60595411 | 1115 +++++ app/files/CoreGui/60595695 | 26 + app/files/CoreGui/60595696 | 26 + app/files/CoreGui/64164692 | 146 + app/files/CoreGui/73157242 | 2207 ++++++++++ app/files/CoreGui/89449008 | 876 ++++ app/files/CoreGui/89449009 | 842 ++++ app/files/CoreGui/89449093 | 443 ++ app/files/CoreGui/89449094 | 360 ++ app/files/CoreGui/97188756 | 1376 ++++++ app/files/CoreGui/97188757 | 1211 ++++++ app/files/LuaThumbnail.png | Bin 0 -> 56304 bytes app/files/NoRender.png | Bin 0 -> 4621 bytes app/files/Old2014Join.lua | 418 ++ app/files/Pants.rbxmx | 13 + app/files/Shirt.rbxmx | 13 + app/files/ShutdownServer.lua | 37 + app/files/Studio.lua | 27 + app/files/TShirt.rbxmx | 13 + app/files/Visit.lua | 132 + app/models/admin_permissions.py | 16 + app/models/asset.py | 83 + app/models/asset_favorite.py | 13 + app/models/asset_moderation_link.py | 27 + app/models/asset_rap.py | 23 + app/models/asset_thumbnail.py | 36 + app/models/asset_version.py | 35 + app/models/asset_votes.py | 15 + app/models/cryptomus_invoice.py | 52 + app/models/exchange_offer.py | 54 + app/models/fflag_group.py | 35 + app/models/fflag_value.py | 29 + app/models/follow_relationship.py | 20 + app/models/friend_relationship.py | 16 + app/models/friend_request.py | 17 + app/models/game_session_log.py | 36 + app/models/gamepass_link.py | 24 + app/models/gameservers.py | 45 + app/models/giftcard_key.py | 31 + app/models/groups.py | 296 ++ app/models/invite_key.py | 25 + app/models/kofi_transaction.py | 41 + app/models/legacy_data_persistence.py | 31 + app/models/limited_item_transfers.py | 33 + app/models/linked_discord.py | 49 + app/models/login_records.py | 21 + app/models/messages.py | 33 + app/models/moderator_note.py | 36 + app/models/package_asset.py | 13 + app/models/past_usernames.py | 16 + app/models/place.py | 51 + app/models/place_badge.py | 48 + app/models/place_datastore.py | 34 + app/models/place_developer_product.py | 48 + app/models/place_icon.py | 22 + app/models/place_ordered_datastore.py | 33 + app/models/placeserver_players.py | 23 + app/models/placeservers.py | 52 + app/models/pointsservice.py | 15 + app/models/previously_played.py | 16 + app/models/product_receipt.py | 31 + app/models/universe.py | 56 + app/models/user.py | 25 + app/models/user_avatar.py | 43 + app/models/user_avatar_asset.py | 22 + app/models/user_ban.py | 40 + app/models/user_email.py | 19 + app/models/user_hwid_log.py | 18 + app/models/user_membership.py | 24 + app/models/user_thumbnail.py | 22 + app/models/user_trade_items.py | 17 + app/models/user_trades.py | 39 + app/models/user_transactions.py | 51 + app/models/userassets.py | 43 + app/models/usereconomy.py | 16 + app/pages/403.html | 12 + app/pages/404.html | 12 + app/pages/405.html | 12 + app/pages/500.html | 25 + app/pages/__layout__.html | 186 + app/pages/about.html | 7 + app/pages/admin/admin.py | 2780 ++++++++++++ app/pages/admin/assetcopier.html | 39 + app/pages/admin/assetmoderation.html | 119 + app/pages/admin/bundlecopier.html | 39 + app/pages/admin/createasset.html | 59 + app/pages/admin/creategiftcard.html | 67 + app/pages/admin/createuser.html | 43 + app/pages/admin/fflagsettings/index.html | 41 + app/pages/admin/fflagsettings/view.html | 84 + app/pages/admin/gameservers/create.html | 64 + app/pages/admin/gameservers/delete.html | 24 + app/pages/admin/gameservers/index.html | 47 + .../admin/gameservers/refresh_accesskey.html | 24 + app/pages/admin/gameservers/view.html | 84 + app/pages/admin/index.html | 41 + app/pages/admin/insertitemrelasepool.html | 101 + app/pages/admin/itemreleasepool.html | 59 + app/pages/admin/lottery/index.html | 64 + app/pages/admin/manageassets.html | 142 + app/pages/admin/moderateUGC.html | 112 + app/pages/admin/permissionsdefinition.py | 129 + app/pages/admin/updateassetfile.html | 42 + app/pages/admin/usermanage/ban.html | 86 + app/pages/admin/usermanage/banhistory.html | 69 + app/pages/admin/usermanage/gamesessions.html | 65 + app/pages/admin/usermanage/invitekeys.html | 74 + app/pages/admin/usermanage/loginhistory.html | 105 + .../admin/usermanage/manage-admin-perms.html | 208 + .../admin/usermanage/moderatornotes.html | 61 + app/pages/admin/usermanage/search.html | 82 + app/pages/admin/usermanage/transactions.html | 116 + app/pages/admin/usermanage/view.html | 191 + app/pages/admin/websitefeatures.html | 43 + app/pages/admin/websitefeaturesdefinition.py | 83 + app/pages/admin/websitewidemsg.html | 20 + app/pages/audiomigrator/audiomigrator.py | 104 + app/pages/audiomigrator/index.html | 54 + app/pages/avatar/avatar.html | 125 + app/pages/avatar/avatar.py | 239 + app/pages/catalog/asset.html | 184 + app/pages/catalog/badges.html | 53 + app/pages/catalog/catalog.py | 824 ++++ app/pages/catalog/catalogtypes.py | 76 + app/pages/catalog/index.html | 185 + app/pages/catalog/library.html | 186 + app/pages/catalog/resell.html | 65 + app/pages/clientpages/clientpages.py | 11 + app/pages/clientpages/screenshot.html | 17 + app/pages/clothingmigrator/index.html | 41 + app/pages/clothingmigrator/migrator.py | 61 + app/pages/cryptomus/dashboard.html | 74 + app/pages/cryptomus/view_payment.html | 63 + app/pages/currencyexchange/controller.py | 378 ++ app/pages/currencyexchange/create.html | 168 + app/pages/currencyexchange/index.html | 114 + app/pages/currencyexchange/view.html | 78 + app/pages/develop/develop.py | 2002 +++++++++ app/pages/develop/edit.html | 79 + app/pages/develop/games/access.html | 12 + app/pages/develop/games/manage-template.html | 66 + app/pages/develop/games/manage.html | 52 + app/pages/develop/games/upload-icon.html | 25 + app/pages/develop/games/upload-thumbnail.html | 25 + app/pages/develop/games/upload-version.html | 12 + app/pages/develop/games/version-history.html | 25 + app/pages/develop/subpages/games.html | 25 + app/pages/develop/subpages/image.html | 32 + app/pages/develop/subpages/pants.html | 32 + app/pages/develop/subpages/shirts.html | 32 + app/pages/develop/subpages/sound.html | 32 + app/pages/develop/subpages/tshirt.html | 31 + app/pages/develop/template.html | 54 + app/pages/develop/universes/access.html | 24 + app/pages/develop/universes/badges.html | 30 + app/pages/develop/universes/create-badge.html | 27 + .../develop/universes/create-gamepass.html | 27 + app/pages/develop/universes/create-place.html | 15 + .../develop/universes/create-product.html | 27 + .../develop/universes/developerproducts.html | 29 + app/pages/develop/universes/edit-badge.html | 35 + .../develop/universes/edit-gamepass.html | 53 + app/pages/develop/universes/edit-product.html | 53 + app/pages/develop/universes/gamepasses.html | 29 + .../develop/universes/manage-template.html | 64 + app/pages/develop/universes/manage.html | 21 + app/pages/develop/universes/places.html | 27 + app/pages/discourse/leaving-syntax.html | 24 + app/pages/discourse/sso-confirm.html | 35 + app/pages/downloads.html | 66 + app/pages/drivers.html | 17 + app/pages/games/games.py | 296 ++ app/pages/games/genre.html | 47 + app/pages/games/index.html | 203 + app/pages/games/view.html | 380 ++ app/pages/giftcardredeem/index.html | 47 + app/pages/giftcardredeem/redeem.py | 139 + .../groups/admin_subpage/create_role.html | 29 + app/pages/groups/admin_subpage/groupinfo.html | 42 + .../groups/admin_subpage/join_requests.html | 52 + app/pages/groups/admin_subpage/members.html | 116 + app/pages/groups/admin_subpage/payout.html | 42 + app/pages/groups/admin_subpage/roles.html | 198 + app/pages/groups/admin_subpage/settings.html | 60 + app/pages/groups/admin_template.html | 125 + app/pages/groups/create.html | 62 + app/pages/groups/groupspage.py | 1268 ++++++ app/pages/groups/search.html | 61 + app/pages/groups/view.html | 207 + app/pages/home/home.html | 96 + app/pages/home/home.py | 92 + app/pages/invitekeys/handler.py | 68 + app/pages/invitekeys/index.html | 80 + app/pages/login/login.html | 43 + app/pages/login/login.py | 477 ++ app/pages/login/reset_password.html | 57 + app/pages/login/send_reset.html | 43 + app/pages/login/totpvalidate.html | 32 + app/pages/membership/index.html | 80 + app/pages/membership/membership.py | 17 + app/pages/membership/payment_methods.html | 160 + app/pages/messages/index.html | 54 + app/pages/messages/messages.py | 148 + app/pages/messages/new.html | 43 + app/pages/messages/view.html | 42 + app/pages/notapproved/banpage.html | 36 + app/pages/notapproved/notapproved.py | 88 + app/pages/privacy.html | 43 + app/pages/profiles/followers.html | 64 + app/pages/profiles/following.html | 64 + app/pages/profiles/friends.html | 74 + app/pages/profiles/inventory.html | 183 + app/pages/profiles/profile.html | 254 ++ app/pages/profiles/profile.py | 536 +++ app/pages/profiles/requests.html | 82 + app/pages/settings/changeemail.html | 56 + app/pages/settings/changepassword.html | 52 + app/pages/settings/changeusername.html | 35 + app/pages/settings/emailverify_success.html | 21 + app/pages/settings/enableTOTP.html | 34 + app/pages/settings/settings.html | 52 + app/pages/settings/settings.py | 556 +++ app/pages/signup/signup.html | 45 + app/pages/signup/signup.py | 263 ++ app/pages/static.py | 28 + app/pages/studio/myPlaces.html | 94 + app/pages/studio/studiopages.py | 15 + app/pages/swaggerdocs.html | 19 + app/pages/terms.html | 52 + app/pages/trades/create.html | 133 + app/pages/trades/index.html | 65 + app/pages/trades/trades.py | 550 +++ app/pages/trades/view.html | 134 + app/pages/transactions/transactions.html | 102 + app/pages/transactions/transactions.py | 86 + app/pages/users/index.html | 70 + app/pages/users/users_page.py | 37 + app/routes/accountsettingsapi.py | 70 + app/routes/asset.py | 1147 +++++ app/routes/authentication.py | 216 + app/routes/avatarapi.py | 317 ++ app/routes/badgesapi.py | 343 ++ app/routes/bootstrapper.py | 7 + app/routes/clientinfo.py | 654 +++ app/routes/cryptomus_handler.py | 383 ++ app/routes/datastoreservice.py | 277 ++ app/routes/discord_internal.py | 294 ++ app/routes/discourse_sso.py | 96 + app/routes/fflagssettings.py | 68 + app/routes/friendapi.py | 311 ++ app/routes/gamejoin.py | 714 +++ app/routes/gamesapi.py | 504 +++ app/routes/gametransactions.py | 89 + app/routes/image.py | 652 +++ app/routes/inventoryapi.py | 181 + app/routes/jobreporthandler.py | 708 +++ app/routes/kofihandler.py | 124 + app/routes/legacydatapersistence.py | 125 + app/routes/luawebservice.py | 560 +++ app/routes/marketplace.py | 408 ++ app/routes/mobile.py | 28 + app/routes/pointsservice.py | 52 + app/routes/presence.py | 17 + app/routes/presenceapi.py | 105 + app/routes/prometheus.py | 100 + app/routes/publicapi.py | 525 +++ app/routes/rate.py | 131 + app/routes/rbxapi.py | 186 + app/routes/rolimons.py | 307 ++ app/routes/sets.py | 51 + app/routes/teleportservice.py | 139 + app/routes/thumbnailer.py | 518 +++ app/routes/usersapi.py | 219 + app/services/economy.py | 270 ++ app/services/gameserver_comm.py | 117 + app/services/groups.py | 690 +++ app/services/invitekeys.py | 70 + app/services/proxydetection.py | 82 + app/services/user_relationships/followings.py | 216 + app/services/user_relationships/friends.py | 200 + app/shell_commands.py | 475 ++ app/static/avatarrules.json | 553 +++ app/static/css/admin.css | 48 + app/static/css/avatar.css | 100 + app/static/css/bootstrapv3.min.css | 6 + app/static/css/catalog.css | 11 + app/static/css/develop.css | 15 + app/static/css/gameview.css | 135 + app/static/css/global.css | 423 ++ app/static/css/home.css | 37 + app/static/css/icons.css | 1549 +++++++ app/static/css/login.css | 77 + app/static/css/message.css | 11 + app/static/css/profile.css | 52 + app/static/css/settings.css | 18 + app/static/css/signup.css | 81 + app/static/css/terms.css | 15 + app/static/img/BC.png | Bin 0 -> 1166 bytes app/static/img/ChristmasHat.png | Bin 0 -> 3424 bytes app/static/img/ContentDeleted.png | Bin 0 -> 4475 bytes app/static/img/LoginImage.png | Bin 0 -> 409080 bytes app/static/img/LoginImage2.png | Bin 0 -> 435235 bytes app/static/img/LuaThumbnail.png | Bin 0 -> 56304 bytes app/static/img/NBC.png | Bin 0 -> 1023 bytes app/static/img/OBC.png | Bin 0 -> 1155 bytes app/static/img/SignupImage.png | Bin 0 -> 717070 bytes app/static/img/Style/bc.svg | 204 + app/static/img/Style/icon_labels.svg | 300 ++ app/static/img/SyntaxLogo.png | Bin 0 -> 43551 bytes app/static/img/TBC.png | Bin 0 -> 1207 bytes app/static/img/TemplatePants.png | Bin 0 -> 64099 bytes app/static/img/TemplateShirt.png | Bin 0 -> 66301 bytes app/static/img/branded.svg | 297 ++ app/static/img/games.svg | 482 +++ app/static/img/linux-penguin.svg | 7 + app/static/img/placeholder.png | Bin 0 -> 6289 bytes app/static/img/syntax.ico | Bin 0 -> 117136 bytes app/static/img/thumbs.svg | 13 + app/static/img/thumbsup.png | Bin 0 -> 4447 bytes app/static/js/AvatarEditor.js | 467 ++ app/static/js/assetrate.js | 216 + app/static/js/bootstrapv3.min.js | 7 + app/static/js/catalog.js | 153 + app/static/js/groupMembers.js | 110 + app/static/js/newTrade.js | 369 ++ app/static/js/presence.js | 5 + app/static/svg/navigation.svg | 484 +++ app/static/swagger/favicon-16x16.png | Bin 0 -> 665 bytes app/static/swagger/favicon-32x32.png | Bin 0 -> 628 bytes app/static/swagger/index.css | 16 + app/static/swagger/oauth2-redirect.html | 79 + app/static/swagger/swagger-docs.json | 1608 +++++++ app/static/swagger/swagger-initializer.js | 20 + app/static/swagger/swagger-ui-bundle.js | 3 + app/static/swagger/swagger-ui-bundle.js.map | 1 + .../swagger/swagger-ui-es-bundle-core.js | 3 + .../swagger/swagger-ui-es-bundle-core.js.map | 1 + app/static/swagger/swagger-ui-es-bundle.js | 3 + .../swagger/swagger-ui-es-bundle.js.map | 1 + .../swagger/swagger-ui-standalone-preset.js | 3 + .../swagger-ui-standalone-preset.js.map | 1 + app/static/swagger/swagger-ui.css | 3 + app/static/swagger/swagger-ui.css.map | 1 + app/static/swagger/swagger-ui.js | 2 + app/static/swagger/swagger-ui.js.map | 1 + app/util/RBXMesh.py | 991 +++++ app/util/assetvalidation.py | 146 + app/util/assetversion.py | 62 + app/util/auth.py | 273 ++ app/util/badwords.py | 83 + app/util/discord.py | 122 + app/util/friends.py | 80 + app/util/membership.py | 167 + app/util/placeinfo.py | 74 + app/util/redislock.py | 24 + app/util/s3helper.py | 175 + app/util/signscript.py | 57 + app/util/textfilter.py | 33 + app/util/transactions.py | 87 + app/util/turnstile.py | 25 + app/util/websiteFeatures.py | 18 + config.example.py | 92 + debug.sh | 2 + download_cache/KEEPME | 0 logs/KEEPME | 0 requirements.txt | 22 + start.sh | 2 + tools/generate_new_keys.py | 47 + 421 files changed, 82302 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/__init__.py create mode 100644 app/enums/AssetType.py create mode 100644 app/enums/BanType.py create mode 100644 app/enums/ChatStyle.py create mode 100644 app/enums/CryptomusPaymentStatus.py create mode 100644 app/enums/GiftcardType.py create mode 100644 app/enums/LimitedItemTransferMethod.py create mode 100644 app/enums/MembershipType.py create mode 100644 app/enums/PlaceRigChoice.py create mode 100644 app/enums/PlaceYear.py create mode 100644 app/enums/TradeStatus.py create mode 100644 app/enums/TransactionType.py create mode 100644 app/extensions.py create mode 100644 app/files/2012Studio.lua create mode 100644 app/files/2014Gameserver.lua create mode 100644 app/files/2014Join.lua create mode 100644 app/files/2016Gameserver.lua create mode 100644 app/files/AnimationThumbnail.png create mode 100644 app/files/AudioThumbnail.png create mode 100644 app/files/Baseplate.rbxlx create mode 100644 app/files/CoreGui/107893730 create mode 100644 app/files/CoreGui/152908679 create mode 100644 app/files/CoreGui/153556783 create mode 100644 app/files/CoreGui/153556822 create mode 100644 app/files/CoreGui/157877000 create mode 100644 app/files/CoreGui/158948138 create mode 100644 app/files/CoreGui/35914081 create mode 100644 app/files/CoreGui/35914620 create mode 100644 app/files/CoreGui/36040464 create mode 100644 app/files/CoreGui/36040483 create mode 100644 app/files/CoreGui/36040495 create mode 100644 app/files/CoreGui/36051740 create mode 100644 app/files/CoreGui/36868950 create mode 100644 app/files/CoreGui/37801172 create mode 100644 app/files/CoreGui/37801173 create mode 100644 app/files/CoreGui/39250920 create mode 100644 app/files/CoreGui/45284430 create mode 100644 app/files/CoreGui/45374389 create mode 100644 app/files/CoreGui/46295863 create mode 100644 app/files/CoreGui/46295864 create mode 100644 app/files/CoreGui/48488235 create mode 100644 app/files/CoreGui/48488236 create mode 100644 app/files/CoreGui/48488398 create mode 100644 app/files/CoreGui/48488451 create mode 100644 app/files/CoreGui/53878047 create mode 100644 app/files/CoreGui/53878048 create mode 100644 app/files/CoreGui/53878053 create mode 100644 app/files/CoreGui/53878057 create mode 100644 app/files/CoreGui/53878058 create mode 100644 app/files/CoreGui/59002209 create mode 100644 app/files/CoreGui/59431535 create mode 100644 app/files/CoreGui/60595411 create mode 100644 app/files/CoreGui/60595695 create mode 100644 app/files/CoreGui/60595696 create mode 100644 app/files/CoreGui/64164692 create mode 100644 app/files/CoreGui/73157242 create mode 100644 app/files/CoreGui/89449008 create mode 100644 app/files/CoreGui/89449009 create mode 100644 app/files/CoreGui/89449093 create mode 100644 app/files/CoreGui/89449094 create mode 100644 app/files/CoreGui/97188756 create mode 100644 app/files/CoreGui/97188757 create mode 100644 app/files/LuaThumbnail.png create mode 100644 app/files/NoRender.png create mode 100644 app/files/Old2014Join.lua create mode 100644 app/files/Pants.rbxmx create mode 100644 app/files/Shirt.rbxmx create mode 100644 app/files/ShutdownServer.lua create mode 100644 app/files/Studio.lua create mode 100644 app/files/TShirt.rbxmx create mode 100644 app/files/Visit.lua create mode 100644 app/models/admin_permissions.py create mode 100644 app/models/asset.py create mode 100644 app/models/asset_favorite.py create mode 100644 app/models/asset_moderation_link.py create mode 100644 app/models/asset_rap.py create mode 100644 app/models/asset_thumbnail.py create mode 100644 app/models/asset_version.py create mode 100644 app/models/asset_votes.py create mode 100644 app/models/cryptomus_invoice.py create mode 100644 app/models/exchange_offer.py create mode 100644 app/models/fflag_group.py create mode 100644 app/models/fflag_value.py create mode 100644 app/models/follow_relationship.py create mode 100644 app/models/friend_relationship.py create mode 100644 app/models/friend_request.py create mode 100644 app/models/game_session_log.py create mode 100644 app/models/gamepass_link.py create mode 100644 app/models/gameservers.py create mode 100644 app/models/giftcard_key.py create mode 100644 app/models/groups.py create mode 100644 app/models/invite_key.py create mode 100644 app/models/kofi_transaction.py create mode 100644 app/models/legacy_data_persistence.py create mode 100644 app/models/limited_item_transfers.py create mode 100644 app/models/linked_discord.py create mode 100644 app/models/login_records.py create mode 100644 app/models/messages.py create mode 100644 app/models/moderator_note.py create mode 100644 app/models/package_asset.py create mode 100644 app/models/past_usernames.py create mode 100644 app/models/place.py create mode 100644 app/models/place_badge.py create mode 100644 app/models/place_datastore.py create mode 100644 app/models/place_developer_product.py create mode 100644 app/models/place_icon.py create mode 100644 app/models/place_ordered_datastore.py create mode 100644 app/models/placeserver_players.py create mode 100644 app/models/placeservers.py create mode 100644 app/models/pointsservice.py create mode 100644 app/models/previously_played.py create mode 100644 app/models/product_receipt.py create mode 100644 app/models/universe.py create mode 100644 app/models/user.py create mode 100644 app/models/user_avatar.py create mode 100644 app/models/user_avatar_asset.py create mode 100644 app/models/user_ban.py create mode 100644 app/models/user_email.py create mode 100644 app/models/user_hwid_log.py create mode 100644 app/models/user_membership.py create mode 100644 app/models/user_thumbnail.py create mode 100644 app/models/user_trade_items.py create mode 100644 app/models/user_trades.py create mode 100644 app/models/user_transactions.py create mode 100644 app/models/userassets.py create mode 100644 app/models/usereconomy.py create mode 100644 app/pages/403.html create mode 100644 app/pages/404.html create mode 100644 app/pages/405.html create mode 100644 app/pages/500.html create mode 100644 app/pages/__layout__.html create mode 100644 app/pages/about.html create mode 100644 app/pages/admin/admin.py create mode 100644 app/pages/admin/assetcopier.html create mode 100644 app/pages/admin/assetmoderation.html create mode 100644 app/pages/admin/bundlecopier.html create mode 100644 app/pages/admin/createasset.html create mode 100644 app/pages/admin/creategiftcard.html create mode 100644 app/pages/admin/createuser.html create mode 100644 app/pages/admin/fflagsettings/index.html create mode 100644 app/pages/admin/fflagsettings/view.html create mode 100644 app/pages/admin/gameservers/create.html create mode 100644 app/pages/admin/gameservers/delete.html create mode 100644 app/pages/admin/gameservers/index.html create mode 100644 app/pages/admin/gameservers/refresh_accesskey.html create mode 100644 app/pages/admin/gameservers/view.html create mode 100644 app/pages/admin/index.html create mode 100644 app/pages/admin/insertitemrelasepool.html create mode 100644 app/pages/admin/itemreleasepool.html create mode 100644 app/pages/admin/lottery/index.html create mode 100644 app/pages/admin/manageassets.html create mode 100644 app/pages/admin/moderateUGC.html create mode 100644 app/pages/admin/permissionsdefinition.py create mode 100644 app/pages/admin/updateassetfile.html create mode 100644 app/pages/admin/usermanage/ban.html create mode 100644 app/pages/admin/usermanage/banhistory.html create mode 100644 app/pages/admin/usermanage/gamesessions.html create mode 100644 app/pages/admin/usermanage/invitekeys.html create mode 100644 app/pages/admin/usermanage/loginhistory.html create mode 100644 app/pages/admin/usermanage/manage-admin-perms.html create mode 100644 app/pages/admin/usermanage/moderatornotes.html create mode 100644 app/pages/admin/usermanage/search.html create mode 100644 app/pages/admin/usermanage/transactions.html create mode 100644 app/pages/admin/usermanage/view.html create mode 100644 app/pages/admin/websitefeatures.html create mode 100644 app/pages/admin/websitefeaturesdefinition.py create mode 100644 app/pages/admin/websitewidemsg.html create mode 100644 app/pages/audiomigrator/audiomigrator.py create mode 100644 app/pages/audiomigrator/index.html create mode 100644 app/pages/avatar/avatar.html create mode 100644 app/pages/avatar/avatar.py create mode 100644 app/pages/catalog/asset.html create mode 100644 app/pages/catalog/badges.html create mode 100644 app/pages/catalog/catalog.py create mode 100644 app/pages/catalog/catalogtypes.py create mode 100644 app/pages/catalog/index.html create mode 100644 app/pages/catalog/library.html create mode 100644 app/pages/catalog/resell.html create mode 100644 app/pages/clientpages/clientpages.py create mode 100644 app/pages/clientpages/screenshot.html create mode 100644 app/pages/clothingmigrator/index.html create mode 100644 app/pages/clothingmigrator/migrator.py create mode 100644 app/pages/cryptomus/dashboard.html create mode 100644 app/pages/cryptomus/view_payment.html create mode 100644 app/pages/currencyexchange/controller.py create mode 100644 app/pages/currencyexchange/create.html create mode 100644 app/pages/currencyexchange/index.html create mode 100644 app/pages/currencyexchange/view.html create mode 100644 app/pages/develop/develop.py create mode 100644 app/pages/develop/edit.html create mode 100644 app/pages/develop/games/access.html create mode 100644 app/pages/develop/games/manage-template.html create mode 100644 app/pages/develop/games/manage.html create mode 100644 app/pages/develop/games/upload-icon.html create mode 100644 app/pages/develop/games/upload-thumbnail.html create mode 100644 app/pages/develop/games/upload-version.html create mode 100644 app/pages/develop/games/version-history.html create mode 100644 app/pages/develop/subpages/games.html create mode 100644 app/pages/develop/subpages/image.html create mode 100644 app/pages/develop/subpages/pants.html create mode 100644 app/pages/develop/subpages/shirts.html create mode 100644 app/pages/develop/subpages/sound.html create mode 100644 app/pages/develop/subpages/tshirt.html create mode 100644 app/pages/develop/template.html create mode 100644 app/pages/develop/universes/access.html create mode 100644 app/pages/develop/universes/badges.html create mode 100644 app/pages/develop/universes/create-badge.html create mode 100644 app/pages/develop/universes/create-gamepass.html create mode 100644 app/pages/develop/universes/create-place.html create mode 100644 app/pages/develop/universes/create-product.html create mode 100644 app/pages/develop/universes/developerproducts.html create mode 100644 app/pages/develop/universes/edit-badge.html create mode 100644 app/pages/develop/universes/edit-gamepass.html create mode 100644 app/pages/develop/universes/edit-product.html create mode 100644 app/pages/develop/universes/gamepasses.html create mode 100644 app/pages/develop/universes/manage-template.html create mode 100644 app/pages/develop/universes/manage.html create mode 100644 app/pages/develop/universes/places.html create mode 100644 app/pages/discourse/leaving-syntax.html create mode 100644 app/pages/discourse/sso-confirm.html create mode 100644 app/pages/downloads.html create mode 100644 app/pages/drivers.html create mode 100644 app/pages/games/games.py create mode 100644 app/pages/games/genre.html create mode 100644 app/pages/games/index.html create mode 100644 app/pages/games/view.html create mode 100644 app/pages/giftcardredeem/index.html create mode 100644 app/pages/giftcardredeem/redeem.py create mode 100644 app/pages/groups/admin_subpage/create_role.html create mode 100644 app/pages/groups/admin_subpage/groupinfo.html create mode 100644 app/pages/groups/admin_subpage/join_requests.html create mode 100644 app/pages/groups/admin_subpage/members.html create mode 100644 app/pages/groups/admin_subpage/payout.html create mode 100644 app/pages/groups/admin_subpage/roles.html create mode 100644 app/pages/groups/admin_subpage/settings.html create mode 100644 app/pages/groups/admin_template.html create mode 100644 app/pages/groups/create.html create mode 100644 app/pages/groups/groupspage.py create mode 100644 app/pages/groups/search.html create mode 100644 app/pages/groups/view.html create mode 100644 app/pages/home/home.html create mode 100644 app/pages/home/home.py create mode 100644 app/pages/invitekeys/handler.py create mode 100644 app/pages/invitekeys/index.html create mode 100644 app/pages/login/login.html create mode 100644 app/pages/login/login.py create mode 100644 app/pages/login/reset_password.html create mode 100644 app/pages/login/send_reset.html create mode 100644 app/pages/login/totpvalidate.html create mode 100644 app/pages/membership/index.html create mode 100644 app/pages/membership/membership.py create mode 100644 app/pages/membership/payment_methods.html create mode 100644 app/pages/messages/index.html create mode 100644 app/pages/messages/messages.py create mode 100644 app/pages/messages/new.html create mode 100644 app/pages/messages/view.html create mode 100644 app/pages/notapproved/banpage.html create mode 100644 app/pages/notapproved/notapproved.py create mode 100644 app/pages/privacy.html create mode 100644 app/pages/profiles/followers.html create mode 100644 app/pages/profiles/following.html create mode 100644 app/pages/profiles/friends.html create mode 100644 app/pages/profiles/inventory.html create mode 100644 app/pages/profiles/profile.html create mode 100644 app/pages/profiles/profile.py create mode 100644 app/pages/profiles/requests.html create mode 100644 app/pages/settings/changeemail.html create mode 100644 app/pages/settings/changepassword.html create mode 100644 app/pages/settings/changeusername.html create mode 100644 app/pages/settings/emailverify_success.html create mode 100644 app/pages/settings/enableTOTP.html create mode 100644 app/pages/settings/settings.html create mode 100644 app/pages/settings/settings.py create mode 100644 app/pages/signup/signup.html create mode 100644 app/pages/signup/signup.py create mode 100644 app/pages/static.py create mode 100644 app/pages/studio/myPlaces.html create mode 100644 app/pages/studio/studiopages.py create mode 100644 app/pages/swaggerdocs.html create mode 100644 app/pages/terms.html create mode 100644 app/pages/trades/create.html create mode 100644 app/pages/trades/index.html create mode 100644 app/pages/trades/trades.py create mode 100644 app/pages/trades/view.html create mode 100644 app/pages/transactions/transactions.html create mode 100644 app/pages/transactions/transactions.py create mode 100644 app/pages/users/index.html create mode 100644 app/pages/users/users_page.py create mode 100644 app/routes/accountsettingsapi.py create mode 100644 app/routes/asset.py create mode 100644 app/routes/authentication.py create mode 100644 app/routes/avatarapi.py create mode 100644 app/routes/badgesapi.py create mode 100644 app/routes/bootstrapper.py create mode 100644 app/routes/clientinfo.py create mode 100644 app/routes/cryptomus_handler.py create mode 100644 app/routes/datastoreservice.py create mode 100644 app/routes/discord_internal.py create mode 100644 app/routes/discourse_sso.py create mode 100644 app/routes/fflagssettings.py create mode 100644 app/routes/friendapi.py create mode 100644 app/routes/gamejoin.py create mode 100644 app/routes/gamesapi.py create mode 100644 app/routes/gametransactions.py create mode 100644 app/routes/image.py create mode 100644 app/routes/inventoryapi.py create mode 100644 app/routes/jobreporthandler.py create mode 100644 app/routes/kofihandler.py create mode 100644 app/routes/legacydatapersistence.py create mode 100644 app/routes/luawebservice.py create mode 100644 app/routes/marketplace.py create mode 100644 app/routes/mobile.py create mode 100644 app/routes/pointsservice.py create mode 100644 app/routes/presence.py create mode 100644 app/routes/presenceapi.py create mode 100644 app/routes/prometheus.py create mode 100644 app/routes/publicapi.py create mode 100644 app/routes/rate.py create mode 100644 app/routes/rbxapi.py create mode 100644 app/routes/rolimons.py create mode 100644 app/routes/sets.py create mode 100644 app/routes/teleportservice.py create mode 100644 app/routes/thumbnailer.py create mode 100644 app/routes/usersapi.py create mode 100644 app/services/economy.py create mode 100644 app/services/gameserver_comm.py create mode 100644 app/services/groups.py create mode 100644 app/services/invitekeys.py create mode 100644 app/services/proxydetection.py create mode 100644 app/services/user_relationships/followings.py create mode 100644 app/services/user_relationships/friends.py create mode 100644 app/shell_commands.py create mode 100644 app/static/avatarrules.json create mode 100644 app/static/css/admin.css create mode 100644 app/static/css/avatar.css create mode 100644 app/static/css/bootstrapv3.min.css create mode 100644 app/static/css/catalog.css create mode 100644 app/static/css/develop.css create mode 100644 app/static/css/gameview.css create mode 100644 app/static/css/global.css create mode 100644 app/static/css/home.css create mode 100644 app/static/css/icons.css create mode 100644 app/static/css/login.css create mode 100644 app/static/css/message.css create mode 100644 app/static/css/profile.css create mode 100644 app/static/css/settings.css create mode 100644 app/static/css/signup.css create mode 100644 app/static/css/terms.css create mode 100644 app/static/img/BC.png create mode 100644 app/static/img/ChristmasHat.png create mode 100644 app/static/img/ContentDeleted.png create mode 100644 app/static/img/LoginImage.png create mode 100644 app/static/img/LoginImage2.png create mode 100644 app/static/img/LuaThumbnail.png create mode 100644 app/static/img/NBC.png create mode 100644 app/static/img/OBC.png create mode 100644 app/static/img/SignupImage.png create mode 100644 app/static/img/Style/bc.svg create mode 100644 app/static/img/Style/icon_labels.svg create mode 100644 app/static/img/SyntaxLogo.png create mode 100644 app/static/img/TBC.png create mode 100644 app/static/img/TemplatePants.png create mode 100644 app/static/img/TemplateShirt.png create mode 100644 app/static/img/branded.svg create mode 100644 app/static/img/games.svg create mode 100644 app/static/img/linux-penguin.svg create mode 100644 app/static/img/placeholder.png create mode 100644 app/static/img/syntax.ico create mode 100644 app/static/img/thumbs.svg create mode 100644 app/static/img/thumbsup.png create mode 100644 app/static/js/AvatarEditor.js create mode 100644 app/static/js/assetrate.js create mode 100644 app/static/js/bootstrapv3.min.js create mode 100644 app/static/js/catalog.js create mode 100644 app/static/js/groupMembers.js create mode 100644 app/static/js/newTrade.js create mode 100644 app/static/js/presence.js create mode 100644 app/static/svg/navigation.svg create mode 100644 app/static/swagger/favicon-16x16.png create mode 100644 app/static/swagger/favicon-32x32.png create mode 100644 app/static/swagger/index.css create mode 100644 app/static/swagger/oauth2-redirect.html create mode 100644 app/static/swagger/swagger-docs.json create mode 100644 app/static/swagger/swagger-initializer.js create mode 100644 app/static/swagger/swagger-ui-bundle.js create mode 100644 app/static/swagger/swagger-ui-bundle.js.map create mode 100644 app/static/swagger/swagger-ui-es-bundle-core.js create mode 100644 app/static/swagger/swagger-ui-es-bundle-core.js.map create mode 100644 app/static/swagger/swagger-ui-es-bundle.js create mode 100644 app/static/swagger/swagger-ui-es-bundle.js.map create mode 100644 app/static/swagger/swagger-ui-standalone-preset.js create mode 100644 app/static/swagger/swagger-ui-standalone-preset.js.map create mode 100644 app/static/swagger/swagger-ui.css create mode 100644 app/static/swagger/swagger-ui.css.map create mode 100644 app/static/swagger/swagger-ui.js create mode 100644 app/static/swagger/swagger-ui.js.map create mode 100644 app/util/RBXMesh.py create mode 100644 app/util/assetvalidation.py create mode 100644 app/util/assetversion.py create mode 100644 app/util/auth.py create mode 100644 app/util/badwords.py create mode 100644 app/util/discord.py create mode 100644 app/util/friends.py create mode 100644 app/util/membership.py create mode 100644 app/util/placeinfo.py create mode 100644 app/util/redislock.py create mode 100644 app/util/s3helper.py create mode 100644 app/util/signscript.py create mode 100644 app/util/textfilter.py create mode 100644 app/util/transactions.py create mode 100644 app/util/turnstile.py create mode 100644 app/util/websiteFeatures.py create mode 100644 config.example.py create mode 100644 debug.sh create mode 100644 download_cache/KEEPME create mode 100644 logs/KEEPME create mode 100644 requirements.txt create mode 100644 start.sh create mode 100644 tools/generate_new_keys.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5c3dafe --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +config.py +__pycache__/ +assets/ +proxies.txt +*.pem +logs/*.log* +download_cache/* +*.key +*.crt +!download_cache/KEEPME \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f56b37b --- /dev/null +++ b/README.md @@ -0,0 +1,100 @@ +# Syntax Backend +**Last Updated: 20/2/2024** + +## What you need +### Requirements + - Linux Server ( For Production environment ) + - PostgreSQL Server + - Redis Server + - NGINX + - Cloudflare Account + - Domain with Cloudflare protection + - Python 3.12+ + - FFmpeg + - Gunicorn + +> Note: These are the bare minimum needed for Syntax Backend to run, please do not attempt to host a publicly accessible version of Syntax if you do not know what you are doing + +### Optional Services + - Syntax Gameserver running on Windows Server ( Needed for rendering and games ) + - Syntax Discord Bot + - Ko-Fi ( Please modify code if you are not going to use this ) + - Cryptomus + - MailJet ( Email Vericiation, modification to the code is needed as email templates are not included ) + - HTTP Proxies for faster asset migration ( [webshare.io](https://webshare.io/) is recommended ) + - Amazon S3 Bucket ( **USE_LOCAL_STORAGE** must be enabled if you are not planning to use a S3 Bucket ) + +## Configuration +Copy `config.example.py` and name it as `config.py` then place it in the same directory as this readme file + +1. **FLASK_SESSION_KEY** - Used for salting passwords and 2FA Secret Generation, please change to a random long string and never change it ever again! +~~2. **AuthorizationKey** - Added for debugging and bypassing ratelimits, please also change to a random long string~~ Removed from codebase +3. **SQLALCHEMY_DATABASE_URI** - URI for connecting to the postgres database, refer to [Documentation](https://flask-sqlalchemy.palletsprojects.com/en/2.x/config/) for creating a database URI +4. **FLASK_LIMITED_STORAGE_URI** - Redis Server URI, can leave as default if your redis server is hosted locally and does not require authorization +5. **BaseDomain** - Change to your domain *(eg. roblox.com)*, please do not host on a subdomain as it is not supported! +6. **CloudflareTurnstileSiteKey** - Please setup turnstile on the domain you are hosting and then grab the turnstile site key from there +7. **CloudflareTurnstileSecretKey** - Read above +8. **DISCORD_CLIENT_ID** - Go to the Discord Developer Portal and go to the Discord Application you are going to use, then place its ClientID here +9. **DiscordBotToken** - Use your Discord Bot Token +10. **DISCORD_CLIENT_SECRET** - Discord Application Client Secret +11. **DISCORD_BOT_AUTHTOKEN** - Authorization Token for Syntax Discord Bot, use random long string +12. **DISCORD_BOT_AUTHORISED_IPS** - List of IPs which are allowed to access Discord Bot internal APIs +13. **DISCORD_ADMIN_LOGS_WEBHOOK** - Discord Webhook for logging Moderation Actions +14. **MAILJET** - You will have to modify the code and the config for this as your email template will be different +15. **KOFI_VERIFICATION_TOKEN** - Used for verifying requests from Ko-Fi to automate donations processing, please change to a random long string if you do not plan on using this. If you do you can find the verification token in your Ko-Fi API Panel. +16. **VERIFIED_EMAIL_REWARD_ASSET** - The AssetId the user is rewarded with once they verify their email, you can change this after setting up everything +17. **ASSETMIGRATOR_ROBLOSECURITY** - Used for private audio migration +18. **ASSETMIGRATOR_USE_PROXIES** - If you want to use proxies for Asset Migration ( Which you should as it speeds up everything ) +19. **ASSETMIGRATOR_PROXY_LIST_LOCATION** - The path to the file which contains the proxies +20. **RSA_PRIVATE_KEY_PATH** - The path to the private key, expects a 1024 Bit RSA private key used for signing JoinScripts and everyting else **This is required!!** +21. **RSA_PRIVATE_KEY_PATH2** - Same thing for above but expects a 2048 Bit RSA private key +22. **USE_LOCAL_STORAGE** - Uses local storage for storing and reading files, bypasses S3 and uses **AWS_S3_DOWNLOAD_CACHE_DIR** as its storage directory ( SHOULD ONLY BE USED IN A DEVELOPMENT ENVIRONMENT ) +23. **AWS_ACCESS_KEY** - Your AWS Access Key, please create one in your AWS IAM Manager +24. **AWS_SECRET_KEY** - The Secret Key for the access key +25. **AWS_S3_BUCKET_NAME** - The bucket name assets and images will be uploaded to +26. **AWS_S3_DOWNLOAD_CACHE_DIR** - Where files downloaded from S3 will be cached +27. **AWS_REGION_NAME** - The region of the bucket +28. **CDN_URL** - Change to where the CDN is +29. **DISCOURSE_SSO_ENABLED** - Allows authentication with Syntax for [Discourse](https://www.discourse.org/) Forums +30. **DISCOURSE_FORUM_BASEURL** - The location of the forum +31. **DISCOURSE_SECRET_KEY** - The secret key for signing +32. **ADMIN_GROUP_ID** - The GroupId where admins are in, used for showing the admin badges ingame +33. **ITEMRELEASER_DISCORD_WEBHOOK** - The Discord Webhook to use for announcing an item release +34. **ITEMRELEASER_ITEM_PING_ROLE_ID** - The Discord Role ID to ping for announcing an item release +35. **PROMETHEUS_ENABLED** - If the Prometheus endpoint is enabled +36. **PROMETHEUS_ALLOWED_IPS** - IPs which are allowed to query the Prometheus endpoint +37. **CHEATER_REPORTS_DISCORD_WEBHOOK** - The Discord webhook to use for cheater reports from RCCService +38. **ROLIMONS_API_ENABLED** - Used for Synmons +39. **ROLIMONS_API_KEY** - Used for Synmons +40. **GAMESERVER_COMM_PRIVATE_KEY_LOCATION** - The Private key location used for signing requests sent to gameservers +41. **CRYPTOMUS_PAYMENT_ENABLED** - If the cryptomus payment system is enabled +42. **CRYPTOMUS_MERCHANT_ID** - Your Cryptomus merchant ID +43. **CRYPTOMUS_API_KEY** - Your Cryptoumus API Key +44. **IPAPI_AUTH_KEY** - API Key for [IPAPI](https://ipapi.co/) used for VPN and proxy detection on signup + +## KeyPair Generation +The SYNTAX Backend requires some keys for it to sign and communicate with gameservers, run the script below to generate those keys. +``` +python tools/generate_new_keys.py +``` + +In the `tools` directory 6 new files should have been created, 2 key pairs are for joinscript signing which is needed by the Client and RCCService to authenticate and verify properly. +Another keypair is for signing requests to communicate with all gameservers, take the public key and place it in your gameserver directory. + +## First Time Setup + +First install all required dependencies by running `pip install -r requirements.txt` in this directory + +Next run the command `flask shell` in the same directory as this README.md file, then in the shell run `db.create_all()`. +This will automatically create all the tables needed in your PostgreSQL database. + +Next use type in the following command in your flask shell +``` +from app.shell_commands import create_admin_user +create_admin_user() +``` +This will create an admin user with all existing admin privileges + +Now we can finally start the website, please make sure you have [gunicorn](https://gunicorn.org/) installed on your Linux Machine, gunicorn does not support Windows Machines. To start run the shell script `./start.sh` which will start a webserver on port `3003`. Please make sure you have NGINX configured as a reverse proxy to proxy the website and also have configured Cloudflare to serve your website on the main and all subdomains. + +If you are running a Windows Machine and want to run in debug mode run `flask run --port 3006 --debug`, this will open the website on port 3006 diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..c675ecc --- /dev/null +++ b/app/__init__.py @@ -0,0 +1,415 @@ +import base64 +import redis +import sys +import os +import hashlib +import traceback +import string +import random +import re +import logging +from config import Config +from logging.handlers import TimedRotatingFileHandler +from flask import Flask, jsonify, render_template, session, redirect, url_for, request, make_response, Response +from datetime import datetime, timedelta +from urllib.parse import urlparse + +from app.models.user import User +from app.models.messages import Message +from app.models.user_trades import UserTrade +from app.models.friend_request import FriendRequest +from app.models.asset import Asset +from app.models.asset_version import AssetVersion +from app.models.game_session_log import GameSessionLog +from app.enums.TradeStatus import TradeStatus +from app.enums.AssetType import AssetType +from app.enums.TransactionType import TransactionType +from app.util import auth, assetversion, s3helper, signscript, transactions +from app.services.economy import IncrementTargetBalance, GetUserBalance +from app.extensions import db, limiter, scheduler, CORS, redis_controller, csrf, get_remote_address +import app.shell_commands as cmd + +logging.basicConfig( + level = logging.INFO, + format = "%(asctime)s [%(levelname)s] %(message)s" +) +logger = logging.getLogger(__name__) +logname = "./logs/syntaxweb.log" +handler = TimedRotatingFileHandler(logname, when="midnight", backupCount=30) +handler.suffix = "%Y%m%d" + +logging.getLogger().addHandler(handler) + +TwelveClientAssets = [37801173, 46295864, 48488236, 53870848, 53870858, 60595696, 89449009, 89449094, 97188757] +def create_app(config_class=Config): + app = Flask(__name__, template_folder="pages") + app.config.from_object(config_class) + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + app.config["SECRET_KEY"] = config_class.FLASK_SESSION_KEY + app.config['CORS_HEADERS'] = 'Content-Type' + app.config['SESSION_TYPE'] = 'redis' + app.config['SESSION_REDIS'] = redis.from_url(Config.FLASK_LIMITED_STORAGE_URI) + app.config['MAX_CONTENT_LENGTH'] = 32 * 1024 * 1024 + app.config["SQUEEZE_MIN_SIZE"] = 0 + #if app.debug is False: + #app.config["SERVER_NAME"] = config_class.BaseDomain + + db.init_app(app) + limiter.init_app(app) + csrf.init_app(app) + clean_domain = config_class.BaseDomain.replace('.', r'\.') + CORS.init_app(app, supports_credentials=True, resources={r"/*": {"origins": [f"https://{clean_domain}", f"http://{clean_domain}", f"https://.+{clean_domain}", f"http://.+{clean_domain}"]}}) + scheduler.init_app(app) + scheduler.start() + + from app.pages.login.login import login + from app.pages.signup.signup import signup + from app.pages.static import static + from app.pages.settings.settings import settings + from app.pages.home.home import home + from app.pages.admin.admin import AdminRoute, GetAmountOfPendingAssets, IsUserAnAdministrator + from app.routes.asset import AssetRoute + from app.routes.authentication import AuthenticationRoute + from app.routes.jobreporthandler import JobReportHandler + from app.routes.clientinfo import ClientInfo + from app.routes.thumbnailer import Thumbnailer + from app.routes.image import ImageRoute + from app.routes.fflagssettings import FFlagRoute + from app.pages.profiles.profile import Profile + from app.routes.gamejoin import GameJoinRoute + from app.routes.marketplace import MarketPlaceRoute, EconomyV1Route + from app.routes.presence import PresenceRoute + from app.pages.messages.messages import MessageRoute + #from app.pages.clothingmigrator.migrator import ClothingMigratorRoute + from app.pages.catalog.catalog import CatalogRoute + from app.pages.avatar.avatar import AvatarRoute + from app.routes.pointsservice import PointsServiceRoute + from app.routes.datastoreservice import DataStoreRoute + from app.pages.clientpages.clientpages import ClientPages + from app.routes.luawebservice import LuaWebServiceRoute + from app.pages.develop.develop import DevelopPagesRoute + from app.routes.bootstrapper import BootstrapperRoute + from app.pages.studio.studiopages import StudioPagesRoute + from app.pages.games.games import GamePagesRoute + from app.pages.membership.membership import MembershipPages + from app.routes.rate import AssetRateRoute + from app.pages.trades.trades import TradesPageRoute + from app.routes.sets import SetsRoute + from app.pages.notapproved.notapproved import NotApprovedRoute + from app.pages.groups.groupspage import groups_page + from app.pages.giftcardredeem.redeem import GiftcardRedeemRoute + from app.pages.currencyexchange.controller import CurrencyExchangeRoute + from app.routes.kofihandler import KofiHandlerRoute + #from app.pages.invitekeys.handler import inviteKeyRoute + from app.routes.discord_internal import DiscordInternal + from app.routes.publicapi import PublicAPIRoute + from app.pages.catalog.catalog import LibraryRoute + from app.routes.discourse_sso import discourse_sso + from app.pages.transactions.transactions import TransactionsRoute + from app.routes.gametransactions import GameTransactionsRoute + from app.pages.audiomigrator.audiomigrator import AudioMigratorRoute + from app.routes.rbxapi import RBXAPIRoute + from app.routes.legacydatapersistence import LegacyDataPersistenceRoute + from app.routes.friendapi import FriendsAPIRoute + from app.routes.inventoryapi import InventoryAPI + from app.routes.usersapi import UsersAPI + from app.routes.mobile import MobileAPIRoute + from app.routes.gamesapi import GamesAPIRoute + from app.routes.accountsettingsapi import AccountSettingsAPIRoute + from app.routes.presenceapi import PresenceAPIRoute + from app.routes.avatarapi import AvatarAPIRoute + from app.routes.badgesapi import BadgesAPIRoute + from app.pages.catalog.catalog import BadgesPageRoute + from app.pages.users.users_page import users_page + from app.routes.teleportservice import TeleportServiceRoute + from app.routes.prometheus import PrometheusRoute + from app.routes.rolimons import RolimonsAPI + from app.routes.cryptomus_handler import CryptomusHandler + app.register_blueprint(login, url_prefix="/") + app.register_blueprint(signup, url_prefix="/") + app.register_blueprint(static, url_prefix="/") + app.register_blueprint(settings, url_prefix="/") + app.register_blueprint(home, url_prefix="/") + app.register_blueprint(AssetRoute, url_prefix="/") + app.register_blueprint(AuthenticationRoute, url_prefix="/") + app.register_blueprint(AdminRoute, url_prefix="/admin") + app.register_blueprint(JobReportHandler, url_prefix="/") + app.register_blueprint(ClientInfo, url_prefix="/") + app.register_blueprint(Thumbnailer, url_prefix="/internal") + app.register_blueprint(ImageRoute, url_prefix="/") + app.register_blueprint(FFlagRoute, url_prefix="/") + app.register_blueprint(Profile, url_prefix="/") + app.register_blueprint(GameJoinRoute, url_prefix="/") + app.register_blueprint(MarketPlaceRoute, url_prefix="/marketplace") + app.register_blueprint(EconomyV1Route, url_prefix="/") + app.register_blueprint(PresenceRoute, url_prefix="/presence") + app.register_blueprint(MessageRoute, url_prefix="/messages") + #app.register_blueprint(ClothingMigratorRoute, url_prefix="/") + app.register_blueprint(CatalogRoute, url_prefix="/catalog") + app.register_blueprint(AvatarRoute, url_prefix="/") + app.register_blueprint(PointsServiceRoute, url_prefix="/") + app.register_blueprint(DataStoreRoute, url_prefix="/") + app.register_blueprint(ClientPages, url_prefix="/") + app.register_blueprint(LuaWebServiceRoute, url_prefix="/") + app.register_blueprint(DevelopPagesRoute, url_prefix="/") + app.register_blueprint(BootstrapperRoute, url_prefix="/") + app.register_blueprint(StudioPagesRoute, url_prefix="/") + app.register_blueprint(GamePagesRoute, url_prefix="/") + app.register_blueprint(MembershipPages, url_prefix="/") + app.register_blueprint(AssetRateRoute, url_prefix="/") + app.register_blueprint(TradesPageRoute, url_prefix="/") + app.register_blueprint(SetsRoute, url_prefix="/") + app.register_blueprint(NotApprovedRoute, url_prefix="/") + app.register_blueprint(groups_page, url_prefix="/") + app.register_blueprint(GiftcardRedeemRoute, url_prefix="/") + app.register_blueprint(CurrencyExchangeRoute, url_prefix="/currency-exchange") + app.register_blueprint(KofiHandlerRoute, url_prefix="/") + #app.register_blueprint(inviteKeyRoute, url_prefix="/") + app.register_blueprint(DiscordInternal, url_prefix="/internal/discord_bot") + app.register_blueprint(PublicAPIRoute, url_prefix="/public-api") + app.register_blueprint(LibraryRoute, url_prefix="/library") + app.register_blueprint(discourse_sso, url_prefix="/discourse") + app.register_blueprint(TransactionsRoute, url_prefix="/transactions") + app.register_blueprint(GameTransactionsRoute, url_prefix="/") + app.register_blueprint(AudioMigratorRoute, url_prefix="/") + app.register_blueprint(RBXAPIRoute, url_prefix="/") + app.register_blueprint(LegacyDataPersistenceRoute, url_prefix="/persistence/legacy") + app.register_blueprint(FriendsAPIRoute, url_prefix="/") + app.register_blueprint(InventoryAPI, url_prefix="/") + app.register_blueprint(UsersAPI, url_prefix="/") + app.register_blueprint(MobileAPIRoute, url_prefix="/") + app.register_blueprint(GamesAPIRoute, url_prefix="/") + app.register_blueprint(AccountSettingsAPIRoute, url_prefix="/") + app.register_blueprint(PresenceAPIRoute, url_prefix="/") + app.register_blueprint(AvatarAPIRoute, url_prefix="/") + app.register_blueprint(BadgesAPIRoute, url_prefix="/") + app.register_blueprint(BadgesPageRoute, url_prefix="/badges") + app.register_blueprint(users_page, url_prefix="/") + app.register_blueprint(TeleportServiceRoute, url_prefix="/reservedservers") + app.register_blueprint(PrometheusRoute, url_prefix="/") + app.register_blueprint(RolimonsAPI, url_prefix="/api/internal_rolimons") + app.register_blueprint(CryptomusHandler, url_prefix="/cryptomus_service") + + def ConvertDatetimeToDayMonthYear(date): + return date.strftime("%d/%m/%Y") + + app.jinja_env.globals.update(round=round, b64decode=base64.b64decode, len=len, ConvertDatetimeToDayMonthYear=ConvertDatetimeToDayMonthYear, datetime_utcnow = datetime.utcnow) + + @app.before_request + def before_request(): + BrowserUserAgent = request.headers.get('User-Agent', default="Unknown") + if "Roblox" not in BrowserUserAgent: + if request.method == "GET": + CloudFlareScheme = request.headers.get('CF-Visitor') + if CloudFlareScheme is not None: + if "https" not in CloudFlareScheme: + return redirect(request.url.replace("http://", "https://", 1), code=301) + elif BrowserUserAgent == "Roblox/WinInet": + requestReferer = request.headers.get( key = "Referer", default = None ) + if requestReferer is not None: + try: + if urlparse( requestReferer ).hostname[ -len( config_class.BaseDomain ): ] != config_class.BaseDomain: + logging.warn(f"Bad Referer - ref : {requestReferer} - target : {request.url}") + return "Bad Referer", 403 + except: + pass + + @app.after_request + def after_request( response : Response ): + if get_remote_address() in config_class.DEBUG_IPS: + logging.info(f"Debug - {response.status_code} - {request.host} - {request.path} - {request.args}") + if hasattr(response, 'direct_passthrough') and not response.direct_passthrough: + UserObj : User = auth.GetCurrentUser() + if UserObj is not None: + if UserObj.accountstatus != 1: + auth.invalidateToken(request.cookies.get(".ROBLOSECURITY")) + session["not-approved-viewer"] = UserObj.id + resp = make_response(redirect("/not-approved")) + resp.set_cookie(".ROBLOSECURITY", "", expires=0) + return resp + if request.cookies.get(key="t", default=None, type=str) is None: + NewToken = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) + response.set_cookie("t", NewToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config_class.BaseDomain}") + if "not-approved-viewer" in session: + UserObj : User = auth.GetCurrentUser() + if UserObj is not None: + session.pop("not-approved-viewer") + return response + + @app.context_processor + def inject_user(): + if ".ROBLOSECURITY" in request.cookies: + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return {} + + def award_daily_login_bonus(): + if redis_controller.get(f"daily_login_bonus:{str(AuthenticatedUser.id)}") is not None: + return + if AuthenticatedUser.created > datetime.utcnow() - timedelta( days = 1 ): + return + if GameSessionLog.query.filter_by(user_id=AuthenticatedUser.id).filter( GameSessionLog.joined_at > datetime.utcnow() - timedelta( days = 3 ) ).first() is None: + return + + redis_controller.setex(f"daily_login_bonus:{str(AuthenticatedUser.id)}", 60 * 60 * 24 ,"1") + IncrementTargetBalance(AuthenticatedUser, 10, 1) + transactions.CreateTransaction( + Reciever = AuthenticatedUser, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = 10, + CurrencyType = 1, + TransactionType = TransactionType.BuildersClubStipend, + CustomText = "Daily Login Bonus" + ) + + if redis_controller.exists(f"award_daily_login_bonus_attempt:{str(AuthenticatedUser.id)}") is None: + redis_controller.setex(f"award_daily_login_bonus_attempt:{str(AuthenticatedUser.id)}", 60, "1") + award_daily_login_bonus() + + unreadMessages = Message.query.filter_by(recipient_id=AuthenticatedUser.id, read=False).count() + inboundTrades = UserTrade.query.filter_by(recipient_userid=AuthenticatedUser.id, status=TradeStatus.Pending).count() + friendRequests = FriendRequest.query.filter_by(requestee_id=AuthenticatedUser.id).count() + AuthenticatedUser.lastonline = datetime.utcnow() + db.session.commit() + userRobux, userTix = GetUserBalance(AuthenticatedUser) + isAdministrator = IsUserAnAdministrator( AuthenticatedUser ) + PendingAssetsCount = 0 + if isAdministrator: + PendingAssetsCount = GetAmountOfPendingAssets() + + return { + "currentuser": { + "id": AuthenticatedUser.id, + "username": AuthenticatedUser.username, + "robux": userRobux, + "tix": userTix, + "unread_messages": unreadMessages, + "inbound_trades": inboundTrades, + "friend_requests": friendRequests, + "is_admin": isAdministrator, + "pending_asset_count": PendingAssetsCount + }, + } + return {} + + @app.context_processor + def inject_website_wide_message(): + if redis_controller.exists("website_wide_message"): + url_pattern = re.compile(r'(https?://\S+)') + website_message = website_wide_message=redis_controller.get("website_wide_message") + website_message = url_pattern.sub(r'\1', website_message) + return dict(website_wide_message=website_message) + return {} + + @app.context_processor + def injecthcaptcha_sitekey(): + return dict(turnstilekey=Config.CloudflareTurnstileSiteKey) + + @app.route('/') + def main(): + if "user" in session: + return redirect("/home") + else: + return redirect("/login") + + @app.errorhandler(404) + def page_not_found(e): + BrowserUserAgent = request.headers.get('User-Agent') + if BrowserUserAgent is not None: + if "RobloxStudio" in BrowserUserAgent: + return "

404 - Page not found


Return to homepage" + #logging.error(f"404 - {request.path}") + return render_template("404.html"), 404 + + @app.errorhandler(403) + def page_forbidden(e): + BrowserUserAgent = request.headers.get('User-Agent') + if BrowserUserAgent is not None: + if "RobloxStudio" in BrowserUserAgent: + return "

403 - Forbidden


Return to homepage" + return render_template("403.html"), 403 + + @app.errorhandler(405) + def page_forbidden(e): + BrowserUserAgent = request.headers.get('User-Agent') + if BrowserUserAgent is not None: + if "RobloxStudio" in BrowserUserAgent: + return "

405 - Method Not Allowed


Return to homepage" + return render_template("405.html"), 405 + + @app.errorhandler(500) + def page_internal_server_error(e): + exc_type, exc_value, exc_traceback = sys.exc_info() + PageRoute = request.path + return render_template("500.html", error={ + "type": exc_type, + "value": exc_value, + "traceback": str(traceback.format_exc()) + }, page=PageRoute), 500 + + + @app.errorhandler(429) + def ratelimit_handler(e): + return jsonify({"error": "You are being rate limited.", "message": "You are being rate limited.", "success": False}), 429 + + if config_class.ASSETMIGRATOR_USE_PROXIES: + redis_controller.delete("assetmigrator_proxies") + with open(config_class.ASSETMIGRATOR_PROXY_LIST_LOCATION, "r") as f: + LoadedProxies = 0 + for line in f: + if line.strip() != "": + LoadedProxies += 1 + redis_controller.sadd("assetmigrator_proxies", line.strip()) + logging.info(f"Loaded {LoadedProxies} proxies") + + try: + if not redis_controller.exists("coregui_ids_cooldown"): + with app.app_context(): + redis_controller.setex("coregui_ids_cooldown", 60 * 60, "1") + AllCoreGui = os.listdir("./app/files/CoreGui") + redis_controller.delete("coregui_ids") + for CoreGui in AllCoreGui: + try: + redis_controller.sadd("coregui_ids", int(CoreGui)) + except: + logging.error(f"Failed to load CoreGui file {CoreGui}") + + AssetObj : Asset = Asset.query.filter_by(id=int(CoreGui)).first() + if AssetObj is None: + AssetObj = Asset( + name = "CoreGui", + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + asset_type = AssetType.Lua, + creator_id = 1, + creator_type = 0, + moderation_status = 0 + ) + AssetObj.id = int(CoreGui) + db.session.add(AssetObj) + db.session.commit() + logging.info(f"Created CoreGui asset {CoreGui}") + CoreGuiContent = open(f"./app/files/CoreGui/{CoreGui}", "r").read() + if int(CoreGui) in TwelveClientAssets: + CoreGuiContent = signscript.signUTF8(f"%{CoreGui}%\r\n{CoreGuiContent}", addNewLine=False, twelveclient=True) + else: + CoreGuiContent = signscript.signUTF8(f"--rbxassetid%{CoreGui}%\r\n{CoreGuiContent}", addNewLine=False) + + CoreGuiHash = hashlib.sha512(CoreGuiContent.encode("utf-8")).hexdigest() + AssetVersionObj : AssetVersion = assetversion.GetLatestAssetVersion( AssetObj ) + if AssetVersionObj is None or AssetVersionObj.content_hash != CoreGuiHash: + s3helper.UploadBytesToS3( + CoreGuiContent.encode("utf-8"), + CoreGuiHash + ) + assetversion.CreateNewAssetVersion( + AssetObj, + CoreGuiHash, + CoreGuiContent, + ) + logging.info(f"Loaded {len(AllCoreGui)} CoreGui files") + except Exception as e: + logging.error(f"Failed to load CoreGui files: {e}") + + logging.info("App created") + return app \ No newline at end of file diff --git a/app/enums/AssetType.py b/app/enums/AssetType.py new file mode 100644 index 0000000..9f2c8fc --- /dev/null +++ b/app/enums/AssetType.py @@ -0,0 +1,70 @@ +from enum import Enum + +class AssetType( Enum ): + Image = 1 + TShirt = 2 + Audio = 3 + Mesh = 4 + Lua = 5 + HTML = 6 + Text = 7 + Hat = 8 + Place = 9 + Model = 10 + Shirt = 11 + Pants = 12 + Decal = 13 + Avatar = 16 + Head = 17 + Face = 18 + Gear = 19 + Badge = 21 + GroupEmblem = 22 + Animation = 24 + Torso = 27 + RightArm = 28 + LeftArm = 29 + LeftLeg = 30 + RightLeg = 31 + Package = 32 + YoutubeVideo = 33 + GamePass = 34 + App = 35 + Code = 37 + Plugin = 38 + SolidModel = 39 + MeshPart = 40 + HairAccessory = 41 + FaceAccessory = 42 + NeckAccessory = 43 + ShoulderAccessory = 44 + FrontAccessory = 45 + BackAccessory = 46 + WaistAccessory = 47 + ClimbAnimation = 48 + DeathAnimation = 49 + FallAnimation = 50 + IdleAnimation = 51 + JumpAnimation = 52 + RunAnimation = 53 + SwimAnimation = 54 + WalkAnimation = 55 + PoseAnimation = 56 + EarAccessory = 57 + EyeAccessory = 58 + EmoteAnimation = 61 + Video = 62 + TShirtAccessory = 64 + ShirtAccessory = 65 + PantsAccessory = 66 + JacketAccessory = 67 + SweaterAccessory = 68 + ShortsAccessory = 69 + LeftShoeAccessory = 70 + RightShoeAccessory = 71 + DressSkirtAccessory = 72 + FontFamily = 73 + EyebrowAccessory = 76 + EyelashAccessory = 77 + MoodAnimation = 78 + DynamicHead = 79 \ No newline at end of file diff --git a/app/enums/BanType.py b/app/enums/BanType.py new file mode 100644 index 0000000..ea9f94c --- /dev/null +++ b/app/enums/BanType.py @@ -0,0 +1,10 @@ +from enum import Enum + +class BanType(Enum): + Warning = 0 + Day1Ban = 1 + Day3Ban = 2 + Day7Ban = 3 + Day14Ban = 4 + Day30Ban = 5 + Deleted = 6 \ No newline at end of file diff --git a/app/enums/ChatStyle.py b/app/enums/ChatStyle.py new file mode 100644 index 0000000..28f774d --- /dev/null +++ b/app/enums/ChatStyle.py @@ -0,0 +1,6 @@ +from enum import Enum + +class ChatStyle(Enum): + Classic = 0 + Bubble = 1 + ClassicAndBubble = 2 \ No newline at end of file diff --git a/app/enums/CryptomusPaymentStatus.py b/app/enums/CryptomusPaymentStatus.py new file mode 100644 index 0000000..b048a3a --- /dev/null +++ b/app/enums/CryptomusPaymentStatus.py @@ -0,0 +1,17 @@ +from enum import Enum + +class CryptomusPaymentStatus(Enum): + Paid = 0 + PaidOver = 1 + WrongAmount = 2 + Process = 3 + ConfirmCheck = 4 + WrongAmountWaiting = 5 + Check = 6 + Fail = 7 + Cancel = 8 + SystemFail = 9 + RefundProcess = 10 + RefundFail = 11 + RefundPaid = 12 + Locked = 13 \ No newline at end of file diff --git a/app/enums/GiftcardType.py b/app/enums/GiftcardType.py new file mode 100644 index 0000000..0b902ee --- /dev/null +++ b/app/enums/GiftcardType.py @@ -0,0 +1,8 @@ +from enum import Enum + +class GiftcardType(Enum): + Outrageous_BuildersClub = 0 + Turbo_BuildersClub = 1 + RobuxCurrency = 2 + TixCurrency = 3 + Item = 4 \ No newline at end of file diff --git a/app/enums/LimitedItemTransferMethod.py b/app/enums/LimitedItemTransferMethod.py new file mode 100644 index 0000000..5ef5f5e --- /dev/null +++ b/app/enums/LimitedItemTransferMethod.py @@ -0,0 +1,7 @@ +from enum import Enum + +class LimitedItemTransferMethod( Enum ): + Purchase = 0 + Trade = 1 + WonByLottery = 2 + ForcedTransfer = 3 \ No newline at end of file diff --git a/app/enums/MembershipType.py b/app/enums/MembershipType.py new file mode 100644 index 0000000..32ad6a5 --- /dev/null +++ b/app/enums/MembershipType.py @@ -0,0 +1,7 @@ +from enum import Enum + +class MembershipType( Enum ): + NonBuildersClub = 0 + BuildersClub = 1 + TurboBuildersClub = 2 + OutrageousBuildersClub = 3 \ No newline at end of file diff --git a/app/enums/PlaceRigChoice.py b/app/enums/PlaceRigChoice.py new file mode 100644 index 0000000..eb085b3 --- /dev/null +++ b/app/enums/PlaceRigChoice.py @@ -0,0 +1,6 @@ +from enum import Enum + +class PlaceRigChoice( Enum ): + UserChoice = 0 + ForceR6 = 1 + ForceR15 = 2 \ No newline at end of file diff --git a/app/enums/PlaceYear.py b/app/enums/PlaceYear.py new file mode 100644 index 0000000..2374767 --- /dev/null +++ b/app/enums/PlaceYear.py @@ -0,0 +1,17 @@ +from enum import Enum + +class PlaceYear( Enum ): + Nine = 2009 + Ten = 2010 + Eleven = 2011 + Twelve = 2012 + Thirteen = 2013 + Fourteen = 2014 + Fifteen = 2015 + Sixteen = 2016 + Seventeen = 2017 + Eighteen = 2018 + Nineteen = 2019 + Twenty = 2020 + TwentyOne = 2021 + TwentyTwo = 2022 diff --git a/app/enums/TradeStatus.py b/app/enums/TradeStatus.py new file mode 100644 index 0000000..f6be642 --- /dev/null +++ b/app/enums/TradeStatus.py @@ -0,0 +1,8 @@ +from enum import Enum + +class TradeStatus( Enum ): + Pending = 0 + Accepted = 1 + Declined = 2 + Expired = 3 + Cancelled = 4 \ No newline at end of file diff --git a/app/enums/TransactionType.py b/app/enums/TransactionType.py new file mode 100644 index 0000000..9aaa6f9 --- /dev/null +++ b/app/enums/TransactionType.py @@ -0,0 +1,9 @@ +from enum import Enum + +class TransactionType( Enum ): + Purchase = 0 + Sale = 1 + GroupPayout = 2 + BuildersClubStipend = 3 + Commisions = 4 + Trade = 5 \ No newline at end of file diff --git a/app/extensions.py b/app/extensions.py new file mode 100644 index 0000000..631f6fa --- /dev/null +++ b/app/extensions.py @@ -0,0 +1,708 @@ +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy import or_, and_, text +from flask_limiter import Limiter, HEADERS +from flask_apscheduler import APScheduler +from flask import request +from flask_cors import CORS +import redis +import datetime +from config import Config +import logging +import time +from flask_wtf.csrf import CSRFProtect +from app.enums.AssetType import AssetType +csrf = CSRFProtect() +db = SQLAlchemy() +Config = Config() +CORS = CORS() + +def get_remote_address() -> str: + cloudflare = request.headers.get("CF-Connecting-IP") + if cloudflare is not None: + return cloudflare + return request.remote_addr or "127.0.0.1" + +def get_user_id() -> str: + """ + Gets the UserId for the current request + + :return: UserId or -1 if not logged in + """ + if ".ROBLOSECURITY" in request.cookies: + return "user_id:-1" + + from app.util.auth import GetTokenInfo + UserTokenInfo = GetTokenInfo( request.cookies.get(".ROBLOSECURITY", default = "None", type = str) ) + if UserTokenInfo is None: + return "user_id:-1" + + return f"user_id:{ UserTokenInfo[0] }" + +limiter = Limiter( + get_remote_address, + storage_uri=Config.FLASK_LIMITED_STORAGE_URI, + strategy="fixed-window-elastic-expiry", + headers_enabled=True, + key_prefix = "address_limiter" +) + +user_limiter = Limiter( + key_func = get_user_id, + storage_uri=Config.FLASK_LIMITED_STORAGE_URI, + strategy="fixed-window-elastic-expiry", + headers_enabled=True, + key_prefix = "user_limiter" +) + +redis_controller = Config.REDIS_CLIENT + +scheduler = APScheduler() +logging.getLogger('apscheduler').setLevel(logging.ERROR) + +@scheduler.task('interval', id='item_release_pool_releaser', seconds=60, misfire_grace_time=60) +def item_release_pool_releaser(): + with scheduler.app.app_context(): + import time + import json + import random + import uuid + import requests + from app.models.asset import Asset + from app.pages.admin.admin import GetNextItemDropDateTime, SetAssetOffsaleJob + + if redis_controller.get("item_release_pool_releaser") is not None: + return + redis_controller.set("item_release_pool_releaser", "busy", ex=120) + if redis_controller.llen("ItemReleasePool:Items") <= 0: + redis_controller.set("ItemReleasePool:LastDropTimestamp", value = str(round(time.time()))) + return + + if datetime.datetime.utcnow() < GetNextItemDropDateTime(): + return + random.seed( time.time() ) + RandomIndex = random.randint( 0, redis_controller.llen("ItemReleasePool:Items") - 1 ) + SelectedAssetId = redis_controller.lindex( "ItemReleasePool:Items", RandomIndex ) + if SelectedAssetId is None: + logging.warning("item_release_pool_releaser failed to selected random asset, lindex returned None") + return + redis_controller.lrem("ItemReleasePool:Items", count = 0, value = SelectedAssetId) + try: + SelectedAssetId = int(SelectedAssetId) + except Exception as e: + logging.warn(f"item_release_pool_releaser failed to cast string to integer, value: {SelectedAssetId}") + return + + AssetMetadata = redis_controller.get(f"ItemReleasePool:Item_Metadata:{SelectedAssetId}") + if AssetMetadata is None: + logging.warn(f"item_release_pool_releaser failed to get asset metadata for {SelectedAssetId}") + return + try: + AssetMetadata = json.loads(AssetMetadata) + except Exception as e: + logging.warn(f"item_release_pool_releaser failed to parse json from item metadata {SelectedAssetId}, {str(e)}") + return + + AssetObj : Asset = Asset.query.filter_by( id = SelectedAssetId ).first() + if AssetObj is None: + logging.warn(f"item_release_pool_releaser asset id {SelectedAssetId} does not exist") + return + + AssetObj.name = AssetMetadata["Name"] + AssetObj.description = AssetMetadata["Description"] + AssetObj.price_robux = AssetMetadata["RobuxPrice"] + AssetObj.price_tix = AssetMetadata["TicketsPrice"] + AssetObj.is_limited = AssetMetadata["IsLimited"] + AssetObj.is_limited_unique = AssetMetadata["IsLimitedUnique"] + AssetObj.serial_count = AssetMetadata["SerialCount"] + AssetObj.moderation_status = 0 + AssetObj.updated_at = datetime.datetime.utcnow() + AssetObj.is_for_sale = True + + if AssetMetadata["OffsaleAfter"] is not None: + OffsaleAfter = datetime.timedelta( seconds = AssetMetadata["OffsaleAfter"] ) + AssetOffsaleAt = datetime.datetime.utcnow() + OffsaleAfter + + if redis_controller.exists(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}"): + try: + scheduler.remove_job(redis_controller.get(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}")) + except: + logging.warning(f"Failed to remove job {redis_controller.get(f'APSchedulerTaskJobUUID:{str(AssetObj.id)}')}") + + APSchedulerTaskJobUUID = str(uuid.uuid4()) + scheduler.add_job(id=APSchedulerTaskJobUUID, func=SetAssetOffsaleJob, trigger='date', run_date=AssetOffsaleAt, args=[AssetObj.id]) + redis_controller.set(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}", APSchedulerTaskJobUUID) + logging.info(f"Asset {str(AssetObj.id)} has been set to go offsale at {str(AssetOffsaleAt)}, job UUID: {APSchedulerTaskJobUUID}") + + AssetObj.offsale_at = AssetOffsaleAt + + db.session.commit() + logging.info(f"Released Item {AssetObj.id}") + redis_controller.set("ItemReleasePool:LastDropTimestamp", value = str(round(time.time()))) + + try: + requests.post( + Config.ITEMRELEASER_DISCORD_WEBHOOK, + json = { + "content": f"<@&{Config.ITEMRELEASER_ITEM_PING_ROLE_ID}> New Item Drop!", + "allowed_mentions": { + "replied_user": False, + "parse": [], + "roles": [ + Config.ITEMRELEASER_ITEM_PING_ROLE_ID + ] + }, + "username": "Automatic Item Release Bot", + "avatar_url": f"{Config.BaseURL}/Thumbs/Head.ashx?x=48&y=48&userId=1", + "embeds": [{ + "type": "rich", + "title": AssetObj.name, + "description": AssetObj.description, + "color": 0x00ff62, + "fields": [ + { + "name": "Robux Price", + "value": f"R${AssetObj.price_robux}", + "inline": True + }, + { + "name": "Tickets Price", + "value": f"T${AssetObj.price_tix}", + "inline": True + }, + { + "name": "Limited Unique", + "value": str(AssetObj.is_limited_unique), + "inline": True + }, + { + "name": "Serial Count", + "value": "None" if AssetObj.serial_count == 0 else str(AssetObj.serial_count), + "inline": True + }, + { + "name": "Offsale in", + "value": "Never" if AssetObj.offsale_at is None else f"", + "inline": True + } + ], + "thumbnail": { + "url": f"{Config.BaseURL}/Thumbs/Asset.ashx?x=180&y=180&assetId={AssetObj.id}", + "height": 120, + "width": 120 + }, + "url": f"{Config.BaseURL}/catalog/{AssetObj.id}/--", + "footer": { + "text": f"Syntax Item Release Bot" + }, + "timestamp": datetime.datetime.utcnow().isoformat() + }] + } + ) + except Exception as e: + logging.warn(f"item_release_pool_releaser failed to send Discord Webhook message, {e}") + +@scheduler.task('interval', id='builders_club_stipend', seconds=120, misfire_grace_time=60) +def builders_club_stipend(): + with scheduler.app.app_context(): + if redis_controller.get("builders_club_stipend") is not None: + return + redis_controller.set("builders_club_stipend", "busy", ex=120) + from app.models.user_membership import UserMembership + from app.models.user import User + from app.models.game_session_log import GameSessionLog + from app.enums.MembershipType import MembershipType + from app.enums.TransactionType import TransactionType + from app.services.economy import IncrementTargetBalance + from app.util.transactions import CreateTransaction + from app.util.membership import GetUserMembership, RemoveUserMembership, GiveUserMembership + from app.pages.messages.messages import CreateSystemMessage + from app.models.linked_discord import LinkedDiscord + + # Get all users who membership has expired + ExpiredMemberships : list[UserMembership] = UserMembership.query.filter( + UserMembership.expiration < datetime.datetime.utcnow() + ) + for MembershipObj in ExpiredMemberships: + try: + if MembershipObj.membership_type == MembershipType.BuildersClub: + # Check if their discord is still linked + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=MembershipObj.user_id).first() + if LinkedDiscordObj is not None: + # Give them a free month of BC + MembershipObj.membership_type = MembershipType.BuildersClub + MembershipObj.expiration = datetime.datetime.utcnow() + datetime.timedelta(days=31) + db.session.commit() + continue + elif MembershipObj.membership_type == MembershipType.TurboBuildersClub or MembershipObj.membership_type == MembershipType.OutrageousBuildersClub: + UserObj : User = User.query.filter_by(id=MembershipObj.user_id).first() + CreateSystemMessage( + subject = "Builders Club membership expired", + message = f"""Hello {UserObj.username}, +This is an automated message to inform you that your Builders Club membership has expired, if you wish to renew your membership you can do so by following the instructions below + - For Turbo Builders Club members: + - You can renew your membership in the Discord Server by running the '/claim-turbo' command in the #bot-commands channel, this does require you to still be boosting our Discord Server + - For Outrageous Builders Club members: + - You can renew your membership by donating $5 to our Ko-Fi page https://ko-fi.com/syntaxeco + +If you have any questions or concerns, please contact our support in our Discord Server + +Sincerely, +The SYNTAX Team""", + userid = MembershipObj.user_id + ) + # Remove the membership + RemoveUserMembership(MembershipObj.user_id) + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=MembershipObj.user_id).first() + if LinkedDiscordObj is not None: + GiveUserMembership(MembershipObj.user_id, MembershipType.BuildersClub, expiration=datetime.timedelta(days=31)) + except Exception as e: + logging.info(f"Error while removing expired membership, Exception: {str(e)}") + continue + + WaitingMemberships : list[UserMembership] = UserMembership.query.filter( + or_( + UserMembership.membership_type == MembershipType.TurboBuildersClub, + UserMembership.membership_type == MembershipType.OutrageousBuildersClub + ) + ).filter( + UserMembership.next_stipend < datetime.datetime.utcnow() + ).all() + if len(WaitingMemberships) > 0: + logging.info(f"Found {len(WaitingMemberships)} users waiting for stipend") + for MembershipObj in WaitingMemberships: + UserObj : User = User.query.filter_by(id=MembershipObj.user_id).first() + if UserObj is None: + continue + if MembershipObj.membership_type == MembershipType.TurboBuildersClub: + IncrementTargetBalance(UserObj, 45, 0) + MembershipObj.next_stipend = MembershipObj.next_stipend + datetime.timedelta(hours=24) + CreateTransaction( + Reciever = UserObj, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = 45, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = "Builders Club Stipend" + ) + logging.info(f"Sent stipend to {UserObj.username} ({UserObj.id})") + elif MembershipObj.membership_type == MembershipType.OutrageousBuildersClub: + IncrementTargetBalance(UserObj, 80, 0) + MembershipObj.next_stipend = MembershipObj.next_stipend + datetime.timedelta(hours=24) + CreateTransaction( + Reciever = UserObj, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = 80, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = "Builders Club Stipend" + ) + logging.info(f"Sent stipend to {UserObj.username} ({UserObj.id})") + db.session.commit() + WaitingMemberships : list[UserMembership] = UserMembership.query.filter( + UserMembership.membership_type == MembershipType.BuildersClub + ).filter( + UserMembership.next_stipend < datetime.datetime.utcnow() + ).join(User).filter( + User.lastonline > datetime.datetime.utcnow() - datetime.timedelta(hours=24) + ).all() + for MembershipObj in WaitingMemberships: + UserObj : User = User.query.filter_by(id=MembershipObj.user_id).first() + if UserObj is None: + continue + #if GameSessionLog.query.filter_by(user_id=UserObj.id).filter( GameSessionLog.joined_at > datetime.datetime.utcnow() - datetime.timedelta( days = 2 ) ).first() is None: + # MembershipObj.next_stipend = datetime.datetime.utcnow() + datetime.timedelta(hours=6) + # db.session.commit() + # return + IncrementTargetBalance(UserObj, 10, 0) + CreateTransaction( + Reciever = UserObj, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = 10, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = "Builders Club Stipend" + ) + MembershipObj.next_stipend = datetime.datetime.utcnow() + datetime.timedelta(hours=24) + logging.info(f"Sent stipend to {UserObj.username} ({UserObj.id})") + db.session.commit() + + redis_controller.delete("builders_club_stipend") + +@scheduler.task('interval', id='refresh_discord_token', seconds=300, misfire_grace_time=900) +def refresh_discord_token(): + with scheduler.app.app_context(): + if redis_controller.get("refresh_discord_token") is not None: + return + redis_controller.set("refresh_discord_token", "busy", ex=120) + from app.models.linked_discord import LinkedDiscord + from app.models.user import User + from app.models.user_membership import UserMembership + from app.enums.MembershipType import MembershipType + from app.util.membership import GetUserMembership, RemoveUserMembership + from app.pages.messages.messages import CreateSystemMessage + from app.util.discord import RefreshAccessToken, GetUserInfoFromToken, DiscordUserInfo, UnexpectedStatusCode, MissingScope + + def SendUnlinkedNotification( UserId : int , Reason : str ): + UserObj : User = User.query.filter_by(id=UserId).first() + if UserObj is None: + return + CreateSystemMessage( + subject = "Discord Account unlinked", + message = f"""Hello {UserObj.username}, +Your discord account was unlinked from your account because \"{Reason}\", if you currently have a Builders Club membership it will be automatically removed from your account until you link your discord account again. + +If you have any questions or concerns, please contact our support in our Discord Server + +Sincerely, +The SYNTAX Team""", + userid = UserObj.id + ) + CurrentUserMembership : MembershipType = GetUserMembership(UserObj) + if CurrentUserMembership == MembershipType.BuildersClub: + # Remove the membership + RemoveUserMembership(UserObj) + + # Get all users who has a linked discord account and has a discord_expiry that is less than the current time + WaitingDiscordLinks : list[LinkedDiscord] = LinkedDiscord.query.filter( + LinkedDiscord.discord_expiry < datetime.datetime.utcnow() + ) + for LinkedDiscordObj in WaitingDiscordLinks: + try: + try: + DiscordOAuth2TokenExchangeResponseJSON = RefreshAccessToken(LinkedDiscordObj.discord_refresh_token) + except UnexpectedStatusCode as e: + db.session.delete(LinkedDiscordObj) + SendUnlinkedNotification(LinkedDiscordObj.user_id, f"UnexpectedStatusCodeException_RefreshAccessToken: {str(e)}") + continue + except MissingScope as e: + db.session.delete(LinkedDiscordObj) + SendUnlinkedNotification(LinkedDiscordObj.user_id, f"MissingScopeException_RefreshAccessToken: {str(e)}") + continue + # Get user info + try: + DiscordUserInfoObj : DiscordUserInfo = GetUserInfoFromToken(DiscordOAuth2TokenExchangeResponseJSON["access_token"]) + except UnexpectedStatusCode as e: + db.session.delete(LinkedDiscordObj) + SendUnlinkedNotification(LinkedDiscordObj.user_id, f"UnexpectedStatusCodeException_RefreshUserInfo: {str(e)}") + continue + if DiscordUserInfoObj is None: + continue + LinkedDiscordObj.discord_access_token = DiscordOAuth2TokenExchangeResponseJSON["access_token"] + LinkedDiscordObj.discord_refresh_token = DiscordOAuth2TokenExchangeResponseJSON["refresh_token"] + LinkedDiscordObj.discord_expiry = datetime.datetime.utcnow() + datetime.timedelta(seconds=DiscordOAuth2TokenExchangeResponseJSON["expires_in"]) + LinkedDiscordObj.discord_username = DiscordUserInfoObj.Username + LinkedDiscordObj.discord_discriminator = DiscordUserInfoObj.Discriminator + LinkedDiscordObj.discord_avatar = DiscordUserInfoObj.AvatarHash + LinkedDiscordObj.last_updated = datetime.datetime.utcnow() + db.session.commit() + except Exception as e: + logging.info(f"Error while refreshing discord token, Exception: {str(e)}") + continue + + +@scheduler.task('interval', id='migrate_assets', seconds=120, misfire_grace_time=60) +def migrate_assets(): + with scheduler.app.app_context(): + if redis_controller.get("migrate_assets_lock") is not None: + return + redis_controller.set("migrate_assets_lock", "busy", ex=120) + from app.routes.asset import migrateAsset, AddAssetToMigrationQueue, AddAudioAssetToAudioMigrationQueue + from app.routes.asset import NoPermissionException, AssetDeliveryAPIFailedException, AssetOnCooldownException, EconomyAPIFailedException, RatelimittedReachedException, AssetNotFoundException, AssetNotAllowedException + from app.models.asset import Asset + + EconomyFailedCount : int = 0 + + while True: + if redis_controller.llen("migrate_assets_queue") == 0: + break + # Get an asset from the queue + AssetId : int = int(redis_controller.lpop("migrate_assets_queue")) + if AssetId <= 1: + continue + try: + logging.info(f"AutoAssetMigrator: Auto migrating asset {AssetId}, {redis_controller.llen('migrate_assets_queue')} assets left in queue") + migrateAsset(AssetId, throwException=True) + except RatelimittedReachedException: + logging.info("AutoAssetMigrator: Ratelimit reached while auto migrating assets, stopping") + AddAssetToMigrationQueue(AssetId, bypassQueueLimit=False) + break + except EconomyAPIFailedException: + EconomyFailedCount += 1 + if EconomyFailedCount >= 4: + logging.info("AutoAssetMigrator: Economy API failed while auto migrating assets, stopping") + #AddAssetToMigrationQueue(AssetId, bypassQueueLimit=False) + break + else: + logging.info("AutoAssetMigrator: Economy API failed while auto migrating assets, retrying") + continue + except NoPermissionException: + logging.info(f"AutoAssetMigrator: No permission to migrate asset from Roblox, assetId: {AssetId}") + continue + except AssetDeliveryAPIFailedException: + logging.info(f"AutoAssetMigrator: AssetDelivery API failed while migrating asset, assetId: {AssetId}") + continue + except AssetOnCooldownException: + logging.info(f"AutoAssetMigrator: Asset is on cooldown, assetId: {AssetId}") + continue + except AssetNotAllowedException: + logging.info(f"AutoAssetMigrator: Asset is not allowed, assetId: {AssetId}") + continue + except AssetNotFoundException: + logging.info(f"AutoAssetMigrator: Asset not found, assetId: {AssetId}") + continue + except Exception as e: + logging.info(f"AutoAssetMigrator: Unknown error while migrating asset, Exception: {str(e)} ,assetId: {AssetId}") + continue + except: + logging.info(f"AutoAssetMigrator: Unknown error while migrating asset, assetId: {AssetId}") + continue + + while True: + # Migrating audios have a different queue + if redis_controller.llen("migrate_audio_assets_queue") == 0: + break + AssetId : int = int(redis_controller.lpop("migrate_audio_assets_queue")) + if AssetId <= 1: + continue + try: + AssociatedPlaceId : int = int(redis_controller.get(f"audio_asset:{AssetId}:placeid")) + if AssociatedPlaceId <= 1: + continue + except: + continue + + logging.info(f"AutoAssetMigrator: Auto migrating audio asset {AssetId}, {redis_controller.llen('migrate_audio_assets_queue')} assets left in queue") + try: + migrateAsset(AssetId, allowedTypes = [3], throwException=True, bypassCooldown = True, attemptSoundWithPlaceId = AssociatedPlaceId) + except RatelimittedReachedException: + logging.info("AutoAssetMigrator: Ratelimit reached while auto migrating assets, stopping") + AddAudioAssetToAudioMigrationQueue(AssetId, bypassQueueLimit=False, placeId = AssociatedPlaceId) + break + except EconomyAPIFailedException: + EconomyFailedCount += 1 + if EconomyFailedCount >= 4: + logging.info("AutoAssetMigrator: Economy API failed while auto migrating assets, stopping") + #AddAssetToMigrationQueue(AssetId, bypassQueueLimit=False) + break + else: + logging.info("AutoAssetMigrator: Economy API failed while auto migrating assets, retrying") + continue + except NoPermissionException: + logging.info(f"AutoAssetMigrator: No permission to migrate asset from Roblox, assetId: {AssetId}") + continue + except AssetDeliveryAPIFailedException: + logging.info(f"AutoAssetMigrator: AssetDelivery API failed while migrating asset, assetId: {AssetId}") + continue + except AssetOnCooldownException: + logging.info(f"AutoAssetMigrator: Asset is on cooldown, assetId: {AssetId}") + continue + except AssetNotAllowedException: + logging.info(f"AutoAssetMigrator: Asset is not allowed, assetId: {AssetId}") + continue + except AssetNotFoundException: + logging.info(f"AutoAssetMigrator: Asset not found, assetId: {AssetId}") + continue + except Exception as e: + logging.info(f"AutoAssetMigrator: Unknown error while migrating asset, Exception: {str(e)} ,assetId: {AssetId}") + continue + except: + logging.info(f"AutoAssetMigrator: Unknown error while migrating asset, assetId: {AssetId}") + continue + + redis_controller.delete("migrate_assets_lock") + + + +@scheduler.task('interval', id='fix_thumbnails', seconds = 600, misfire_grace_time=60) +def fix_thumbnails(): + with scheduler.app.app_context(): + if redis_controller.get("fix_thumbnails") is not None: + return + redis_controller.set("fix_thumbnails", "busy", ex=60) + from app.models.gameservers import GameServer + from app.models.asset_thumbnail import AssetThumbnail + from app.models.asset_version import AssetVersion + from app.models.asset import Asset + from app.models.user import User + from app.models.user_thumbnail import UserThumbnail + from app.models.place_icon import PlaceIcon + from app.util.assetversion import GetLatestAssetVersion + + from app.routes.thumbnailer import TakeThumbnail, TakeUserThumbnail + assetVersions = AssetVersion.query.filter( + ~db.session.query(AssetThumbnail.asset_id).filter( + AssetThumbnail.asset_id == AssetVersion.asset_id, + ).filter( + AssetThumbnail.asset_version_id == AssetVersion.version + ).exists() + ).join(Asset, Asset.id == AssetVersion.asset_id).filter( + and_( + Asset.moderation_status == 0, + Asset.asset_type != AssetType.Place + ) + ).distinct(AssetVersion.asset_id).order_by(AssetVersion.asset_id, AssetVersion.version.desc()).all() + + if len(assetVersions) > 0: + AssetTypeBrokenCounter = {} + logging.info(f"Found {len(assetVersions)} broken thumbnails") + SuccessCount = 0 + for assetVersion in assetVersions: + AssetObj : Asset = Asset.query.filter_by(id=assetVersion.asset_id).first() + if AssetObj is None: + continue + if AssetObj.asset_type == AssetType.Place: + continue + if AssetObj.moderation_status == 0: + LatestVersion : AssetVersion = GetLatestAssetVersion(AssetObj) + if LatestVersion is not assetVersion: + continue + Result = TakeThumbnail(assetVersion.asset_id) + if Result == "Thumbnail request sent": + SuccessCount += 1 + else: + if AssetObj.asset_type.name in AssetTypeBrokenCounter: + AssetTypeBrokenCounter[AssetObj.asset_type.name] += 1 + else: + AssetTypeBrokenCounter[AssetObj.asset_type.name] = 1 + if SuccessCount >= 30: + logging.info(f"Stopping thumbnail fixer, reached 30 thumbnails fixed") + break + + for key, value in AssetTypeBrokenCounter.items(): + logging.info(f"Thumbnail fixer: {value} {key} assets failed to fix") + users = User.query.filter(User.id.notin_(db.session.query(UserThumbnail.userid))).all() + for user in users: + TakeUserThumbnail(user.id) + users = UserThumbnail.query.filter(or_(UserThumbnail.full_contenthash == None, UserThumbnail.headshot_contenthash == None)).all() + for user in users: + TakeUserThumbnail(user.userid) + + Places : list[Asset] = Asset.query.filter(Asset.asset_type == AssetType.Place).filter(Asset.id.notin_(db.session.query(PlaceIcon.placeid))).all() + for PlaceObj in Places: + TakeThumbnail(PlaceObj.id, isIcon=True) + + +@scheduler.task('interval', id='heartbeat', seconds=15, misfire_grace_time=10) +def heartbeat(): + with scheduler.app.app_context(): + if redis_controller.get("heartbeat") is not None: + return # Another instance is already running + redis_controller.set("heartbeat", "busy", ex=14) + from app.models.gameservers import GameServer + from app.models.placeserver_players import PlaceServerPlayer + from app.models.placeservers import PlaceServer + from app.models.user import User + from app.services.gameserver_comm import perform_get, perform_post + from app.routes.jobreporthandler import HandleUserTimePlayed + import requests + import time + import threading + + def HandlePlayerDeletion( playerObj : PlaceServerPlayer, placeId : int = None): + if placeId is not None: + try: + TotalTimePlayed = (datetime.datetime.utcnow() - playerObj.joinTime).total_seconds() + userObj : User = User.query.filter_by(id=playerObj.userid).first() + HandleUserTimePlayed(userObj, TotalTimePlayed, serverUUID = str(playerObj.serveruuid), placeId = placeId) + except Exception as e: + logging.warn(f"Failed to handle player deletion, Exception: {str(e)}") + db.session.delete(playerObj) + db.session.commit() + + def RefreshServerInfo( server : GameServer ): + with scheduler.app.app_context(): + server : GameServer = server + startTime = time.time() + statsRequest = None + try: + statsRequest = perform_get( + TargetGameserver = server, + Endpoint = "stats", + RequestTimeout = 6 + ) + except Exception as e: + # Mark the server as offline + server.isRCCOnline = False + server.thumbnailQueueSize = 0 + server.RCCmemoryUsage = 0 + server.heartbeatResponseTime = 0 + if server.lastHeartbeat < datetime.datetime.utcnow() - datetime.timedelta(seconds=90): + # Delete all placeservers + GhostServers = PlaceServer.query.filter_by(originServerId=server.serverId).all() + for GhostServer in GhostServers: + GhostPlayers = PlaceServerPlayer.query.filter_by(serveruuid=GhostServer.serveruuid).all() + for GhostPlayer in GhostPlayers: + HandlePlayerDeletion(GhostPlayer, placeId = GhostServer.serverPlaceId) + db.session.delete(GhostServer) + db.session.commit() + return + if statsRequest is not None and statsRequest.status_code != 200: + # Mark the server as offline + server.isRCCOnline = False + server.thumbnailQueueSize = 0 + server.RCCmemoryUsage = 0 + server.heartbeatResponseTime = 0 + if server.lastHeartbeat < datetime.datetime.utcnow() - datetime.timedelta(seconds=90): + # Delete all placeservers + GhostServers = PlaceServer.query.filter_by(originServerId=server.serverId).all() + for GhostServer in GhostServers: + GhostPlayers = PlaceServerPlayer.query.filter_by(serveruuid=GhostServer.serveruuid).all() + for GhostPlayer in GhostPlayers: + HandlePlayerDeletion(GhostPlayer, placeId = GhostServer.serverPlaceId) + db.session.delete(GhostServer) + db.session.commit() + return + if statsRequest is not None and statsRequest.status_code == 200: + endTime = time.time() + server.lastHeartbeat = datetime.datetime.utcnow() + server.heartbeatResponseTime = endTime - startTime + stats = statsRequest.json() + server.isRCCOnline = stats["RCCOnline"] + server.thumbnailQueueSize = stats["ThumbnailQueueSize"] + server.RCCmemoryUsage = stats["RCCMemoryUsage"] + db.session.commit() + + if "RunningJobs" in stats: + for RunningJob in stats["RunningJobs"]: + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid = RunningJob).first() + if PlaceServerObj is None: + logging.debug(f"CloseJob : Closing {RunningJob} because PlaceServer does not exist in database, Owner: {server.serverId} / {server.serverName}") + try: + CloseJobRequest = perform_post( + TargetGameserver = server, + Endpoint = "CloseJob", + JSONData = { + "jobid": RunningJob + } + ) + except Exception as e: + continue + + refresh_server_thread_list : list[threading.Thread] = [] + servers : list[GameServer] = GameServer.query.all() + for server in servers: + refresh_server_thread_list.append(threading.Thread(target=RefreshServerInfo, args=(server,))) + for thread in refresh_server_thread_list: + thread.start() + for thread in refresh_server_thread_list: + thread.join() + + GhostServers : list[PlaceServer] = PlaceServer.query.filter(PlaceServer.lastping < datetime.datetime.utcnow() - datetime.timedelta(seconds=60)).all() + for GhostServer in GhostServers: + GhostPlayers = PlaceServerPlayer.query.filter_by(serveruuid=GhostServer.serveruuid).all() + for GhostPlayer in GhostPlayers: + HandlePlayerDeletion(GhostPlayer, placeId = GhostServer.serverPlaceId) + db.session.delete(GhostServer) + + GhostPlayers : list[PlaceServerPlayer] = PlaceServerPlayer.query.filter(PlaceServerPlayer.lastHeartbeat < datetime.datetime.utcnow() - datetime.timedelta(seconds=120)).all() + for GhostPlayer in GhostPlayers: + db.session.delete(GhostPlayer) + + db.session.commit() + + redis_controller.delete("heartbeat") + + diff --git a/app/files/2012Studio.lua b/app/files/2012Studio.lua new file mode 100644 index 0000000..e69de29 diff --git a/app/files/2014Gameserver.lua b/app/files/2014Gameserver.lua new file mode 100644 index 0000000..bbd0677 --- /dev/null +++ b/app/files/2014Gameserver.lua @@ -0,0 +1,367 @@ + +print("Config Load") + +local placeId = {PlaceId} +local port = {NetworkPort} +local gameId = {PlaceId} +local CreatorId = {CreatorId} +local CreatorType = {CreatorType} +local TempPlaceAccessKey = "{TempPlaceAccessKey}" +local sleeptime = 1 +local access = "{AuthToken}" +local JobId = "{JobId}" +local BaseURL = "http://www.syntax.eco" +local BaseDomain = "syntax.eco" +local timeout = 15 + +local HttpService = game:GetService("HttpService") +local Players = game:GetService("Players") +local ScriptContext = game:GetService("ScriptContext") + +print("Starting server for place "..tostring(placeId).." on port "..tostring(port).." and job id "..JobId) + +------------------- UTILITY FUNCTIONS -------------------------- + +function waitForChild(parent, childName) + while true do + local child = parent:findFirstChild(childName) + if child then + return child + end + parent.ChildAdded:wait() + end +end + +function onDied(victim, humanoid) + return +end + +-----------------------------------END UTILITY FUNCTIONS ------------------------- + +-----------------------------------"CUSTOM" SHARED CODE---------------------------------- + +pcall(function() settings().Network.UseInstancePacketCache = true end) +pcall(function() settings().Network.UsePhysicsPacketCache = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + + +settings().Network.PhysicsSend = Enum.PhysicsSendMethod.TopNErrors +settings().Network.ExperimentalPhysicsEnabled = true +settings().Network.WaitingForCharacterLogRate = 100 +pcall(function() settings().Diagnostics:LegacyScriptMode() end) + +-----------------------------------START GAME SHARED SCRIPT------------------------------ + +local RobloxPlacesList = {{ + 4378 +}} + +function isPlaceOwnedByRoblox( place_id ) + for _, id in pairs( RobloxPlacesList ) do + if id == place_id then + return true + end + end + return false +end + +local assetId = placeId -- might be able to remove this now + +local scriptContext = game:GetService('ScriptContext') +scriptContext.ScriptsDisabled = true + +game:SetPlaceID(assetId, isPlaceOwnedByRoblox(assetId)) +pcall(function () if universeId ~= nil then game:SetUniverseId(universeId) end end) +pcall(function() game.JobId = JobId end) +game:GetService("ChangeHistoryService"):SetEnabled(false) + +if CreatorType == 1 then + CreatorType = Enum.CreatorType.User +elseif CreatorType == 2 then + CreatorType = Enum.CreatorType.Group +else + CreatorType = Enum.CreatorType.User +end + +pcall(function() game:SetCreatorID(CreatorId, CreatorType) end) + +-- establish this peer as the Server +local ns = game:GetService("NetworkServer") + +local badgeUrlFlagExists, badgeUrlFlagValue = pcall(function () return settings():GetFFlag("NewBadgeServiceUrlEnabled") end) +local newBadgeUrlEnabled = badgeUrlFlagExists and badgeUrlFlagValue +if BaseURL~=nil then + local apiProxyUrl = string.gsub(BaseURL, "http://www", "https://api") -- hack - passing domain (ie "sitetest1.robloxlabs.com") and appending "https://api." to it would be better + + pcall(function() game:GetService("Players"):SetAbuseReportUrl(BaseURL .. "/AbuseReport/InGameChatHandler.ashx") end) + pcall(function() game:GetService("ScriptInformationProvider"):SetAssetUrl(BaseURL .. "/Asset/") end) + pcall(function() game:GetService("ContentProvider"):SetBaseUrl(BaseURL .. "/") end) + pcall(function() game:GetService("Players"):SetChatFilterUrl(BaseURL .. "/Game/ChatFilter.ashx") end) + + if gameCode then + game:SetVIPServerId(tostring(gameCode)) + end + + game:GetService("BadgeService"):SetPlaceId(placeId) + + if access~=nil then + game:GetService("BadgeService"):SetAwardBadgeUrl(BaseURL .. "/Game/Badge/AwardBadge.ashx?UserID=%d&BadgeID=%d&PlaceID=%d") + game:GetService("BadgeService"):SetHasBadgeUrl(BaseURL .. "/Game/Badge/HasBadge.ashx?UserID=%d&BadgeID=%d") + game:GetService("BadgeService"):SetIsBadgeDisabledUrl(BaseURL .. "/Game/Badge/IsBadgeDisabled.ashx?BadgeID=%d&PlaceID=%d") + + game:GetService("FriendService"):SetMakeFriendUrl(BaseURL .. "/Friend/CreateFriend?firstUserId=%d&secondUserId=%d") + game:GetService("FriendService"):SetBreakFriendUrl(BaseURL .. "/Friend/BreakFriend?firstUserId=%d&secondUserId=%d") + game:GetService("FriendService"):SetGetFriendsUrl(BaseURL .. "/Friend/AreFriends?userId=%d") + game:GetService("FriendService"):SetCreateFriendRequestUrl(BaseURL .. "/Friend/CreateFriendRequest?requesterUserId=%d&requestedUserId=%d") + game:GetService("FriendService"):SetDeleteFriendRequestUrl(BaseURL .. "/Friend/DeleteFriendRequest?requesterUserId=%d&requestedUserId=%d") + end + game:GetService("BadgeService"):SetIsBadgeLegalUrl("") + game:GetService("InsertService"):SetBaseSetsUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?nsets=10&type=base") + game:GetService("InsertService"):SetUserSetsUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") + game:GetService("InsertService"):SetCollectionUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?sid=%d") + game:GetService("InsertService"):SetAssetUrl(BaseURL .. "/Asset/?id=%d") + game:GetService("InsertService"):SetAssetVersionUrl(BaseURL .. "/Asset/?assetversionid=%d") + + game:GetService("Players"):SetSaveDataUrl(BaseURL .. "/persistence/legacy/save?placeId=" .. tostring(placeId) .. "&userId=%d") + game:GetService("Players"):SetLoadDataUrl(BaseURL .. "/persistence/legacy/load?placeId=" .. tostring(placeId) .. "&userId=%d") + + --pcall(function() loadfile(BaseURL .. "/Game/LoadPlaceInfo.ashx?PlaceId=" .. placeId)() end) + + --pcall(function() + -- if access then + -- loadfile(BaseURL .. "/Game/PlaceSpecificScript.ashx?PlaceId=" .. placeId .. "&" .. access)() + -- end + -- end) +end + +--pcall(function() game:GetService("NetworkServer"):SetIsPlayerAuthenticationRequired(true) end) +settings().Diagnostics.LuaRamLimit = 0 +print("Configured Server") +local StartTime = tick() +local StoppingServer = false + +local function GetPlayerByUserId( userId ) + for _, player in pairs( Players:GetPlayers() ) do + if player.userId == userId then + return player + end + end + return nil +end + +local function ReportServerPlayers(IgnoreThisPlayer) + --if StoppingServer then return end + local success, message = pcall(function() + local PlayerList = {{}} + for _, player in pairs(Players:GetChildren()) do + if player:IsA("Player") and player ~= IgnoreThisPlayer then + table.insert(PlayerList, {{ + ["UserId"] = player.userId, + ["Name"] = player.Name + }}) + end + end + local MessagePayload = HttpService:JSONEncode({{ + ["AuthToken"] = access, + ["JobId"] = JobId, + ["Players"] = PlayerList + }}) + local ResponseData = game:HttpPost(BaseURL.."/internal/gameserver/reportplayers", MessagePayload, true, "application/json") + local ResponseJSON = HttpService:JSONDecode(ResponseData) + for _, player in pairs(ResponseJSON["bad"]) do -- This is a list of players that need to be kicked from the server + local TargetPlayer = GetPlayerByUserId(player) + if TargetPlayer ~= nil then + print("Kicking Player", tostring(player), "because was requested by backend") + TargetPlayer:Kick("There was an issue authenticating you, please contact support.") + TargetPlayer:Destroy() + end + end + end) + if not success then + print("ReportServerPlayers failed:", message) + end +end + +local function ReportServerStats() + if StoppingServer then return end + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({{ + ["AuthToken"] = access, + ["JobId"] = JobId, + ["PlaceId"] = placeId, + ["ServerAliveTime"] = (tick() - StartTime) + 1 + }}) + game:HttpPost(BaseURL.."/internal/gameserver/reportstats", MessagePayload, false, "application/json") + end) + if not success then + print("ReportServerStats failed:", message) + end +end + +local function ReportServerShutdown() + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({{ + ["AuthToken"] = access, + ["JobId"] = JobId, + ["PlaceId"] = placeId, + ["ServerAliveTime"] = tick() - StartTime + }}) + game:HttpPost(BaseURL.."/internal/gameserver/reportshutdown", MessagePayload, false, "application/json") + end) + if not success then + print("ReportServerShutdown failed:", message) + end +end + +local function AuthenticatePlayer( player ) + local success, message = pcall(function() + local VerificationTicket = string.match( player.CharacterAppearance, BaseDomain.."/Asset/CharacterFetch.ashx%?userId=%d+%&t=(%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x)%&legacy=1$") + if VerificationTicket == nil then + print("Failed to get VerificationTicket for player", player.Name) + return false + end + + local MessagePayload = HttpService:JSONEncode({{ + ["AuthToken"] = access, + ["JobId"] = JobId, + ["PlaceId"] = placeId, + ["ServerAliveTime"] = tick() - StartTime, + ["UserId"] = player.userId, + ["VerificationTicket"] = VerificationTicket, + ["CharacterAppearance"] = player.CharacterAppearance, + ["Username"] = player.Name + }}) + local ResponseData = game:HttpPost(BaseURL.."/internal/gameserver/verifyplayer", MessagePayload, true, "application/json") + local ResponseJSON = HttpService:JSONDecode(ResponseData) + return ResponseJSON["authenticated"] + end) + if not success then + print("AuthenticatePlayer failed:", message) + return false + end + return message +end + +local function ShutdownServer() + StoppingServer = true + ReportServerShutdown() + ScriptContext.ScriptsDisabled = true + ns:Stop(1000) + game:Shutdown() +end + +local TotalPlayersJoined = 0 +game:GetService("Players").PlayerAdded:connect(function(player) + local StartTime = tick() + local CharacterURL + repeat + if string.find(player.CharacterAppearance, BaseDomain.."/Asset/CharacterFetch.ashx%?userId=%d+") then + CharacterURL = player.CharacterAppearance + end + wait(0.1) + until CharacterURL ~= nil or tick() - StartTime > 1 + if CharacterURL == nil then + player:Kick("There was an issue authenticating you, please contact support.") + print("Failed to get UserId for player", player.Name, "because CharacterURL was nil") + return + end + + local UserId = tonumber(string.match(CharacterURL, BaseDomain.."/Asset/CharacterFetch.ashx%?userId=(%d+)%&t=%x%x%x%x%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%-%x%x%x%x%x%x%x%x%x%x%x%x%&legacy=1$")) + + if UserId ~= nil then + player.userId = UserId + else + player:Kick("There was an issue authenticating you, please contact support.") + print("Failed to get UserId for player", player.Name, CharacterURL) + return + end + + local IsPlayerAuthenticated = AuthenticatePlayer(player) + if IsPlayerAuthenticated then + player.DataComplexityLimit = 1024 * 1024 * 1 + player.CharacterAppearance = BaseURL.."/Asset/CharacterFetch.ashx?userId="..tostring(player.userId).."&legacy=1" + ReportServerPlayers() + player:LoadData() + TotalPlayersJoined = TotalPlayersJoined + 1 + + local PlayerChangedConnection + PlayerChangedConnection = player.Changed:connect(function(property) + if property == "Name" then + ReportServerPlayers() + end + end) + + coroutine.wrap(function() + while true do + wait(120) + if StoppingServer then break end + if player.Parent == nil then break end + pcall(function() player:SaveData() end) + end + end)() + else + player:Kick("There was an issue authenticating you, please contact support.") + print("Failed to authenticate player", player.Name) + return + end +end) + + +game:GetService("Players").PlayerRemoving:connect(function(player) + ReportServerPlayers(player) + pcall(function() player:SaveData() end) + local PlayerCount = #Players:GetPlayers() + if PlayerCount == 0 then + wait(10) -- Wait 10 seconds to see if anyone rejoins + PlayerCount = #Players:GetPlayers() + if PlayerCount == 0 then + ShutdownServer() + end + end +end) + +local onlyCallGameLoadWhenInRccWithAccessKey = newBadgeUrlEnabled +wait() +-- load the game +print("Loading game") + +local success, result = pcall(function() + game:Load(BaseURL .. "/asset/?id=" .. placeId.."&access=".. TempPlaceAccessKey) +end) +if not success then + print("Failed to Load Place File, unsupported file format") + local ErrorMessage = Instance.new("Message", workspace) + ErrorMessage.Text = "Failed to Load Place File, unsupported file format" +end + +--Players:SetChatStyle(Enum.ChatStyle.ClassicAndBubble) +-- Now start the connection +ns:Start(port, sleeptime) + +if timeout then + scriptContext:SetTimeout(timeout) +end +scriptContext.ScriptsDisabled = false + +-- StartGame -- +Game:GetService("RunService"):Run() +ReportServerStats() + +coroutine.wrap(function() + while true do + wait(10) + if StoppingServer then break end + ReportServerStats() + ReportServerPlayers() + end +end)() + +coroutine.wrap(function() + wait(120) -- Wait 2 minutes to check if anyone has joined + if TotalPlayersJoined == 0 then + print("Stopping server, no players joined past 2 minutes.") + ShutdownServer() + end +end)() + +pcall(function() Game:GetService("ScriptContext"):AddStarterScript(37801172) end) diff --git a/app/files/2014Join.lua b/app/files/2014Join.lua new file mode 100644 index 0000000..57b875e --- /dev/null +++ b/app/files/2014Join.lua @@ -0,0 +1,331 @@ + +pcall(function() game:SetPlaceID(-1, false) end) + +local startTime = tick() +local connectResolved = false +local loadResolved = false +local joinResolved = false +local playResolved = true +local playStartTime = 0 +local player = nil +local BaseURL = "http://www.syntax.eco" +local PlaceId = {PlaceId} + +settings()["Game Options"].CollisionSoundEnabled = true +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings().Physics.Is30FpsThrottleEnabled = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) +pcall(function() settings().Physics.PhysicsEnvironmentalThrottle = Enum.EnviromentalPhysicsThrottle.DefaultAuto end) + + +-- arguments --------------------------------------- +local threadSleepTime = 15 +local test = false + +local closeConnection = game.Close:connect(function() + if 0 then + if not connectResolved then + local duration = tick() - startTime; + elseif (not loadResolved) or (not joinResolved) then + local duration = tick() - startTime; + if not loadResolved then + loadResolved = true + end + if not joinResolved then + joinResolved = true + end + elseif not playResolved then + local duration = tick() - playStartTime; + playResolved = true + end + end +end) + +game:GetService("ChangeHistoryService"):SetEnabled(false) +game:GetService("ContentProvider"):SetThreadPool(16) +game:GetService("InsertService"):SetBaseSetsUrl(BaseURL.."/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl(BaseURL.."/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl(BaseURL.."/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl(BaseURL.."/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl(BaseURL.."/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl(BaseURL.."/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl(BaseURL.."/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl(BaseURL.."/marketplace/productinfo?assetId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl(BaseURL.."/ownership/hasasset?userId=%d&assetId=%d") end) +pcall(function() game:SetCreatorID(0, Enum.CreatorType.User) end) + +-- Bubble chat. This is all-encapsulated to allow us to turn it off with a config setting +pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.Classic) end) +pcall( function() if settings().Network.MtuOverride == 0 then settings().Network.MtuOverride = 1400 end end) + +local waitingForCharacter = false; +local waitingForCharacterGuid = "26c3de03-3381-4ab6-8e60-e415fa757eba"; + + +-- globals ----------------------------------------- + +client = game:GetService("NetworkClient") +visit = game:GetService("Visit") + +-- functions --------------------------------------- +function ifSeleniumThenSetCookie(key, value) + game:GetService("CookiesService"):SetCookieValue(key, value) +end + +function setMessage(message) + game:SetMessage(message) +end +setMessage("Connecting to SYNTAX...") +function showErrorWindow(message, errorType, errorCategory) + if (not loadResolved) or (not joinResolved) then + local duration = tick() - startTime; + if not loadResolved then + loadResolved = true + end + if not joinResolved then + joinResolved = true + end + elseif not playResolved then + local duration = tick() - playStartTime; + playResolved = true + end + + game:SetMessage(message) +end + +function reportError(err, message) + print("***ERROR*** " .. err) + client:Disconnect() + wait(1) + showErrorWindow("Error: " .. err, message, "Other") +end + +-- called when the client connection closes +function onDisconnection(peer, lostConnection) + if lostConnection then + showErrorWindow("You have lost the connection to the game", "LostConnection", "LostConnection") + else + showErrorWindow("This game has shut down", "Kick", "Kick") + end +end + +function requestCharacter(replicator) + + -- prepare code for when the Character appears + local connection + connection = player.Changed:connect(function (property) + if property=="Character" then + game:ClearMessage() + waitingForCharacter = false + + connection:disconnect() + + if 0 then + if not joinResolved then + local duration = tick() - startTime; + joinResolved = true + + playStartTime = tick() + playResolved = false + end + end + end + end) + + setMessage("Requesting character") + + if 0 and not loadResolved then + local duration = tick() - startTime; + loadResolved = true + end + + local success, err = pcall(function() + replicator:RequestCharacter() + setMessage("Waiting for character") + waitingForCharacter = true + end) +end + +-- called when the client connection is established +function onConnectionAccepted(url, replicator) + connectResolved = true + --reportDuration("GameConnect", "Success", tick() - startTime, false) + + local waitingForMarker = true + + local success, err = pcall(function() + if not test then + visit:SetPing("", 300) + end + game:SetMessageBrickCount() + replicator.Disconnection:connect(onDisconnection) + + -- Wait for a marker to return before creating the Player + local marker = replicator:SendMarker() + + marker.Received:connect(function() + waitingForMarker = false + requestCharacter(replicator) + end) + end) + + if not success then + reportError(err,"ConnectionAccepted") + return + end + + -- TODO: report marker progress + + while waitingForMarker do + workspace:ZoomToExtents() + wait(0.5) + end +end + +-- called when the client connection fails +function onConnectionFailed(_, error) + showErrorWindow("Failed to connect to the Game. (ID=" .. error .. ")", "ID" .. error, "Other") +end + +-- called when the client connection is rejected +function onConnectionRejected() + connectionFailed:disconnect() + showErrorWindow("This game is not available. Please try another", "WrongVersion", "WrongVersion") +end + +idled = false +function onPlayerIdled(time) + if time > 20*60 then + showErrorWindow(string.format("You were disconnected for being idle %d minutes", time/60), "Idle", "Idle") + client:Disconnect() + if not idled then + idled = true + end + end +end + +pcall(function() settings().Diagnostics:LegacyScriptMode() end) +coroutine.wrap(function() + game:SetRemoteBuildMode(true) + + setMessage("Fetching Place Info from SYNTAX") + --print("Fetching Place Info from Server") + local joinScriptUrl = nil + local AttemptCount = 0 + local success, result = nil, nil + while true do + success, result = pcall(function() + return game:HttpPost( BaseURL.."/Game/placelauncher.ashx?placeId="..tostring(PlaceId).."&rand="..tostring(math.random(1,9999999)), "{{}}", true, "application/json") + end) + --print("Placelauncher ["..tostring(AttemptCount).."]: "..tostring(result)) + + if success then + local JSONResponse = game:GetService("HttpService"):JSONDecode(result) + --print("Fetch Place Info Success, ["..tostring(AttemptCount).."]") + if JSONResponse["status"] == 1 then + setMessage("Waiting for Server to start... ( This may take a while ) [ "..tostring(AttemptCount).." ]") + --print("Placelauncher returned status 1") + elseif JSONResponse["status"] == 2 then -- Server Started + --print("Placelauncher returned status 2") + setMessage("Server Found! Connecting...") + joinScriptUrl = JSONResponse["joinScriptUrl"] + + break + else + setMessage("RequestFailed, message: "..JSONResponse["message"]) + error("RequestFailed, message: "..JSONResponse["message"]) + end + if AttemptCount > 15 then + setMessage("Placelauncher request timed out, please try again later") + error("Placelauncher request timed out, please try again later") + end + --print("Waiting 3 seconds before next fetch [ "..tostring(AttemptCount).." ]") + wait(3) + AttemptCount = AttemptCount + 1 + else + setMessage("Failed to get place launcher info: "..result) + error("Failed to get place launcher info: "..result) + end + end + + if not joinScriptUrl then + setMessage("Failed to get join script, please try again later") + error("Failed to get join script") + end + --print("Fetch JoinScriptUrl Success") + + local success, result = pcall(function() + return game:HttpGet(joinScriptUrl, true) + end) + if not success then + setMessage("Failed to get join script: "..result) + error("Failed to get join script: "..result) + end + + local JSONResponse = game:GetService("HttpService"):JSONDecode(result:sub(result:find("\n", 1, true)+1)) + + local MachineAddress = JSONResponse["MachineAddress"] + local ServerPort = JSONResponse["ServerPort"] + local PlayerUsername = JSONResponse["UserName"] + local PlayerId = JSONResponse["UserId"] + local AccountAge = JSONResponse["AccountAge"] + local GameSessionId = JSONResponse["SessionId"] + local CharacterAppearance = JSONResponse["CharacterAppearance"] + + setMessage("Welcome, "..PlayerUsername.."! Connecting to SYNTAX...") + --print("Connecting to "..MachineAddress..":"..tostring(ServerPort).." as "..PlayerUsername.." ("..tostring(PlayerId)..")") + wait(1.5) + + client.ConnectionAccepted:connect(onConnectionAccepted) + client.ConnectionRejected:connect(onConnectionRejected) + connectionFailed = client.ConnectionFailed:connect(onConnectionFailed) + client.Ticket = "" + + local ConnectionAttempt = 0 + while true do + setMessage("Connecting to Gameserver... [ "..tostring(ConnectionAttempt).." ]") + + local isConnectionSuccessful, player = pcall(function() + playerConnectSucces, player = pcall(function() return client:PlayerConnect(PlayerId, MachineAddress, ServerPort, 0, threadSleepTime) end) + if not playerConnectSucces then + --print("PlayerConnect function failed, fallback to legacy connect") + player = game:GetService("Players"):CreateLocalPlayer(0) + client:Connect(MachineAddress, ServerPort, 0, threadSleepTime) + end + + return player + end) + if isConnectionSuccessful then + break + else + if ConnectionAttempt > 5 then + error("Failed to connect to server: "..player) + end + ConnectionAttempt = ConnectionAttempt + 1 + wait(2) + end + end + + player:SetSuperSafeChat(false) + + pcall(function() player:SetUnder13(false) end) + pcall(function() player:SetMembershipType(Enum.MembershipType[JSONResponse["MembershipType"]]) end) + pcall(function() player:SetAccountAge(AccountAge) end) + pcall(function() player.Name = PlayerUsername end) + pcall(function() player.UserId = PlayerId end) + pcall(function() client:SetGameSessionID(GameSessionId) end) + pcall(function() game:SetPlaceID(PlaceId, false) end) + pcall(function() player.ChatMode = Enum.ChatMode.TextAndMenu end) + + player.Idled:connect(onPlayerIdled) + player.CharacterAppearance = CharacterAppearance + game:GetService("Players"):SetChatStyle(Enum.ChatStyle[JSONResponse["ChatStyle"]]) + + pcall(function() game:SetScreenshotInfo("") end) + pcall(function() game:SetVideoInfo('GamesROBLOX, video, free game, online virtual world') end) +end)() \ No newline at end of file diff --git a/app/files/2016Gameserver.lua b/app/files/2016Gameserver.lua new file mode 100644 index 0000000..1259220 --- /dev/null +++ b/app/files/2016Gameserver.lua @@ -0,0 +1,213 @@ +local PlaceId, Port, BaseURL, AuthToken, CreatorId, CreatorType, DownloadAuthorizationToken = ... + +local RunService = game:GetService("RunService") +local ContentProvider = game:GetService("ContentProvider") +local Players = game:GetService("Players") +local HttpService = game:GetService("HttpService") +local ScriptContext = game:GetService('ScriptContext') +local RobloxReplicatedStorage = game:GetService('RobloxReplicatedStorage') + +HttpService.HttpEnabled = false -- Disable HttpService for security reasons + +if CreatorType == 1 then + CreatorType = Enum.CreatorType.User +elseif CreatorType == 2 then + CreatorType = Enum.CreatorType.Group +else + CreatorType = Enum.CreatorType.User +end +pcall(function() game:SetCreatorID(CreatorId, CreatorType) end) + +pcall(function() settings().Network.UseInstancePacketCache = true end) +pcall(function() settings().Network.UsePhysicsPacketCache = true end) +--pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.FIFO end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + +--settings().Network.PhysicsSend = 1 -- 1==RoundRobin +--settings().Network.PhysicsSend = Enum.PhysicsSendMethod.ErrorComputation2 +settings().Network.PhysicsSend = Enum.PhysicsSendMethod.TopNErrors +settings().Network.ExperimentalPhysicsEnabled = true +settings().Network.WaitingForCharacterLogRate = 100 +pcall(function() settings().Diagnostics:LegacyScriptMode() end) + +pcall(function() ScriptContext:AddStarterScript(37801172) end) +ScriptContext.ScriptsDisabled = true + +game:SetPlaceID(PlaceId, false) +game:GetService("ChangeHistoryService"):SetEnabled(false) +local NetworkServer = game:GetService("NetworkServer") + +if BaseURL~=nil then + pcall(function() game:GetService("Players"):SetAbuseReportUrl(BaseURL .. "/AbuseReport/InGameChatHandler.ashx") end) + pcall(function() game:GetService("ScriptInformationProvider"):SetAssetUrl(BaseURL .. "/Asset/") end) + pcall(function() game:GetService("ContentProvider"):SetBaseUrl(BaseURL .. "/") end) + pcall(function() game:GetService("Players"):SetChatFilterUrl(BaseURL .. "/Game/ChatFilter.ashx") end) + + game:GetService("BadgeService"):SetPlaceId(PlaceId) + game:GetService("BadgeService"):SetIsBadgeLegalUrl("") + game:GetService("BadgeService"):SetAwardBadgeUrl(BaseURL .. "/Game/Badge/AwardBadge.ashx?UserID=%d&BadgeID=%d&PlaceID=%d") + game:GetService("BadgeService"):SetHasBadgeUrl(BaseURL .. "/Game/Badge/HasBadge.ashx?UserID=%d&BadgeID=%d") + game:GetService("BadgeService"):SetIsBadgeDisabledUrl(BaseURL .. "/Game/Badge/IsBadgeDisabled.ashx?BadgeID=%d&PlaceID=%d") + + game:GetService("InsertService"):SetBaseSetsUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?nsets=10&type=base") + game:GetService("InsertService"):SetUserSetsUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") + game:GetService("InsertService"):SetCollectionUrl(BaseURL .. "/Game/Tools/InsertAsset.ashx?sid=%d") + game:GetService("InsertService"):SetAssetUrl(BaseURL .. "/Asset/?id=%d") + game:GetService("InsertService"):SetAssetVersionUrl(BaseURL .. "/Asset/?assetversionid=%d") + + game:GetService("Players"):SetSaveDataUrl(BaseURL .. "/persistence/legacy/save?userId=%d") + game:GetService("Players"):SetLoadDataUrl(BaseURL .. "/persistence/legacy/load?userId=%d") + + game:GetService("FriendService"):SetMakeFriendUrl(BaseURL .. "/Friend/CreateFriend?firstUserId=%d&secondUserId=%d") + game:GetService("FriendService"):SetBreakFriendUrl(BaseURL .. "/Friend/BreakFriend?firstUserId=%d&secondUserId=%d") + game:GetService("FriendService"):SetGetFriendsUrl(BaseURL .. "/Friend/AreFriends?userId=%d") + game:GetService("FriendService"):SetCreateFriendRequestUrl(BaseURL .. "/Friend/CreateFriendRequest?requesterUserId=%d&requestedUserId=%d") + game:GetService("FriendService"):SetDeleteFriendRequestUrl(BaseURL .. "/Friend/DeleteFriendRequest?requesterUserId=%d&requestedUserId=%d") + + --pcall(function() loadfile(BaseURL .. "/Game/LoadPlaceInfo.ashx?PlaceId=" .. PlaceId)() end) idk what this is suppose to return +end + +pcall(function() + game:GetService("NetworkServer"):SetIsPlayerAuthenticationRequired(true) +end) +settings().Diagnostics.LuaRamLimit = 0 + +local StartTime = tick() +local StoppingServer = false +local function ReportServerPlayers(IgnoreThisPlayer) + --if StoppingServer then return end + local success, message = pcall(function() + local PlayerList = {} + for _, player in pairs(Players:GetChildren()) do + if player:IsA("Player") and player ~= IgnoreThisPlayer then + table.insert(PlayerList, { + ["UserId"] = player.UserId, + ["Name"] = player.Name + }) + end + end + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["Players"] = PlayerList + }) + local ResponseData = game:HttpPost(BaseURL.."/internal/gameserver/reportplayers", MessagePayload, true, "application/json") + local ResponseJSON = HttpService:JSONDecode(ResponseData) + for _, player in pairs(ResponseJSON["bad"]) do -- This is a list of players that need to be kicked from the server + local TargetPlayer = Players:GetPlayerByUserId(player) + if TargetPlayer ~= nil then + TargetPlayer:Kick("There was an issue authenticating you, please contact support.") + TargetPlayer:Destroy() + end + end + + end) +end + +local function ReportServerStats() + if StoppingServer then return end + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["PlaceId"] = PlaceId, + ["ServerAliveTime"] = (tick() - StartTime) + 1 + }) + game:HttpPost(BaseURL.."/internal/gameserver/reportstats", MessagePayload, false, "application/json") + end) +end + +local function ReportServerShutdown() + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["PlaceId"] = PlaceId, + ["ServerAliveTime"] = tick() - StartTime + }) + game:HttpPost(BaseURL.."/internal/gameserver/reportshutdown", MessagePayload, false, "application/json") + end) +end + +local function ShutdownServer() + StoppingServer = true + ReportServerShutdown() + ScriptContext.ScriptsDisabled = true + game:HttpPost("http://127.0.0.1:3000/CloseJob?RCCReturnAuth="..AuthToken, HttpService:JSONEncode({ + ["jobid"] = game.JobId + }), false, "application/json") +end + +if PlaceId ~= nil and BaseURL ~= nil then + wait() + local success, message = pcall(function() + game:Load(BaseURL.."/asset/?id="..tostring(PlaceId).."&access="..DownloadAuthorizationToken) + end) + if not success then + -- Report error + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["PlaceId"] = PlaceId, + ["Error"] = message + }) + game:HttpPost(BaseURL.."/internal/gameserver/reportfailure", MessagePayload, false, "application/json") + -- Lets start the server but with an empty place and a error message + local NewMessage = Instance.new("Message", workspace) + NewMessage.Text = "There was an error loading this place file, Error Message: "..message..", PlaceId: "..tostring(PlaceId)..", JobId: "..tostring(game.JobId) + end +end + +NetworkServer:Start(Port) +ScriptContext:SetTimeout(10) +ScriptContext.ScriptsDisabled = false + +local TotalPlayersJoined = 0 + +Players.PlayerAdded:Connect(function(player) + ReportServerPlayers() + TotalPlayersJoined = TotalPlayersJoined + 1 + player.DataComplexityLimit = 1024 * 1024 * 1 + player:LoadData() + + coroutine.wrap(function() + while true do + wait(120) + if StoppingServer then break end + if player.Parent == nil then break end + player:SaveData() + end + end)() +end) +Players.PlayerRemoving:Connect(function(player) + ReportServerPlayers(player) + player:SaveData() + local PlayerCount = #Players:GetPlayers() + if PlayerCount == 0 then + wait(10) -- Wait 10 seconds to see if anyone rejoins + PlayerCount = #Players:GetPlayers() + if PlayerCount == 0 then + ShutdownServer() + end + end +end) + +game:GetService("RunService"):Run() +ReportServerStats() + +coroutine.wrap(function() + while true do + wait(20) + if StoppingServer then break end + ReportServerStats() + ReportServerPlayers() + end +end)() + +coroutine.wrap(function() + wait(120) -- Wait 2 minutes to check if anyone has joined + if TotalPlayersJoined == 0 then + warn("Stopping server, no players joined past 2 minutes.") + ShutdownServer() + end +end)() \ No newline at end of file diff --git a/app/files/AnimationThumbnail.png b/app/files/AnimationThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..36aa431f05e4159e6c61a1d77e12949c2f7111ce GIT binary patch literal 44652 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 qpnUc@4lEGWh@Q5QR`pF()c*k}Rs*X5 literal 0 HcmV?d00001 diff --git a/app/files/AudioThumbnail.png b/app/files/AudioThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..1f72a790bb6bb94436f6f167359089069c9e15c1 GIT binary patch literal 42139 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 + null + nil + + + false + RBX1512699E848543EC96B3B41C9AAF63F2 + 0 + false + -500 + true + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + Workspace + false + 1 + null + false + + + + + 0 + 18.7408524 + 23.4260654 + 1 + 0 + -0 + -0 + 0.707106829 + 0.707106829 + 0 + -0.707106829 + 0.707106829 + + null + 0 + 70 + + 0 + 17.3266392 + 22.0118523 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + true + Camera + + + + + true + -0.5 + 0.5 + 0 + 0 + -0.5 + 0.5 + 4 + 0 + 194 + + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + true + + 4288914085 + + false + + 0.300000012 + 0.5 + -0.5 + 0.5 + 0 + 0 + -0.5 + 0.5 + 0 + 0 + true + 256 + Terrain + 0 + -0.5 + 0.5 + 0 + 0 + + 0 + 0 + 0 + + AQU= + -0.5 + 0.5 + 3 + 0 + 0 + + 0 + 0 + 0 + + 4278998108 + 0.300000012 + 0.150000006 + 10 + + 2044 + 252 + 2044 + + + + + + true + -0.5 + 0.5 + 0 + 0 + -0.5 + 0.5 + 4 + 0 + 199 + + 0 + -10 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + + true + 4284702562 + + false + + 0.5 + 0.300000012 + -0.5 + 0.5 + 0 + 0 + -0.5 + 0.5 + 0 + 0 + true + 256 + BasePlate + 0 + -0.5 + 0.5 + 0 + 0 + + 0 + 0 + 0 + + -0.5 + 0.5 + 3 + 0 + 0 + + 0 + 0 + 0 + + 0 + 1 + + 512 + 20 + 512 + + + + + + + NonReplicatedCSGDictionaryService + + + + + CSGDictionaryService + + + + + true + 12 + Players + 7536745 + + + + + ReplicatedFirst + + + + + true + 400 + 0.5 + 0 + 0 + 0 + 0 + 0 + 0 + true + 100 + true + StarterPlayer + 100 + + + + StarterPlayerScripts + + + + + + StarterPack + + + + + StarterGui + true + true + + + + + Teleport Service + + + + + 0 + 10 + 1 + SoundService + 1 + + + + + CollectionService + + + + + PhysicsService + + + + + Geometry + + + + + RenderHooksService + + + + + false + InsertService + + + + + SocialService + + + + + GamePassService + + + + + 1000 + Debris + + + + + Instance + + + + + Instance + + + + + CookiesService + + + + + ContextActionService + + + + + Instance + + + + + AssetService + + + + + Selection + + + + + false + ServerScriptService + + + + + ServerStorage + + + + + ReplicatedStorage + + + + + Instance + + + + + 4278190080 + 1 + 14 + 4278190080 + 4278190080 + 4290822336 + 100000 + 0 + 41.7332993 + true + Lighting + 4286611584 + true + 4289967032 + 14:00:00 + + + + + false + HttpService + + + \ No newline at end of file diff --git a/app/files/CoreGui/107893730 b/app/files/CoreGui/107893730 new file mode 100644 index 0000000..1773568 --- /dev/null +++ b/app/files/CoreGui/107893730 @@ -0,0 +1,1107 @@ +-- this script creates the gui and sends the web requests for in game purchase prompts + +-- wait for important items to appear +while not Game do + wait(0.1) +end +while not game:GetService("MarketplaceService") do + wait(0.1) +end +while not game:FindFirstChild("CoreGui") do + wait(0.1) +end +while not game.CoreGui:FindFirstChild("RobloxGui") do + wait(0.1) +end + +-------------------------------- Global Variables ---------------------------------------- +-- utility variables +local RbxUtility = nil +local baseUrl = game:GetService("ContentProvider").BaseUrl:lower() +baseUrl = string.gsub(baseUrl,"/m.","/www.") --mobile site does not work for this stuff! + +-- data variables +local currentProductInfo, currentAssetId, currentCurrencyType, currentCurrencyAmount, currentEquipOnPurchase, currentProductId, currentServerResponseTable +local checkingPlayerFunds = false +local purchasingConsumable = false + +-- gui variables +local currentlyPrompting = false +local currentlyPurchasing = false +local purchaseDialog, errorDialog = nil +local tweenTime = 0.3 +local showPosition = UDim2.new(0.5,-217,0.5,-146) +local hidePosition = UDim2.new(0.5,-217,1,25) +local isSmallScreen = nil +local spinning = false +local spinnerIcons = nil +local smallScreenThreshold = 450 +local renderSteppedConnection = nil + +local modalEnabledFix = false +local success = pcall(function() modalEnabledFix = settings():GetFFlag("FixModalEnabledOniOS") end) +if not success then + modalEnabledFix = false +end + +-- user facing images +local assetUrls = {} +local assetUrl = "http://www.syntax.eco/Asset/?id=" +local errorImageUrl = assetUrl .. "42557901" table.insert(assetUrls, errorImageUrl) +local buyImageUrl = assetUrl .. "142494143" table.insert(assetUrls,buyImageUrl) +local cancelButtonImageUrl = assetUrl .. "142494219" table.insert(assetUrls, cancelButtonImageUrl) +local freeButtonImageDownUrl = assetUrl .. "104651761" table.insert(assetUrls, freeButtonImageDownUrl) +local loadingImage = assetUrl .. "143116791" table.insert(assetUrls,loadingImage) + +-- user facing string +local buyHeaderText = "Buy Item" +local takeHeaderText = "Take Item" +local buyFailedHeaderText = "An Error Occurred" + +local errorPurchasesDisabledText = "In-game purchases are disabled" +local errorPurchasesUnknownText = "Roblox is performing maintenance" + +local purchaseSucceededText = "Your purchase of itemName succeeded!" +local purchaseFailedText = "Your purchase of itemName failed because errorReason. Your account has not been charged. Please try again soon." +local productPurchaseText = "Would you like to buy the itemName assetType for currencyTypecurrencyAmount?"--"Would you like to buy the itemName assetType from assetOwner for currencyTypecurrencyAmount?" +local productPurchaseTixOnlyText = "Would you like to buy the itemName assetType for currencyAmount currencyType?" --"Would you like to buy the itemName assetType from assetOwner for currencyAmount currencyType?" +local freeItemPurchaseText = "Would you like to take the assetType itemName for FREE?" +local freeItemBalanceText = "Your balance of Robux or Tix will not be affected by this transaction." +local upgradeBCText = "You require an upgrade to your Builders Club membership to purchase this item. Click 'Buy Builders Club' to upgrade." +-------------------------------- End Global Variables ---------------------------------------- + + +----------------------------- Util Functions --------------------------------------------- +function getSecureApiBaseUrl() + local secureApiUrl = baseUrl + secureApiUrl = string.gsub(secureApiUrl,"http","https") + secureApiUrl = string.gsub(secureApiUrl,"www","api") + return secureApiUrl +end + +function getRbxUtility() + if not RbxUtility then + RbxUtility = LoadLibrary("RbxUtility") + end + return RbxUtility +end + +function preloadAssets() + for i = 1, #assetUrls do + game:GetService("ContentProvider"):Preload(assetUrls[i]) + end +end +----------------------------- End Util Functions --------------------------------------------- + + +-------------------------------- Accept/Decline Functions -------------------------------------- +function removeCurrentPurchaseInfo() + currentAssetId = nil + currentCurrencyType = nil + currentCurrencyAmount = nil + currentEquipOnPurchase = nil + currentProductId = nil + currentProductInfo = nil + currentServerResponseTable = nil + + checkingPlayerFunds = false +end + +function userPurchaseActionsEnded(isSuccess) + checkingPlayerFunds = false + + purchaseDialog.BodyFrame.AfterBalanceText.Visible = false + + if isSuccess then -- show the user we bought the item successfully, when they close this dialog we will call signalPromptEnded + local newPurchasedSucceededText = string.gsub( purchaseSucceededText,"itemName", tostring(currentProductInfo["Name"])) + purchaseDialog.BodyFrame.ItemDescription.Text = newPurchasedSucceededText + setButtonsVisible(purchaseDialog.BodyFrame.OkPurchasedButton) + hidePurchasing() + else -- otherwise we didn't purchase, no need to show anything, just signal and close dialog + signalPromptEnded(isSuccess) + end +end + +function signalPromptEnded(isSuccess) + closePurchasePrompt() + if purchasingConsumable then + game:GetService("MarketplaceService"):SignalPromptProductPurchaseFinished(game.Players.LocalPlayer.userId, currentProductId, isSuccess) + else + game:GetService("MarketplaceService"):SignalPromptPurchaseFinished(game.Players.LocalPlayer, currentAssetId, isSuccess) + end + removeCurrentPurchaseInfo() +end + +-- make sure our gui displays the proper purchase data, and set the productid we will try and buy if use specifies a buy action +function updatePurchasePromptData(toggleColoredText) + local newItemDescription = "" + + -- id to use when we request a purchase + if not currentProductId then + currentProductId = currentProductInfo["ProductId"] + end + + if isFreeItem() then + newItemDescription = string.gsub( freeItemPurchaseText,"itemName", tostring(currentProductInfo["Name"])) + newItemDescription = string.gsub( newItemDescription,"assetType", tostring(assetTypeToString(currentProductInfo["AssetTypeId"])) ) + setHeaderText(takeHeaderText) + else -- otherwise item costs something, so different prompt + local purchaseText = productPurchaseText + if currentProductIsTixOnly() then + purchaseText = productPurchaseTixOnlyText + end + + newItemDescription = string.gsub( purchaseText,"itemName", tostring(currentProductInfo["Name"])) + newItemDescription = string.gsub( newItemDescription,"assetType", tostring(assetTypeToString(currentProductInfo["AssetTypeId"])) ) + --newItemDescription = string.gsub( newItemDescription,"assetOwner", tostring(currentProductInfo["Creator"]["Name"]) ) + newItemDescription = string.gsub( newItemDescription,"currencyType", tostring(currencyTypeToString(currentCurrencyType)) ) + newItemDescription = string.gsub( newItemDescription,"currencyAmount", tostring(currentCurrencyAmount)) + setHeaderText(buyHeaderText) + end + + purchaseDialog.BodyFrame.ItemDescription.Text = newItemDescription + + if purchasingConsumable then + purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl .. "thumbs/asset.ashx?assetid=" .. tostring(currentProductInfo["IconImageAssetId"]) .. '&x=100&y=100&format=png' + else + purchaseDialog.BodyFrame.ItemPreview.Image = baseUrl .. "thumbs/asset.ashx?assetid=" .. tostring(currentAssetId) .. '&x=100&y=100&format=png' + end +end + +function checkIfCanPurchase() + if checkingPlayerFunds then + local canPurchase, insufficientFunds, notRightBC = canPurchaseItem() -- check again to see if we can buy item + if not canPurchase or (insufficientFunds or notRightBC) then -- wait a bit and try a few more times + local retries = 1000 + while retries > 0 and (insufficientFunds or notRightBC) and checkingPlayerFunds and canPurchase do + wait(1/10) + canPurchase, insufficientFunds, notRightBC = canPurchaseItem() + retries = retries - 1 + end + end + if canPurchase and not insufficientFunds then + -- we can buy item! set our buttons up and we will exit this loop + setButtonsVisible(purchaseDialog.BodyFrame.BuyButton,purchaseDialog.BodyFrame.CancelButton, purchaseDialog.BodyFrame.AfterBalanceText) + end + end +end + +function closePurchasePrompt() + purchaseDialog:TweenPosition(hidePosition, Enum.EasingDirection.Out, Enum.EasingStyle.Quad, tweenTime, true, function() + game.GuiService:RemoveCenterDialog(purchaseDialog) + hidePurchasing() + + purchaseDialog.Visible = false + currentlyPrompting = false + currentlyPurchasing = false + + if modalEnabledFix then + Game:GetService("UserInputService").ModalEnabled = false + end + end) +end + +function showPurchasePrompt() + local canPurchase, insufficientFunds, notRightBC, override, descText = canPurchaseItem() + + if canPurchase then + updatePurchasePromptData() + + if override and descText then + purchaseDialog.BodyFrame.ItemDescription.Text = descText + purchaseDialog.BodyFrame.AfterBalanceText.Visible = false + end + game.GuiService:AddCenterDialog(purchaseDialog, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + -- set the state for our buttons + purchaseDialog.Visible = true + + if not currentlyPurchasing then + if isFreeItem() then + setButtonsVisible(purchaseDialog.BodyFrame.FreeButton, purchaseDialog.BodyFrame.CancelButton) + elseif notRightBC then + setButtonsVisible(purchaseDialog.BodyFrame.BuyBCButton, purchaseDialog.BodyFrame.CancelButton) + elseif insufficientFunds then + setButtonsVisible(purchaseDialog.BodyFrame.BuyRobuxButton, purchaseDialog.BodyFrame.CancelButton) + elseif override then + if currentProductIsTixOnly() then + purchaseDialog.BodyFrame.AfterBalanceText.Visible = true + end + setButtonsVisible(purchaseDialog.BodyFrame.BuyDisabledButton, purchaseDialog.BodyFrame.CancelButton) + else + setButtonsVisible(purchaseDialog.BodyFrame.BuyButton, purchaseDialog.BodyFrame.CancelButton) + end + end + + if modalEnabledFix then + Game:GetService("UserInputService").ModalEnabled = true + end + purchaseDialog:TweenPosition(showPosition, Enum.EasingDirection.Out, Enum.EasingStyle.Quad, tweenTime, true) + end, + --HideFunction + function() + if modalEnabledFix then + Game:GetService("UserInputService").ModalEnabled = false + end + purchaseDialog.Visible = false + end) + else -- we failed in prompting a purchase, do a decline + doDeclinePurchase() + end +end + +-- given an asset id, this function will grab that asset from the website, and return the first "Tool" object found inside it +function getToolAssetID(assetID) + local newTool = game:GetService("InsertService"):LoadAsset(assetID) + if not newTool then return nil end + + if newTool:IsA("Tool") then + return newTool + end + + local toolChildren = newTool:GetChildren() + for i = 1, #toolChildren do + if toolChildren[i]:IsA("Tool") then + return toolChildren[i] + end + end + return nil +end + +-- the user tried to purchase by clicking the purchase button, but something went wrong. +-- let them know their account was not charged, and that they do not own the item yet. +function purchaseFailed(inGamePurchasesDisabled) + local name = "Item" + if currentProductInfo then name = currentProductInfo["Name"] end + + local newPurchasedFailedText = string.gsub( purchaseFailedText,"itemName", tostring(name)) + if inGamePurchasesDisabled then + newPurchasedFailedText = string.gsub( newPurchasedFailedText,"errorReason", tostring(errorPurchasesDisabledText) ) + else + newPurchasedFailedText = string.gsub( newPurchasedFailedText,"errorReason", tostring(errorPurchasesUnknownText) ) + end + + purchaseDialog.BodyFrame.ItemDescription.Text = newPurchasedFailedText + purchaseDialog.BodyFrame.ItemPreview.Image = errorImageUrl + + setButtonsVisible(purchaseDialog.BodyFrame.OkButton) + + setHeaderText(buyFailedHeaderText) + + hidePurchasing() +end + +-- user has specified they want to buy an item, now try to attempt to buy it for them +function doAcceptPurchase(currencyPreferredByUser) + if currentlyPurchasing then return end + currentlyPurchasing = true + + showPurchasing() -- shows a purchasing ui (shows spinner) + + local startTime = tick() + + -- http call to do the purchase + local response = "none" + local url = nil + + -- consumables need to use a different url + if purchasingConsumable then + url = getSecureApiBaseUrl() .. "marketplace/submitpurchase?productId=" .. tostring(currentProductId) .. + "¤cyTypeId=" .. tostring(currencyEnumToInt(currentCurrencyType)) .. + "&expectedUnitPrice=" .. tostring(currentCurrencyAmount) .. + "&placeId=" .. tostring(Game.PlaceId) + local flagExists, flagValue = pcall(function() settings():GetFFlag("AddRequestIdToDeveloperProductPurchases") end) + if flagExists and flagValue then + local h = game:GetService("HttpService") + url = url .. "&requestId=" .. h:UrlEncode(h:GenerateGUID()) + end + else + url = getSecureApiBaseUrl() .. "marketplace/purchase?productId=" .. tostring(currentProductId) .. + "¤cyTypeId=" .. tostring(currencyEnumToInt(currentCurrencyType)) .. + "&purchasePrice=" .. tostring(currentCurrencyAmount) .. + "&locationType=Game" .. "&locationId=" .. Game.PlaceId + end + + local success, reason = ypcall(function() + response = game:HttpPostAsync(url, "RobloxPurchaseRequest") + end) + + -- debug output for us (found in the logs from local) + print("doAcceptPurchase success from ypcall is ",success,"reason is",reason) + + if (tick() - startTime) < 1 then + wait(1) -- allow the purchasing waiting dialog to at least be readable (otherwise it might flash, looks bad)... + end + + -- check to make sure purchase actually happened on the web end + if response == "none" or response == nil or response == '' then + print("did not get a proper response from web on purchase of",currentAssetId,currentProductId) + purchaseFailed() + return + end + + -- parse our response, decide how to react + response = getRbxUtility().DecodeJSON(response) + + if response then + if response["success"] == false then + if response["status"] ~= "AlreadyOwned" then + print("web return response of fail on purchase of",currentAssetId,currentProductId) + purchaseFailed( (response["status"] == "EconomyDisabled") ) + return + end + end + else + print("web return response of non parsable JSON on purchase of",currentAssetId) + purchaseFailed() + return + end + + -- check to see if this item was bought, and if we want to equip it (also need to make sure the asset type was gear) + if currentEquipOnPurchase and success and currentAssetId and tonumber(currentProductInfo["AssetTypeId"]) == 19 then + local tool = getToolAssetID(tonumber(currentAssetId)) + if tool then + tool.Parent = game.Players.LocalPlayer.Backpack + end + end + + if purchasingConsumable then + if not response["receipt"] then + print("tried to buy productId, but no receipt returned. productId was",currentProductId) + purchaseFailed() + return + end + Game:GetService("MarketplaceService"):SignalClientPurchaseSuccess( tostring(response["receipt"]), game.Players.LocalPlayer.userId, currentProductId ) + else + userPurchaseActionsEnded(success) + end +end + +-- user pressed the cancel button, just remove all purchasing prompts +function doDeclinePurchase() + if currentlyPurchasing then return end + userPurchaseActionsEnded(false) +end +-------------------------------- End Accept/Decline Functions -------------------------------------- + + +---------------------------------------------- Currency Functions --------------------------------------------- +-- enums have no implicit conversion to numbers in lua, has to have a function to do this +function currencyEnumToInt(currencyEnum) + if currencyEnum == Enum.CurrencyType.Robux or currencyEnum == Enum.CurrencyType.Default then + return 1 + elseif currencyEnum == Enum.CurrencyType.Tix then + return 2 + end +end + +-- oi, this is ugly +function assetTypeToString(assetType) + if assetType == 1 then return "Image" + elseif assetType == 2 then return "T-Shirt" + elseif assetType == 3 then return "Audio" + elseif assetType == 4 then return "Mesh" + elseif assetType == 5 then return "Lua" + elseif assetType == 6 then return "HTML" + elseif assetType == 7 then return "Text" + elseif assetType == 8 then return "Hat" + elseif assetType == 9 then return "Place" + elseif assetType == 10 then return "Model" + elseif assetType == 11 then return "Shirt" + elseif assetType == 12 then return "Pants" + elseif assetType == 13 then return "Decal" + elseif assetType == 16 then return "Avatar" + elseif assetType == 17 then return "Head" + elseif assetType == 18 then return "Face" + elseif assetType == 19 then return "Gear" + elseif assetType == 21 then return "Badge" + elseif assetType == 22 then return "Group Emblem" + elseif assetType == 24 then return "Animation" + elseif assetType == 25 then return "Arms" + elseif assetType == 26 then return "Legs" + elseif assetType == 27 then return "Torso" + elseif assetType == 28 then return "Right Arm" + elseif assetType == 29 then return "Left Arm" + elseif assetType == 30 then return "Left Leg" + elseif assetType == 31 then return "Right Leg" + elseif assetType == 32 then return "Package" + elseif assetType == 33 then return "YouTube Video" + elseif assetType == 34 then return "Game Pass" + elseif assetType == 0 then return "Product" + end + + return "" +end + +function currencyTypeToString(currencyType) + if currencyType == Enum.CurrencyType.Tix then + return "Tix" + else + return "R$" + end +end + +-- figure out what currency to use based on the currency you can actually sell the item in and what the script specified +function setCurrencyAmountAndType(priceInRobux, priceInTix) + if currentCurrencyType == Enum.CurrencyType.Default or currentCurrencyType == Enum.CurrencyType.Robux then -- sell for default (user doesn't care) or robux + if priceInRobux ~= nil and priceInRobux ~= 0 then -- we can sell for robux + currentCurrencyAmount = priceInRobux + currentCurrencyType = Enum.CurrencyType.Robux + else -- have to use tix + currentCurrencyAmount = priceInTix + currentCurrencyType = Enum.CurrencyType.Tix + end + elseif currentCurrencyType == Enum.CurrencyType.Tix then -- we want to sell for tix + if priceInTix ~= nil and priceInTix ~= 0 then -- we can sell for tix + currentCurrencyAmount = priceInTix + currentCurrencyType = Enum.CurrencyType.Tix + else -- have to use robux + currentCurrencyAmount = priceInRobux + currentCurrencyType = Enum.CurrencyType.Robux + end + else + return false + end + + if currentCurrencyAmount == nil then + return false + end + + return true +end + +-- will get the player's balance of robux and tix, return in a table +function getPlayerBalance() + local playerBalance = nil + local success, errorCode = ypcall(function() playerBalance = game:HttpGetAsync(getSecureApiBaseUrl() .. "currency/balance") end) + if not success then + print("Get player balance failed because",errorCode) + return nil + end + + if playerBalance == '' then + return nil + end + + playerBalance = getRbxUtility().DecodeJSON(playerBalance) + + return playerBalance +end + +-- should open an external default browser window to this url +function openBuyCurrencyWindow() + checkingPlayerFunds = true + game:GetService("GuiService"):OpenBrowserWindow(baseUrl .. "Upgrades/Robux.aspx") +end + +function openBCUpSellWindow() + checkingPlayerFunds = true + Game:GetService('GuiService'):OpenBrowserWindow(baseUrl .. "Upgrades/BuildersClubMemberships.aspx") +end + +-- set up the gui text at the bottom of the prompt (alerts user to how much money they will have left, or if they need to buy more to buy the item) +function updateAfterBalanceText(playerBalance, notRightBc) + if isFreeItem() then + purchaseDialog.BodyFrame.AfterBalanceText.Text = freeItemBalanceText + return true, false + end + + local keyWord = nil + if currentCurrencyType == Enum.CurrencyType.Robux then + keyWord = "robux" + elseif currentCurrencyType == Enum.CurrencyType.Tix then + keyWord = "tickets" + end + + if not keyWord then + return false + end + + local playerBalanceNumber = tonumber(playerBalance[keyWord]) + if not playerBalanceNumber then + return false + end + + local afterBalanceNumber = playerBalanceNumber - currentCurrencyAmount + + -- check to see if we have enough of the desired currency to allow a purchase, if not we need to prompt user to buy robux + if not notRightBc then + if afterBalanceNumber < 0 and keyWord == "robux" then + purchaseDialog.BodyFrame.AfterBalanceText.Text = "You need " .. currencyTypeToString(currentCurrencyType) .. tostring(-afterBalanceNumber) .. " more to buy this, click 'Buy R$' to purchase more." + return true, true + elseif afterBalanceNumber < 0 and keyWord == "tickets" then + purchaseDialog.BodyFrame.AfterBalanceText.Text = "You need " .. tostring(-afterBalanceNumber) .. " " .. currencyTypeToString(currentCurrencyType) .. " more to buy this item." + return true, true -- user can't buy more tickets, so we say fail the transaction (maybe instead we can prompt them to trade currency???) + end + else + purchaseDialog.BodyFrame.AfterBalanceText.Text = upgradeBCText + return true, false + end + + if currentProductIsTixOnly() then + purchaseDialog.BodyFrame.AfterBalanceText.Text = "Your balance after this transaction will be " .. tostring(afterBalanceNumber) .. " " .. currencyTypeToString(currentCurrencyType) .. "." + else + purchaseDialog.BodyFrame.AfterBalanceText.Text = "Your balance after this transaction will be " .. currencyTypeToString(currentCurrencyType) .. tostring(afterBalanceNumber) .. "." + end + purchaseDialog.BodyFrame.AfterBalanceText.Visible = true + return true, false +end + +function isFreeItem() + -- if both of these are true, then the item is free, just prompt user if they want to take one + return currentProductInfo and currentProductInfo["IsForSale"] == true and currentProductInfo["IsPublicDomain"] == true +end +---------------------------------------------- End Currency Functions --------------------------------------------- + + +---------------------------------------------- Data Functions ----------------------------------------------------- + +-- more enum to int fun! +function membershipTypeToNumber(membership) + if membership == Enum.MembershipType.None then + return 0 + elseif membership == Enum.MembershipType.BuildersClub then + return 1 + elseif membership == Enum.MembershipType.TurboBuildersClub then + return 2 + elseif membership == Enum.MembershipType.OutrageousBuildersClub then + return 3 + end + + return -1 +end + +function currentProductIsTixOnly() + local priceInRobux = currentProductInfo["PriceInRobux"] + local priceInTix = currentProductInfo["PriceInTickets"] + + if priceInRobux == nil then return true end + priceInRobux = tonumber(priceInRobux) + if priceInRobux == nil then return true end + + if priceInTix == nil then return false end + priceInTix = tonumber(priceInTix) + if priceInTix == nil then return false end + + return (priceInRobux <= 0 and priceInTix > 0) +end + +-- This functions checks to make sure the purchase is even possible, if not it returns false and we don't prompt user (some situations require user feedback when we won't prompt) +function canPurchaseItem() + + -- first we see if player already owns the asset/get the productinfo + local playerOwnsAsset = false + local notRightBc = false + local descText = nil + + if purchasingConsumable then + currentProductInfo = game:GetService("MarketplaceService"):GetProductInfo(currentProductId, Enum.InfoType.Product) + else + currentProductInfo = game:GetService("MarketplaceService"):GetProductInfo(currentAssetId) + end + + if currentProductInfo == nil then + descText = "In-game sales are temporarily disabled. Please try again later." + return true, nil, nil, true, descText + end + + if not purchasingConsumable then + if not currentAssetId then + return false + end + if currentAssetId <= 0 then + return false + end + + local success, errorCode = ypcall(function() playerOwnsAsset = game:HttpGetAsync(getSecureApiBaseUrl() + .. "ownership/hasAsset?userId=" + .. tostring(game.Players.LocalPlayer.userId) + .. "&assetId=" .. tostring(currentAssetId)) + end) + + if not success then + return false + end + + if playerOwnsAsset == true or playerOwnsAsset == "true" then + descText = "You already own this item." + return true, nil, nil, true, descText + end + end + + purchaseDialog.BodyFrame.AfterBalanceText.Visible = true + + -- next we parse through product info and see if we can purchase + + if type(currentProductInfo) ~= "table" then + currentProductInfo = getRbxUtility().DecodeJSON(currentProductInfo) + end + + if not currentProductInfo then + descText = "Could not get product info. Please try again later." + return true, nil, nil, true, descText + end + + if currentProductInfo["IsForSale"] == false and currentProductInfo["IsPublicDomain"] == false then + descText = "This item is no longer for sale." + return true, nil, nil, true, descText + end + + -- now we start talking money, making sure we are going to be able to purchase this + if not setCurrencyAmountAndType(tonumber(currentProductInfo["PriceInRobux"]), tonumber(currentProductInfo["PriceInTickets"])) then + descText = "We could retrieve the price of the item correctly. Please try again later." + return true, nil, nil, true, descText + end + + local playerBalance = getPlayerBalance() + if not playerBalance then + descText = "Could not retrieve your balance. Please try again later." + return true, nil, nil, true, descText + end + + if tonumber(currentProductInfo["MinimumMembershipLevel"]) > membershipTypeToNumber(game.Players.LocalPlayer.MembershipType) then + notRightBc = true + end + + local updatedBalance, insufficientFunds = updateAfterBalanceText(playerBalance, notRightBc) + + if notRightBc then + purchaseDialog.BodyFrame.AfterBalanceText.Active = true + return true, insufficientFunds, notRightBc, false + end + + if currentProductInfo["ContentRatingTypeId"] == 1 then + if game.Players.LocalPlayer:GetUnder13() then + descText = "Your account is under 13 so purchase of this item is not allowed." + return true, nil, nil, true, descText + end + end + + if (currentProductInfo["IsLimited"] == true or currentProductInfo["IsLimitedUnique"] == true) and + (currentProductInfo["Remaining"] == "" or currentProductInfo["Remaining"] == 0 or currentProductInfo["Remaining"] == nil) then + descText = "All copies of this item have been sold out! Try buying from other users on www.roblox.com." + return true, nil, nil, true, descText + end + + if not updatedBalance then + descText = 'Could not update your balance. Please check back after some time.' + return true, nil, nil, true, descText + end + + if insufficientFunds then + -- if this is a ticket only time and we don't have enough, tell the user to get more tix + if currentProductIsTixOnly() then + descText = "This item costs more tickets than you currently have! Try trading currency on www.roblox.com to get more tickets." + return true, nil, nil, true, descText + end + end + + -- we use insufficient funds to display a prompt to buy more robux + return true, insufficientFunds +end + +---------------------------------------------- End Data Functions ----------------------------------------------------- + + +---------------------------------------------- Gui Functions ---------------------------------------------- +function startSpinner() + renderSteppedConnection = Game:GetService("RunService").RenderStepped:connect(function() + purchaseDialog.PurchasingFrame.PurchasingSpinnerOuter.Rotation = purchaseDialog.PurchasingFrame.PurchasingSpinnerOuter.Rotation + 7 + purchaseDialog.PurchasingFrame.PurchasingSpinnerInner.Rotation = purchaseDialog.PurchasingFrame.PurchasingSpinnerInner.Rotation - 9 + end) +end + +function stopSpinner() + if renderSteppedConnection then + renderSteppedConnection:disconnect() + renderSteppedConnection = nil + end +end + +-- next two functions control the "Purchasing..." overlay +function showPurchasing() + purchaseDialog.PurchasingFrame.Visible = true + startSpinner() +end + +function hidePurchasing() + purchaseDialog.PurchasingFrame.Visible = false + stopSpinner() +end + +-- convenience method to say exactly what buttons should be visible (all others are not!) +function setButtonsVisible(...) + local args = {...} + local argCount = select('#', ...) + + local bodyFrameChildren = purchaseDialog.BodyFrame:GetChildren() + for i = 1, #bodyFrameChildren do + if bodyFrameChildren[i]:IsA("GuiButton") then + bodyFrameChildren[i].Visible = false + for j = 1, argCount do + if bodyFrameChildren[i] == args[j] then + bodyFrameChildren[i].Visible = true + break + end + end + end + end +end + +-- all the gui init. Would be nice if this didn't have to be a script +function createPurchasePromptGui() + purchaseDialog = Instance.new("Frame") + purchaseDialog.Name = "PurchaseFrame" + purchaseDialog.Size = UDim2.new(0,435,0,292) + purchaseDialog.Position = hidePosition + purchaseDialog.Active = true + purchaseDialog.Visible = false + purchaseDialog.BackgroundColor3 = Color3.new(225/255,225/255,225/255) + purchaseDialog.BorderSizePixel = 0 + purchaseDialog.Parent = game.CoreGui.RobloxGui + + local bodyFrame = Instance.new("Frame") + bodyFrame.Name = "BodyFrame" + bodyFrame.Active = true + bodyFrame.Size = UDim2.new(1,-10,1,-55) + bodyFrame.Position = UDim2.new(0,5,0,50) + bodyFrame.BackgroundColor3 = Color3.new(1, 1, 1) + bodyFrame.BorderSizePixel = 0 + bodyFrame.ZIndex = 8 + bodyFrame.Parent = purchaseDialog + + local titleLabel = createTextObject("TitleLabel", "Buy Item", "TextLabel", Enum.FontSize.Size36) + titleLabel.Active = true + titleLabel.Font = Enum.Font.SourceSansBold + titleLabel.TextColor3 = Color3.new(54/255,54/255,54/255) + titleLabel.ZIndex = 8 + titleLabel.Size = UDim2.new(1,0,0,50) + titleLabel.Parent = purchaseDialog + + local distanceBetweenButtons = 20 + + local cancelButton = createImageButton("CancelButton") + cancelButton.Position = UDim2.new(0.5,(distanceBetweenButtons/2),1,-100) + cancelButton.BorderColor3 = Color3.new(86/255,86/255,86/255) + cancelButton.Parent = bodyFrame + cancelButton.Modal = true + cancelButton.ZIndex = 8 + cancelButton.Image = cancelButtonImageUrl + cancelButton.MouseButton1Up:connect(function( ) + cancelButton.Image = cancelButtonImageUrl + end) + cancelButton.MouseLeave:connect(function( ) + cancelButton.Image = cancelButtonImageUrl + end) + cancelButton.MouseButton1Click:connect(doDeclinePurchase) + + local cancelText = createTextObject("CancelText","Cancel","TextLabel",Enum.FontSize.Size24) + cancelText.TextColor3 = Color3.new(1,1,1) + cancelText.Size = UDim2.new(1,0,1,0) + cancelText.ZIndex = 8 + cancelText.Parent = cancelButton + + local cancelHoverFrame = Instance.new("Frame") + cancelHoverFrame.Name = "HoverFrame" + cancelHoverFrame.Size = UDim2.new(1,0,1,0) + cancelHoverFrame.BackgroundColor3 = Color3.new(1,1,1) + cancelHoverFrame.BackgroundTransparency = 0.7 + cancelHoverFrame.BorderSizePixel = 0 + cancelHoverFrame.Visible = false + cancelHoverFrame.ZIndex = 8 + cancelHoverFrame.Parent = cancelButton + cancelButton.MouseEnter:connect(function() + cancelHoverFrame.Visible = true + end) + cancelButton.MouseLeave:connect(function( ) + cancelHoverFrame.Visible = false + end) + cancelButton.MouseButton1Click:connect(function( ) + cancelHoverFrame.Visible = false + end) + + local buyButton = createImageButton("BuyButton") + buyButton.Position = UDim2.new(0.5,-117-(distanceBetweenButtons/2),1,-100) + buyButton.BorderColor3 = Color3.new(0,112/255,1/255) + buyButton.Image = buyImageUrl + buyButton.ZIndex = 8 + buyButton.Parent = bodyFrame + + local buyText = createTextObject("BuyText","Buy Now","TextLabel",Enum.FontSize.Size24) + buyText.ZIndex = 8 + buyText.TextColor3 = Color3.new(1,1,1) + buyText.Size = UDim2.new(1,0,1,0) + buyText.Parent = buyButton + + local buyHoverFrame = cancelHoverFrame:Clone() + buyButton.MouseEnter:connect(function() + buyHoverFrame.Visible = true + end) + buyButton.MouseLeave:connect(function( ) + buyHoverFrame.Visible = false + end) + buyButton.MouseButton1Click:connect(function( ) + buyHoverFrame.Visible = false + end) + buyHoverFrame.Parent = buyButton + + local buyDisabledButton = buyButton:Clone() + buyDisabledButton.Name = "BuyDisabledButton" + buyDisabledButton.AutoButtonColor = false + buyDisabledButton.Visible = false + buyDisabledButton.Active = false + buyDisabledButton.Parent = bodyFrame + + local buyRobux = buyButton:Clone() + buyRobux.Name = "BuyRobuxButton" + buyRobux.AutoButtonColor = false + buyRobux.Visible = false + buyRobux.ZIndex = 8 + buyRobux.BuyText.Text = "Buy R$" + buyRobux.MouseEnter:connect(function() + buyRobux.HoverFrame.Visible = true + end) + buyRobux.MouseLeave:connect(function( ) + buyRobux.HoverFrame.Visible = false + end) + buyRobux.MouseButton1Click:connect(function( ) + buyRobux.HoverFrame.Visible = false + openBuyCurrencyWindow() + end) + buyRobux.Parent = bodyFrame + + local buyBC = buyRobux:Clone() + buyBC.Name = "BuyBCButton" + buyBC.BuyText.Text = "Buy Builders Club" + buyBC.MouseEnter:connect(function() + buyBC.HoverFrame.Visible = true + end) + buyBC.MouseLeave:connect(function( ) + buyBC.HoverFrame.Visible = false + end) + buyBC.MouseButton1Click:connect(function( ) + buyBC.HoverFrame.Visible = false + openBCUpSellWindow() + end) + buyBC.Parent = bodyFrame + + local freeButton = buyButton:Clone() + freeButton.BuyText.Text = "Take Free" + freeButton.BackgroundTransparency = 1 + freeButton.Name = "FreeButton" + freeButton.Visible = false + freeButton.MouseEnter:connect(function() + freeButton.HoverFrame.Visible = true + end) + freeButton.MouseButton1Click:connect(function( ) + freeButton.HoverFrame.Visible = false + end) + freeButton.MouseLeave:connect(function( ) + freeButton.HoverFrame.Visible = false + end) + freeButton.Parent = bodyFrame + + local okButton = buyButton:Clone() + okButton.BuyText.Text = "Ok" + okButton.Name = "OkButton" + okButton.Visible = false + okButton.Position = UDim2.new(0.5,-okButton.Size.X.Offset/2,1,-100) + okButton.Modal = true + okButton.MouseEnter:connect(function() + okButton.HoverFrame.Visible = true + end) + okButton.MouseButton1Click:connect(function( ) + okButton.HoverFrame.Visible = false + signalPromptEnded(false) + end) + okButton.MouseLeave:connect(function( ) + okButton.HoverFrame.Visible = false + end) + okButton.Parent = bodyFrame + + local okPurchasedButton = okButton:Clone() + okPurchasedButton.Name = "OkPurchasedButton" + okPurchasedButton.MouseEnter:connect(function() + okPurchasedButton.HoverFrame.Visible = true + end) + okPurchasedButton.MouseLeave:connect(function( ) + okPurchasedButton.HoverFrame.Visible = false + end) + okPurchasedButton.MouseButton1Click:connect(function() + okPurchasedButton.HoverFrame.Visible = false + if purchasingConsumable then + userPurchaseProductActionsEnded(true) + else + signalPromptEnded(true) + end + end) + okPurchasedButton.Parent = bodyFrame + + buyButton.MouseButton1Click:connect(function() doAcceptPurchase(Enum.CurrencyType.Robux) end) + freeButton.MouseButton1Click:connect(function() doAcceptPurchase(false) end) + + local itemPreview = Instance.new("ImageLabel") + itemPreview.Name = "ItemPreview" + itemPreview.BackgroundTransparency = 1 + itemPreview.BorderSizePixel = 0 + itemPreview.Position = UDim2.new(0,20,0,20) + itemPreview.Size = UDim2.new(0,100,0,100) + itemPreview.ZIndex = 9 + itemPreview.Parent = bodyFrame + + local itemDescription = createTextObject("ItemDescription","","TextLabel",Enum.FontSize.Size18) + itemDescription.TextXAlignment = Enum.TextXAlignment.Left + itemDescription.Position = UDim2.new(0.5, -70, 0, 10) + itemDescription.Size = UDim2.new(0,245,0,115) + itemDescription.TextColor3 = Color3.new(54/255,54/255,54/255) + itemDescription.ZIndex = 8 + itemDescription.Parent = bodyFrame + + local afterBalanceText = createTextObject("AfterBalanceText","","TextLabel",Enum.FontSize.Size14) + afterBalanceText.BackgroundTransparency = 1 + afterBalanceText.TextColor3 = Color3.new(102/255,102/255,102/255) + afterBalanceText.Position = UDim2.new(0,5,1,-33) + afterBalanceText.Size = UDim2.new(1,-10,0,28) + afterBalanceText.ZIndex = 8 + afterBalanceText.Parent = bodyFrame + + local purchasingFrame = Instance.new("Frame") + purchasingFrame.Name = "PurchasingFrame" + purchasingFrame.Size = UDim2.new(1,0,1,0) + purchasingFrame.BackgroundColor3 = Color3.new(0,0,0) + purchasingFrame.BackgroundTransparency = 0.05 + purchasingFrame.BorderSizePixel = 0 + purchasingFrame.ZIndex = 9 + purchasingFrame.Visible = false + purchasingFrame.Active = true + purchasingFrame.Parent = purchaseDialog + + local purchasingLabel = createTextObject("PurchasingLabel","Purchasing","TextLabel",Enum.FontSize.Size48) + purchasingLabel.Size = UDim2.new(1,0,1,0) + purchasingLabel.Position = UDim2.new(0,0,0,-24) + purchasingLabel.ZIndex = 10 + purchasingLabel.Parent = purchasingFrame + + local purchasingSpinner = Instance.new("ImageLabel") + purchasingSpinner.Name = "PurchasingSpinnerOuter" + purchasingSpinner.Image = loadingImage + purchasingSpinner.BackgroundTransparency = 1 + purchasingSpinner.BorderSizePixel = 0 + purchasingSpinner.Size = UDim2.new(0,64,0,64) + purchasingSpinner.Position = UDim2.new(0.5,-32,0.5,32) + purchasingSpinner.ZIndex = 10 + purchasingSpinner.Parent = purchasingFrame + + local purchasingSpinnerInner = purchasingSpinner:Clone() + purchasingSpinnerInner.BackgroundTransparency = 1 + purchasingSpinnerInner.Name = "PurchasingSpinnerInner" + purchasingSpinnerInner.Size = UDim2.new(0,32,0,32) + purchasingSpinnerInner.Position = UDim2.new(0.5,-16,0.5,48) + purchasingSpinnerInner.Parent = purchasingFrame +end + +-- next 2 functions are convenienvce creation functions for guis +function createTextObject(name, text, type, size) + local textLabel = Instance.new(type) + textLabel.Font = Enum.Font.SourceSans + textLabel.TextColor3 = Color3.new(217/255, 217/255, 217/255) + textLabel.TextWrapped = true + textLabel.Name = name + textLabel.Text = text + textLabel.BackgroundTransparency = 1 + textLabel.BorderSizePixel = 0 + textLabel.FontSize = size + + return textLabel +end + +function createImageButton(name) + local imageButton = Instance.new("ImageButton") + imageButton.Size = UDim2.new(0,117,0,60) + imageButton.Name = name + return imageButton +end + +function setHeaderText(text) + purchaseDialog.TitleLabel.Text = text +end + +function doPurchasePrompt(player, assetId, equipIfPurchased, currencyType, productId) + if not purchaseDialog then + createPurchasePromptGui() + end + + if player == game.Players.LocalPlayer then + if currentlyPrompting then return end + + currentlyPrompting = true + + currentAssetId = assetId + currentProductId = productId + currentCurrencyType = currencyType + currentEquipOnPurchase = equipIfPurchased + + purchasingConsumable = (currentProductId ~= nil) + + showPurchasePrompt() + end +end + +function userPurchaseProductActionsEnded(userIsClosingDialog) + checkingPlayerFunds = false + + if userIsClosingDialog then + closePurchasePrompt() + if currentServerResponseTable then + local isPurchased = false + if tostring(currentServerResponseTable["isValid"]):lower() == "true" then + isPurchased = true + end + + Game:GetService("MarketplaceService"):SignalPromptProductPurchaseFinished(tonumber(currentServerResponseTable["playerId"]), tonumber(currentServerResponseTable["productId"]), isPurchased) + end + removeCurrentPurchaseInfo() + else + if tostring(currentServerResponseTable["isValid"]):lower() == "true" then + local newPurchasedSucceededText = string.gsub( purchaseSucceededText,"itemName", tostring(currentProductInfo["Name"])) + purchaseDialog.BodyFrame.ItemDescription.Text = newPurchasedSucceededText + setButtonsVisible(purchaseDialog.BodyFrame.OkPurchasedButton) + hidePurchasing() + else + purchaseFailed() + end + end +end + +function doProcessServerPurchaseResponse(serverResponseTable) + if not serverResponseTable then + purchaseFailed() + return + end + + if serverResponseTable["playerId"] and tonumber(serverResponseTable["playerId"]) == game.Players.LocalPlayer.userId then + currentServerResponseTable = serverResponseTable + userPurchaseProductActionsEnded(false) + end +end + +---------------------------------------------- End Gui Functions ---------------------------------------------- + + +---------------------------------------------- Script Event start/initialization ---------------------------------------------- +preloadAssets() + +game:GetService("MarketplaceService").PromptProductPurchaseRequested:connect(function(player, productId, equipIfPurchased, currencyType) + doPurchasePrompt(player, nil, equipIfPurchased, currencyType, productId) +end) + +Game:GetService("MarketplaceService").PromptPurchaseRequested:connect(function(player, assetId, equipIfPurchased, currencyType) + doPurchasePrompt(player, assetId, equipIfPurchased, currencyType, nil) +end) + +Game:GetService("MarketplaceService").ServerPurchaseVerification:connect(function(serverResponseTable) + doProcessServerPurchaseResponse(serverResponseTable) +end) + +Game:GetService("GuiService").BrowserWindowClosed:connect(checkIfCanPurchase) diff --git a/app/files/CoreGui/152908679 b/app/files/CoreGui/152908679 new file mode 100644 index 0000000..f574e4c --- /dev/null +++ b/app/files/CoreGui/152908679 @@ -0,0 +1,264 @@ +-- ContextActionTouch.lua +-- Copyright ROBLOX 2014, created by Ben Tkacheff +-- this script controls ui and firing of lua functions that are bound in ContextActionService for touch inputs +-- Essentially a user can bind a lua function to a key code, input type (mousebutton1 etc.) and this + +-- Variables +local contextActionService = Game:GetService("ContextActionService") +local isTouchDevice = Game:GetService("UserInputService").TouchEnabled +local functionTable = {} +local buttonVector = {} +local buttonScreenGui = nil +local buttonFrame = nil + +local ContextDownImage = "http://www.syntax.eco/asset/?id=97166756" +local ContextUpImage = "http://www.syntax.eco/asset/?id=97166444" + +local oldTouches = {} + +local buttonPositionTable = { + [1] = UDim2.new(0,123,0,70), + [2] = UDim2.new(0,30,0,60), + [3] = UDim2.new(0,180,0,160), + [4] = UDim2.new(0,85,0,-25), + [5] = UDim2.new(0,185,0,-25), + [6] = UDim2.new(0,185,0,260), + [7] = UDim2.new(0,216,0,65) + } +local maxButtons = #buttonPositionTable + +-- Preload images +Game:GetService("ContentProvider"):Preload(ContextDownImage) +Game:GetService("ContentProvider"):Preload(ContextUpImage) + +while not Game.Players do + wait() +end + +while not Game.Players.LocalPlayer do + wait() +end + +function createContextActionGui() + if not buttonScreenGui and isTouchDevice then + buttonScreenGui = Instance.new("ScreenGui") + buttonScreenGui.Name = "ContextActionGui" + + buttonFrame = Instance.new("Frame") + buttonFrame.BackgroundTransparency = 1 + buttonFrame.Size = UDim2.new(0.3,0,0.5,0) + buttonFrame.Position = UDim2.new(0.7,0,0.5,0) + buttonFrame.Name = "ContextButtonFrame" + buttonFrame.Parent = buttonScreenGui + end +end + +-- functions +function setButtonSizeAndPosition(object) + local buttonSize = 55 + local xOffset = 10 + local yOffset = 95 + + -- todo: better way to determine mobile sized screens + local onSmallScreen = (game.CoreGui.RobloxGui.AbsoluteSize.X < 600) + if not onSmallScreen then + buttonSize = 85 + xOffset = 40 + end + + object.Size = UDim2.new(0,buttonSize,0,buttonSize) +end + +function contextButtonDown(button, inputObject, actionName) + if inputObject.UserInputType == Enum.UserInputType.Touch then + button.Image = ContextDownImage + contextActionService:CallFunction(actionName, Enum.UserInputState.Begin, inputObject) + end +end + +function contextButtonMoved(button, inputObject, actionName) + if inputObject.UserInputType == Enum.UserInputType.Touch then + button.Image = ContextDownImage + contextActionService:CallFunction(actionName, Enum.UserInputState.Change, inputObject) + end +end + +function contextButtonUp(button, inputObject, actionName) + button.Image = ContextUpImage + if inputObject.UserInputType == Enum.UserInputType.Touch and inputObject.UserInputState == Enum.UserInputState.End then + contextActionService:CallFunction(actionName, Enum.UserInputState.End, inputObject) + end +end + +function isSmallScreenDevice() + return Game:GetService("GuiService"):GetScreenResolution().y <= 320 +end + + +function createNewButton(actionName, functionInfoTable) + local contextButton = Instance.new("ImageButton") + contextButton.Name = "ContextActionButton" + contextButton.BackgroundTransparency = 1 + contextButton.Size = UDim2.new(0,90,0,90) + contextButton.Active = true + if isSmallScreenDevice() then + contextButton.Size = UDim2.new(0,70,0,70) + end + contextButton.Image = ContextUpImage + contextButton.Parent = buttonFrame + + local currentButtonTouch = nil + + Game:GetService("UserInputService").InputEnded:connect(function ( inputObject ) + oldTouches[inputObject] = nil + end) + contextButton.InputBegan:connect(function(inputObject) + if oldTouches[inputObject] then return end + + if inputObject.UserInputState == Enum.UserInputState.Begin and currentButtonTouch == nil then + currentButtonTouch = inputObject + contextButtonDown(contextButton, inputObject, actionName) + end + end) + contextButton.InputChanged:connect(function(inputObject) + if oldTouches[inputObject] then return end + if currentButtonTouch ~= inputObject then return end + + contextButtonMoved(contextButton, inputObject, actionName) + end) + contextButton.InputEnded:connect(function(inputObject) + if oldTouches[inputObject] then return end + if currentButtonTouch ~= inputObject then return end + + currentButtonTouch = nil + oldTouches[inputObject] = true + contextButtonUp(contextButton, inputObject, actionName) + end) + + local actionIcon = Instance.new("ImageLabel") + actionIcon.Name = "ActionIcon" + actionIcon.Position = UDim2.new(0.175, 0, 0.175, 0) + actionIcon.Size = UDim2.new(0.65, 0, 0.65, 0) + actionIcon.BackgroundTransparency = 1 + if functionInfoTable["image"] and type(functionInfoTable["image"]) == "string" then + actionIcon.Image = functionInfoTable["image"] + end + actionIcon.Parent = contextButton + + local actionTitle = Instance.new("TextLabel") + actionTitle.Name = "ActionTitle" + actionTitle.Size = UDim2.new(1,0,1,0) + actionTitle.BackgroundTransparency = 1 + actionTitle.Font = Enum.Font.SourceSansBold + actionTitle.TextColor3 = Color3.new(1,1,1) + actionTitle.TextStrokeTransparency = 0 + actionTitle.FontSize = Enum.FontSize.Size18 + actionTitle.TextWrapped = true + actionTitle.Text = "" + if functionInfoTable["title"] and type(functionInfoTable["title"]) == "string" then + actionTitle.Text = functionInfoTable["title"] + end + actionTitle.Parent = contextButton + + return contextButton +end + +function createButton( actionName, functionInfoTable ) + local button = createNewButton(actionName, functionInfoTable) + + local position = nil + for i = 1,#buttonVector do + if buttonVector[i] == "empty" then + position = i + break + end + end + + if not position then + position = #buttonVector + 1 + end + + if position > maxButtons then + return -- todo: let user know we have too many buttons already? + end + + buttonVector[position] = button + functionTable[actionName]["button"] = button + + button.Position = buttonPositionTable[position] + button.Parent = buttonFrame + + if buttonScreenGui and buttonScreenGui.Parent == nil then + buttonScreenGui.Parent = Game.Players.LocalPlayer.PlayerGui + end +end + +function removeAction(actionName) + if not functionTable[actionName] then return end + + local actionButton = functionTable[actionName]["button"] + + if actionButton then + actionButton.Parent = nil + + for i = 1,#buttonVector do + if buttonVector[i] == actionButton then + buttonVector[i] = "empty" + break + end + end + + actionButton:Destroy() + end + + functionTable[actionName] = nil +end + +function addAction(actionName,createTouchButton,functionInfoTable) + if functionTable[actionName] then + removeAction(actionName) + end + functionTable[actionName] = {functionInfoTable} + if createTouchButton and isTouchDevice then + createContextActionGui() + createButton(actionName, functionInfoTable) + end +end + +-- Connections +contextActionService.BoundActionChanged:connect( function(actionName, changeName, changeTable) + if functionTable[actionName] and changeTable then + local button = functionTable[actionName]["button"] + if button then + if changeName == "image" then + button.ActionIcon.Image = changeTable[changeName] + elseif changeName == "title" then + button.ActionTitle.Text = changeTable[changeName] + elseif changeName == "description" then + -- todo: add description to menu + elseif changeName == "position" then + button.Position = changeTable[changeName] + end + end + end +end) + +contextActionService.BoundActionAdded:connect( function(actionName, createTouchButton, functionInfoTable) + addAction(actionName, createTouchButton, functionInfoTable) +end) + +contextActionService.BoundActionRemoved:connect( function(actionName, functionInfoTable) + removeAction(actionName) +end) + +contextActionService.GetActionButtonEvent:connect( function(actionName) + if functionTable[actionName] then + contextActionService:FireActionButtonFoundSignal(actionName, functionTable[actionName]["button"]) + end +end) + +-- make sure any bound data before we setup connections is handled +local boundActions = contextActionService:GetAllBoundActionInfo() +for actionName, actionData in pairs(boundActions) do + addAction(actionName,actionData["createTouchButton"],actionData) +end diff --git a/app/files/CoreGui/153556783 b/app/files/CoreGui/153556783 new file mode 100644 index 0000000..03b2218 --- /dev/null +++ b/app/files/CoreGui/153556783 @@ -0,0 +1,564 @@ +-- This is responsible for all touch controls we show (as of this writing, only on iOS) +-- this includes character move thumbsticks, and buttons for jump, use of items, camera, etc. +-- Written by Ben Tkacheff, Copyright Roblox 2013 + +-- obligatory stuff to make sure we don't access nil data +while not Game do + wait() +end +while not Game:FindFirstChild("Players") do + wait() +end +while not Game.Players.LocalPlayer do + wait() +end +while not Game:FindFirstChild("CoreGui") do + wait() +end +while not Game.CoreGui:FindFirstChild("RobloxGui") do + wait() +end + +local userInputService = Game:GetService("UserInputService") +local success = pcall(function() userInputService:IsLuaTouchControls() end) +if not success then + script:Destroy() +end + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +-- Variables +local screenResolution = Game:GetService("GuiService"):GetScreenResolution() +function isSmallScreenDevice() + return screenResolution.y <= 500 +end + +local localPlayer = Game.Players.LocalPlayer +local thumbstickInactiveAlpha = 0.3 +local thumbstickSize = 120 +if isSmallScreenDevice() then + thumbstickSize = 70 +end + +local touchControlsSheet = "rbxasset://textures/ui/TouchControlsSheet.png" +local ThumbstickDeadZone = 5 +local ThumbstickMaxPercentGive = 0.92 +local thumbstickTouches = {} + +local jumpButtonSize = 90 +if isSmallScreenDevice() then + jumpButtonSize = 70 +end +local oldJumpTouches = {} +local currentJumpTouch = nil + +local CameraRotateSensitivity = 0.007 +local CameraRotateDeadZone = CameraRotateSensitivity * 16 +local CameraZoomSensitivity = 0.03 +local PinchZoomDelay = 0.2 +local cameraTouch = nil + + +-- make sure all of our images are good to go +Game:GetService("ContentProvider"):Preload(touchControlsSheet) + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +-- Functions + +function DistanceBetweenTwoPoints(point1, point2) + local dx = point2.x - point1.x + local dy = point2.y - point1.y + return math.sqrt( (dx*dx) + (dy*dy) ) +end + +function transformFromCenterToTopLeft(pointToTranslate, guiObject) + return UDim2.new(0,pointToTranslate.x - guiObject.AbsoluteSize.x/2,0,pointToTranslate.y - guiObject.AbsoluteSize.y/2) +end + +function rotatePointAboutLocation(pointToRotate, pointToRotateAbout, radians) + local sinAnglePercent = math.sin(radians) + local cosAnglePercent = math.cos(radians) + + local transformedPoint = pointToRotate + + -- translate point back to origin: + transformedPoint = Vector2.new(transformedPoint.x - pointToRotateAbout.x, transformedPoint.y - pointToRotateAbout.y) + + -- rotate point + local xNew = transformedPoint.x * cosAnglePercent - transformedPoint.y * sinAnglePercent + local yNew = transformedPoint.x * sinAnglePercent + transformedPoint.y * cosAnglePercent + + -- translate point back: + transformedPoint = Vector2.new(xNew + pointToRotateAbout.x, yNew + pointToRotateAbout.y) + + return transformedPoint +end + +function dotProduct(v1,v2) + return ((v1.x*v2.x) + (v1.y*v2.y)) +end + +function stationaryThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation) + local thumbstickOuterCenterPosition = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2) + local centerDiff = DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenterPosition) + + -- thumbstick is moving outside our region, need to cap its distance + if centerDiff > (thumbstickSize/2) then + local thumbVector = Vector2.new(touchLocation.x - thumbstickOuterCenterPosition.x,touchLocation.y - thumbstickOuterCenterPosition.y); + local normal = thumbVector.unit + if normal.x == math.nan or normal.x == math.inf then + normal = Vector2.new(0,normal.y) + end + if normal.y == math.nan or normal.y == math.inf then + normal = Vector2.new(normal.x,0) + end + + local newThumbstickInnerPosition = thumbstickOuterCenterPosition + (normal * (thumbstickSize/2)) + thumbstickFrame.Position = transformFromCenterToTopLeft(newThumbstickInnerPosition, thumbstickFrame) + else + thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation,thumbstickFrame) + end + + return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset) +end + +function followThumbstickTouchMove(thumbstickFrame, thumbstickOuter, touchLocation) + local thumbstickOuterCenter = Vector2.new(thumbstickOuter.Position.X.Offset + thumbstickOuter.AbsoluteSize.x/2, thumbstickOuter.Position.Y.Offset + thumbstickOuter.AbsoluteSize.y/2) + + -- thumbstick is moving outside our region, need to position outer thumbstick texture carefully (to make look and feel like actual joystick controller) + if DistanceBetweenTwoPoints(touchLocation, thumbstickOuterCenter) > thumbstickSize/2 then + local thumbstickInnerCenter = Vector2.new(thumbstickFrame.Position.X.Offset + thumbstickFrame.AbsoluteSize.x/2, thumbstickFrame.Position.Y.Offset + thumbstickFrame.AbsoluteSize.y/2) + local movementVectorUnit = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y).unit + + local outerToInnerVectorCurrent = Vector2.new(thumbstickInnerCenter.x - thumbstickOuterCenter.x, thumbstickInnerCenter.y - thumbstickOuterCenter.y) + local outerToInnerVectorCurrentUnit = outerToInnerVectorCurrent.unit + local movementVector = Vector2.new(touchLocation.x - thumbstickInnerCenter.x, touchLocation.y - thumbstickInnerCenter.y) + + -- First, find the angle between the new thumbstick movement vector, + -- and the vector between thumbstick inner and thumbstick outer. + -- We will use this to pivot thumbstick outer around thumbstick inner, gives a nice joystick feel + local crossOuterToInnerWithMovement = (outerToInnerVectorCurrentUnit.x * movementVectorUnit.y) - (outerToInnerVectorCurrentUnit.y * movementVectorUnit.x) + local angle = math.atan2(crossOuterToInnerWithMovement, dotProduct(outerToInnerVectorCurrentUnit, movementVectorUnit)) + local anglePercent = angle * math.min( (movementVector.magnitude)/(outerToInnerVectorCurrent.magnitude), 1.0); + + -- If angle is significant, rotate about the inner thumbsticks current center + if math.abs(anglePercent) > 0.00001 then + local outerThumbCenter = rotatePointAboutLocation(thumbstickOuterCenter, thumbstickInnerCenter, anglePercent) + thumbstickOuter.Position = transformFromCenterToTopLeft(Vector2.new(outerThumbCenter.x,outerThumbCenter.y), thumbstickOuter) + end + + -- now just translate outer thumbstick to make sure it stays nears inner thumbstick + thumbstickOuter.Position = UDim2.new(0,thumbstickOuter.Position.X.Offset+movementVector.x,0,thumbstickOuter.Position.Y.Offset+movementVector.y) + end + + thumbstickFrame.Position = transformFromCenterToTopLeft(touchLocation,thumbstickFrame) + + -- a bit of error checking to make sure thumbsticks stay close to eachother + thumbstickFramePosition = Vector2.new(thumbstickFrame.Position.X.Offset,thumbstickFrame.Position.Y.Offset) + thumbstickOuterPosition = Vector2.new(thumbstickOuter.Position.X.Offset,thumbstickOuter.Position.Y.Offset) + if DistanceBetweenTwoPoints(thumbstickFramePosition, thumbstickOuterPosition) > thumbstickSize/2 then + local vectorWithLength = (thumbstickOuterPosition - thumbstickFramePosition).unit * thumbstickSize/2 + thumbstickOuter.Position = UDim2.new(0,thumbstickFramePosition.x + vectorWithLength.x,0,thumbstickFramePosition.y + vectorWithLength.y) + end + + return Vector2.new(thumbstickFrame.Position.X.Offset - thumbstickOuter.Position.X.Offset,thumbstickFrame.Position.Y.Offset - thumbstickOuter.Position.Y.Offset) +end + +function movementOutsideDeadZone(movementVector) + return ( (math.abs(movementVector.x) > ThumbstickDeadZone) or (math.abs(movementVector.y) > ThumbstickDeadZone) ) +end + +function constructThumbstick(defaultThumbstickPos, updateFunction, stationaryThumbstick) + local thumbstickFrame = Instance.new("Frame") + thumbstickFrame.Name = "ThumbstickFrame" + thumbstickFrame.Active = true + thumbstickFrame.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize) + thumbstickFrame.Position = defaultThumbstickPos + thumbstickFrame.BackgroundTransparency = 1 + + local outerThumbstick = Instance.new("ImageLabel") + outerThumbstick.Name = "OuterThumbstick" + outerThumbstick.Image = touchControlsSheet + outerThumbstick.ImageRectOffset = Vector2.new(0,0) + outerThumbstick.ImageRectSize = Vector2.new(220,220) + outerThumbstick.BackgroundTransparency = 1 + outerThumbstick.Size = UDim2.new(0,thumbstickSize,0,thumbstickSize) + outerThumbstick.Position = defaultThumbstickPos + outerThumbstick.Parent = Game.CoreGui.RobloxGui + + local innerThumbstick = Instance.new("ImageLabel") + innerThumbstick.Name = "InnerThumbstick" + innerThumbstick.Image = touchControlsSheet + innerThumbstick.ImageRectOffset = Vector2.new(220,0) + innerThumbstick.ImageRectSize = Vector2.new(111,111) + innerThumbstick.BackgroundTransparency = 1 + innerThumbstick.Size = UDim2.new(0,thumbstickSize/2,0,thumbstickSize/2) + innerThumbstick.Position = UDim2.new(0, thumbstickFrame.Size.X.Offset/2 - thumbstickSize/4, 0, thumbstickFrame.Size.Y.Offset/2 - thumbstickSize/4) + innerThumbstick.Parent = thumbstickFrame + innerThumbstick.ZIndex = 2 + + local thumbstickTouch = nil + local userInputServiceTouchMovedCon = nil + local userInputSeviceTouchEndedCon = nil + + local startInputTracking = function(inputObject) + if thumbstickTouch then return end + if inputObject == cameraTouch then return end + if inputObject == currentJumpTouch then return end + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + + thumbstickTouch = inputObject + table.insert(thumbstickTouches,thumbstickTouch) + + thumbstickFrame.Position = transformFromCenterToTopLeft(thumbstickTouch.Position,thumbstickFrame) + outerThumbstick.Position = thumbstickFrame.Position + + userInputServiceTouchMovedCon = userInputService.TouchMoved:connect(function(movedInput) + if movedInput == thumbstickTouch then + local movementVector = nil + if stationaryThumbstick then + movementVector = stationaryThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y)) + else + movementVector = followThumbstickTouchMove(thumbstickFrame,outerThumbstick,Vector2.new(movedInput.Position.x,movedInput.Position.y)) + end + + if updateFunction then + updateFunction(movementVector,outerThumbstick.Size.X.Offset/2) + end + end + end) + userInputSeviceTouchEndedCon = userInputService.TouchEnded:connect(function(endedInput) + if endedInput == thumbstickTouch then + if updateFunction then + updateFunction(Vector2.new(0,0),1) + end + + userInputSeviceTouchEndedCon:disconnect() + userInputServiceTouchMovedCon:disconnect() + + thumbstickFrame.Position = defaultThumbstickPos + outerThumbstick.Position = defaultThumbstickPos + + for i, object in pairs(thumbstickTouches) do + if object == thumbstickTouch then + table.remove(thumbstickTouches,i) + break + end + end + thumbstickTouch = nil + end + end) + end + + userInputService.Changed:connect(function(prop) + if prop == "ModalEnabled" then + thumbstickFrame.Visible = not userInputService.ModalEnabled + outerThumbstick.Visible = not userInputService.ModalEnabled + end + end) + + thumbstickFrame.InputBegan:connect(startInputTracking) + return thumbstickFrame +end + +function setupCharacterMovement( parentFrame ) + local lastMovementVector, lastMaxMovement = nil + local moveCharacterFunc = localPlayer.MoveCharacter + local moveCharacterFunction = function ( movementVector, maxMovement ) + if localPlayer then + if movementOutsideDeadZone(movementVector) then + lastMovementVector = movementVector + lastMaxMovement = maxMovement + -- sometimes rounding error will not allow us to go max speed at some + -- thumbstick angles, fix this with a bit of fudging near 100% throttle + if movementVector.magnitude/maxMovement > ThumbstickMaxPercentGive then + maxMovement = movementVector.magnitude - 1 + end + moveCharacterFunc(localPlayer, movementVector, maxMovement) + else + lastMovementVector = Vector2.new(0,0) + lastMaxMovement = 1 + moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement) + end + end + end + + local thumbstickPos = UDim2.new(0,thumbstickSize/2,1,-thumbstickSize*1.75) + if isSmallScreenDevice() then + thumbstickPos = UDim2.new(0,(thumbstickSize/2) - 10,1,-thumbstickSize - 20) + end + local characterThumbstick = constructThumbstick(thumbstickPos, moveCharacterFunction, false) + characterThumbstick.Name = "CharacterThumbstick" + characterThumbstick.Parent = parentFrame + + local refreshCharacterMovement = function() + if localPlayer and moveCharacterFunc and lastMovementVector and lastMaxMovement then + moveCharacterFunc(localPlayer, lastMovementVector, lastMaxMovement) + end + end + return refreshCharacterMovement +end + + +function setupJumpButton( parentFrame ) + local jumpButton = Instance.new("ImageButton") + jumpButton.Name = "JumpButton" + jumpButton.BackgroundTransparency = 1 + jumpButton.Image = touchControlsSheet + jumpButton.ImageRectOffset = Vector2.new(176,222) + jumpButton.ImageRectSize = Vector2.new(174,174) + jumpButton.Size = UDim2.new(0,jumpButtonSize,0,jumpButtonSize) + if isSmallScreenDevice() then + jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.25), 1, -jumpButtonSize - 20) + else + jumpButton.Position = UDim2.new(1, -(jumpButtonSize*2.75), 1, -jumpButtonSize - 120) + end + + local playerJumpFunc = localPlayer.JumpCharacter + + local doJumpLoop = function () + while currentJumpTouch do + if localPlayer then + playerJumpFunc(localPlayer) + end + wait(1/60) + end + end + + jumpButton.InputBegan:connect(function(inputObject) + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + if currentJumpTouch then return end + if inputObject == cameraTouch then return end + for i, touch in pairs(oldJumpTouches) do + if touch == inputObject then + return + end + end + + currentJumpTouch = inputObject + jumpButton.ImageRectOffset = Vector2.new(0,222) + jumpButton.ImageRectSize = Vector2.new(174,174) + doJumpLoop() + end) + jumpButton.InputEnded:connect(function (inputObject) + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + + jumpButton.ImageRectOffset = Vector2.new(176,222) + jumpButton.ImageRectSize = Vector2.new(174,174) + + if inputObject == currentJumpTouch then + table.insert(oldJumpTouches,currentJumpTouch) + currentJumpTouch = nil + end + end) + userInputService.InputEnded:connect(function ( globalInputObject ) + for i, touch in pairs(oldJumpTouches) do + if touch == globalInputObject then + table.remove(oldJumpTouches,i) + break + end + end + end) + + userInputService.Changed:connect(function(prop) + if prop == "ModalEnabled" then + jumpButton.Visible = not userInputService.ModalEnabled + end + end) + + jumpButton.Parent = parentFrame +end + +function isTouchUsedByJumpButton( touch ) + if touch == currentJumpTouch then return true end + for i, touchToCompare in pairs(oldJumpTouches) do + if touch == touchToCompare then + return true + end + end + + return false +end + +function isTouchUsedByThumbstick(touch) + for i, touchToCompare in pairs(thumbstickTouches) do + if touch == touchToCompare then + return true + end + end + + return false +end + +function setupCameraControl(parentFrame, refreshCharacterMoveFunc) + local lastPos = nil + local hasRotatedCamera = false + local rotateCameraFunc = userInputService.RotateCamera + + local pinchTime = -1 + local shouldPinch = false + local lastPinchScale = nil + local zoomCameraFunc = userInputService.ZoomCamera + local pinchTouches = {} + local pinchFrame = nil + + local resetCameraRotateState = function() + cameraTouch = nil + hasRotatedCamera = false + lastPos = nil + end + + local resetPinchState = function () + pinchTouches = {} + lastPinchScale = nil + shouldPinch = false + pinchFrame:Destroy() + pinchFrame = nil + end + + local startPinch = function(firstTouch, secondTouch) + -- track pinching in new frame + if pinchFrame then pinchFrame:Destroy() end -- make sure we didn't track in any mud + pinchFrame = Instance.new("Frame") + pinchFrame.Name = "PinchFrame" + pinchFrame.BackgroundTransparency = 1 + pinchFrame.Parent = parentFrame + pinchFrame.Size = UDim2.new(1,0,1,0) + + pinchFrame.InputChanged:connect(function(inputObject) + if not shouldPinch then + resetPinchState() + return + end + resetCameraRotateState() + + if lastPinchScale == nil then -- first pinch move, just set up scale + if inputObject == firstTouch then + lastPinchScale = (inputObject.Position - secondTouch.Position).magnitude + firstTouch = inputObject + elseif inputObject == secondTouch then + lastPinchScale = (inputObject.Position - firstTouch.Position).magnitude + secondTouch = inputObject + end + else -- we are now actually pinching, do comparison to last pinch size + local newPinchDistance = 0 + if inputObject == firstTouch then + newPinchDistance = (inputObject.Position - secondTouch.Position).magnitude + firstTouch = inputObject + elseif inputObject == secondTouch then + newPinchDistance = (inputObject.Position - firstTouch.Position).magnitude + secondTouch = inputObject + end + if newPinchDistance ~= 0 then + local pinchDiff = newPinchDistance - lastPinchScale + if pinchDiff ~= 0 then + zoomCameraFunc(userInputService, (pinchDiff * CameraZoomSensitivity)) + end + lastPinchScale = newPinchDistance + end + end + end) + pinchFrame.InputEnded:connect(function(inputObject) -- pinch is over, destroy all + if inputObject == firstTouch or inputObject == secondTouch then + resetPinchState() + end + end) + end + + local pinchGestureReceivedTouch = function(inputObject) + if #pinchTouches < 1 then + table.insert(pinchTouches,inputObject) + pinchTime = tick() + shouldPinch = false + elseif #pinchTouches == 1 then + shouldPinch = ( (tick() - pinchTime) <= PinchZoomDelay ) + + if shouldPinch then + table.insert(pinchTouches,inputObject) + startPinch(pinchTouches[1], pinchTouches[2]) + else -- shouldn't ever get here, but just in case + pinchTouches = {} + end + end + end + + parentFrame.InputBegan:connect(function (inputObject) + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + if isTouchUsedByJumpButton(inputObject) then return end + + local usedByThumbstick = isTouchUsedByThumbstick(inputObject) + if not usedByThumbstick then + pinchGestureReceivedTouch(inputObject) + end + + if cameraTouch == nil and not usedByThumbstick then + cameraTouch = inputObject + lastPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y) + lastTick = tick() + end + end) + userInputService.InputChanged:connect(function (inputObject) + if inputObject.UserInputType ~= Enum.UserInputType.Touch then return end + if cameraTouch ~= inputObject then return end + + local newPos = Vector2.new(cameraTouch.Position.x,cameraTouch.Position.y) + local touchDiff = (lastPos - newPos) * CameraRotateSensitivity + + -- first time rotating outside deadzone, just setup for next changed event + if not hasRotatedCamera and (touchDiff.magnitude > CameraRotateDeadZone) then + hasRotatedCamera = true + lastPos = newPos + end + + -- fire everytime after we have rotated out of deadzone + if hasRotatedCamera and (lastPos ~= newPos) then + rotateCameraFunc(userInputService, touchDiff) + refreshCharacterMoveFunc() + lastPos = newPos + end + end) + userInputService.InputEnded:connect(function (inputObject) + if cameraTouch == inputObject or cameraTouch == nil then + resetCameraRotateState() + end + + for i, touch in pairs(pinchTouches) do + if touch == inputObject then + table.remove(pinchTouches,i) + end + end + end) +end + +function setupTouchControls() + local touchControlFrame = Instance.new("Frame") + touchControlFrame.Name = "TouchControlFrame" + touchControlFrame.Size = UDim2.new(1,0,1,0) + touchControlFrame.BackgroundTransparency = 1 + touchControlFrame.Parent = Game.CoreGui.RobloxGui + + local refreshCharacterMoveFunc = setupCharacterMovement(touchControlFrame) + setupJumpButton(touchControlFrame) + setupCameraControl(touchControlFrame, refreshCharacterMoveFunc) + + userInputService.ProcessedEvent:connect(function(inputObject, processed) + if not processed then return end + + -- kill camera pan if the touch is used by some user controls + if inputObject == cameraTouch and inputObject.UserInputState == Enum.UserInputState.Begin then + cameraTouch = nil + end + end) +end + + +---------------------------------------------------------------------------- +---------------------------------------------------------------------------- +-- Start of Script + +if userInputService:IsLuaTouchControls() then + setupTouchControls() +else + script:Destroy() +end \ No newline at end of file diff --git a/app/files/CoreGui/153556822 b/app/files/CoreGui/153556822 new file mode 100644 index 0000000..df1eb7c --- /dev/null +++ b/app/files/CoreGui/153556822 @@ -0,0 +1,247 @@ +--[[ + This script controls the gui the player sees in regards to his or her health. + Can be turned with Game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health,false) + Copyright ROBLOX 2014. Written by Ben Tkacheff. +--]] + +--------------------------------------------------------------------- +-- Initialize/Variables +while not Game do + wait(1/60) +end +while not Game.Players do + wait(1/60) +end + +local useCoreHealthBar = false +local success = pcall(function() useCoreHealthBar = Game.Players:GetUseCoreScriptHealthBar() end) +if not success or not useCoreHealthBar then + return +end + +local currentHumanoid = nil + +local HealthGui = nil +local lastHealth = 100 +local HealthPercentageForOverlay = 5 +local maxBarTweenTime = 0.3 + +local guiEnabled = false +local healthChangedConnection = nil +local humanoidDiedConnection = nil +local characterAddedConnection = nil + +local greenBarImage = "http://www.syntax.eco/asset/?id=35238053" +local redBarImage = "http://www.syntax.eco/asset/?id=35238036" +local goldBarImage = "http://www.syntax.eco/asset/?id=154646431" -- for god mode +local hurtOverlayImage = "http://www.syntax.eco/asset/?id=34854607" + +Game:GetService("ContentProvider"):Preload(greenBarImage) +Game:GetService("ContentProvider"):Preload(redBarImage) +Game:GetService("ContentProvider"):Preload(goldBarImage) +Game:GetService("ContentProvider"):Preload(hurtOverlayImage) + +while not Game.Players.LocalPlayer do + wait(1/60) +end + +--------------------------------------------------------------------- +-- Functions + +function CreateGui() + if HealthGui and #HealthGui:GetChildren() > 0 then + HealthGui.Parent = Game.CoreGui.RobloxGui + return + end + + local hurtOverlay = Instance.new("ImageLabel") + hurtOverlay.Name = "HurtOverlay" + hurtOverlay.BackgroundTransparency = 1 + hurtOverlay.Image = hurtOverlayImage + hurtOverlay.Position = UDim2.new(-10,0,-10,0) + hurtOverlay.Size = UDim2.new(20,0,20,0) + hurtOverlay.Visible = false + hurtOverlay.Parent = HealthGui + + local healthFrame = Instance.new("Frame") + healthFrame.Name = "HealthFrame" + healthFrame.BackgroundColor3 = Color3.new(0,0,0) + healthFrame.BorderColor3 = Color3.new(0,0,0) + healthFrame.Position = UDim2.new(0.5,-85,1,-22) + healthFrame.Size = UDim2.new(0,170,0,18) + healthFrame.Parent = HealthGui + + local healthBar = Instance.new("ImageLabel") + healthBar.Name = "HealthBar" + healthBar.BackgroundTransparency = 1 + healthBar.Image = greenBarImage + healthBar.Size = UDim2.new(1,0,1,0) + healthBar.Parent = healthFrame + + local healthLabel = Instance.new("TextLabel") + healthLabel.Name = "HealthLabel" + + healthLabel.Text = "Health " -- gives room at end of health bar + healthLabel.Font = Enum.Font.SourceSansBold + healthLabel.FontSize = Enum.FontSize.Size14 + healthLabel.TextColor3 = Color3.new(1,1,1) + healthLabel.TextStrokeTransparency = 0 + healthLabel.TextXAlignment = Enum.TextXAlignment.Right + + healthLabel.BackgroundTransparency = 1 + healthLabel.Size = UDim2.new(1,0,1,0) + healthLabel.Parent = healthFrame + + HealthGui.Parent = Game.CoreGui.RobloxGui +end + +function UpdateGui(health) + if not HealthGui then return end + + local healthFrame = HealthGui:FindFirstChild("HealthFrame") + if not healthFrame then return end + + local healthBar = healthFrame:FindFirstChild("HealthBar") + if not healthBar then return end + + -- If more than 1/4 health, bar = green. Else, bar = red. + local percentHealth = (health/currentHumanoid.MaxHealth) + + if percentHealth ~= percentHealth then + percentHealth = 1 + healthBar.Image = goldBarImage + elseif percentHealth > 0.25 then + healthBar.Image = greenBarImage + else + healthBar.Image = redBarImage + end + + local width = (health / currentHumanoid.MaxHealth) + width = math.max(math.min(width,1),0) -- make sure width is between 0 and 1 + if width ~= width then width = 1 end + + local healthDelta = lastHealth - health + lastHealth = health + + local percentOfTotalHealth = math.abs(healthDelta/currentHumanoid.MaxHealth) + percentOfTotalHealth = math.max(math.min(percentOfTotalHealth,1),0) -- make sure percentOfTotalHealth is between 0 and 1 + if percentOfTotalHealth ~= percentOfTotalHealth then percentOfTotalHealth = 1 end + + local newHealthSize = UDim2.new(width,0,1,0) + + if healthBar:IsDescendantOf(Game) then + healthBar:TweenSize(newHealthSize, Enum.EasingDirection.InOut, Enum.EasingStyle.Linear, percentOfTotalHealth * maxBarTweenTime, true) + else + healthBar.Size = newHealthSize + end + + local thresholdForHurtOverlay = currentHumanoid.MaxHealth * (HealthPercentageForOverlay/100) + + if healthDelta >= thresholdForHurtOverlay then + AnimateHurtOverlay() + end +end + +function AnimateHurtOverlay() + if not HealthGui then return end + + local overlay = HealthGui:FindFirstChild("HurtOverlay") + if not overlay then return end + + local newSize = UDim2.new(20, 0, 20, 0) + local newPos = UDim2.new(-10, 0, -10, 0) + + if overlay:IsDescendantOf(Game) then + -- stop any tweens on overlay + overlay:TweenSizeAndPosition(newSize,newPos,Enum.EasingDirection.Out,Enum.EasingStyle.Linear,0,true,function() + + -- show the gui + overlay.Size = UDim2.new(1,0,1,0) + overlay.Position = UDim2.new(0,0,0,0) + overlay.Visible = true + + -- now tween the hide + if overlay:IsDescendantOf(Game) then + overlay:TweenSizeAndPosition(newSize,newPos,Enum.EasingDirection.Out,Enum.EasingStyle.Quad,10,false,function() + overlay.Visible = false + end) + else + overlay.Size = newSize + overlay.Position = newPos + end + end) + else + overlay.Size = newSize + overlay.Position = newPos + end + +end + +function humanoidDied() + UpdateGui(0) +end + +function disconnectPlayerConnections() + if characterAddedConnection then characterAddedConnection:disconnect() end + if humanoidDiedConnection then humanoidDiedConnection:disconnect() end + if healthChangedConnection then healthChangedConnection:disconnect() end +end + +function newPlayerCharacter() + disconnectPlayerConnections() + startGui() +end + +function startGui() + characterAddedConnection = Game.Players.LocalPlayer.CharacterAdded:connect(newPlayerCharacter) + + local character = Game.Players.LocalPlayer.Character + if not character then + return + end + + currentHumanoid = character:WaitForChild("Humanoid") + if not currentHumanoid then + return + end + + if not Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Health) then + return + end + + healthChangedConnection = currentHumanoid.HealthChanged:connect(UpdateGui) + humanoidDiedConnection = currentHumanoid.Died:connect(humanoidDied) + UpdateGui(currentHumanoid.Health) + + CreateGui() +end + + + +--------------------------------------------------------------------- +-- Start Script + +HealthGui = Instance.new("Frame") +HealthGui.Name = "HealthGui" +HealthGui.BackgroundTransparency = 1 +HealthGui.Size = UDim2.new(1,0,1,0) + +Game.StarterGui.CoreGuiChangedSignal:connect(function(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Health or coreGuiType == Enum.CoreGuiType.All then + if guiEnabled and not enabled then + if HealthGui then + HealthGui.Parent = nil + end + disconnectPlayerConnections() + elseif not guiEnabled and enabled then + startGui() + end + + guiEnabled = enabled + end +end) + +if Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Health) then + guiEnabled = true + startGui() +end \ No newline at end of file diff --git a/app/files/CoreGui/157877000 b/app/files/CoreGui/157877000 new file mode 100644 index 0000000..7465408 --- /dev/null +++ b/app/files/CoreGui/157877000 @@ -0,0 +1,1038 @@ +--Include +local Create = assert(LoadLibrary("RbxUtility")).Create + +-- A Few Script Globals +local gui +if script.Parent:FindFirstChild("ControlFrame") then + gui = script.Parent:FindFirstChild("ControlFrame") +else + gui = script.Parent +end + +-- Dev-Console Root + +local Dev_Container = Create'Frame'{ + Name = 'DevConsoleContainer'; + Parent = gui; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.9; + Position = UDim2.new(0, 100, 0, 10); + Size = UDim2.new(0.5, 20, 0.5, 20); + Visible = false; + BackgroundTransparency = 0.9; +} + +local ToggleConsole = Create'BindableFunction'{ + Name = 'ToggleDevConsole'; + Parent = gui +} + + +local devConsoleInitialized = false +function initializeDeveloperConsole() + if devConsoleInitialized then + return + end + devConsoleInitialized = true + + ---Dev-Console Variables + local LOCAL_CONSOLE = 1 + local SERVER_CONSOLE = 2 + + local MAX_LIST_SIZE = 1000 + + local minimumSize = Vector2.new(245, 180) + local currentConsole = LOCAL_CONSOLE + + local localMessageList = {} + local serverMessageList = {} + + local localOffset = 0 + local serverOffset = 0 + + local errorToggleOn = true + local warningToggleOn = true + local infoToggleOn = true + local outputToggleOn = true + local wordWrapToggleOn = false + + local textHolderSize = 0 + + local frameNumber = 0 + + --Create Dev-Console + + local Dev_Body = Create'Frame'{ + Name = 'Body'; + Parent = Dev_Container; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 0, 21); + Size = UDim2.new(1, 0, 1, -25); + } + + local Dev_OptionsHolder = Create'Frame'{ + Name = 'OptionsHolder'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 1.0; + Position = UDim2.new(0, 220, 0, 0); + Size = UDim2.new(1, -255, 0, 24); + ClipsDescendants = true + } + + local Dev_OptionsBar = Create'Frame'{ + Name = 'OptionsBar'; + Parent = Dev_OptionsHolder; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 1.0; + Position = UDim2.new(0.0, -250, 0, 4); + Size = UDim2.new(0, 234, 0, 18); + } + + local Dev_ErrorToggleFilter = Create'TextButton'{ + Name = 'ErrorToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(1.0, 0, 0); + Position = UDim2.new(0, 115, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(1.0, 0, 0); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_ErrorToggleFilter; + BackgroundColor3 = Color3.new(1.0,0,0); + BorderColor3 = Color3.new(1.0, 0, 0); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + } + + local Dev_InfoToggleFilter = Create'TextButton'{ + Name = 'InfoToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(0.4, 0.5, 1.0); + Position = UDim2.new(0, 65, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(0.4, 0.5, 1.0); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_InfoToggleFilter; + BackgroundColor3 = Color3.new(0.4, 0.5, 1.0); + BorderColor3 = Color3.new(0.4, 0.5, 1.0); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + } + + local Dev_OutputToggleFilter = Create'TextButton'{ + Name = 'OutputToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(1.0, 1.0, 1.0); + Position = UDim2.new(0, 40, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(1.0, 1.0, 1.0); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_OutputToggleFilter; + BackgroundColor3 = Color3.new(1.0, 1.0, 1.0); + BorderColor3 = Color3.new(1.0, 1.0, 1.0); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + } + + local Dev_WarningToggleFilter = Create'TextButton'{ + Name = 'WarningToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(1.0, 0.6, 0.4); + Position = UDim2.new(0, 90, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(1.0, 0.6, 0.4); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_WarningToggleFilter; + BackgroundColor3 = Color3.new(1.0, 0.6, 0.4); + BorderColor3 = Color3.new(1.0, 0.6, 0.4); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + } + + local Dev_WordWrapToggle = Create'TextButton'{ + Name = 'WordWrapToggleButton'; + Parent = Dev_OptionsBar; + BackgroundColor3 = Color3.new(0,0,0); + BorderColor3 = Color3.new(0.8, 0.8, 0.8); + Position = UDim2.new(0, 215, 0, 0); + Size = UDim2.new(0, 18, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = ""; + TextColor3 = Color3.new(0.8, 0.8, 0.8); + } + + Create'Frame'{ + Name = 'CheckFrame'; + Parent = Dev_WordWrapToggle; + BackgroundColor3 = Color3.new(0.8, 0.8, 0.8); + BorderColor3 = Color3.new(0.8, 0.8, 0.8); + Position = UDim2.new(0, 4, 0, 4); + Size = UDim2.new(0, 10, 0, 10); + Visible = false + } + + Create'TextLabel'{ + Name = 'Filter'; + Parent = Dev_OptionsBar; + BackgroundTransparency = 1.0; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(0, 40, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = "Filter"; + TextColor3 = Color3.new(1, 1, 1); + } + + Create'TextLabel'{ + Name = 'WordWrap'; + Parent = Dev_OptionsBar; + BackgroundTransparency = 1; + Position = UDim2.new(0, 150, 0, 0); + Size = UDim2.new(0, 50, 0, 18); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = "Word Wrap"; + TextColor3 = Color3.new(1, 1, 1); + } + + local Dev_ScrollBar = Create'Frame'{ + Name = 'ScrollBar'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.9; + Position = UDim2.new(1, -20, 0, 26); + Size = UDim2.new(0, 20, 1, -50); + Visible = false; + BackgroundTransparency = 0.9; + } + + local Dev_ScrollArea = Create'Frame'{ + Name = 'ScrollArea'; + Parent = Dev_ScrollBar; + BackgroundTransparency = 1; + Position = UDim2.new(0, 0, 0, 23); + Size = UDim2.new(1, 0, 1, -46); + BackgroundTransparency = 1; + } + + local Dev_Handle = Create'ImageButton'{ + Name = 'Handle'; + Parent = Dev_ScrollArea; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, .2, 0); + Size = UDim2.new(0, 20, 0, 40); + BackgroundTransparency = 0.5; + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_Handle; + BackgroundTransparency = 1; + Position = UDim2.new(0, 0, 0.5, -8); + Rotation = 180; + Size = UDim2.new(1, 0, 0, 16); + Image = "http://www.syntax.eco/asset/?id=151205881"; + } + + local Dev_DownButton = Create'ImageButton'{ + Name = 'Down'; + Parent = Dev_ScrollBar; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 1, -20); + Size = UDim2.new(0, 20, 0, 20); + BackgroundTransparency = 0.5; + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_DownButton; + BackgroundTransparency = 1; + Position = UDim2.new(0, 3, 0, 3); + Size = UDim2.new(0, 14, 0, 14); + Rotation = 180; + Image = "http://www.syntax.eco/asset/?id=151205813"; + } + + local Dev_UpButton = Create'ImageButton'{ + Name = 'Up'; + Parent = Dev_ScrollBar; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(0, 20, 0, 20); + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_UpButton; + BackgroundTransparency = 1; + Position = UDim2.new(0, 3, 0, 3); + Size = UDim2.new(0, 14, 0, 14); + Image = "http://www.syntax.eco/asset/?id=151205813"; + } + + local Dev_TextBox = Create'Frame'{ + Name = 'TextBox'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.6; + Position = UDim2.new(0, 2, 0, 26); + Size = UDim2.new(1, -4, 1, -28); + ClipsDescendants = true; + } + + local Dev_TextHolder = Create'Frame'{ + Name = 'TextHolder'; + Parent = Dev_TextBox; + BackgroundTransparency = 1; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(1, 0, 1, 0); + } + + local Dev_OptionsButton = Create'ImageButton'{ + Name = 'OptionsButton'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 1.0; + Position = UDim2.new(0, 200, 0, 2); + Size = UDim2.new(0, 20, 0, 20); + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_OptionsButton; + BackgroundTransparency = 1.0; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(1, 0, 1, 0); + Rotation = 0; + Image = "http://www.syntax.eco/asset/?id=152093917"; + } + + local Dev_ResizeButton = Create'ImageButton'{ + Name = 'ResizeButton'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(1, -20, 1, -20); + Size = UDim2.new(0, 20, 0, 20); + } + + Create'ImageLabel'{ + Name = 'ImageLabel'; + Parent = Dev_ResizeButton; + BackgroundTransparency = 1; + Position = UDim2.new(0, 6, 0, 6); + Size = UDim2.new(0.8, 0, 0.8, 0); + Rotation = 135; + Image = "http://www.syntax.eco/asset/?id=151205813"; + } + + Create'TextButton'{ + Name = 'LocalConsole'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.6; + Position = UDim2.new(0, 7, 0, 5); + Size = UDim2.new(0, 90, 0, 20); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = "Local Console"; + TextColor3 = Color3.new(1, 1, 1); + TextYAlignment = Enum.TextYAlignment.Center; + } + + Create'TextButton'{ + Name = 'ServerConsole'; + Parent = Dev_Body; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.8; + Position = UDim2.new(0, 102, 0, 5); + Size = UDim2.new(0, 90, 0, 17); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size14; + Text = "Server Console"; + TextColor3 = Color3.new(1, 1, 1); + TextYAlignment = Enum.TextYAlignment.Center; + } + + local Dev_TitleBar = Create'Frame'{ + Name = 'TitleBar'; + Parent = Dev_Container; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(1, 0, 0, 20); + } + + local Dev_CloseButton = Create'ImageButton'{ + Name = 'CloseButton'; + Parent = Dev_TitleBar; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(1, -20, 0, 0); + Size = UDim2.new(0, 20, 0, 20); + } + + Create'ImageLabel'{ + Parent = Dev_CloseButton; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 1; + Position = UDim2.new(0, 3, 0, 3); + Size = UDim2.new(0, 14, 0, 14); + Image = "http://www.syntax.eco/asset/?id=151205852"; + } + + Create'TextButton'{ + Name = 'TextButton'; + Parent = Dev_TitleBar; + BackgroundColor3 = Color3.new(0,0,0); + BackgroundTransparency = 0.5; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(1, -23, 1, 0); + Text = ""; + } + + Create'TextLabel'{ + Name = 'TitleText'; + Parent = Dev_TitleBar; + BackgroundTransparency = 1; + Position = UDim2.new(0, 0, 0, 0); + Size = UDim2.new(0, 185, 0, 20); + Font = "SourceSansBold"; + FontSize = Enum.FontSize.Size18; + Text = "Server Console"; + TextColor3 = Color3.new(1, 1, 1); + Text = "Roblox Developer Console"; + TextYAlignment = Enum.TextYAlignment.Top; + } + + ---Saved Mouse Information + local previousMousePos = nil + local pPos = nil + + local previousMousePosResize = nil + local pSize = nil + + local previousMousePosScroll = nil + local pScrollHandle = nil + local pOffset = nil + + local scrollUpIsDown = false + local scrollDownIsDown = false + + function clean() + previousMousePos = nil + pPos = nil + previousMousePosResize = nil + pSize = nil + previousMousePosScroll = nil + pScrollHandle = nil + pOffset = nil + scrollUpIsDown = false + scrollDownIsDown = false + end + + + ---Handle Dev-Console Position + function refreshConsolePosition(x, y) + if not previousMousePos then + return + end + + local delta = Vector2.new(x, y) - previousMousePos + Dev_Container.Position = UDim2.new(0, pPos.X + delta.X, 0, pPos.Y + delta.Y) + end + + Dev_TitleBar.TextButton.MouseButton1Down:connect(function(x, y) + previousMousePos = Vector2.new(x, y) + pPos = Dev_Container.AbsolutePosition + end) + + Dev_TitleBar.TextButton.MouseButton1Up:connect(function(x, y) + clean() + end) + + ---Handle Dev-Console Size + function refreshConsoleSize(x, y) + if not previousMousePosResize then + return + end + + local delta = Vector2.new(x, y) - previousMousePosResize + Dev_Container.Size = UDim2.new(0, math.max(pSize.X + delta.X, minimumSize.X), 0, math.max(pSize.Y + delta.Y, minimumSize.Y)) + end + Dev_Container.Body.ResizeButton.MouseButton1Down:connect(function(x, y) + previousMousePosResize = Vector2.new(x, y) + pSize = Dev_Container.AbsoluteSize + end) + + Dev_Container.Body.ResizeButton.MouseButton1Up:connect(function(x, y) + clean() + end) + + + ---Handle Dev-Console Close Button + Dev_TitleBar.CloseButton.MouseButton1Down:connect(function(x, y) + Dev_Container.Visible = false + end) + + Dev_Container.TitleBar.CloseButton.MouseButton1Up:connect(function() + clean() + end) + + local optionsHidden = true + local animating = false + --Options + function startAnimation() + if animating then return end + animating = true + + repeat + if optionsHidden then + frameNumber = frameNumber - 1 + else + frameNumber = frameNumber + 1 + end + + local x = frameNumber / 5 + local smoothStep = x * x * (3 - (2 * x)) + Dev_OptionsButton.ImageLabel.Rotation = smoothStep * 5 * 9 + Dev_OptionsBar.Position = UDim2.new(0, (smoothStep * 5 * 50) - 250, 0, 4) + + wait() + if (frameNumber <= 0 and optionsHidden) or (frameNumber >= 5 and not optionsHidden) then + animating = false + end + until not animating + end + + Dev_OptionsButton.MouseButton1Down:connect(function(x, y) + optionsHidden = not optionsHidden + startAnimation() + end) + + --Scroll Position + + function changeOffset(value) + if (currentConsole == LOCAL_CONSOLE) then + localOffset = localOffset + value + elseif (currentConsole == SERVER_CONSOLE) then + serverOffset = serverOffset + value + end + + repositionList() + end + + --Refresh Dev-Console Text + function refreshTextHolderForReal() + local childMessages = Dev_TextHolder:GetChildren() + + local messageList + + if (currentConsole == LOCAL_CONSOLE) then + messageList = localMessageList + elseif (currentConsole == SERVER_CONSOLE) then + messageList = serverMessageList + end + + local posOffset = 0 + + for i = 1, #childMessages do + childMessages[i].Visible = false + end + + for i = 1, #messageList do + local message + + local movePosition = false + + if i > #childMessages then + message = Create'TextLabel'{ + Name = 'Message'; + Parent = Dev_TextHolder; + BackgroundTransparency = 1; + TextXAlignment = 'Left'; + Size = UDim2.new(1, 0, 0, 14); + FontSize = 'Size10'; + ZIndex = 1; + } + movePosition = true + else + message = childMessages[i] + end + + if (outputToggleOn or messageList[i].Type ~= Enum.MessageType.MessageOutput) and + (infoToggleOn or messageList[i].Type ~= Enum.MessageType.MessageInfo) and + (warningToggleOn or messageList[i].Type ~= Enum.MessageType.MessageWarning) and + (errorToggleOn or messageList[i].Type ~= Enum.MessageType.MessageError) then + message.TextWrapped = wordWrapToggleOn + message.Size = UDim2.new(0.98, 0, 0, 2000) + message.Parent = Dev_Container + message.Text = messageList[i].Time.." -- "..messageList[i].Message + + message.Size = UDim2.new(0.98, 0, 0, message.TextBounds.Y) + message.Position = UDim2.new(0, 5, 0, posOffset) + message.Parent = Dev_TextHolder + posOffset = posOffset + message.TextBounds.Y + + if movePosition then + if (currentConsole == LOCAL_CONSOLE and localOffset > 0) or (currentConsole == SERVER_CONSOLE and serverOffset > 0) then + changeOffset(message.TextBounds.Y) + end + end + + message.Visible = true + + if messageList[i].Type == Enum.MessageType.MessageError then + message.TextColor3 = Color3.new(1, 0, 0) + elseif messageList[i].Type == Enum.MessageType.MessageInfo then + message.TextColor3 = Color3.new(0.4, 0.5, 1) + elseif messageList[i].Type == Enum.MessageType.MessageWarning then + message.TextColor3 = Color3.new(1, 0.6, 0.4) + else + message.TextColor3 = Color3.new(1, 1, 1) + end + end + + + end + + textHolderSize = posOffset + + end + + -- Refreshing the textholder every 0.1 (if needed) is good enough, surely fast enough + -- We don't want it to update 50x in a tick because there are 50 messages in that tick + -- (Whenever for one reason or another a lot of output comes in, it can lag + -- This will make it behave better in a situation of a lot of output comming in) + local refreshQueued = false + function refreshTextHolder() + if refreshQueued then return end + Delay(0.1,function() + refreshQueued = false + refreshTextHolderForReal() + end) refreshQueued = true + end + + --Handle Dev-Console Scrollbar + + local inside = 0 + function holdingUpButton() + if scrollUpIsDown then + return + end + scrollUpIsDown = true + wait(.6) + inside = inside + 1 + while scrollUpIsDown and inside < 2 do + wait() + changeOffset(12) + end + inside = inside - 1 + end + + function holdingDownButton() + if scrollDownIsDown then + return + end + scrollDownIsDown = true + wait(.6) + inside = inside + 1 + while scrollDownIsDown and inside < 2 do + wait() + changeOffset(-12) + end + inside = inside - 1 + end + + Dev_Container.Body.ScrollBar.Up.MouseButton1Click:connect(function() + changeOffset(10) + end) + + Dev_Container.Body.ScrollBar.Up.MouseButton1Down:connect(function() + changeOffset(10) + holdingUpButton() + end) + + Dev_Container.Body.ScrollBar.Up.MouseButton1Up:connect(function() + clean() + end) + + Dev_Container.Body.ScrollBar.Down.MouseButton1Down:connect(function() + changeOffset(-10) + holdingDownButton() + end) + + Dev_Container.Body.ScrollBar.Down.MouseButton1Up:connect(function() + clean() + end) + + function handleScroll(x, y) + if not previousMousePosScroll then + return + end + + local delta = (Vector2.new(x, y) - previousMousePosScroll).Y + + local backRatio = 1 - (Dev_Container.Body.TextBox.AbsoluteSize.Y / Dev_TextHolder.AbsoluteSize.Y) + + local movementSize = Dev_ScrollArea.AbsoluteSize.Y - Dev_ScrollArea.Handle.AbsoluteSize.Y + local normalDelta = math.max(math.min(delta, movementSize), 0 - movementSize) + local normalRatio = normalDelta / movementSize + + local textMovementSize = (backRatio * Dev_TextHolder.AbsoluteSize.Y) + local offsetChange = textMovementSize * normalRatio + + if (currentConsole == LOCAL_CONSOLE) then + localOffset = pOffset - offsetChange + elseif (currentConsole == SERVER_CONSOLE) then + serverOffset = pOffset - offsetChange + end + end + + Dev_ScrollArea.Handle.MouseButton1Down:connect(function(x, y) + previousMousePosScroll = Vector2.new(x, y) + pScrollHandle = Dev_ScrollArea.Handle.AbsolutePosition + if (currentConsole == LOCAL_CONSOLE) then + pOffset = localOffset + elseif (currentConsole == SERVER_CONSOLE) then + pOffset = serverOffset + end + + end) + + Dev_ScrollArea.Handle.MouseButton1Up:connect(function(x, y) + clean() + end) + + local function existsInsideContainer(container, x, y) + local pos = container.AbsolutePosition + local size = container.AbsoluteSize + if x < pos.X or x > pos.X + size.X or y < pos.y or y > pos.y + size.y then + return false + end + return true + end + + + + --Refresh Dev-Console Message Positions + function repositionList() + + if (currentConsole == LOCAL_CONSOLE) then + localOffset = math.min(math.max(localOffset, 0), textHolderSize - Dev_Container.Body.TextBox.AbsoluteSize.Y) + Dev_TextHolder.Size = UDim2.new(1, 0, 0, textHolderSize) + + elseif (currentConsole == SERVER_CONSOLE) then + serverOffset = math.min(math.max(serverOffset, 0), textHolderSize - Dev_Container.Body.TextBox.AbsoluteSize.Y) + Dev_TextHolder.Size = UDim2.new(1, 0, 0, textHolderSize) + end + + local ratio = Dev_Container.Body.TextBox.AbsoluteSize.Y / Dev_TextHolder.AbsoluteSize.Y + + if ratio >= 1 then + Dev_Container.Body.ScrollBar.Visible = false + Dev_Container.Body.TextBox.Size = UDim2.new(1, -4, 1, -28) + + if (currentConsole == LOCAL_CONSOLE) then + Dev_TextHolder.Position = UDim2.new(0, 0, 1, 0 - textHolderSize) + elseif (currentConsole == SERVER_CONSOLE) then + Dev_TextHolder.Position = UDim2.new(0, 0, 1, 0 - textHolderSize) + end + + + else + Dev_Container.Body.ScrollBar.Visible = true + Dev_Container.Body.TextBox.Size = UDim2.new(1, -25, 1, -28) + + local backRatio = 1 - ratio + local offsetRatio + + if (currentConsole == LOCAL_CONSOLE) then + offsetRatio = localOffset / Dev_TextHolder.AbsoluteSize.Y + elseif (currentConsole == SERVER_CONSOLE) then + offsetRatio = serverOffset / Dev_TextHolder.AbsoluteSize.Y + end + + local topRatio = math.max(0, backRatio - offsetRatio) + + local scrollHandleSize = math.max((Dev_ScrollArea.AbsoluteSize.Y) * ratio, 21) + + local scrollRatio = scrollHandleSize / Dev_ScrollArea.AbsoluteSize.Y + local ratioConversion = (1 - scrollRatio) / (1 - ratio) + + local topScrollRatio = topRatio * ratioConversion + + local sPos = math.min((Dev_ScrollArea.AbsoluteSize.Y) * topScrollRatio, Dev_ScrollArea.AbsoluteSize.Y - scrollHandleSize) + + Dev_ScrollArea.Handle.Size = UDim2.new(1, 0, 0, scrollHandleSize) + Dev_ScrollArea.Handle.Position = UDim2.new(0, 0, 0, sPos) + + if (currentConsole == LOCAL_CONSOLE) then + Dev_TextHolder.Position = UDim2.new(0, 0, 1, 0 - textHolderSize + localOffset) + elseif (currentConsole == SERVER_CONSOLE) then + Dev_TextHolder.Position = UDim2.new(0, 0, 1, 0 - textHolderSize + serverOffset) + end + + end + end + + -- Easy, fast, and working nicely + local function numberWithZero(num) + return (num < 10 and "0" or "")..num + end + + local str = "%s:%s:%s" + + function ConvertTimeStamp(timeStamp) + local localTime = timeStamp - os.time() + math.floor(tick()) + local dayTime = localTime % 86400 + + local hour = math.floor(dayTime/3600) + + dayTime = dayTime - (hour * 3600) + local minute = math.floor(dayTime/60) + + dayTime = dayTime - (minute * 60) + local second = dayTime + + local h = numberWithZero(hour) + local m = numberWithZero(minute) + local s = numberWithZero(dayTime) + + return str:format(h,m,s) + end + + --Filter + + Dev_OptionsBar.ErrorToggleButton.MouseButton1Down:connect(function(x, y) + errorToggleOn = not errorToggleOn + Dev_OptionsBar.ErrorToggleButton.CheckFrame.Visible = errorToggleOn + refreshTextHolder() + repositionList() + end) + + Dev_OptionsBar.WarningToggleButton.MouseButton1Down:connect(function(x, y) + warningToggleOn = not warningToggleOn + Dev_OptionsBar.WarningToggleButton.CheckFrame.Visible = warningToggleOn + refreshTextHolder() + repositionList() + end) + + Dev_OptionsBar.InfoToggleButton.MouseButton1Down:connect(function(x, y) + infoToggleOn = not infoToggleOn + Dev_OptionsBar.InfoToggleButton.CheckFrame.Visible = infoToggleOn + refreshTextHolder() + repositionList() + end) + + Dev_OptionsBar.OutputToggleButton.MouseButton1Down:connect(function(x, y) + outputToggleOn = not outputToggleOn + Dev_OptionsBar.OutputToggleButton.CheckFrame.Visible = outputToggleOn + refreshTextHolder() + repositionList() + end) + + Dev_OptionsBar.WordWrapToggleButton.MouseButton1Down:connect(function(x, y) + wordWrapToggleOn = not wordWrapToggleOn + Dev_OptionsBar.WordWrapToggleButton.CheckFrame.Visible = wordWrapToggleOn + refreshTextHolder() + repositionList() + end) + + ---Dev-Console Message Functionality + function AddLocalMessage(str, messageType, timeStamp) + localMessageList[#localMessageList+1] = {Message = str, Time = ConvertTimeStamp(timeStamp), Type = messageType} + while #localMessageList > MAX_LIST_SIZE do + table.remove(localMessageList, 1) + end + + refreshTextHolder() + + repositionList() + end + + function AddServerMessage(str, messageType, timeStamp) + serverMessageList[#serverMessageList+1] = {Message = str, Time = ConvertTimeStamp(timeStamp), Type = messageType} + while #serverMessageList > MAX_LIST_SIZE do + table.remove(serverMessageList, 1) + end + + refreshTextHolder() + + repositionList() + end + + + + --Handle Dev-Console Local/Server Buttons + Dev_Container.Body.LocalConsole.MouseButton1Click:connect(function(x, y) + if (currentConsole == SERVER_CONSOLE) then + currentConsole = LOCAL_CONSOLE + local localConsole = Dev_Container.Body.LocalConsole + local serverConsole = Dev_Container.Body.ServerConsole + + localConsole.Size = UDim2.new(0, 90, 0, 20) + serverConsole.Size = UDim2.new(0, 90, 0, 17) + localConsole.BackgroundTransparency = 0.6 + serverConsole.BackgroundTransparency = 0.8 + + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local mouse = game.Players.LocalPlayer:GetMouse() + local mousePos = Vector2.new(mouse.X, mouse.Y) + refreshConsolePosition(mouse.X, mouse.Y) + refreshConsoleSize(mouse.X, mouse.Y) + handleScroll(mouse.X, mouse.Y) + end + + refreshTextHolder() + repositionList() + + end + end) + + Dev_Container.Body.LocalConsole.MouseButton1Up:connect(function() + clean() + end) + + local serverHistoryRequested = false; + + Dev_Container.Body.ServerConsole.MouseButton1Click:connect(function(x, y) + + if not serverHistoryRequested then + serverHistoryRequested = true + game:GetService("LogService"):RequestServerOutput() + end + + if (currentConsole == LOCAL_CONSOLE) then + currentConsole = SERVER_CONSOLE + local localConsole = Dev_Container.Body.LocalConsole + local serverConsole = Dev_Container.Body.ServerConsole + + serverConsole.Size = UDim2.new(0, 90, 0, 20) + localConsole.Size = UDim2.new(0, 90, 0, 17) + serverConsole.BackgroundTransparency = 0.6 + localConsole.BackgroundTransparency = 0.8 + + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local mouse = game.Players.LocalPlayer:GetMouse() + local mousePos = Vector2.new(mouse.X, mouse.Y) + refreshConsolePosition(mouse.X, mouse.Y) + refreshConsoleSize(mouse.X, mouse.Y) + handleScroll(mouse.X, mouse.Y) + end + + refreshTextHolder() + repositionList() + end + end) + + ---Extra Mouse Handlers for Dev-Console + Dev_Container.Body.ServerConsole.MouseButton1Up:connect(function() + clean() + end) + + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local LocalMouse = game.Players.LocalPlayer:GetMouse() + LocalMouse.Move:connect(function() + if not Dev_Container.Visible then + return + end + local mouse = game.Players.LocalPlayer:GetMouse() + local mousePos = Vector2.new(mouse.X, mouse.Y) + refreshConsolePosition(mouse.X, mouse.Y) + refreshConsoleSize(mouse.X, mouse.Y) + handleScroll(mouse.X, mouse.Y) + + refreshTextHolder() + repositionList() + end) + + LocalMouse.Button1Up:connect(function() + clean() + end) + + LocalMouse.WheelForward:connect(function() + if not Dev_Container.Visible then + return + end + if existsInsideContainer(Dev_Container, LocalMouse.X, LocalMouse.Y) then + changeOffset(10) + end + end) + + LocalMouse.WheelBackward:connect(function() + if not Dev_Container.Visible then + return + end + if existsInsideContainer(Dev_Container, LocalMouse.X, LocalMouse.Y) then + changeOffset(-10) + end + end) + + end + + Dev_ScrollArea.Handle.MouseButton1Down:connect(function() + repositionList() + end) + + + ---Populate Dev-Console with dummy messages + + local history = game:GetService("LogService"):GetLogHistory() + + for i = 1, #history do + AddLocalMessage(history[i].message, history[i].messageType, history[i].timestamp) + end + + game:GetService("LogService").MessageOut:connect(function(message, messageType) + AddLocalMessage(message, messageType, os.time()) + end) + + game:GetService("LogService").ServerMessageOut:connect(AddServerMessage) + +end + +local currentlyToggling = false +function ToggleConsole.OnInvoke() + if currentlyToggling then + return + end + + currentlyToggling = true + initializeDeveloperConsole() + Dev_Container.Visible = not Dev_Container.Visible + currentlyToggling = false +end diff --git a/app/files/CoreGui/158948138 b/app/files/CoreGui/158948138 new file mode 100644 index 0000000..6cfbae1 --- /dev/null +++ b/app/files/CoreGui/158948138 @@ -0,0 +1,175 @@ +-- Creates the generic "ROBLOX" loading screen on startup +-- Written by Ben Tkacheff, 2014 + +local frame +local forceRemovalTime = 5 +local destroyed = false + +Game:GetService("ContentProvider"):Preload("rbxasset://textures/roblox-logo.png") + +-- get control functions set up immediately +function removeLoadingScreen() + if frame then frame:Destroy() end + if script then script:Destroy() end + destroyed = true +end + +function startForceLoadingDoneTimer() + wait(forceRemovalTime) + removeLoadingScreen() +end + +function gameIsLoaded() + if Game.ReplicatedFirst:IsDefaultLoadingGuiRemoved() then + removeLoadingScreen() + else + startForceLoadingDoneTimer() + end +end + +function makeDefaultLoadingScreen() + if not settings():GetFFlag("NewLoadingScreen") then return end + if destroyed then return end + + frame = Instance.new("Frame") + frame.ZIndex = 10 + frame.Active = true + frame.Size = UDim2.new(1,0,1,0) + frame.BackgroundColor3 = Color3.new(48/255,90/255,206/255) + + local robloxLogo = Instance.new("ImageLabel") + robloxLogo.BackgroundTransparency = 1 + robloxLogo.ZIndex = 10 + robloxLogo.Image = "rbxasset://textures/roblox-logo.png" + robloxLogo.Size = UDim2.new(0,1031,0,265) + robloxLogo.Position = UDim2.new(0.5,-515,0.5,-132) + robloxLogo.Name = "RobloxLogo" + robloxLogo.Parent = frame + + local poweredByText = Instance.new("TextLabel") + poweredByText.Font = Enum.Font.SourceSansBold + poweredByText.FontSize = Enum.FontSize.Size24 + poweredByText.TextWrap = true + poweredByText.TextColor3 = Color3.new(1,1,1) + poweredByText.BackgroundTransparency = 1 + poweredByText.ZIndex = 10 + poweredByText.Text = "This Game Powered By" + poweredByText.TextXAlignment = Enum.TextXAlignment.Left + poweredByText.Size = UDim2.new(1,0,0,40) + poweredByText.Position = UDim2.new(0,0,0,-50) + poweredByText.Name = "PoweredByText" + poweredByText.Parent = robloxLogo + + local exitButton = Instance.new("ImageButton") + exitButton.ZIndex = 10 + exitButton.BackgroundTransparency = 1 + exitButton.Image = "rbxasset://textures/ui/CloseButton.png" + exitButton.Size = UDim2.new(0,22,0,22) + exitButton.Position = UDim2.new(1,-23,0,1) + exitButton.Name = "ExitButton" + exitButton:SetVerb("Exit") + + UserSettings().GameSettings.FullscreenChanged:connect(function ( isFullScreen ) + if isFullScreen then + exitButton.Parent = frame + else + exitButton.Parent = nil + end + end) + if UserSettings().GameSettings:InFullScreen()then + exitButton.Parent = frame + end + + -- put something visible up asap + frame.Parent = Game.CoreGui.RobloxGui + + local instanceText = Instance.new("TextLabel") + instanceText.Font = Enum.Font.SourceSansBold + instanceText.FontSize = Enum.FontSize.Size18 + instanceText.TextWrap = true + instanceText.TextColor3 = Color3.new(1,1,1) + instanceText.BackgroundTransparency = 1 + instanceText.ZIndex = 10 + instanceText.Text = "" + instanceText.Size = UDim2.new(1,0,0,40) + instanceText.Position = UDim2.new(0,0,1,-60) + instanceText.Name = "InstanceText" + instanceText.Parent = frame + + local loadingText = Instance.new("TextLabel") + loadingText.Font = Enum.Font.SourceSansBold + loadingText.FontSize = Enum.FontSize.Size36 + loadingText.TextWrap = true + loadingText.TextColor3 = Color3.new(1,1,1) + loadingText.BackgroundTransparency = 1 + loadingText.ZIndex = 10 + loadingText.Text = "Loading" + loadingText.Size = UDim2.new(1,0,0,40) + loadingText.Position = UDim2.new(0,0,1,20) + loadingText.Name = "LoadingText" + loadingText.Parent = robloxLogo + + local howManyDots = 0 + local lastUpdateTime = tick() + local minUpdateTime = 0.3 + local aspectRatio = 1031/265 + + function ResolutionChanged( prop ) + if prop == "AbsoluteSize" then + local size = Game.CoreGui.RobloxGui.AbsoluteSize + if size.X >= 1031 then + robloxLogo.Size = UDim2.new(0,1031,0,265) + robloxLogo.Position = UDim2.new(0.5,-515,0.5,-132) + else + local sizeReducer = -0.05 + while size.X < robloxLogo.AbsoluteSize.X do + + robloxLogo.Size = UDim2.new(sizeReducer,1031,0,265) + local newY = robloxLogo.AbsoluteSize.X * 265/1031 + robloxLogo.Size = UDim2.new(sizeReducer,1031,0,newY) + robloxLogo.Position = UDim2.new(0.5 - (sizeReducer/2),-515,0.5,-132) + + sizeReducer = sizeReducer - 0.1 + end + end + end + end + + ResolutionChanged("AbsoluteSize") + Game.CoreGui.RobloxGui.Changed:connect(ResolutionChanged) + + Game:GetService("RunService").RenderStepped:connect(function() + instanceText.Text = Game:GetMessage() + + if tick() - lastUpdateTime >= minUpdateTime then + howManyDots = howManyDots + 1 + if howManyDots > 5 then + howManyDots = 0 + end + + loadingText.Text = "Loading" + for i = 1, howManyDots do + loadingText.Text = loadingText.Text .. "." + end + lastUpdateTime = tick() + end + end) +end + +makeDefaultLoadingScreen() + +Game.ReplicatedFirst.RemoveDefaultLoadingGuiSignal:connect(function() + removeLoadingScreen() +end) +if Game.ReplicatedFirst:IsDefaultLoadingGuiRemoved() then + removeLoadingScreen() + return +end + +Game.Loaded:connect(function() + gameIsLoaded() +end) + +if Game:IsLoaded() then + gameIsLoaded() +end \ No newline at end of file diff --git a/app/files/CoreGui/35914081 b/app/files/CoreGui/35914081 new file mode 100644 index 0000000..9d7b873 --- /dev/null +++ b/app/files/CoreGui/35914081 @@ -0,0 +1,290 @@ +-- creates the in-game gui sub menus for property tools +-- written 9/27/2010 by Ben (jeditkacheff) + +local gui = script.Parent +if gui:FindFirstChild("ControlFrame") then + gui = gui:FindFirstChild("ControlFrame") +end + +local currentlySelectedButton = nil + +local localAssetBase = "rbxasset://textures/ui/" + +local selectedButton = Instance.new("ObjectValue") +selectedButton.RobloxLocked = true +selectedButton.Name = "SelectedButton" +selectedButton.Parent = gui.BuildTools + +local closeButton = Instance.new("ImageButton") +closeButton.Name = "CloseButton" +closeButton.RobloxLocked = true +closeButton.BackgroundTransparency = 1 +closeButton.Image = localAssetBase .. "CloseButton.png" +closeButton.ZIndex = 2 +closeButton.Size = UDim2.new(0.2,0,0.05,0) +closeButton.AutoButtonColor = false +closeButton.Position = UDim2.new(0.75,0,0.01,0) + + + +function setUpCloseButtonState(button) + + button.MouseEnter:connect(function() + button.Image = localAssetBase .. "CloseButton_dn.png" + end) + button.MouseLeave:connect(function() + button.Image = localAssetBase .. "CloseButton.png" + end) + button.MouseButton1Click:connect(function() + button.ClosedState.Value = true + button.Image = localAssetBase .. "CloseButton.png" + end) + +end + +-- nice selection animation +function fadeInButton(button) + + if currentlySelectedButton ~= nil then + currentlySelectedButton.Selected = false + currentlySelectedButton.ZIndex = 2 + currentlySelectedButton.Frame.BackgroundTransparency = 1 + end + + local speed = 0.1 + button.ZIndex = 3 + while button.Frame.BackgroundTransparency > 0 do + button.Frame.BackgroundTransparency = button.Frame.BackgroundTransparency - speed + wait() + end + button.Selected = true + + currentlySelectedButton = button + selectedButton.Value = currentlySelectedButton +end + +------------------------------- create the color selection sub menu ----------------------------------- + +local paintMenu = Instance.new("ImageLabel") +local paintTool = gui.BuildTools.Frame.PropertyTools.PaintTool +paintMenu.Name = "PaintMenu" +paintMenu.RobloxLocked = true +paintMenu.Parent = paintTool +paintMenu.Position = UDim2.new(-2.7,0,-3,0) +paintMenu.Size = UDim2.new(2.5,0,10,0) +paintMenu.BackgroundTransparency = 1 +paintMenu.ZIndex = 2 +paintMenu.Image = localAssetBase .. "PaintMenu.png" + +local paintColorButton = Instance.new("ImageButton") +paintColorButton.RobloxLocked = true +paintColorButton.BorderSizePixel = 0 +paintColorButton.ZIndex = 2 +paintColorButton.Size = UDim2.new(0.200000003, 0,0.0500000007, 0) + +local selection = Instance.new("Frame") +selection.RobloxLocked = true +selection.BorderSizePixel = 0 +selection.BackgroundColor3 = Color3.new(1,1,1) +selection.BackgroundTransparency = 1 +selection.ZIndex = 2 +selection.Size = UDim2.new(1.1,0,1.1,0) +selection.Position = UDim2.new(-0.05,0,-0.05,0) +selection.Parent = paintColorButton + +local header = 0.08 +local spacing = 18 + +local count = 1 + +function findNextColor() + colorName = tostring(BrickColor.new(count)) + while colorName == "Medium stone grey" do + count = count + 1 + colorName = tostring(BrickColor.new(count)) + end + return count +end + +for i = 0,15 do + for j = 1, 4 do + newButton = paintColorButton:clone() + newButton.RobloxLocked = true + newButton.BackgroundColor3 = BrickColor.new(findNextColor()).Color + newButton.Name = tostring(BrickColor.new(count)) + count = count + 1 + if j == 1 then newButton.Position = UDim2.new(0.08,0,i/spacing + header,0) + elseif j == 2 then newButton.Position = UDim2.new(0.29,0,i/spacing + header,0) + elseif j == 3 then newButton.Position = UDim2.new(0.5,0,i/spacing + header,0) + elseif j == 4 then newButton.Position = UDim2.new(0.71,0,i/spacing + header,0) end + newButton.Parent = paintMenu + end +end + +local paintButtons = paintMenu:GetChildren() +for i = 1, #paintButtons do + paintButtons[i].MouseButton1Click:connect(function() + fadeInButton(paintButtons[i]) + end) +end + +local paintCloseButton = closeButton:clone() +paintCloseButton.RobloxLocked = true +paintCloseButton.Parent = paintMenu + +local closedState = Instance.new("BoolValue") +closedState.RobloxLocked = true +closedState.Name = "ClosedState" +closedState.Parent = paintCloseButton + +setUpCloseButtonState(paintCloseButton) + +------------------------------- create the material selection sub menu ----------------------------------- + +local materialMenu = Instance.new("ImageLabel") +local materialTool = gui.BuildTools.Frame.PropertyTools.MaterialSelector +materialMenu.RobloxLocked = true +materialMenu.Name = "MaterialMenu" +materialMenu.Position = UDim2.new(-4,0,-3,0) +materialMenu.Size = UDim2.new(2.5,0,6.5,0) +materialMenu.BackgroundTransparency = 1 +materialMenu.ZIndex = 2 +materialMenu.Image = localAssetBase .. "MaterialMenu.png" +materialMenu.Parent = materialTool + +local textures = {"Plastic","Wood","Slate","CorrodedMetal","Ice","Grass","Foil","DiamondPlate","Concrete"} + +local materialButtons = {} + +local materialButton = Instance.new("ImageButton") +materialButton.RobloxLocked = true +materialButton.BackgroundTransparency = 1 +materialButton.Size = UDim2.new(0.400000003, 0,0.16, 0) +materialButton.ZIndex = 2 + +selection.Parent = materialButton + +local current = 1 +function getTextureAndName(button) + + if current > #textures then + button:remove() + return false + end + button.Image = localAssetBase .. textures[current] .. ".png" + button.Name = textures[current] + current = current + 1 + return true + +end + +local ySpacing = 0.10 +local xSpacing = 0.07 +for i = 1,5 do + for j = 1,2 do + local button = materialButton:clone() + button.RobloxLocked = true + button.Position = UDim2.new((j -1)/2.2 + xSpacing,0,ySpacing + (i - 1)/5.5,0) + if getTextureAndName(button) then button.Parent = materialMenu else button:remove() end + table.insert(materialButtons,button) + end +end + + +for i = 1, #materialButtons do + materialButtons[i].MouseButton1Click:connect(function() + fadeInButton(materialButtons[i]) + end) +end + +local materialCloseButton = closeButton:clone() +materialCloseButton.RobloxLocked = true +materialCloseButton.Size = UDim2.new(0.2,0,0.08,0) +materialCloseButton.Parent = materialMenu + +local closedState = Instance.new("BoolValue") +closedState.RobloxLocked = true +closedState.Name = "ClosedState" +closedState.Parent = materialCloseButton + +setUpCloseButtonState(materialCloseButton) + + +------------------------------- create the surface selection sub menu ----------------------------------- + +local surfaceMenu = Instance.new("ImageLabel") +local surfaceTool = gui.BuildTools.Frame.PropertyTools.InputSelector +surfaceMenu.RobloxLocked = true +surfaceMenu.Name = "SurfaceMenu" +surfaceMenu.Position = UDim2.new(-2.6,0,-4,0) +surfaceMenu.Size = UDim2.new(2.5,0,5.5,0) +surfaceMenu.BackgroundTransparency = 1 +surfaceMenu.ZIndex = 2 +surfaceMenu.Image = localAssetBase .. "SurfaceMenu.png" +surfaceMenu.Parent = surfaceTool + +textures = {"Smooth", "Studs", "Inlets", "Universal", "Glue", "Weld", "Hinge", "Motor"} +current = 1 + +local surfaceButtons = {} + +local surfaceButton = Instance.new("ImageButton") +surfaceButton.RobloxLocked = true +surfaceButton.BackgroundTransparency = 1 +surfaceButton.Size = UDim2.new(0.400000003, 0,0.19, 0) +surfaceButton.ZIndex = 2 + +selection.Parent = surfaceButton + +local ySpacing = 0.14 +local xSpacing = 0.07 +for i = 1,4 do + for j = 1,2 do + local button = surfaceButton:clone() + button.RobloxLocked = true + button.Position = UDim2.new((j -1)/2.2 + xSpacing,0,ySpacing + (i - 1)/4.6,0) + getTextureAndName(button) + button.Parent = surfaceMenu + table.insert(surfaceButtons,button) + end +end + +for i = 1, #surfaceButtons do + surfaceButtons[i].MouseButton1Click:connect(function() + fadeInButton(surfaceButtons[i]) + end) +end + +local surfaceMenuCloseButton = closeButton:clone() +surfaceMenuCloseButton.RobloxLocked = true +surfaceMenuCloseButton.Size = UDim2.new(0.2,0,0.09,0) +surfaceMenuCloseButton.Parent = surfaceMenu + +local closedState = Instance.new("BoolValue") +closedState.RobloxLocked = true +closedState.Name = "ClosedState" +closedState.Parent = surfaceMenuCloseButton + +setUpCloseButtonState(surfaceMenuCloseButton) + +if game.CoreGui.Version >= 2 then + local function setupTweenTransition(button, menu, outXScale, inXScale) + button.Changed:connect( + function(property) + if property ~= "Selected" then + return + end + if button.Selected then + menu:TweenPosition(UDim2.new(inXScale, menu.Position.X.Offset, menu.Position.Y.Scale, menu.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quart, 1, true) + else + menu:TweenPosition(UDim2.new(outXScale, menu.Position.X.Offset, menu.Position.Y.Scale, menu.Position.Y.Offset), + Enum.EasingDirection.In, Enum.EasingStyle.Quart, 0.5, true) + end + end) + end + + setupTweenTransition(paintTool, paintMenu, -2.7, 2.6) + setupTweenTransition(surfaceTool, surfaceMenu, -2.6, 2.6) + setupTweenTransition(materialTool, materialMenu, -4, 1.4) +end diff --git a/app/files/CoreGui/35914620 b/app/files/CoreGui/35914620 new file mode 100644 index 0000000..4612587 --- /dev/null +++ b/app/files/CoreGui/35914620 @@ -0,0 +1,70 @@ +-- this script is responsible for keeping the gui proportions under control + +local screen = script.Parent + +local BottomLeftControl +local BottomRightControl +local TopLeftControl +local BuildTools + +local controlFrame = script.Parent:FindFirstChild("ControlFrame") +local loadoutPadding = 43 +local currentLoadout + +BottomLeftControl = controlFrame:FindFirstChild("BottomLeftControl") +BottomRightControl = controlFrame:FindFirstChild("BottomRightControl") +TopLeftControl = controlFrame:FindFirstChild("TopLeftControl") +currentLoadout = script.Parent:FindFirstChild("CurrentLoadout") +BuildTools = controlFrame:FindFirstChild("BuildTools") + +function makeYRelative() + + BottomLeftControl.SizeConstraint = 2 + BottomRightControl.SizeConstraint = 2 + if TopLeftControl then TopLeftControl.SizeConstraint = 2 end + if currentLoadout then currentLoadout.SizeConstraint = 2 end + if BuildTools then BuildTools.Frame.SizeConstraint = 2 end + + BottomLeftControl.Position = UDim2.new(0,0,1,-BottomLeftControl.AbsoluteSize.Y) + BottomRightControl.Position = UDim2.new(1,-BottomRightControl.AbsoluteSize.X,1,-BottomRightControl.AbsoluteSize.Y) + +end + + + +function makeXRelative() + + BottomLeftControl.SizeConstraint = 1 + BottomRightControl.SizeConstraint = 1 + if TopLeftControl then TopLeftControl.SizeConstraint = 1 end + if currentLoadout then currentLoadout.SizeConstraint = 1 end + if BuildTools then BuildTools.Frame.SizeConstraint = 1 end + + BottomLeftControl.Position = UDim2.new(0,0,1,-BottomLeftControl.AbsoluteSize.Y) + BottomRightControl.Position = UDim2.new(1,-BottomRightControl.AbsoluteSize.X,1,-BottomRightControl.AbsoluteSize.Y) + +end + +local function resize() + if screen.AbsoluteSize.x > screen.AbsoluteSize.y then + makeYRelative() + else + makeXRelative() + end + if currentLoadout then + currentLoadout.Position = + UDim2.new(0,screen.AbsoluteSize.X/2 -currentLoadout.AbsoluteSize.X/2,currentLoadout.Position.Y.Scale,-currentLoadout.AbsoluteSize.Y - loadoutPadding) + end +end +screen.Changed:connect(function(property) + + if property == "AbsoluteSize" then + wait() + resize() + end + +end) + +wait() +resize() + diff --git a/app/files/CoreGui/36040464 b/app/files/CoreGui/36040464 new file mode 100644 index 0000000..1060c5c --- /dev/null +++ b/app/files/CoreGui/36040464 @@ -0,0 +1,35 @@ +-- this script is responsible for moving the material menu in and out when selected/deselected + +local button = script.Parent +local activated = false + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForChild(script.Parent,"PaintMenu") +local menu = script.Parent:FindFirstChild("PaintMenu") + +local moving = false +local speed = 0.35 + +button.Changed:connect(function(property) + + if property ~= "Selected" then return end + if moving then return end + moving = true activated = button.Selected + if activated then + while menu.Position.X.Scale < 2.6 do + menu.Position = UDim2.new(menu.Position.X.Scale + speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + else + while menu.Position.X.Scale > -2.7 do + menu.Position = UDim2.new(menu.Position.X.Scale - speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + end + moving = false +end) \ No newline at end of file diff --git a/app/files/CoreGui/36040483 b/app/files/CoreGui/36040483 new file mode 100644 index 0000000..d28a1aa --- /dev/null +++ b/app/files/CoreGui/36040483 @@ -0,0 +1,36 @@ +-- this script is responsible for moving the surface menu in and out when selected/deselected + +local button = script.Parent +local activated = false + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForChild(script.Parent,"SurfaceMenu") +local menu = script.Parent:FindFirstChild("SurfaceMenu") + +local speed = 0.35 +local moving = false + +button.Changed:connect(function(property) + + if property ~= "Selected" then return end + if moving then return end + moving = true + activated = button.Selected + if activated then + while menu.Position.X.Scale < 2.6 do + menu.Position = UDim2.new(menu.Position.X.Scale + speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + else + while menu.Position.X.Scale > -2.6 do + menu.Position = UDim2.new(menu.Position.X.Scale - speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + end + +moving = false end) \ No newline at end of file diff --git a/app/files/CoreGui/36040495 b/app/files/CoreGui/36040495 new file mode 100644 index 0000000..5b54f7c --- /dev/null +++ b/app/files/CoreGui/36040495 @@ -0,0 +1,36 @@ +-- this script is responsible for moving the material menu in and out when selected/deselected + +local button = script.Parent +local activated = false + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForChild(script.Parent,"MaterialMenu") +local menu = script.Parent:FindFirstChild("MaterialMenu") + +local moving = false +local speed = 0.35 + +button.Changed:connect(function(property) + if property ~= "Selected" then return end + if moving then return end + + moving = true + activated = button.Selected + if activated then + while menu.Position.X.Scale < 1.4 do + menu.Position = UDim2.new(menu.Position.X.Scale + speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + else + while menu.Position.X.Scale > -4 do + menu.Position = UDim2.new(menu.Position.X.Scale - speed,menu.Position.X.Offset,menu.Position.Y.Scale,menu.Position.Y.Offset) + wait() + end + end + +moving = false end) \ No newline at end of file diff --git a/app/files/CoreGui/36051740 b/app/files/CoreGui/36051740 new file mode 100644 index 0000000..5fc93c3 --- /dev/null +++ b/app/files/CoreGui/36051740 @@ -0,0 +1,707 @@ +--[[if game.Players.LocalPlayer.Name == "Player" then + return +end]] + +-- Script Globals +local buildDeleteID = 36738185 +local buildStamperID = 87198196 +local buildGroupDraggerID = 36334760 +local buildConfigID = 87240571 +local buildRotateID = 0 + +local buildTools = {} + +local player = nil +local backpack = nil + + + + +-- Functions +local function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end +end + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +function getLatestPlayer() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer + waitForChild(player,"Backpack") + backpack = player.Backpack +end + +function backpackHasTool(tool) + local backpackChildren = backpack:GetChildren() + for i = 1, #backpackChildren do + if backpackChildren[i] == tool then + return true + end + end + return false +end + +function getToolAssetID(assetID,toolName) + local newTool = game:GetService("InsertService"):LoadAsset(assetID) + newTool = newTool:FindFirstChild(toolName) + return newTool +end + +function giveAssetId(assetID,toolName) + local theTool = getToolAssetID(assetID,toolName) + if theTool and not backpackHasTool(theTool) then + theTool.Parent = backpack + table.insert(buildTools,theTool) + end +end + +function givePlayerBuildTools() + getLatestPlayer() + + giveAssetId(buildStamperID,"StamperTool") + giveAssetId(buildDeleteID,"BuildDelete") + giveAssetId(buildGroupDraggerID,"BuildGroupDragger") + giveAssetId(buildRotateID,"BuildRotate") + giveAssetId(buildConfigID,"BuildConfiguration") +end + +function takePlayerBuildTools() + for k,v in ipairs(buildTools) do + v.Parent = nil + end + buildTools = {} +end + + + +print("start script") +-- Start Script +if game.CoreGui.RobloxGui.ControlFrame.BottomLeftControl:FindFirstChild("ToolButton") then -- we are still using old build tools (TODO: remove this when new tools are good enough) + print("old tools") + local localAssetBase = "rbxasset://textures/ui/" + + local control = script.Parent:FindFirstChild("ControlFrame") + local bottomLeftControls + local buildTools + + if control then + bottomLeftControls = control.BottomLeftControl + buildTools = control.BuildTools + else + bottomLeftControls = script.Parent.BottomLeftControl + buildTools = script.Parent.BuildTools + end + + buildToolsVisible = false + + -- used right now to push build tools down a bit (should change in client) + buildTools.Frame.Position = UDim2.new(-0.15,0,0.3,0) + + bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton.png" + + local prevObject = nil + + local tryCount = 0 + + local location = 0 + + local name + + local buttons = {} + local value + + local player + local backpack + + local resetCon + + local equippedTool + local selectedButton + + -- the build tools + local buildResize + local buildClone + local buildInsert + local buildDragger + local buildColor + local buildGroupDragger + local buildSurface + local buildMaterial + local buildConfiguration + local buildDelete + + -- the build tools asset ids + local buildResizeID = 36738142 + local buildCloneID = 36017373 + local buildInsertID = 36431591 + local buildDraggerID = 36068233 + local buildColorID = 35205409 + local buildGroupDraggerID = 36334760 + local buildSurfaceID = 35226945 + local buildMaterialID = 35223828 + local buildConfigurationID = 36270159 + local buildDeleteID = 36738185 + + + function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end + end + + function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + end + + function setPlayerAndBackpack() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer + backpack = player.Backpack + end + + setPlayerAndBackpack() + + function playerReset() + + loadTools() + local prevObject = nil + local equippedTool = nil + setPlayerAndBackpack() + resetCon:disconnect() + resetCon = game.Players.LocalPlayer.CharacterAdded:connect(playerReset) + + end + + resetCon = game.Players.LocalPlayer.CharacterAdded:connect(playerReset) + + function giveSelectedValue(tool) + + if tool:FindFirstChild("SelectedButton") == nil then + local selected = Instance.new("ObjectValue") + selected.Name = "SelectedButton" + selected.RobloxLocked = true + + if tool.Name == "BuildConfiguration" then + selected.Value = buildTools.Frame.MiscTools.PropertyTool + elseif tool.Name == "BuildInsert" then + selected.Value = buildTools.Frame + end + selected.Parent = tool + end + + end + + function loadTools() + -- load in all tools to decrease issues with loading, also don't have to keep reloading assets + buildResize = game:GetService("InsertService"):LoadAsset(buildResizeID) + buildResize = buildResize:FindFirstChild("BuildResize") + giveSelectedValue(buildResize) + buildResize.Parent = backpack + + buildClone = game:GetService("InsertService"):LoadAsset(buildCloneID) + buildClone = buildClone:FindFirstChild("BuildClone") + giveSelectedValue(buildClone) + buildClone.Parent = backpack + + buildInsert = game:GetService("InsertService"):LoadAsset(buildInsertID) + buildInsert = buildInsert:FindFirstChild("BuildInsert") + giveSelectedValue(buildInsert) + buildInsert.Parent = backpack + + buildDragger = game:GetService("InsertService"):LoadAsset(buildDraggerID) + buildDragger = buildDragger:FindFirstChild("BuildDragger") + giveSelectedValue(buildDragger) + buildDragger.Parent = backpack + + buildColor = game:GetService("InsertService"):LoadAsset(buildColorID) + buildColor = buildColor:FindFirstChild("BuildColorTester") + giveSelectedValue(buildColor) + buildColor.Parent = backpack + + buildGroupDragger = game:GetService("InsertService"):LoadAsset(buildGroupDraggerID) + buildGroupDragger = buildGroupDragger:FindFirstChild("BuildGroupDragger") + giveSelectedValue(buildGroupDragger) + buildGroupDragger.Parent = backpack + + buildSurface = game:GetService("InsertService"):LoadAsset(buildSurfaceID) + buildSurface = buildSurface:FindFirstChild("BuildSurfaceTest") + giveSelectedValue(buildSurface) + buildSurface.Parent = backpack + + buildMaterial = game:GetService("InsertService"):LoadAsset(buildMaterialID) + buildMaterial = buildMaterial:FindFirstChild("BuildMaterialTest") + giveSelectedValue(buildMaterial) + buildMaterial.Parent = backpack + + buildConfiguration = game:GetService("InsertService"):LoadAsset(buildConfigurationID) + buildConfiguration = buildConfiguration:FindFirstChild("BuildConfiguration") + giveSelectedValue(buildConfiguration) + buildConfiguration.Parent = backpack + + buildDelete = game:GetService("InsertService"):LoadAsset(buildDeleteID) + buildDelete = buildDelete:FindFirstChild("BuildDelete") + giveSelectedValue(buildDelete) + buildDelete.Parent = backpack + end + loadTools() + + waitForChild(buildTools,"SelectedButton") + + buildTools.SelectedButton.Changed:connect(function(property) + + if value == buildTools.SelectedButton.Value then return end + value = buildTools.SelectedButton.Value + + selectedButton = buildTools.SelectedButton.Value + + if equippedTool then + equippedTool.SelectedButton.Value = selectedButton + end + end) + + + + local frames = buildTools.Frame:GetChildren() + for i = 1, #frames do + if frames[i]:IsA("Frame") and frames[i].Name ~= "Divs" then + local buttonSubSet = frames[i]:GetChildren() + for j = 1, #buttonSubSet do + table.insert(buttons,buttonSubSet[j]) + end + end + end + + function unEquipAnyItems() + + playerItems = player.Character:GetChildren() + for i = 1, #playerItems do + if playerItems[i]:isA("Tool") or playerItems[i]:isA("HopperBin") then + playerItems[i].Parent = backpack + return + end + end + + end + unEquipAnyItems() + + --------------------- Build Bar Tool Tip Code ----------------------------- + + function setUpText(toolTip) + + local name = toolTip.Parent.Name + if name == "CloneObject" then toolTip.Text = "Copy Part" + elseif name == "DeleteObject" then toolTip.Text = "Delete Part" + elseif name == "InsertObject" then toolTip.Text = "Insert Part" + elseif name == "PropertyTool" then toolTip.Text = "Edit Part" + elseif name == "GroupMove" then toolTip.Text = "Move Models and Parts" + elseif name == "PartMove" then toolTip.Text = "Move Parts" + elseif name == "ScaleObject" then toolTip.Text = "Resize a part" + elseif name == "InputSelector" then toolTip.Text = "Change Surface" + elseif name == "MaterialSelector" then toolTip.Text = "Change Material" + elseif name == "PaintTool" then toolTip.Text = "Change Color" end + + end + + local fadeSpeed = 0.1 + function buildToolsTips() + + local frame = Instance.new("TextLabel") + frame.Name = "ToolTip" + frame.Text = "Hi! I'm a ToolTip!" + frame.ZIndex = 10 + frame.Size = UDim2.new(2,0,1,0) + frame.Position = UDim2.new(1,0,0,0) + frame.BackgroundColor3 = Color3.new(1,1,153/255) + frame.BackgroundTransparency = 1 + frame.TextTransparency = 1 + frame.TextWrap = true + + for i = 1, #buttons do + local tip = frame:Clone() + tip.RobloxLocked = true + tip.Parent = buttons[i] + setUpText(tip) + local inside = Instance.new("BoolValue") + inside.Value = false + inside.RobloxLocked = true + tip.Parent.MouseEnter:connect(function() + inside.Value = true + wait(1.2) + if inside.Value then + while inside.Value and tip.BackgroundTransparency > 0 do + tip.BackgroundTransparency = tip.BackgroundTransparency - fadeSpeed + tip.TextTransparency = tip.TextTransparency - fadeSpeed + wait() + end + end + end) + tip.Parent.MouseLeave:connect(function() + inside.Value = false + tip.BackgroundTransparency = 1 + tip.TextTransparency = 1 + end) + tip.Parent.MouseButton1Click:connect(function() + inside.Value = false + tip.BackgroundTransparency = 1 + tip.TextTransparency = 1 + end) + end + end + + --------------------- End Build Bar Tool Tip Code -------------------------- + + + + ----------------------------- Reset Button Code ---------------------------- + function reset(subset) + + local buttons = subset:GetChildren() + if subset.Name == "AddDeleteTools" then + for i = 1, #buttons do + buttons[i].Selected = false + if buttons[i].Name == "CloneObject" then buttons[i].Image = localAssetBase .. "CloneButton.png" + elseif buttons[i].Name == "DeleteObject" then buttons[i].Image = localAssetBase .. "DeleteButton.png" + elseif buttons[i].Name == "InsertObject" then buttons[i].Image = localAssetBase .. "InsertButton.png" end + end + + + elseif subset.Name == "MiscTools" then + for i = 1, #buttons do + buttons[i].Selected = false + if buttons[i].Name == "PropertyTool" then buttons[i].Image = localAssetBase .. "PropertyButton.png" end + end + + + elseif subset.Name == "PhysicalTools" then + for i = 1, #buttons do + buttons[i].Selected = false + if buttons[i].Name == "GroupMove" then buttons[i].Image = localAssetBase .. "GroupMoveButton.png" + elseif buttons[i].Name == "PartMove" then buttons[i].Image = localAssetBase .."PartMoveButton.png" + elseif buttons[i].Name == "ScaleObject" then buttons[i].Image = localAssetBase .. "ScaleButton.png" end + end + + + elseif subset.Name == "PropertyTools" then + for i = 1, #buttons do + buttons[i].Selected = false + if buttons[i].Name == "InputSelector" then buttons[i].Image = localAssetBase .. "SurfaceButton.png" + elseif buttons[i].Name == "MaterialSelector" then buttons[i].Image = localAssetBase .. "MaterialButton.png" + elseif buttons[i].Name == "PaintTool" then buttons[i].Image = localAssetBase .. "PaintButton.png" end + end + end + + end + + function resetAllButtons() + + local categories = buildTools.Frame:GetChildren() + for i = 1, #categories do + reset(categories[i]) + end + + end + + ----------------------------- End Reset Button Code ------------------------- + resetAllButtons() + + + + -- sets button to active image + function setButtonStateActive(Object, Name) + + if Name == "BuildInsert" then Object.Image = localAssetBase .. "InsertButton_dn.png" Object.Selected = true + elseif Name == "BuildDelete" then Object.Image = localAssetBase .. "DeleteButton_dn.png" Object.Selected = true + elseif Name == "BuildClone" then Object.Image = localAssetBase .. "CloneButton_dn.png" Object.Selected = true + elseif Name == "BuildConfiguration" then Object.Image = localAssetBase .. "PropertyButton_dn.png" Object.Selected = true + elseif Name == "BuildDragger" then Object.Image = localAssetBase .. "PartMoveButton_dn.png" Object.Selected = true + elseif Name == "BuildGroupDragger" then Object.Image = localAssetBase .. "GroupMoveButton_dn.png" Object.Selected = true + elseif Name == "BuildResize" then Object.Image = localAssetBase .. "ScaleButton_dn.png" Object.Selected = true + elseif Name == "BuildSurfaceTest" then Object.Image = localAssetBase .. "SurfaceButton_dn.png" Object.Selected = true + elseif Name == "BuildMaterialTest" then Object.Image = localAssetBase .. "MaterialButton_dn.png" Object.Selected = true + elseif Name == "BuildColorTester" then Object.Image = localAssetBase .. "PaintButton_dn.png" Object.Selected = true + end + + end + + + function removeTool(tool, Object) + + playerItems = player.Characer:GetChildren() + for i = 1, #playerItems do + if playerItems[i].Name == tool and playerItems[i]:isA("Tool") then + playerItems[i].Parent = backpack + playerItems[i]:remove() + return + end + end + + backpackStuff = backpack:GetChildren() + for i = 1, #backpackStuff do + if backpackStuff[i].Name == tool then + backpackStuff[i].Parent = nil + backpackStuff[i]:remove() + return + end + end + + end + + + + function getTool(tool) + playerItems = player.Character:GetChildren() + for i = 1, #playerItems do + if playerItems[i].Name == tool then + if playerItems[i]:isA("Tool") then return playerItems[i], true end + end + end + + backpackStuff = backpack:GetChildren() + for i = 1, #backpackStuff do + if backpackStuff[i].Name == tool then + return backpackStuff[i], false + end + end + end + + function toolDeselection(Name,Object,id) + + local hasTool, equipped = getTool(Name) + if equipped then + resetAllButtons() + unEquipAnyItems() + hasTool.Parent = nil + hasTool:remove() + + if equippedTool then + equippedTool.Parent = nil + equippedTool:remove() + equippedTool = nil + end + end + + end + + + -- Used to find allocated tool that we got at beginning of script + function getToolLocal(Name) + + if Name == "BuildInsert" then return buildInsert + elseif Name == "BuildDelete" then return buildDelete + elseif Name == "BuildClone" then return buildClone + elseif Name == "BuildConfiguration" then return buildConfiguration + elseif Name == "BuildDragger" then return buildDragger + elseif Name == "BuildGroupDragger" then return buildGroupDragger + elseif Name == "BuildResize" then return buildResize + elseif Name == "BuildSurfaceTest" then return buildSurface + elseif Name == "BuildMaterialTest" then return buildMaterial + elseif Name == "BuildColorTester" then return buildColor + end + + end + + function assureTool(tool, id, Name) + + if tool == nil or type(tool) ~= "userdata" or tool:FindFirstChild("Handle") == nil then + tool = game:GetService("InsertService"):LoadAsset(id) + + local instances = tool:GetChildren() + if #instances == 0 then + tool:Remove() + return nil + end + + tool = tool:FindFirstChild(Name) + tool.Parent = backpack + end + + end + + -- general function to get tool when button is clicked + function toolSelection(Name,Object,id) + local tool = nil + local hasTool, equipped = getTool(Name) + if equipped then + + if hasTool:FindFirstChild("SelectedButton") == false then + giveSelectedValue(hasTool) + end + + resetAllButtons() + unEquipAnyItems() + hasTool.Parent = nil + + if equippedTool ~= nil then + equippedTool.Parent = backpack + end + + elseif hasTool then + + -- failsafe to make sure we load in tool, no matter what + assureTool(hasTool,id, Name) + if hasTool == nil then return nil end + + unEquipAnyItems() + Object.Selected = true + hasTool.Parent = player.Character + equippedTool = hasTool + hasTool.Unequipped:connect(function() resetAllButtons() end) + setButtonStateActive(Object, Name) + + else + + -- first try to find tool we already loaded in + tool = getToolLocal(Name) + + -- failsafe to make sure we load in tool, no matter what + assureTool(tool,id, Name) + if tool == nil then return nil end + + if tool then + + if tool:FindFirstChild("SelectedButton") == nil then + local selected = Instance.new("ObjectValue") + selected.Name = "SelectedButton" + selected.RobloxLocked = true + + if Name == "BuildConfiguration" then + selected.Value = buildTools.Frame.MiscTools.PropertyTool + elseif Name == "BuildInsert" then + selected.Value = buildTools.Frame + end + + selected.Parent = tool + end + + unEquipAnyItems() + if equippedTool ~= nil then + if prevObject then resetAllButtons() end + equippedTool.Parent = backpack + end + + equippedTool = tool + equippedTool.Parent = player.Character + + Object.Selected = true + equippedTool.Unequipped:connect(function() resetAllButtons() end) + setButtonStateActive(Object, Name) + end + end + prevObject = Object + end + + + -- used to animate the tool bar open/close + local scrollSpeed = 0.01 + function openCloseTools() + buildToolsVisible = not buildToolsVisible + if buildToolsVisible then + bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton_dn.png" + buildTools.Frame.CloseButton.Image = localAssetBase .. "CloseButton.png" + buildTools.Frame.Size = UDim2.new(0.15,0,0.57,0) + buildTools.Frame.Position = UDim2.new(-0.1, 0,buildTools.Frame.Position.Y.Scale,0) + while buildTools.Frame.Position.X.Scale < -0.01 and buildToolsVisible do + buildTools.Frame.Position = UDim2.new(buildTools.Frame.Position.X.Scale + scrollSpeed, 0,buildTools.Frame.Position.Y.Scale,0) + wait() + end + buildTools.Frame.Position = UDim2.new(0, 0,buildTools.Frame.Position.Y.Scale,0) + else + bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton.png" + while buildTools.Frame.AbsolutePosition.X + buildTools.Frame.AbsoluteSize.X > 0 and not buildToolsVisible do + buildTools.Frame.Position = UDim2.new(buildTools.Frame.Position.X.Scale - scrollSpeed, 0,buildTools.Frame.Position.Y.Scale,0) + wait() + end + buildTools.Frame.Size = UDim2.new(0,buildTools.Frame.AbsoluteSize.X,buildTools.Frame.Size.Y.Scale,buildTools.Frame.Size.Y.Offset) + buildTools.Frame.Position = UDim2.new(0,-buildTools.Frame.AbsoluteSize.X,buildTools.Frame.Position.Y.Scale,buildTools.Frame.Position.Y.Offset) + end + end + + -- setup tool button listeners + bottomLeftControls.ToolButton.MouseButton1Click:connect(openCloseTools) + bottomLeftControls.ToolButton.MouseEnter:connect(function() if not buildToolsVisible then bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton_dn.png" end end) + bottomLeftControls.ToolButton.MouseLeave:connect(function() if not buildToolsVisible then bottomLeftControls.ToolButton.Image = localAssetBase .. "ToolButton.png" end end) + + -- close button on build tools + buildTools.Frame.CloseButton.MouseButton1Click:connect(openCloseTools) + buildTools.Frame.CloseButton.MouseEnter:connect(function() buildTools.Frame.CloseButton.Image = localAssetBase .. "CloseButton_dn.png" end) + buildTools.Frame.CloseButton.MouseLeave:connect(function() buildTools.Frame.CloseButton.Image = localAssetBase .. "CloseButton.png" end) + + buildToolsTips() + + -- Add/Delete Tools + buildTools.Frame.AddDeleteTools.DeleteObject.MouseButton1Click:connect(function() + toolSelection("BuildDelete", buildTools.Frame.AddDeleteTools.DeleteObject,buildDeleteID) end) + buildTools.Frame.AddDeleteTools.CloneObject.MouseButton1Click:connect(function() + toolSelection("BuildClone",buildTools.Frame.AddDeleteTools.CloneObject,buildCloneID) end) + buildTools.Frame.AddDeleteTools.InsertObject.MouseButton1Click:connect(function() + toolSelection("BuildInsert",buildTools.Frame.AddDeleteTools.InsertObject,buildInsertID) + if(buildTools.Frame:FindFirstChild("InsertToolboxMain")) then + buildTools.Frame.InsertToolboxMain.InsertMainDialog.InsertTab.CloseButton.ClosedState.Changed:connect(function(value) + if value == true then + toolSelection("BuildInsert",buildTools.Frame.AddDeleteTools.InsertObject,buildInsertID) + if(buildTools.Frame:FindFirstChild("InsertToolboxMain")) then + buildTools.Frame.InsertToolboxMain.InsertMainDialog.InsertTab.CloseButton.ClosedState.Value = false + end + end + end) + end + + end) + + -- Physical Tools + buildTools.Frame.PhysicalTools.ScaleObject.MouseButton1Click:connect(function() + toolSelection("BuildResize",buildTools.Frame.PhysicalTools.ScaleObject, buildResizeID) end) + --[[buildTools.Frame.PhysicalTools.PartMove.MouseButton1Click:connect(function() + toolSelection("BuildDragger",buildTools.Frame.PhysicalTools.PartMove,buildDraggerID) end)]] + buildTools.Frame.PhysicalTools.GroupMove.MouseButton1Click:connect(function() + toolSelection("BuildGroupDragger",buildTools.Frame.PhysicalTools.GroupMove,buildGroupDraggerID) end) + + -- Property Tools + buildTools.Frame.PropertyTools.MaterialSelector.MouseButton1Click:connect(function() + toolSelection("BuildMaterialTest",buildTools.Frame.PropertyTools.MaterialSelector,buildMaterialID) end) + buildTools.Frame.PropertyTools.MaterialSelector.MaterialMenu.CloseButton.ClosedState.Changed:connect(function(value) + if value == true then + toolSelection("BuildMaterialTest",buildTools.Frame.PropertyTools.MaterialSelector,buildMaterialID) + buildTools.Frame.PropertyTools.MaterialSelector.MaterialMenu.CloseButton.ClosedState.Value = false + end + end) + buildTools.Frame.PropertyTools.PaintTool.MouseButton1Click:connect(function() + toolSelection("BuildColorTester",buildTools.Frame.PropertyTools.PaintTool, buildColorID) end) + buildTools.Frame.PropertyTools.PaintTool.PaintMenu.CloseButton.ClosedState.Changed:connect(function(value) + if value == true then + toolSelection("BuildColorTester",buildTools.Frame.PropertyTools.PaintTool,buildColorID) + buildTools.Frame.PropertyTools.PaintTool.PaintMenu.CloseButton.ClosedState.Value = false + end + end) + buildTools.Frame.PropertyTools.InputSelector.MouseButton1Click:connect(function() + toolSelection("BuildSurfaceTest",buildTools.Frame.PropertyTools.InputSelector, buildSurfaceID) end) + buildTools.Frame.PropertyTools.InputSelector.SurfaceMenu.CloseButton.ClosedState.Changed:connect(function(value) + if value == true then + toolSelection("BuildSurfaceTest",buildTools.Frame.PropertyTools.InputSelector,buildSurfaceID) + buildTools.Frame.PropertyTools.InputSelector.SurfaceMenu.CloseButton.ClosedState.Value = false + end + end) + + -- Misc Tools + buildTools.Frame.MiscTools.PropertyTool.MouseButton1Click:connect(function() + toolSelection("BuildConfiguration",buildTools.Frame.MiscTools.PropertyTool, buildConfigurationID) end) + +else -- we are using new build tools + getLatestPlayer() + + givePlayerBuildTools() + + -- If player dies, we make sure to give them build tools again + player.CharacterAdded:connect(function() + takePlayerBuildTools() + givePlayerBuildTools() + end) +end \ No newline at end of file diff --git a/app/files/CoreGui/36868950 b/app/files/CoreGui/36868950 new file mode 100644 index 0000000..f0fee74 --- /dev/null +++ b/app/files/CoreGui/36868950 @@ -0,0 +1,109 @@ +local controlFrame = script.Parent:FindFirstChild("ControlFrame") + +if not controlFrame then return end + +local topLeftControl = controlFrame:FindFirstChild("TopLeftControl") +local bottomLeftControl = controlFrame:FindFirstChild("BottomLeftControl") +local bottomRightControl = controlFrame:FindFirstChild("BottomRightControl") + + +local frameTip = Instance.new("TextLabel") +frameTip.Name = "ToolTip" +frameTip.Text = "" +frameTip.Font = Enum.Font.ArialBold +frameTip.FontSize = Enum.FontSize.Size12 +frameTip.TextColor3 = Color3.new(1,1,1) +frameTip.BorderSizePixel = 0 +frameTip.ZIndex = 10 +frameTip.Size = UDim2.new(2,0,1,0) +frameTip.Position = UDim2.new(1,0,0,0) +frameTip.BackgroundColor3 = Color3.new(0,0,0) +frameTip.BackgroundTransparency = 1 +frameTip.TextTransparency = 1 +frameTip.TextWrap = true + +local inside = Instance.new("BoolValue") +inside.Name = "inside" +inside.Value = false +inside.Parent = frameTip + +function setUpListeners(frameToListen) + local fadeSpeed = 0.1 + frameToListen.Parent.MouseEnter:connect(function() + if frameToListen:FindFirstChild("inside") then + frameToListen.inside.Value = true + wait(1.2) + if frameToListen.inside.Value then + while frameToListen.inside.Value and frameToListen.BackgroundTransparency > 0 do + frameToListen.BackgroundTransparency = frameToListen.BackgroundTransparency - fadeSpeed + frameToListen.TextTransparency = frameToListen.TextTransparency - fadeSpeed + wait() + end + end + end + end) + function killTip(killFrame) + killFrame.inside.Value = false + killFrame.BackgroundTransparency = 1 + killFrame.TextTransparency = 1 + end + frameToListen.Parent.MouseLeave:connect(function() killTip(frameToListen) end) + frameToListen.Parent.MouseButton1Click:connect(function() killTip(frameToListen) end) +end + +function createSettingsButtonTip(parent) + if parent == nil then + parent = bottomLeftControl:FindFirstChild("SettingsButton") + end + + local toolTip = frameTip:clone() + toolTip.RobloxLocked = true + toolTip.Text = "Settings/Leave Game" + toolTip.Position = UDim2.new(0,0,0,-18) + toolTip.Size = UDim2.new(0,120,0,20) + toolTip.Parent = parent + setUpListeners(toolTip) +end + +wait(5) -- make sure we are loaded in, won't need tool tips for first 5 seconds anyway + +---------------- set up Bottom Left Tool Tips ------------------------- + +local bottomLeftChildren = bottomLeftControl:GetChildren() +local hasSettingsTip = false + +for i = 1, #bottomLeftChildren do + + if bottomLeftChildren[i].Name == "Exit" then + local exitTip = frameTip:clone() + exitTip.RobloxLocked = true + exitTip.Text = "Leave Place" + exitTip.Position = UDim2.new(0,0,-1,0) + exitTip.Size = UDim2.new(1,0,1,0) + exitTip.Parent = bottomLeftChildren[i] + setUpListeners(exitTip) + elseif bottomLeftChildren[i].Name == "SettingsButton" then + hasSettingsTip = true + createSettingsButtonTip(bottomLeftChildren[i]) + end +end + +---------------- set up Bottom Right Tool Tips ------------------------- + +local bottomRightChildren = bottomRightControl:GetChildren() + +for i = 1, #bottomRightChildren do + if bottomRightChildren[i].Name:find("Camera") ~= nil then + local cameraTip = frameTip:clone() + cameraTip.RobloxLocked = true + cameraTip.Text = "Camera View" + if bottomRightChildren[i].Name:find("Zoom") then + cameraTip.Position = UDim2.new(-1,0,-1.5) + else + cameraTip.Position = UDim2.new(0,0,-1.5,0) + end + cameraTip.Size = UDim2.new(2,0,1.25,0) + cameraTip.Parent = bottomRightChildren[i] + setUpListeners(cameraTip) + end +end diff --git a/app/files/CoreGui/37801172 b/app/files/CoreGui/37801172 new file mode 100644 index 0000000..edbda6c --- /dev/null +++ b/app/files/CoreGui/37801172 @@ -0,0 +1,115 @@ +-- Creates all neccessary scripts for the gui on initial load, everything except build tools +-- Created by Ben T. 10/29/10 +-- Please note that these are loaded in a specific order to diminish errors/perceived load time by user + +local scriptContext = game:GetService("ScriptContext") +local touchEnabled = false +pcall(function() touchEnabled = game:GetService("UserInputService").TouchEnabled end) + +-- library registration +scriptContext:AddCoreScript(60595695, scriptContext,"/Libraries/LibraryRegistration/LibraryRegistration") + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- Responsible for tracking logging items +local scriptContext = game:GetService("ScriptContext") +scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections") + +waitForChild(game:GetService("CoreGui"),"RobloxGui") +local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + +if not touchEnabled then + -- ToolTipper (creates tool tips for gui) + scriptContext:AddCoreScript(36868950,screenGui,"CoreScripts/ToolTip") + -- SettingsScript + scriptContext:AddCoreScript(46295863,screenGui,"CoreScripts/Settings") +else + scriptContext:AddCoreScript(153556783,screenGui,"CoreScripts/TouchControls") +end + +-- MainBotChatScript +scriptContext:AddCoreScript(39250920,screenGui,"CoreScripts/MainBotChatScript") + +-- Developer Console Script +scriptContext:AddCoreScript(157877000,screenGui,"CoreScripts/DeveloperConsole") + +-- Popup Script +scriptContext:AddCoreScript(48488451,screenGui,"CoreScripts/PopupScript") +-- Friend Notification Script (probably can use this script to expand out to other notifications) +scriptContext:AddCoreScript(48488398,screenGui,"CoreScripts/NotificationScript") +-- Chat script +scriptContext:AddCoreScript(97188756, screenGui, "CoreScripts/ChatScript") +-- Purchase Prompt Script +scriptContext:AddCoreScript(107893730, screenGui, "CoreScripts/PurchasePromptScript") +-- Health Script +scriptContext:AddCoreScript(153556822, screenGui, "CoreScripts/HealthScript") + +if not touchEnabled then + -- New Player List + scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript") +elseif screenGui.AbsoluteSize.Y > 600 then + -- New Player List + scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript") +else + delay(5, function() + if screenGui.AbsoluteSize.Y >= 600 then + -- New Player List + scriptContext:AddCoreScript(48488235,screenGui,"CoreScripts/PlayerListScript") + end + end) +end + +if game.CoreGui.Version >= 3 then + -- Backpack Builder, creates most of the backpack gui + scriptContext:AddCoreScript(53878047,screenGui,"CoreScripts/BackpackScripts/BackpackBuilder") + + waitForChild(screenGui,"CurrentLoadout") + waitForChild(screenGui,"Backpack") + local Backpack = screenGui.Backpack + + -- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly + if game.CoreGui.Version >= 7 then + scriptContext:AddCoreScript(89449093,Backpack,"CoreScripts/BackpackScripts/BackpackManager") + end + + -- Backpack Gear (handles all backpack gear tab stuff) + game:GetService("ScriptContext"):AddCoreScript(89449008,Backpack,"CoreScripts/BackpackScripts/BackpackGear") + -- Loadout Script, used for gear hotkeys + scriptContext:AddCoreScript(53878057,screenGui.CurrentLoadout,"CoreScripts/BackpackScripts/LoadoutScript") + if game.CoreGui.Version >= 8 then + -- Wardrobe script handles all character dressing operations + scriptContext:AddCoreScript(-1,Backpack,"CoreScripts/BackpackScripts/BackpackWardrobe") + end +end + +local IsPersonalServer = not not game.Workspace:FindFirstChild("PSVariable") +if IsPersonalServer then + game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager") +end +game.Workspace.ChildAdded:connect(function(nchild) + if nchild.Name=='PSVariable' and nchild:IsA('BoolValue') then + IsPersonalServer = true + game:GetService("ScriptContext"):AddCoreScript(64164692,game.Players.LocalPlayer,"BuildToolManager") + end +end) + +if touchEnabled then -- touch devices don't use same control frame + -- only used for touch device button generation + scriptContext:AddCoreScript(152908679,screenGui,"CoreScripts/ContextActionTouch") + + waitForChild(screenGui, 'ControlFrame') + waitForChild(screenGui.ControlFrame, 'BottomLeftControl') + screenGui.ControlFrame.BottomLeftControl.Visible = false + + waitForChild(screenGui.ControlFrame, 'TopLeftControl') + screenGui.ControlFrame.TopLeftControl.Visible = false +end \ No newline at end of file diff --git a/app/files/CoreGui/37801173 b/app/files/CoreGui/37801173 new file mode 100644 index 0000000..9750d26 --- /dev/null +++ b/app/files/CoreGui/37801173 @@ -0,0 +1,74 @@ +-- Creates all neccessary scripts for the gui on initial load, everything except build tools +-- Created by Ben T. 10/29/10 +-- Please note that these are loaded in a specific order to diminish errors/perceived load time by user +local scriptContext = game:GetService("ScriptContext") +local touchEnabled = false +pcall(function() touchEnabled = game:GetService("UserInputService").TouchEnabled end) + +-- library registration +scriptContext:AddCoreScript(60595696, scriptContext,"/Libraries/LibraryRegistration/LibraryRegistration") + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- Responsible for tracking logging items +local scriptContext = game:GetService("ScriptContext") +scriptContext:AddCoreScript(59002209, scriptContext, "CoreScripts/Sections") + +waitForChild(game:GetService("CoreGui"),"RobloxGui") +local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + +if not touchEnabled then + -- ToolTipper (creates tool tips for gui) + scriptContext:AddCoreScript(36868950,screenGui,"CoreScripts/ToolTip") + -- SettingsScript + scriptContext:AddCoreScript(46295864,screenGui,"CoreScripts/Settings") +end + +-- MainBotChatScript +scriptContext:AddCoreScript(39250920,screenGui,"CoreScripts/MainBotChatScript") +-- New Player List +scriptContext:AddCoreScript(48488236,screenGui,"CoreScripts/PlayerListScript") +-- Popup Script +scriptContext:AddCoreScript(48488451,screenGui,"CoreScripts/PopupScript") +-- Friend Notification Script (probably can use this script to expand out to other notifications) +scriptContext:AddCoreScript(48488398,screenGui,"CoreScripts/NotificationScript") +-- Chat script +scriptContext:AddCoreScript(97188757, screenGui, "CoreScripts/ChatScript") + + +if game.CoreGui.Version >= 3 then + -- Backpack Builder, creates most of the backpack gui + scriptContext:AddCoreScript(53878048,screenGui,"CoreScripts/BackpackScripts/BackpackBuilder") + + waitForChild(screenGui,"CurrentLoadout") + waitForChild(screenGui,"Backpack") + local Backpack = screenGui.Backpack + + -- Manager handles all big backpack state changes, other scripts subscribe to this and do things accordingly + if game.CoreGui.Version >= 7 then + scriptContext:AddCoreScript(89449094,Backpack,"CoreScripts/BackpackScripts/BackpackManager") + end + + -- Backpack Gear (handles all backpack gear tab stuff) + game:GetService("ScriptContext"):AddCoreScript(89449009,Backpack,"CoreScripts/BackpackScripts/BackpackGear") + -- Loadout Script, used for gear hotkeys + scriptContext:AddCoreScript(53878058,screenGui.CurrentLoadout,"CoreScripts/BackpackScripts/LoadoutScript") + if game.CoreGui.Version >= 8 then + -- Wardrobe script handles all character dressing operations + scriptContext:AddCoreScript(-1,Backpack,"CoreScripts/BackpackScripts/BackpackWardrobe") + end +end + +if touchEnabled then -- touch devices don't use same control frame + waitForChild(screenGui, 'ControlFrame') + screenGui.ControlFrame.Visible = false +end diff --git a/app/files/CoreGui/39250920 b/app/files/CoreGui/39250920 new file mode 100644 index 0000000..5356cdf --- /dev/null +++ b/app/files/CoreGui/39250920 @@ -0,0 +1,560 @@ +function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end +end + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + + +local mainFrame +local choices = {} +local lastChoice +local choiceMap = {} +local currentConversationDialog +local currentConversationPartner +local currentAbortDialogScript + +local tooFarAwayMessage = "You are too far away to chat!" +local tooFarAwaySize = 300 +local characterWanderedOffMessage = "Chat ended because you walked away" +local characterWanderedOffSize = 350 +local conversationTimedOut = "Chat ended because you didn't reply" +local conversationTimedOutSize = 350 + +local player +local screenGui +local chatNotificationGui +local messageDialog +local timeoutScript +local reenableDialogScript +local dialogMap = {} +local dialogConnections = {} + +local gui = nil +waitForChild(game,"CoreGui") +waitForChild(game.CoreGui,"RobloxGui") +if game.CoreGui.RobloxGui:FindFirstChild("ControlFrame") then + gui = game.CoreGui.RobloxGui.ControlFrame +else + gui = game.CoreGui.RobloxGui +end + +function currentTone() + if currentConversationDialog then + return currentConversationDialog.Tone + else + return Enum.DialogTone.Neutral + end +end + + +function createChatNotificationGui() + chatNotificationGui = Instance.new("BillboardGui") + chatNotificationGui.Name = "ChatNotificationGui" + chatNotificationGui.ExtentsOffset = Vector3.new(0,1,0) + chatNotificationGui.Size = UDim2.new(4, 0, 5.42857122, 0) + chatNotificationGui.SizeOffset = Vector2.new(0,0) + chatNotificationGui.StudsOffset = Vector3.new(0.4, 4.3, 0) + chatNotificationGui.Enabled = true + chatNotificationGui.RobloxLocked = true + chatNotificationGui.Active = true + + local image = Instance.new("ImageLabel") + image.Name = "Image" + image.Active = false + image.BackgroundTransparency = 1 + image.Position = UDim2.new(0,0,0,0) + image.Size = UDim2.new(1.0,0,1.0,0) + image.Image = "" + image.RobloxLocked = true + image.Parent = chatNotificationGui + + + local button = Instance.new("ImageButton") + button.Name = "Button" + button.AutoButtonColor = false + button.Position = UDim2.new(0.0879999995, 0, 0.0529999994, 0) + button.Size = UDim2.new(0.829999983, 0, 0.460000008, 0) + button.Image = "" + button.BackgroundTransparency = 1 + button.RobloxLocked = true + button.Parent = image +end + +function getChatColor(tone) + if tone == Enum.DialogTone.Neutral then + return Enum.ChatColor.Blue + elseif tone == Enum.DialogTone.Friendly then + return Enum.ChatColor.Green + elseif tone == Enum.DialogTone.Enemy then + return Enum.ChatColor.Red + end +end + +function styleChoices(tone) + for i, obj in pairs(choices) do + resetColor(obj, tone) + end + resetColor(lastChoice, tone) +end + +function styleMainFrame(tone) + if tone == Enum.DialogTone.Neutral then + mainFrame.Style = Enum.FrameStyle.ChatBlue + mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png" + elseif tone == Enum.DialogTone.Friendly then + mainFrame.Style = Enum.FrameStyle.ChatGreen + mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botGreen_tailRight.png" + elseif tone == Enum.DialogTone.Enemy then + mainFrame.Style = Enum.FrameStyle.ChatRed + mainFrame.Tail.Image = "rbxasset://textures/chatBubble_botRed_tailRight.png" + end + + styleChoices(tone) +end +function setChatNotificationTone(gui, purpose, tone) + if tone == Enum.DialogTone.Neutral then + gui.Image.Image = "rbxasset://textures/chatBubble_botBlue_notify_bkg.png" + elseif tone == Enum.DialogTone.Friendly then + gui.Image.Image = "rbxasset://textures/chatBubble_botGreen_notify_bkg.png" + elseif tone == Enum.DialogTone.Enemy then + gui.Image.Image = "rbxasset://textures/chatBubble_botRed_notify_bkg.png" + end + if purpose == Enum.DialogPurpose.Quest then + gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_bang.png" + elseif purpose == Enum.DialogPurpose.Help then + gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_question.png" + elseif purpose == Enum.DialogPurpose.Shop then + gui.Image.Button.Image = "rbxasset://textures/chatBubble_bot_notify_money.png" + end +end + +function createMessageDialog() + messageDialog = Instance.new("Frame"); + messageDialog.Name = "DialogScriptMessage" + messageDialog.Style = Enum.FrameStyle.RobloxRound + messageDialog.Visible = false + + local text = Instance.new("TextLabel") + text.Name = "Text" + text.Position = UDim2.new(0,0,0,-1) + text.Size = UDim2.new(1,0,1,0) + text.FontSize = Enum.FontSize.Size14 + text.BackgroundTransparency = 1 + text.TextColor3 = Color3.new(1,1,1) + text.RobloxLocked = true + text.Parent = messageDialog +end + +function showMessage(msg, size) + messageDialog.Text.Text = msg + messageDialog.Size = UDim2.new(0,size,0,40) + messageDialog.Position = UDim2.new(0.5, -size/2, 0.5, -40) + messageDialog.Visible = true + wait(2) + messageDialog.Visible = false +end + +function variableDelay(str) + local length = math.min(string.len(str), 100) + wait(0.75 + ((length/75) * 1.5)) +end + +function resetColor(frame, tone) + if tone == Enum.DialogTone.Neutral then + frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255) + frame.Number.TextColor3 = Color3.new(45/255, 142/255, 245/255) + elseif tone == Enum.DialogTone.Friendly then + frame.BackgroundColor3 = Color3.new(0/255, 77/255, 0/255) + frame.Number.TextColor3 = Color3.new(0/255, 190/255, 0/255) + elseif tone == Enum.DialogTone.Enemy then + frame.BackgroundColor3 = Color3.new(140/255, 0/255, 0/255) + frame.Number.TextColor3 = Color3.new(255/255,88/255, 79/255) + end +end + +function highlightColor(frame, tone) + if tone == Enum.DialogTone.Neutral then + frame.BackgroundColor3 = Color3.new(2/255, 108/255, 255/255) + frame.Number.TextColor3 = Color3.new(1, 1, 1) + elseif tone == Enum.DialogTone.Friendly then + frame.BackgroundColor3 = Color3.new(0/255, 128/255, 0/255) + frame.Number.TextColor3 = Color3.new(1, 1, 1) + elseif tone == Enum.DialogTone.Enemy then + frame.BackgroundColor3 = Color3.new(204/255, 0/255, 0/255) + frame.Number.TextColor3 = Color3.new(1, 1, 1) + end +end + +function wanderDialog() + print("Wander") + mainFrame.Visible = false + endDialog() + showMessage(characterWanderedOffMessage, characterWanderedOffSize) +end + +function timeoutDialog() + print("Timeout") + mainFrame.Visible = false + endDialog() + showMessage(conversationTimedOut, conversationTimedOutSize) +end +function normalEndDialog() + print("Done") + endDialog() +end + +function endDialog() + if currentAbortDialogScript then + currentAbortDialogScript:Remove() + currentAbortDialogScript = nil + end + + local dialog = currentConversationDialog + currentConversationDialog = nil + if dialog and dialog.InUse then + local reenableScript = reenableDialogScript:Clone() + reenableScript.archivable = false + reenableScript.Disabled = false + reenableScript.Parent = dialog + end + + for dialog, gui in pairs(dialogMap) do + if dialog and gui then + gui.Enabled = not dialog.InUse + end + end + + currentConversationPartner = nil +end + +function sanitizeMessage(msg) + if string.len(msg) == 0 then + return "..." + else + return msg + end +end + +function selectChoice(choice) + renewKillswitch(currentConversationDialog) + + --First hide the Gui + mainFrame.Visible = false + if choice == lastChoice then + game.Chat:Chat(game.Players.LocalPlayer.Character, "Goodbye!", getChatColor(currentTone())) + + normalEndDialog() + else + local dialogChoice = choiceMap[choice] + + game.Chat:Chat(game.Players.LocalPlayer.Character, sanitizeMessage(dialogChoice.UserDialog), getChatColor(currentTone())) + wait(1) + currentConversationDialog:SignalDialogChoiceSelected(player, dialogChoice) + game.Chat:Chat(currentConversationPartner, sanitizeMessage(dialogChoice.ResponseDialog), getChatColor(currentTone())) + + variableDelay(dialogChoice.ResponseDialog) + presentDialogChoices(currentConversationPartner, dialogChoice:GetChildren()) + end +end + +function newChoice(numberText) + local frame = Instance.new("TextButton") + frame.BackgroundColor3 = Color3.new(0/255, 0/255, 179/255) + frame.AutoButtonColor = false + frame.BorderSizePixel = 0 + frame.Text = "" + frame.MouseEnter:connect(function() highlightColor(frame, currentTone()) end) + frame.MouseLeave:connect(function() resetColor(frame, currentTone()) end) + frame.MouseButton1Click:connect(function() selectChoice(frame) end) + frame.RobloxLocked = true + + local number = Instance.new("TextLabel") + number.Name = "Number" + number.TextColor3 = Color3.new(127/255, 212/255, 255/255) + number.Text = numberText + number.FontSize = Enum.FontSize.Size14 + number.BackgroundTransparency = 1 + number.Position = UDim2.new(0,4,0,2) + number.Size = UDim2.new(0,20,0,24) + number.TextXAlignment = Enum.TextXAlignment.Left + number.TextYAlignment = Enum.TextYAlignment.Top + number.RobloxLocked = true + number.Parent = frame + + local prompt = Instance.new("TextLabel") + prompt.Name = "UserPrompt" + prompt.BackgroundTransparency = 1 + prompt.TextColor3 = Color3.new(1,1,1) + prompt.FontSize = Enum.FontSize.Size14 + prompt.Position = UDim2.new(0,28, 0, 2) + prompt.Size = UDim2.new(1,-32, 1, -4) + prompt.TextXAlignment = Enum.TextXAlignment.Left + prompt.TextYAlignment = Enum.TextYAlignment.Top + prompt.TextWrap = true + prompt.RobloxLocked = true + prompt.Parent = frame + + return frame +end +function initialize(parent) + choices[1] = newChoice("1)") + choices[2] = newChoice("2)") + choices[3] = newChoice("3)") + choices[4] = newChoice("4)") + + lastChoice = newChoice("5)") + lastChoice.UserPrompt.Text = "Goodbye!" + lastChoice.Size = UDim2.new(1,0,0,28) + + mainFrame = Instance.new("Frame") + mainFrame.Name = "UserDialogArea" + mainFrame.Size = UDim2.new(0, 350, 0, 200) + mainFrame.Style = Enum.FrameStyle.ChatBlue + mainFrame.Visible = false + + imageLabel = Instance.new("ImageLabel") + imageLabel.Name = "Tail" + imageLabel.Size = UDim2.new(0,62,0,53) + imageLabel.Position = UDim2.new(1,8,0.25) + imageLabel.Image = "rbxasset://textures/chatBubble_botBlue_tailRight.png" + imageLabel.BackgroundTransparency = 1 + imageLabel.RobloxLocked = true + imageLabel.Parent = mainFrame + + for n, obj in pairs(choices) do + obj.RobloxLocked = true + obj.Parent = mainFrame + end + lastChoice.RobloxLocked = true + lastChoice.Parent = mainFrame + + mainFrame.RobloxLocked = true + mainFrame.Parent = parent +end + +function presentDialogChoices(talkingPart, dialogChoices) + if not currentConversationDialog then + return + end + + currentConversationPartner = talkingPart + sortedDialogChoices = {} + for n, obj in pairs(dialogChoices) do + if obj:IsA("DialogChoice") then + table.insert(sortedDialogChoices, obj) + end + end + table.sort(sortedDialogChoices, function(a,b) return a.Name < b.Name end) + + if #sortedDialogChoices == 0 then + normalEndDialog() + return + end + + local pos = 1 + local yPosition = 0 + choiceMap = {} + for n, obj in pairs(choices) do + obj.Visible = false + end + + for n, obj in pairs(sortedDialogChoices) do + if pos <= #choices then + --3 lines is the maximum, set it to that temporarily + choices[pos].Size = UDim2.new(1, 0, 0, 24*3) + choices[pos].UserPrompt.Text = obj.UserDialog + local height = math.ceil(choices[pos].UserPrompt.TextBounds.Y/24)*24 + + choices[pos].Position = UDim2.new(0, 0, 0, yPosition) + choices[pos].Size = UDim2.new(1, 0, 0, height) + choices[pos].Visible = true + + choiceMap[choices[pos]] = obj + + yPosition = yPosition + height + pos = pos + 1 + end + end + + lastChoice.Position = UDim2.new(0,0,0,yPosition) + lastChoice.Number.Text = pos .. ")" + + mainFrame.Size = UDim2.new(0, 350, 0, yPosition+24+32) + mainFrame.Position = UDim2.new(0,20,0.0, -mainFrame.Size.Y.Offset-20) + styleMainFrame(currentTone()) + mainFrame.Visible = true +end + +function doDialog(dialog) + while not Instance.Lock(dialog, player) do + wait() + end + + if dialog.InUse then + Instance.Unlock(dialog) + return + else + dialog.InUse = true + Instance.Unlock(dialog) + end + + currentConversationDialog = dialog + game.Chat:Chat(dialog.Parent, dialog.InitialPrompt, getChatColor(dialog.Tone)) + variableDelay(dialog.InitialPrompt) + + presentDialogChoices(dialog.Parent, dialog:GetChildren()) +end + +function renewKillswitch(dialog) + if currentAbortDialogScript then + currentAbortDialogScript:Remove() + currentAbortDialogScript = nil + end + + currentAbortDialogScript = timeoutScript:Clone() + currentAbortDialogScript.archivable = false + currentAbortDialogScript.Disabled = false + currentAbortDialogScript.Parent = dialog +end + +function checkForLeaveArea() + while currentConversationDialog do + if currentConversationDialog.Parent and (player:DistanceFromCharacter(currentConversationDialog.Parent.Position) >= currentConversationDialog.ConversationDistance) then + wanderDialog() + end + wait(1) + end +end + +function startDialog(dialog) + if dialog.Parent and dialog.Parent:IsA("BasePart") then + if player:DistanceFromCharacter(dialog.Parent.Position) >= dialog.ConversationDistance then + showMessage(tooFarAwayMessage, tooFarAwaySize) + return + end + + for dialog, gui in pairs(dialogMap) do + if dialog and gui then + gui.Enabled = false + end + end + + renewKillswitch(dialog) + + delay(1, checkForLeaveArea) + doDialog(dialog) + end +end + +function removeDialog(dialog) + if dialogMap[dialog] then + dialogMap[dialog]:Remove() + dialogMap[dialog] = nil + end + if dialogConnections[dialog] then + dialogConnections[dialog]:disconnect() + dialogConnections[dialog] = nil + end +end + +function addDialog(dialog) + if dialog.Parent then + if dialog.Parent:IsA("BasePart") then + local chatGui = chatNotificationGui:clone() + chatGui.Enabled = not dialog.InUse + chatGui.Adornee = dialog.Parent + chatGui.RobloxLocked = true + chatGui.Parent = game.CoreGui + chatGui.Image.Button.MouseButton1Click:connect(function() startDialog(dialog) end) + setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone) + + dialogMap[dialog] = chatGui + + dialogConnections[dialog] = dialog.Changed:connect(function(prop) + if prop == "Parent" and dialog.Parent then + --This handles the reparenting case, seperate from removal case + removeDialog(dialog) + addDialog(dialog) + elseif prop == "InUse" then + chatGui.Enabled = not currentConversationDialog and not dialog.InUse + if dialog == currentConversationDialog then + timeoutDialog() + end + elseif prop == "Tone" or prop == "Purpose" then + setChatNotificationTone(chatGui, dialog.Purpose, dialog.Tone) + end + end) + else -- still need to listen to parent changes even if current parent is not a BasePart + dialogConnections[dialog] = dialog.Changed:connect(function(prop) + if prop == "Parent" and dialog.Parent then + --This handles the reparenting case, seperate from removal case + removeDialog(dialog) + addDialog(dialog) + end + end) + end + end +end + +function fetchScripts() + local model = game:GetService("InsertService"):LoadAsset(39226062) + if type(model) == "string" then -- load failed, lets try again + wait(0.1) + model = game:GetService("InsertService"):LoadAsset(39226062) + end + if type(model) == "string" then -- not going to work, lets bail + return + end + + waitForChild(model,"TimeoutScript") + timeoutScript = model.TimeoutScript + waitForChild(model,"ReenableDialogScript") + reenableDialogScript = model.ReenableDialogScript +end + +function onLoad() + waitForProperty(game.Players, "LocalPlayer") + player = game.Players.LocalPlayer + waitForProperty(player, "Character") + + --print("Fetching Scripts") + fetchScripts() + + --print("Creating Guis") + createChatNotificationGui() + + --print("Creating MessageDialog") + createMessageDialog() + messageDialog.RobloxLocked = true + messageDialog.Parent = gui + + --print("Waiting for BottomLeftControl") + waitForChild(gui, "BottomLeftControl") + + --print("Initializing Frame") + local frame = Instance.new("Frame") + frame.Name = "DialogFrame" + frame.Position = UDim2.new(0,0,0,0) + frame.Size = UDim2.new(0,0,0,0) + frame.BackgroundTransparency = 1 + frame.RobloxLocked = true + frame.Parent = gui.BottomLeftControl + initialize(frame) + + --print("Adding Dialogs") + game.CollectionService.ItemAdded:connect(function(obj) if obj:IsA("Dialog") then addDialog(obj) end end) + game.CollectionService.ItemRemoved:connect(function(obj) if obj:IsA("Dialog") then removeDialog(obj) end end) + for i, obj in pairs(game.CollectionService:GetCollection("Dialog")) do + if obj:IsA("Dialog") then + addDialog(obj) + end + end +end + +onLoad() \ No newline at end of file diff --git a/app/files/CoreGui/45284430 b/app/files/CoreGui/45284430 new file mode 100644 index 0000000..54226e1 --- /dev/null +++ b/app/files/CoreGui/45284430 @@ -0,0 +1,3844 @@ +local t = {} + +local function ScopedConnect(parentInstance, instance, event, signalFunc, syncFunc, removeFunc) + local eventConnection = nil + + --Connection on parentInstance is scoped by parentInstance (when destroyed, it goes away) + local tryConnect = function() + if game:IsAncestorOf(parentInstance) then + --Entering the world, make sure we are connected/synced + if not eventConnection then + eventConnection = instance[event]:connect(signalFunc) + if syncFunc then syncFunc() end + end + else + --Probably leaving the world, so disconnect for now + if eventConnection then + eventConnection:disconnect() + if removeFunc then removeFunc() end + end + end + end + + --Hook it up to ancestryChanged signal + local connection = parentInstance.AncestryChanged:connect(tryConnect) + + --Now connect us if we're already in the world + tryConnect() + + return connection +end + +local function getScreenGuiAncestor(instance) + local localInstance = instance + while localInstance and not localInstance:IsA("ScreenGui") do + localInstance = localInstance.Parent + end + return localInstance +end + +local function CreateButtons(frame, buttons, yPos, ySize) + local buttonNum = 1 + local buttonObjs = {} + for i, obj in ipairs(buttons) do + local button = Instance.new("TextButton") + button.Name = "Button" .. buttonNum + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size18 + button.AutoButtonColor = true + button.Modal = true + if obj["Style"] then + button.Style = obj.Style + else + button.Style = Enum.ButtonStyle.RobloxButton + end + button.Text = obj.Text + button.TextColor3 = Color3.new(1,1,1) + button.MouseButton1Click:connect(obj.Function) + button.Parent = frame + buttonObjs[buttonNum] = button + + buttonNum = buttonNum + 1 + end + local numButtons = buttonNum-1 + + if numButtons == 1 then + frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) + elseif numButtons == 2 then + frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.8/3,0, ySize.Scale, ySize.Offset) + + frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) + frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + elseif numButtons >= 3 then + local spacing = .1 / numButtons + local buttonSize = .9 / numButtons + + buttonNum = 1 + while buttonNum <= numButtons do + buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) + buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) + buttonNum = buttonNum + 1 + end + end +end + +local function setSliderPos(newAbsPosX,slider,sliderPosition,bar,steps) + + local newStep = steps - 1 --otherwise we really get one more step than we want + local relativePosX = math.min(1, math.max(0, (newAbsPosX - bar.AbsolutePosition.X) / bar.AbsoluteSize.X )) + local wholeNum, remainder = math.modf(relativePosX * newStep) + if remainder > 0.5 then + wholeNum = wholeNum + 1 + end + relativePosX = wholeNum/newStep + + local result = math.ceil(relativePosX * newStep) + if sliderPosition.Value ~= (result + 1) then --only update if we moved a step + sliderPosition.Value = result + 1 + slider.Position = UDim2.new(relativePosX,-slider.AbsoluteSize.X/2,slider.Position.Y.Scale,slider.Position.Y.Offset) + end + +end + +local function cancelSlide(areaSoak) + areaSoak.Visible = false + if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end +end + +t.CreateStyledMessageDialog = function(title, message, style, buttons) + local frame = Instance.new("Frame") + frame.Size = UDim2.new(0.5, 0, 0, 165) + frame.Position = UDim2.new(0.25, 0, 0.5, -72.5) + frame.Name = "MessageDialog" + frame.Active = true + frame.Style = Enum.FrameStyle.RobloxRound + + local styleImage = Instance.new("ImageLabel") + styleImage.Name = "StyleImage" + styleImage.BackgroundTransparency = 1 + styleImage.Position = UDim2.new(0,5,0,15) + if style == "error" or style == "Error" then + styleImage.Size = UDim2.new(0, 71, 0, 71) + styleImage.Image = "http://www.syntax.eco/asset?id=42565285" + elseif style == "notify" or style == "Notify" then + styleImage.Size = UDim2.new(0, 71, 0, 71) + styleImage.Image = "http://www.syntax.eco/asset?id=42604978" + elseif style == "confirm" or style == "Confirm" then + styleImage.Size = UDim2.new(0, 74, 0, 76) + styleImage.Image = "http://www.syntax.eco/asset?id=42557901" + else + return t.CreateMessageDialog(title,message,buttons) + end + styleImage.Parent = frame + + local titleLabel = Instance.new("TextLabel") + titleLabel.Name = "Title" + titleLabel.Text = title + titleLabel.TextStrokeTransparency = 0 + titleLabel.BackgroundTransparency = 1 + titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) + titleLabel.Position = UDim2.new(0, 80, 0, 0) + titleLabel.Size = UDim2.new(1, -80, 0, 40) + titleLabel.Font = Enum.Font.ArialBold + titleLabel.FontSize = Enum.FontSize.Size36 + titleLabel.TextXAlignment = Enum.TextXAlignment.Center + titleLabel.TextYAlignment = Enum.TextYAlignment.Center + titleLabel.Parent = frame + + local messageLabel = Instance.new("TextLabel") + messageLabel.Name = "Message" + messageLabel.Text = message + messageLabel.TextStrokeTransparency = 0 + messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) + messageLabel.Position = UDim2.new(0.025, 80, 0, 45) + messageLabel.Size = UDim2.new(0.95, -80, 0, 55) + messageLabel.BackgroundTransparency = 1 + messageLabel.Font = Enum.Font.Arial + messageLabel.FontSize = Enum.FontSize.Size18 + messageLabel.TextWrap = true + messageLabel.TextXAlignment = Enum.TextXAlignment.Left + messageLabel.TextYAlignment = Enum.TextYAlignment.Top + messageLabel.Parent = frame + + CreateButtons(frame, buttons, UDim.new(0, 105), UDim.new(0, 40) ) + + return frame +end + +t.CreateMessageDialog = function(title, message, buttons) + local frame = Instance.new("Frame") + frame.Size = UDim2.new(0.5, 0, 0.5, 0) + frame.Position = UDim2.new(0.25, 0, 0.25, 0) + frame.Name = "MessageDialog" + frame.Active = true + frame.Style = Enum.FrameStyle.RobloxRound + + local titleLabel = Instance.new("TextLabel") + titleLabel.Name = "Title" + titleLabel.Text = title + titleLabel.BackgroundTransparency = 1 + titleLabel.TextColor3 = Color3.new(221/255,221/255,221/255) + titleLabel.Position = UDim2.new(0, 0, 0, 0) + titleLabel.Size = UDim2.new(1, 0, 0.15, 0) + titleLabel.Font = Enum.Font.ArialBold + titleLabel.FontSize = Enum.FontSize.Size36 + titleLabel.TextXAlignment = Enum.TextXAlignment.Center + titleLabel.TextYAlignment = Enum.TextYAlignment.Center + titleLabel.Parent = frame + + local messageLabel = Instance.new("TextLabel") + messageLabel.Name = "Message" + messageLabel.Text = message + messageLabel.TextColor3 = Color3.new(221/255,221/255,221/255) + messageLabel.Position = UDim2.new(0.025, 0, 0.175, 0) + messageLabel.Size = UDim2.new(0.95, 0, .55, 0) + messageLabel.BackgroundTransparency = 1 + messageLabel.Font = Enum.Font.Arial + messageLabel.FontSize = Enum.FontSize.Size18 + messageLabel.TextWrap = true + messageLabel.TextXAlignment = Enum.TextXAlignment.Left + messageLabel.TextYAlignment = Enum.TextYAlignment.Top + messageLabel.Parent = frame + + CreateButtons(frame, buttons, UDim.new(0.8,0), UDim.new(0.15, 0)) + + return frame +end + +t.CreateDropDownMenu = function(items, onSelect, forRoblox) + local width = UDim.new(0, 100) + local height = UDim.new(0, 32) + + local xPos = 0.055 + local frame = Instance.new("Frame") + frame.Name = "DropDownMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(width, height) + + local dropDownMenu = Instance.new("TextButton") + dropDownMenu.Name = "DropDownMenuButton" + dropDownMenu.TextWrap = true + dropDownMenu.TextColor3 = Color3.new(1,1,1) + dropDownMenu.Text = "Choose One" + dropDownMenu.Font = Enum.Font.ArialBold + dropDownMenu.FontSize = Enum.FontSize.Size18 + dropDownMenu.TextXAlignment = Enum.TextXAlignment.Left + dropDownMenu.TextYAlignment = Enum.TextYAlignment.Center + dropDownMenu.BackgroundTransparency = 1 + dropDownMenu.AutoButtonColor = true + dropDownMenu.Style = Enum.ButtonStyle.RobloxButton + dropDownMenu.Size = UDim2.new(1,0,1,0) + dropDownMenu.Parent = frame + dropDownMenu.ZIndex = 2 + + local dropDownIcon = Instance.new("ImageLabel") + dropDownIcon.Name = "Icon" + dropDownIcon.Active = false + dropDownIcon.Image = "http://www.syntax.eco/asset/?id=45732894" + dropDownIcon.BackgroundTransparency = 1 + dropDownIcon.Size = UDim2.new(0,11,0,6) + dropDownIcon.Position = UDim2.new(1,-11,0.5, -2) + dropDownIcon.Parent = dropDownMenu + dropDownIcon.ZIndex = 2 + + local itemCount = #items + local dropDownItemCount = #items + local useScrollButtons = false + if dropDownItemCount > 6 then + useScrollButtons = true + dropDownItemCount = 6 + end + + local droppedDownMenu = Instance.new("TextButton") + droppedDownMenu.Name = "List" + droppedDownMenu.Text = "" + droppedDownMenu.BackgroundTransparency = 1 + --droppedDownMenu.AutoButtonColor = true + droppedDownMenu.Style = Enum.ButtonStyle.RobloxButton + droppedDownMenu.Visible = false + droppedDownMenu.Active = true --Blocks clicks + droppedDownMenu.Position = UDim2.new(0,0,0,0) + droppedDownMenu.Size = UDim2.new(1,0, (1 + dropDownItemCount)*.8, 0) + droppedDownMenu.Parent = frame + droppedDownMenu.ZIndex = 2 + + local choiceButton = Instance.new("TextButton") + choiceButton.Name = "ChoiceButton" + choiceButton.BackgroundTransparency = 1 + choiceButton.BorderSizePixel = 0 + choiceButton.Text = "ReplaceMe" + choiceButton.TextColor3 = Color3.new(1,1,1) + choiceButton.TextXAlignment = Enum.TextXAlignment.Left + choiceButton.TextYAlignment = Enum.TextYAlignment.Center + choiceButton.BackgroundColor3 = Color3.new(1, 1, 1) + choiceButton.Font = Enum.Font.Arial + choiceButton.FontSize = Enum.FontSize.Size18 + if useScrollButtons then + choiceButton.Size = UDim2.new(1,-13, .8/((dropDownItemCount + 1)*.8),0) + else + choiceButton.Size = UDim2.new(1, 0, .8/((dropDownItemCount + 1)*.8),0) + end + choiceButton.TextWrap = true + choiceButton.ZIndex = 2 + + local areaSoak = Instance.new("TextButton") + areaSoak.Name = "AreaSoak" + areaSoak.Text = "" + areaSoak.BackgroundTransparency = 1 + areaSoak.Active = true + areaSoak.Size = UDim2.new(1,0,1,0) + areaSoak.Visible = false + areaSoak.ZIndex = 3 + + local dropDownSelected = false + + local scrollUpButton + local scrollDownButton + local scrollMouseCount = 0 + + local setZIndex = function(baseZIndex) + droppedDownMenu.ZIndex = baseZIndex +1 + if scrollUpButton then + scrollUpButton.ZIndex = baseZIndex + 3 + end + if scrollDownButton then + scrollDownButton.ZIndex = baseZIndex + 3 + end + + local children = droppedDownMenu:GetChildren() + if children then + for i, child in ipairs(children) do + if child.Name == "ChoiceButton" then + child.ZIndex = baseZIndex + 2 + elseif child.Name == "ClickCaptureButton" then + child.ZIndex = baseZIndex + end + end + end + end + + local scrollBarPosition = 1 + local updateScroll = function() + if scrollUpButton then + scrollUpButton.Active = scrollBarPosition > 1 + end + if scrollDownButton then + scrollDownButton.Active = scrollBarPosition + dropDownItemCount <= itemCount + end + + local children = droppedDownMenu:GetChildren() + if not children then return end + + local childNum = 1 + for i, obj in ipairs(children) do + if obj.Name == "ChoiceButton" then + if childNum < scrollBarPosition or childNum >= scrollBarPosition + dropDownItemCount then + obj.Visible = false + else + obj.Position = UDim2.new(0,0,((childNum-scrollBarPosition+1)*.8)/((dropDownItemCount+1)*.8),0) + obj.Visible = true + end + obj.TextColor3 = Color3.new(1,1,1) + obj.BackgroundTransparency = 1 + + childNum = childNum + 1 + end + end + end + local toggleVisibility = function() + dropDownSelected = not dropDownSelected + + areaSoak.Visible = not areaSoak.Visible + dropDownMenu.Visible = not dropDownSelected + droppedDownMenu.Visible = dropDownSelected + if dropDownSelected then + setZIndex(4) + else + setZIndex(2) + end + if useScrollButtons then + updateScroll() + end + end + droppedDownMenu.MouseButton1Click:connect(toggleVisibility) + + local updateSelection = function(text) + local foundItem = false + local children = droppedDownMenu:GetChildren() + local childNum = 1 + if children then + for i, obj in ipairs(children) do + if obj.Name == "ChoiceButton" then + if obj.Text == text then + obj.Font = Enum.Font.ArialBold + foundItem = true + scrollBarPosition = childNum + else + obj.Font = Enum.Font.Arial + end + childNum = childNum + 1 + end + end + end + if not text then + dropDownMenu.Text = "Choose One" + scrollBarPosition = 1 + else + if not foundItem then + error("Invalid Selection Update -- " .. text) + end + + if scrollBarPosition + dropDownItemCount > itemCount + 1 then + scrollBarPosition = itemCount - dropDownItemCount + 1 + end + + dropDownMenu.Text = text + end + end + + local function scrollDown() + if scrollBarPosition + dropDownItemCount <= itemCount then + scrollBarPosition = scrollBarPosition + 1 + updateScroll() + return true + end + return false + end + local function scrollUp() + if scrollBarPosition > 1 then + scrollBarPosition = scrollBarPosition - 1 + updateScroll() + return true + end + return false + end + + if useScrollButtons then + --Make some scroll buttons + scrollUpButton = Instance.new("ImageButton") + scrollUpButton.Name = "ScrollUpButton" + scrollUpButton.BackgroundTransparency = 1 + scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" + scrollUpButton.Size = UDim2.new(0,17,0,17) + scrollUpButton.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),0) + scrollUpButton.MouseButton1Click:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + end) + scrollUpButton.MouseLeave:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + end) + scrollUpButton.MouseButton1Down:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + + scrollUp() + local val = scrollMouseCount + wait(0.5) + while val == scrollMouseCount do + if scrollUp() == false then + break + end + wait(0.1) + end + end) + + scrollUpButton.Parent = droppedDownMenu + + scrollDownButton = Instance.new("ImageButton") + scrollDownButton.Name = "ScrollDownButton" + scrollDownButton.BackgroundTransparency = 1 + scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" + scrollDownButton.Size = UDim2.new(0,17,0,17) + scrollDownButton.Position = UDim2.new(1,-11,1,-11) + scrollDownButton.Parent = droppedDownMenu + scrollDownButton.MouseButton1Click:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + end) + scrollDownButton.MouseLeave:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + end) + scrollDownButton.MouseButton1Down:connect( + function() + scrollMouseCount = scrollMouseCount + 1 + + scrollDown() + local val = scrollMouseCount + wait(0.5) + while val == scrollMouseCount do + if scrollDown() == false then + break + end + wait(0.1) + end + end) + + local scrollbar = Instance.new("ImageLabel") + scrollbar.Name = "ScrollBar" + scrollbar.Image = "rbxasset://textures/ui/scrollbar.png" + scrollbar.BackgroundTransparency = 1 + scrollbar.Size = UDim2.new(0, 18, (dropDownItemCount*.8)/((dropDownItemCount+1)*.8), -(17) - 11 - 4) + scrollbar.Position = UDim2.new(1,-11,(1*.8)/((dropDownItemCount+1)*.8),17+2) + scrollbar.Parent = droppedDownMenu + end + + for i,item in ipairs(items) do + -- needed to maintain local scope for items in event listeners below + local button = choiceButton:clone() + if forRoblox then + button.RobloxLocked = true + end + button.Text = item + button.Parent = droppedDownMenu + button.MouseButton1Click:connect(function() + --Remove Highlight + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundTransparency = 1 + + updateSelection(item) + onSelect(item) + + toggleVisibility() + end) + button.MouseEnter:connect(function() + --Add Highlight + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundTransparency = 0 + end) + + button.MouseLeave:connect(function() + --Remove Highlight + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundTransparency = 1 + end) + end + + --This does the initial layout of the buttons + updateScroll() + + frame.AncestryChanged:connect(function(child,parent) + if parent == nil then + areaSoak.Parent = nil + else + areaSoak.Parent = getScreenGuiAncestor(frame) + end + end) + + dropDownMenu.MouseButton1Click:connect(toggleVisibility) + areaSoak.MouseButton1Click:connect(toggleVisibility) + return frame, updateSelection +end + +t.CreatePropertyDropDownMenu = function(instance, property, enum) + + local items = enum:GetEnumItems() + local names = {} + local nameToItem = {} + for i,obj in ipairs(items) do + names[i] = obj.Name + nameToItem[obj.Name] = obj + end + + local frame + local updateSelection + frame, updateSelection = t.CreateDropDownMenu(names, function(text) instance[property] = nameToItem[text] end) + + ScopedConnect(frame, instance, "Changed", + function(prop) + if prop == property then + updateSelection(instance[property].Name) + end + end, + function() + updateSelection(instance[property].Name) + end) + + return frame +end + +t.GetFontHeight = function(font, fontSize) + if font == nil or fontSize == nil then + error("Font and FontSize must be non-nil") + end + + if font == Enum.Font.Legacy then + if fontSize == Enum.FontSize.Size8 then + return 12 + elseif fontSize == Enum.FontSize.Size9 then + return 14 + elseif fontSize == Enum.FontSize.Size10 then + return 15 + elseif fontSize == Enum.FontSize.Size11 then + return 17 + elseif fontSize == Enum.FontSize.Size12 then + return 18 + elseif fontSize == Enum.FontSize.Size14 then + return 21 + elseif fontSize == Enum.FontSize.Size18 then + return 27 + elseif fontSize == Enum.FontSize.Size24 then + return 36 + elseif fontSize == Enum.FontSize.Size36 then + return 54 + elseif fontSize == Enum.FontSize.Size48 then + return 72 + else + error("Unknown FontSize") + end + elseif font == Enum.Font.Arial or font == Enum.Font.ArialBold then + if fontSize == Enum.FontSize.Size8 then + return 8 + elseif fontSize == Enum.FontSize.Size9 then + return 9 + elseif fontSize == Enum.FontSize.Size10 then + return 10 + elseif fontSize == Enum.FontSize.Size11 then + return 11 + elseif fontSize == Enum.FontSize.Size12 then + return 12 + elseif fontSize == Enum.FontSize.Size14 then + return 14 + elseif fontSize == Enum.FontSize.Size18 then + return 18 + elseif fontSize == Enum.FontSize.Size24 then + return 24 + elseif fontSize == Enum.FontSize.Size36 then + return 36 + elseif fontSize == Enum.FontSize.Size48 then + return 48 + else + error("Unknown FontSize") + end + else + error("Unknown Font " .. font) + end +end + +local function layoutGuiObjectsHelper(frame, guiObjects, settingsTable) + local totalPixels = frame.AbsoluteSize.Y + local pixelsRemaining = frame.AbsoluteSize.Y + for i, child in ipairs(guiObjects) do + if child:IsA("TextLabel") or child:IsA("TextButton") then + local isLabel = child:IsA("TextLabel") + if isLabel then + pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] + else + pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] + end + child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) + child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, pixelsRemaining) + + if child.TextFits and child.TextBounds.Y < pixelsRemaining then + child.Visible = true + if isLabel then + child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextLabelSizePadY"]) + else + child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.TextBounds.Y + settingsTable["TextButtonSizePadY"]) + end + + while not child.TextFits do + child.Size = UDim2.new(child.Size.X.Scale, child.Size.X.Offset, 0, child.AbsoluteSize.Y + 1) + end + pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y + + if isLabel then + pixelsRemaining = pixelsRemaining - settingsTable["TextLabelPositionPadY"] + else + pixelsRemaining = pixelsRemaining - settingsTable["TextButtonPositionPadY"] + end + else + child.Visible = false + pixelsRemaining = -1 + end + + else + --GuiObject + child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) + pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y + child.Visible = (pixelsRemaining >= 0) + end + end +end + +t.LayoutGuiObjects = function(frame, guiObjects, settingsTable) + if not frame:IsA("GuiObject") then + error("Frame must be a GuiObject") + end + for i, child in ipairs(guiObjects) do + if not child:IsA("GuiObject") then + error("All elements that are layed out must be of type GuiObject") + end + end + + if not settingsTable then + settingsTable = {} + end + + if not settingsTable["TextLabelSizePadY"] then + settingsTable["TextLabelSizePadY"] = 0 + end + if not settingsTable["TextLabelPositionPadY"] then + settingsTable["TextLabelPositionPadY"] = 0 + end + if not settingsTable["TextButtonSizePadY"] then + settingsTable["TextButtonSizePadY"] = 12 + end + if not settingsTable["TextButtonPositionPadY"] then + settingsTable["TextButtonPositionPadY"] = 2 + end + + --Wrapper frame takes care of styled objects + local wrapperFrame = Instance.new("Frame") + wrapperFrame.Name = "WrapperFrame" + wrapperFrame.BackgroundTransparency = 1 + wrapperFrame.Size = UDim2.new(1,0,1,0) + wrapperFrame.Parent = frame + + for i, child in ipairs(guiObjects) do + child.Parent = wrapperFrame + end + + local recalculate = function() + wait() + layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) + end + + frame.Changed:connect( + function(prop) + if prop == "AbsoluteSize" then + --Wait a heartbeat for it to sync in + recalculate(nil) + end + end) + frame.AncestryChanged:connect(recalculate) + + layoutGuiObjectsHelper(wrapperFrame, guiObjects, settingsTable) +end + + +t.CreateSlider = function(steps,width,position) + local sliderGui = Instance.new("Frame") + sliderGui.Size = UDim2.new(1,0,1,0) + sliderGui.BackgroundTransparency = 1 + sliderGui.Name = "SliderGui" + + local sliderSteps = Instance.new("IntValue") + sliderSteps.Name = "SliderSteps" + sliderSteps.Value = steps + sliderSteps.Parent = sliderGui + + local areaSoak = Instance.new("TextButton") + areaSoak.Name = "AreaSoak" + areaSoak.Text = "" + areaSoak.BackgroundTransparency = 1 + areaSoak.Active = false + areaSoak.Size = UDim2.new(1,0,1,0) + areaSoak.Visible = false + areaSoak.ZIndex = 4 + + sliderGui.AncestryChanged:connect(function(child,parent) + if parent == nil then + areaSoak.Parent = nil + else + areaSoak.Parent = getScreenGuiAncestor(sliderGui) + end + end) + + local sliderPosition = Instance.new("IntValue") + sliderPosition.Name = "SliderPosition" + sliderPosition.Value = 0 + sliderPosition.Parent = sliderGui + + local id = math.random(1,100) + + local bar = Instance.new("TextButton") + bar.Text = "" + bar.AutoButtonColor = false + bar.Name = "Bar" + bar.BackgroundColor3 = Color3.new(0,0,0) + if type(width) == "number" then + bar.Size = UDim2.new(0,width,0,5) + else + bar.Size = UDim2.new(0,200,0,5) + end + bar.BorderColor3 = Color3.new(95/255,95/255,95/255) + bar.ZIndex = 2 + bar.Parent = sliderGui + + if position["X"] and position["X"]["Scale"] and position["X"]["Offset"] and position["Y"] and position["Y"]["Scale"] and position["Y"]["Offset"] then + bar.Position = position + end + + local slider = Instance.new("ImageButton") + slider.Name = "Slider" + slider.BackgroundTransparency = 1 + slider.Image = "rbxasset://textures/ui/Slider.png" + slider.Position = UDim2.new(0,0,0.5,-10) + slider.Size = UDim2.new(0,20,0,20) + slider.ZIndex = 3 + slider.Parent = bar + + local areaSoakMouseMoveCon = nil + + areaSoak.MouseLeave:connect(function() + if areaSoak.Visible then + cancelSlide(areaSoak) + end + end) + areaSoak.MouseButton1Up:connect(function() + if areaSoak.Visible then + cancelSlide(areaSoak) + end + end) + + slider.MouseButton1Down:connect(function() + areaSoak.Visible = true + if areaSoakMouseMoveCon then areaSoakMouseMoveCon:disconnect() end + areaSoakMouseMoveCon = areaSoak.MouseMoved:connect(function(x,y) + setSliderPos(x,slider,sliderPosition,bar,steps) + end) + end) + + slider.MouseButton1Up:connect(function() cancelSlide(areaSoak) end) + + sliderPosition.Changed:connect(function(prop) + sliderPosition.Value = math.min(steps, math.max(1,sliderPosition.Value)) + local relativePosX = (sliderPosition.Value - 1) / (steps - 1) + slider.Position = UDim2.new(relativePosX,-slider.AbsoluteSize.X/2,slider.Position.Y.Scale,slider.Position.Y.Offset) + end) + + bar.MouseButton1Down:connect(function(x,y) + setSliderPos(x,slider,sliderPosition,bar,steps) + end) + + return sliderGui, sliderPosition, sliderSteps + +end + +t.CreateTrueScrollingFrame = function() + local lowY = nil + local highY = nil + + local dragCon = nil + local upCon = nil + + local internalChange = false + + local descendantsChangeConMap = {} + + local scrollingFrame = Instance.new("Frame") + scrollingFrame.Name = "ScrollingFrame" + scrollingFrame.Active = true + scrollingFrame.Size = UDim2.new(1,0,1,0) + scrollingFrame.ClipsDescendants = true + + local controlFrame = Instance.new("Frame") + controlFrame.Name = "ControlFrame" + controlFrame.BackgroundTransparency = 1 + controlFrame.Size = UDim2.new(0,18,1,0) + controlFrame.Position = UDim2.new(1,-20,0,0) + controlFrame.Parent = scrollingFrame + + local scrollBottom = Instance.new("BoolValue") + scrollBottom.Value = false + scrollBottom.Name = "ScrollBottom" + scrollBottom.Parent = controlFrame + + local scrollUp = Instance.new("BoolValue") + scrollUp.Value = false + scrollUp.Name = "scrollUp" + scrollUp.Parent = controlFrame + + local scrollUpButton = Instance.new("TextButton") + scrollUpButton.Name = "ScrollUpButton" + scrollUpButton.Text = "" + scrollUpButton.AutoButtonColor = false + scrollUpButton.BackgroundColor3 = Color3.new(0,0,0) + scrollUpButton.BorderColor3 = Color3.new(1,1,1) + scrollUpButton.BackgroundTransparency = 0.5 + scrollUpButton.Size = UDim2.new(0,18,0,18) + scrollUpButton.ZIndex = 2 + scrollUpButton.Parent = controlFrame + for i = 1, 6 do + local triFrame = Instance.new("Frame") + triFrame.BorderColor3 = Color3.new(1,1,1) + triFrame.Name = "tri" .. tostring(i) + triFrame.ZIndex = 3 + triFrame.BackgroundTransparency = 0.5 + triFrame.Size = UDim2.new(0,12 - ((i -1) * 2),0,0) + triFrame.Position = UDim2.new(0,3 + (i -1),0.5,2 - (i -1)) + triFrame.Parent = scrollUpButton + end + scrollUpButton.MouseEnter:connect(function() + scrollUpButton.BackgroundTransparency = 0.1 + local upChildren = scrollUpButton:GetChildren() + for i = 1, #upChildren do + upChildren[i].BackgroundTransparency = 0.1 + end + end) + scrollUpButton.MouseLeave:connect(function() + scrollUpButton.BackgroundTransparency = 0.5 + local upChildren = scrollUpButton:GetChildren() + for i = 1, #upChildren do + upChildren[i].BackgroundTransparency = 0.5 + end + end) + + local scrollDownButton = scrollUpButton:clone() + scrollDownButton.Name = "ScrollDownButton" + scrollDownButton.Position = UDim2.new(0,0,1,-18) + local downChildren = scrollDownButton:GetChildren() + for i = 1, #downChildren do + downChildren[i].Position = UDim2.new(0,3 + (i -1),0.5,-2 + (i - 1)) + end + scrollDownButton.MouseEnter:connect(function() + scrollDownButton.BackgroundTransparency = 0.1 + local downChildren = scrollDownButton:GetChildren() + for i = 1, #downChildren do + downChildren[i].BackgroundTransparency = 0.1 + end + end) + scrollDownButton.MouseLeave:connect(function() + scrollDownButton.BackgroundTransparency = 0.5 + local downChildren = scrollDownButton:GetChildren() + for i = 1, #downChildren do + downChildren[i].BackgroundTransparency = 0.5 + end + end) + scrollDownButton.Parent = controlFrame + + local scrollTrack = Instance.new("Frame") + scrollTrack.Name = "ScrollTrack" + scrollTrack.BackgroundTransparency = 1 + scrollTrack.Size = UDim2.new(0,18,1,-38) + scrollTrack.Position = UDim2.new(0,0,0,19) + scrollTrack.Parent = controlFrame + + local scrollbar = Instance.new("TextButton") + scrollbar.BackgroundColor3 = Color3.new(0,0,0) + scrollbar.BorderColor3 = Color3.new(1,1,1) + scrollbar.BackgroundTransparency = 0.5 + scrollbar.AutoButtonColor = false + scrollbar.Text = "" + scrollbar.Active = true + scrollbar.Name = "ScrollBar" + scrollbar.ZIndex = 2 + scrollbar.BackgroundTransparency = 0.5 + scrollbar.Size = UDim2.new(0, 18, 0.1, 0) + scrollbar.Position = UDim2.new(0,0,0,0) + scrollbar.Parent = scrollTrack + + local scrollNub = Instance.new("Frame") + scrollNub.Name = "ScrollNub" + scrollNub.BorderColor3 = Color3.new(1,1,1) + scrollNub.Size = UDim2.new(0,10,0,0) + scrollNub.Position = UDim2.new(0.5,-5,0.5,0) + scrollNub.ZIndex = 2 + scrollNub.BackgroundTransparency = 0.5 + scrollNub.Parent = scrollbar + + local newNub = scrollNub:clone() + newNub.Position = UDim2.new(0.5,-5,0.5,-2) + newNub.Parent = scrollbar + + local lastNub = scrollNub:clone() + lastNub.Position = UDim2.new(0.5,-5,0.5,2) + lastNub.Parent = scrollbar + + scrollbar.MouseEnter:connect(function() + scrollbar.BackgroundTransparency = 0.1 + scrollNub.BackgroundTransparency = 0.1 + newNub.BackgroundTransparency = 0.1 + lastNub.BackgroundTransparency = 0.1 + end) + scrollbar.MouseLeave:connect(function() + scrollbar.BackgroundTransparency = 0.5 + scrollNub.BackgroundTransparency = 0.5 + newNub.BackgroundTransparency = 0.5 + lastNub.BackgroundTransparency = 0.5 + end) + + local mouseDrag = Instance.new("ImageButton") + mouseDrag.Active = false + mouseDrag.Size = UDim2.new(1.5, 0, 1.5, 0) + mouseDrag.AutoButtonColor = false + mouseDrag.BackgroundTransparency = 1 + mouseDrag.Name = "mouseDrag" + mouseDrag.Position = UDim2.new(-0.25, 0, -0.25, 0) + mouseDrag.ZIndex = 10 + + local function positionScrollBar(x,y,offset) + local oldPos = scrollbar.Position + + if y < scrollTrack.AbsolutePosition.y then + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,0,0) + return (oldPos ~= scrollbar.Position) + end + + local relativeSize = scrollbar.AbsoluteSize.Y/scrollTrack.AbsoluteSize.Y + + if y > (scrollTrack.AbsolutePosition.y + scrollTrack.AbsoluteSize.y) then + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,1 - relativeSize,0) + return (oldPos ~= scrollbar.Position) + end + local newScaleYPos = (y - scrollTrack.AbsolutePosition.y - offset)/scrollTrack.AbsoluteSize.y + if newScaleYPos + relativeSize > 1 then + newScaleYPos = 1 - relativeSize + scrollBottom.Value = true + scrollUp.Value = false + elseif newScaleYPos <= 0 then + newScaleYPos = 0 + scrollUp.Value = true + scrollBottom.Value = false + else + scrollUp.Value = false + scrollBottom.Value = false + end + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,newScaleYPos,0) + + return (oldPos ~= scrollbar.Position) + end + + local function drillDownSetHighLow(instance) + if not instance or not instance:IsA("GuiObject") then return end + if instance == controlFrame then return end + if instance:IsDescendantOf(controlFrame) then return end + if not instance.Visible then return end + + if lowY and lowY > instance.AbsolutePosition.Y then + lowY = instance.AbsolutePosition.Y + elseif not lowY then + lowY = instance.AbsolutePosition.Y + end + if highY and highY < (instance.AbsolutePosition.Y + instance.AbsoluteSize.Y) then + highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y + elseif not highY then + highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y + end + local children = instance:GetChildren() + for i = 1, #children do + drillDownSetHighLow(children[i]) + end + end + + local function resetHighLow() + local firstChildren = scrollingFrame:GetChildren() + + for i = 1, #firstChildren do + drillDownSetHighLow(firstChildren[i]) + end + end + + local function recalculate() + internalChange = true + + local percentFrame = 0 + if scrollbar.Position.Y.Scale > 0 then + if scrollbar.Visible then + percentFrame = scrollbar.Position.Y.Scale/((scrollTrack.AbsoluteSize.Y - scrollbar.AbsoluteSize.Y)/scrollTrack.AbsoluteSize.Y) + else + percentFrame = 0 + end + end + if percentFrame > 0.99 then percentFrame = 1 end + + local hiddenYAmount = (scrollingFrame.AbsoluteSize.Y - (highY - lowY)) * percentFrame + + local guiChildren = scrollingFrame:GetChildren() + for i = 1, #guiChildren do + if guiChildren[i] ~= controlFrame then + guiChildren[i].Position = UDim2.new(guiChildren[i].Position.X.Scale,guiChildren[i].Position.X.Offset, + 0, math.ceil(guiChildren[i].AbsolutePosition.Y) - math.ceil(lowY) + hiddenYAmount) + end + end + + lowY = nil + highY = nil + resetHighLow() + internalChange = false + end + + local function setSliderSizeAndPosition() + if not highY or not lowY then return end + + local totalYSpan = math.abs(highY - lowY) + if totalYSpan == 0 then + scrollbar.Visible = false + scrollDownButton.Visible = false + scrollUpButton.Visible = false + + if dragCon then dragCon:disconnect() dragCon = nil end + if upCon then upCon:disconnect() upCon = nil end + return + end + + local percentShown = scrollingFrame.AbsoluteSize.Y/totalYSpan + if percentShown >= 1 then + scrollbar.Visible = false + scrollDownButton.Visible = false + scrollUpButton.Visible = false + recalculate() + else + scrollbar.Visible = true + scrollDownButton.Visible = true + scrollUpButton.Visible = true + + scrollbar.Size = UDim2.new(scrollbar.Size.X.Scale,scrollbar.Size.X.Offset,percentShown,0) + end + + local percentPosition = (scrollingFrame.AbsolutePosition.Y - lowY)/totalYSpan + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,percentPosition,-scrollbar.AbsoluteSize.X/2) + + if scrollbar.AbsolutePosition.y < scrollTrack.AbsolutePosition.y then + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,0,0) + end + + if (scrollbar.AbsolutePosition.y + scrollbar.AbsoluteSize.Y) > (scrollTrack.AbsolutePosition.y + scrollTrack.AbsoluteSize.y) then + local relativeSize = scrollbar.AbsoluteSize.Y/scrollTrack.AbsoluteSize.Y + scrollbar.Position = UDim2.new(scrollbar.Position.X.Scale,scrollbar.Position.X.Offset,1 - relativeSize,0) + end + end + + local buttonScrollAmountPixels = 7 + local reentrancyGuardScrollUp = false + local function doScrollUp() + if reentrancyGuardScrollUp then return end + + reentrancyGuardScrollUp = true + if positionScrollBar(0,scrollbar.AbsolutePosition.Y - buttonScrollAmountPixels,0) then + recalculate() + end + reentrancyGuardScrollUp = false + end + + local reentrancyGuardScrollDown = false + local function doScrollDown() + if reentrancyGuardScrollDown then return end + + reentrancyGuardScrollDown = true + if positionScrollBar(0,scrollbar.AbsolutePosition.Y + buttonScrollAmountPixels,0) then + recalculate() + end + reentrancyGuardScrollDown = false + end + + local function scrollUp(mouseYPos) + if scrollUpButton.Active then + scrollStamp = tick() + local current = scrollStamp + local upCon + upCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + upCon:disconnect() + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + doScrollUp() + wait(0.2) + local t = tick() + local w = 0.1 + while scrollStamp == current do + doScrollUp() + if mouseYPos and mouseYPos > scrollbar.AbsolutePosition.y then + break + end + if not scrollUpButton.Active then break end + if tick()-t > 5 then + w = 0 + elseif tick()-t > 2 then + w = 0.06 + end + wait(w) + end + end + end + + local function scrollDown(mouseYPos) + if scrollDownButton.Active then + scrollStamp = tick() + local current = scrollStamp + local downCon + downCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + downCon:disconnect() + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + doScrollDown() + wait(0.2) + local t = tick() + local w = 0.1 + while scrollStamp == current do + doScrollDown() + if mouseYPos and mouseYPos < (scrollbar.AbsolutePosition.y + scrollbar.AbsoluteSize.x) then + break + end + if not scrollDownButton.Active then break end + if tick()-t > 5 then + w = 0 + elseif tick()-t > 2 then + w = 0.06 + end + wait(w) + end + end + end + + scrollbar.MouseButton1Down:connect(function(x,y) + if scrollbar.Active then + scrollStamp = tick() + local mouseOffset = y - scrollbar.AbsolutePosition.y + if dragCon then dragCon:disconnect() dragCon = nil end + if upCon then upCon:disconnect() upCon = nil end + local prevY = y + local reentrancyGuardMouseScroll = false + dragCon = mouseDrag.MouseMoved:connect(function(x,y) + if reentrancyGuardMouseScroll then return end + + reentrancyGuardMouseScroll = true + if positionScrollBar(x,y,mouseOffset) then + recalculate() + end + reentrancyGuardMouseScroll = false + + end) + upCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + dragCon:disconnect(); dragCon = nil + upCon:disconnect(); drag = nil + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + end + end) + + local scrollMouseCount = 0 + + scrollUpButton.MouseButton1Down:connect(function() + scrollUp() + end) + scrollUpButton.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + + scrollDownButton.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + scrollDownButton.MouseButton1Down:connect(function() + scrollDown() + end) + + scrollbar.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + + local function heightCheck(instance) + if highY and (instance.AbsolutePosition.Y + instance.AbsoluteSize.Y) > highY then + highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y + elseif not highY then + highY = instance.AbsolutePosition.Y + instance.AbsoluteSize.Y + end + setSliderSizeAndPosition() + end + + local function highLowRecheck() + local oldLowY = lowY + local oldHighY = highY + lowY = nil + highY = nil + resetHighLow() + + if (lowY ~= oldLowY) or (highY ~= oldHighY) then + setSliderSizeAndPosition() + end + end + + local function descendantChanged(this, prop) + if internalChange then return end + if not this.Visible then return end + + if prop == "Size" or prop == "Position" then + wait() + highLowRecheck() + end + end + + scrollingFrame.DescendantAdded:connect(function(instance) + if not instance:IsA("GuiObject") then return end + + if instance.Visible then + wait() -- wait a heartbeat for sizes to reconfig + highLowRecheck() + end + + descendantsChangeConMap[instance] = instance.Changed:connect(function(prop) descendantChanged(instance, prop) end) + end) + + scrollingFrame.DescendantRemoving:connect(function(instance) + if not instance:IsA("GuiObject") then return end + if descendantsChangeConMap[instance] then + descendantsChangeConMap[instance]:disconnect() + descendantsChangeConMap[instance] = nil + end + wait() -- wait a heartbeat for sizes to reconfig + highLowRecheck() + end) + + scrollingFrame.Changed:connect(function(prop) + if prop == "AbsoluteSize" then + if not highY or not lowY then return end + + highLowRecheck() + setSliderSizeAndPosition() + end + end) + + return scrollingFrame, controlFrame +end + +t.CreateScrollingFrame = function(orderList,scrollStyle) + local frame = Instance.new("Frame") + frame.Name = "ScrollingFrame" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + + local scrollUpButton = Instance.new("ImageButton") + scrollUpButton.Name = "ScrollUpButton" + scrollUpButton.BackgroundTransparency = 1 + scrollUpButton.Image = "rbxasset://textures/ui/scrollbuttonUp.png" + scrollUpButton.Size = UDim2.new(0,17,0,17) + + + local scrollDownButton = Instance.new("ImageButton") + scrollDownButton.Name = "ScrollDownButton" + scrollDownButton.BackgroundTransparency = 1 + scrollDownButton.Image = "rbxasset://textures/ui/scrollbuttonDown.png" + scrollDownButton.Size = UDim2.new(0,17,0,17) + + local scrollbar = Instance.new("ImageButton") + scrollbar.Name = "ScrollBar" + scrollbar.Image = "rbxasset://textures/ui/scrollbar.png" + scrollbar.BackgroundTransparency = 1 + scrollbar.Size = UDim2.new(0, 18, 0, 150) + + local scrollStamp = 0 + + local scrollDrag = Instance.new("ImageButton") + scrollDrag.Image = "http://www.syntax.eco/asset/?id=61367186" + scrollDrag.Size = UDim2.new(1, 0, 0, 16) + scrollDrag.BackgroundTransparency = 1 + scrollDrag.Name = "ScrollDrag" + scrollDrag.Active = true + scrollDrag.Parent = scrollbar + + local mouseDrag = Instance.new("ImageButton") + mouseDrag.Active = false + mouseDrag.Size = UDim2.new(1.5, 0, 1.5, 0) + mouseDrag.AutoButtonColor = false + mouseDrag.BackgroundTransparency = 1 + mouseDrag.Name = "mouseDrag" + mouseDrag.Position = UDim2.new(-0.25, 0, -0.25, 0) + mouseDrag.ZIndex = 10 + + local style = "simple" + if scrollStyle and tostring(scrollStyle) then + style = scrollStyle + end + + local scrollPosition = 1 + local rowSize = 0 + local howManyDisplayed = 0 + + local layoutGridScrollBar = function() + howManyDisplayed = 0 + local guiObjects = {} + if orderList then + for i, child in ipairs(orderList) do + if child.Parent == frame then + table.insert(guiObjects, child) + end + end + else + local children = frame:GetChildren() + if children then + for i, child in ipairs(children) do + if child:IsA("GuiObject") then + table.insert(guiObjects, child) + end + end + end + end + if #guiObjects == 0 then + scrollUpButton.Active = false + scrollDownButton.Active = false + scrollDrag.Active = false + scrollPosition = 1 + return + end + + if scrollPosition > #guiObjects then + scrollPosition = #guiObjects + end + + if scrollPosition < 1 then scrollPosition = 1 end + + local totalPixelsY = frame.AbsoluteSize.Y + local pixelsRemainingY = frame.AbsoluteSize.Y + + local totalPixelsX = frame.AbsoluteSize.X + + local xCounter = 0 + local rowSizeCounter = 0 + local setRowSize = true + + local pixelsBelowScrollbar = 0 + local pos = #guiObjects + + local currentRowY = 0 + + pos = scrollPosition + --count up from current scroll position to fill out grid + while pos <= #guiObjects and pixelsBelowScrollbar < totalPixelsY do + xCounter = xCounter + guiObjects[pos].AbsoluteSize.X + --previous pos was the end of a row + if xCounter >= totalPixelsX then + pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY + currentRowY = 0 + xCounter = guiObjects[pos].AbsoluteSize.X + end + if guiObjects[pos].AbsoluteSize.Y > currentRowY then + currentRowY = guiObjects[pos].AbsoluteSize.Y + end + pos = pos + 1 + end + --Count wherever current row left off + pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY + currentRowY = 0 + + pos = scrollPosition - 1 + xCounter = 0 + + --objects with varying X,Y dimensions can rarely cause minor errors + --rechecking every new scrollPosition is necessary to avoid 100% of errors + + --count backwards from current scrollPosition to see if we can add more rows + while pixelsBelowScrollbar + currentRowY < totalPixelsY and pos >= 1 do + xCounter = xCounter + guiObjects[pos].AbsoluteSize.X + rowSizeCounter = rowSizeCounter + 1 + if xCounter >= totalPixelsX then + rowSize = rowSizeCounter - 1 + rowSizeCounter = 0 + xCounter = guiObjects[pos].AbsoluteSize.X + if pixelsBelowScrollbar + currentRowY <= totalPixelsY then + --It fits, so back up our scroll position + pixelsBelowScrollbar = pixelsBelowScrollbar + currentRowY + if scrollPosition <= rowSize then + scrollPosition = 1 + break + else + scrollPosition = scrollPosition - rowSize + end + currentRowY = 0 + else + break + end + end + + if guiObjects[pos].AbsoluteSize.Y > currentRowY then + currentRowY = guiObjects[pos].AbsoluteSize.Y + end + + pos = pos - 1 + end + + --Do check last time if pos = 0 + if (pos == 0) and (pixelsBelowScrollbar + currentRowY <= totalPixelsY) then + scrollPosition = 1 + end + + xCounter = 0 + --pos = scrollPosition + rowSizeCounter = 0 + setRowSize = true + local lastChildSize = 0 + + local xOffset,yOffset = 0 + if guiObjects[1] then + yOffset = math.ceil(math.floor(math.fmod(totalPixelsY,guiObjects[1].AbsoluteSize.X))/2) + xOffset = math.ceil(math.floor(math.fmod(totalPixelsX,guiObjects[1].AbsoluteSize.Y))/2) + end + + for i, child in ipairs(guiObjects) do + if i < scrollPosition then + --print("Hiding " .. child.Name) + child.Visible = false + else + if pixelsRemainingY < 0 then + --print("Out of Space " .. child.Name) + child.Visible = false + else + --print("Laying out " .. child.Name) + --GuiObject + if setRowSize then rowSizeCounter = rowSizeCounter + 1 end + if xCounter + child.AbsoluteSize.X >= totalPixelsX then + if setRowSize then + rowSize = rowSizeCounter - 1 + setRowSize = false + end + xCounter = 0 + pixelsRemainingY = pixelsRemainingY - child.AbsoluteSize.Y + end + child.Position = UDim2.new(child.Position.X.Scale,xCounter + xOffset, 0, totalPixelsY - pixelsRemainingY + yOffset) + xCounter = xCounter + child.AbsoluteSize.X + child.Visible = ((pixelsRemainingY - child.AbsoluteSize.Y) >= 0) + if child.Visible then + howManyDisplayed = howManyDisplayed + 1 + end + lastChildSize = child.AbsoluteSize + end + end + end + + scrollUpButton.Active = (scrollPosition > 1) + if lastChildSize == 0 then + scrollDownButton.Active = false + else + scrollDownButton.Active = ((pixelsRemainingY - lastChildSize.Y) < 0) + end + scrollDrag.Active = #guiObjects > howManyDisplayed + scrollDrag.Visible = scrollDrag.Active + end + + + + local layoutSimpleScrollBar = function() + local guiObjects = {} + howManyDisplayed = 0 + + if orderList then + for i, child in ipairs(orderList) do + if child.Parent == frame then + table.insert(guiObjects, child) + end + end + else + local children = frame:GetChildren() + if children then + for i, child in ipairs(children) do + if child:IsA("GuiObject") then + table.insert(guiObjects, child) + end + end + end + end + if #guiObjects == 0 then + scrollUpButton.Active = false + scrollDownButton.Active = false + scrollDrag.Active = false + scrollPosition = 1 + return + end + + if scrollPosition > #guiObjects then + scrollPosition = #guiObjects + end + + local totalPixels = frame.AbsoluteSize.Y + local pixelsRemaining = frame.AbsoluteSize.Y + + local pixelsBelowScrollbar = 0 + local pos = #guiObjects + while pixelsBelowScrollbar < totalPixels and pos >= 1 do + if pos >= scrollPosition then + pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y + else + if pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y <= totalPixels then + --It fits, so back up our scroll position + pixelsBelowScrollbar = pixelsBelowScrollbar + guiObjects[pos].AbsoluteSize.Y + if scrollPosition <= 1 then + scrollPosition = 1 + break + else + --local ("Backing up ScrollPosition from -- " ..scrollPosition) + scrollPosition = scrollPosition - 1 + end + else + break + end + end + pos = pos - 1 + end + + pos = scrollPosition + for i, child in ipairs(guiObjects) do + if i < scrollPosition then + --print("Hiding " .. child.Name) + child.Visible = false + else + if pixelsRemaining < 0 then + --print("Out of Space " .. child.Name) + child.Visible = false + else + --print("Laying out " .. child.Name) + --GuiObject + child.Position = UDim2.new(child.Position.X.Scale, child.Position.X.Offset, 0, totalPixels - pixelsRemaining) + pixelsRemaining = pixelsRemaining - child.AbsoluteSize.Y + if (pixelsRemaining >= 0) then + child.Visible = true + howManyDisplayed = howManyDisplayed + 1 + else + child.Visible = false + end + end + end + end + scrollUpButton.Active = (scrollPosition > 1) + scrollDownButton.Active = (pixelsRemaining < 0) + scrollDrag.Active = #guiObjects > howManyDisplayed + scrollDrag.Visible = scrollDrag.Active + end + + + local moveDragger = function() + local guiObjects = 0 + local children = frame:GetChildren() + if children then + for i, child in ipairs(children) do + if child:IsA("GuiObject") then + guiObjects = guiObjects + 1 + end + end + end + + if not scrollDrag.Parent then return end + + local dragSizeY = scrollDrag.Parent.AbsoluteSize.y * (1/(guiObjects - howManyDisplayed + 1)) + if dragSizeY < 16 then dragSizeY = 16 end + scrollDrag.Size = UDim2.new(scrollDrag.Size.X.Scale,scrollDrag.Size.X.Offset,scrollDrag.Size.Y.Scale,dragSizeY) + + local relativeYPos = (scrollPosition - 1)/(guiObjects - (howManyDisplayed)) + if relativeYPos > 1 then relativeYPos = 1 + elseif relativeYPos < 0 then relativeYPos = 0 end + local absYPos = 0 + + if relativeYPos ~= 0 then + absYPos = (relativeYPos * scrollbar.AbsoluteSize.y) - (relativeYPos * scrollDrag.AbsoluteSize.y) + end + + scrollDrag.Position = UDim2.new(scrollDrag.Position.X.Scale,scrollDrag.Position.X.Offset,scrollDrag.Position.Y.Scale,absYPos) + end + + local reentrancyGuard = false + local recalculate = function() + if reentrancyGuard then + return + end + reentrancyGuard = true + wait() + local success, err = nil + if style == "grid" then + success, err = pcall(function() layoutGridScrollBar() end) + elseif style == "simple" then + success, err = pcall(function() layoutSimpleScrollBar() end) + end + if not success then print(err) end + moveDragger() + reentrancyGuard = false + end + + local doScrollUp = function() + scrollPosition = (scrollPosition) - rowSize + if scrollPosition < 1 then scrollPosition = 1 end + recalculate(nil) + end + + local doScrollDown = function() + scrollPosition = (scrollPosition) + rowSize + recalculate(nil) + end + + local scrollUp = function(mouseYPos) + if scrollUpButton.Active then + scrollStamp = tick() + local current = scrollStamp + local upCon + upCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + upCon:disconnect() + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + doScrollUp() + wait(0.2) + local t = tick() + local w = 0.1 + while scrollStamp == current do + doScrollUp() + if mouseYPos and mouseYPos > scrollDrag.AbsolutePosition.y then + break + end + if not scrollUpButton.Active then break end + if tick()-t > 5 then + w = 0 + elseif tick()-t > 2 then + w = 0.06 + end + wait(w) + end + end + end + + local scrollDown = function(mouseYPos) + if scrollDownButton.Active then + scrollStamp = tick() + local current = scrollStamp + local downCon + downCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + downCon:disconnect() + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + doScrollDown() + wait(0.2) + local t = tick() + local w = 0.1 + while scrollStamp == current do + doScrollDown() + if mouseYPos and mouseYPos < (scrollDrag.AbsolutePosition.y + scrollDrag.AbsoluteSize.x) then + break + end + if not scrollDownButton.Active then break end + if tick()-t > 5 then + w = 0 + elseif tick()-t > 2 then + w = 0.06 + end + wait(w) + end + end + end + + local y = 0 + scrollDrag.MouseButton1Down:connect(function(x,y) + if scrollDrag.Active then + scrollStamp = tick() + local mouseOffset = y - scrollDrag.AbsolutePosition.y + local dragCon + local upCon + dragCon = mouseDrag.MouseMoved:connect(function(x,y) + local barAbsPos = scrollbar.AbsolutePosition.y + local barAbsSize = scrollbar.AbsoluteSize.y + + local dragAbsSize = scrollDrag.AbsoluteSize.y + local barAbsOne = barAbsPos + barAbsSize - dragAbsSize + y = y - mouseOffset + y = y < barAbsPos and barAbsPos or y > barAbsOne and barAbsOne or y + y = y - barAbsPos + + local guiObjects = 0 + local children = frame:GetChildren() + if children then + for i, child in ipairs(children) do + if child:IsA("GuiObject") then + guiObjects = guiObjects + 1 + end + end + end + + local doublePercent = y/(barAbsSize-dragAbsSize) + local rowDiff = rowSize + local totalScrollCount = guiObjects - (howManyDisplayed - 1) + local newScrollPosition = math.floor((doublePercent * totalScrollCount) + 0.5) + rowDiff + if newScrollPosition < scrollPosition then + rowDiff = -rowDiff + end + + if newScrollPosition < 1 then + newScrollPosition = 1 + end + + scrollPosition = newScrollPosition + recalculate(nil) + end) + upCon = mouseDrag.MouseButton1Up:connect(function() + scrollStamp = tick() + mouseDrag.Parent = nil + dragCon:disconnect(); dragCon = nil + upCon:disconnect(); drag = nil + end) + mouseDrag.Parent = getScreenGuiAncestor(scrollbar) + end + end) + + local scrollMouseCount = 0 + + scrollUpButton.MouseButton1Down:connect( + function() + scrollUp() + end) + scrollUpButton.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + + + scrollDownButton.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + scrollDownButton.MouseButton1Down:connect( + function() + scrollDown() + end) + + scrollbar.MouseButton1Up:connect(function() + scrollStamp = tick() + end) + scrollbar.MouseButton1Down:connect( + function(x,y) + if y > (scrollDrag.AbsoluteSize.y + scrollDrag.AbsolutePosition.y) then + scrollDown(y) + elseif y < (scrollDrag.AbsolutePosition.y) then + scrollUp(y) + end + end) + + + frame.ChildAdded:connect(function() + recalculate(nil) + end) + + frame.ChildRemoved:connect(function() + recalculate(nil) + end) + + frame.Changed:connect( + function(prop) + if prop == "AbsoluteSize" then + --Wait a heartbeat for it to sync in + recalculate(nil) + end + end) + frame.AncestryChanged:connect(function() recalculate(nil) end) + + return frame, scrollUpButton, scrollDownButton, recalculate, scrollbar +end +local function binaryGrow(min, max, fits) + if min > max then + return min + end + local biggestLegal = min + + while min <= max do + local mid = min + math.floor((max - min) / 2) + if fits(mid) and (biggestLegal == nil or biggestLegal < mid) then + biggestLegal = mid + + --Try growing + min = mid + 1 + else + --Doesn't fit, shrink + max = mid - 1 + end + end + return biggestLegal +end + + +local function binaryShrink(min, max, fits) + if min > max then + return min + end + local smallestLegal = max + + while min <= max do + local mid = min + math.floor((max - min) / 2) + if fits(mid) and (smallestLegal == nil or smallestLegal > mid) then + smallestLegal = mid + + --It fits, shrink + max = mid - 1 + else + --Doesn't fit, grow + min = mid + 1 + end + end + return smallestLegal +end + + +local function getGuiOwner(instance) + while instance ~= nil do + if instance:IsA("ScreenGui") or instance:IsA("BillboardGui") then + return instance + end + instance = instance.Parent + end + return nil +end + +t.AutoTruncateTextObject = function(textLabel) + local text = textLabel.Text + + local fullLabel = textLabel:Clone() + fullLabel.Name = "Full" .. textLabel.Name + fullLabel.BorderSizePixel = 0 + fullLabel.BackgroundTransparency = 0 + fullLabel.Text = text + fullLabel.TextXAlignment = Enum.TextXAlignment.Center + fullLabel.Position = UDim2.new(0,-3,0,0) + fullLabel.Size = UDim2.new(0,100,1,0) + fullLabel.Visible = false + fullLabel.Parent = textLabel + + local shortText = nil + local mouseEnterConnection = nil + local mouseLeaveConnection= nil + + local checkForResize = function() + if getGuiOwner(textLabel) == nil then + return + end + textLabel.Text = text + if textLabel.TextFits then + --Tear down the rollover if it is active + if mouseEnterConnection then + mouseEnterConnection:disconnect() + mouseEnterConnection = nil + end + if mouseLeaveConnection then + mouseLeaveConnection:disconnect() + mouseLeaveConnection = nil + end + else + local len = string.len(text) + textLabel.Text = text .. "~" + + --Shrink the text + local textSize = binaryGrow(0, len, + function(pos) + if pos == 0 then + textLabel.Text = "~" + else + textLabel.Text = string.sub(text, 1, pos) .. "~" + end + return textLabel.TextFits + end) + shortText = string.sub(text, 1, textSize) .. "~" + textLabel.Text = shortText + + --Make sure the fullLabel fits + if not fullLabel.TextFits then + --Already too small, grow it really bit to start + fullLabel.Size = UDim2.new(0, 10000, 1, 0) + end + + --Okay, now try to binary shrink it back down + local fullLabelSize = binaryShrink(textLabel.AbsoluteSize.X,fullLabel.AbsoluteSize.X, + function(size) + fullLabel.Size = UDim2.new(0, size, 1, 0) + return fullLabel.TextFits + end) + fullLabel.Size = UDim2.new(0,fullLabelSize+6,1,0) + + --Now setup the rollover effects, if they are currently off + if mouseEnterConnection == nil then + mouseEnterConnection = textLabel.MouseEnter:connect( + function() + fullLabel.ZIndex = textLabel.ZIndex + 1 + fullLabel.Visible = true + --textLabel.Text = "" + end) + end + if mouseLeaveConnection == nil then + mouseLeaveConnection = textLabel.MouseLeave:connect( + function() + fullLabel.Visible = false + --textLabel.Text = shortText + end) + end + end + end + textLabel.AncestryChanged:connect(checkForResize) + textLabel.Changed:connect( + function(prop) + if prop == "AbsoluteSize" then + checkForResize() + end + end) + + checkForResize() + + local function changeText(newText) + text = newText + fullLabel.Text = text + checkForResize() + end + + return textLabel, changeText +end + +local function TransitionTutorialPages(fromPage, toPage, transitionFrame, currentPageValue) + if fromPage then + fromPage.Visible = false + if transitionFrame.Visible == false then + transitionFrame.Size = fromPage.Size + transitionFrame.Position = fromPage.Position + end + else + if transitionFrame.Visible == false then + transitionFrame.Size = UDim2.new(0.0,50,0.0,50) + transitionFrame.Position = UDim2.new(0.5,-25,0.5,-25) + end + end + transitionFrame.Visible = true + currentPageValue.Value = nil + + local newsize, newPosition + if toPage then + --Make it visible so it resizes + toPage.Visible = true + + newSize = toPage.Size + newPosition = toPage.Position + + toPage.Visible = false + else + newSize = UDim2.new(0.0,50,0.0,50) + newPosition = UDim2.new(0.5,-25,0.5,-25) + end + transitionFrame:TweenSizeAndPosition(newSize, newPosition, Enum.EasingDirection.InOut, Enum.EasingStyle.Quad, 0.3, true, + function(state) + if state == Enum.TweenStatus.Completed then + transitionFrame.Visible = false + if toPage then + toPage.Visible = true + currentPageValue.Value = toPage + end + end + end) +end + +t.CreateTutorial = function(name, tutorialKey, createButtons) + local frame = Instance.new("Frame") + frame.Name = "Tutorial-" .. name + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(0.6, 0, 0.6, 0) + frame.Position = UDim2.new(0.2, 0, 0.2, 0) + + local transitionFrame = Instance.new("Frame") + transitionFrame.Name = "TransitionFrame" + transitionFrame.Style = Enum.FrameStyle.RobloxRound + transitionFrame.Size = UDim2.new(0.6, 0, 0.6, 0) + transitionFrame.Position = UDim2.new(0.2, 0, 0.2, 0) + transitionFrame.Visible = false + transitionFrame.Parent = frame + + local currentPageValue = Instance.new("ObjectValue") + currentPageValue.Name = "CurrentTutorialPage" + currentPageValue.Value = nil + currentPageValue.Parent = frame + + local boolValue = Instance.new("BoolValue") + boolValue.Name = "Buttons" + boolValue.Value = createButtons + boolValue.Parent = frame + + local pages = Instance.new("Frame") + pages.Name = "Pages" + pages.BackgroundTransparency = 1 + pages.Size = UDim2.new(1,0,1,0) + pages.Parent = frame + + local function getVisiblePageAndHideOthers() + local visiblePage = nil + local children = pages:GetChildren() + if children then + for i,child in ipairs(children) do + if child.Visible then + if visiblePage then + child.Visible = false + else + visiblePage = child + end + end + end + end + return visiblePage + end + + local showTutorial = function(alwaysShow) + if alwaysShow or UserSettings().GameSettings:GetTutorialState(tutorialKey) == false then + print("Showing tutorial-",tutorialKey) + local currentTutorialPage = getVisiblePageAndHideOthers() + + local firstPage = pages:FindFirstChild("TutorialPage1") + if firstPage then + TransitionTutorialPages(currentTutorialPage, firstPage, transitionFrame, currentPageValue) + else + error("Could not find TutorialPage1") + end + end + end + + local dismissTutorial = function() + local currentTutorialPage = getVisiblePageAndHideOthers() + + if currentTutorialPage then + TransitionTutorialPages(currentTutorialPage, nil, transitionFrame, currentPageValue) + end + + UserSettings().GameSettings:SetTutorialState(tutorialKey, true) + end + + local gotoPage = function(pageNum) + local page = pages:FindFirstChild("TutorialPage" .. pageNum) + local currentTutorialPage = getVisiblePageAndHideOthers() + TransitionTutorialPages(currentTutorialPage, page, transitionFrame, currentPageValue) + end + + return frame, showTutorial, dismissTutorial, gotoPage +end + +local function CreateBasicTutorialPage(name, handleResize, skipTutorial, giveDoneButton) + local frame = Instance.new("Frame") + frame.Name = "TutorialPage" + frame.Style = Enum.FrameStyle.RobloxRound + frame.Size = UDim2.new(0.6, 0, 0.6, 0) + frame.Position = UDim2.new(0.2, 0, 0.2, 0) + frame.Visible = false + + local frameHeader = Instance.new("TextLabel") + frameHeader.Name = "Header" + frameHeader.Text = name + frameHeader.BackgroundTransparency = 1 + frameHeader.FontSize = Enum.FontSize.Size24 + frameHeader.Font = Enum.Font.ArialBold + frameHeader.TextColor3 = Color3.new(1,1,1) + frameHeader.TextXAlignment = Enum.TextXAlignment.Center + frameHeader.TextWrap = true + frameHeader.Size = UDim2.new(1,-55, 0, 22) + frameHeader.Position = UDim2.new(0,0,0,0) + frameHeader.Parent = frame + + local skipButton = Instance.new("ImageButton") + skipButton.Name = "SkipButton" + skipButton.AutoButtonColor = false + skipButton.BackgroundTransparency = 1 + skipButton.Image = "rbxasset://textures/ui/closeButton.png" + skipButton.MouseButton1Click:connect(function() + skipTutorial() + end) + skipButton.MouseEnter:connect(function() + skipButton.Image = "rbxasset://textures/ui/closeButton_dn.png" + end) + skipButton.MouseLeave:connect(function() + skipButton.Image = "rbxasset://textures/ui/closeButton.png" + end) + skipButton.Size = UDim2.new(0, 25, 0, 25) + skipButton.Position = UDim2.new(1, -25, 0, 0) + skipButton.Parent = frame + + + if giveDoneButton then + local doneButton = Instance.new("TextButton") + doneButton.Name = "DoneButton" + doneButton.Style = Enum.ButtonStyle.RobloxButtonDefault + doneButton.Text = "Done" + doneButton.TextColor3 = Color3.new(1,1,1) + doneButton.Font = Enum.Font.ArialBold + doneButton.FontSize = Enum.FontSize.Size18 + doneButton.Size = UDim2.new(0,100,0,50) + doneButton.Position = UDim2.new(0.5,-50,1,-50) + + if skipTutorial then + doneButton.MouseButton1Click:connect(function() skipTutorial() end) + end + + doneButton.Parent = frame + end + + local innerFrame = Instance.new("Frame") + innerFrame.Name = "ContentFrame" + innerFrame.BackgroundTransparency = 1 + innerFrame.Position = UDim2.new(0,0,0,25) + innerFrame.Parent = frame + + local nextButton = Instance.new("TextButton") + nextButton.Name = "NextButton" + nextButton.Text = "Next" + nextButton.TextColor3 = Color3.new(1,1,1) + nextButton.Font = Enum.Font.Arial + nextButton.FontSize = Enum.FontSize.Size18 + nextButton.Style = Enum.ButtonStyle.RobloxButtonDefault + nextButton.Size = UDim2.new(0,80, 0, 32) + nextButton.Position = UDim2.new(0.5, 5, 1, -32) + nextButton.Active = false + nextButton.Visible = false + nextButton.Parent = frame + + local prevButton = Instance.new("TextButton") + prevButton.Name = "PrevButton" + prevButton.Text = "Previous" + prevButton.TextColor3 = Color3.new(1,1,1) + prevButton.Font = Enum.Font.Arial + prevButton.FontSize = Enum.FontSize.Size18 + prevButton.Style = Enum.ButtonStyle.RobloxButton + prevButton.Size = UDim2.new(0,80, 0, 32) + prevButton.Position = UDim2.new(0.5, -85, 1, -32) + prevButton.Active = false + prevButton.Visible = false + prevButton.Parent = frame + + if giveDoneButton then + innerFrame.Size = UDim2.new(1,0,1,-75) + else + innerFrame.Size = UDim2.new(1,0,1,-22) + end + + local parentConnection = nil + + local function basicHandleResize() + if frame.Visible and frame.Parent then + local maxSize = math.min(frame.Parent.AbsoluteSize.X, frame.Parent.AbsoluteSize.Y) + handleResize(200,maxSize) + end + end + + frame.Changed:connect( + function(prop) + if prop == "Parent" then + if parentConnection ~= nil then + parentConnection:disconnect() + parentConnection = nil + end + if frame.Parent and frame.Parent:IsA("GuiObject") then + parentConnection = frame.Parent.Changed:connect( + function(parentProp) + if parentProp == "AbsoluteSize" then + wait() + basicHandleResize() + end + end) + basicHandleResize() + end + end + + if prop == "Visible" then + basicHandleResize() + end + end) + + return frame, innerFrame +end + +t.CreateTextTutorialPage = function(name, text, skipTutorialFunc) + local frame = nil + local contentFrame = nil + + local textLabel = Instance.new("TextLabel") + textLabel.BackgroundTransparency = 1 + textLabel.TextColor3 = Color3.new(1,1,1) + textLabel.Text = text + textLabel.TextWrap = true + textLabel.TextXAlignment = Enum.TextXAlignment.Left + textLabel.TextYAlignment = Enum.TextYAlignment.Center + textLabel.Font = Enum.Font.Arial + textLabel.FontSize = Enum.FontSize.Size14 + textLabel.Size = UDim2.new(1,0,1,0) + + local function handleResize(minSize, maxSize) + size = binaryShrink(minSize, maxSize, + function(size) + frame.Size = UDim2.new(0, size, 0, size) + return textLabel.TextFits + end) + frame.Size = UDim2.new(0, size, 0, size) + frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) + end + + frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc) + textLabel.Parent = contentFrame + + return frame +end + +t.CreateImageTutorialPage = function(name, imageAsset, x, y, skipTutorialFunc, giveDoneButton) + local frame = nil + local contentFrame = nil + + local imageLabel = Instance.new("ImageLabel") + imageLabel.BackgroundTransparency = 1 + imageLabel.Image = imageAsset + imageLabel.Size = UDim2.new(0,x,0,y) + imageLabel.Position = UDim2.new(0.5,-x/2,0.5,-y/2) + + local function handleResize(minSize, maxSize) + size = binaryShrink(minSize, maxSize, + function(size) + return size >= x and size >= y + end) + if size >= x and size >= y then + imageLabel.Size = UDim2.new(0,x, 0,y) + imageLabel.Position = UDim2.new(0.5,-x/2, 0.5, -y/2) + else + if x > y then + --X is limiter, so + imageLabel.Size = UDim2.new(1,0,y/x,0) + imageLabel.Position = UDim2.new(0,0, 0.5 - (y/x)/2, 0) + else + --Y is limiter + imageLabel.Size = UDim2.new(x/y,0,1, 0) + imageLabel.Position = UDim2.new(0.5-(x/y)/2, 0, 0, 0) + end + end + size = size + 50 + frame.Size = UDim2.new(0, size, 0, size) + frame.Position = UDim2.new(0.5, -size/2, 0.5, -size/2) + end + + frame, contentFrame = CreateBasicTutorialPage(name, handleResize, skipTutorialFunc, giveDoneButton) + imageLabel.Parent = contentFrame + + return frame +end + +t.AddTutorialPage = function(tutorial, tutorialPage) + local transitionFrame = tutorial.TransitionFrame + local currentPageValue = tutorial.CurrentTutorialPage + + if not tutorial.Buttons.Value then + tutorialPage.NextButton.Parent = nil + tutorialPage.PrevButton.Parent = nil + end + + local children = tutorial.Pages:GetChildren() + if children and #children > 0 then + tutorialPage.Name = "TutorialPage" .. (#children+1) + local previousPage = children[#children] + if not previousPage:IsA("GuiObject") then + error("All elements under Pages must be GuiObjects") + end + + if tutorial.Buttons.Value then + if previousPage.NextButton.Active then + error("NextButton already Active on previousPage, please only add pages with RbxGui.AddTutorialPage function") + end + previousPage.NextButton.MouseButton1Click:connect( + function() + TransitionTutorialPages(previousPage, tutorialPage, transitionFrame, currentPageValue) + end) + previousPage.NextButton.Active = true + previousPage.NextButton.Visible = true + + if tutorialPage.PrevButton.Active then + error("PrevButton already Active on tutorialPage, please only add pages with RbxGui.AddTutorialPage function") + end + tutorialPage.PrevButton.MouseButton1Click:connect( + function() + TransitionTutorialPages(tutorialPage, previousPage, transitionFrame, currentPageValue) + end) + tutorialPage.PrevButton.Active = true + tutorialPage.PrevButton.Visible = true + end + + tutorialPage.Parent = tutorial.Pages + else + --First child + tutorialPage.Name = "TutorialPage1" + tutorialPage.Parent = tutorial.Pages + end +end + +t.CreateSetPanel = function(userIdsForSets, objectSelected, dialogClosed, size, position, showAdminCategories, useAssetVersionId) + + if not userIdsForSets then + error("CreateSetPanel: userIdsForSets (first arg) is nil, should be a table of number ids") + end + if type(userIdsForSets) ~= "table" and type(userIdsForSets) ~= "userdata" then + error("CreateSetPanel: userIdsForSets (first arg) is of type " ..type(userIdsForSets) .. ", should be of type table or userdata") + end + if not objectSelected then + error("CreateSetPanel: objectSelected (second arg) is nil, should be a callback function!") + end + if type(objectSelected) ~= "function" then + error("CreateSetPanel: objectSelected (second arg) is of type " .. type(objectSelected) .. ", should be of type function!") + end + if dialogClosed and type(dialogClosed) ~= "function" then + error("CreateSetPanel: dialogClosed (third arg) is of type " .. type(dialogClosed) .. ", should be of type function!") + end + + if showAdminCategories == nil then -- by default, don't show beta sets + showAdminCategories = false + end + + local arrayPosition = 1 + local insertButtons = {} + local insertButtonCons = {} + local contents = nil + local setGui = nil + + -- used for water selections + local waterForceDirection = "NegX" + local waterForce = "None" + local waterGui, waterTypeChangedEvent = nil + + local Data = {} + Data.CurrentCategory = nil + Data.Category = {} + local SetCache = {} + + local userCategoryButtons = nil + + local buttonWidth = 64 + local buttonHeight = buttonWidth + + local SmallThumbnailUrl = nil + local LargeThumbnailUrl = nil + local BaseUrl = game:GetService("ContentProvider").BaseUrl:lower() + + if useAssetVersionId then + LargeThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=420&ht=420&assetversionid=" + SmallThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&assetversionid=" + else + LargeThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=420&ht=420&aid=" + SmallThumbnailUrl = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&aid=" + end + + local function drillDownSetZIndex(parent, index) + local children = parent:GetChildren() + for i = 1, #children do + if children[i]:IsA("GuiObject") then + children[i].ZIndex = index + end + drillDownSetZIndex(children[i], index) + end + end + + -- for terrain stamping + local currTerrainDropDownFrame = nil + local terrainShapes = {"Block","Vertical Ramp","Corner Wedge","Inverse Corner Wedge","Horizontal Ramp","Auto-Wedge"} + local terrainShapeMap = {} + for i = 1, #terrainShapes do + terrainShapeMap[terrainShapes[i]] = i - 1 + end + terrainShapeMap[terrainShapes[#terrainShapes]] = 6 + + local function createWaterGui() + local waterForceDirections = {"NegX","X","NegY","Y","NegZ","Z"} + local waterForces = {"None", "Small", "Medium", "Strong", "Max"} + + local waterFrame = Instance.new("Frame") + waterFrame.Name = "WaterFrame" + waterFrame.Style = Enum.FrameStyle.RobloxSquare + waterFrame.Size = UDim2.new(0,150,0,110) + waterFrame.Visible = false + + local waterForceLabel = Instance.new("TextLabel") + waterForceLabel.Name = "WaterForceLabel" + waterForceLabel.BackgroundTransparency = 1 + waterForceLabel.Size = UDim2.new(1,0,0,12) + waterForceLabel.Font = Enum.Font.ArialBold + waterForceLabel.FontSize = Enum.FontSize.Size12 + waterForceLabel.TextColor3 = Color3.new(1,1,1) + waterForceLabel.TextXAlignment = Enum.TextXAlignment.Left + waterForceLabel.Text = "Water Force" + waterForceLabel.Parent = waterFrame + + local waterForceDirLabel = waterForceLabel:Clone() + waterForceDirLabel.Name = "WaterForceDirectionLabel" + waterForceDirLabel.Text = "Water Force Direction" + waterForceDirLabel.Position = UDim2.new(0,0,0,50) + waterForceDirLabel.Parent = waterFrame + + local waterTypeChangedEvent = Instance.new("BindableEvent",waterFrame) + waterTypeChangedEvent.Name = "WaterTypeChangedEvent" + + local waterForceDirectionSelectedFunc = function(newForceDirection) + waterForceDirection = newForceDirection + waterTypeChangedEvent:Fire({waterForce, waterForceDirection}) + end + local waterForceSelectedFunc = function(newForce) + waterForce = newForce + waterTypeChangedEvent:Fire({waterForce, waterForceDirection}) + end + + local waterForceDirectionDropDown, forceWaterDirectionSelection = t.CreateDropDownMenu(waterForceDirections, waterForceDirectionSelectedFunc) + waterForceDirectionDropDown.Size = UDim2.new(1,0,0,25) + waterForceDirectionDropDown.Position = UDim2.new(0,0,1,3) + forceWaterDirectionSelection("NegX") + waterForceDirectionDropDown.Parent = waterForceDirLabel + + local waterForceDropDown, forceWaterForceSelection = t.CreateDropDownMenu(waterForces, waterForceSelectedFunc) + forceWaterForceSelection("None") + waterForceDropDown.Size = UDim2.new(1,0,0,25) + waterForceDropDown.Position = UDim2.new(0,0,1,3) + waterForceDropDown.Parent = waterForceLabel + + return waterFrame, waterTypeChangedEvent + end + + -- Helper Function that contructs gui elements + local function createSetGui() + + local setGui = Instance.new("ScreenGui") + setGui.Name = "SetGui" + + local setPanel = Instance.new("Frame") + setPanel.Name = "SetPanel" + setPanel.Active = true + setPanel.BackgroundTransparency = 1 + if position then + setPanel.Position = position + else + setPanel.Position = UDim2.new(0.2, 29, 0.1, 24) + end + if size then + setPanel.Size = size + else + setPanel.Size = UDim2.new(0.6, -58, 0.64, 0) + end + setPanel.Style = Enum.FrameStyle.RobloxRound + setPanel.ZIndex = 6 + setPanel.Parent = setGui + + -- Children of SetPanel + local itemPreview = Instance.new("Frame") + itemPreview.Name = "ItemPreview" + itemPreview.BackgroundTransparency = 1 + itemPreview.Position = UDim2.new(0.8,5,0.085,0) + itemPreview.Size = UDim2.new(0.21,0,0.9,0) + itemPreview.ZIndex = 6 + itemPreview.Parent = setPanel + + -- Children of ItemPreview + local textPanel = Instance.new("Frame") + textPanel.Name = "TextPanel" + textPanel.BackgroundTransparency = 1 + textPanel.Position = UDim2.new(0,0,0.45,0) + textPanel.Size = UDim2.new(1,0,0.55,0) + textPanel.ZIndex = 6 + textPanel.Parent = itemPreview + + -- Children of TextPanel + local rolloverText = Instance.new("TextLabel") + rolloverText.Name = "RolloverText" + rolloverText.BackgroundTransparency = 1 + rolloverText.Size = UDim2.new(1,0,0,48) + rolloverText.ZIndex = 6 + rolloverText.Font = Enum.Font.ArialBold + rolloverText.FontSize = Enum.FontSize.Size24 + rolloverText.Text = "" + rolloverText.TextColor3 = Color3.new(1,1,1) + rolloverText.TextWrap = true + rolloverText.TextXAlignment = Enum.TextXAlignment.Left + rolloverText.TextYAlignment = Enum.TextYAlignment.Top + rolloverText.Parent = textPanel + + local largePreview = Instance.new("ImageLabel") + largePreview.Name = "LargePreview" + largePreview.BackgroundTransparency = 1 + largePreview.Image = "" + largePreview.Size = UDim2.new(1,0,0,170) + largePreview.ZIndex = 6 + largePreview.Parent = itemPreview + + local sets = Instance.new("Frame") + sets.Name = "Sets" + sets.BackgroundTransparency = 1 + sets.Position = UDim2.new(0,0,0,5) + sets.Size = UDim2.new(0.23,0,1,-5) + sets.ZIndex = 6 + sets.Parent = setPanel + + -- Children of Sets + local line = Instance.new("Frame") + line.Name = "Line" + line.BackgroundColor3 = Color3.new(1,1,1) + line.BackgroundTransparency = 0.7 + line.BorderSizePixel = 0 + line.Position = UDim2.new(1,-3,0.06,0) + line.Size = UDim2.new(0,3,0.9,0) + line.ZIndex = 6 + line.Parent = sets + + local setsLists, controlFrame = t.CreateTrueScrollingFrame() + setsLists.Size = UDim2.new(1,-6,0.94,0) + setsLists.Position = UDim2.new(0,0,0.06,0) + setsLists.BackgroundTransparency = 1 + setsLists.Name = "SetsLists" + setsLists.ZIndex = 6 + setsLists.Parent = sets + drillDownSetZIndex(controlFrame, 7) + + local setsHeader = Instance.new("TextLabel") + setsHeader.Name = "SetsHeader" + setsHeader.BackgroundTransparency = 1 + setsHeader.Size = UDim2.new(0,47,0,24) + setsHeader.ZIndex = 6 + setsHeader.Font = Enum.Font.ArialBold + setsHeader.FontSize = Enum.FontSize.Size24 + setsHeader.Text = "Sets" + setsHeader.TextColor3 = Color3.new(1,1,1) + setsHeader.TextXAlignment = Enum.TextXAlignment.Left + setsHeader.TextYAlignment = Enum.TextYAlignment.Top + setsHeader.Parent = sets + + local cancelButton = Instance.new("TextButton") + cancelButton.Name = "CancelButton" + cancelButton.Position = UDim2.new(1,-32,0,-2) + cancelButton.Size = UDim2.new(0,34,0,34) + cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault + cancelButton.ZIndex = 6 + cancelButton.Text = "" + cancelButton.Modal = true + cancelButton.Parent = setPanel + + -- Children of Cancel Button + local cancelImage = Instance.new("ImageLabel") + cancelImage.Name = "CancelImage" + cancelImage.BackgroundTransparency = 1 + cancelImage.Image = "http://www.syntax.eco/asset?id=54135717" + cancelImage.Position = UDim2.new(0,-2,0,-2) + cancelImage.Size = UDim2.new(0,16,0,16) + cancelImage.ZIndex = 6 + cancelImage.Parent = cancelButton + + return setGui + end + + local function createSetButton(text) + local setButton = Instance.new("TextButton") + + if text then setButton.Text = text + else setButton.Text = "" end + + setButton.AutoButtonColor = false + setButton.BackgroundTransparency = 1 + setButton.BackgroundColor3 = Color3.new(1,1,1) + setButton.BorderSizePixel = 0 + setButton.Size = UDim2.new(1,-5,0,18) + setButton.ZIndex = 6 + setButton.Visible = false + setButton.Font = Enum.Font.Arial + setButton.FontSize = Enum.FontSize.Size18 + setButton.TextColor3 = Color3.new(1,1,1) + setButton.TextXAlignment = Enum.TextXAlignment.Left + + return setButton + end + + local function buildSetButton(name, setId, setImageId, i, count) + local button = createSetButton(name) + button.Text = name + button.Name = "SetButton" + button.Visible = true + + local setValue = Instance.new("IntValue") + setValue.Name = "SetId" + setValue.Value = setId + setValue.Parent = button + + local setName = Instance.new("StringValue") + setName.Name = "SetName" + setName.Value = name + setName.Parent = button + + return button + end + + local function processCategory(sets) + local setButtons = {} + local numSkipped = 0 + for i = 1, #sets do + if not showAdminCategories and sets[i].Name == "Beta" then + numSkipped = numSkipped + 1 + else + setButtons[i - numSkipped] = buildSetButton(sets[i].Name, sets[i].CategoryId, sets[i].ImageAssetId, i - numSkipped, #sets) + end + end + return setButtons + end + + local function handleResize() + wait() -- neccessary to insure heartbeat happened + + local itemPreview = setGui.SetPanel.ItemPreview + + itemPreview.LargePreview.Size = UDim2.new(1,0,0,itemPreview.AbsoluteSize.X) + itemPreview.LargePreview.Position = UDim2.new(0.5,-itemPreview.LargePreview.AbsoluteSize.X/2,0,0) + itemPreview.TextPanel.Position = UDim2.new(0,0,0,itemPreview.LargePreview.AbsoluteSize.Y) + itemPreview.TextPanel.Size = UDim2.new(1,0,0,itemPreview.AbsoluteSize.Y - itemPreview.LargePreview.AbsoluteSize.Y) + end + + local function makeInsertAssetButton() + local insertAssetButtonExample = Instance.new("Frame") + insertAssetButtonExample.Name = "InsertAssetButtonExample" + insertAssetButtonExample.Position = UDim2.new(0,128,0,64) + insertAssetButtonExample.Size = UDim2.new(0,64,0,64) + insertAssetButtonExample.BackgroundTransparency = 1 + insertAssetButtonExample.ZIndex = 6 + insertAssetButtonExample.Visible = false + + local assetId = Instance.new("IntValue") + assetId.Name = "AssetId" + assetId.Value = 0 + assetId.Parent = insertAssetButtonExample + + local assetName = Instance.new("StringValue") + assetName.Name = "AssetName" + assetName.Value = "" + assetName.Parent = insertAssetButtonExample + + local button = Instance.new("TextButton") + button.Name = "Button" + button.Text = "" + button.Style = Enum.ButtonStyle.RobloxButton + button.Position = UDim2.new(0.025,0,0.025,0) + button.Size = UDim2.new(0.95,0,0.95,0) + button.ZIndex = 6 + button.Parent = insertAssetButtonExample + + local buttonImage = Instance.new("ImageLabel") + buttonImage.Name = "ButtonImage" + buttonImage.Image = "" + buttonImage.Position = UDim2.new(0,-7,0,-7) + buttonImage.Size = UDim2.new(1,14,1,14) + buttonImage.BackgroundTransparency = 1 + buttonImage.ZIndex = 7 + buttonImage.Parent = button + + local configIcon = buttonImage:clone() + configIcon.Name = "ConfigIcon" + configIcon.Visible = false + configIcon.Position = UDim2.new(1,-23,1,-24) + configIcon.Size = UDim2.new(0,16,0,16) + configIcon.Image = "" + configIcon.ZIndex = 6 + configIcon.Parent = insertAssetButtonExample + + return insertAssetButtonExample + end + + local function showLargePreview(insertButton) + if insertButton:FindFirstChild("AssetId") then + delay(0,function() + game:GetService("ContentProvider"):Preload(LargeThumbnailUrl .. tostring(insertButton.AssetId.Value)) + setGui.SetPanel.ItemPreview.LargePreview.Image = LargeThumbnailUrl .. tostring(insertButton.AssetId.Value) + end) + end + if insertButton:FindFirstChild("AssetName") then + setGui.SetPanel.ItemPreview.TextPanel.RolloverText.Text = insertButton.AssetName.Value + end + end + + local function selectTerrainShape(shape) + if currTerrainDropDownFrame then + objectSelected(tostring(currTerrainDropDownFrame.AssetName.Value), tonumber(currTerrainDropDownFrame.AssetId.Value), shape) + end + end + + local function createTerrainTypeButton(name, parent) + local dropDownTextButton = Instance.new("TextButton") + dropDownTextButton.Name = name .. "Button" + dropDownTextButton.Font = Enum.Font.ArialBold + dropDownTextButton.FontSize = Enum.FontSize.Size14 + dropDownTextButton.BorderSizePixel = 0 + dropDownTextButton.TextColor3 = Color3.new(1,1,1) + dropDownTextButton.Text = name + dropDownTextButton.TextXAlignment = Enum.TextXAlignment.Left + dropDownTextButton.BackgroundTransparency = 1 + dropDownTextButton.ZIndex = parent.ZIndex + 1 + dropDownTextButton.Size = UDim2.new(0,parent.Size.X.Offset - 2,0,16) + dropDownTextButton.Position = UDim2.new(0,1,0,0) + + dropDownTextButton.MouseEnter:connect(function() + dropDownTextButton.BackgroundTransparency = 0 + dropDownTextButton.TextColor3 = Color3.new(0,0,0) + end) + + dropDownTextButton.MouseLeave:connect(function() + dropDownTextButton.BackgroundTransparency = 1 + dropDownTextButton.TextColor3 = Color3.new(1,1,1) + end) + + dropDownTextButton.MouseButton1Click:connect(function() + dropDownTextButton.BackgroundTransparency = 1 + dropDownTextButton.TextColor3 = Color3.new(1,1,1) + if dropDownTextButton.Parent and dropDownTextButton.Parent:IsA("GuiObject") then + dropDownTextButton.Parent.Visible = false + end + selectTerrainShape(terrainShapeMap[dropDownTextButton.Text]) + end) + + return dropDownTextButton + end + + local function createTerrainDropDownMenu(zIndex) + local dropDown = Instance.new("Frame") + dropDown.Name = "TerrainDropDown" + dropDown.BackgroundColor3 = Color3.new(0,0,0) + dropDown.BorderColor3 = Color3.new(1,0,0) + dropDown.Size = UDim2.new(0,200,0,0) + dropDown.Visible = false + dropDown.ZIndex = zIndex + dropDown.Parent = setGui + + for i = 1, #terrainShapes do + local shapeButton = createTerrainTypeButton(terrainShapes[i],dropDown) + shapeButton.Position = UDim2.new(0,1,0,(i - 1) * (shapeButton.Size.Y.Offset)) + shapeButton.Parent = dropDown + dropDown.Size = UDim2.new(0,200,0,dropDown.Size.Y.Offset + (shapeButton.Size.Y.Offset)) + end + + dropDown.MouseLeave:connect(function() + dropDown.Visible = false + end) + end + + + local function createDropDownMenuButton(parent) + local dropDownButton = Instance.new("ImageButton") + dropDownButton.Name = "DropDownButton" + dropDownButton.Image = "http://www.syntax.eco/asset/?id=67581509" + dropDownButton.BackgroundTransparency = 1 + dropDownButton.Size = UDim2.new(0,16,0,16) + dropDownButton.Position = UDim2.new(1,-24,0,6) + dropDownButton.ZIndex = parent.ZIndex + 2 + dropDownButton.Parent = parent + + if not setGui:FindFirstChild("TerrainDropDown") then + createTerrainDropDownMenu(8) + end + + dropDownButton.MouseButton1Click:connect(function() + setGui.TerrainDropDown.Visible = true + setGui.TerrainDropDown.Position = UDim2.new(0,parent.AbsolutePosition.X,0,parent.AbsolutePosition.Y) + currTerrainDropDownFrame = parent + end) + end + + local function buildInsertButton() + local insertButton = makeInsertAssetButton() + insertButton.Name = "InsertAssetButton" + insertButton.Visible = true + + if Data.Category[Data.CurrentCategory].SetName == "High Scalability" then + createDropDownMenuButton(insertButton) + end + + local lastEnter = nil + local mouseEnterCon = insertButton.MouseEnter:connect(function() + lastEnter = insertButton + delay(0.1,function() + if lastEnter == insertButton then + showLargePreview(insertButton) + end + end) + end) + return insertButton, mouseEnterCon + end + + local function realignButtonGrid(columns) + local x = 0 + local y = 0 + for i = 1, #insertButtons do + insertButtons[i].Position = UDim2.new(0, buttonWidth * x, 0, buttonHeight * y) + x = x + 1 + if x >= columns then + x = 0 + y = y + 1 + end + end + end + + local function setInsertButtonImageBehavior(insertFrame, visible, name, assetId) + if visible then + insertFrame.AssetName.Value = name + insertFrame.AssetId.Value = assetId + local newImageUrl = SmallThumbnailUrl .. assetId + if newImageUrl ~= insertFrame.Button.ButtonImage.Image then + delay(0,function() + game:GetService("ContentProvider"):Preload(SmallThumbnailUrl .. assetId) + insertFrame.Button.ButtonImage.Image = SmallThumbnailUrl .. assetId + end) + end + table.insert(insertButtonCons, + insertFrame.Button.MouseButton1Click:connect(function() + -- special case for water, show water selection gui + local isWaterSelected = (name == "Water") and (Data.Category[Data.CurrentCategory].SetName == "High Scalability") + waterGui.Visible = isWaterSelected + if isWaterSelected then + objectSelected(name, tonumber(assetId), nil) + else + objectSelected(name, tonumber(assetId)) + end + end) + ) + insertFrame.Visible = true + else + insertFrame.Visible = false + end + end + + local function loadSectionOfItems(setGui, rows, columns) + local pageSize = rows * columns + + if arrayPosition > #contents then return end + + local origArrayPos = arrayPosition + + local yCopy = 0 + for i = 1, pageSize + 1 do + if arrayPosition >= #contents + 1 then + break + end + + local buttonCon + insertButtons[arrayPosition], buttonCon = buildInsertButton() + table.insert(insertButtonCons,buttonCon) + insertButtons[arrayPosition].Parent = setGui.SetPanel.ItemsFrame + arrayPosition = arrayPosition + 1 + end + realignButtonGrid(columns) + + local indexCopy = origArrayPos + for index = origArrayPos, arrayPosition do + if insertButtons[index] then + if contents[index] then + + -- we don't want water to have a drop down button + if contents[index].Name == "Water" then + if Data.Category[Data.CurrentCategory].SetName == "High Scalability" then + insertButtons[index]:FindFirstChild("DropDownButton",true):Destroy() + end + end + + local assetId + if useAssetVersionId then + assetId = contents[index].AssetVersionId + else + assetId = contents[index].AssetId + end + setInsertButtonImageBehavior(insertButtons[index], true, contents[index].Name, assetId) + else + break + end + else + break + end + indexCopy = index + end + end + + local function setSetIndex() + Data.Category[Data.CurrentCategory].Index = 0 + + rows = 7 + columns = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.X/buttonWidth) + + contents = Data.Category[Data.CurrentCategory].Contents + if contents then + -- remove our buttons and their connections + for i = 1, #insertButtons do + insertButtons[i]:remove() + end + for i = 1, #insertButtonCons do + if insertButtonCons[i] then insertButtonCons[i]:disconnect() end + end + insertButtonCons = {} + insertButtons = {} + + arrayPosition = 1 + loadSectionOfItems(setGui, rows, columns) + end + end + + local function selectSet(button, setName, setId, setIndex) + if button and Data.Category[Data.CurrentCategory] ~= nil then + if button ~= Data.Category[Data.CurrentCategory].Button then + Data.Category[Data.CurrentCategory].Button = button + + if SetCache[setId] == nil then + SetCache[setId] = game:GetService("InsertService"):GetCollection(setId) + end + Data.Category[Data.CurrentCategory].Contents = SetCache[setId] + + Data.Category[Data.CurrentCategory].SetName = setName + Data.Category[Data.CurrentCategory].SetId = setId + end + setSetIndex() + end + end + + local function selectCategoryPage(buttons, page) + if buttons ~= Data.CurrentCategory then + if Data.CurrentCategory then + for key, button in pairs(Data.CurrentCategory) do + button.Visible = false + end + end + + Data.CurrentCategory = buttons + if Data.Category[Data.CurrentCategory] == nil then + Data.Category[Data.CurrentCategory] = {} + if #buttons > 0 then + selectSet(buttons[1], buttons[1].SetName.Value, buttons[1].SetId.Value, 0) + end + else + Data.Category[Data.CurrentCategory].Button = nil + selectSet(Data.Category[Data.CurrentCategory].ButtonFrame, Data.Category[Data.CurrentCategory].SetName, Data.Category[Data.CurrentCategory].SetId, Data.Category[Data.CurrentCategory].Index) + end + end + end + + local function selectCategory(category) + selectCategoryPage(category, 0) + end + + local function resetAllSetButtonSelection() + local setButtons = setGui.SetPanel.Sets.SetsLists:GetChildren() + for i = 1, #setButtons do + if setButtons[i]:IsA("TextButton") then + setButtons[i].Selected = false + setButtons[i].BackgroundTransparency = 1 + setButtons[i].TextColor3 = Color3.new(1,1,1) + setButtons[i].BackgroundColor3 = Color3.new(1,1,1) + end + end + end + + local function populateSetsFrame() + local currRow = 0 + for i = 1, #userCategoryButtons do + local button = userCategoryButtons[i] + button.Visible = true + button.Position = UDim2.new(0,5,0,currRow * button.Size.Y.Offset) + button.Parent = setGui.SetPanel.Sets.SetsLists + + if i == 1 then -- we will have this selected by default, so show it + button.Selected = true + button.BackgroundColor3 = Color3.new(0,204/255,0) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundTransparency = 0 + end + + button.MouseEnter:connect(function() + if not button.Selected then + button.BackgroundTransparency = 0 + button.TextColor3 = Color3.new(0,0,0) + end + end) + button.MouseLeave:connect(function() + if not button.Selected then + button.BackgroundTransparency = 1 + button.TextColor3 = Color3.new(1,1,1) + end + end) + button.MouseButton1Click:connect(function() + resetAllSetButtonSelection() + button.Selected = not button.Selected + button.BackgroundColor3 = Color3.new(0,204/255,0) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundTransparency = 0 + selectSet(button, button.Text, userCategoryButtons[i].SetId.Value, 0) + end) + + currRow = currRow + 1 + end + + local buttons = setGui.SetPanel.Sets.SetsLists:GetChildren() + + -- set first category as loaded for default + if buttons then + for i = 1, #buttons do + if buttons[i]:IsA("TextButton") then + selectSet(buttons[i], buttons[i].Text, userCategoryButtons[i].SetId.Value, 0) + selectCategory(userCategoryButtons) + break + end + end + end + end + + setGui = createSetGui() + waterGui, waterTypeChangedEvent = createWaterGui() + waterGui.Position = UDim2.new(0,55,0,0) + waterGui.Parent = setGui + setGui.Changed:connect(function(prop) -- this resizes the preview image to always be the right size + if prop == "AbsoluteSize" then + handleResize() + setSetIndex() + end + end) + + local scrollFrame, controlFrame = t.CreateTrueScrollingFrame() + scrollFrame.Size = UDim2.new(0.54,0,0.85,0) + scrollFrame.Position = UDim2.new(0.24,0,0.085,0) + scrollFrame.Name = "ItemsFrame" + scrollFrame.ZIndex = 6 + scrollFrame.Parent = setGui.SetPanel + scrollFrame.BackgroundTransparency = 1 + + drillDownSetZIndex(controlFrame,7) + + controlFrame.Parent = setGui.SetPanel + controlFrame.Position = UDim2.new(0.76, 5, 0, 0) + + local debounce = false + controlFrame.ScrollBottom.Changed:connect(function(prop) + if controlFrame.ScrollBottom.Value == true then + if debounce then return end + debounce = true + loadSectionOfItems(setGui, rows, columns) + debounce = false + end + end) + + local userData = {} + for id = 1, #userIdsForSets do + local newUserData = game:GetService("InsertService"):GetUserSets(userIdsForSets[id]) + if newUserData and #newUserData > 2 then + -- start at #3 to skip over My Decals and My Models for each account + for category = 3, #newUserData do + if newUserData[category].Name == "High Scalability" then -- we want high scalability parts to show first + table.insert(userData,1,newUserData[category]) + else + table.insert(userData, newUserData[category]) + end + end + end + + end + if userData then + userCategoryButtons = processCategory(userData) + end + + rows = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.Y/buttonHeight) + columns = math.floor(setGui.SetPanel.ItemsFrame.AbsoluteSize.X/buttonWidth) + + populateSetsFrame() + + insertPanelCloseCon = setGui.SetPanel.CancelButton.MouseButton1Click:connect(function() + setGui.SetPanel.Visible = false + if dialogClosed then dialogClosed() end + end) + + local setVisibilityFunction = function(visible) + if visible then + setGui.SetPanel.Visible = true + else + setGui.SetPanel.Visible = false + end + end + + local getVisibilityFunction = function() + if setGui then + if setGui:FindFirstChild("SetPanel") then + return setGui.SetPanel.Visible + end + end + + return false + end + + return setGui, setVisibilityFunction, getVisibilityFunction, waterTypeChangedEvent +end + +t.CreateTerrainMaterialSelector = function(size,position) + local terrainMaterialSelectionChanged = Instance.new("BindableEvent") + terrainMaterialSelectionChanged.Name = "TerrainMaterialSelectionChanged" + + local selectedButton = nil + + local frame = Instance.new("Frame") + frame.Name = "TerrainMaterialSelector" + if size then + frame.Size = size + else + frame.Size = UDim2.new(0, 245, 0, 230) + end + if position then + frame.Position = position + end + frame.BorderSizePixel = 0 + frame.BackgroundColor3 = Color3.new(0,0,0) + frame.Active = true + + terrainMaterialSelectionChanged.Parent = frame + + local waterEnabled = true -- todo: turn this on when water is ready + + local materialToImageMap = {} + local materialNames = {"Grass", "Sand", "Brick", "Granite", "Asphalt", "Iron", "Aluminum", "Gold", "Plank", "Log", "Gravel", "Cinder Block", "Stone Wall", "Concrete", "Plastic (red)", "Plastic (blue)"} + if waterEnabled then + table.insert(materialNames,"Water") + end + local currentMaterial = 1 + + function getEnumFromName(choice) + if choice == "Grass" then return 1 end + if choice == "Sand" then return 2 end + if choice == "Erase" then return 0 end + if choice == "Brick" then return 3 end + if choice == "Granite" then return 4 end + if choice == "Asphalt" then return 5 end + if choice == "Iron" then return 6 end + if choice == "Aluminum" then return 7 end + if choice == "Gold" then return 8 end + if choice == "Plank" then return 9 end + if choice == "Log" then return 10 end + if choice == "Gravel" then return 11 end + if choice == "Cinder Block" then return 12 end + if choice == "Stone Wall" then return 13 end + if choice == "Concrete" then return 14 end + if choice == "Plastic (red)" then return 15 end + if choice == "Plastic (blue)" then return 16 end + if choice == "Water" then return 17 end + end + + function getNameFromEnum(choice) + if choice == Enum.CellMaterial.Grass or choice == 1 then return "Grass"end + if choice == Enum.CellMaterial.Sand or choice == 2 then return "Sand" end + if choice == Enum.CellMaterial.Empty or choice == 0 then return "Erase" end + if choice == Enum.CellMaterial.Brick or choice == 3 then return "Brick" end + if choice == Enum.CellMaterial.Granite or choice == 4 then return "Granite" end + if choice == Enum.CellMaterial.Asphalt or choice == 5 then return "Asphalt" end + if choice == Enum.CellMaterial.Iron or choice == 6 then return "Iron" end + if choice == Enum.CellMaterial.Aluminum or choice == 7 then return "Aluminum" end + if choice == Enum.CellMaterial.Gold or choice == 8 then return "Gold" end + if choice == Enum.CellMaterial.WoodPlank or choice == 9 then return "Plank" end + if choice == Enum.CellMaterial.WoodLog or choice == 10 then return "Log" end + if choice == Enum.CellMaterial.Gravel or choice == 11 then return "Gravel" end + if choice == Enum.CellMaterial.CinderBlock or choice == 12 then return "Cinder Block" end + if choice == Enum.CellMaterial.MossyStone or choice == 13 then return "Stone Wall" end + if choice == Enum.CellMaterial.Cement or choice == 14 then return "Concrete" end + if choice == Enum.CellMaterial.RedPlastic or choice == 15 then return "Plastic (red)" end + if choice == Enum.CellMaterial.BluePlastic or choice == 16 then return "Plastic (blue)" end + + if waterEnabled then + if choice == Enum.CellMaterial.Water or choice == 17 then return "Water" end + end + end + + + local function updateMaterialChoice(choice) + currentMaterial = getEnumFromName(choice) + terrainMaterialSelectionChanged:Fire(currentMaterial) + end + + -- we so need a better way to do this + for i,v in pairs(materialNames) do + materialToImageMap[v] = {} + if v == "Grass" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=56563112" + elseif v == "Sand" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=62356652" + elseif v == "Brick" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=65961537" + elseif v == "Granite" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532153" + elseif v == "Asphalt" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532038" + elseif v == "Iron" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532093" + elseif v == "Aluminum" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67531995" + elseif v == "Gold" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532118" + elseif v == "Plastic (red)" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67531848" + elseif v == "Plastic (blue)" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67531924" + elseif v == "Plank" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532015" + elseif v == "Log" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532051" + elseif v == "Gravel" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532206" + elseif v == "Cinder Block" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532103" + elseif v == "Stone Wall" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67531804" + elseif v == "Concrete" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=67532059" + elseif v == "Water" then materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=81407474" + else materialToImageMap[v].Regular = "http://www.syntax.eco/asset/?id=66887593" -- fill in the rest here!! + end + end + + local scrollFrame, scrollUp, scrollDown, recalculateScroll = t.CreateScrollingFrame(nil,"grid") + scrollFrame.Size = UDim2.new(0.85,0,1,0) + scrollFrame.Position = UDim2.new(0,0,0,0) + scrollFrame.Parent = frame + + scrollUp.Parent = frame + scrollUp.Visible = true + scrollUp.Position = UDim2.new(1,-19,0,0) + + scrollDown.Parent = frame + scrollDown.Visible = true + scrollDown.Position = UDim2.new(1,-19,1,-17) + + local function goToNewMaterial(buttonWrap, materialName) + updateMaterialChoice(materialName) + buttonWrap.BackgroundTransparency = 0 + selectedButton.BackgroundTransparency = 1 + selectedButton = buttonWrap + end + + local function createMaterialButton(name) + local buttonWrap = Instance.new("TextButton") + buttonWrap.Text = "" + buttonWrap.Size = UDim2.new(0,32,0,32) + buttonWrap.BackgroundColor3 = Color3.new(1,1,1) + buttonWrap.BorderSizePixel = 0 + buttonWrap.BackgroundTransparency = 1 + buttonWrap.AutoButtonColor = false + buttonWrap.Name = tostring(name) + + local imageButton = Instance.new("ImageButton") + imageButton.AutoButtonColor = false + imageButton.BackgroundTransparency = 1 + imageButton.Size = UDim2.new(0,30,0,30) + imageButton.Position = UDim2.new(0,1,0,1) + imageButton.Name = tostring(name) + imageButton.Parent = buttonWrap + imageButton.Image = materialToImageMap[name].Regular + + local enumType = Instance.new("NumberValue") + enumType.Name = "EnumType" + enumType.Parent = buttonWrap + enumType.Value = 0 + + imageButton.MouseEnter:connect(function() + buttonWrap.BackgroundTransparency = 0 + end) + imageButton.MouseLeave:connect(function() + if selectedButton ~= buttonWrap then + buttonWrap.BackgroundTransparency = 1 + end + end) + imageButton.MouseButton1Click:connect(function() + if selectedButton ~= buttonWrap then + goToNewMaterial(buttonWrap, tostring(name)) + end + end) + + return buttonWrap + end + + for i = 1, #materialNames do + local imageButton = createMaterialButton(materialNames[i]) + + if materialNames[i] == "Grass" then -- always start with grass as the default + selectedButton = imageButton + imageButton.BackgroundTransparency = 0 + end + + imageButton.Parent = scrollFrame + end + + local forceTerrainMaterialSelection = function(newMaterialType) + if not newMaterialType then return end + if currentMaterial == newMaterialType then return end + + local matName = getNameFromEnum(newMaterialType) + local buttons = scrollFrame:GetChildren() + for i = 1, #buttons do + if buttons[i].Name == "Plastic (blue)" and matName == "Plastic (blue)" then goToNewMaterial(buttons[i],matName) return end + if buttons[i].Name == "Plastic (red)" and matName == "Plastic (red)" then goToNewMaterial(buttons[i],matName) return end + if string.find(buttons[i].Name, matName) then + goToNewMaterial(buttons[i],matName) + return + end + end + end + + frame.Changed:connect(function ( prop ) + if prop == "AbsoluteSize" then + recalculateScroll() + end + end) + + recalculateScroll() + return frame, terrainMaterialSelectionChanged, forceTerrainMaterialSelection +end + +t.CreateLoadingFrame = function(name,size,position) + game:GetService("ContentProvider"):Preload("http://www.syntax.eco/asset/?id=35238053") + + local loadingFrame = Instance.new("Frame") + loadingFrame.Name = "LoadingFrame" + loadingFrame.Style = Enum.FrameStyle.RobloxRound + + if size then loadingFrame.Size = size + else loadingFrame.Size = UDim2.new(0,300,0,160) end + if position then loadingFrame.Position = position + else loadingFrame.Position = UDim2.new(0.5, -150, 0.5,-80) end + + local loadingBar = Instance.new("Frame") + loadingBar.Name = "LoadingBar" + loadingBar.BackgroundColor3 = Color3.new(0,0,0) + loadingBar.BorderColor3 = Color3.new(79/255,79/255,79/255) + loadingBar.Position = UDim2.new(0,0,0,41) + loadingBar.Size = UDim2.new(1,0,0,30) + loadingBar.Parent = loadingFrame + + local loadingGreenBar = Instance.new("ImageLabel") + loadingGreenBar.Name = "LoadingGreenBar" + loadingGreenBar.Image = "http://www.syntax.eco/asset/?id=35238053" + loadingGreenBar.Position = UDim2.new(0,0,0,0) + loadingGreenBar.Size = UDim2.new(0,0,1,0) + loadingGreenBar.Visible = false + loadingGreenBar.Parent = loadingBar + + local loadingPercent = Instance.new("TextLabel") + loadingPercent.Name = "LoadingPercent" + loadingPercent.BackgroundTransparency = 1 + loadingPercent.Position = UDim2.new(0,0,1,0) + loadingPercent.Size = UDim2.new(1,0,0,14) + loadingPercent.Font = Enum.Font.Arial + loadingPercent.Text = "0%" + loadingPercent.FontSize = Enum.FontSize.Size14 + loadingPercent.TextColor3 = Color3.new(1,1,1) + loadingPercent.Parent = loadingBar + + local cancelButton = Instance.new("TextButton") + cancelButton.Name = "CancelButton" + cancelButton.Position = UDim2.new(0.5,-60,1,-40) + cancelButton.Size = UDim2.new(0,120,0,40) + cancelButton.Font = Enum.Font.Arial + cancelButton.FontSize = Enum.FontSize.Size18 + cancelButton.TextColor3 = Color3.new(1,1,1) + cancelButton.Text = "Cancel" + cancelButton.Style = Enum.ButtonStyle.RobloxButton + cancelButton.Parent = loadingFrame + + local loadingName = Instance.new("TextLabel") + loadingName.Name = "loadingName" + loadingName.BackgroundTransparency = 1 + loadingName.Size = UDim2.new(1,0,0,18) + loadingName.Position = UDim2.new(0,0,0,2) + loadingName.Font = Enum.Font.Arial + loadingName.Text = name + loadingName.TextColor3 = Color3.new(1,1,1) + loadingName.TextStrokeTransparency = 1 + loadingName.FontSize = Enum.FontSize.Size18 + loadingName.Parent = loadingFrame + + local cancelButtonClicked = Instance.new("BindableEvent") + cancelButtonClicked.Name = "CancelButtonClicked" + cancelButtonClicked.Parent = cancelButton + cancelButton.MouseButton1Click:connect(function() + cancelButtonClicked:Fire() + end) + + local updateLoadingGuiPercent = function(percent, tweenAction, tweenLength) + if percent and type(percent) ~= "number" then + error("updateLoadingGuiPercent expects number as argument, got",type(percent),"instead") + end + + local newSize = nil + if percent < 0 then + newSize = UDim2.new(0,0,1,0) + elseif percent > 1 then + newSize = UDim2.new(1,0,1,0) + else + newSize = UDim2.new(percent,0,1,0) + end + + if tweenAction then + if not tweenLength then + error("updateLoadingGuiPercent is set to tween new percentage, but got no tween time length! Please pass this in as third argument") + end + + if (newSize.X.Scale > 0) then + loadingGreenBar.Visible = true + loadingGreenBar:TweenSize( newSize, + Enum.EasingDirection.Out, + Enum.EasingStyle.Quad, + tweenLength, + true) + else + loadingGreenBar:TweenSize( newSize, + Enum.EasingDirection.Out, + Enum.EasingStyle.Quad, + tweenLength, + true, + function() + if (newSize.X.Scale < 0) then + loadingGreenBar.Visible = false + end + end) + end + + else + loadingGreenBar.Size = newSize + loadingGreenBar.Visible = (newSize.X.Scale > 0) + end + end + + loadingGreenBar.Changed:connect(function(prop) + if prop == "Size" then + loadingPercent.Text = tostring( math.ceil(loadingGreenBar.Size.X.Scale * 100) ) .. "%" + end + end) + + return loadingFrame, updateLoadingGuiPercent, cancelButtonClicked +end + +t.CreatePluginFrame = function (name,size,position,scrollable,parent) + function createMenuButton(size,position,text,fontsize,name,parent) + local button = Instance.new("TextButton",parent) + button.AutoButtonColor = false + button.Name = name + button.BackgroundTransparency = 1 + button.Position = position + button.Size = size + button.Font = Enum.Font.ArialBold + button.FontSize = fontsize + button.Text = text + button.TextColor3 = Color3.new(1,1,1) + button.BorderSizePixel = 0 + button.BackgroundColor3 = Color3.new(20/255,20/255,20/255) + + button.MouseEnter:connect(function ( ) + if button.Selected then return end + button.BackgroundTransparency = 0 + end) + button.MouseLeave:connect(function ( ) + if button.Selected then return end + button.BackgroundTransparency = 1 + end) + + return button + + end + + local dragBar = Instance.new("Frame",parent) + dragBar.Name = tostring(name) .. "DragBar" + dragBar.BackgroundColor3 = Color3.new(39/255,39/255,39/255) + dragBar.BorderColor3 = Color3.new(0,0,0) + if size then + dragBar.Size = UDim2.new(size.X.Scale,size.X.Offset,0,20) + UDim2.new(0,20,0,0) + else + dragBar.Size = UDim2.new(0,183,0,20) + end + if position then + dragBar.Position = position + end + dragBar.Active = true + dragBar.Draggable = true + --dragBar.Visible = false + dragBar.MouseEnter:connect(function ( ) + dragBar.BackgroundColor3 = Color3.new(49/255,49/255,49/255) + end) + dragBar.MouseLeave:connect(function ( ) + dragBar.BackgroundColor3 = Color3.new(39/255,39/255,39/255) + end) + + -- plugin name label + local pluginNameLabel = Instance.new("TextLabel",dragBar) + pluginNameLabel.Name = "BarNameLabel" + pluginNameLabel.Text = " " .. tostring(name) + pluginNameLabel.TextColor3 = Color3.new(1,1,1) + pluginNameLabel.TextStrokeTransparency = 0 + pluginNameLabel.Size = UDim2.new(1,0,1,0) + pluginNameLabel.Font = Enum.Font.ArialBold + pluginNameLabel.FontSize = Enum.FontSize.Size18 + pluginNameLabel.TextXAlignment = Enum.TextXAlignment.Left + pluginNameLabel.BackgroundTransparency = 1 + + -- close button + local closeButton = createMenuButton(UDim2.new(0,15,0,17),UDim2.new(1,-16,0.5,-8),"X",Enum.FontSize.Size14,"CloseButton",dragBar) + local closeEvent = Instance.new("BindableEvent") + closeEvent.Name = "CloseEvent" + closeEvent.Parent = closeButton + closeButton.MouseButton1Click:connect(function () + closeEvent:Fire() + closeButton.BackgroundTransparency = 1 + end) + + -- help button + local helpButton = createMenuButton(UDim2.new(0,15,0,17),UDim2.new(1,-51,0.5,-8),"?",Enum.FontSize.Size14,"HelpButton",dragBar) + local helpFrame = Instance.new("Frame",dragBar) + helpFrame.Name = "HelpFrame" + helpFrame.BackgroundColor3 = Color3.new(0,0,0) + helpFrame.Size = UDim2.new(0,300,0,552) + helpFrame.Position = UDim2.new(1,5,0,0) + helpFrame.Active = true + helpFrame.BorderSizePixel = 0 + helpFrame.Visible = false + + helpButton.MouseButton1Click:connect(function( ) + helpFrame.Visible = not helpFrame.Visible + if helpFrame.Visible then + helpButton.Selected = true + helpButton.BackgroundTransparency = 0 + local screenGui = getScreenGuiAncestor(helpFrame) + if screenGui then + if helpFrame.AbsolutePosition.X + helpFrame.AbsoluteSize.X > screenGui.AbsoluteSize.X then --position on left hand side + helpFrame.Position = UDim2.new(0,-5 - helpFrame.AbsoluteSize.X,0,0) + else -- position on right hand side + helpFrame.Position = UDim2.new(1,5,0,0) + end + else + helpFrame.Position = UDim2.new(1,5,0,0) + end + else + helpButton.Selected = false + helpButton.BackgroundTransparency = 1 + end + end) + + local minimizeButton = createMenuButton(UDim2.new(0,16,0,17),UDim2.new(1,-34,0.5,-8),"-",Enum.FontSize.Size14,"MinimizeButton",dragBar) + minimizeButton.TextYAlignment = Enum.TextYAlignment.Top + + local minimizeFrame = Instance.new("Frame",dragBar) + minimizeFrame.Name = "MinimizeFrame" + minimizeFrame.BackgroundColor3 = Color3.new(73/255,73/255,73/255) + minimizeFrame.BorderColor3 = Color3.new(0,0,0) + minimizeFrame.Position = UDim2.new(0,0,1,0) + if size then + minimizeFrame.Size = UDim2.new(size.X.Scale,size.X.Offset,0,50) + UDim2.new(0,20,0,0) + else + minimizeFrame.Size = UDim2.new(0,183,0,50) + end + minimizeFrame.Visible = false + + local minimizeBigButton = Instance.new("TextButton",minimizeFrame) + minimizeBigButton.Position = UDim2.new(0.5,-50,0.5,-20) + minimizeBigButton.Name = "MinimizeButton" + minimizeBigButton.Size = UDim2.new(0,100,0,40) + minimizeBigButton.Style = Enum.ButtonStyle.RobloxButton + minimizeBigButton.Font = Enum.Font.ArialBold + minimizeBigButton.FontSize = Enum.FontSize.Size18 + minimizeBigButton.TextColor3 = Color3.new(1,1,1) + minimizeBigButton.Text = "Show" + + local separatingLine = Instance.new("Frame",dragBar) + separatingLine.Name = "SeparatingLine" + separatingLine.BackgroundColor3 = Color3.new(115/255,115/255,115/255) + separatingLine.BorderSizePixel = 0 + separatingLine.Position = UDim2.new(1,-18,0.5,-7) + separatingLine.Size = UDim2.new(0,1,0,14) + + local otherSeparatingLine = separatingLine:clone() + otherSeparatingLine.Position = UDim2.new(1,-35,0.5,-7) + otherSeparatingLine.Parent = dragBar + + local widgetContainer = Instance.new("Frame",dragBar) + widgetContainer.Name = "WidgetContainer" + widgetContainer.BackgroundTransparency = 1 + widgetContainer.Position = UDim2.new(0,0,1,0) + widgetContainer.BorderColor3 = Color3.new(0,0,0) + if not scrollable then + widgetContainer.BackgroundTransparency = 0 + widgetContainer.BackgroundColor3 = Color3.new(72/255,72/255,72/255) + end + + if size then + if scrollable then + widgetContainer.Size = size + else + widgetContainer.Size = UDim2.new(0,dragBar.AbsoluteSize.X,size.Y.Scale,size.Y.Offset) + end + else + if scrollable then + widgetContainer.Size = UDim2.new(0,163,0,400) + else + widgetContainer.Size = UDim2.new(0,dragBar.AbsoluteSize.X,0,400) + end + end + if position then + widgetContainer.Position = position + UDim2.new(0,0,0,20) + end + + local frame,control,verticalDragger = nil + if scrollable then + --frame for widgets + frame,control = t.CreateTrueScrollingFrame() + frame.Size = UDim2.new(1, 0, 1, 0) + frame.BackgroundColor3 = Color3.new(72/255,72/255,72/255) + frame.BorderColor3 = Color3.new(0,0,0) + frame.Active = true + frame.Parent = widgetContainer + control.Parent = dragBar + control.BackgroundColor3 = Color3.new(72/255,72/255,72/255) + control.BorderSizePixel = 0 + control.BackgroundTransparency = 0 + control.Position = UDim2.new(1,-21,1,1) + if size then + control.Size = UDim2.new(0,21,size.Y.Scale,size.Y.Offset) + else + control.Size = UDim2.new(0,21,0,400) + end + control:FindFirstChild("ScrollDownButton").Position = UDim2.new(0,0,1,-20) + + local fakeLine = Instance.new("Frame",control) + fakeLine.Name = "FakeLine" + fakeLine.BorderSizePixel = 0 + fakeLine.BackgroundColor3 = Color3.new(0,0,0) + fakeLine.Size = UDim2.new(0,1,1,1) + fakeLine.Position = UDim2.new(1,0,0,0) + + verticalDragger = Instance.new("TextButton",widgetContainer) + verticalDragger.ZIndex = 2 + verticalDragger.AutoButtonColor = false + verticalDragger.Name = "VerticalDragger" + verticalDragger.BackgroundColor3 = Color3.new(50/255,50/255,50/255) + verticalDragger.BorderColor3 = Color3.new(0,0,0) + verticalDragger.Size = UDim2.new(1,20,0,20) + verticalDragger.Position = UDim2.new(0,0,1,0) + verticalDragger.Active = true + verticalDragger.Text = "" + + local scrubFrame = Instance.new("Frame",verticalDragger) + scrubFrame.Name = "ScrubFrame" + scrubFrame.BackgroundColor3 = Color3.new(1,1,1) + scrubFrame.BorderSizePixel = 0 + scrubFrame.Position = UDim2.new(0.5,-5,0.5,0) + scrubFrame.Size = UDim2.new(0,10,0,1) + scrubFrame.ZIndex = 5 + local scrubTwo = scrubFrame:clone() + scrubTwo.Position = UDim2.new(0.5,-5,0.5,-2) + scrubTwo.Parent = verticalDragger + local scrubThree = scrubFrame:clone() + scrubThree.Position = UDim2.new(0.5,-5,0.5,2) + scrubThree.Parent = verticalDragger + + local areaSoak = Instance.new("TextButton",getScreenGuiAncestor(parent)) + areaSoak.Name = "AreaSoak" + areaSoak.Size = UDim2.new(1,0,1,0) + areaSoak.BackgroundTransparency = 1 + areaSoak.BorderSizePixel = 0 + areaSoak.Text = "" + areaSoak.ZIndex = 10 + areaSoak.Visible = false + areaSoak.Active = true + + local draggingVertical = false + local startYPos = nil + verticalDragger.MouseEnter:connect(function () + verticalDragger.BackgroundColor3 = Color3.new(60/255,60/255,60/255) + end) + verticalDragger.MouseLeave:connect(function () + verticalDragger.BackgroundColor3 = Color3.new(50/255,50/255,50/255) + end) + verticalDragger.MouseButton1Down:connect(function(x,y) + draggingVertical = true + areaSoak.Visible = true + startYPos = y + end) + areaSoak.MouseButton1Up:connect(function ( ) + draggingVertical = false + areaSoak.Visible = false + end) + areaSoak.MouseMoved:connect(function(x,y) + if not draggingVertical then return end + + local yDelta = y - startYPos + if not control.ScrollDownButton.Visible and yDelta > 0 then + return + end + + if (widgetContainer.Size.Y.Offset + yDelta) < 150 then + widgetContainer.Size = UDim2.new(widgetContainer.Size.X.Scale, widgetContainer.Size.X.Offset,widgetContainer.Size.Y.Scale,150) + control.Size = UDim2.new (0,21,0,150) + return + end + + startYPos = y + + if widgetContainer.Size.Y.Offset + yDelta >= 0 then + widgetContainer.Size = UDim2.new(widgetContainer.Size.X.Scale, widgetContainer.Size.X.Offset,widgetContainer.Size.Y.Scale,widgetContainer.Size.Y.Offset + yDelta) + control.Size = UDim2.new(0,21,0,control.Size.Y.Offset + yDelta ) + end + end) + end + + local function switchMinimize() + minimizeFrame.Visible = not minimizeFrame.Visible + if scrollable then + frame.Visible = not frame.Visible + verticalDragger.Visible = not verticalDragger.Visible + control.Visible = not control.Visible + else + widgetContainer.Visible = not widgetContainer.Visible + end + + if minimizeFrame.Visible then + minimizeButton.Text = "+" + else + minimizeButton.Text = "-" + end + end + + minimizeBigButton.MouseButton1Click:connect(function ( ) + switchMinimize() + end) + + minimizeButton.MouseButton1Click:connect(function( ) + switchMinimize() + end) + + if scrollable then + return dragBar, frame, helpFrame, closeEvent + else + return dragBar, widgetContainer, helpFrame, closeEvent + end +end + +t.Help = + function(funcNameOrFunc) + --input argument can be a string or a function. Should return a description (of arguments and expected side effects) + if funcNameOrFunc == "CreatePropertyDropDownMenu" or funcNameOrFunc == t.CreatePropertyDropDownMenu then + return "Function CreatePropertyDropDownMenu. " .. + "Arguments: (instance, propertyName, enumType). " .. + "Side effect: returns a container with a drop-down-box that is linked to the 'property' field of 'instance' which is of type 'enumType'" + end + if funcNameOrFunc == "CreateDropDownMenu" or funcNameOrFunc == t.CreateDropDownMenu then + return "Function CreateDropDownMenu. " .. + "Arguments: (items, onItemSelected). " .. + "Side effect: Returns 2 results, a container to the gui object and a 'updateSelection' function for external updating. The container is a drop-down-box created around a list of items" + end + if funcNameOrFunc == "CreateMessageDialog" or funcNameOrFunc == t.CreateMessageDialog then + return "Function CreateMessageDialog. " .. + "Arguments: (title, message, buttons). " .. + "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button" + end + if funcNameOrFunc == "CreateStyledMessageDialog" or funcNameOrFunc == t.CreateStyledMessageDialog then + return "Function CreateStyledMessageDialog. " .. + "Arguments: (title, message, style, buttons). " .. + "Side effect: Returns a gui object of a message box with 'title' and 'message' as passed in. 'buttons' input is an array of Tables contains a 'Text' and 'Function' field for the text/callback of each button, 'style' is a string, either Error, Notify or Confirm" + end + if funcNameOrFunc == "GetFontHeight" or funcNameOrFunc == t.GetFontHeight then + return "Function GetFontHeight. " .. + "Arguments: (font, fontSize). " .. + "Side effect: returns the size in pixels of the given font + fontSize" + end + if funcNameOrFunc == "LayoutGuiObjects" or funcNameOrFunc == t.LayoutGuiObjects then + + end + if funcNameOrFunc == "CreateScrollingFrame" or funcNameOrFunc == t.CreateScrollingFrame then + return "Function CreateScrollingFrame. " .. + "Arguments: (orderList, style) " .. + "Side effect: returns 4 objects, (scrollFrame, scrollUpButton, scrollDownButton, recalculateFunction). 'scrollFrame' can be filled with GuiObjects. It will lay them out and allow scrollUpButton/scrollDownButton to interact with them. Orderlist is optional (and specifies the order to layout the children. Without orderlist, it uses the children order. style is also optional, and allows for a 'grid' styling if style is passed 'grid' as a string. recalculateFunction can be called when a relayout is needed (when orderList changes)" + end + if funcNameOrFunc == "CreateTrueScrollingFrame" or funcNameOrFunc == t.CreateTrueScrollingFrame then + return "Function CreateTrueScrollingFrame. " .. + "Arguments: (nil) " .. + "Side effect: returns 2 objects, (scrollFrame, controlFrame). 'scrollFrame' can be filled with GuiObjects, and they will be clipped if not inside the frame's bounds. controlFrame has children scrollup and scrolldown, as well as a slider. controlFrame can be parented to any guiobject and it will readjust itself to fit." + end + if funcNameOrFunc == "AutoTruncateTextObject" or funcNameOrFunc == t.AutoTruncateTextObject then + return "Function AutoTruncateTextObject. " .. + "Arguments: (textLabel) " .. + "Side effect: returns 2 objects, (textLabel, changeText). The 'textLabel' input is modified to automatically truncate text (with ellipsis), if it gets too small to fit. 'changeText' is a function that can be used to change the text, it takes 1 string as an argument" + end + if funcNameOrFunc == "CreateSlider" or funcNameOrFunc == t.CreateSlider then + return "Function CreateSlider. " .. + "Arguments: (steps, width, position) " .. + "Side effect: returns 2 objects, (sliderGui, sliderPosition). The 'steps' argument specifies how many different positions the slider can hold along the bar. 'width' specifies in pixels how wide the bar should be (modifiable afterwards if desired). 'position' argument should be a UDim2 for slider positioning. 'sliderPosition' is an IntValue whose current .Value specifies the specific step the slider is currently on." + end + if funcNameOrFunc == "CreateLoadingFrame" or funcNameOrFunc == t.CreateLoadingFrame then + return "Function CreateLoadingFrame. " .. + "Arguments: (name, size, position) " .. + "Side effect: Creates a gui that can be manipulated to show progress for a particular action. Name appears above the loading bar, and size and position are udim2 values (both size and position are optional arguments). Returns 3 arguments, the first being the gui created. The second being updateLoadingGuiPercent, which is a bindable function. This function takes one argument (two optionally), which should be a number between 0 and 1, representing the percentage the loading gui should be at. The second argument to this function is a boolean value that if set to true will tween the current percentage value to the new percentage value, therefore our third argument is how long this tween should take. Our third returned argument is a BindableEvent, that when fired means that someone clicked the cancel button on the dialog." + end + if funcNameOrFunc == "CreateTerrainMaterialSelector" or funcNameOrFunc == t.CreateTerrainMaterialSelector then + return "Function CreateTerrainMaterialSelector. " .. + "Arguments: (size, position) " .. + "Side effect: Size and position are UDim2 values that specifies the selector's size and position. Both size and position are optional arguments. This method returns 3 objects (terrainSelectorGui, terrainSelected, forceTerrainSelection). terrainSelectorGui is just the gui object that we generate with this function, parent it as you like. TerrainSelected is a BindableEvent that is fired whenever a new terrain type is selected in the gui. ForceTerrainSelection is a function that takes an argument of Enum.CellMaterial and will force the gui to show that material as currently selected." + end + end + +return t \ No newline at end of file diff --git a/app/files/CoreGui/45374389 b/app/files/CoreGui/45374389 new file mode 100644 index 0000000..51592b8 --- /dev/null +++ b/app/files/CoreGui/45374389 @@ -0,0 +1,23 @@ +local t = {} + +t.Foo = + function() + print("foo") + end + +t.Bar = + function() + print("bar") + end + +t.Help = + function(funcNameOrFunc) + --input argument can be a string or a function. Should return a description (of arguments and expected side effects) + if funcNameOrFunc == "Foo" or funcNameOrFunc == t.Foo then + return "Function Foo. Arguments: None. Side effect: prints foo" + elseif funcNameOrFunc == "Bar" or funcNameOrFunc == t.Bar then + return "Function Bar. Arguments: None. Side effect: prints bar" + end + end + +return t \ No newline at end of file diff --git a/app/files/CoreGui/46295863 b/app/files/CoreGui/46295863 new file mode 100644 index 0000000..487c77f --- /dev/null +++ b/app/files/CoreGui/46295863 @@ -0,0 +1,2153 @@ +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +--Include +local Create = assert(LoadLibrary("RbxUtility")).Create + +--FFlags +local FFlagExists, FFlagValue = pcall(function () return settings():GetFFlag("LoggingConsoleEnabled") end) +local FFlagLogginConsoleEnabled = FFlagExists and FFlagValue + +-- A Few Script Globals +local gui +if script.Parent:FindFirstChild("ControlFrame") then + gui = script.Parent:FindFirstChild("ControlFrame") +else + gui = script.Parent +end + +local helpButton = nil +local updateCameraDropDownSelection = nil +local updateVideoCaptureDropDownSelection = nil +local tweenTime = 0.2 + +local mouseLockLookScreenUrl = "http://www.syntax.eco/asset?id=54071825" +local classicLookScreenUrl = "http://www.syntax.eco/Asset?id=45915798" + +local hasGraphicsSlider = (game:GetService("CoreGui").Version >= 5) +local GraphicsQualityLevels = 10 -- how many levels we allow on graphics slider +local recordingVideo = false + +local currentMenuSelection = nil +local lastMenuSelection = {} + +local defaultPosition = UDim2.new(0,0,0,0) +local newGuiPlaces = {0,41324860} + +local centerDialogs = {} +local mainShield = nil + +local inStudioMode = UserSettings().GameSettings:InStudioMode() + +local macClient = false +local success, isMac = pcall(function() return not game.GuiService.IsWindows end) +macClient = success and isMac + +local function Color3I(r,g,b) + return Color3.new(r/255,g/255,b/255) +end + +local function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resumeGameFunction(shield) + shield.Settings:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + delay(tweenTime,function() + shield.Visible = false + for i = 1, #centerDialogs do + centerDialogs[i].Visible = false + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + end + game.GuiService:RemoveCenterDialog(shield) + settingsButton.Active = true + currentMenuSelection = nil + lastMenuSelection = {} + end) +end + +function goToMenu(container,menuName, moveDirection,size,position) + if type(menuName) ~= "string" then return end + + table.insert(lastMenuSelection,currentMenuSelection) + if menuName == "GameMainMenu" then + lastMenuSelection = {} + end + + local containerChildren = container:GetChildren() + local selectedMenu = false + for i = 1, #containerChildren do + if containerChildren[i].Name == menuName then + containerChildren[i].Visible = true + currentMenuSelection = {container = container,name = menuName, direction = moveDirection, lastSize = size} + selectedMenu = true + if size and position then + containerChildren[i]:TweenSizeAndPosition(size,position,Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif size then + containerChildren[i]:TweenSizeAndPosition(size,UDim2.new(0.5,-size.X.Offset/2,0.5,-size.Y.Offset/2),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + else + containerChildren[i]:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end + else + if moveDirection == "left" then + containerChildren[i]:TweenPosition(UDim2.new(-1,-525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "right" then + containerChildren[i]:TweenPosition(UDim2.new(1,525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "up" then + containerChildren[i]:TweenPosition(UDim2.new(0,0,-1,-400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "down" then + containerChildren[i]:TweenPosition(UDim2.new(0,0,1,400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end + delay(tweenTime,function() + containerChildren[i].Visible = false + end) + end + end +end + +function resetLocalCharacter() + local player = game.Players.LocalPlayer + if player then + if player.Character and player.Character:FindFirstChild("Humanoid") then + player.Character.Humanoid.Health = 0 + end + end +end + +local function createTextButton(text,style,fontSize,buttonSize,buttonPosition) + local newTextButton = Instance.new("TextButton") + newTextButton.Font = Enum.Font.Arial + newTextButton.FontSize = fontSize + newTextButton.Size = buttonSize + newTextButton.Position = buttonPosition + newTextButton.Style = style + newTextButton.TextColor3 = Color3.new(1,1,1) + newTextButton.Text = text + return newTextButton +end + +local function CreateTextButtons(frame, buttons, yPos, ySize) + if #buttons < 1 then + error("Must have more than one button") + end + + local buttonNum = 1 + local buttonObjs = {} + + local function toggleSelection(button) + for i, obj in ipairs(buttonObjs) do + if obj == button then + obj.Style = Enum.ButtonStyle.RobloxButtonDefault + else + obj.Style = Enum.ButtonStyle.RobloxButton + end + end + end + + for i, obj in ipairs(buttons) do + local button = Instance.new("TextButton") + button.Name = "Button" .. buttonNum + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size18 + button.AutoButtonColor = true + button.Style = Enum.ButtonStyle.RobloxButton + button.Text = obj.Text + button.TextColor3 = Color3.new(1,1,1) + button.MouseButton1Click:connect(function() toggleSelection(button) obj.Function() end) + button.Parent = frame + button.ZIndex = 4 + buttonObjs[buttonNum] = button + + buttonNum = buttonNum + 1 + end + + toggleSelection(buttonObjs[1]) + + local numButtons = buttonNum-1 + + if numButtons == 1 then + frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) + elseif numButtons == 2 then + frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + + frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) + frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + elseif numButtons >= 3 then + local spacing = .1 / numButtons + local buttonSize = .9 / numButtons + + buttonNum = 1 + while buttonNum <= numButtons do + buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) + buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) + buttonNum = buttonNum + 1 + end + end +end + +function setRecordGui(recording, stopRecordButton, recordVideoButton) + if recording then + stopRecordButton.Visible = true + recordVideoButton.Text = "Stop Recording" + else + stopRecordButton.Visible = false + recordVideoButton.Text = "Record Video" + end +end + +function recordVideoClick(recordVideoButton, stopRecordButton) + recordingVideo = not recordingVideo + setRecordGui(recordingVideo, stopRecordButton, recordVideoButton) +end + +local currentlyToggling = false; +local DevConsoleToggle = nil; + +delay(0, function() + DevConsoleToggle = gui:WaitForChild("ToggleDevConsole") +end) + +function toggleDeveloperConsole() + if not DevConsoleToggle then + return + end + + DevConsoleToggle:Invoke() +end + +function backToGame(buttonClicked, shield, settingsButton) + buttonClicked.Parent.Parent.Parent.Parent.Visible = false + shield.Visible = false + for i = 1, #centerDialogs do + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + centerDialogs[i].Visible = false + end + centerDialogs = {} + game.GuiService:RemoveCenterDialog(shield) + settingsButton.Active = true +end + +function setDisabledState(guiObject) + if not guiObject then return end + + if guiObject:IsA("TextLabel") then + guiObject.TextTransparency = 0.9 + elseif guiObject:IsA("TextButton") then + guiObject.TextTransparency = 0.9 + guiObject.Active = false + else + if guiObject["ClassName"] then + print("setDisabledState() got object of unsupported type. object type is ",guiObject.ClassName) + end + end +end + +local function createHelpDialog(baseZIndex) + + if helpButton == nil then + if gui:FindFirstChild("TopLeftControl") and gui.TopLeftControl:FindFirstChild("Help") then + helpButton = gui.TopLeftControl.Help + elseif gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("Help") then + helpButton = gui.BottomRightControl.Help + end + end + + local shield = Instance.new("Frame") + shield.Name = "HelpDialogShield" + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 2 + + local helpDialog = Instance.new("Frame") + helpDialog.Name = "HelpDialog" + helpDialog.Style = Enum.FrameStyle.RobloxRound + helpDialog.Position = UDim2.new(.2, 0, .2, 0) + helpDialog.Size = UDim2.new(0.6, 0, 0.6, 0) + helpDialog.Active = true + helpDialog.Parent = shield + helpDialog.ZIndex = baseZIndex + 2 + + local titleLabel = Instance.new("TextLabel") + titleLabel.Name = "Title" + titleLabel.Text = "Keyboard & Mouse Controls" + titleLabel.Font = Enum.Font.ArialBold + titleLabel.FontSize = Enum.FontSize.Size36 + titleLabel.Position = UDim2.new(0, 0, 0.025, 0) + titleLabel.Size = UDim2.new(1, 0, 0, 40) + titleLabel.TextColor3 = Color3.new(1,1,1) + titleLabel.BackgroundTransparency = 1 + titleLabel.Parent = helpDialog + titleLabel.ZIndex = baseZIndex + 2 + + local buttonRow = Instance.new("Frame") + buttonRow.Name = "Buttons" + buttonRow.Position = UDim2.new(0.1, 0, .07, 40) + buttonRow.Size = UDim2.new(0.8, 0, 0, 45) + buttonRow.BackgroundTransparency = 1 + buttonRow.Parent = helpDialog + buttonRow.ZIndex = baseZIndex + 2 + + local imageFrame = Instance.new("Frame") + imageFrame.Name = "ImageFrame" + imageFrame.Position = UDim2.new(0.05, 0, 0.075, 80) + imageFrame.Size = UDim2.new(0.9, 0, .9, -120) + imageFrame.BackgroundTransparency = 1 + imageFrame.Parent = helpDialog + imageFrame.ZIndex = baseZIndex + 2 + + local layoutFrame = Instance.new("Frame") + layoutFrame.Name = "LayoutFrame" + layoutFrame.Position = UDim2.new(0.5, 0, 0, 0) + layoutFrame.Size = UDim2.new(1.5, 0, 1, 0) + layoutFrame.BackgroundTransparency = 1 + layoutFrame.SizeConstraint = Enum.SizeConstraint.RelativeYY + layoutFrame.Parent = imageFrame + layoutFrame.ZIndex = baseZIndex + 2 + + local image = Instance.new("ImageLabel") + image.Name = "Image" + if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + image.Image = mouseLockLookScreenUrl + else + image.Image = classicLookScreenUrl + end + image.Position = UDim2.new(-0.5, 0, 0, 0) + image.Size = UDim2.new(1, 0, 1, 0) + image.BackgroundTransparency = 1 + image.Parent = layoutFrame + image.ZIndex = baseZIndex + 2 + + local buttons = {} + buttons[1] = {} + buttons[1].Text = "Look" + buttons[1].Function = function() + if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + image.Image = mouseLockLookScreenUrl + else + image.Image = classicLookScreenUrl + end + end + buttons[2] = {} + buttons[2].Text = "Move" + buttons[2].Function = function() + image.Image = "http://www.syntax.eco/Asset?id=45915811" + end + buttons[3] = {} + buttons[3].Text = "Gear" + buttons[3].Function = function() + image.Image = "http://www.syntax.eco/Asset?id=45917596" + end + buttons[4] = {} + buttons[4].Text = "Zoom" + buttons[4].Function = function() + image.Image = "http://www.syntax.eco/Asset?id=45915825" + end + + CreateTextButtons(buttonRow, buttons, UDim.new(0, 0), UDim.new(1,0)) + + if FFlagLogginConsoleEnabled then + local devConsoleButton = Create'TextButton'{ + Name = "DeveloperConsoleButton"; + Text = "Log"; + Size = UDim2.new(0,60,0,30); + Style = Enum.ButtonStyle.RobloxButton; + Position = UDim2.new(1,-65,1,-35); + Font = Enum.Font.Arial; + FontSize = Enum.FontSize.Size18; + TextColor3 = Color3.new(1,1,1); + ZIndex = baseZIndex + 4; + BackgroundTransparency = 1; + Parent = helpDialog; + } + + Create'TextLabel'{ + Name = "DeveloperConsoleButton"; + Text = "F9"; + Size = UDim2.new(0,14,0,14); + Position = UDim2.new(1,-6,0, 0); + Font = Enum.Font.Arial; + FontSize = Enum.FontSize.Size12; + TextColor3 = Color3.new(0,1,0); + ZIndex = baseZIndex + 4; + BackgroundTransparency = 1; + Parent = devConsoleButton; + } + + waitForProperty(game.Players, "LocalPlayer") + game.Players.LocalPlayer:GetMouse().KeyDown:connect(function(key) + if string.byte(key) == 34 then --F9 + toggleDeveloperConsole() + end + end) + + devConsoleButton.MouseButton1Click:connect(function() + toggleDeveloperConsole() + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end) + end + + + + -- set up listeners for type of mouse mode, but keep constructing gui at same time + delay(0, function() + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield,"Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameSettingsMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu, "CameraField") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField, "DropDownMenuButton") + gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Changed:connect(function(prop) + if prop ~= "Text" then return end + if buttonRow.Button1.Style == Enum.ButtonStyle.RobloxButtonDefault then -- only change if this is the currently selected panel + if gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Text == "Classic" then + image.Image = classicLookScreenUrl + else + image.Image = mouseLockLookScreenUrl + end + end + end) + end) + + + local okBtn = Instance.new("TextButton") + okBtn.Name = "OkBtn" + okBtn.Text = "OK" + okBtn.Modal = true + okBtn.Size = UDim2.new(0.3, 0, 0, 45) + okBtn.Position = UDim2.new(0.35, 0, .975, -50) + okBtn.Font = Enum.Font.Arial + okBtn.FontSize = Enum.FontSize.Size18 + okBtn.BackgroundTransparency = 1 + okBtn.TextColor3 = Color3.new(1,1,1) + okBtn.Style = Enum.ButtonStyle.RobloxButtonDefault + okBtn.ZIndex = baseZIndex + 2 + okBtn.MouseButton1Click:connect( + function() + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end) + okBtn.Parent = helpDialog + + robloxLock(shield) + return shield +end + +local function createLeaveConfirmationMenu(baseZIndex,shield) + local frame = Instance.new("Frame") + frame.Name = "LeaveConfirmationMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + frame.Position = UDim2.new(0,0,2,400) + frame.ZIndex = baseZIndex + 4 + + local yesButton = createTextButton("Leave",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0.8,0)) + yesButton.Name = "YesButton" + yesButton.ZIndex = baseZIndex + 4 + yesButton.Parent = frame + yesButton.Modal = true + yesButton:SetVerb("Exit") + + local noButton = createTextButton("Stay",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0.8,0)) + noButton.Name = "NoButton" + noButton.Parent = frame + noButton.ZIndex = baseZIndex + 4 + noButton.MouseButton1Click:connect(function() + goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) + shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end) + + local leaveText = Instance.new("TextLabel") + leaveText.Name = "LeaveText" + leaveText.Text = "Leave this game?" + leaveText.Size = UDim2.new(1,0,0.8,0) + leaveText.TextWrap = true + leaveText.TextColor3 = Color3.new(1,1,1) + leaveText.Font = Enum.Font.ArialBold + leaveText.FontSize = Enum.FontSize.Size36 + leaveText.BackgroundTransparency = 1 + leaveText.ZIndex = baseZIndex + 4 + leaveText.Parent = frame + + return frame +end + +local function createResetConfirmationMenu(baseZIndex,shield) + local frame = Instance.new("Frame") + frame.Name = "ResetConfirmationMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + frame.Position = UDim2.new(0,0,2,400) + frame.ZIndex = baseZIndex + 4 + + local yesButton = createTextButton("Reset",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0,299)) + yesButton.Name = "YesButton" + yesButton.ZIndex = baseZIndex + 4 + yesButton.Parent = frame + yesButton.Modal = true + yesButton.MouseButton1Click:connect(function() + resumeGameFunction(shield) + resetLocalCharacter() + end) + + local noButton = createTextButton("Cancel",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0,299)) + noButton.Name = "NoButton" + noButton.Parent = frame + noButton.ZIndex = baseZIndex + 4 + noButton.MouseButton1Click:connect(function() + goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) + shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end) + + local resetCharacterText = Instance.new("TextLabel") + resetCharacterText.Name = "ResetCharacterText" + resetCharacterText.Text = "Are you sure you want to reset your character?" + resetCharacterText.Size = UDim2.new(1,0,0.8,0) + resetCharacterText.TextWrap = true + resetCharacterText.TextColor3 = Color3.new(1,1,1) + resetCharacterText.Font = Enum.Font.ArialBold + resetCharacterText.FontSize = Enum.FontSize.Size36 + resetCharacterText.BackgroundTransparency = 1 + resetCharacterText.ZIndex = baseZIndex + 4 + resetCharacterText.Parent = frame + + local fineResetCharacterText = resetCharacterText:Clone() + fineResetCharacterText.Name = "FineResetCharacterText" + fineResetCharacterText.Text = "You will be put back on a spawn point" + fineResetCharacterText.Size = UDim2.new(0,303,0,18) + fineResetCharacterText.Position = UDim2.new(0, 109, 0, 215) + fineResetCharacterText.FontSize = Enum.FontSize.Size18 + fineResetCharacterText.Parent = frame + + return frame +end + +local function createGameMainMenu(baseZIndex, shield) + local gameMainMenuFrame = Instance.new("Frame") + gameMainMenuFrame.Name = "GameMainMenu" + gameMainMenuFrame.BackgroundTransparency = 1 + gameMainMenuFrame.Size = UDim2.new(1,0,1,0) + gameMainMenuFrame.ZIndex = baseZIndex + 4 + gameMainMenuFrame.Parent = settingsFrame + + -- GameMainMenu Children + + local gameMainMenuTitle = Instance.new("TextLabel") + gameMainMenuTitle.Name = "Title" + gameMainMenuTitle.Text = "Game Menu" + gameMainMenuTitle.BackgroundTransparency = 1 + gameMainMenuTitle.TextStrokeTransparency = 0 + gameMainMenuTitle.Font = Enum.Font.ArialBold + gameMainMenuTitle.FontSize = Enum.FontSize.Size36 + gameMainMenuTitle.Size = UDim2.new(1,0,0,36) + gameMainMenuTitle.Position = UDim2.new(0,0,0,4) + gameMainMenuTitle.TextColor3 = Color3.new(1,1,1) + gameMainMenuTitle.ZIndex = baseZIndex + 4 + gameMainMenuTitle.Parent = gameMainMenuFrame + + local robloxHelpButton = createTextButton("Help",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,256)) + robloxHelpButton.Name = "HelpButton" + robloxHelpButton.ZIndex = baseZIndex + 4 + robloxHelpButton.Parent = gameMainMenuFrame + helpButton = robloxHelpButton + + local helpDialog = createHelpDialog(baseZIndex) + helpDialog.Parent = gui + + helpButton.MouseButton1Click:connect( + function() + table.insert(centerDialogs,helpDialog) + game.GuiService:AddCenterDialog(helpDialog, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + helpDialog.Visible = true + mainShield.Visible = false + end, + --HideFunction + function() + helpDialog.Visible = false + end) + end) + helpButton.Active = true + + local helpShortcut = Instance.new("TextLabel") + helpShortcut.Name = "HelpShortcutText" + helpShortcut.Text = "F1" + helpShortcut.Visible = false + helpShortcut.BackgroundTransparency = 1 + helpShortcut.Font = Enum.Font.Arial + helpShortcut.FontSize = Enum.FontSize.Size12 + helpShortcut.Position = UDim2.new(0,85,0,0) + helpShortcut.Size = UDim2.new(0,30,0,30) + helpShortcut.TextColor3 = Color3.new(0,1,0) + helpShortcut.ZIndex = baseZIndex + 4 + helpShortcut.Parent = robloxHelpButton + + local screenshotButton = createTextButton("Screenshot",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,256)) + screenshotButton.Name = "ScreenshotButton" + screenshotButton.ZIndex = baseZIndex + 4 + screenshotButton.Parent = gameMainMenuFrame + screenshotButton.Visible = not macClient + screenshotButton:SetVerb("Screenshot") + + local screenshotShortcut = helpShortcut:clone() + screenshotShortcut.Name = "ScreenshotShortcutText" + screenshotShortcut.Text = "PrintSc" + screenshotShortcut.Position = UDim2.new(0,118,0,0) + screenshotShortcut.Visible = true + screenshotShortcut.Parent = screenshotButton + + + local recordVideoButton = createTextButton("Record Video",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,306)) + recordVideoButton.Name = "RecordVideoButton" + recordVideoButton.ZIndex = baseZIndex + 4 + recordVideoButton.Parent = gameMainMenuFrame + recordVideoButton.Visible = not macClient + recordVideoButton:SetVerb("RecordToggle") + + local recordVideoShortcut = helpShortcut:clone() + recordVideoShortcut.Visible = hasGraphicsSlider + recordVideoShortcut.Name = "RecordVideoShortcutText" + recordVideoShortcut.Text = "F12" + recordVideoShortcut.Position = UDim2.new(0,120,0,0) + recordVideoShortcut.Parent = recordVideoButton + + local stopRecordButton = Instance.new("ImageButton") + stopRecordButton.Name = "StopRecordButton" + stopRecordButton.BackgroundTransparency = 1 + stopRecordButton.Image = "rbxasset://textures/ui/RecordStop.png" + stopRecordButton.Size = UDim2.new(0,59,0,27) + stopRecordButton:SetVerb("RecordToggle") + + stopRecordButton.MouseButton1Click:connect(function() recordVideoClick(recordVideoButton, stopRecordButton) end) + stopRecordButton.Visible = false + stopRecordButton.Parent = gui + + local reportAbuseButton = createTextButton("Report Abuse",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,306)) + reportAbuseButton.Name = "ReportAbuseButton" + reportAbuseButton.ZIndex = baseZIndex + 4 + reportAbuseButton.Parent = gameMainMenuFrame + + local leaveGameButton = createTextButton("Leave Game",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,358)) + leaveGameButton.Name = "LeaveGameButton" + leaveGameButton.ZIndex = baseZIndex + 4 + leaveGameButton.Parent = gameMainMenuFrame + + local resumeGameButton = createTextButton("Resume Game",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,54)) + resumeGameButton.Name = "resumeGameButton" + resumeGameButton.ZIndex = baseZIndex + 4 + resumeGameButton.Parent = gameMainMenuFrame + resumeGameButton.Modal = true + resumeGameButton.MouseButton1Click:connect(function() resumeGameFunction(shield) end) + + local gameSettingsButton = createTextButton("Game Settings",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,156)) + gameSettingsButton.Name = "SettingsButton" + gameSettingsButton.ZIndex = baseZIndex + 4 + gameSettingsButton.Parent = gameMainMenuFrame + + if game:FindFirstChild("LoadingGuiService") and #game.LoadingGuiService:GetChildren() > 0 then + local gameSettingsButton = createTextButton("Game Instructions",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,207)) + gameSettingsButton.Name = "GameInstructions" + gameSettingsButton.ZIndex = baseZIndex + 4 + gameSettingsButton.Parent = gameMainMenuFrame + gameSettingsButton.MouseButton1Click:connect(function() + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local loadingGui = game.Players.LocalPlayer:FindFirstChild("PlayerLoadingGui") + if loadingGui then + loadingGui.Visible = true + end + end + end) + end + + local resetButton = createTextButton("Reset Character",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,105)) + resetButton.Name = "ResetButton" + resetButton.ZIndex = baseZIndex + 4 + resetButton.Parent = gameMainMenuFrame + + return gameMainMenuFrame +end + +local function createGameSettingsMenu(baseZIndex, shield) + local gameSettingsMenuFrame = Instance.new("Frame") + gameSettingsMenuFrame.Name = "GameSettingsMenu" + gameSettingsMenuFrame.BackgroundTransparency = 1 + gameSettingsMenuFrame.Size = UDim2.new(1,0,1,0) + gameSettingsMenuFrame.ZIndex = baseZIndex + 4 + + local title = Instance.new("TextLabel") + title.Name = "Title" + title.Text = "Settings" + title.Size = UDim2.new(1,0,0,48) + title.Position = UDim2.new(0,9,0,-9) + title.Font = Enum.Font.ArialBold + title.FontSize = Enum.FontSize.Size36 + title.TextColor3 = Color3.new(1,1,1) + title.ZIndex = baseZIndex + 4 + title.BackgroundTransparency = 1 + title.Parent = gameSettingsMenuFrame + + local fullscreenText = Instance.new("TextLabel") + fullscreenText.Name = "FullscreenText" + fullscreenText.Text = "Fullscreen Mode" + fullscreenText.Size = UDim2.new(0,124,0,18) + fullscreenText.Position = UDim2.new(0,62,0,145) + fullscreenText.Font = Enum.Font.Arial + fullscreenText.FontSize = Enum.FontSize.Size18 + fullscreenText.TextColor3 = Color3.new(1,1,1) + fullscreenText.ZIndex = baseZIndex + 4 + fullscreenText.BackgroundTransparency = 1 + fullscreenText.Parent = gameSettingsMenuFrame + + local fullscreenShortcut = Instance.new("TextLabel") + fullscreenShortcut.Visible = hasGraphicsSlider + fullscreenShortcut.Name = "FullscreenShortcutText" + fullscreenShortcut.Text = "F11" + fullscreenShortcut.BackgroundTransparency = 1 + fullscreenShortcut.Font = Enum.Font.Arial + fullscreenShortcut.FontSize = Enum.FontSize.Size12 + fullscreenShortcut.Position = UDim2.new(0,186,0,141) + fullscreenShortcut.Size = UDim2.new(0,30,0,30) + fullscreenShortcut.TextColor3 = Color3.new(0,1,0) + fullscreenShortcut.ZIndex = baseZIndex + 4 + fullscreenShortcut.Parent = gameSettingsMenuFrame + + local studioText = Instance.new("TextLabel") + studioText.Visible = false + studioText.Name = "StudioText" + studioText.Text = "Studio Mode" + studioText.Size = UDim2.new(0,95,0,18) + studioText.Position = UDim2.new(0,62,0,179) + studioText.Font = Enum.Font.Arial + studioText.FontSize = Enum.FontSize.Size18 + studioText.TextColor3 = Color3.new(1,1,1) + studioText.ZIndex = baseZIndex + 4 + studioText.BackgroundTransparency = 1 + studioText.Parent = gameSettingsMenuFrame + + local studioShortcut = fullscreenShortcut:clone() + studioShortcut.Name = "StudioShortcutText" + studioShortcut.Visible = false -- TODO: turn back on when f2 hack is fixed + studioShortcut.Text = "F2" + studioShortcut.Position = UDim2.new(0,154,0,175) + studioShortcut.Parent = gameSettingsMenuFrame + + local studioCheckbox = nil + + if hasGraphicsSlider then + local qualityText = Instance.new("TextLabel") + qualityText.Name = "QualityText" + qualityText.Text = "Graphics Quality" + qualityText.Size = UDim2.new(0,128,0,18) + qualityText.Position = UDim2.new(0,30,0,239) + qualityText.Font = Enum.Font.Arial + qualityText.FontSize = Enum.FontSize.Size18 + qualityText.TextColor3 = Color3.new(1,1,1) + qualityText.ZIndex = baseZIndex + 4 + qualityText.BackgroundTransparency = 1 + qualityText.Parent = gameSettingsMenuFrame + qualityText.Visible = not inStudioMode + + local autoText = qualityText:clone() + autoText.Name = "AutoText" + autoText.Text = "Auto" + autoText.Position = UDim2.new(0,183,0,214) + autoText.TextColor3 = Color3.new(128/255,128/255,128/255) + autoText.Size = UDim2.new(0,34,0,18) + autoText.Parent = gameSettingsMenuFrame + autoText.Visible = not inStudioMode + + local fasterText = autoText:clone() + fasterText.Name = "FasterText" + fasterText.Text = "Faster" + fasterText.Position = UDim2.new(0,185,0,274) + fasterText.TextColor3 = Color3.new(95,95,95) + fasterText.FontSize = Enum.FontSize.Size14 + fasterText.Parent = gameSettingsMenuFrame + fasterText.Visible = not inStudioMode + + local fasterShortcut = fullscreenShortcut:clone() + fasterShortcut.Name = "FasterShortcutText" + fasterShortcut.Text = "F10 + Shift" + fasterShortcut.Position = UDim2.new(0,185,0,283) + fasterShortcut.Parent = gameSettingsMenuFrame + fasterShortcut.Visible = not inStudioMode + + local betterQualityText = autoText:clone() + betterQualityText.Name = "BetterQualityText" + betterQualityText.Text = "Better Quality" + betterQualityText.TextWrap = true + betterQualityText.Size = UDim2.new(0,41,0,28) + betterQualityText.Position = UDim2.new(0,390,0,269) + betterQualityText.TextColor3 = Color3.new(95,95,95) + betterQualityText.FontSize = Enum.FontSize.Size14 + betterQualityText.Parent = gameSettingsMenuFrame + betterQualityText.Visible = not inStudioMode + + local betterQualityShortcut = fullscreenShortcut:clone() + betterQualityShortcut.Name = "BetterQualityShortcut" + betterQualityShortcut.Text = "F10" + betterQualityShortcut.Position = UDim2.new(0,394,0,288) + betterQualityShortcut.Parent = gameSettingsMenuFrame + betterQualityShortcut.Visible = not inStudioMode + + local autoGraphicsButton = createTextButton("X",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,187,0,239)) + autoGraphicsButton.Name = "AutoGraphicsButton" + autoGraphicsButton.ZIndex = baseZIndex + 4 + autoGraphicsButton.Parent = gameSettingsMenuFrame + autoGraphicsButton.Visible = not inStudioMode + + local graphicsSlider, graphicsLevel = RbxGui.CreateSlider(GraphicsQualityLevels,150,UDim2.new(0, 230, 0, 280)) -- graphics - 1 because slider starts at 1 instead of 0 + graphicsSlider.Parent = gameSettingsMenuFrame + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + graphicsSlider.Visible = not inStudioMode + graphicsLevel.Value = math.floor((settings().Rendering:GetMaxQualityLevel() - 1)/2) + + local graphicsSetter = Instance.new("TextBox") + graphicsSetter.Name = "GraphicsSetter" + graphicsSetter.BackgroundColor3 = Color3.new(0,0,0) + graphicsSetter.BorderColor3 = Color3.new(128/255,128/255,128/255) + graphicsSetter.Size = UDim2.new(0,50,0,25) + graphicsSetter.Position = UDim2.new(0,450,0,269) + graphicsSetter.TextColor3 = Color3.new(1,1,1) + graphicsSetter.Font = Enum.Font.Arial + graphicsSetter.FontSize = Enum.FontSize.Size18 + graphicsSetter.Text = "Auto" + graphicsSetter.ZIndex = 1 + graphicsSetter.TextWrap = true + graphicsSetter.Parent = gameSettingsMenuFrame + graphicsSetter.Visible = not inStudioMode + + local isAutoGraphics = true + if not inStudioMode then + isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) + else + settings().Rendering.EnableFRM = false + end + + local listenToGraphicsLevelChange = true + + local function setAutoGraphicsGui(active) + isAutoGraphics = active + if active then + autoGraphicsButton.Text = "X" + betterQualityText.ZIndex = 1 + betterQualityShortcut.ZIndex = 1 + fasterShortcut.ZIndex = 1 + fasterText.ZIndex = 1 + graphicsSlider.Bar.ZIndex = 1 + graphicsSlider.Bar.Slider.ZIndex = 1 + graphicsSetter.ZIndex = 1 + graphicsSetter.Text = "Auto" + else + autoGraphicsButton.Text = "" + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + betterQualityShortcut.ZIndex = baseZIndex + 4 + fasterShortcut.ZIndex = baseZIndex + 4 + betterQualityText.ZIndex = baseZIndex + 4 + fasterText.ZIndex = baseZIndex + 4 + graphicsSetter.ZIndex = baseZIndex + 4 + end + end + + local function goToAutoGraphics() + setAutoGraphicsGui(true) + + UserSettings().GameSettings.SavedQualityLevel = Enum.SavedQualitySetting.Automatic + + settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic + end + + local function setGraphicsQualityLevel(newLevel) + local percentage = newLevel/GraphicsQualityLevels + local newSetting = math.floor((settings().Rendering:GetMaxQualityLevel() - 1) * percentage) + if newSetting == 20 then -- Level 20 is the same as level 21, except it doesn't render ambient occlusion + newSetting = 21 + elseif newLevel == 1 then -- make sure we can go to lowest settings (for terrible computers) + newSetting = 1 + elseif newSetting > settings().Rendering:GetMaxQualityLevel() then + newSetting = settings().Rendering:GetMaxQualityLevel() - 1 + end + + UserSettings().GameSettings.SavedQualityLevel = newLevel + settings().Rendering.QualityLevel = newSetting + end + + local function goToManualGraphics(explicitLevel) + setAutoGraphicsGui(false) + + if explicitLevel then + graphicsLevel.Value = explicitLevel + else + graphicsLevel.Value = math.floor((settings().Rendering.AutoFRMLevel/(settings().Rendering:GetMaxQualityLevel() - 1)) * GraphicsQualityLevels) + end + + if explicitLevel == graphicsLevel.Value then -- make sure we are actually in right graphics mode + setGraphicsQualityLevel(graphicsLevel.Value) + end + + if not explicitLevel then + UserSettings().GameSettings.SavedQualityLevel = graphicsLevel.Value + end + graphicsSetter.Text = tostring(graphicsLevel.Value) + end + + local function showAutoGraphics() + autoText.ZIndex = baseZIndex + 4 + autoGraphicsButton.ZIndex = baseZIndex + 4 + end + + local function hideAutoGraphics() + autoText.ZIndex = 1 + autoGraphicsButton.ZIndex = 1 + end + + local function showManualGraphics() + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + betterQualityShortcut.ZIndex = baseZIndex + 4 + fasterShortcut.ZIndex = baseZIndex + 4 + betterQualityText.ZIndex = baseZIndex + 4 + fasterText.ZIndex = baseZIndex + 4 + graphicsSetter.ZIndex = baseZIndex + 4 + end + + local function hideManualGraphics() + betterQualityText.ZIndex = 1 + betterQualityShortcut.ZIndex = 1 + fasterShortcut.ZIndex = 1 + fasterText.ZIndex = 1 + graphicsSlider.Bar.ZIndex = 1 + graphicsSlider.Bar.Slider.ZIndex = 1 + graphicsSetter.ZIndex = 1 + end + + local function translateSavedQualityLevelToInt(savedQualityLevel) + if savedQualityLevel == Enum.SavedQualitySetting.Automatic then + return 0 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel1 then + return 1 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel2 then + return 2 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel3 then + return 3 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel4 then + return 4 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel5 then + return 5 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel6 then + return 6 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel7 then + return 7 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel8 then + return 8 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel9 then + return 9 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel10 then + return 10 + end + end + + local function enableGraphicsWidget() + settings().Rendering.EnableFRM = true + + isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) + if isAutoGraphics then + showAutoGraphics() + goToAutoGraphics() + else + showAutoGraphics() + showManualGraphics() + goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) + end + end + + local function disableGraphicsWidget() + hideManualGraphics() + hideAutoGraphics() + settings().Rendering.EnableFRM = false + end + + graphicsSetter.FocusLost:connect(function() + if isAutoGraphics then + graphicsSetter.Text = tostring(graphicsLevel.Value) + return + end + + local newGraphicsValue = tonumber(graphicsSetter.Text) + if newGraphicsValue == nil then + graphicsSetter.Text = tostring(graphicsLevel.Value) + return + end + + if newGraphicsValue < 1 then newGraphicsValue = 1 + elseif newGraphicsValue >= settings().Rendering:GetMaxQualityLevel() then + newGraphicsValue = settings().Rendering:GetMaxQualityLevel() - 1 + end + + graphicsLevel.Value = newGraphicsValue + setGraphicsQualityLevel(graphicsLevel.Value) + graphicsSetter.Text = tostring(graphicsLevel.Value) + end) + + graphicsLevel.Changed:connect(function(prop) + if isAutoGraphics then return end + if not listenToGraphicsLevelChange then return end + + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + end) + + -- setup our graphic mode on load + if inStudioMode or UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic then + if inStudioMode then + settings().Rendering.EnableFRM = false + disableGraphicsWidget() + else + settings().Rendering.EnableFRM = true + goToAutoGraphics() + end + else + settings().Rendering.EnableFRM = true + goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) + end + + autoGraphicsButton.MouseButton1Click:connect(function() + if inStudioMode and not game.Players.LocalPlayer then return end + + if not isAutoGraphics then + goToAutoGraphics() + else + goToManualGraphics(graphicsLevel.Value) + end + end) + + local lastUpdate = nil + game.GraphicsQualityChangeRequest:connect(function(graphicsIncrease) + if isAutoGraphics then return end -- only can set graphics in manual mode + + if graphicsIncrease then + if (graphicsLevel.Value + 1) > GraphicsQualityLevels then return end + graphicsLevel.Value = graphicsLevel.Value + 1 + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + + game:GetService("GuiService"):SendNotification("Graphics Quality", + "Increased to (" .. graphicsSetter.Text .. ")", + "", + 2, + function() + end) + else + if (graphicsLevel.Value - 1) <= 0 then return end + graphicsLevel.Value = graphicsLevel.Value - 1 + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + + game:GetService("GuiService"):SendNotification("Graphics Quality", + "Decreased to (" .. graphicsSetter.Text .. ")", + "", + 2, + function() + end) + end + end) + + game.Players.PlayerAdded:connect(function(player) + if player == game.Players.LocalPlayer and inStudioMode then + enableGraphicsWidget() + end + end) + game.Players.PlayerRemoving:connect(function(player) + if player == game.Players.LocalPlayer and inStudioMode then + disableGraphicsWidget() + end + end) + + studioCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,176)) + studioCheckbox.Name = "StudioCheckbox" + studioCheckbox.ZIndex = baseZIndex + 4 + --studioCheckbox.Parent = gameSettingsMenuFrame -- todo: enable when studio h4x aren't an issue anymore + studioCheckbox:SetVerb("TogglePlayMode") + studioCheckbox.Visible = false -- todo: enabled when studio h4x aren't an issue anymore + + local wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) + if inStudioMode and not game.Players.LocalPlayer then + studioCheckbox.Text = "X" + disableGraphicsWidget() + elseif inStudioMode then + studioCheckbox.Text = "X" + enableGraphicsWidget() + end + if hasGraphicsSlider then + UserSettings().GameSettings.StudioModeChanged:connect(function(isStudioMode) + inStudioMode = isStudioMode + if isStudioMode then + wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) + goToAutoGraphics() + studioCheckbox.Text = "X" + autoGraphicsButton.ZIndex = 1 + autoText.ZIndex = 1 + else + if wasManualGraphics then + goToManualGraphics() + end + studioCheckbox.Text = "" + autoGraphicsButton.ZIndex = baseZIndex + 4 + autoText.ZIndex = baseZIndex + 4 + end + end) + else + studioCheckbox.MouseButton1Click:connect(function() + if not studioCheckbox.Active then return end + + if studioCheckbox.Text == "" then + studioCheckbox.Text = "X" + else + studioCheckbox.Text = "" + end + end) + end + end + + local fullscreenCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,144)) + fullscreenCheckbox.Name = "FullscreenCheckbox" + fullscreenCheckbox.ZIndex = baseZIndex + 4 + fullscreenCheckbox.Parent = gameSettingsMenuFrame + fullscreenCheckbox:SetVerb("ToggleFullScreen") + if UserSettings().GameSettings:InFullScreen() then fullscreenCheckbox.Text = "X" end + if hasGraphicsSlider then + UserSettings().GameSettings.FullscreenChanged:connect(function(isFullscreen) + if isFullscreen then + fullscreenCheckbox.Text = "X" + else + fullscreenCheckbox.Text = "" + end + end) + else + fullscreenCheckbox.MouseButton1Click:connect(function() + if fullscreenCheckbox.Text == "" then + fullscreenCheckbox.Text = "X" + else + fullscreenCheckbox.Text = "" + end + end) + end + + if game:FindFirstChild("NetworkClient") then -- we are playing online + setDisabledState(studioText) + setDisabledState(studioShortcut) + setDisabledState(studioCheckbox) + end + + local backButton + if hasGraphicsSlider then + backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,330)) + backButton.Modal = true + else + backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,270)) + backButton.Modal = true + end + + backButton.Name = "BackButton" + backButton.ZIndex = baseZIndex + 4 + backButton.Parent = gameSettingsMenuFrame + + local syncVideoCaptureSetting = nil + + if not macClient then + local videoCaptureLabel = Instance.new("TextLabel") + videoCaptureLabel.Name = "VideoCaptureLabel" + videoCaptureLabel.Text = "After Capturing Video" + videoCaptureLabel.Font = Enum.Font.Arial + videoCaptureLabel.FontSize = Enum.FontSize.Size18 + videoCaptureLabel.Position = UDim2.new(0,32,0,100) + videoCaptureLabel.Size = UDim2.new(0,164,0,18) + videoCaptureLabel.BackgroundTransparency = 1 + videoCaptureLabel.TextColor3 = Color3I(255,255,255) + videoCaptureLabel.TextXAlignment = Enum.TextXAlignment.Left + videoCaptureLabel.ZIndex = baseZIndex + 4 + videoCaptureLabel.Parent = gameSettingsMenuFrame + + local videoNames = {} + local videoNameToItem = {} + videoNames[1] = "Just Save to Disk" + videoNameToItem[videoNames[1]] = Enum.UploadSetting["Never"] + videoNames[2] = "Upload to YouTube" + videoNameToItem[videoNames[2]] = Enum.UploadSetting["Ask me first"] + + local videoCaptureDropDown = nil + videoCaptureDropDown, updateVideoCaptureDropDownSelection = RbxGui.CreateDropDownMenu(videoNames, + function(text) + UserSettings().GameSettings.VideoUploadPromptBehavior = videoNameToItem[text] + end) + videoCaptureDropDown.Name = "VideoCaptureField" + videoCaptureDropDown.ZIndex = baseZIndex + 4 + videoCaptureDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 + videoCaptureDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 + videoCaptureDropDown.Position = UDim2.new(0, 270, 0, 94) + videoCaptureDropDown.Size = UDim2.new(0,200,0,32) + videoCaptureDropDown.Parent = gameSettingsMenuFrame + + syncVideoCaptureSetting = function() + if UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] then + updateVideoCaptureDropDownSelection(videoNames[1]) + elseif UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] then + updateVideoCaptureDropDownSelection(videoNames[2]) + else + UserSettings().GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"] + updateVideoCaptureDropDownSelection(videoNames[2]) + end + end + end + + local cameraLabel = Instance.new("TextLabel") + cameraLabel.Name = "CameraLabel" + cameraLabel.Text = "Character & Camera Controls" + cameraLabel.Font = Enum.Font.Arial + cameraLabel.FontSize = Enum.FontSize.Size18 + cameraLabel.Position = UDim2.new(0,31,0,58) + cameraLabel.Size = UDim2.new(0,224,0,18) + cameraLabel.TextColor3 = Color3I(255,255,255) + cameraLabel.TextXAlignment = Enum.TextXAlignment.Left + cameraLabel.BackgroundTransparency = 1 + cameraLabel.ZIndex = baseZIndex + 4 + cameraLabel.Parent = gameSettingsMenuFrame + + local mouseLockLabel = game.CoreGui.RobloxGui:FindFirstChild("MouseLockLabel",true) + + local enumItems = Enum.ControlMode:GetEnumItems() + local enumNames = {} + local enumNameToItem = {} + for i,obj in ipairs(enumItems) do + enumNames[i] = obj.Name + enumNameToItem[obj.Name] = obj + end + + local cameraDropDown + cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu(enumNames, + function(text) + UserSettings().GameSettings.ControlMode = enumNameToItem[text] + + pcall(function() + if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + mouseLockLabel.Visible = true + elseif mouseLockLabel then + mouseLockLabel.Visible = false + end + end) + end) + cameraDropDown.Name = "CameraField" + cameraDropDown.ZIndex = baseZIndex + 4 + cameraDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 + cameraDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 + cameraDropDown.Position = UDim2.new(0, 270, 0, 52) + cameraDropDown.Size = UDim2.new(0,200,0,32) + cameraDropDown.Parent = gameSettingsMenuFrame + + return gameSettingsMenuFrame +end + +if LoadLibrary then + RbxGui = LoadLibrary("RbxGui") + local baseZIndex = 0 +if UserSettings then + + local createSettingsDialog = function() + waitForChild(gui,"BottomLeftControl") + settingsButton = gui.BottomLeftControl:FindFirstChild("SettingsButton") + + if settingsButton == nil then + settingsButton = Instance.new("ImageButton") + settingsButton.Name = "SettingsButton" + settingsButton.Image = "rbxasset://textures/ui/SettingsButton.png" + settingsButton.BackgroundTransparency = 1 + settingsButton.Active = false + settingsButton.Size = UDim2.new(0,54,0,46) + settingsButton.Position = UDim2.new(0,2,0,50) + settingsButton.Parent = gui.BottomLeftControl + end + + local shield = Instance.new("TextButton") + shield.Text = "" + shield.Name = "UserSettingsShield" + shield.Active = true + shield.AutoButtonColor = false + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 2 + mainShield = shield + + local frame = Instance.new("Frame") + frame.Name = "Settings" + frame.Position = UDim2.new(0.5, -262, -0.5, -200) + frame.Size = UDim2.new(0, 525, 0, 430) + frame.BackgroundTransparency = 1 + frame.Active = true + frame.Parent = shield + + local settingsFrame = Instance.new("Frame") + settingsFrame.Name = "SettingsStyle" + settingsFrame.Size = UDim2.new(1, 0, 1, 0) + settingsFrame.Style = Enum.FrameStyle.RobloxRound + settingsFrame.Active = true + settingsFrame.ZIndex = baseZIndex + 3 + settingsFrame.Parent = frame + + local gameMainMenu = createGameMainMenu(baseZIndex, shield) + gameMainMenu.Parent = settingsFrame + + gameMainMenu.ScreenshotButton.MouseButton1Click:connect(function() + backToGame(gameMainMenu.ScreenshotButton, shield, settingsButton) + end) + + gameMainMenu.RecordVideoButton.MouseButton1Click:connect(function() + recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) + backToGame(gameMainMenu.RecordVideoButton, shield, settingsButton) + end) + + if settings():FindFirstChild("Game Options") then + pcall(function() + settings():FindFirstChild("Game Options").VideoRecordingChangeRequest:connect(function(recording) + recordingVideo = recording + setRecordGui(recording, gui.StopRecordButton, gameMainMenu.RecordVideoButton) + end) + end) + end + + game.CoreGui.RobloxGui.Changed:connect(function(prop) -- We have stopped recording when we resize + if prop == "AbsoluteSize" and recordingVideo then + recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) + end + end) + + function localPlayerChange() + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + if game.Players.LocalPlayer then + settings().Rendering.EnableFRM = true + elseif inStudioMode then + settings().Rendering.EnableFRM = false + end + end + + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + if game.Players.LocalPlayer ~= nil then + game.Players.LocalPlayer.Changed:connect(function() + localPlayerChange() + end) + else + delay(0,function() + waitForProperty(game.Players,"LocalPlayer") + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + game.Players.LocalPlayer.Changed:connect(function() + localPlayerChange() + end) + end) + end + + gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") + if not gameMainMenu.ReportAbuseButton.Visible then + game.ChildAdded:connect(function(child) + if child:IsA("NetworkClient") then + gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") + end + end) + end + + gameMainMenu.ResetButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"ResetConfirmationMenu","up",UDim2.new(0,525,0,370)) + end) + + gameMainMenu.LeaveGameButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"LeaveConfirmationMenu","down",UDim2.new(0,525,0,300)) + end) + + if game.CoreGui.Version >= 4 then -- we can use escape! + game:GetService("GuiService").EscapeKeyPressed:connect(function() + if currentMenuSelection == nil then + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --showFunction + function() + settingsButton.Active = false + updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) + + if syncVideoCaptureSetting then + syncVideoCaptureSetting() + end + + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + shield.Visible = true + shield.Active = true + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end, + --hideFunction + function() + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + shield.Visible = false + settingsButton.Active = true + end) + elseif #lastMenuSelection > 0 then + if #centerDialogs > 0 then + for i = 1, #centerDialogs do + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + centerDialogs[i].Visible = false + end + centerDialogs = {} + end + + goToMenu(lastMenuSelection[#lastMenuSelection]["container"],lastMenuSelection[#lastMenuSelection]["name"], + lastMenuSelection[#lastMenuSelection]["direction"],lastMenuSelection[#lastMenuSelection]["lastSize"]) + + table.remove(lastMenuSelection,#lastMenuSelection) + if #lastMenuSelection == 1 then -- apparently lua can't reduce count to 0... T_T + lastMenuSelection = {} + end + else + resumeGameFunction(shield) + end + end) + end + + local gameSettingsMenu = createGameSettingsMenu(baseZIndex, shield) + gameSettingsMenu.Visible = false + gameSettingsMenu.Parent = settingsFrame + + gameMainMenu.SettingsButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"GameSettingsMenu","left",UDim2.new(0,525,0,350)) + end) + + gameSettingsMenu.BackButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + end) + + local resetConfirmationWindow = createResetConfirmationMenu(baseZIndex, shield) + resetConfirmationWindow.Visible = false + resetConfirmationWindow.Parent = settingsFrame + + local leaveConfirmationWindow = createLeaveConfirmationMenu(baseZIndex,shield) + leaveConfirmationWindow.Visible = false + leaveConfirmationWindow.Parent = settingsFrame + + robloxLock(shield) + + settingsButton.MouseButton1Click:connect( + function() + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --showFunction + function() + settingsButton.Active = false + updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) + + if syncVideoCaptureSetting then + syncVideoCaptureSetting() + end + + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + shield.Visible = true + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end, + --hideFunction + function() + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + shield.Visible = false + settingsButton.Active = true + end) + end) + + return shield + end + + delay(0, function() + createSettingsDialog().Parent = gui + + gui.BottomLeftControl.SettingsButton.Active = true + gui.BottomLeftControl.SettingsButton.Position = UDim2.new(0,2,0,-2) + + if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + mouseLockLabel.Visible = true + elseif mouseLockLabel then + mouseLockLabel.Visible = false + end + + -- our script has loaded, get rid of older buttons now + local leaveGameButton = gui.BottomLeftControl:FindFirstChild("Exit") + if leaveGameButton then leaveGameButton:Remove() end + + local topLeft = gui:FindFirstChild("TopLeftControl") + if topLeft then + leaveGameButton = topLeft:FindFirstChild("Exit") + if leaveGameButton then leaveGameButton:Remove() end + + topLeft:Remove() + end + end) + +end --UserSettings call + +local createSaveDialogs = function() + local shield = Instance.new("TextButton") + shield.Text = "" + shield.AutoButtonColor = false + shield.Name = "SaveDialogShield" + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex+1 + + local clearAndResetDialog + local save + local saveLocal + local dontSave + local cancel + + local messageBoxButtons = {} + messageBoxButtons[1] = {} + messageBoxButtons[1].Text = "Save" + messageBoxButtons[1].Style = Enum.ButtonStyle.RobloxButtonDefault + messageBoxButtons[1].Function = function() save() end + messageBoxButtons[2] = {} + messageBoxButtons[2].Text = "Cancel" + messageBoxButtons[2].Function = function() cancel() end + messageBoxButtons[3] = {} + messageBoxButtons[3].Text = "Don't Save" + messageBoxButtons[3].Function = function() dontSave() end + + local saveDialogMessageBox = RbxGui.CreateStyledMessageDialog("Unsaved Changes", "Save your changes to ROBLOX before leaving?", "Confirm", messageBoxButtons) + saveDialogMessageBox.Visible = true + saveDialogMessageBox.Parent = shield + + + local errorBoxButtons = {} + + local buttonOffset = 1 + if game.LocalSaveEnabled then + errorBoxButtons[buttonOffset] = {} + errorBoxButtons[buttonOffset].Text = "Save to Disk" + errorBoxButtons[buttonOffset].Function = function() saveLocal() end + buttonOffset = buttonOffset + 1 + end + errorBoxButtons[buttonOffset] = {} + errorBoxButtons[buttonOffset].Text = "Keep Playing" + errorBoxButtons[buttonOffset].Function = function() cancel() end + errorBoxButtons[buttonOffset+1] = {} + errorBoxButtons[buttonOffset+1].Text = "Don't Save" + errorBoxButtons[buttonOffset+1].Function = function() dontSave() end + + local errorDialogMessageBox = RbxGui.CreateStyledMessageDialog("Upload Failed", "Sorry, we could not save your changes to ROBLOX. If this problem continues to occur, please make sure your Roblox account has a verified email address.", "Error", errorBoxButtons) + errorDialogMessageBox.Visible = false + errorDialogMessageBox.Parent = shield + + local spinnerDialog = Instance.new("Frame") + spinnerDialog.Name = "SpinnerDialog" + spinnerDialog.Style = Enum.FrameStyle.RobloxRound + spinnerDialog.Size = UDim2.new(0, 350, 0, 150) + spinnerDialog.Position = UDim2.new(.5, -175, .5, -75) + spinnerDialog.Visible = false + spinnerDialog.Active = true + spinnerDialog.Parent = shield + + local waitingLabel = Instance.new("TextLabel") + waitingLabel.Name = "WaitingLabel" + waitingLabel.Text = "Saving to ROBLOX..." + waitingLabel.Font = Enum.Font.ArialBold + waitingLabel.FontSize = Enum.FontSize.Size18 + waitingLabel.Position = UDim2.new(0.5, 25, 0.5, 0) + waitingLabel.TextColor3 = Color3.new(1,1,1) + waitingLabel.Parent = spinnerDialog + + local spinnerFrame = Instance.new("Frame") + spinnerFrame.Name = "Spinner" + spinnerFrame.Size = UDim2.new(0, 80, 0, 80) + spinnerFrame.Position = UDim2.new(0.5, -150, 0.5, -40) + spinnerFrame.BackgroundTransparency = 1 + spinnerFrame.Parent = spinnerDialog + + local spinnerIcons = {} + local spinnerNum = 1 + while spinnerNum <= 8 do + local spinnerImage = Instance.new("ImageLabel") + spinnerImage.Name = "Spinner"..spinnerNum + spinnerImage.Size = UDim2.new(0, 16, 0, 16) + spinnerImage.Position = UDim2.new(.5+.3*math.cos(math.rad(45*spinnerNum)), -8, .5+.3*math.sin(math.rad(45*spinnerNum)), -8) + spinnerImage.BackgroundTransparency = 1 + spinnerImage.Image = "http://www.syntax.eco/Asset?id=45880710" + spinnerImage.Parent = spinnerFrame + + spinnerIcons[spinnerNum] = spinnerImage + spinnerNum = spinnerNum + 1 + end + + save = function() + saveDialogMessageBox.Visible = false + + --Show the spinner dialog + spinnerDialog.Visible = true + local spin = true + --Make it spin + delay(0, function() + local spinPos = 0 + while spin do + local pos = 0 + + while pos < 8 do + if pos == spinPos or pos == ((spinPos+1)%8) then + spinnerIcons[pos+1].Image = "http://www.syntax.eco/Asset?id=45880668" + else + spinnerIcons[pos+1].Image = "http://www.syntax.eco/Asset?id=45880710" + end + + pos = pos + 1 + end + spinPos = (spinPos + 1) % 8 + wait(0.2) + end + end) + + --Do the save while the spinner is going, function will wait + local result = game:SaveToRoblox() + if not result then + --Try once more + result = game:SaveToRoblox() + end + + --Hide the spinner dialog + spinnerDialog.Visible = false + --And cause the delay thread to stop + spin = false + + --Now process the result + if result then + --Success, close + game:FinishShutdown(false) + clearAndResetDialog() + else + --Failure, show the second dialog prompt + errorDialogMessageBox.Visible = true + end + end + + saveLocal = function() + errorDialogMessageBox.Visible = false + game:FinishShutdown(true) + clearAndResetDialog() + end + + dontSave = function() + saveDialogMessageBox.Visible = false + errorDialogMessageBox.Visible = false + game:FinishShutdown(false) + clearAndResetDialog() + end + cancel = function() + saveDialogMessageBox.Visible = false + errorDialogMessageBox.Visible = false + clearAndResetDialog() + end + + clearAndResetDialog = function() + saveDialogMessageBox.Visible = true + errorDialogMessageBox.Visible = false + spinnerDialog.Visible = false + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end + + robloxLock(shield) + shield.Visible = false + return shield +end + +local createReportAbuseDialog = function() + --Only show things if we are a NetworkClient + waitForChild(game,"NetworkClient") + + waitForChild(game,"Players") + waitForProperty(game.Players, "LocalPlayer") + local localPlayer = game.Players.LocalPlayer + + local reportAbuseButton + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield, "Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") + reportAbuseButton = gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton + + local shield = Instance.new("TextButton") + shield.Name = "ReportAbuseShield" + shield.Text = "" + shield.AutoButtonColor = false + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 1 + + local closeAndResetDialgo + + local messageBoxButtons = {} + messageBoxButtons[1] = {} + messageBoxButtons[1].Text = "Ok" + messageBoxButtons[1].Modal = true + messageBoxButtons[1].Function = function() closeAndResetDialog() end + local calmingMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats", messageBoxButtons) + calmingMessageBox.Visible = false + calmingMessageBox.Parent = shield + + local recordedMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!","We've recorded your report for evaluation.", messageBoxButtons) + recordedMessageBox.Visible = false + recordedMessageBox.Parent = shield + + local normalMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened.", messageBoxButtons) + normalMessageBox.Visible = false + normalMessageBox.Parent = shield + + local frame = Instance.new("Frame") + frame.Name = "Settings" + frame.Position = UDim2.new(0.5, -250, 0.5, -200) + frame.Size = UDim2.new(0.0, 500, 0.0, 400) + frame.BackgroundTransparency = 1 + frame.Active = true + frame.Parent = shield + + local settingsFrame = Instance.new("Frame") + settingsFrame.Name = "ReportAbuseStyle" + settingsFrame.Size = UDim2.new(1, 0, 1, 0) + settingsFrame.Style = Enum.FrameStyle.RobloxRound + settingsFrame.Active = true + settingsFrame.ZIndex = baseZIndex + 1 + settingsFrame.Parent = frame + + local title = Instance.new("TextLabel") + title.Name = "Title" + title.Text = "Report Abuse" + title.TextColor3 = Color3I(221,221,221) + title.Position = UDim2.new(0.5, 0, 0, 25) + title.Font = Enum.Font.SourceSansBold + title.FontSize = Enum.FontSize.Size48 + title.ZIndex = baseZIndex + 2 + title.Parent = settingsFrame + + local description = Instance.new("TextLabel") + description.Name = "Description" + description.Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action." + description.TextColor3 = Color3I(221,221,221) + description.Position = UDim2.new(0, 0, 0, 55) + description.Size = UDim2.new(1, 0, 0, 40) + description.BackgroundTransparency = 1 + description.Font = Enum.Font.SourceSans + description.FontSize = Enum.FontSize.Size18 + description.TextWrap = true + description.ZIndex = baseZIndex + 2 + description.TextXAlignment = Enum.TextXAlignment.Left + description.TextYAlignment = Enum.TextYAlignment.Top + description.Parent = settingsFrame + + local playerLabel = Instance.new("TextLabel") + playerLabel.Name = "PlayerLabel" + playerLabel.Text = "Which player?" + playerLabel.BackgroundTransparency = 1 + playerLabel.Font = Enum.Font.SourceSans + playerLabel.FontSize = Enum.FontSize.Size18 + playerLabel.Position = UDim2.new(0.025,20,0,137) + playerLabel.Size = UDim2.new(0.4,0,0,36) + playerLabel.TextColor3 = Color3I(255,255,255) + playerLabel.TextXAlignment = Enum.TextXAlignment.Left + playerLabel.ZIndex = baseZIndex + 2 + playerLabel.Parent = settingsFrame + + local gameOrPlayerLabel = Instance.new("TextLabel") + gameOrPlayerLabel.Name = "TypeLabel" + gameOrPlayerLabel.Text = "Game or Player:" + gameOrPlayerLabel.BackgroundTransparency = 1 + gameOrPlayerLabel.Font = Enum.Font.SourceSans + gameOrPlayerLabel.FontSize = Enum.FontSize.Size18 + gameOrPlayerLabel.Position = UDim2.new(0.025,20,0,100) + gameOrPlayerLabel.Size = UDim2.new(0.4,0,0,36) + gameOrPlayerLabel.TextColor3 = Color3I(255,255,255) + gameOrPlayerLabel.TextXAlignment = Enum.TextXAlignment.Left + gameOrPlayerLabel.ZIndex = baseZIndex + 2 + gameOrPlayerLabel.Parent = settingsFrame + + local abuseLabel = Instance.new("TextLabel") + abuseLabel.Name = "AbuseLabel" + abuseLabel.Text = "Type of Abuse:" + abuseLabel.Font = Enum.Font.SourceSans + abuseLabel.BackgroundTransparency = 1 + abuseLabel.FontSize = Enum.FontSize.Size18 + abuseLabel.Position = UDim2.new(0.025,20,0,176) + abuseLabel.Size = UDim2.new(0.4,0,0,36) + abuseLabel.TextColor3 = Color3I(255,255,255) + abuseLabel.TextXAlignment = Enum.TextXAlignment.Left + abuseLabel.ZIndex = baseZIndex + 2 + abuseLabel.Parent = settingsFrame + + local abusingPlayer = nil + local abuse = nil + local submitReportButton = nil + local gameOrPlayer = nil + + local updatePlayerSelection = nil + local createPlayersDropDown = function() + local players = game:GetService("Players") + local playerNames = {} + local nameToPlayer = {} + local children = players:GetChildren() + local pos = 1 + if children then + for i, player in ipairs(children) do + if player:IsA("Player") and player ~= localPlayer then + playerNames[pos] = player.Name + nameToPlayer[player.Name] = player + pos = pos + 1 + end + end + end + local playerDropDown = nil + playerDropDown, updatePlayerSelection = RbxGui.CreateDropDownMenu(playerNames, + function(playerName) + abusingPlayer = nameToPlayer[playerName] + if abuse and abusingPlayer then + submitReportButton.Active = true + end + end) + playerDropDown.Name = "PlayersComboBox" + playerDropDown.ZIndex = baseZIndex + 2 + playerDropDown.Position = UDim2.new(.425, 0, 0, 139) + playerDropDown.Size = UDim2.new(.55,0,0,32) + + return playerDropDown + end + + local gameOrPlayerTable = {"Game","Player"} + local gameOrPlayerDropDown = nil + gameOrPlayerDropDown = RbxGui.CreateDropDownMenu(gameOrPlayerTable, + function(gameOrPlayerText) + gameOrPlayer = gameOrPlayerText + if gameOrPlayer == "Game" then + submitReportButton.Active = true + playerLabel.Visible = false + local playerDropDown = gameOrPlayerDropDown.Parent:FindFirstChild("PlayersComboBox") + if playerDropDown then + playerDropDown.Visible = false + end + else + playerLabel.Visible = true + local playerDropDown = gameOrPlayerDropDown.Parent:FindFirstChild("PlayersComboBox") + if playerDropDown then + playerDropDown.Visible = true + end + end + end, true) + gameOrPlayerDropDown.Name = "TypeComboBox" + gameOrPlayerDropDown.ZIndex = baseZIndex + 2 + gameOrPlayerDropDown.Position = UDim2.new(0.425, 0, 0, 100) + gameOrPlayerDropDown.Size = UDim2.new(0.55,0,0,32) + gameOrPlayerDropDown.Parent = settingsFrame + + local abuses = {"Swearing","Bullying","Scamming","Dating","Cheating/Exploiting","Personal Questions","Offsite Links","Bad Model or Script","Bad Username"} + local abuseDropDown, updateAbuseSelection = RbxGui.CreateDropDownMenu(abuses, + function(abuseText) + abuse = abuseText + if abuse and abusingPlayer then + submitReportButton.Active = true + end + end, true) + abuseDropDown.Name = "AbuseComboBox" + abuseDropDown.ZIndex = baseZIndex + 2 + abuseDropDown.Position = UDim2.new(0.425, 0, 0, 178) + abuseDropDown.Size = UDim2.new(0.55,0,0,32) + abuseDropDown.Parent = settingsFrame + + local shortDescriptionLabel = Instance.new("TextLabel") + shortDescriptionLabel.Name = "ShortDescriptionLabel" + shortDescriptionLabel.Text = "Short Description: (optional)" + shortDescriptionLabel.Font = Enum.Font.SourceSans + shortDescriptionLabel.FontSize = Enum.FontSize.Size18 + shortDescriptionLabel.Position = UDim2.new(0.025,0,0,215) + shortDescriptionLabel.Size = UDim2.new(0.95,0,0,36) + shortDescriptionLabel.TextColor3 = Color3I(255,255,255) + shortDescriptionLabel.TextXAlignment = Enum.TextXAlignment.Left + shortDescriptionLabel.BackgroundTransparency = 1 + shortDescriptionLabel.ZIndex = baseZIndex + 2 + shortDescriptionLabel.Parent = settingsFrame + + local shortDescriptionWrapper = Instance.new("Frame") + shortDescriptionWrapper.Name = "ShortDescriptionWrapper" + shortDescriptionWrapper.Position = UDim2.new(0.025,0,0,245) + shortDescriptionWrapper.Size = UDim2.new(0.95,0,1,-310) + shortDescriptionWrapper.BackgroundColor3 = Color3I(0,0,0) + shortDescriptionWrapper.BorderSizePixel = 1 + shortDescriptionWrapper.ZIndex = baseZIndex + 2 + shortDescriptionWrapper.Parent = settingsFrame + + local shortDescriptionBox = Instance.new("TextBox") + shortDescriptionBox.Name = "TextBox" + shortDescriptionBox.Text = "" + shortDescriptionBox.ClearTextOnFocus = false + shortDescriptionBox.Font = Enum.Font.SourceSans + shortDescriptionBox.FontSize = Enum.FontSize.Size18 + shortDescriptionBox.Position = UDim2.new(0,3,0,3) + shortDescriptionBox.Size = UDim2.new(1,-6,1,-6) + shortDescriptionBox.TextColor3 = Color3I(255,255,255) + shortDescriptionBox.TextXAlignment = Enum.TextXAlignment.Left + shortDescriptionBox.TextYAlignment = Enum.TextYAlignment.Top + shortDescriptionBox.TextWrap = true + shortDescriptionBox.BackgroundColor3 = Color3I(0,0,0) + shortDescriptionBox.BorderColor3 = Color3I(206,206,206) + shortDescriptionBox.ZIndex = baseZIndex + 2 + shortDescriptionBox.Parent = shortDescriptionWrapper + + submitReportButton = Instance.new("TextButton") + submitReportButton.Name = "SubmitReportBtn" + submitReportButton.Active = false + submitReportButton.Modal = true + submitReportButton.Font = Enum.Font.SourceSans + submitReportButton.FontSize = Enum.FontSize.Size18 + submitReportButton.Position = UDim2.new(0.1, 0, 1, -55) + submitReportButton.Size = UDim2.new(0.35,0,0,50) + submitReportButton.AutoButtonColor = true + submitReportButton.Style = Enum.ButtonStyle.RobloxButtonDefault + submitReportButton.Text = "Submit Report" + submitReportButton.TextColor3 = Color3I(255,255,255) + submitReportButton.ZIndex = baseZIndex + 2 + submitReportButton.Parent = settingsFrame + + submitReportButton.MouseButton1Click:connect(function() + if submitReportButton.Active then + if abuse and abusingPlayer then + frame.Visible = false + if gameOrPlayer == "Player" then + game.Players:ReportAbuse(abusingPlayer, abuse, shortDescriptionBox.Text) + else + game.Players:ReportAbuse(nil, abuse, shortDescriptionBox.Text) + end + if abuse == "Cheating/Exploiting" then + recordedMessageBox.Visible = true + elseif abuse == "Bullying" or abuse == "Swearing" then + calmingMessageBox.Visible = true + else + normalMessageBox.Visible = true + end + else + closeAndResetDialog() + end + end + end) + + local cancelButton = Instance.new("TextButton") + cancelButton.Name = "CancelBtn" + cancelButton.Font = Enum.Font.SourceSans + cancelButton.FontSize = Enum.FontSize.Size18 + cancelButton.Position = UDim2.new(0.55, 0, 1, -55) + cancelButton.Size = UDim2.new(0.35,0,0,50) + cancelButton.AutoButtonColor = true + cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault + cancelButton.Text = "Cancel" + cancelButton.TextColor3 = Color3I(255,255,255) + cancelButton.ZIndex = baseZIndex + 2 + cancelButton.Parent = settingsFrame + + closeAndResetDialog = function() + --Delete old player combo box + local oldComboBox = settingsFrame:FindFirstChild("PlayersComboBox") + if oldComboBox then + oldComboBox.Parent = nil + end + + abusingPlayer = nil updatePlayerSelection(nil) + abuse = nil updateAbuseSelection(nil) + submitReportButton.Active = false + shortDescriptionBox.Text = "" + frame.Visible = true + calmingMessageBox.Visible = false + recordedMessageBox.Visible = false + normalMessageBox.Visible = false + shield.Visible = false + reportAbuseButton.Active = true + game.GuiService:RemoveCenterDialog(shield) + end + + cancelButton.MouseButton1Click:connect(closeAndResetDialog) + + reportAbuseButton.MouseButton1Click:connect( + function() + createPlayersDropDown().Parent = settingsFrame + table.insert(centerDialogs,shield) + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + reportAbuseButton.Active = false + shield.Visible = true + mainShield.Visible = false + end, + --HideFunction + function() + reportAbuseButton.Active = true + shield.Visible = false + end) + end) + + robloxLock(shield) + return shield +end + +local createChatBar = function() + --Only show a chat bar if we are a NetworkClient + waitForChild(game, "NetworkClient") + + waitForChild(game, "Players") + waitForProperty(game.Players, "LocalPlayer") + + local chatBar = Instance.new("Frame") + chatBar.Name = "ChatBar" + chatBar.Size = UDim2.new(1, 0, 0, 22) + chatBar.Position = UDim2.new(0, 0, 1, 0) + chatBar.BackgroundColor3 = Color3.new(0,0,0) + chatBar.BorderSizePixel = 0 + + local chatBox = Instance.new("TextBox") + chatBox.Text = "" + chatBox.Visible = false + chatBox.Size = UDim2.new(1,-4,1,0) + chatBox.Position = UDim2.new(0,2,0,0) + chatBox.TextXAlignment = Enum.TextXAlignment.Left + chatBox.Font = Enum.Font.Arial + chatBox.ClearTextOnFocus = false + chatBox.FontSize = Enum.FontSize.Size14 + chatBox.TextColor3 = Color3.new(1,1,1) + chatBox.BackgroundTransparency = 1 + --chatBox.Parent = chatBar + + local chatButton = Instance.new("TextButton") + chatButton.Size = UDim2.new(1,-4,1,0) + chatButton.Position = UDim2.new(0,2,0,0) + chatButton.AutoButtonColor = false + chatButton.Text = "To chat click here or press \"/\" key" + chatButton.TextXAlignment = Enum.TextXAlignment.Left + chatButton.Font = Enum.Font.Arial + chatButton.FontSize = Enum.FontSize.Size14 + chatButton.TextColor3 = Color3.new(1,1,1) + chatButton.BackgroundTransparency = 1 + --chatButton.Parent = chatBar + + local activateChat = function() + if chatBox.Visible then + return + end + chatButton.Visible = false + chatBox.Text = "" + chatBox.Visible = true + chatBox:CaptureFocus() + end + + chatButton.MouseButton1Click:connect(activateChat) + + local hotKeyEnabled = true + local toggleHotKey = function(value) + hotKeyEnabled = value + end + + local guiService = game:GetService("GuiService") + local newChatMode = pcall(function() + --guiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) + --guiService.SpecialKeyPressed:connect(function(key) if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat() end end) + end) + if not newChatMode then + --guiService:AddKey("/") + --guiService.KeyPressed:connect(function(key) if key == "/" and hotKeyEnabled then activateChat() end end) + end + + chatBox.FocusLost:connect( + function(enterPressed) + if enterPressed then + if chatBox.Text ~= "" then + local str = chatBox.Text + if string.sub(str, 1, 1) == '%' then + game.Players:TeamChat(string.sub(str, 2)) + else + game.Players:Chat(str) + end + end + end + chatBox.Text = "" + chatBox.Visible = false + chatButton.Visible = true + end) + robloxLock(chatBar) + return chatBar, toggleHotKey +end + +--Spawn a thread for the Save dialogs +local isSaveDialogSupported = pcall(function() local var = game.LocalSaveEnabled end) +if isSaveDialogSupported then + delay(0, + function() + local saveDialogs = createSaveDialogs() + saveDialogs.Parent = gui + + game.RequestShutdown = function() + table.insert(centerDialogs,saveDialogs) + game.GuiService:AddCenterDialog(saveDialogs, Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + saveDialogs.Visible = true + end, + --HideFunction + function() + saveDialogs.Visible = false + end) + + return true + end + end) +end + +--Spawn a thread for the Report Abuse dialogs +delay(0, + function() + createReportAbuseDialog().Parent = gui + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield, "Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") + gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Active = true + end) + +end --LoadLibrary if diff --git a/app/files/CoreGui/46295864 b/app/files/CoreGui/46295864 new file mode 100644 index 0000000..e5f52a5 --- /dev/null +++ b/app/files/CoreGui/46295864 @@ -0,0 +1,2098 @@ +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- A Few Script Globals +local gui +if script.Parent:FindFirstChild("ControlFrame") then + gui = script.Parent:FindFirstChild("ControlFrame") +else + gui = script.Parent +end + +local helpButton = nil +local updateCameraDropDownSelection = nil +local updateVideoCaptureDropDownSelection = nil +local tweenTime = 0.2 + +local mouseLockLookScreenUrl = "http://www.roblox.com/asset?id=54071825" +local classicLookScreenUrl = "http://www.roblox.com/Asset?id=45915798" + +local hasGraphicsSlider = (game:GetService("CoreGui").Version >= 5) +local GraphicsQualityLevels = 10 -- how many levels we allow on graphics slider +local recordingVideo = false + +local currentMenuSelection = nil +local lastMenuSelection = {} + +local defaultPosition = UDim2.new(0,0,0,0) +local newGuiPlaces = {0,41324860} + +local centerDialogs = {} +local mainShield = nil + +local inStudioMode = UserSettings().GameSettings:InStudioMode() + +local macClient = false +local success, isMac = pcall(function() return not game.GuiService.IsWindows end) +macClient = success and isMac + +local function Color3I(r,g,b) + return Color3.new(r/255,g/255,b/255) +end + +local function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resumeGameFunction(shield) + shield.Settings:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + delay(tweenTime,function() + shield.Visible = false + for i = 1, #centerDialogs do + centerDialogs[i].Visible = false + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + end + game.GuiService:RemoveCenterDialog(shield) + settingsButton.Active = true + currentMenuSelection = nil + lastMenuSelection = {} + end) +end + +function goToMenu(container,menuName, moveDirection,size,position) + if type(menuName) ~= "string" then return end + + table.insert(lastMenuSelection,currentMenuSelection) + if menuName == "GameMainMenu" then + lastMenuSelection = {} + end + + local containerChildren = container:GetChildren() + local selectedMenu = false + for i = 1, #containerChildren do + if containerChildren[i].Name == menuName then + containerChildren[i].Visible = true + currentMenuSelection = {container = container,name = menuName, direction = moveDirection, lastSize = size} + selectedMenu = true + if size and position then + containerChildren[i]:TweenSizeAndPosition(size,position,Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif size then + containerChildren[i]:TweenSizeAndPosition(size,UDim2.new(0.5,-size.X.Offset/2,0.5,-size.Y.Offset/2),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + else + containerChildren[i]:TweenPosition(UDim2.new(0,0,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end + else + if moveDirection == "left" then + containerChildren[i]:TweenPosition(UDim2.new(-1,-525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "right" then + containerChildren[i]:TweenPosition(UDim2.new(1,525,0,0),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "up" then + containerChildren[i]:TweenPosition(UDim2.new(0,0,-1,-400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + elseif moveDirection == "down" then + containerChildren[i]:TweenPosition(UDim2.new(0,0,1,400),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end + delay(tweenTime,function() + containerChildren[i].Visible = false + end) + end + end +end + +function resetLocalCharacter() + local player = game.Players.LocalPlayer + if player then + if player.Character and player.Character:FindFirstChild("Humanoid") then + player.Character.Humanoid.Health = 0 + end + end +end + +local function createTextButton(text,style,fontSize,buttonSize,buttonPosition) + local newTextButton = Instance.new("TextButton") + newTextButton.Font = Enum.Font.Arial + newTextButton.FontSize = fontSize + newTextButton.Size = buttonSize + newTextButton.Position = buttonPosition + newTextButton.Style = style + newTextButton.TextColor3 = Color3.new(1,1,1) + newTextButton.Text = text + return newTextButton +end + +local function CreateTextButtons(frame, buttons, yPos, ySize) + if #buttons < 1 then + error("Must have more than one button") + end + + local buttonNum = 1 + local buttonObjs = {} + + local function toggleSelection(button) + for i, obj in ipairs(buttonObjs) do + if obj == button then + obj.Style = Enum.ButtonStyle.RobloxButtonDefault + else + obj.Style = Enum.ButtonStyle.RobloxButton + end + end + end + + for i, obj in ipairs(buttons) do + local button = Instance.new("TextButton") + button.Name = "Button" .. buttonNum + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size18 + button.AutoButtonColor = true + button.Style = Enum.ButtonStyle.RobloxButton + button.Text = obj.Text + button.TextColor3 = Color3.new(1,1,1) + button.MouseButton1Click:connect(function() toggleSelection(button) obj.Function() end) + button.Parent = frame + buttonObjs[buttonNum] = button + + buttonNum = buttonNum + 1 + end + + toggleSelection(buttonObjs[1]) + + local numButtons = buttonNum-1 + + if numButtons == 1 then + frame.Button1.Position = UDim2.new(0.35, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.4,0,ySize.Scale, ySize.Offset) + elseif numButtons == 2 then + frame.Button1.Position = UDim2.new(0.1, 0, yPos.Scale, yPos.Offset) + frame.Button1.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + + frame.Button2.Position = UDim2.new(0.55, 0, yPos.Scale, yPos.Offset) + frame.Button2.Size = UDim2.new(.35,0, ySize.Scale, ySize.Offset) + elseif numButtons >= 3 then + local spacing = .1 / numButtons + local buttonSize = .9 / numButtons + + buttonNum = 1 + while buttonNum <= numButtons do + buttonObjs[buttonNum].Position = UDim2.new(spacing*buttonNum + (buttonNum-1) * buttonSize, 0, yPos.Scale, yPos.Offset) + buttonObjs[buttonNum].Size = UDim2.new(buttonSize, 0, ySize.Scale, ySize.Offset) + buttonNum = buttonNum + 1 + end + end +end + +function setRecordGui(recording, stopRecordButton, recordVideoButton) + if recording then + stopRecordButton.Visible = true + recordVideoButton.Text = "Stop Recording" + else + stopRecordButton.Visible = false + recordVideoButton.Text = "Record Video" + end +end + +function recordVideoClick(recordVideoButton, stopRecordButton) + recordingVideo = not recordingVideo + setRecordGui(recordingVideo, stopRecordButton, recordVideoButton) +end + +function backToGame(buttonClicked, shield, settingsButton) + buttonClicked.Parent.Parent.Parent.Parent.Visible = false + shield.Visible = false + for i = 1, #centerDialogs do + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + centerDialogs[i].Visible = false + end + centerDialogs = {} + game.GuiService:RemoveCenterDialog(shield) + settingsButton.Active = true +end + +function setDisabledState(guiObject) + if not guiObject then return end + + if guiObject:IsA("TextLabel") then + guiObject.TextTransparency = 0.9 + elseif guiObject:IsA("TextButton") then + guiObject.TextTransparency = 0.9 + guiObject.Active = false + else + if guiObject["ClassName"] then + print("setDisabledState() got object of unsupported type. object type is ",guiObject.ClassName) + end + end +end + +local function createHelpDialog(baseZIndex) + + if helpButton == nil then + if gui:FindFirstChild("TopLeftControl") and gui.TopLeftControl:FindFirstChild("Help") then + helpButton = gui.TopLeftControl.Help + elseif gui:FindFirstChild("BottomRightControl") and gui.BottomRightControl:FindFirstChild("Help") then + helpButton = gui.BottomRightControl.Help + end + end + + local shield = Instance.new("Frame") + shield.Name = "HelpDialogShield" + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 1 + + local helpDialog = Instance.new("Frame") + helpDialog.Name = "HelpDialog" + helpDialog.Style = Enum.FrameStyle.RobloxRound + helpDialog.Position = UDim2.new(.2, 0, .2, 0) + helpDialog.Size = UDim2.new(0.6, 0, 0.6, 0) + helpDialog.Active = true + helpDialog.Parent = shield + + local titleLabel = Instance.new("TextLabel") + titleLabel.Name = "Title" + titleLabel.Text = "Keyboard & Mouse Controls" + titleLabel.Font = Enum.Font.ArialBold + titleLabel.FontSize = Enum.FontSize.Size36 + titleLabel.Position = UDim2.new(0, 0, 0.025, 0) + titleLabel.Size = UDim2.new(1, 0, 0, 40) + titleLabel.TextColor3 = Color3.new(1,1,1) + titleLabel.BackgroundTransparency = 1 + titleLabel.Parent = helpDialog + + local buttonRow = Instance.new("Frame") + buttonRow.Name = "Buttons" + buttonRow.Position = UDim2.new(0.1, 0, .07, 40) + buttonRow.Size = UDim2.new(0.8, 0, 0, 45) + buttonRow.BackgroundTransparency = 1 + buttonRow.Parent = helpDialog + + local imageFrame = Instance.new("Frame") + imageFrame.Name = "ImageFrame" + imageFrame.Position = UDim2.new(0.05, 0, 0.075, 80) + imageFrame.Size = UDim2.new(0.9, 0, .9, -120) + imageFrame.BackgroundTransparency = 1 + imageFrame.Parent = helpDialog + + local layoutFrame = Instance.new("Frame") + layoutFrame.Name = "LayoutFrame" + layoutFrame.Position = UDim2.new(0.5, 0, 0, 0) + layoutFrame.Size = UDim2.new(1.5, 0, 1, 0) + layoutFrame.BackgroundTransparency = 1 + layoutFrame.SizeConstraint = Enum.SizeConstraint.RelativeYY + layoutFrame.Parent = imageFrame + + local image = Instance.new("ImageLabel") + image.Name = "Image" + if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + image.Image = mouseLockLookScreenUrl + else + image.Image = classicLookScreenUrl + end + image.Position = UDim2.new(-0.5, 0, 0, 0) + image.Size = UDim2.new(1, 0, 1, 0) + image.BackgroundTransparency = 1 + image.Parent = layoutFrame + + local buttons = {} + buttons[1] = {} + buttons[1].Text = "Look" + buttons[1].Function = function() + if UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + image.Image = mouseLockLookScreenUrl + else + image.Image = classicLookScreenUrl + end + end + buttons[2] = {} + buttons[2].Text = "Move" + buttons[2].Function = function() + image.Image = "http://www.roblox.com/Asset?id=45915811" + end + buttons[3] = {} + buttons[3].Text = "Gear" + buttons[3].Function = function() + image.Image = "http://www.roblox.com/Asset?id=45917596" + end + buttons[4] = {} + buttons[4].Text = "Zoom" + buttons[4].Function = function() + image.Image = "http://www.roblox.com/Asset?id=45915825" + end + + CreateTextButtons(buttonRow, buttons, UDim.new(0, 0), UDim.new(1,0)) + + + -- set up listeners for type of mouse mode, but keep constructing gui at same time + delay(0, function() + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield,"Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle, "GameSettingsMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu, "CameraField") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField, "DropDownMenuButton") + gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Changed:connect(function(prop) + if prop ~= "Text" then return end + if buttonRow.Button1.Style == Enum.ButtonStyle.RobloxButtonDefault then -- only change if this is the currently selected panel + if gui.UserSettingsShield.Settings.SettingsStyle.GameSettingsMenu.CameraField.DropDownMenuButton.Text == "Classic" then + image.Image = classicLookScreenUrl + else + image.Image = mouseLockLookScreenUrl + end + end + end) + end) + + + local okBtn = Instance.new("TextButton") + okBtn.Name = "OkBtn" + okBtn.Text = "OK" + okBtn.Modal = true + okBtn.Size = UDim2.new(0.3, 0, 0, 45) + okBtn.Position = UDim2.new(0.35, 0, .975, -50) + okBtn.Font = Enum.Font.Arial + okBtn.FontSize = Enum.FontSize.Size18 + okBtn.BackgroundTransparency = 1 + okBtn.TextColor3 = Color3.new(1,1,1) + okBtn.Style = Enum.ButtonStyle.RobloxButtonDefault + okBtn.MouseButton1Click:connect( + function() + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end) + okBtn.Parent = helpDialog + + robloxLock(shield) + return shield +end + +local function createLeaveConfirmationMenu(baseZIndex,shield) + local frame = Instance.new("Frame") + frame.Name = "LeaveConfirmationMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + frame.Position = UDim2.new(0,0,2,400) + frame.ZIndex = baseZIndex + 4 + + local yesButton = createTextButton("Leave",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0.8,0)) + yesButton.Name = "YesButton" + yesButton.ZIndex = baseZIndex + 4 + yesButton.Parent = frame + yesButton.Modal = true + yesButton:SetVerb("Exit") + + local noButton = createTextButton("Stay",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0.8,0)) + noButton.Name = "NoButton" + noButton.Parent = frame + noButton.ZIndex = baseZIndex + 4 + noButton.MouseButton1Click:connect(function() + goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) + shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end) + + local leaveText = Instance.new("TextLabel") + leaveText.Name = "LeaveText" + leaveText.Text = "Leave this game?" + leaveText.Size = UDim2.new(1,0,0.8,0) + leaveText.TextWrap = true + leaveText.TextColor3 = Color3.new(1,1,1) + leaveText.Font = Enum.Font.ArialBold + leaveText.FontSize = Enum.FontSize.Size36 + leaveText.BackgroundTransparency = 1 + leaveText.ZIndex = baseZIndex + 4 + leaveText.Parent = frame + + return frame +end + +local function createResetConfirmationMenu(baseZIndex,shield) + local frame = Instance.new("Frame") + frame.Name = "ResetConfirmationMenu" + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1,0,1,0) + frame.Position = UDim2.new(0,0,2,400) + frame.ZIndex = baseZIndex + 4 + + local yesButton = createTextButton("Reset",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,313,0,299)) + yesButton.Name = "YesButton" + yesButton.ZIndex = baseZIndex + 4 + yesButton.Parent = frame + yesButton.Modal = true + yesButton.MouseButton1Click:connect(function() + resumeGameFunction(shield) + resetLocalCharacter() + end) + + local noButton = createTextButton("Cancel",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,128,0,50),UDim2.new(0,90,0,299)) + noButton.Name = "NoButton" + noButton.Parent = frame + noButton.ZIndex = baseZIndex + 4 + noButton.MouseButton1Click:connect(function() + goToMenu(shield.Settings.SettingsStyle,"GameMainMenu","down",UDim2.new(0,525,0,430)) + shield.Settings:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end) + + local resetCharacterText = Instance.new("TextLabel") + resetCharacterText.Name = "ResetCharacterText" + resetCharacterText.Text = "Are you sure you want to reset your character?" + resetCharacterText.Size = UDim2.new(1,0,0.8,0) + resetCharacterText.TextWrap = true + resetCharacterText.TextColor3 = Color3.new(1,1,1) + resetCharacterText.Font = Enum.Font.ArialBold + resetCharacterText.FontSize = Enum.FontSize.Size36 + resetCharacterText.BackgroundTransparency = 1 + resetCharacterText.ZIndex = baseZIndex + 4 + resetCharacterText.Parent = frame + + local fineResetCharacterText = resetCharacterText:Clone() + fineResetCharacterText.Name = "FineResetCharacterText" + fineResetCharacterText.Text = "You will be put back on a spawn point" + fineResetCharacterText.Size = UDim2.new(0,303,0,18) + fineResetCharacterText.Position = UDim2.new(0, 109, 0, 215) + fineResetCharacterText.FontSize = Enum.FontSize.Size18 + fineResetCharacterText.Parent = frame + + return frame +end + +local function createGameMainMenu(baseZIndex, shield) + local gameMainMenuFrame = Instance.new("Frame") + gameMainMenuFrame.Name = "GameMainMenu" + gameMainMenuFrame.BackgroundTransparency = 1 + gameMainMenuFrame.Size = UDim2.new(1,0,1,0) + gameMainMenuFrame.ZIndex = baseZIndex + 4 + gameMainMenuFrame.Parent = settingsFrame + + -- GameMainMenu Children + + local gameMainMenuTitle = Instance.new("TextLabel") + gameMainMenuTitle.Name = "Title" + gameMainMenuTitle.Text = "Game Menu" + gameMainMenuTitle.BackgroundTransparency = 1 + gameMainMenuTitle.TextStrokeTransparency = 0 + gameMainMenuTitle.Font = Enum.Font.ArialBold + gameMainMenuTitle.FontSize = Enum.FontSize.Size36 + gameMainMenuTitle.Size = UDim2.new(1,0,0,36) + gameMainMenuTitle.Position = UDim2.new(0,0,0,4) + gameMainMenuTitle.TextColor3 = Color3.new(1,1,1) + gameMainMenuTitle.ZIndex = baseZIndex + 4 + gameMainMenuTitle.Parent = gameMainMenuFrame + + local robloxHelpButton = createTextButton("Help",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,256)) + robloxHelpButton.Name = "HelpButton" + robloxHelpButton.ZIndex = baseZIndex + 4 + robloxHelpButton.Parent = gameMainMenuFrame + helpButton = robloxHelpButton + + local helpDialog = createHelpDialog(baseZIndex) + helpDialog.Parent = gui + + helpButton.MouseButton1Click:connect( + function() + table.insert(centerDialogs,helpDialog) + game.GuiService:AddCenterDialog(helpDialog, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + helpDialog.Visible = true + mainShield.Visible = false + end, + --HideFunction + function() + helpDialog.Visible = false + end) + end) + helpButton.Active = true + + local helpShortcut = Instance.new("TextLabel") + helpShortcut.Name = "HelpShortcutText" + helpShortcut.Text = "F1" + helpShortcut.Visible = false + helpShortcut.BackgroundTransparency = 1 + helpShortcut.Font = Enum.Font.Arial + helpShortcut.FontSize = Enum.FontSize.Size12 + helpShortcut.Position = UDim2.new(0,85,0,0) + helpShortcut.Size = UDim2.new(0,30,0,30) + helpShortcut.TextColor3 = Color3.new(0,1,0) + helpShortcut.ZIndex = baseZIndex + 4 + helpShortcut.Parent = robloxHelpButton + + local screenshotButton = createTextButton("Screenshot",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,256)) + screenshotButton.Name = "ScreenshotButton" + screenshotButton.ZIndex = baseZIndex + 4 + screenshotButton.Parent = gameMainMenuFrame + screenshotButton.Visible = not macClient + screenshotButton:SetVerb("Screenshot") + + local screenshotShortcut = helpShortcut:clone() + screenshotShortcut.Name = "ScreenshotShortcutText" + screenshotShortcut.Text = "PrintSc" + screenshotShortcut.Position = UDim2.new(0,118,0,0) + screenshotShortcut.Visible = true + screenshotShortcut.Parent = screenshotButton + + + local recordVideoButton = createTextButton("Record Video",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,168,0,50),UDim2.new(0,254,0,306)) + recordVideoButton.Name = "RecordVideoButton" + recordVideoButton.ZIndex = baseZIndex + 4 + recordVideoButton.Parent = gameMainMenuFrame + recordVideoButton.Visible = not macClient + recordVideoButton:SetVerb("RecordToggle") + + local recordVideoShortcut = helpShortcut:clone() + recordVideoShortcut.Visible = hasGraphicsSlider + recordVideoShortcut.Name = "RecordVideoShortcutText" + recordVideoShortcut.Text = "F12" + recordVideoShortcut.Position = UDim2.new(0,120,0,0) + recordVideoShortcut.Parent = recordVideoButton + + local stopRecordButton = Instance.new("ImageButton") + stopRecordButton.Name = "StopRecordButton" + stopRecordButton.BackgroundTransparency = 1 + stopRecordButton.Image = "rbxasset://textures/ui/RecordStop.png" + stopRecordButton.Size = UDim2.new(0,59,0,27) + stopRecordButton:SetVerb("RecordToggle") + + stopRecordButton.MouseButton1Click:connect(function() recordVideoClick(recordVideoButton, stopRecordButton) end) + stopRecordButton.Visible = false + stopRecordButton.Parent = gui + + local reportAbuseButton = createTextButton("Report Abuse",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,164,0,50),UDim2.new(0,82,0,306)) + reportAbuseButton.Name = "ReportAbuseButton" + reportAbuseButton.ZIndex = baseZIndex + 4 + reportAbuseButton.Parent = gameMainMenuFrame + + local leaveGameButton = createTextButton("Leave Game",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,358)) + leaveGameButton.Name = "LeaveGameButton" + leaveGameButton.ZIndex = baseZIndex + 4 + leaveGameButton.Parent = gameMainMenuFrame + + local resumeGameButton = createTextButton("Resume Game",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,54)) + resumeGameButton.Name = "resumeGameButton" + resumeGameButton.ZIndex = baseZIndex + 4 + resumeGameButton.Parent = gameMainMenuFrame + resumeGameButton.Modal = true + resumeGameButton.MouseButton1Click:connect(function() resumeGameFunction(shield) end) + + local gameSettingsButton = createTextButton("Game Settings",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,156)) + gameSettingsButton.Name = "SettingsButton" + gameSettingsButton.ZIndex = baseZIndex + 4 + gameSettingsButton.Parent = gameMainMenuFrame + + if game:FindFirstChild("LoadingGuiService") and #game.LoadingGuiService:GetChildren() > 0 then + local gameSettingsButton = createTextButton("Game Instructions",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,207)) + gameSettingsButton.Name = "GameInstructions" + gameSettingsButton.ZIndex = baseZIndex + 4 + gameSettingsButton.Parent = gameMainMenuFrame + gameSettingsButton.MouseButton1Click:connect(function() + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + local loadingGui = game.Players.LocalPlayer:FindFirstChild("PlayerLoadingGui") + if loadingGui then + loadingGui.Visible = true + end + end + end) + end + + local resetButton = createTextButton("Reset Character",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size24,UDim2.new(0,340,0,50),UDim2.new(0,82,0,105)) + resetButton.Name = "ResetButton" + resetButton.ZIndex = baseZIndex + 4 + resetButton.Parent = gameMainMenuFrame + + return gameMainMenuFrame +end + +local function createGameSettingsMenu(baseZIndex, shield) + local gameSettingsMenuFrame = Instance.new("Frame") + gameSettingsMenuFrame.Name = "GameSettingsMenu" + gameSettingsMenuFrame.BackgroundTransparency = 1 + gameSettingsMenuFrame.Size = UDim2.new(1,0,1,0) + gameSettingsMenuFrame.ZIndex = baseZIndex + 4 + + local title = Instance.new("TextLabel") + title.Name = "Title" + title.Text = "Settings" + title.Size = UDim2.new(1,0,0,48) + title.Position = UDim2.new(0,9,0,-9) + title.Font = Enum.Font.ArialBold + title.FontSize = Enum.FontSize.Size36 + title.TextColor3 = Color3.new(1,1,1) + title.ZIndex = baseZIndex + 4 + title.BackgroundTransparency = 1 + title.Parent = gameSettingsMenuFrame + + local fullscreenText = Instance.new("TextLabel") + fullscreenText.Name = "FullscreenText" + fullscreenText.Text = "Fullscreen Mode" + fullscreenText.Size = UDim2.new(0,124,0,18) + fullscreenText.Position = UDim2.new(0,62,0,145) + fullscreenText.Font = Enum.Font.Arial + fullscreenText.FontSize = Enum.FontSize.Size18 + fullscreenText.TextColor3 = Color3.new(1,1,1) + fullscreenText.ZIndex = baseZIndex + 4 + fullscreenText.BackgroundTransparency = 1 + fullscreenText.Parent = gameSettingsMenuFrame + + local fullscreenShortcut = Instance.new("TextLabel") + fullscreenShortcut.Visible = hasGraphicsSlider + fullscreenShortcut.Name = "FullscreenShortcutText" + fullscreenShortcut.Text = "F11" + fullscreenShortcut.BackgroundTransparency = 1 + fullscreenShortcut.Font = Enum.Font.Arial + fullscreenShortcut.FontSize = Enum.FontSize.Size12 + fullscreenShortcut.Position = UDim2.new(0,186,0,141) + fullscreenShortcut.Size = UDim2.new(0,30,0,30) + fullscreenShortcut.TextColor3 = Color3.new(0,1,0) + fullscreenShortcut.ZIndex = baseZIndex + 4 + fullscreenShortcut.Parent = gameSettingsMenuFrame + + local studioText = Instance.new("TextLabel") + studioText.Visible = false + studioText.Name = "StudioText" + studioText.Text = "Studio Mode" + studioText.Size = UDim2.new(0,95,0,18) + studioText.Position = UDim2.new(0,62,0,179) + studioText.Font = Enum.Font.Arial + studioText.FontSize = Enum.FontSize.Size18 + studioText.TextColor3 = Color3.new(1,1,1) + studioText.ZIndex = baseZIndex + 4 + studioText.BackgroundTransparency = 1 + studioText.Parent = gameSettingsMenuFrame + + local studioShortcut = fullscreenShortcut:clone() + studioShortcut.Name = "StudioShortcutText" + studioShortcut.Visible = false -- TODO: turn back on when f2 hack is fixed + studioShortcut.Text = "F2" + studioShortcut.Position = UDim2.new(0,154,0,175) + studioShortcut.Parent = gameSettingsMenuFrame + + local studioCheckbox = nil + + if hasGraphicsSlider then + local qualityText = Instance.new("TextLabel") + qualityText.Name = "QualityText" + qualityText.Text = "Graphics Quality" + qualityText.Size = UDim2.new(0,128,0,18) + qualityText.Position = UDim2.new(0,30,0,239) + qualityText.Font = Enum.Font.Arial + qualityText.FontSize = Enum.FontSize.Size18 + qualityText.TextColor3 = Color3.new(1,1,1) + qualityText.ZIndex = baseZIndex + 4 + qualityText.BackgroundTransparency = 1 + qualityText.Parent = gameSettingsMenuFrame + qualityText.Visible = not inStudioMode + + local autoText = qualityText:clone() + autoText.Name = "AutoText" + autoText.Text = "Auto" + autoText.Position = UDim2.new(0,183,0,214) + autoText.TextColor3 = Color3.new(128/255,128/255,128/255) + autoText.Size = UDim2.new(0,34,0,18) + autoText.Parent = gameSettingsMenuFrame + autoText.Visible = not inStudioMode + + local fasterText = autoText:clone() + fasterText.Name = "FasterText" + fasterText.Text = "Faster" + fasterText.Position = UDim2.new(0,185,0,274) + fasterText.TextColor3 = Color3.new(95,95,95) + fasterText.FontSize = Enum.FontSize.Size14 + fasterText.Parent = gameSettingsMenuFrame + fasterText.Visible = not inStudioMode + + local fasterShortcut = fullscreenShortcut:clone() + fasterShortcut.Name = "FasterShortcutText" + fasterShortcut.Text = "F10 + Shift" + fasterShortcut.Position = UDim2.new(0,185,0,283) + fasterShortcut.Parent = gameSettingsMenuFrame + fasterShortcut.Visible = not inStudioMode + + local betterQualityText = autoText:clone() + betterQualityText.Name = "BetterQualityText" + betterQualityText.Text = "Better Quality" + betterQualityText.TextWrap = true + betterQualityText.Size = UDim2.new(0,41,0,28) + betterQualityText.Position = UDim2.new(0,390,0,269) + betterQualityText.TextColor3 = Color3.new(95,95,95) + betterQualityText.FontSize = Enum.FontSize.Size14 + betterQualityText.Parent = gameSettingsMenuFrame + betterQualityText.Visible = not inStudioMode + + local betterQualityShortcut = fullscreenShortcut:clone() + betterQualityShortcut.Name = "BetterQualityShortcut" + betterQualityShortcut.Text = "F10" + betterQualityShortcut.Position = UDim2.new(0,394,0,288) + betterQualityShortcut.Parent = gameSettingsMenuFrame + betterQualityShortcut.Visible = not inStudioMode + + local autoGraphicsButton = createTextButton("X",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,187,0,239)) + autoGraphicsButton.Name = "AutoGraphicsButton" + autoGraphicsButton.ZIndex = baseZIndex + 4 + autoGraphicsButton.Parent = gameSettingsMenuFrame + autoGraphicsButton.Visible = not inStudioMode + + local graphicsSlider, graphicsLevel = RbxGui.CreateSlider(GraphicsQualityLevels,150,UDim2.new(0, 230, 0, 280)) -- graphics - 1 because slider starts at 1 instead of 0 + graphicsSlider.Parent = gameSettingsMenuFrame + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + graphicsSlider.Visible = not inStudioMode + graphicsLevel.Value = math.floor((settings().Rendering:GetMaxQualityLevel() - 1)/2) + + local graphicsSetter = Instance.new("TextBox") + graphicsSetter.Name = "GraphicsSetter" + graphicsSetter.BackgroundColor3 = Color3.new(0,0,0) + graphicsSetter.BorderColor3 = Color3.new(128/255,128/255,128/255) + graphicsSetter.Size = UDim2.new(0,50,0,25) + graphicsSetter.Position = UDim2.new(0,450,0,269) + graphicsSetter.TextColor3 = Color3.new(1,1,1) + graphicsSetter.Font = Enum.Font.Arial + graphicsSetter.FontSize = Enum.FontSize.Size18 + graphicsSetter.Text = "Auto" + graphicsSetter.ZIndex = 1 + graphicsSetter.TextWrap = true + graphicsSetter.Parent = gameSettingsMenuFrame + graphicsSetter.Visible = not inStudioMode + + local isAutoGraphics = true + if not inStudioMode then + isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) + else + settings().Rendering.EnableFRM = false + end + + local listenToGraphicsLevelChange = true + + local function setAutoGraphicsGui(active) + isAutoGraphics = active + if active then + autoGraphicsButton.Text = "X" + betterQualityText.ZIndex = 1 + betterQualityShortcut.ZIndex = 1 + fasterShortcut.ZIndex = 1 + fasterText.ZIndex = 1 + graphicsSlider.Bar.ZIndex = 1 + graphicsSlider.Bar.Slider.ZIndex = 1 + graphicsSetter.ZIndex = 1 + graphicsSetter.Text = "Auto" + else + autoGraphicsButton.Text = "" + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + betterQualityShortcut.ZIndex = baseZIndex + 4 + fasterShortcut.ZIndex = baseZIndex + 4 + betterQualityText.ZIndex = baseZIndex + 4 + fasterText.ZIndex = baseZIndex + 4 + graphicsSetter.ZIndex = baseZIndex + 4 + end + end + + local function goToAutoGraphics() + setAutoGraphicsGui(true) + + UserSettings().GameSettings.SavedQualityLevel = Enum.SavedQualitySetting.Automatic + + settings().Rendering.QualityLevel = Enum.QualityLevel.Automatic + end + + local function setGraphicsQualityLevel(newLevel) + local percentage = newLevel/GraphicsQualityLevels + local newSetting = math.floor((settings().Rendering:GetMaxQualityLevel() - 1) * percentage) + if newSetting == 20 then -- Level 20 is the same as level 21, except it doesn't render ambient occlusion + newSetting = 21 + elseif newLevel == 1 then -- make sure we can go to lowest settings (for terrible computers) + newSetting = 1 + elseif newSetting > settings().Rendering:GetMaxQualityLevel() then + newSetting = settings().Rendering:GetMaxQualityLevel() - 1 + end + + UserSettings().GameSettings.SavedQualityLevel = newLevel + settings().Rendering.QualityLevel = newSetting + end + + local function goToManualGraphics(explicitLevel) + setAutoGraphicsGui(false) + + if explicitLevel then + graphicsLevel.Value = explicitLevel + else + graphicsLevel.Value = math.floor((settings().Rendering.AutoFRMLevel/(settings().Rendering:GetMaxQualityLevel() - 1)) * GraphicsQualityLevels) + end + + if explicitLevel == graphicsLevel.Value then -- make sure we are actually in right graphics mode + setGraphicsQualityLevel(graphicsLevel.Value) + end + + if not explicitLevel then + UserSettings().GameSettings.SavedQualityLevel = graphicsLevel.Value + end + graphicsSetter.Text = tostring(graphicsLevel.Value) + end + + local function showAutoGraphics() + autoText.ZIndex = baseZIndex + 4 + autoGraphicsButton.ZIndex = baseZIndex + 4 + end + + local function hideAutoGraphics() + autoText.ZIndex = 1 + autoGraphicsButton.ZIndex = 1 + end + + local function showManualGraphics() + graphicsSlider.Bar.ZIndex = baseZIndex + 4 + graphicsSlider.Bar.Slider.ZIndex = baseZIndex + 5 + betterQualityShortcut.ZIndex = baseZIndex + 4 + fasterShortcut.ZIndex = baseZIndex + 4 + betterQualityText.ZIndex = baseZIndex + 4 + fasterText.ZIndex = baseZIndex + 4 + graphicsSetter.ZIndex = baseZIndex + 4 + end + + local function hideManualGraphics() + betterQualityText.ZIndex = 1 + betterQualityShortcut.ZIndex = 1 + fasterShortcut.ZIndex = 1 + fasterText.ZIndex = 1 + graphicsSlider.Bar.ZIndex = 1 + graphicsSlider.Bar.Slider.ZIndex = 1 + graphicsSetter.ZIndex = 1 + end + + local function translateSavedQualityLevelToInt(savedQualityLevel) + if savedQualityLevel == Enum.SavedQualitySetting.Automatic then + return 0 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel1 then + return 1 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel2 then + return 2 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel3 then + return 3 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel4 then + return 4 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel5 then + return 5 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel6 then + return 6 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel7 then + return 7 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel8 then + return 8 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel9 then + return 9 + elseif savedQualityLevel == Enum.SavedQualitySetting.QualityLevel10 then + return 10 + end + end + + local function enableGraphicsWidget() + settings().Rendering.EnableFRM = true + + isAutoGraphics = (UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic) + if isAutoGraphics then + showAutoGraphics() + goToAutoGraphics() + else + showAutoGraphics() + showManualGraphics() + goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) + end + end + + local function disableGraphicsWidget() + hideManualGraphics() + hideAutoGraphics() + settings().Rendering.EnableFRM = false + end + + graphicsSetter.FocusLost:connect(function() + if isAutoGraphics then + graphicsSetter.Text = tostring(graphicsLevel.Value) + return + end + + local newGraphicsValue = tonumber(graphicsSetter.Text) + if newGraphicsValue == nil then + graphicsSetter.Text = tostring(graphicsLevel.Value) + return + end + + if newGraphicsValue < 1 then newGraphicsValue = 1 + elseif newGraphicsValue >= settings().Rendering:GetMaxQualityLevel() then + newGraphicsValue = settings().Rendering:GetMaxQualityLevel() - 1 + end + + graphicsLevel.Value = newGraphicsValue + setGraphicsQualityLevel(graphicsLevel.Value) + graphicsSetter.Text = tostring(graphicsLevel.Value) + end) + + graphicsLevel.Changed:connect(function(prop) + if isAutoGraphics then return end + if not listenToGraphicsLevelChange then return end + + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + end) + + -- setup our graphic mode on load + if inStudioMode or UserSettings().GameSettings.SavedQualityLevel == Enum.SavedQualitySetting.Automatic then + if inStudioMode then + settings().Rendering.EnableFRM = false + disableGraphicsWidget() + else + settings().Rendering.EnableFRM = true + goToAutoGraphics() + end + else + settings().Rendering.EnableFRM = true + goToManualGraphics(translateSavedQualityLevelToInt(UserSettings().GameSettings.SavedQualityLevel)) + end + + autoGraphicsButton.MouseButton1Click:connect(function() + if inStudioMode and not game.Players.LocalPlayer then return end + + if not isAutoGraphics then + goToAutoGraphics() + else + goToManualGraphics(graphicsLevel.Value) + end + end) + + local lastUpdate = nil + game.GraphicsQualityChangeRequest:connect(function(graphicsIncrease) + if isAutoGraphics then return end -- only can set graphics in manual mode + + if graphicsIncrease then + if (graphicsLevel.Value + 1) > GraphicsQualityLevels then return end + graphicsLevel.Value = graphicsLevel.Value + 1 + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + + game:GetService("GuiService"):SendNotification("Graphics Quality", + "Increased to (" .. graphicsSetter.Text .. ")", + "", + 2, + function() + end) + else + if (graphicsLevel.Value - 1) <= 0 then return end + graphicsLevel.Value = graphicsLevel.Value - 1 + graphicsSetter.Text = tostring(graphicsLevel.Value) + setGraphicsQualityLevel(graphicsLevel.Value) + + game:GetService("GuiService"):SendNotification("Graphics Quality", + "Decreased to (" .. graphicsSetter.Text .. ")", + "", + 2, + function() + end) + end + end) + + game.Players.PlayerAdded:connect(function(player) + if player == game.Players.LocalPlayer and inStudioMode then + enableGraphicsWidget() + end + end) + game.Players.PlayerRemoving:connect(function(player) + if player == game.Players.LocalPlayer and inStudioMode then + disableGraphicsWidget() + end + end) + + studioCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,176)) + studioCheckbox.Name = "StudioCheckbox" + studioCheckbox.ZIndex = baseZIndex + 4 + --studioCheckbox.Parent = gameSettingsMenuFrame -- todo: enable when studio h4x aren't an issue anymore + studioCheckbox:SetVerb("TogglePlayMode") + studioCheckbox.Visible = false -- todo: enabled when studio h4x aren't an issue anymore + + local wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) + if inStudioMode and not game.Players.LocalPlayer then + studioCheckbox.Text = "X" + disableGraphicsWidget() + elseif inStudioMode then + studioCheckbox.Text = "X" + enableGraphicsWidget() + end + if hasGraphicsSlider then + UserSettings().GameSettings.StudioModeChanged:connect(function(isStudioMode) + inStudioMode = isStudioMode + if isStudioMode then + wasManualGraphics = (settings().Rendering.QualityLevel ~= Enum.QualityLevel.Automatic) + goToAutoGraphics() + studioCheckbox.Text = "X" + autoGraphicsButton.ZIndex = 1 + autoText.ZIndex = 1 + else + if wasManualGraphics then + goToManualGraphics() + end + studioCheckbox.Text = "" + autoGraphicsButton.ZIndex = baseZIndex + 4 + autoText.ZIndex = baseZIndex + 4 + end + end) + else + studioCheckbox.MouseButton1Click:connect(function() + if not studioCheckbox.Active then return end + + if studioCheckbox.Text == "" then + studioCheckbox.Text = "X" + else + studioCheckbox.Text = "" + end + end) + end + end + + local fullscreenCheckbox = createTextButton("",Enum.ButtonStyle.RobloxButton,Enum.FontSize.Size18,UDim2.new(0,25,0,25),UDim2.new(0,30,0,144)) + fullscreenCheckbox.Name = "FullscreenCheckbox" + fullscreenCheckbox.ZIndex = baseZIndex + 4 + fullscreenCheckbox.Parent = gameSettingsMenuFrame + fullscreenCheckbox:SetVerb("ToggleFullScreen") + if UserSettings().GameSettings:InFullScreen() then fullscreenCheckbox.Text = "X" end + if hasGraphicsSlider then + UserSettings().GameSettings.FullscreenChanged:connect(function(isFullscreen) + if isFullscreen then + fullscreenCheckbox.Text = "X" + else + fullscreenCheckbox.Text = "" + end + end) + else + fullscreenCheckbox.MouseButton1Click:connect(function() + if fullscreenCheckbox.Text == "" then + fullscreenCheckbox.Text = "X" + else + fullscreenCheckbox.Text = "" + end + end) + end + + if game:FindFirstChild("NetworkClient") then -- we are playing online + setDisabledState(studioText) + setDisabledState(studioShortcut) + setDisabledState(studioCheckbox) + end + + local backButton + if hasGraphicsSlider then + backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,330)) + backButton.Modal = true + else + backButton = createTextButton("OK",Enum.ButtonStyle.RobloxButtonDefault,Enum.FontSize.Size24,UDim2.new(0,180,0,50),UDim2.new(0,170,0,270)) + backButton.Modal = true + end + + backButton.Name = "BackButton" + backButton.ZIndex = baseZIndex + 4 + backButton.Parent = gameSettingsMenuFrame + + local syncVideoCaptureSetting = nil + + if not macClient then + local videoCaptureLabel = Instance.new("TextLabel") + videoCaptureLabel.Name = "VideoCaptureLabel" + videoCaptureLabel.Text = "After Capturing Video" + videoCaptureLabel.Font = Enum.Font.Arial + videoCaptureLabel.FontSize = Enum.FontSize.Size18 + videoCaptureLabel.Position = UDim2.new(0,32,0,100) + videoCaptureLabel.Size = UDim2.new(0,164,0,18) + videoCaptureLabel.BackgroundTransparency = 1 + videoCaptureLabel.TextColor3 = Color3I(255,255,255) + videoCaptureLabel.TextXAlignment = Enum.TextXAlignment.Left + videoCaptureLabel.ZIndex = baseZIndex + 4 + videoCaptureLabel.Parent = gameSettingsMenuFrame + + local videoNames = {} + local videoNameToItem = {} + videoNames[1] = "Just Save to Disk" + videoNameToItem[videoNames[1]] = Enum.UploadSetting["Never"] + videoNames[2] = "Upload to YouTube" + videoNameToItem[videoNames[2]] = Enum.UploadSetting["Ask me first"] + + local videoCaptureDropDown = nil + videoCaptureDropDown, updateVideoCaptureDropDownSelection = RbxGui.CreateDropDownMenu(videoNames, + function(text) + UserSettings().GameSettings.VideoUploadPromptBehavior = videoNameToItem[text] + end) + videoCaptureDropDown.Name = "VideoCaptureField" + videoCaptureDropDown.ZIndex = baseZIndex + 4 + videoCaptureDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 + videoCaptureDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 + videoCaptureDropDown.Position = UDim2.new(0, 270, 0, 94) + videoCaptureDropDown.Size = UDim2.new(0,200,0,32) + videoCaptureDropDown.Parent = gameSettingsMenuFrame + + syncVideoCaptureSetting = function() + if UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Never"] then + updateVideoCaptureDropDownSelection(videoNames[1]) + elseif UserSettings().GameSettings.VideoUploadPromptBehavior == Enum.UploadSetting["Ask me first"] then + updateVideoCaptureDropDownSelection(videoNames[2]) + else + UserSettings().GameSettings.VideoUploadPromptBehavior = Enum.UploadSetting["Ask me first"] + updateVideoCaptureDropDownSelection(videoNames[2]) + end + end + end + + local cameraLabel = Instance.new("TextLabel") + cameraLabel.Name = "CameraLabel" + cameraLabel.Text = "Character & Camera Controls" + cameraLabel.Font = Enum.Font.Arial + cameraLabel.FontSize = Enum.FontSize.Size18 + cameraLabel.Position = UDim2.new(0,31,0,58) + cameraLabel.Size = UDim2.new(0,224,0,18) + cameraLabel.TextColor3 = Color3I(255,255,255) + cameraLabel.TextXAlignment = Enum.TextXAlignment.Left + cameraLabel.BackgroundTransparency = 1 + cameraLabel.ZIndex = baseZIndex + 4 + cameraLabel.Parent = gameSettingsMenuFrame + + local mouseLockLabel = game.CoreGui.RobloxGui:FindFirstChild("MouseLockLabel",true) + + local enumItems = Enum.ControlMode:GetEnumItems() + local enumNames = {} + local enumNameToItem = {} + for i,obj in ipairs(enumItems) do + enumNames[i] = obj.Name + enumNameToItem[obj.Name] = obj + end + + local cameraDropDown + cameraDropDown, updateCameraDropDownSelection = RbxGui.CreateDropDownMenu(enumNames, + function(text) + UserSettings().GameSettings.ControlMode = enumNameToItem[text] + + pcall(function() + if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + mouseLockLabel.Visible = true + elseif mouseLockLabel then + mouseLockLabel.Visible = false + end + end) + end) + cameraDropDown.Name = "CameraField" + cameraDropDown.ZIndex = baseZIndex + 4 + cameraDropDown.DropDownMenuButton.ZIndex = baseZIndex + 4 + cameraDropDown.DropDownMenuButton.Icon.ZIndex = baseZIndex + 4 + cameraDropDown.Position = UDim2.new(0, 270, 0, 52) + cameraDropDown.Size = UDim2.new(0,200,0,32) + cameraDropDown.Parent = gameSettingsMenuFrame + + return gameSettingsMenuFrame +end + +if LoadLibrary then + RbxGui = LoadLibrary("RbxGui") + local baseZIndex = 0 +if UserSettings then + + local createSettingsDialog = function() + waitForChild(gui,"BottomLeftControl") + settingsButton = gui.BottomLeftControl:FindFirstChild("SettingsButton") + + if settingsButton == nil then + settingsButton = Instance.new("ImageButton") + settingsButton.Name = "SettingsButton" + settingsButton.Image = "rbxasset://textures/ui/SettingsButton.png" + settingsButton.BackgroundTransparency = 1 + settingsButton.Active = false + settingsButton.Size = UDim2.new(0,54,0,46) + settingsButton.Position = UDim2.new(0,2,0,50) + settingsButton.Parent = gui.BottomLeftControl + end + + local shield = Instance.new("TextButton") + shield.Text = "" + shield.Name = "UserSettingsShield" + shield.Active = true + shield.AutoButtonColor = false + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 2 + mainShield = shield + + local frame = Instance.new("Frame") + frame.Name = "Settings" + frame.Position = UDim2.new(0.5, -262, -0.5, -200) + frame.Size = UDim2.new(0, 525, 0, 430) + frame.BackgroundTransparency = 1 + frame.Active = true + frame.Parent = shield + + local settingsFrame = Instance.new("Frame") + settingsFrame.Name = "SettingsStyle" + settingsFrame.Size = UDim2.new(1, 0, 1, 0) + settingsFrame.Style = Enum.FrameStyle.RobloxRound + settingsFrame.Active = true + settingsFrame.ZIndex = baseZIndex + 3 + settingsFrame.Parent = frame + + local gameMainMenu = createGameMainMenu(baseZIndex, shield) + gameMainMenu.Parent = settingsFrame + + gameMainMenu.ScreenshotButton.MouseButton1Click:connect(function() + backToGame(gameMainMenu.ScreenshotButton, shield, settingsButton) + end) + + gameMainMenu.RecordVideoButton.MouseButton1Click:connect(function() + recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) + backToGame(gameMainMenu.RecordVideoButton, shield, settingsButton) + end) + + if settings():FindFirstChild("Game Options") then + pcall(function() + settings():FindFirstChild("Game Options").VideoRecordingChangeRequest:connect(function(recording) + recordingVideo = recording + setRecordGui(recording, gui.StopRecordButton, gameMainMenu.RecordVideoButton) + end) + end) + end + + game.CoreGui.RobloxGui.Changed:connect(function(prop) -- We have stopped recording when we resize + if prop == "AbsoluteSize" and recordingVideo then + recordVideoClick(gameMainMenu.RecordVideoButton, gui.StopRecordButton) + end + end) + + function localPlayerChange() + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + if game.Players.LocalPlayer then + settings().Rendering.EnableFRM = true + elseif inStudioMode then + settings().Rendering.EnableFRM = false + end + end + + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + if game.Players.LocalPlayer ~= nil then + game.Players.LocalPlayer.Changed:connect(function() + localPlayerChange() + end) + else + delay(0,function() + waitForProperty(game.Players,"LocalPlayer") + gameMainMenu.ResetButton.Visible = game.Players.LocalPlayer + game.Players.LocalPlayer.Changed:connect(function() + localPlayerChange() + end) + end) + end + + gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") + if not gameMainMenu.ReportAbuseButton.Visible then + game.ChildAdded:connect(function(child) + if child:IsA("NetworkClient") then + gameMainMenu.ReportAbuseButton.Visible = game:FindFirstChild("NetworkClient") + end + end) + end + + gameMainMenu.ResetButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"ResetConfirmationMenu","up",UDim2.new(0,525,0,370)) + end) + + gameMainMenu.LeaveGameButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"LeaveConfirmationMenu","down",UDim2.new(0,525,0,300)) + end) + + if game.CoreGui.Version >= 4 then -- we can use escape! + game:GetService("GuiService").EscapeKeyPressed:connect(function() + if currentMenuSelection == nil then + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --showFunction + function() + settingsButton.Active = false + updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) + + if syncVideoCaptureSetting then + syncVideoCaptureSetting() + end + + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + shield.Visible = true + shield.Active = true + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end, + --hideFunction + function() + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + shield.Visible = false + settingsButton.Active = true + end) + elseif #lastMenuSelection > 0 then + if #centerDialogs > 0 then + for i = 1, #centerDialogs do + game.GuiService:RemoveCenterDialog(centerDialogs[i]) + centerDialogs[i].Visible = false + end + centerDialogs = {} + end + + goToMenu(lastMenuSelection[#lastMenuSelection]["container"],lastMenuSelection[#lastMenuSelection]["name"], + lastMenuSelection[#lastMenuSelection]["direction"],lastMenuSelection[#lastMenuSelection]["lastSize"]) + + table.remove(lastMenuSelection,#lastMenuSelection) + if #lastMenuSelection == 1 then -- apparently lua can't reduce count to 0... T_T + lastMenuSelection = {} + end + else + resumeGameFunction(shield) + end + end) + end + + local gameSettingsMenu = createGameSettingsMenu(baseZIndex, shield) + gameSettingsMenu.Visible = false + gameSettingsMenu.Parent = settingsFrame + + gameMainMenu.SettingsButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"GameSettingsMenu","left",UDim2.new(0,525,0,350)) + end) + + gameSettingsMenu.BackButton.MouseButton1Click:connect(function() + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + end) + + local resetConfirmationWindow = createResetConfirmationMenu(baseZIndex, shield) + resetConfirmationWindow.Visible = false + resetConfirmationWindow.Parent = settingsFrame + + local leaveConfirmationWindow = createLeaveConfirmationMenu(baseZIndex,shield) + leaveConfirmationWindow.Visible = false + leaveConfirmationWindow.Parent = settingsFrame + + robloxLock(shield) + + settingsButton.MouseButton1Click:connect( + function() + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --showFunction + function() + settingsButton.Active = false + updateCameraDropDownSelection(UserSettings().GameSettings.ControlMode.Name) + + if syncVideoCaptureSetting then + syncVideoCaptureSetting() + end + + goToMenu(settingsFrame,"GameMainMenu","right",UDim2.new(0,525,0,430)) + shield.Visible = true + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + end, + --hideFunction + function() + settingsFrame.Parent:TweenPosition(UDim2.new(0.5, -262,-0.5, -200),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + settingsFrame.Parent:TweenSize(UDim2.new(0,525,0,430),Enum.EasingDirection.InOut,Enum.EasingStyle.Sine,tweenTime,true) + shield.Visible = false + settingsButton.Active = true + end) + end) + + return shield + end + + delay(0, function() + createSettingsDialog().Parent = gui + + gui.BottomLeftControl.SettingsButton.Active = true + gui.BottomLeftControl.SettingsButton.Position = UDim2.new(0,2,0,-2) + + if mouseLockLabel and UserSettings().GameSettings.ControlMode == Enum.ControlMode["Mouse Lock Switch"] then + mouseLockLabel.Visible = true + elseif mouseLockLabel then + mouseLockLabel.Visible = false + end + + -- our script has loaded, get rid of older buttons now + local leaveGameButton = gui.BottomLeftControl:FindFirstChild("Exit") + if leaveGameButton then leaveGameButton:Remove() end + + local toolButton = gui.BottomLeftControl:FindFirstChild("ToolButton") + if toolButton then toolButton:Remove() end + + local topLeft = gui:FindFirstChild("TopLeftControl") + if topLeft then topLeft:Remove() end + + local toggle = gui.BottomLeftControl:FindFirstChild("TogglePlayMode") + if toggle then toggle:Remove() end + + local bottomRightChildren = gui.BottomRightControl:GetChildren() + for i = 1, #bottomRightChildren do + if not string.find(bottomRightChildren[i].Name,"Camera") then + bottomRightChildren[i]:Remove() + end + end + end) + +end --UserSettings call + +local createSaveDialogs = function() + local shield = Instance.new("TextButton") + shield.Text = "" + shield.AutoButtonColor = false + shield.Name = "SaveDialogShield" + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex+1 + + local clearAndResetDialog + local save + local saveLocal + local dontSave + local cancel + + local messageBoxButtons = {} + messageBoxButtons[1] = {} + messageBoxButtons[1].Text = "Save" + messageBoxButtons[1].Style = Enum.ButtonStyle.RobloxButtonDefault + messageBoxButtons[1].Function = function() save() end + messageBoxButtons[2] = {} + messageBoxButtons[2].Text = "Cancel" + messageBoxButtons[2].Function = function() cancel() end + messageBoxButtons[3] = {} + messageBoxButtons[3].Text = "Don't Save" + messageBoxButtons[3].Function = function() dontSave() end + + local saveDialogMessageBox = RbxGui.CreateStyledMessageDialog("Unsaved Changes", "Save your changes to ROBLOX before leaving?", "Confirm", messageBoxButtons) + saveDialogMessageBox.Visible = true + saveDialogMessageBox.Parent = shield + + + local errorBoxButtons = {} + + local buttonOffset = 1 + if game.LocalSaveEnabled then + errorBoxButtons[buttonOffset] = {} + errorBoxButtons[buttonOffset].Text = "Save to Disk" + errorBoxButtons[buttonOffset].Function = function() saveLocal() end + buttonOffset = buttonOffset + 1 + end + errorBoxButtons[buttonOffset] = {} + errorBoxButtons[buttonOffset].Text = "Keep Playing" + errorBoxButtons[buttonOffset].Function = function() cancel() end + errorBoxButtons[buttonOffset+1] = {} + errorBoxButtons[buttonOffset+1].Text = "Don't Save" + errorBoxButtons[buttonOffset+1].Function = function() dontSave() end + + local errorDialogMessageBox = RbxGui.CreateStyledMessageDialog("Upload Failed", "Sorry, we could not save your changes to ROBLOX.", "Error", errorBoxButtons) + errorDialogMessageBox.Visible = false + errorDialogMessageBox.Parent = shield + + local spinnerDialog = Instance.new("Frame") + spinnerDialog.Name = "SpinnerDialog" + spinnerDialog.Style = Enum.FrameStyle.RobloxRound + spinnerDialog.Size = UDim2.new(0, 350, 0, 150) + spinnerDialog.Position = UDim2.new(.5, -175, .5, -75) + spinnerDialog.Visible = false + spinnerDialog.Active = true + spinnerDialog.Parent = shield + + local waitingLabel = Instance.new("TextLabel") + waitingLabel.Name = "WaitingLabel" + waitingLabel.Text = "Saving to ROBLOX..." + waitingLabel.Font = Enum.Font.ArialBold + waitingLabel.FontSize = Enum.FontSize.Size18 + waitingLabel.Position = UDim2.new(0.5, 25, 0.5, 0) + waitingLabel.TextColor3 = Color3.new(1,1,1) + waitingLabel.Parent = spinnerDialog + + local spinnerFrame = Instance.new("Frame") + spinnerFrame.Name = "Spinner" + spinnerFrame.Size = UDim2.new(0, 80, 0, 80) + spinnerFrame.Position = UDim2.new(0.5, -150, 0.5, -40) + spinnerFrame.BackgroundTransparency = 1 + spinnerFrame.Parent = spinnerDialog + + local spinnerIcons = {} + local spinnerNum = 1 + while spinnerNum <= 8 do + local spinnerImage = Instance.new("ImageLabel") + spinnerImage.Name = "Spinner"..spinnerNum + spinnerImage.Size = UDim2.new(0, 16, 0, 16) + spinnerImage.Position = UDim2.new(.5+.3*math.cos(math.rad(45*spinnerNum)), -8, .5+.3*math.sin(math.rad(45*spinnerNum)), -8) + spinnerImage.BackgroundTransparency = 1 + spinnerImage.Image = "http://www.roblox.com/Asset?id=45880710" + spinnerImage.Parent = spinnerFrame + + spinnerIcons[spinnerNum] = spinnerImage + spinnerNum = spinnerNum + 1 + end + + save = function() + saveDialogMessageBox.Visible = false + + --Show the spinner dialog + spinnerDialog.Visible = true + local spin = true + --Make it spin + delay(0, function() + local spinPos = 0 + while spin do + local pos = 0 + + while pos < 8 do + if pos == spinPos or pos == ((spinPos+1)%8) then + spinnerIcons[pos+1].Image = "http://www.roblox.com/Asset?id=45880668" + else + spinnerIcons[pos+1].Image = "http://www.roblox.com/Asset?id=45880710" + end + + pos = pos + 1 + end + spinPos = (spinPos + 1) % 8 + wait(0.2) + end + end) + + --Do the save while the spinner is going, function will wait + local result = game:SaveToRoblox() + if not result then + --Try once more + result = game:SaveToRoblox() + end + + --Hide the spinner dialog + spinnerDialog.Visible = false + --And cause the delay thread to stop + spin = false + + --Now process the result + if result then + --Success, close + game:FinishShutdown(false) + clearAndResetDialog() + else + --Failure, show the second dialog prompt + errorDialogMessageBox.Visible = true + end + end + + saveLocal = function() + errorDialogMessageBox.Visible = false + game:FinishShutdown(true) + clearAndResetDialog() + end + + dontSave = function() + saveDialogMessageBox.Visible = false + errorDialogMessageBox.Visible = false + game:FinishShutdown(false) + clearAndResetDialog() + end + cancel = function() + saveDialogMessageBox.Visible = false + errorDialogMessageBox.Visible = false + clearAndResetDialog() + end + + clearAndResetDialog = function() + saveDialogMessageBox.Visible = true + errorDialogMessageBox.Visible = false + spinnerDialog.Visible = false + shield.Visible = false + game.GuiService:RemoveCenterDialog(shield) + end + + robloxLock(shield) + shield.Visible = false + return shield +end + +local createReportAbuseDialog = function() + --Only show things if we are a NetworkClient + waitForChild(game,"NetworkClient") + + waitForChild(game,"Players") + waitForProperty(game.Players, "LocalPlayer") + local localPlayer = game.Players.LocalPlayer + + local reportAbuseButton + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield, "Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") + reportAbuseButton = gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton + + local shield = Instance.new("TextButton") + shield.Name = "ReportAbuseShield" + shield.Text = "" + shield.AutoButtonColor = false + shield.Active = true + shield.Visible = false + shield.Size = UDim2.new(1,0,1,0) + shield.BackgroundColor3 = Color3I(51,51,51) + shield.BorderColor3 = Color3I(27,42,53) + shield.BackgroundTransparency = 0.4 + shield.ZIndex = baseZIndex + 1 + + local closeAndResetDialgo + + local messageBoxButtons = {} + messageBoxButtons[1] = {} + messageBoxButtons[1].Text = "Ok" + messageBoxButtons[1].Modal = true + messageBoxButtons[1].Function = function() closeAndResetDialog() end + local calmingMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats", messageBoxButtons) + calmingMessageBox.Visible = false + calmingMessageBox.Parent = shield + + local normalMessageBox = RbxGui.CreateMessageDialog("Thanks for your report!", "Our moderators will review the chat logs and determine what happened.", messageBoxButtons) + normalMessageBox.Visible = false + normalMessageBox.Parent = shield + + local frame = Instance.new("Frame") + frame.Name = "Settings" + frame.Position = UDim2.new(0.5, -250, 0.5, -200) + frame.Size = UDim2.new(0.0, 500, 0.0, 400) + frame.BackgroundTransparency = 1 + frame.Active = true + frame.Parent = shield + + local settingsFrame = Instance.new("Frame") + settingsFrame.Name = "ReportAbuseStyle" + settingsFrame.Size = UDim2.new(1, 0, 1, 0) + settingsFrame.Style = Enum.FrameStyle.RobloxRound + settingsFrame.Active = true + settingsFrame.ZIndex = baseZIndex + 1 + settingsFrame.Parent = frame + + local title = Instance.new("TextLabel") + title.Name = "Title" + title.Text = "Report Abuse" + title.TextColor3 = Color3I(221,221,221) + title.Position = UDim2.new(0.5, 0, 0, 30) + title.Font = Enum.Font.ArialBold + title.FontSize = Enum.FontSize.Size36 + title.ZIndex = baseZIndex + 2 + title.Parent = settingsFrame + + local description = Instance.new("TextLabel") + description.Name = "Description" + description.Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action." + description.TextColor3 = Color3I(221,221,221) + description.Position = UDim2.new(0, 0, 0, 55) + description.Size = UDim2.new(1, 0, 0, 40) + description.BackgroundTransparency = 1 + description.Font = Enum.Font.Arial + description.FontSize = Enum.FontSize.Size18 + description.TextWrap = true + description.ZIndex = baseZIndex + 2 + description.TextXAlignment = Enum.TextXAlignment.Left + description.TextYAlignment = Enum.TextYAlignment.Top + description.Parent = settingsFrame + + local playerLabel = Instance.new("TextLabel") + playerLabel.Name = "PlayerLabel" + playerLabel.Text = "Which player?" + playerLabel.BackgroundTransparency = 1 + playerLabel.Font = Enum.Font.Arial + playerLabel.FontSize = Enum.FontSize.Size18 + playerLabel.Position = UDim2.new(0.025,0,0,100) + playerLabel.Size = UDim2.new(0.4,0,0,36) + playerLabel.TextColor3 = Color3I(255,255,255) + playerLabel.TextXAlignment = Enum.TextXAlignment.Left + playerLabel.ZIndex = baseZIndex + 2 + playerLabel.Parent = settingsFrame + + local abusingPlayer = nil + local abuse = nil + local submitReportButton = nil + + local updatePlayerSelection = nil + local createPlayersDropDown = function() + local players = game:GetService("Players") + local playerNames = {} + local nameToPlayer = {} + local children = players:GetChildren() + local pos = 1 + if children then + for i, player in ipairs(children) do + if player:IsA("Player") and player ~= localPlayer then + playerNames[pos] = player.Name + nameToPlayer[player.Name] = player + pos = pos + 1 + end + end + end + local playerDropDown = nil + playerDropDown, updatePlayerSelection = RbxGui.CreateDropDownMenu(playerNames, + function(playerName) + abusingPlayer = nameToPlayer[playerName] + if abuse and abusingPlayer then + submitReportButton.Active = true + end + end) + playerDropDown.Name = "PlayersComboBox" + playerDropDown.ZIndex = baseZIndex + 2 + playerDropDown.Position = UDim2.new(.425, 0, 0, 102) + playerDropDown.Size = UDim2.new(.55,0,0,32) + + return playerDropDown + end + + local abuseLabel = Instance.new("TextLabel") + abuseLabel.Name = "AbuseLabel" + abuseLabel.Text = "What did they do?" + abuseLabel.Font = Enum.Font.Arial + abuseLabel.BackgroundTransparency = 1 + abuseLabel.FontSize = Enum.FontSize.Size18 + abuseLabel.Position = UDim2.new(0.025,0,0,140) + abuseLabel.Size = UDim2.new(0.4,0,0,36) + abuseLabel.TextColor3 = Color3I(255,255,255) + abuseLabel.TextXAlignment = Enum.TextXAlignment.Left + abuseLabel.ZIndex = baseZIndex + 2 + abuseLabel.Parent = settingsFrame + + local abuses = {"Bad Words or Threats","Bad Username","Talking about Dating","Account Trading or Sharing","Asking Personal Questions","Rude or Mean Behavior","False Reporting Me"} + local abuseDropDown, updateAbuseSelection = RbxGui.CreateDropDownMenu(abuses, + function(abuseText) + abuse = abuseText + if abuse and abusingPlayer then + submitReportButton.Active = true + end + end, true) + abuseDropDown.Name = "AbuseComboBox" + abuseDropDown.ZIndex = baseZIndex + 2 + abuseDropDown.Position = UDim2.new(0.425, 0, 0, 142) + abuseDropDown.Size = UDim2.new(0.55,0,0,32) + abuseDropDown.Parent = settingsFrame + + local shortDescriptionLabel = Instance.new("TextLabel") + shortDescriptionLabel.Name = "ShortDescriptionLabel" + shortDescriptionLabel.Text = "Short Description: (optional)" + shortDescriptionLabel.Font = Enum.Font.Arial + shortDescriptionLabel.FontSize = Enum.FontSize.Size18 + shortDescriptionLabel.Position = UDim2.new(0.025,0,0,180) + shortDescriptionLabel.Size = UDim2.new(0.95,0,0,36) + shortDescriptionLabel.TextColor3 = Color3I(255,255,255) + shortDescriptionLabel.TextXAlignment = Enum.TextXAlignment.Left + shortDescriptionLabel.BackgroundTransparency = 1 + shortDescriptionLabel.ZIndex = baseZIndex + 2 + shortDescriptionLabel.Parent = settingsFrame + + local shortDescriptionWrapper = Instance.new("Frame") + shortDescriptionWrapper.Name = "ShortDescriptionWrapper" + shortDescriptionWrapper.Position = UDim2.new(0.025,0,0,220) + shortDescriptionWrapper.Size = UDim2.new(0.95,0,1,-310) + shortDescriptionWrapper.BackgroundColor3 = Color3I(0,0,0) + shortDescriptionWrapper.BorderSizePixel = 0 + shortDescriptionWrapper.ZIndex = baseZIndex + 2 + shortDescriptionWrapper.Parent = settingsFrame + + local shortDescriptionBox = Instance.new("TextBox") + shortDescriptionBox.Name = "TextBox" + shortDescriptionBox.Text = "" + shortDescriptionBox.ClearTextOnFocus = false + shortDescriptionBox.Font = Enum.Font.Arial + shortDescriptionBox.FontSize = Enum.FontSize.Size18 + shortDescriptionBox.Position = UDim2.new(0,3,0,3) + shortDescriptionBox.Size = UDim2.new(1,-6,1,-6) + shortDescriptionBox.TextColor3 = Color3I(255,255,255) + shortDescriptionBox.TextXAlignment = Enum.TextXAlignment.Left + shortDescriptionBox.TextYAlignment = Enum.TextYAlignment.Top + shortDescriptionBox.TextWrap = true + shortDescriptionBox.BackgroundColor3 = Color3I(0,0,0) + shortDescriptionBox.BorderSizePixel = 0 + shortDescriptionBox.ZIndex = baseZIndex + 2 + shortDescriptionBox.Parent = shortDescriptionWrapper + + submitReportButton = Instance.new("TextButton") + submitReportButton.Name = "SubmitReportBtn" + submitReportButton.Active = false + submitReportButton.Modal = true + submitReportButton.Font = Enum.Font.Arial + submitReportButton.FontSize = Enum.FontSize.Size18 + submitReportButton.Position = UDim2.new(0.1, 0, 1, -80) + submitReportButton.Size = UDim2.new(0.35,0,0,50) + submitReportButton.AutoButtonColor = true + submitReportButton.Style = Enum.ButtonStyle.RobloxButtonDefault + submitReportButton.Text = "Submit Report" + submitReportButton.TextColor3 = Color3I(255,255,255) + submitReportButton.ZIndex = baseZIndex + 2 + submitReportButton.Parent = settingsFrame + + submitReportButton.MouseButton1Click:connect(function() + if submitReportButton.Active then + if abuse and abusingPlayer then + frame.Visible = false + game.Players:ReportAbuse(abusingPlayer, abuse, shortDescriptionBox.Text) + if abuse == "Rude or Mean Behavior" or abuse == "False Reporting Me" then + calmingMessageBox.Visible = true + else + normalMessageBox.Visible = true + end + else + closeAndResetDialog() + end + end + end) + + local cancelButton = Instance.new("TextButton") + cancelButton.Name = "CancelBtn" + cancelButton.Font = Enum.Font.Arial + cancelButton.FontSize = Enum.FontSize.Size18 + cancelButton.Position = UDim2.new(0.55, 0, 1, -80) + cancelButton.Size = UDim2.new(0.35,0,0,50) + cancelButton.AutoButtonColor = true + cancelButton.Style = Enum.ButtonStyle.RobloxButtonDefault + cancelButton.Text = "Cancel" + cancelButton.TextColor3 = Color3I(255,255,255) + cancelButton.ZIndex = baseZIndex + 2 + cancelButton.Parent = settingsFrame + + closeAndResetDialog = function() + --Delete old player combo box + local oldComboBox = settingsFrame:FindFirstChild("PlayersComboBox") + if oldComboBox then + oldComboBox.Parent = nil + end + + abusingPlayer = nil updatePlayerSelection(nil) + abuse = nil updateAbuseSelection(nil) + submitReportButton.Active = false + shortDescriptionBox.Text = "" + frame.Visible = true + calmingMessageBox.Visible = false + normalMessageBox.Visible = false + shield.Visible = false + reportAbuseButton.Active = true + game.GuiService:RemoveCenterDialog(shield) + end + + cancelButton.MouseButton1Click:connect(closeAndResetDialog) + + reportAbuseButton.MouseButton1Click:connect( + function() + createPlayersDropDown().Parent = settingsFrame + table.insert(centerDialogs,shield) + game.GuiService:AddCenterDialog(shield, Enum.CenterDialogType.ModalDialog, + --ShowFunction + function() + reportAbuseButton.Active = false + shield.Visible = true + mainShield.Visible = false + end, + --HideFunction + function() + reportAbuseButton.Active = true + shield.Visible = false + end) + end) + + robloxLock(shield) + return shield +end + +local createChatBar = function() + --Only show a chat bar if we are a NetworkClient + waitForChild(game, "NetworkClient") + + waitForChild(game, "Players") + waitForProperty(game.Players, "LocalPlayer") + + local chatBar = Instance.new("Frame") + chatBar.Name = "ChatBar" + chatBar.Size = UDim2.new(1, 0, 0, 22) + chatBar.Position = UDim2.new(0, 0, 1, 0) + chatBar.BackgroundColor3 = Color3.new(0,0,0) + chatBar.BorderSizePixel = 0 + + local chatBox = Instance.new("TextBox") + chatBox.Text = "" + chatBox.Visible = false + chatBox.Size = UDim2.new(1,-4,1,0) + chatBox.Position = UDim2.new(0,2,0,0) + chatBox.TextXAlignment = Enum.TextXAlignment.Left + chatBox.Font = Enum.Font.Arial + chatBox.ClearTextOnFocus = false + chatBox.FontSize = Enum.FontSize.Size14 + chatBox.TextColor3 = Color3.new(1,1,1) + chatBox.BackgroundTransparency = 1 + --chatBox.Parent = chatBar + + local chatButton = Instance.new("TextButton") + chatButton.Size = UDim2.new(1,-4,1,0) + chatButton.Position = UDim2.new(0,2,0,0) + chatButton.AutoButtonColor = false + chatButton.Text = "To chat click here or press \"/\" key" + chatButton.TextXAlignment = Enum.TextXAlignment.Left + chatButton.Font = Enum.Font.Arial + chatButton.FontSize = Enum.FontSize.Size14 + chatButton.TextColor3 = Color3.new(1,1,1) + chatButton.BackgroundTransparency = 1 + --chatButton.Parent = chatBar + + local activateChat = function() + if chatBox.Visible then + return + end + chatButton.Visible = false + chatBox.Text = "" + chatBox.Visible = true + chatBox:CaptureFocus() + end + + chatButton.MouseButton1Click:connect(activateChat) + + local hotKeyEnabled = true + local toggleHotKey = function(value) + hotKeyEnabled = value + end + + local guiService = game:GetService("GuiService") + local newChatMode = pcall(function() + --guiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) + --guiService.SpecialKeyPressed:connect(function(key) if key == Enum.SpecialKey.ChatHotkey and hotKeyEnabled then activateChat() end end) + end) + if not newChatMode then + --guiService:AddKey("/") + --guiService.KeyPressed:connect(function(key) if key == "/" and hotKeyEnabled then activateChat() end end) + end + + chatBox.FocusLost:connect( + function(enterPressed) + if enterPressed then + if chatBox.Text ~= "" then + local str = chatBox.Text + if string.sub(str, 1, 1) == '%' then + game.Players:TeamChat(string.sub(str, 2)) + else + game.Players:Chat(str) + end + end + end + chatBox.Text = "" + chatBox.Visible = false + chatButton.Visible = true + end) + robloxLock(chatBar) + return chatBar, toggleHotKey +end + +--Spawn a thread for the Save dialogs +local isSaveDialogSupported = pcall(function() local var = game.LocalSaveEnabled end) +if isSaveDialogSupported then + delay(0, + function() + local saveDialogs = createSaveDialogs() + saveDialogs.Parent = gui + + game.RequestShutdown = function() + table.insert(centerDialogs,saveDialogs) + game.GuiService:AddCenterDialog(saveDialogs, Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + saveDialogs.Visible = true + end, + --HideFunction + function() + saveDialogs.Visible = false + end) + + return true + end + end) +end + +--Spawn a thread for the Report Abuse dialogs +delay(0, + function() + createReportAbuseDialog().Parent = gui + waitForChild(gui,"UserSettingsShield") + waitForChild(gui.UserSettingsShield, "Settings") + waitForChild(gui.UserSettingsShield.Settings,"SettingsStyle") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle,"GameMainMenu") + waitForChild(gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu, "ReportAbuseButton") + gui.UserSettingsShield.Settings.SettingsStyle.GameMainMenu.ReportAbuseButton.Active = true + end) + +--Spawn a thread for Chat Bar +local coreGuiVersion = game.CoreGui.Version +local success, luaChat = pcall(function() return game.GuiService.UseLuaChat end) +if success and luaChat then + + --[[delay(0, + function() + waitForChild(game, "Players") + waitForProperty(game.Players, "LocalPlayer") + + local advancedChatBarSupported = game.Players.LocalPlayer.ChatMode + local chatBar, toggleHotKey = createChatBar() + + [if advancedChatBarSupported then + local function toggleChatBar(chatMode) + if chatMode == Enum.ChatMode.Menu then + chatBar.Parent = nil + game.GuiService:SetGlobalSizeOffsetPixel(0,0) + toggleHotKey(false) + elseif chatMode == Enum.ChatMode.TextAndMenu then + --chatBar.Parent = gui + --game.GuiService:SetGlobalSizeOffsetPixel(0,-22) + toggleHotKey(true) + end + end + game.Players.LocalPlayer.Changed:connect( + function(prop) + if prop == "ChatMode" then + toggleChatBar(game.Players.LocalPlayer.ChatMode) + end + end) + toggleChatBar(game.Players.LocalPlayer.ChatMode) + else + --chatBar.Parent = gui + --game.GuiService:SetGlobalSizeOffsetPixel(0,-22) + end + end)]] +end + + +local BurningManPlaceID = 41324860 +-- TODO: remove click to walk completely if testing shows we don't need it +-- Removes click to walk option from Burning Man +delay(0, + function() + waitForChild(game,"NetworkClient") + waitForChild(game,"Players") + waitForProperty(game.Players, "LocalPlayer") + waitForProperty(game.Players.LocalPlayer, "Character") + waitForChild(game.Players.LocalPlayer.Character, "Humanoid") + waitForProperty(game, "PlaceId") + + if game.PlaceId == BurningManPlaceID then + game.Players.LocalPlayer.Character.Humanoid:SetClickToWalkEnabled(false) + game.Players.LocalPlayer.CharacterAdded:connect(function(character) + waitForChild(character, "Humanoid") + character.Humanoid:SetClickToWalkEnabled(false) + end) + end + end) + +end --LoadLibrary if diff --git a/app/files/CoreGui/48488235 b/app/files/CoreGui/48488235 new file mode 100644 index 0000000..8ef1b10 --- /dev/null +++ b/app/files/CoreGui/48488235 @@ -0,0 +1,3074 @@ +-------------------- +-- Super Util +-------------------- + +local ADMINS = +{ + rbadam = 1, + adamintygum = 1, + androidtest = 1, + robloxfrenchie = 1, + jackssmirkingrevenge = 1, + lindapepita = 1, + vaiobot = 1, + goddessnoob = 1, + effward = 1, + blockhaak = 1, + drewbda = 1, + ['659223'] = 1, + tone = 1, + fasterbuilder19 = 1, + zeuxcg = 1, + concol2 = 1, + reesemcblox = 1, + jeditkacheff = 'http://www.syntax.eco/asset/?id=134032333', + whkm1980 = 1, + chiefjustus = 1, + ellissar = 1, + arbolito = 1, + noob007 = 1, + limon = 1, + cmed = 1, + hawkington = 1, + tabemono = 1, + autoconfig = 1, + brighteyes = 1, + monsterinc3d = 1, + mrdoombringer = 1, + isolatedevent = 1, + countonconnor = 1, + scubasomething = 1, + onlytwentycharacters = 1, + lordrugdumph = 1, + bellavour = 1, + ['david.baszucki'] = 1, + ibanez2189 = 1, + sorcus = 'http://www.syntax.eco/asset/?id=113059239', + deeana00 = 1, + thelorekt = 1, + niquemonster = 1, + thorasaur = 1, + ['mse6'] = 1, + corgiparade = 1, + varia = 1, + ['4runningwolves'] = 1, + pulmoesflor = 1, + olive71 = 1, + groundcontroll2 = 1, + gurukrish = 1, + countvelcro = 1, + iltalumi = 1, + juanjuan23 = 1, + ostrichsized = 1, + jackintheblox = 1, + slingshotjunkie = 1, + gordonrox24 = 1, + sharpnine = 1, + motornerve = 1, + motornerve = 1, + watchmedogood = 1, + jmargh = 1, + jaykorean = 1, + foyle = 1, + majortom4321 = 1, + shedletsky = 'http://www.syntax.eco/asset/?id=105897927', + supernovacaine = 1, + ffjosh = 1, + sickenedmonkey = 1, + doughtless = 1, + kbux = 1, + totallynothere = 1, + erzastar = 1, + keith = 1, + chro = 1, + solarcrane = 1, + glorioussalt = 1, + uristmcsparks = 1, + itolauren = 1, + malcomso = 1, + stickmasterluke = 1, + windlight13 = 1, + yumyumcheerios = 1, + stravant = 1, + byteme = 1, + imaginationsensation = 1, + ['matt.dusek'] = 1, + mcrtest = 1, + seranok = 1, + maxvee = 1, + coatp0cketninja = 1, + screenme = 1, + b1tsh1ft = 1, + totbl = 1, + aquabot8 = 1, + grossinger = 1, + merely = 1, + cdakkar = 1, + siekiera = 1, + robloxkidsaccount = 1, + flotsamthespork = 1, + soggoth = 1, + phil = 1, + orcasparkles = 1, + skullgoblin = 1, + rickrosstheb0ss = 1, + argonpirate = 1, + nobledragon = 1, + squidcod = 1, + raeglyn = 1, + robloxsai = 'http://www.syntax.eco/asset/?id=161078086', + briarroze = 1, + hawkeyebandit = 1, + dapperbuffalo = 1, + vukota = 1, + swiftstone = 1, + gemlocker = 1, + loopylens = 1, + tarabyte = 1, + timobius = 1, + tobotrobot = 1, + foster008 = 1, + twberg = 1, + darthvaden = 1, + khanovich = 1, + codewriter = 1, + vladthefirst = 1, + phaedre = 1, + gorroth = 1, + sphinxshen = 1, + jynj1984 = 1, + roboyz = 1, + zodiaczak = 1, +} + + + +local Images = { + bottomDark = '94691904', + bottomLight = '94691940', + midDark = '94691980', + midLight = '94692025', + LargeDark = '96098866', + LargeLight = '96098920', + LargeHeader = '96097470', + NormalHeader = '94692054', + LargeBottom = '96397271', + NormalBottom = '94754966', + DarkBluePopupMid = '97114905', + LightBluePopupMid = '97114905', + DarkPopupMid = '97112126', + LightPopupMid = '97109338', + DarkBluePopupTop = '97114838', + DarkBluePopupBottom = '97114758', + DarkPopupBottom = '100869219', + LightPopupBottom = '97109175', +} + +local BASE_TWEEN = .25 + +local MOUSE_HOLD_TIME = .15 +local MOUSE_DRAG_DISTANCE = 15 + +--[[ + Generic object Create function, which I am using to create Gui's + Thanks to Stravant! +--]] +local Obj = {} +function Obj.Create(guiType) + return function(data) + local obj = Instance.new(guiType) + for k, v in pairs(data) do + if type(k) == 'number' then + v.Parent = obj + else + obj[k] = v + end + end + return obj + end +end + +--[[ + makes a full sized background for a guiobject + @Args: + imgName asset name of image to fill background + @Return: background gui object +--]] +function MakeBackgroundGuiObj(imgName) + return Obj.Create'ImageLabel' + { + Name = 'Background', + BackgroundTransparency = 1, + Image = imgName, + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1,0,1,0), + } +end +--[[ turns 255 integer color value to a color3 --]] +function Color3I(r,g,b) + return Color3.new(r/255,g/255,b/255) +end + +--[[ + Gets correct icon for builder's club status to display by name + @Args: + membershipType Enum of membership status + @Return: string of image asset +--]] +function getMembershipTypeIcon(membershipType,player) + if player:IsInGroup(1200769) then + return "http://www.syntax.eco/asset/?id=99727663" + elseif membershipType == Enum.MembershipType.None then + return "" + elseif membershipType == Enum.MembershipType.BuildersClub then + return "rbxasset://textures/ui/TinyBcIcon.png" + elseif membershipType == Enum.MembershipType.TurboBuildersClub then + return "rbxasset://textures/ui/TinyTbcIcon.png" + elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then + return "rbxasset://textures/ui/TinyObcIcon.png" + else + error("Unknown membershipType" .. membershipType) + end +end + +local function getFriendStatusIcon(friendStatus) + if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then + return "" + elseif friendStatus == Enum.FriendStatus.Friend then + return "http://www.syntax.eco/asset/?id=99749771" + elseif friendStatus == Enum.FriendStatus.FriendRequestSent then + return "http://www.syntax.eco/asset/?id=99776888" + elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then + return "http://www.syntax.eco/asset/?id=99776838" + else + error("Unknown FriendStatus: " .. friendStatus) + end +end + + +--[[ + Utility function to create buttons for the popup menus + @Args: + nparent what to parent this button to + ntext text to put on this button + index number index of this entry in menu + last is this the last element of the popup menu + @Return: a popup menu button +--]] +function MakePopupButton(nparent,ntext,index,last) + local tobj = Obj.Create"ImageButton" + { + Name = 'ReportButton', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,1*index,0), + Size = UDim2.new(1, 0, 1, 0), + ZIndex=7, + Obj.Create'TextLabel' + { + Name = 'ButtonText', + BackgroundTransparency = 1, + Position = UDim2.new(.07, 0, .07, 0), + Size = UDim2.new(.86,0,.86,0), + Parent = HeaderFrame, + Font = 'ArialBold', + Text = ntext, + FontSize = 'Size14', + TextScaled = true, + TextColor3 = Color3.new(1,1,1), + TextStrokeTransparency = 1, + ZIndex=7, + }, + Parent = nparent, + } + if index==0 then + tobj.Image = 'http://www.syntax.eco/asset/?id=97108784' + elseif last then + if index%2==1 then + tobj.Image = 'http://www.syntax.eco/asset/?id='.. Images['LightPopupBottom'] + else + tobj.Image = 'http://www.syntax.eco/asset/?id='.. Images['DarkPopupBottom'] + end + else + if index%2==1 then + tobj.Image = 'http://www.syntax.eco/asset/?id=97112126' + else + tobj.Image = 'http://www.syntax.eco/asset/?id=97109338' + end + end + return tobj +end + + +--[[ + obligatory wait for child function + @Args: + parent Parent object to look for child in + child name of child object to look for + @Return: object waited for +--]] +function WaitForChild(parent,child) + while not parent:FindFirstChild(child) do + wait() debugprint(" child "..parent.Name.." waiting for "..child) + end + return parent[child] +end + + --------------------------- + -- Workspace Objects + --------------------------- + +-- might want to move all this to an init function, wait for localplayer elsewhere +local Players = game:GetService('Players') +-- make sure this doesn't run on the server(it will if you dont do this) +while not Players.LocalPlayer do + Players.Changed:wait() +end + +local LocalPlayer = Players.LocalPlayer +local Mouse = LocalPlayer:GetMouse() + +local ScreenGui = Obj.Create"Frame" +{ + Name = 'PlayerListScreen', + Size = UDim2.new(1, 0, 1, 0), + BackgroundTransparency = 1, + Parent = script.Parent +} +local MainFrame = Obj.Create"Frame" +{ + Name = 'LeaderBoardFrame', + Position = UDim2.new(1, -150, 0.005, 0), + Size = UDim2.new(0, 150, 0, 800), + BackgroundTransparency = 1, + Parent = ScreenGui, +} + +--frame used for expanding leaderstats when frame is 'focused' +local FocusFrame = Obj.Create"Frame" +{ + Name = 'FocusFrame', + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1, 0, 0, 100), + BackgroundTransparency = 1, + Active = true, + Parent = MainFrame, +} + +local TemplateFrameYSize = 0.670000017 + + -- HEADER +local HeaderFrame = Obj.Create"Frame" +{ + Name = 'Header', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,0,0), + Size = UDim2.new(1, 0, .07, 0), + Parent = MainFrame, + MakeBackgroundGuiObj('http://www.syntax.eco/asset/?id=94692054'), +} + local HeaderFrameHeight = HeaderFrame.Size.Y.Scale + local MaximizeButton = Obj.Create"ImageButton" + { + Name = 'MaximizeButton', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1,0,1,0), + Parent = HeaderFrame, + } + local HeaderName = Obj.Create"TextLabel" + { + Name = 'PlayerName', + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, .01, 0), + Size = UDim2.new(.98,0,.38,0), + Parent = HeaderFrame, + Font = 'ArialBold', + Text = LocalPlayer.Name, + FontSize='Size24', + --TextScaled = true, + TextColor3 = Color3.new(1,1,1), + TextStrokeColor3 = Color3.new(0,0,0), + TextStrokeTransparency = 0, + TextXAlignment = 'Right', + TextYAlignment = 'Center', + } + local HeaderScore = Obj.Create"TextLabel" + { + Name = 'PlayerScore', + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, .4, 0), + Size = UDim2.new(.98,0,0,30), + Parent = HeaderFrame, + Font = 'ArialBold', + Text = '', + FontSize='Size24', + TextYAlignment = 'Top', + --TextScaled = true, + TextColor3 = Color3.new(1,1,1), + TextStrokeTransparency = 1, + TextXAlignment = 'Right', + TextYAlignment = 'Top', + } + -- BOTTOM + --used for shifting bottom frame for mouse over effects +local BottomShiftFrame = Obj.Create"Frame" +{ + Name= 'BottomShiftFrame', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,HeaderFrameHeight,0), + Size = UDim2.new(1,0,1,0), + Parent=MainFrame, +} + local BottomFrame = Obj.Create"Frame" + { + Name = 'Bottom', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,.07,0), + Size = UDim2.new(1, 0, .03, 0), + Parent = BottomShiftFrame, + MakeBackgroundGuiObj('http://www.syntax.eco/asset/?id=94754966'), + } + local ExtendButton = Obj.Create"ImageButton" + { + Name = 'bigbutton', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1,0,1.5,0), + ZIndex = 3, + Parent = BottomFrame, + } + local ExtendTab = Obj.Create"ImageButton" + { + Name = 'extendTab', + Active = true, + BackgroundTransparency = 1, + Image = 'http://www.syntax.eco/asset/?id=94692731', + Position = UDim2.new(.608, 0, .3, 0), + Size = UDim2.new(.3,0,.7,0), + Parent = BottomFrame, + } +local TopClipFrame = Obj.Create"Frame" +{ + Name = 'ListFrame', + BackgroundTransparency = 1, + Position = UDim2.new(-1,0,.07,0), + Size = UDim2.new(2, 0, 1, 0), + Parent = MainFrame, + ClipsDescendants = true, +} + local BottomClipFrame = Obj.Create"Frame" + { + Name = 'BottomFrame', + BackgroundTransparency = 1, + Position = UDim2.new(0,0, - .8,0), + Size = UDim2.new(1, 0, 1, 0), + Parent = TopClipFrame, + ClipsDescendants = true, + } + local ScrollBarFrame = Obj.Create"Frame" + { + Name = 'ScrollBarFrame', + BackgroundTransparency = 1, + Position = UDim2.new(.987,0,.8,0), + Size = UDim2.new(.01, 0, .2, 0), + Parent = BottomClipFrame, + } + local ScrollBar = Obj.Create"Frame" + { + Name = 'ScrollBar', + BackgroundTransparency = 0, + BackgroundColor3 = Color3.new(.2,.2,.2), + Position = UDim2.new(0,0,0,0), + Size = UDim2.new(1, 0, .5, 0), + ZIndex = 5, + Parent = ScrollBarFrame, + + } + local ListFrame = Obj.Create"Frame" + { + Name = 'SubFrame', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,.8,0), + Size = UDim2.new(1, 0, 1, 0), + Parent = BottomClipFrame, + } +local PopUpClipFrame = Obj.Create"Frame" +{ + Name = 'PopUpFrame', + BackgroundTransparency = 1, + SizeConstraint='RelativeXX', + Position = MainFrame.Position + UDim2.new( 0,-150,0,0), + Size = UDim2.new(0,150,0,800), + Parent = MainFrame, + ClipsDescendants = true, + ZIndex=7, +} +local PopUpPanel = nil + local PopUpPanelTemplate = Obj.Create"Frame" + { + Name = 'Panel', + BackgroundTransparency = 1, + Position = UDim2.new(1,0,0,0), + Size = UDim2.new(1,0,.032,0), + Parent = PopUpClipFrame, + } + +local StatTitles = Obj.Create"Frame" +{ + Name = 'StatTitles', + BackgroundTransparency = 1, + Position = UDim2.new(0,0,1,-10), + Size = UDim2.new(1, 0, 0, 0), + Parent = HeaderFrame, +} + +local IsMinimized = Instance.new('BoolValue') +local IsMaximized = Instance.new('BoolValue') +local IsTabified = Instance.new('BoolValue') +local AreNamesExpanded = Instance.new('BoolValue') + + +local MiddleTemplate = Obj.Create"Frame" +{ + Name = 'MidTemplate', + BackgroundTransparency = 1, + Position = UDim2.new(100,0,.07,0), + Size = UDim2.new(.5, 0, .025, 0),--UDim2.new(1, 0, .03, 0), + Obj.Create'ImageLabel' + { + Name = 'BCLabel', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(.005, 5, .20, 0), + Size = UDim2.new(0,16,0,16), + SizeConstraint = 'RelativeYY', + Image = "", + ZIndex = 3, + }, + Obj.Create'ImageLabel' + { + Name = 'FriendLabel', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(.005, 5, .15, 0), + Size = UDim2.new(0,16,0,16), + SizeConstraint = 'RelativeYY', + Image = "", + ZIndex = 3, + }, + Obj.Create"ImageButton" + { + Name = 'ClickListener', + Active = true, + BackgroundTransparency = 1, + Position = UDim2.new(.005, 1, 0, 0), + Size = UDim2.new(.96,0,1,0), + ZIndex = 3, + }, + Obj.Create"Frame" + { + Name = 'TitleFrame', + BackgroundTransparency = 1, + Position = UDim2.new(.01, 0, 0, 0), + Size = UDim2.new(0,140,1,0), + ClipsDescendants=true, + Obj.Create"TextLabel" + { + Name = 'Title', + BackgroundTransparency = 1, + Position = UDim2.new(0, 5, 0, 0), + Size = UDim2.new(100,0,1,0), + Font = 'Arial', + FontSize='Size14', + TextColor3 = Color3.new(1,1,1), + TextXAlignment = 'Left', + TextYAlignment = 'Center', + ZIndex = 3, + }, + }, + + Obj.Create"TextLabel" + { + Name = 'PlayerScore', + BackgroundTransparency = 1, + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(1,0,1,0), + Font = 'ArialBold', + Text = '', + FontSize='Size14', + TextColor3 = Color3.new(1,1,1), + TextXAlignment = 'Right', + TextYAlignment = 'Center', + ZIndex = 3, + }, + --Obj.Create'IntValue'{Name = 'ID'}, + --Obj.Create'ObjectValue'{Name = 'Player'}, + --Obj.Create'IntValue'{Name = 'Score'}, + ZIndex = 3, +} +local MiddleBGTemplate = Obj.Create"Frame" +{ + Name = 'MidBGTemplate', + BackgroundTransparency = 1, + Position = UDim2.new(100,0,.07,0), + Size = UDim2.new(.5, 0, .025, 0),--UDim2.new(1, 0, .03, 0), + MakeBackgroundGuiObj('http://www.syntax.eco/asset/?id=94692025'), + +} + + -- REPORT ABUSE OBJECTS + +local ReportAbuseShield = Obj.Create"TextButton" +{ + Name = "ReportAbuseShield", + Text = "", + AutoButtonColor = false, + Active = true, + Visible = true, + Size = UDim2.new(1,0,1,0), + BackgroundColor3 = Color3I(51,51,51), + BorderColor3 = Color3I(27,42,53), + BackgroundTransparency = 1, +} + +local ReportAbuseFrame = Obj.Create "Frame" +{ + Name = "Settings", + Position = UDim2.new(0.5, - 250, 0.5, - 200), + Size = UDim2.new(0.0, 500, 0.0, 400), + BackgroundTransparency = 1, + Active = true, + Parent = ReportAbuseShield, +} + +local AbuseSettingsFrame = Obj.Create"Frame" +{ + Name = "ReportAbuseStyle", + Size = UDim2.new(1, 0, 1, 0), + Active = true, + BackgroundTransparency = 1, + MakeBackgroundGuiObj('http://www.syntax.eco/asset/?id=96488767'), -- 96480351'), + Obj.Create"TextLabel" + { + Name = "Title", + Text = "Report Abuse", + TextColor3 = Color3I(221,221,221), + Position = UDim2.new(0.5, 0, 0, 30), + Font = Enum.Font.ArialBold, + FontSize = Enum.FontSize.Size36, + }, + Obj.Create"TextLabel" + { + Name = "Description", + Text = "This will send a complete report to a moderator. The moderator will review the chat log and take appropriate action.", + TextColor3 = Color3I(221,221,221), + Position = UDim2.new(.01, 0, 0, 55), + Size = UDim2.new(.99, 0, 0, 40), + BackgroundTransparency = 1, + Font = Enum.Font.Arial, + FontSize = Enum.FontSize.Size18, + TextWrap = true, + TextXAlignment = Enum.TextXAlignment.Left, + TextYAlignment = Enum.TextYAlignment.Top, + }, + Obj.Create"TextLabel" + { + Name = "AbuseLabel", + Text = "What did they do?", + Font = Enum.Font.Arial, + BackgroundTransparency = 1, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0.025,0,0,140), + Size = UDim2.new(0.4,0,0,36), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Left, + }, + Obj.Create"TextLabel" + { + Name = "ShortDescriptionLabel", + Text = "Short Description: (optional)", + Font = Enum.Font.Arial, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0.025,0,0,180), + Size = UDim2.new(0.95,0,0,36), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Left, + BackgroundTransparency = 1, + }, + Obj.Create"TextLabel" + { + Name = "ReportingPlayerLabel", + Text = "Reporting Player", + BackgroundTransparency = 1, + Font = Enum.Font.Arial, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0.025,0,0,100), + Size = UDim2.new(0.95,0,0,36), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Left, + Parent = AbuseSettingsFrame + }, + + Parent = ReportAbuseFrame, +} + +local AbusePlayerLabel = Obj.Create"TextLabel" +{ + Name = "PlayerLabel", + Text = "", + BackgroundTransparency = 1, + Font = Enum.Font.ArialBold, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0.025,0,0,100), + Size = UDim2.new(0.95,0,0,36), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Right, + Parent = AbuseSettingsFrame +} + +local SubmitReportButton = Obj.Create"ImageButton" +{ + Name = "SubmitReportBtn", + Active = false, + BackgroundTransparency = 1, + Position = UDim2.new(.5, - 200, 1, - 80), + Size = UDim2.new(0,150,0,50), + AutoButtonColor = false, + Image = 'http://www.syntax.eco/asset/?id=96502438', -- 96501119', + Parent = AbuseSettingsFrame, +} + +local CancelReportButton = Obj.Create"ImageButton" +{ + Name = "CancelBtn", + BackgroundTransparency = 1, + Position = UDim2.new(0.5, 50, 1, - 80), + Size = UDim2.new(0,150,0,50), + AutoButtonColor = true, + Image = 'http://www.syntax.eco/asset/?id=96500683', + Parent = AbuseSettingsFrame, +} + +local AbuseDescriptionWrapper = Obj.Create"Frame" +{ + Name = "AbuseDescriptionWrapper", + Position = UDim2.new(0.025,0,0,220), + Size = UDim2.new(0.95,0,1, - 310), + BackgroundColor3 = Color3I(0,0,0), + BorderSizePixel = 0, + Parent = AbuseSettingsFrame, +} + +local AbuseDescriptionBox + +local OriginalAbuseDescriptionBox = Obj.Create"TextBox" +{ + Name = "TextBox", + Text = "", + ClearTextOnFocus = false, + Font = Enum.Font.Arial, + FontSize = Enum.FontSize.Size18, + Position = UDim2.new(0,3,0,3), + Size = UDim2.new(1, - 6,1, - 6), + TextColor3 = Color3I(255,255,255), + TextXAlignment = Enum.TextXAlignment.Left, + TextYAlignment = Enum.TextYAlignment.Top, + TextWrap = true, + BackgroundColor3 = Color3I(0,0,0), + BorderSizePixel = 0, +} + +local CalmingAbuseBox = Obj.Create'Frame' +{ + Name = 'AbuseFeedbackBox', + BackgroundTransparency = 1, + Position=UDim2.new(0.25, 0, 0.300000012, 0), + Size=UDim2.new(0.5, 0, 0.370000005, 0), + MakeBackgroundGuiObj('http://www.syntax.eco/asset/?id=96506233'), + Obj.Create'TextLabel' + { + Name = 'Header', + Position=UDim2.new(0,10,.05,0), + Size=UDim2.new(1, -30, .15, 0), + TextScaled = true, + BackgroundTransparency = 1, + TextXAlignment = Enum.TextXAlignment.Center, + TextYAlignment = Enum.TextYAlignment.Top, + Text = 'Thanks for your report!', + TextColor3 = Color3.new(1,1,1), + FontSize = Enum.FontSize.Size48, + Font = 'ArialBold', + }, + Obj.Create'TextLabel' + { + Name = 'content', + Position = UDim2.new(0,10,.20,0), + Size = UDim2.new(1, -30, .40, 0), + TextScaled = true, + BackgroundTransparency = 1, + TextColor3 = Color3.new(1,1,1), + Text = 'Our moderators will review the chat logs and determine what happened. The other user is probably just trying to make you mad.\n\nIf anyone used swear words, inappropriate language, or threatened you in real life, please report them for Bad Words or Threats', + TextWrapped = true, + TextYAlignment = Enum.TextYAlignment.Top, + FontSize = Enum.FontSize.Size24, + Font = 'Arial', + }, + Obj.Create'ImageButton' + { + Name = "OkButton", + BackgroundTransparency = 1, + Position = UDim2.new(0.5, -75, 1, -80), + Size = UDim2.new(0,150,0,50), + AutoButtonColor = true, + Image = 'http://www.syntax.eco/asset/?id=96507959', + } +} +local NormalAbuseBox = Obj.Create'Frame' +{ + Name = 'AbuseFeedbackBox', + BackgroundTransparency = 1, + Position = UDim2.new(0.25, 0, 0.300000012, 0), + Size = UDim2.new(0.5, 0, 0.370000005, 0), + MakeBackgroundGuiObj('http://www.syntax.eco/asset/?id=96506233'), + Obj.Create'TextLabel' + { + Name = 'Header', + Position = UDim2.new(0,10,.05,0), + Size = UDim2.new(1, -30, .15, 0), + TextScaled = true, + BackgroundTransparency = 1, + TextColor3 = Color3.new(1,1,1), + TextXAlignment = Enum.TextXAlignment.Center, + TextYAlignment = Enum.TextYAlignment.Top, + Text = 'Thanks for your report!', + FontSize = Enum.FontSize.Size48, + Font ='ArialBold' + }, + Obj.Create'TextLabel' + { + Name = 'content', + Position = UDim2.new(0,10,.20,0), + Size = UDim2.new(1, -30, .15, 0), + TextScaled = true, + BackgroundTransparency = 1, + TextColor3 = Color3.new(1,1,1), + Text = "Our moderators will review the chat logs and determine what happened.", + TextWrapped = true, + TextYAlignment = Enum.TextYAlignment.Top, + FontSize = Enum.FontSize.Size24, + Font = 'Arial', + }, + Obj.Create'ImageButton' + { + Name = "OkButton", + BackgroundTransparency = 1, + Position = UDim2.new(0.5, -75, 1, -80), + Size = UDim2.new(0,150,0,50), + AutoButtonColor = true, + Image = 'http://www.syntax.eco/asset/?id=96507959', + }, +} + +local BigButton=Instance.new('ImageButton') + BigButton.Size=UDim2.new(1,0,1,0) + BigButton.BackgroundTransparency=1 + BigButton.ZIndex=8 + BigButton.Visible=false + --BigButton.Active=false + BigButton.Parent=ScreenGui + + + local debugFrame = Obj.Create"Frame" + { + Name = 'debugframe', + Position = UDim2.new(0, 0, 0, 0), + Size = UDim2.new(0, 150, 0, 800),--0.99000001 + BackgroundTransparency = 1, + + } + local debugplayers = Obj.Create"TextLabel" + { + BackgroundTransparency = .8, + Position = UDim2.new(0, 0, .01, 0), + Size = UDim2.new(1,0,.5,0), + Parent = debugFrame, + Font = 'ArialBold', + Text = '--', + FontSize='Size14', + TextWrapped=true, + TextColor3 = Color3.new(1,1,1), + TextStrokeColor3 = Color3.new(0,0,0), + TextStrokeTransparency = 0, + TextXAlignment = 'Right', + TextYAlignment = 'Center', + } + local debugOutput = Obj.Create"TextLabel" + { + BackgroundTransparency = .8, + Position = UDim2.new(0, 0, .5, 0), + Size = UDim2.new(1,0,.5,0), + Parent = debugFrame, + Font = 'ArialBold', + Text = '--', + FontSize='Size14', + TextWrapped=true, + TextColor3 = Color3.new(1,1,1), + TextStrokeColor3 = Color3.new(0,0,0), + TextStrokeTransparency = 0, + TextXAlignment = 'Right', + TextYAlignment = 'Center', + } + + +--[[ + simple function to toggle the display of debug output +--]] +local DebugPrintEnabled=true +function debugprint(str) + --print(str) + if DebugPrintEnabled then + debugOutput.Text=str + end +end + + + ------------------------- + -- Script objects + ------------------------- +local RbxGui = assert(LoadLibrary('RbxGui')) + + -- number of entries to show if you click minimize +local DefaultEntriesOnScreen = 8 + + + + + +for _,i in pairs(Images) do + Game:GetService("ContentProvider"):Preload("http://www.syntax.eco/asset/?id="..i) +end + + -- ordered array of 'score data', each entry has: + -- Name(String) + -- Priority(number) + -- IsPrimary (bool, should it be shown in upper right) + -- MaxLength (integer, of the length of the longest element for this column) +local ScoreNames = {} + -- prevents flipping in playerlist panels +local AddId = 0 + -- intermediate table form of all player entries in format of: + -- Frame + -- Player + -- Score + -- ID + -- MyTeam (team ENRTY(not actual team) I am currently on) +local PlayerFrames = {} + -- intermediate ordered frame array, composed of Entrys of + -- Frame + -- MyTeam (my team object) + -- MyPlayers ( an ordered array of all player frames in team ) + -- AutoHide (bool saying whether it should be hidden) + -- IsHidden (bool) + -- ID (int to prevent flipping out of leaderboard, fun times) +local TeamFrames = {} + -- one special entry from teamFrames, for unaffiliated players, only shown if players non - empty +local NeutralTeam = nil + + -- final 'to be displayed' list of frames +local MiddleFrames = {} +local MiddleFrameBackgrounds = {} +local MiddleFrameHeight = .03 + -- time of last click +local LastClick = 0 +local ButtonCooldown = .25 + +local OnIos = false +pcall(function() OnIos = Game:GetService('UserInputService').TouchEnabled end) + + + -- you get 200 of x screen space per stat added, start width 16% +local BaseScreenXSize = 150 +local SpacingPerStat = 10 --spacing between stats + + +local MaximizedBounds = UDim2.new(.5,0,1,0) +local MaximizedPosition = UDim2.new(.25,0,.1,0) +local NormalBounds = UDim2.new(0,BaseScreenXSize, 0, 800) +local NormalPosition = UDim2.new(1 , - BaseScreenXSize, 0.005, 0) + +local MinimizedBounds = UDim2.new(0, BaseScreenXSize, 0.99000001, 0) + +--free space to give last stat on the right +local RightEdgeSpace = -.04 + + -- where the scroll par currently is positioned +local ScrollPosition = 0.75999999 +local IsDragging = false -- am I dragging the player list + +local DefaultBottomClipPos = BottomClipFrame.Position.Y.Scale + +local LastSelectedPlayerEntry = nil +local SelectedPlayerEntry = nil +local SelectedPlayer = nil + + -- locks(semaphores) for stopping race conditions +local AddingFrameLock = false +local ChangingOrderLock = false +local AddingStatLock = false +local BaseUpdateLock = false +local WaitForClickLock = false +local InPopupWaitForClick=false +local PlayerChangedLock = false +local NeutralTeamLock = false + +local ScrollWheelConnections = {} + + +local DefaultListSize = 15 +if not OnIos then DefaultListSize = 24 end +local DidMinimizeDrag = false + +--local PlaceCreatorId=game.CreatorId + + -- report abuse objects +local AbuseName +local Abuses = { + "Bad Words or Threats", + "Bad Username", + "Talking about Dating", + "Account Trading or Sharing", + "Asking Personal Questions", + "Rude or Mean Behavior", + "False Reporting Me" +} +local UpdateAbuseFunction +local AbuseDropDown, UpdateAbuseSelection + +local PrivilegeLevel = +{ + Owner = 255, + Admin = 240, + Member = 128, + Visitor = 10, + Banned = 0, +} + + +local IsPersonalServer = not not game.Workspace:FindFirstChild("PSVariable") + +game.Workspace.ChildAdded:connect(function(nchild) + if nchild.Name=='PSVariable' and nchild:IsA('BoolValue') then + IsPersonalServer=true + end +end) + ------------------------------- + -- Static Functions + ------------------------------- +function GetTotalEntries() + return math.min(#MiddleFrameBackgrounds,DefaultEntriesOnScreen) +end + +function GetEntryListLength() + local numEnts=#PlayerFrames+#TeamFrames + if NeutralTeam then + numEnts=numEnts+1 + end + return numEnts +end + +function AreAllEntriesOnScreen() + return #MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale <= 1 + DefaultBottomClipPos +end + +function GetLengthOfVisbleScroll() + return 1 + DefaultBottomClipPos +end + +function GetMaxScroll() + return DefaultBottomClipPos * - 1 +end + -- can be optimized by caching when this varible changes +function GetMinScroll() + if AreAllEntriesOnScreen() then + return GetMaxScroll() + else + return (GetMaxScroll() - (#MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale)) + (1 + DefaultBottomClipPos) + end +end + +function AbsoluteToPercent(x,y) + return Vector2.new(x,y)/ScreenGui.AbsoluteSize +end +--[[ + tweens property of element from starta to enda over length of time + Warning: should be put in a Spawn call + @Args: + element textobject to tween transparency on + propName + starta alpha to start tweening + enda alpha to end tweening on + length how many seconds to spend tweening +--]] +function TweenProperty(obj, propName, inita, enda, length) + local startTime = tick() + while tick()-startTimenrank do + game:GetService("PersonalServerService"):Demote(player) + end +end +--[[ + called when player selects new privilege level from popup menu + @Args: + player player to set privileges on + nlevel new privilege level for this player +--]] +function OnPrivilegeLevelSelect(player,nlevel,BanPlayerButton,VisitorButton,MemberButton,AdminButton) + debugprint('setting privilege level') + SetPrivilegeRank(player,nlevel) + HighlightMyRank(player,BanPlayerButton,VisitorButton,MemberButton,AdminButton) +end + +--[[ + Highlights current rank of this player in the popup menu + @Args: + player Player to check for rank on +--]] +function HighlightMyRank(player,BanPlayerButton,VisitorButton,MemberButton,AdminButton) + BanPlayerButton.Image= 'http://www.syntax.eco/asset/?id='..Images['LightPopupMid'] + VisitorButton.Image= 'http://www.syntax.eco/asset/?id='..Images['DarkPopupMid'] + MemberButton.Image= 'http://www.syntax.eco/asset/?id='..Images['LightPopupMid'] + AdminButton.Image= 'http://www.syntax.eco/asset/?id='..Images['DarkPopupBottom'] + + local rank=player.PersonalServerRank + if rank <= PrivilegeLevel['Banned'] then + BanPlayerButton.Image='http://www.syntax.eco/asset/?id='..Images['LightBluePopupMid'] + elseif rank <= PrivilegeLevel['Visitor'] then + VisitorButton.Image='http://www.syntax.eco/asset/?id='..Images['DarkBluePopupMid'] + elseif rank <= PrivilegeLevel['Member'] then + MemberButton.Image='http://www.syntax.eco/asset/?id='..Images['LightBluePopupMid'] + elseif rank <= PrivilegeLevel['Admin'] then + AdminButton.Image= 'http://www.syntax.eco/asset/?id='..Images['DarkBluePopupBottom'] + end +end + + -------------------------- + -- Report abuse handling + -------------------------- +--[[ + does final reporting of abuse on selected player, calls closeAbuseDialog +--]] +function OnSubmitAbuse() + if SubmitReportButton.Active then + if AbuseName and SelectedPlayer then + AbuseSettingsFrame.Visible = false + game.Players:ReportAbuse(SelectedPlayer, AbuseName, AbuseDescriptionBox.Text) + if AbuseName == "Rude or Mean Behavior" or AbuseName == "False Reporting Me" then + CalmingAbuseBox.Parent = ReportAbuseShield + else + debugprint('opening abuse box') + NormalAbuseBox.Parent = ReportAbuseShield + end + else + CloseAbuseDialog() + end + end +end + +--[[ + opens the abuse dialog, initialises text to display selectedplayer +--]] +function OpenAbuseDialog() + debugprint('adding report dialog') + AbusePlayerLabel.Text = SelectedPlayer.Name + --AbuseDescriptionBox.Text = "" + PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Linear", BASE_TWEEN,true) + AbuseDescriptionBox=OriginalAbuseDescriptionBox:Clone() + AbuseDescriptionBox.Parent = AbuseDescriptionWrapper + ReportAbuseShield.Parent = ScreenGui + ClosePopUpPanel() +end +--[[ + resets and closes abuse dialog +--]] +function CloseAbuseDialog() + AbuseName = nil + SubmitReportButton.Active = false + SubmitReportButton.Image = 'http://www.syntax.eco/asset/?id=96502438' -- 96501119', + AbuseDescriptionBox:Destroy() + CalmingAbuseBox.Parent = nil + NormalAbuseBox.Parent = nil + ReportAbuseShield.Parent = nil + AbuseSettingsFrame.Visible = true +end + +--[[ + creates dropdownbox, registers all listeners for abuse dialog +--]] +function InitReportAbuse() + + UpdateAbuseFunction = function(abuseText) + AbuseName = abuseText + if AbuseName and SelectedPlayer then + SubmitReportButton.Active = true + SubmitReportButton.Image = 'http://www.syntax.eco/asset/?id=96501119' + end + end + + AbuseDropDown, UpdateAbuseSelection = RbxGui.CreateDropDownMenu(Abuses, UpdateAbuseFunction, true) + AbuseDropDown.Name = "AbuseComboBox" + AbuseDropDown.Position = UDim2.new(0.425, 0, 0, 142) + AbuseDropDown.Size = UDim2.new(0.55,0,0,32) + AbuseDropDown.Parent = AbuseSettingsFrame + + + CancelReportButton.MouseButton1Click:connect(CloseAbuseDialog) + SubmitReportButton.MouseButton1Click:connect(OnSubmitAbuse) + + CalmingAbuseBox:FindFirstChild('OkButton').MouseButton1Down:connect(CloseAbuseDialog) + NormalAbuseBox:FindFirstChild('OkButton').MouseButton1Down:connect(CloseAbuseDialog) +end + +------------------------------------- +-- Friend/unfriending +------------------------------------- +--[[ + gets enum val of friend status, uses pcall for some reason?(from old playerlist) + @Args: + player player object to check if friends with + @Return: enum of friend status +--]] +local function GetFriendStatus(player) + if player == game.Players.LocalPlayer then + return Enum.FriendStatus.NotFriend + else + local success, result = pcall(function() return game.Players.LocalPlayer:GetFriendStatus(player) end) + if success then + return result + else + return Enum.FriendStatus.NotFriend + end + end +end + +--[[ + when friend button is clicked, tries to take appropriate action, + based on current friend status with SelectedPlayer +--]] +function OnFriendButtonSelect() + + local friendStatus=GetFriendStatus(SelectedPlayer) + if friendStatus==Enum.FriendStatus.Friend then + LocalPlayer:RevokeFriendship(SelectedPlayer) + elseif friendStatus==Enum.FriendStatus.Unknown or friendStatus==Enum.FriendStatus.NotFriend then + LocalPlayer:RequestFriendship(SelectedPlayer) + elseif friendStatus==Enum.FriendStatus.FriendRequestSent then + LocalPlayer:RevokeFriendship(SelectedPlayer) + elseif friendStatus==Enum.FriendStatus.FriendRequestReceived then + LocalPlayer:RequestFriendship(SelectedPlayer) + end + --PersonalServerPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Quad", .5,true) + ClosePopUpPanel() + --PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Linear", BASE_TWEEN,true) +end + +function OnFriendRefuseButtonSelect() + + + LocalPlayer:RevokeFriendship(SelectedPlayer) + ClosePopUpPanel() + PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Linear", BASE_TWEEN,true) +end +------------------------------------ +-- Player Entry Handling +------------------------------------ +--[[ + used by lua's table.sort to sort player entries +--]] +function PlayerSortFunction(a,b) + -- prevents flipping out leaderboard + if a['Score'] == b['Score'] then + return a['Player'].Name:upper() < b['Player'].Name:upper() + end + if not a['Score'] then return false end + if not b['Score'] then return true end + return a['Score'] < b['Score'] +end + + --------------------------------- + -- Stat Handling + --------------------------------- + -- removes and closes all leaderboard stuffs +function BlowThisPopsicleStand() + --ScreenGui:Destroy() + --script:Destroy() + --time to make the fanboys rage... + Tabify() +end +--[[ + used by lua's table.sort to prioritize score entries +--]] +function StatSort(a,b) + -- primary stats should be shown before all others + if a.IsPrimary ~= b.IsPrimary then + return a.IsPrimary + end + -- if priorities are equal, then return the first added one + if a.Priority == b.Priority then + return a.AddId < b.AddId + end + return a.Priority < b.Priority +end +--[[ + doing WAAY too much here, for optimization update only your team + @Args: + playerEntry Entry of player who had a stat change + property Name of stat changed +--]] +function StatChanged(playerEntry,property) + + -- if(playerEntry['MyTeam']) then + -- UpdateSingleTeam(playerEntry['MyTeam']) + -- else + BaseUpdate() + -- end +end +--[[ + Called when stat is added + if playerEntry is localplayer, will add to score names and re-sort the stats, and resize the width of the leaderboard + for all players, will add a listener for if this stat changes + if stat is a string value, crashes the leaderboard + Note:change crash to a 'tabify' leaderboard later + @Args: + nchild new child value to leaderstats + playerEntry entry this stat was added to +--]] +function StatAdded(nchild,playerEntry) + -- dont re - add a leaderstat I alreday have + while AddingStatLock do debugprint('in stat added function lock') wait(1/30) end + AddingStatLock = true + if not (nchild:IsA('StringValue') or nchild:IsA('IntValue') or nchild:IsA('BoolValue') or nchild:IsA('NumberValue') or nchild:IsA('DoubleConstrainedValue') or nchild:IsA('IntConstrainedValue')) then + BlowThisPopsicleStand() + else + local haveScore = false + for _,i in pairs(ScoreNames) do + if i['Name']==nchild.Name then haveScore=true end + end + if not haveScore then + local nstat = {} + nstat['Name'] = nchild.Name + nstat['Priority'] = 0 + if(nchild:FindFirstChild('Priority')) then + nstat['Priority'] = nchild.Priority + end + nstat['IsPrimary'] = false + if(nchild:FindFirstChild('IsPrimary')) then + nstat['IsPrimary'] = true + end + nstat.AddId = AddId + AddId = AddId + 1 + table.insert(ScoreNames,nstat) + table.sort(ScoreNames,StatSort) + if not StatTitles:FindFirstChild(nstat['Name']) then + CreateStatTitle(nstat['Name']) + end + UpdateMaximize() + + end + end + AddingStatLock = false + StatChanged(playerEntry) + nchild.Changed:connect(function(property) StatChanged(playerEntry,property) end) + + +end +--returns whether any of the existing players has this stat +function DoesStatExist(statName, exception) + for _,playerf in pairs(PlayerFrames) do + if playerf['Player'] ~= exception and playerf['Player']:FindFirstChild('leaderstats') and playerf['Player'].leaderstats:FindFirstChild(statName) then + --print('player:' .. playerf['Player'].Name ..' has stat') + return true + end + end + return false +end + + + +--[[ + Called when stat is removed from player + for all players, destroys the stat frame associated with this value, + then calls statchanged(to resize frame) + if playerEntry==localplayer, will remove from scorenames + @Args: + nchild ___value to be removed + playerEntry entry of player value is being removed from +--]] +function StatRemoved(nchild,playerEntry) + while AddingStatLock do debugprint('In Adding Stat Lock1') wait(1/30) end + AddingStatLock = true + if playerEntry['Frame']:FindFirstChild(nchild.Name) then + debugprint('Destroyed frame!') + playerEntry['Frame'][nchild.Name].Parent = nil + end + if not DoesStatExist(nchild.Name, playerEntry['Player']) then + for i,val in ipairs(ScoreNames) do + if val['Name'] == nchild.Name then + table.remove(ScoreNames,i) + if StatTitles:FindFirstChild(nchild.Name) then + StatTitles[nchild.Name]:Destroy() + end + for _,teamf in pairs(TeamFrames) do + if teamf['Frame']:FindFirstChild(nchild.Name) then + teamf['Frame'][nchild.Name]:Destroy() + end + end + end + end + end + AddingStatLock = false + StatChanged(playerEntry) +end +--[[ + clears all stats from a given playerEntry + used when leaderstats are removed, or when new leaderstats are added(for weird edge case)+ +--]] +function RemoveAllStats(playerEntry) + for i,val in ipairs(ScoreNames) do + StatRemoved(val,playerEntry) + end + +end + + +function GetScoreValue(score) + if score:IsA('DoubleConstrainedValue') or score:IsA('IntConstrainedValue') then + return score.ConstrainedValue + elseif score:IsA('BoolValue') then + if score.Value then return 1 else return 0 end + else + return score.Value + end +end +--[[ + +--]] +function MakeScoreEntry(entry,scoreval,panel) + if not panel:FindFirstChild('PlayerScore') then return end + local nscoretxt = panel:FindFirstChild('PlayerScore'):Clone() + local thisScore = nil + --here lies the resting place of a once great and terrible bug + --may its treachery never be forgoten, lest its survivors fall for it again + --RIP the leaderstat bug, oct 2012-nov 2012 + wait() + if entry['Player']:FindFirstChild('leaderstats') and entry['Player'].leaderstats:FindFirstChild(scoreval['Name']) then + thisScore = entry['Player']:FindFirstChild('leaderstats'):FindFirstChild(scoreval['Name']) + else + return + end + + if not entry['Player'].Parent then return end + + nscoretxt.Name = scoreval['Name'] + nscoretxt.Text = tostring(GetScoreValue(thisScore)) + if scoreval['Name'] == ScoreNames[1]['Name'] then + debugprint('changing score') + entry['Score'] = GetScoreValue(thisScore) + if entry['Player'] == LocalPlayer then HeaderScore.Text = tostring(GetScoreValue(thisScore)) end + end + + thisScore.Changed:connect(function() + if not thisScore.Parent then return end + if scoreval['Name'] == ScoreNames[1]['Name'] then + + entry['Score'] = GetScoreValue(thisScore) + if entry['Player'] == LocalPlayer then HeaderScore.Text = tostring(GetScoreValue(thisScore)) end + end + nscoretxt.Text = tostring(GetScoreValue(thisScore)) + BaseUpdate() + end) + return nscoretxt + +end + +function CreateStatTitle(statName) + + local ntitle = MiddleTemplate:FindFirstChild('PlayerScore'):Clone() + ntitle.Name = statName + ntitle.Text = statName + -- ntitle + if IsMaximized.Value then + ntitle.TextTransparency = 0 + else + ntitle.TextTransparency = 1 + end + ntitle.Parent = StatTitles +end + +function RecreateScoreColumns(ptable) + while AddingStatLock do debugprint ('In Adding Stat Lock2') wait(1/30) end + AddingStatLock = true + local Xoffset=5--15 --current offset from Right + local maxXOffset=Xoffset + local MaxSizeColumn=0 --max size for this column + + -- foreach known leaderstat + for j = #ScoreNames, 1,-1 do + local scoreval = ScoreNames[j] + + MaxSizeColumn=0 + -- for each entry in this player table + for i,entry in ipairs(ptable) do + local panel = entry['Frame'] + local tplayer = entry['Player'] + -- if this panel does not have an element named after this stat + if not panel:FindFirstChild(scoreval['Name']) then + -- make an entry for this object + local nentry = MakeScoreEntry(entry,scoreval,panel) + if nentry then + debugprint('adding '..nentry.Name..' to '..entry['Player'].Name ) + nentry.Parent = panel + -- add score to team + if entry['MyTeam'] and entry['MyTeam'] ~= NeutralTeam and not entry['MyTeam']['Frame']:FindFirstChild(scoreval['Name']) then + local ntitle = nentry:Clone() + --ntitle.TextXAlignment = 'Right' + ntitle.Parent = entry['MyTeam']['Frame'] + end + + end + end + scoreval['XOffset']=Xoffset + + if panel:FindFirstChild(scoreval['Name']) then + MaxSizeColumn=math.max(MaxSizeColumn,panel[scoreval['Name']].TextBounds.X) + end + end + + if AreNamesExpanded.Value then + MaxSizeColumn=math.max(MaxSizeColumn,StatTitles[scoreval['Name'] ].TextBounds.X) + StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new(RightEdgeSpace,-Xoffset,0,0),'Out','Linear',BASE_TWEEN,true) + else + StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new((.4+((.6/#ScoreNames)*(j-1)))-1,0,0,0),'Out','Linear',BASE_TWEEN,true) + end + scoreval['ColumnSize']=MaxSizeColumn + Xoffset= Xoffset+SpacingPerStat+MaxSizeColumn + maxXOffset=math.max(Xoffset,maxXOffset) + end + NormalBounds = UDim2.new(0, BaseScreenXSize+maxXOffset-SpacingPerStat,0,800) + NormalPosition = UDim2.new(1 , -NormalBounds.X.Offset, NormalPosition.Y.Scale, 0) + UpdateHeaderNameSize() + UpdateMaximize() + + AddingStatLock = false +end + --------------------------- + -- Minimizing and maximizing + --------------------------- + +function ToggleMinimize() + IsMinimized.Value = not IsMinimized.Value + UpdateStatNames() +end + +function ToggleMaximize() + IsMaximized.Value = not IsMaximized.Value + RecreateScoreColumns(PlayerFrames) --done to re-position stat names NOTE: optimize-able +end + +function Tabify() + IsTabified.Value= true + IsMaximized.Value=false + IsMinimized.Value=true + UpdateMinimize() + IsTabified.Value= true + ScreenGui:TweenPosition(UDim2.new(NormalBounds.X.Scale, NormalBounds.X.Offset-10, 0,0),'Out','Linear',BASE_TWEEN*1.2,true) +end + +function UnTabify() + if IsTabified.Value then + IsTabified.Value= false + ScreenGui:TweenPosition(UDim2.new(0, 0, 0,0),'Out','Linear',BASE_TWEEN*1.2,true) + end +end + +--[[ + Does more than it looks like + monitors positions of the clipping frames and bottom frames + called from EVERYWHERE, too much probably +--]] +function UpdateMinimize() + + if IsMinimized.Value then + if IsMaximized.Value then + ToggleMaximize() + end + if not IsTabified.Value then + MainFrame.Size = UDim2.new(0.010, HeaderName.TextBounds.X, NormalBounds.Y.Scale,NormalBounds.Y.Offset) + MainFrame.Position = UDim2.new(.990, -HeaderName.TextBounds.X, NormalPosition.Y.Scale,0) + else + MainFrame.Size = NormalBounds + MainFrame.Position = NormalPosition + end + --(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale) + BottomClipFrame.Position = UDim2.new(0,0,-1,0) + BottomFrame.Position = UDim2.new(0,0,0,0) + FocusFrame.Size=UDim2.new(1,0,HeaderFrameHeight,0) + ExtendTab.Image = 'http://www.syntax.eco/asset/?id=94692731' + else + if not IsMaximized.Value then + MainFrame.Size = NormalBounds + MainFrame.Position = NormalPosition + end + --do limiting + DefaultBottomClipPos = math.min(math.max(DefaultBottomClipPos,-1),-1+(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale)) + UpdateScrollPosition() + + BottomClipFrame.Position=UDim2.new(0,0,DefaultBottomClipPos,0) + local bottomPositon = (DefaultBottomClipPos+BottomClipFrame.Size.Y.Scale) + BottomFrame.Position=UDim2.new(0,0,bottomPositon,0) + FocusFrame.Size=UDim2.new(1,0,bottomPositon + HeaderFrameHeight,0) + ExtendTab.Image = 'http://www.syntax.eco/asset/?id=94825585' + end +end + +--[[ + Manages the position/size of the mainFrame, swaps out different resolution images for the frame + fades in and out the stat names, moves position of headername and header score +--]] +function UpdateMaximize() + if IsMaximized.Value then + for j = 1, #ScoreNames,1 do + local scoreval = ScoreNames[j] + StatTitles[scoreval['Name'] ]:TweenPosition(UDim2.new(.4+((.6/#ScoreNames)*(j-1))-1,0,0,0),'Out','Linear',BASE_TWEEN,true) + end + + if IsMinimized.Value then + ToggleMinimize() + else + UpdateMinimize() + end + + + MainFrame:TweenSizeAndPosition(MaximizedBounds,MaximizedPosition,'Out','Linear',BASE_TWEEN*1.2,true) + HeaderScore:TweenPosition(UDim2.new(0,0,HeaderName.Position.Y.Scale,0), "Out", "Linear", BASE_TWEEN*1.2,true) + HeaderName:TweenPosition(UDim2.new( - .1, - HeaderScore.TextBounds.x,HeaderName.Position.Y.Scale,0), "Out", "Linear", BASE_TWEEN*1.2,true) + HeaderFrame.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['LargeHeader'] + BottomFrame.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['LargeBottom'] + for index, i in ipairs(MiddleFrameBackgrounds) do + if (index%2) ~= 1 then + i.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['LargeDark'] + else + i.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['LargeLight'] + end + end + for index, i in ipairs(MiddleFrames) do + if i:FindFirstChild('ClickListener') then + i.ClickListener.Size = UDim2.new(.974,0,i.ClickListener.Size.Y.Scale,0) + end + for j=1, #ScoreNames,1 do + local scoreval = ScoreNames[j] + if i:FindFirstChild(scoreval['Name']) then + i[scoreval['Name']]:TweenPosition(UDim2.new(.4+((.6/#ScoreNames)*(j-1))-1,0,0,0), "Out", "Linear", BASE_TWEEN,true) + end + end + end + for i,entry in ipairs(PlayerFrames) do + WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(.38,0,entry['Frame'].TitleFrame.Size.Y.Scale,0) + end + + for i,entry in ipairs(TeamFrames) do + WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(.38,0,entry['Frame'].TitleFrame.Size.Y.Scale,0) + end + + else + if not IsMinimized.Value then + MainFrame:TweenSizeAndPosition(NormalBounds,NormalPosition,'Out','Linear',BASE_TWEEN*1.2,true) + end + HeaderScore:TweenPosition(UDim2.new(0,0,.4,0), "Out", "Linear", BASE_TWEEN*1.2,true) + HeaderName:TweenPosition(UDim2.new(0,0,HeaderName.Position.Y.Scale,0), "Out", "Linear", BASE_TWEEN*1.2,true) + HeaderFrame.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['NormalHeader'] + BottomFrame.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['NormalBottom'] + for index, i in ipairs(MiddleFrameBackgrounds) do + if index%2 ~= 1 then + i.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['midDark'] + else + i.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['midLight'] + end + end + for index, i in ipairs(MiddleFrames) do + if i:FindFirstChild('ClickListener') then + i.ClickListener.Size = UDim2.new(.96,0,i.ClickListener.Size.Y.Scale,0) + for j=1, #ScoreNames,1 do + local scoreval = ScoreNames[j] + if i:FindFirstChild(scoreval['Name']) and scoreval['XOffset'] then + --print('updateing stat position: ' .. scoreval['Name']) + i[scoreval['Name']]:TweenPosition(UDim2.new(RightEdgeSpace,-scoreval['XOffset'],0,0), "Out", "Linear", BASE_TWEEN,true) + end + end + end + end + + for i,entry in ipairs(TeamFrames) do + WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(0,BaseScreenXSize*.9,entry['Frame'].TitleFrame.Size.Y.Scale,0) + + end + for i,entry in ipairs(PlayerFrames) do + WaitForChild(entry['Frame'],'TitleFrame').Size=UDim2.new(0,BaseScreenXSize*.9,entry['Frame'].TitleFrame.Size.Y.Scale,0) + end + end +end + +function UpdateStatNames() + if not AreNamesExpanded.Value or IsMinimized.Value then + CloseNames() + else + ExpandNames() + end +end + +function ExpandNames() + if #ScoreNames ~= 0 then + for _,i in pairs(StatTitles:GetChildren()) do + Spawn(function()TweenProperty(i,'TextTransparency',i.TextTransparency,0,BASE_TWEEN) end) + end + HeaderFrameHeight=.09 + --as of writing, this and 'CloseNames' are the only places headerframe is resized + HeaderFrame:TweenSizeAndPosition(UDim2.new(HeaderFrame.Size.X.Scale, HeaderFrame.Size.X.Offset, HeaderFrameHeight,0), + HeaderFrame.Position,'Out','Linear',BASE_TWEEN*1.2,true) + TopClipFrame:TweenPosition(UDim2.new(TopClipFrame.Position.X.Scale,0,HeaderFrameHeight,0),'Out','Linear',BASE_TWEEN*1.2,true) + BottomShiftFrame:TweenPosition(UDim2.new(0,0,HeaderFrameHeight,0), "Out", 'Linear', BASE_TWEEN*1.2,true) + + end + +end + +function CloseNames() + if #ScoreNames ~= 0 then + HeaderFrameHeight=.07 + if not (IsMaximized.Value) then + for _,i in pairs(StatTitles:GetChildren()) do + Spawn(function()TweenProperty(i,'TextTransparency',i.TextTransparency,1,BASE_TWEEN) end) + end + end + BottomShiftFrame:TweenPosition(UDim2.new(0,0,HeaderFrameHeight,0), "Out", 'Linear', BASE_TWEEN*1.2,true) + HeaderFrame:TweenSizeAndPosition(UDim2.new(HeaderFrame.Size.X.Scale, HeaderFrame.Size.X.Offset, HeaderFrameHeight,0), + HeaderFrame.Position,'Out','Linear',BASE_TWEEN*1.2,true) + TopClipFrame:TweenPosition(UDim2.new(TopClipFrame.Position.X.Scale,0,HeaderFrameHeight,0),'Out','Linear',BASE_TWEEN*1.2,true) + end +end + +function OnScrollWheelMove(direction) + if not (IsTabified.Value or IsMinimized.Value or InPopupWaitForClick) then + local StartFrame = ListFrame.Position + local newFrameY = math.max(math.min(StartFrame.Y.Scale + (direction),GetMaxScroll()),GetMinScroll()) + + ListFrame.Position = UDim2.new(StartFrame.X.Scale,StartFrame.X.Offset,newFrameY,StartFrame.Y.Offset) + UpdateScrollPosition() + end +end + +function AttachScrollWheel() + if ScrollWheelConnections then return end + ScrollWheelConnections = {} + table.insert(ScrollWheelConnections,Mouse.WheelForward:connect(function() + OnScrollWheelMove(.05) + end)) + table.insert(ScrollWheelConnections,Mouse.WheelBackward:connect(function() + OnScrollWheelMove(-.05) + end)) +end + +function DetachScrollWheel() + if ScrollWheelConnections then + for _,i in pairs(ScrollWheelConnections) do + i:disconnect() + end + end + ScrollWheelConnections=nil +end + +FocusFrame.MouseEnter:connect(function() + if not (IsMinimized.Value or IsTabified.Value) then + AttachScrollWheel() + end +end) +FocusFrame.MouseLeave:connect(function() + --if not (IsMaximized.Value or IsMinimized.Value) then + DetachScrollWheel() + --end +end) + + ------------------------ + -- Scroll Bar functions + ------------------------ +--[[ + updates whether the scroll bar should be showing, if it is showing, updates + the size of it +--]] +function UpdateScrollBarVisibility() + if AreAllEntriesOnScreen() then + ScrollBar.BackgroundTransparency = 1 + else + ScrollBar.BackgroundTransparency = 0 + UpdateScrollBarSize() + end +end +--[[ + updates size of scrollbar depending on how many entries exist +--]] +function UpdateScrollBarSize() + local entryListSize = #MiddleFrameBackgrounds * MiddleTemplate.Size.Y.Scale + local shownAreaSize = ((BottomClipFrame.Position.Y.Scale) + 1) + ScrollBar.Size = UDim2.new(1,0,shownAreaSize/entryListSize,0) + +end +--[[ + updates position of listframe so that no gaps at the bottom or top of the list are visible + updates position of scrollbar to match what parts of the list are visible +--]] +function UpdateScrollPosition() + local minPos = GetMinScroll() + local maxPos = GetMaxScroll() + local scrollLength = maxPos - minPos + + local yscrollpos=math.max(math.min(ListFrame.Position.Y.Scale,maxPos),minPos) + ListFrame.Position=UDim2.new(ListFrame.Position.X.Scale,ListFrame.Position.X.Offset,yscrollpos,ListFrame.Position.Y.Offset) + + local adjustedLength = 1 - ScrollBar.Size.Y.Scale + ScrollBar.Position = UDim2.new(0,0,adjustedLength - (adjustedLength * ((ListFrame.Position.Y.Scale - minPos)/scrollLength)),0) +end + +--[[ + WARNING:this is in a working state, but uses massive hacks + revize when global input is available + Manages scrolling of the playerlist on mouse drag +--]] +function StartDrag(entry,startx,starty) + local startDragTime = tick() + local stopDrag = false + local openPanel = true + local draggedFrame = WaitForChild(entry['Frame'],'ClickListener') + local function dragExit() + stopDrag = true + + if entry['Player'] and SelectedPlayer and openPanel + and entry['Player']~=LocalPlayer and SelectedPlayer.userId>1 and LocalPlayer.userId>1 then + ActivatePlayerEntryPanel(entry) + end + end + local startY = nil + local StartFrame = ListFrame.Position + local function dragpoll(nx,ny) + if not startY then + startY = AbsoluteToPercent(nx,ny).Y + end + local nowY = AbsoluteToPercent(nx,ny).Y + debugprint('drag dist:'..Vector2.new(startx-nx,starty-ny).magnitude) + if Vector2.new(startx-nx,starty-ny).magnitude>MOUSE_DRAG_DISTANCE then + openPanel=false + end + + local newFrameY = math.max(math.min(StartFrame.Y.Scale + (nowY - startY),GetMaxScroll()),GetMinScroll()) + ListFrame.Position = UDim2.new(StartFrame.X.Scale,StartFrame.X.Offset,newFrameY,StartFrame.Y.Offset) + UpdateScrollPosition() + end + WaitForClick(ScreenGui,dragpoll,dragExit) +end + + +function StartMinimizeDrag() + Delay(0,function() + local startTime=tick() + debugprint('Got Click2') + local stopDrag = false + local function dragExit() + --debugprint('undone click2') + if tick()-startTime<.25 then --was click + ToggleMinimize() + else --was drag + if (DefaultBottomClipPos >= -1+(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale)) then + DidMinimizeDrag = false + else + DidMinimizeDrag = true + end + if IsMinimized.Value then + ToggleMinimize() + end + end + stopDrag = true + end + local startY = nil + local StartFrame = DefaultBottomClipPos + local function dragpoll(nx,ny) + if not IsMinimized.Value then + + if not startY then + startY = AbsoluteToPercent(nx,ny).Y + end + local nowY = AbsoluteToPercent(nx,ny).Y + local newFrameY + newFrameY = math.min(math.max(StartFrame + (nowY - startY),-1),-1+(#MiddleFrameBackgrounds*MiddleBGTemplate.Size.Y.Scale)) + DefaultBottomClipPos = newFrameY + UpdateMinimize() + ScrollBarFrame.Size= UDim2.new(ScrollBarFrame.Size.X.Scale,0,(DefaultBottomClipPos+BottomClipFrame.Size.Y.Scale),0) + ScrollBarFrame.Position= UDim2.new(ScrollBarFrame.Position.X.Scale,0,1-ScrollBarFrame.Size.Y.Scale,0) + UpdateScrollBarSize() + UpdateScrollPosition() + UpdateScrollBarVisibility() + + end + end + Spawn(function() WaitForClick(ScreenGui,dragpoll,dragExit) end) + end) + +end + + ------------------------------- + -- Input Callback functions + ------------------------------- +IsMaximized.Value=false +IsMinimized.Value=false +IsMaximized.Changed:connect(UpdateMaximize) +IsMinimized.Changed:connect(UpdateMinimize) + +ExtendButton.MouseButton1Down:connect(function() + if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end + LastClick = time() + if IsTabified.Value then + UnTabify() + else + StartMinimizeDrag() + end +end) + +MaximizeButton.MouseButton1Click:connect(function() + if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end + LastClick = time() + if IsTabified.Value then + UnTabify() + elseif not AreNamesExpanded.Value then + AreNamesExpanded.Value = true + BaseUpdate() + else + ToggleMaximize() + end +end) + +MaximizeButton.MouseButton2Click:connect(function() + if(time() - LastClick < ButtonCooldown) or InPopupWaitForClick then return end + LastClick = time() + if IsTabified.Value then + UnTabify() + elseif IsMaximized.Value then + ToggleMaximize() + elseif AreNamesExpanded.Value then + AreNamesExpanded.Value = false + BaseUpdate() + else + Tabify() + end +end) + + +------------------------------- +-- MiddleFrames management +------------------------------- +--[[ + adds a background frame to the listframe +--]] +function AddMiddleBGFrame() + local nBGFrame = MiddleBGTemplate:Clone() + nBGFrame.Position = UDim2.new(.5,0,((#MiddleFrameBackgrounds) * nBGFrame.Size.Y.Scale),0) + if (#MiddleFrameBackgrounds+1)%2 ~= 1 then + if IsMaximized.Value then + nBGFrame.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['LargeDark'] + else + nBGFrame.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['midDark'] + end + else + if IsMaximized.Value then + nBGFrame.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['LargeLight'] + else + nBGFrame.Background.Image = 'http://www.syntax.eco/asset/?id='..Images['midLight'] + end + end + nBGFrame.Parent = ListFrame + table.insert(MiddleFrameBackgrounds,nBGFrame) + + if #MiddleFrameBackgrounds 1 do + fSize=fSize-1 + tHeader.FontSize=FONT_SIZES[fSize] + wait(.2) + end + HeaderName.FontSize=tHeader.FontSize + tHeader:Destroy() + end) +end +ScreenGui.Changed:connect(UpdateHeaderNameSize) + +--[[ + called only when the leaderstats object is added to a given player entry + removes old stats, adds any existing stats, and sets up listeners for new stats + @Args: + playerEntry A reference to the ENTRY(table) of the player who had leaderstats added +--]] +function LeaderstatsAdded(playerEntry) + --RemoveAllStats(playerEntry) + local nplayer = playerEntry['Player'] + for _,i in pairs(nplayer.leaderstats:GetChildren()) do + StatAdded(i,playerEntry) + end + nplayer.leaderstats.ChildAdded:connect(function(nchild) StatAdded(nchild,playerEntry) end) + nplayer.leaderstats.ChildRemoved:connect(function(nchild) StatRemoved(nchild,playerEntry) end) +end +--[[ + called when leaderstats object is removed from play in player entry + Note: may not be needed, might be able to just rely on leaderstats added + @Args: + oldLeaderstats leaderstats object to be removed + playerEntry A reference to the ENTRY(table) of the player +--]] +function LeaderstatsRemoved(oldLeaderstats,playerEntry) + while AddingFrameLock do debugprint('waiting to insert '..playerEntry['Player'].Name) wait(1/30) end + AddingFrameLock = true + RemoveAllStats(playerEntry) + AddingFrameLock = false +end + +function ClosePopUpPanel() + if SelectedPlayerEntry then + local tframe = SelectedPlayerEntry['Frame'] + Spawn(function() TweenProperty(tframe,'BackgroundTransparency',.5,1,BASE_TWEEN) end) + end + PopUpPanel:TweenPosition(UDim2.new(1,0,0,0), "Out", "Linear", BASE_TWEEN,true) + wait(.1) + InPopupWaitForClick= false + SelectedPlayerEntry = nil +end + +--[[ + prepares the needed popup to be tweened on screen, and updates the position of the popup clip + frame to match the selected player frame's position +--]] +function InitMovingPanel( entry, player) + PopUpClipFrame.Parent= ScreenGui + + if PopUpPanel then + PopUpPanel:Destroy() + end + PopUpPanel= PopUpPanelTemplate:Clone() + PopUpPanel.Parent= PopUpClipFrame + + local nextIndex = 2 + local friendStatus = GetFriendStatus(player) + debugprint (tostring(friendStatus)) + local showRankMenu = IsPersonalServer and LocalPlayer.PersonalServerRank >= PrivilegeLevel['Admin'] and LocalPlayer.PersonalServerRank > SelectedPlayer.PersonalServerRank + + + local ReportPlayerButton = MakePopupButton(PopUpPanel,'Report Player',0) + ReportPlayerButton.MouseButton1Click:connect(function() OpenAbuseDialog() end) + + local enableFriendRequests = true + + if enableFriendRequests then + local FriendPlayerButton = MakePopupButton(PopUpPanel,'Friend',1, not showRankMenu and friendStatus~=Enum.FriendStatus.FriendRequestReceived) + FriendPlayerButton.MouseButton1Click:connect(OnFriendButtonSelect) + + + if friendStatus==Enum.FriendStatus.Friend then + FriendPlayerButton:FindFirstChild('ButtonText').Text='UnFriend Player' + elseif friendStatus==Enum.FriendStatus.Unknown or friendStatus==Enum.FriendStatus.NotFriend then + FriendPlayerButton:FindFirstChild('ButtonText').Text='Send Request' + elseif friendStatus==Enum.FriendStatus.FriendRequestSent then + FriendPlayerButton:FindFirstChild('ButtonText').Text='Revoke Request' + elseif friendStatus==Enum.FriendStatus.FriendRequestReceived then + FriendPlayerButton:FindFirstChild('ButtonText').Text='Accept Friend' + local FriendRefuseButton = MakePopupButton(PopUpPanel,'Decline Friend',2,not showRankMenu) + FriendRefuseButton.MouseButton1Click:connect(OnFriendRefuseButtonSelect) + nextIndex=nextIndex+1 + end + end + + if showRankMenu then + local BanPlayerButton = MakePopupButton(PopUpPanel,'Ban',nextIndex) + local VisitorButton = MakePopupButton(PopUpPanel,'Visitor',nextIndex+1) + local MemberButton = MakePopupButton(PopUpPanel,'Member',nextIndex+2) + local AdminButton = MakePopupButton(PopUpPanel,'Admin',nextIndex+3,true) + + BanPlayerButton.MouseButton1Click:connect(function() + OnPrivilegeLevelSelect(player,PrivilegeLevel['Banned'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end) + VisitorButton.MouseButton1Click:connect(function() + OnPrivilegeLevelSelect(player,PrivilegeLevel['Visitor'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end) + MemberButton.MouseButton1Click:connect(function() + OnPrivilegeLevelSelect(player,PrivilegeLevel['Member'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end) + AdminButton.MouseButton1Click:connect(function() + OnPrivilegeLevelSelect(player,PrivilegeLevel['Admin'],BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end) + + HighlightMyRank(SelectedPlayer,BanPlayerButton,VisitorButton,MemberButton,AdminButton) + end + + PopUpPanel:TweenPosition(UDim2.new(0,0,0,0), "Out", "Linear", BASE_TWEEN,true) + Delay(0, function() + local tconnection + tconnection = Mouse.Button1Down:connect(function() + tconnection:disconnect() + ClosePopUpPanel() + end) + end) + + local myFrame = entry['Frame'] + -- THIS IS GARBAGE. + -- if I parent to frame to auto update position, it gets clipped + -- sometimes garbage is the only option. + Spawn(function() + while InPopupWaitForClick do + PopUpClipFrame.Position=UDim2.new( 0,myFrame.AbsolutePosition.X-PopUpClipFrame.Size.X.Offset,0,myFrame.AbsolutePosition.Y) + wait() + end + end) + +end + +--[[ + Called when a player entry in the leaderboard is clicked + either will highlight entry and start the drag event, or open a popup menu + @Args: + entry the player entry clicked +--]] +function OnPlayerEntrySelect(entry,startx,starty) + + if not InPopupWaitForClick then + + SelectedPlayerEntry = entry + SelectedPlayer = entry['Player'] + + StartDrag(entry,startx,starty) + end + + +end + +function ActivatePlayerEntryPanel(entry) + entry['Frame'].BackgroundColor3 = Color3.new(0,1,1) + Spawn(function() TweenProperty(entry['Frame'],'BackgroundTransparency',1,.5,.5) end) + InPopupWaitForClick=true + InitMovingPanel(entry,entry['Player']) +end + +--[[ + the basic update for the playerlist mode's state, + assures the order and length of the player frames +--]] +function PlayerListModeUpdate() + RecreateScoreColumns(PlayerFrames) + table.sort(PlayerFrames,PlayerSortFunction) + for i,val in ipairs(PlayerFrames) do + MiddleFrames[i] = val['Frame'] + end + for i = #PlayerFrames + 1,#MiddleFrames,1 do + MiddleFrames[i] = nil + end + UpdateMinimize() +end +--[[ + this one's a doozie, happens when a player is added to the game + inits their player frame and player entry, assigns them to a team if possible, + and hooks up their leaderstats + @Args: + nplayer new player object to insert +--]] +function InsertPlayerFrame(nplayer) + while AddingFrameLock do debugprint('waiting to insert '..nplayer.Name) wait(1/30) end + AddingFrameLock = true + + local nFrame = MiddleTemplate:Clone() + + local playerName = nplayer.Name + local clansEnabled, clanTag = pcall(function() nplayer:GetClanTag() end) + if clansEnabled and clanTag and clanTag ~= "" then + playerName = "[" .. tostring(clanTag) .. "] " .. playerName + end + + WaitForChild(WaitForChild(nFrame,'TitleFrame'),'Title').Text = playerName + + nFrame.Position = UDim2.new(1,0,((#MiddleFrames) * nFrame.Size.Y.Scale),0) + + local nfriendstatus = GetFriendStatus(nplayer) + + nFrame:FindFirstChild('BCLabel').Image = getMembershipTypeIcon(nplayer.MembershipType,nplayer) + nFrame:FindFirstChild('FriendLabel').Image = getFriendStatusIcon(nfriendstatus) + nFrame.Name = nplayer.Name + WaitForChild(WaitForChild(nFrame,'TitleFrame'),'Title').Text = playerName + + --move for bc label + nFrame.FriendLabel.Position=nFrame.FriendLabel.Position+UDim2.new(0,17,0,0) + nFrame.TitleFrame.Title.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,17,0,0) + + if(nFrame:FindFirstChild('FriendLabel').Image ~= '') then + nFrame.TitleFrame.Title.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,17,0,0) + end + + if nplayer.Name == LocalPlayer.Name then + nFrame.TitleFrame.Title.Font = 'ArialBold' + nFrame.PlayerScore.Font = 'ArialBold' + ChangeHeaderName(playerName) + local dropShadow = nFrame.TitleFrame.Title:Clone() + dropShadow.TextColor3 = Color3.new(0,0,0) + dropShadow.TextTransparency=0 + dropShadow.ZIndex=2 + dropShadow.Position=nFrame.TitleFrame.Title.Position+UDim2.new(0,1,0,1) + dropShadow.Name='DropShadow' + dropShadow.Parent= nFrame.TitleFrame + else + --Delay(2, function () OnFriendshipChanged(nplayer,LocalPlayer:GetFriendStatus(nplayer)) end) + end + nFrame.TitleFrame.Title.Font = 'ArialBold' + + + nFrame.Parent = ListFrame + nFrame.Position = UDim2.new(.5,0,((#MiddleFrames) * nFrame.Size.Y.Scale),0) + UpdateMinimize() + local nentry = {} + nentry['Frame'] = nFrame + nentry['Player'] = nplayer + nentry['ID'] = AddId + AddId = AddId + 1 + table.insert(PlayerFrames,nentry) + if #TeamFrames~=0 then + + if nplayer.Neutral then + nentry['MyTeam'] = nil + if not NeutralTeam then + AddNeutralTeam() + else + AddPlayerToTeam(NeutralTeam,nentry) + end + + else + local addedToTeam=false + for i,tval in ipairs(TeamFrames) do + if tval['MyTeam'].TeamColor == nplayer.TeamColor then + AddPlayerToTeam(tval,nentry) + nentry['MyTeam'] = tval + addedToTeam=true + end + end + if not addedToTeam then + nentry['MyTeam']=nil + if not NeutralTeam then + AddNeutralTeam() + else + AddPlayerToTeam(NeutralTeam,nentry) + end + nentry['MyTeam'] = NeutralTeam + end + end + + end + + if nplayer:FindFirstChild('leaderstats') then + LeaderstatsAdded(nentry) + end + + nplayer.ChildAdded:connect(function(nchild) + if nchild.Name == 'leaderstats' then + while AddingFrameLock do debugprint('in adding leaderstats lock') wait(1/30) end + AddingFrameLock = true + LeaderstatsAdded(nentry) + AddingFrameLock = false + end + end) + + nplayer.ChildRemoved:connect(function (nchild) + if nplayer==LocalPlayer and nchild.Name == 'leaderstats' then + LeaderstatsRemoved(nchild,nentry) + end + end) + nplayer.Changed:connect(function(prop)PlayerChanged(nentry,prop) end) + + local listener = WaitForChild(nFrame,'ClickListener') + listener.Active = true + listener.MouseButton1Down:connect(function(nx,ny) OnPlayerEntrySelect(nentry, nx,ny) end) + + AddMiddleBGFrame() + BaseUpdate() + AddingFrameLock = false +end + +--[[ + Note:major optimization can be done here + removes this player's frame if it exists, calls base update +--]] +function RemovePlayerFrame(tplayer) + while AddingFrameLock do debugprint('in removing player frame lock') wait(1/30) end + AddingFrameLock = true + + local tteam + for i,key in ipairs(PlayerFrames) do + if tplayer == key['Player'] then + if PopUpClipFrame.Parent == key['Frame'] then + PopUpClipFrame.Parent = nil + end + key['Frame']:Destroy() + tteam=key['MyTeam'] + table.remove(PlayerFrames,i) + end + end + if tteam then + for j,tentry in ipairs(tteam['MyPlayers']) do + if tentry['Player'] == tplayer then + RemovePlayerFromTeam(tteam,j) + end + end + end + + RemoveMiddleBGFrame() + UpdateMinimize() + BaseUpdate() + AddingFrameLock = false +end + +Players.ChildRemoved:connect(RemovePlayerFrame) + +---------------------------- +-- Team Callback Functions +---------------------------- +--[[ + turns a list of team entries with sub lists of players into a single ordered + list, in the correct order,and of the correct length + @Args: + tframes the team entries to unroll + outframes the list to unroll these entries into +--]] +function UnrollTeams(tframes,outframes) + local numEntries = 0 + if NeutralTeam and not NeutralTeam['IsHidden'] then + for i,val in ipairs(NeutralTeam['MyPlayers']) do + numEntries = numEntries + 1 + outframes[numEntries] = val['Frame'] + end + numEntries = numEntries + 1 + outframes[numEntries] = NeutralTeam['Frame'] + end + for i,val in ipairs(tframes) do + if not val['IsHidden'] then + for j,pval in ipairs(val.MyPlayers) do + numEntries = numEntries + 1 + outframes[numEntries] = pval['Frame'] + end + numEntries = numEntries + 1 + outframes[numEntries] = val['Frame'] + end + end + -- clear any additional entries from outframes + for i = numEntries + 1,#outframes,1 do + outframes[i] = nil + end +end +--[[ + uses lua's table.sort to sort the teams +--]] +function TeamSortFunc(a,b) + if a['TeamScore'] == b['TeamScore'] then + return a['ID'] < b['ID'] + end + if not a['TeamScore'] then return false end + if not b['TeamScore'] then return true end + return a['TeamScore'] < b['TeamScore'] + +end +--[[ + consider adding lock with wait for performance + sorts each of the team's player lists induvidually, adds up the team scores. + @Args: + tentries table of team entries +--]] +function SortTeams(tentries) + + for i,val in ipairs(tentries) do + + table.sort(val['MyPlayers'],PlayerSortFunction) + AddTeamScores(val) + end + table.sort(tentries,TeamSortFunc) +end +--[[ + base update for team mode, adds up the scores of all teams, sorts them, + then unrolls them into middleframes +--]] +function TeamListModeUpdate() + RecreateScoreColumns(PlayerFrames) + SortTeams(TeamFrames) + if NeutralTeam then + AddTeamScores(NeutralTeam) + --RecreateScoreColumns(NeutralTeam['MyPlayers']) + end + UnrollTeams(TeamFrames,MiddleFrames) +end +--[[ + adds up all the score of this team's players to form the team score + @Args: + team team entry to sum the scores of +--]] +function AddTeamScores(team) + + for j = 1, #ScoreNames,1 do + local i = ScoreNames[j] + local tscore = 0 + for _,j in ipairs(team['MyPlayers']) do + local tval = j['Player']:FindFirstChild('leaderstats') and j['Player'].leaderstats:FindFirstChild(i['Name']) + if tval and not tval:IsA('StringValue') then + tscore = tscore + GetScoreValue((j['Player'].leaderstats)[i['Name'] ]) + end + end + if team['Frame']:FindFirstChild(i['Name']) then + --team['Frame'][i['Name'] ].Size = UDim2.new(1 - (ScrollBarFrame.Size.X.Scale * 2),- ((j-1) * SpacingPerStat),1,0) + team['Frame'][i['Name'] ].Text = tostring(tscore) + end + end + UpdateMinimize() + +end + +--[[ + finds previous team this player was on, and if it exists calls removeplayerfromteam + @Args + entry Player entry +--]] +function FindRemovePlayerFromTeam(entry) + if entry['MyTeam'] then + for j,oldEntry in ipairs(entry['MyTeam']['MyPlayers']) do + if oldEntry['Player'] == entry['Player'] then + RemovePlayerFromTeam(entry['MyTeam'],j) + return + end + end + elseif NeutralTeam then + for j,oldEntry in ipairs(NeutralTeam['MyPlayers']) do + if oldEntry['Player'] == entry['Player'] then + RemovePlayerFromTeam(NeutralTeam,j) + return + end + end + end +end +--[[ + removes a single player from a given team (not usually called directly) + @Args: + teamEntry team entry to remove player from + index index of player in 'MyPlayers' list to remove +--]] +function RemovePlayerFromTeam(teamEntry,index) + table.remove(teamEntry['MyPlayers'],index) + --if teamEntry['AutoHide'] and #teamEntry['MyPlayers'] == 0 then + if teamEntry==NeutralTeam and #teamEntry['MyPlayers']==0 then + RemoveNeutralTeam() + end +end +--[[ + adds player entry entry to teamentry + removes them from any previous team + @Args: + teamEntry entry of team to add player to + entry player entry to add to this team +--]] +function AddPlayerToTeam(teamEntry,entry) + FindRemovePlayerFromTeam(entry) + table.insert(teamEntry['MyPlayers'],entry) + entry['MyTeam'] = teamEntry + if teamEntry['IsHidden'] then + teamEntry['Frame'].Parent = ListFrame + AddMiddleBGFrame() + end + teamEntry['IsHidden'] = false +end + + +function SetPlayerToTeam(entry) + FindRemovePlayerFromTeam(entry) + -- check to see if team exists, if it does add to that team + local setToTeam = false + for i,tframe in ipairs(TeamFrames) do + -- add my entry on the new team + if tframe['MyTeam'].TeamColor == entry['Player'].TeamColor then + AddPlayerToTeam(tframe,entry) + setToTeam = true + end + end + -- if player was set to an invalid team, then set it back to neutral + if not setToTeam and #(game.Teams:GetTeams())>0 then + debugprint(entry['Player'].Name..'could not find team') + entry['MyTeam']=nil + if not NeutralTeam then + AddNeutralTeam() + else AddPlayerToTeam(NeutralTeam,entry) end + end +end + +--[[ + Note:another big one, consiter breaking up + called when any children of player changes + handles 'Neutral', teamColor, Name and MembershipType changes + @Args + entry Player entry changed + property name of property changed +--]] +function PlayerChanged(entry, property) + while PlayerChangedLock do + debugprint('in playerchanged lock') + wait(1/30) + end + PlayerChangedLock=true + if property == 'Neutral' then + -- if player changing to neutral + if entry['Player'].Neutral and #(game.Teams:GetTeams())>0 then + debugprint(entry['Player'].Name..'setting to neutral') + FindRemovePlayerFromTeam(entry) + entry['MyTeam']=nil + if not NeutralTeam then + debugprint(entry['Player'].Name..'creating neutral team') + AddNeutralTeam() + else + debugprint(entry['Player'].Name..'adding to neutral team') + AddPlayerToTeam(NeutralTeam,entry) + end + elseif #(game.Teams:GetTeams())>0 then -- else player switching to a team, or a weird edgecase + debugprint(entry['Player'].Name..'has been set non-neutral') + SetPlayerToTeam(entry) + end + BaseUpdate() + elseif property == 'TeamColor' and not entry['Player'].Neutral and entry['Player'] ~= entry['MyTeam'] then + debugprint(entry['Player'].Name..'setting to new team') + SetPlayerToTeam(entry) + BaseUpdate() + elseif property == 'Name' or property == 'MembershipType' then + entry['Frame']:FindFirstChild('BCLabel').Image = getMembershipTypeIcon(entry['Player'].MembershipType,entry['Player']) + entry['Frame'].Name = entry['Player'].Name + entry['Frame'].TitleFrame.Title.Text = entry['Player'].Name + if(entry['Frame'].BCLabel.Image ~= '') then + entry['Frame'].TitleFrame.Title.Position=UDim2.new(.01, 30, .1, 0) + end + if entry['Player'] == LocalPlayer then + entry['Frame'].TitleFrame.DropShadow.Text= entry['Player'].Name + ChangeHeaderName(entry['Player'].Name) + end + BaseUpdate() + end + PlayerChangedLock=false +end + +function OnFriendshipChanged(player,friendStatus) + + Delay(.5,function() + debugprint('friend status changed for:'..player.Name .." ".. tostring(friendStatus) .. " vs " .. tostring(GetFriendStatus(player)) ) + for _, entry in ipairs(PlayerFrames) do + if entry['Player']==player then + local nicon = getFriendStatusIcon(friendStatus) + if nicon == '' and entry['Frame'].FriendLabel.Image ~= '' then + entry['Frame'].TitleFrame.Title.Position=entry['Frame'].TitleFrame.Title.Position-UDim2.new(0,17,0,0) + elseif nicon ~= '' and entry['Frame'].FriendLabel.Image == '' then + entry['Frame'].TitleFrame.Title.Position=entry['Frame'].TitleFrame.Title.Position+UDim2.new(0,17,0,0) + debugprint('confirmed status:'..player.Name) + end + entry['Frame'].FriendLabel.Image = nicon + return + end + end + end) +end + +LocalPlayer.FriendStatusChanged:connect(OnFriendshipChanged) + +--[[ + adds a neutral team if nessisary + Note: a lot of redundant code here, might want to refactor to share a function with insertteamframe +--]] +function AddNeutralTeam() + while NeutralTeamLock do debugprint('in neutral team 2 lock') wait() end + NeutralTeamLock = true + + local defaultTeam = Instance.new('Team') + defaultTeam.TeamColor = BrickColor.new('White') + defaultTeam.Name = 'Neutral' + local nentry = {} + nentry['MyTeam'] = defaultTeam + nentry['MyPlayers'] = {} + nentry['Frame'] = MiddleTemplate:Clone() + WaitForChild(WaitForChild(nentry['Frame'],'TitleFrame'),'Title').Text = defaultTeam.Name + nentry['Frame'].TitleFrame.Position=UDim2.new(nentry['Frame'].TitleFrame.Position.X.Scale,nentry['Frame'].TitleFrame.Position.X.Offset,.1,0) + nentry['Frame'].TitleFrame.Size=UDim2.new(nentry['Frame'].TitleFrame.Size.X.Scale,nentry['Frame'].TitleFrame.Size.X.Offset,.8,0) + nentry['Frame'].TitleFrame.Title.Font = 'ArialBold' + nentry['Frame'].Position = UDim2.new(1,0,((#MiddleFrames) * nentry['Frame'].Size.Y.Scale),0) + WaitForChild(nentry['Frame'],'ClickListener').MouseButton1Down:connect(function(nx,ny) StartDrag(nentry,nx,ny) end) + nentry['Frame'].ClickListener.BackgroundColor3 = Color3.new(1,1,1) + nentry['Frame'].ClickListener.BackgroundTransparency = .7 + nentry['Frame'].ClickListener.AutoButtonColor=false + nentry['AutoHide'] = true + nentry['IsHidden'] = true + for _,i in pairs(PlayerFrames) do + if i['Player'].Neutral or not i['MyTeam'] then + AddPlayerToTeam(nentry,i) + end + end + if #nentry['MyPlayers'] > 0 then + NeutralTeam = nentry + UpdateMinimize() + BaseUpdate() + end + NeutralTeamLock = false +end + +function RemoveNeutralTeam() + while NeutralTeamLock do debugprint('in neutral team lock') wait() end + NeutralTeamLock = true + NeutralTeam['Frame']:Destroy() + NeutralTeam=nil + RemoveMiddleBGFrame() + NeutralTeamLock = false +end + +--[[ + +--]] +function TeamScoreChanged(entry,nscore) + WaitForChild(entry['Frame'],'PlayerScore').Text = tostring(nscore) + entry['TeamScore'] = nscore +end +--[[ + called when child added to a team, used for autohide functionality + Note: still has teamscore, consiter removing +--]] +function TeamChildAdded(entry,nchild) + if nchild.Name == 'AutoHide' then + entry['AutoHide'] = true + elseif nchild.Name == 'TeamScore' then + WaitForChild(entry['Frame'],'PlayerScore').Text = tostring(nchild.Value) + entry['TeamScore'] = nchild.Value + nchild.Changed:connect(function() TeamScoreChanged(entry,nchild.Value) end) + end +end +--[[ + called when child added to a team, used for autohide functionality + Note: still has teamscore, consiter removing +--]] +function TeamChildRemoved(entry,nchild) + if nchild.Name == 'AutoHide' then + entry['AutoHide'] = false + elseif nchild.Name == 'TeamScore' then + WaitForChild(entry['Frame'],'PlayerScore').Text = "" + entry['TeamScore'] = nil + end +end + +function TeamChanged(entry, property) + if property=='Name' then + WaitForChild(WaitForChild(entry['Frame'],'TitleFrame'),'Title').Text = entry['MyTeam'].Name + + elseif property=='TeamColor' then + entry['Frame'].ClickListener.BackgroundColor3 = entry['MyTeam'].TeamColor.Color + + for _,i in pairs(TeamFrames) do + if i['MyTeam'].TeamColor == entry['MyTeam'] then + RemoveTeamFrame(entry['MyTeam']) --NO DUPLICATE TEAMS! + end + end + + entry['MyPlayers']={} + + for _,i in pairs(PlayerFrames) do + SetPlayerToTeam(i) + end + BaseUpdate() + end +end + +--[[ + creates team entry and frame for this team, sets up listeners for this team + adds any players intended for this team,Creates neutral team if this is the first team added + Note:might be best to break this into multiple functions to simplify + @Args: + nteam new team object added +--]] +function InsertTeamFrame(nteam) + while AddingFrameLock do debugprint('in adding team frame lock') wait(1/30) end + AddingFrameLock = true + --for _,i in pairs(TeamFrames) do + local nentry = {} + nentry['MyTeam'] = nteam + nentry['MyPlayers'] = {} + nentry['Frame'] = MiddleTemplate:Clone() + WaitForChild(WaitForChild(nentry['Frame'],'TitleFrame'),'Title').Text = nteam.Name + nentry['Frame'].TitleFrame.Title.Font = 'ArialBold' + nentry['Frame'].TitleFrame.Title.FontSize = 'Size18' + nentry['Frame'].TitleFrame.Position=UDim2.new(nentry['Frame'].TitleFrame.Position.X.Scale,nentry['Frame'].TitleFrame.Position.X.Offset,.1,0) + nentry['Frame'].TitleFrame.Size=UDim2.new(nentry['Frame'].TitleFrame.Size.X.Scale,nentry['Frame'].TitleFrame.Size.X.Offset,.8,0) + nentry['Frame'].Position = UDim2.new(0.5,0,((#MiddleFrames) * nentry['Frame'].Size.Y.Scale),0) + WaitForChild(nentry['Frame'],'ClickListener').MouseButton1Down:connect(function(nx,ny) StartDrag(nentry,nx,ny) end) + nentry['Frame'].ClickListener.BackgroundColor3 = nteam.TeamColor.Color + nentry['Frame'].ClickListener.BackgroundTransparency = .7 + nentry['Frame'].ClickListener.AutoButtonColor=false + AddId = AddId + 1 + nentry['ID'] = AddId + nentry['AutoHide'] = false + if nteam:FindFirstChild('AutoHide') then + nentry['AutoHide'] = true + end + if nteam:FindFirstChild('TeamScore') then + TeamChildAdded(nentry,nteam.TeamScore) + + end + + nteam.ChildAdded:connect(function(nchild) TeamChildAdded(nentry,nchild) end) + nteam.ChildRemoved:connect(function(nchild) TeamChildRemoved(nentry,nchild) end) + nteam.Changed:connect(function(prop) TeamChanged(nentry,prop) end) + + for _,i in pairs(PlayerFrames) do + if not i['Player'].Neutral and i['Player'].TeamColor == nteam.TeamColor then + AddPlayerToTeam(nentry,i) + end + end + nentry['IsHidden'] = false + if not nentry['AutoHide'] or #nentry['MyPlayers'] > 0 then + nentry['Frame'].Parent = ListFrame + AddMiddleBGFrame() + else + nentry['IsHidden'] = true + nentry['Frame'].Parent = nil + end + + table.insert(TeamFrames,nentry) + UpdateMinimize() + BaseUpdate() + if #TeamFrames == 1 and not NeutralTeam then + AddNeutralTeam() + end + AddingFrameLock = false +end +--[[ + removes team from team list + @Args: + nteam Teamobject to remove +--]] +function RemoveTeamFrame(nteam) + while AddingFrameLock do debugprint('in removing team frame lock') wait(1/30) end + AddingFrameLock = true + if IsMinimized.Value then + end + local myEntry + for i,key in ipairs(TeamFrames) do + if nteam == key['MyTeam'] then + myEntry = key + key['Frame']:Destroy() + table.remove(TeamFrames,i) + end + end + if #TeamFrames==0 then + debugprint('removeteamframe, remove neutral') + if NeutralTeam then + RemoveNeutralTeam() + end + end + for i,key in ipairs(myEntry['MyPlayers']) do + RemovePlayerFromTeam(myEntry,i) + PlayerChanged(key, 'TeamColor') + end + RemoveMiddleBGFrame() + BaseUpdate() + AddingFrameLock = false +end + +function TeamAdded(nteam) + InsertTeamFrame(nteam) +end + +function TeamRemoved(nteam) + RemoveTeamFrame(nteam) +end + --------------------------------- +--[[ + called when ANYTHING changes the state of the playerlist + re-sorts everything,assures correct positions of all elements +--]] +function BaseUpdate() + while BaseUpdateLock do debugprint('in baseupdate lock') wait(1/30) end + BaseUpdateLock = true + --print ('baseupdate') + UpdateStatNames() + + if #TeamFrames == 0 and not NeutralTeam then + PlayerListModeUpdate() + else + TeamListModeUpdate() + end + for i,key in ipairs(MiddleFrames) do + if key.Parent ~= nil then + key.Position = UDim2.new(.5,0,((#MiddleFrames - (i)) * key.Size.Y.Scale),0) + end + end + if not IsMinimized.Value and #MiddleFrames>DefaultEntriesOnScreen then + UpdateScrollPosition() + end + + UpdateMinimize() + + UpdateScrollBarSize() + UpdateScrollPosition() + + UpdateScrollBarVisibility() + --debugprint('EndBaseUpdate') + BaseUpdateLock = false +end + +--[[ + code for attaching tab key to maximizing player list +--]] +game.GuiService:AddKey("\t") +local LastTabTime = time() +game.GuiService.KeyPressed:connect( +function(key) + if key == "\t" then + debugprint('caught tab key') + local modalCheck, isModal = pcall(function() return game.GuiService.IsModalDialog end) + if modalCheck == false or (modalCheck and isModal == false) then + if time() - LastTabTime > 0.4 then + LastTabTime = time() + if IsTabified.Value then + if not IsMaximized.Value then + ScreenGui:TweenPosition(UDim2.new(0, 0, 0,0),'Out','Linear',BASE_TWEEN*1.2,true) + IsMaximized.Value = true + else + ScreenGui:TweenPosition(UDim2.new(NormalBounds.X.Scale, NormalBounds.X.Offset-10, 0,0),'Out','Linear',BASE_TWEEN*1.2,true) + IsMaximized.Value = false + IsMinimized.Value=true + end + else + ToggleMaximize() + end + + end + end + end +end) + + +function PlayersChildAdded(tplayer) + if tplayer:IsA('Player') then + Spawn(function() debugPlayerAdd(tplayer) end) + else + BlowThisPopsicleStand() + end +end + +function coreGuiChanged(coreGuiType, enabled) + if coreGuiType == Enum.CoreGuiType.All or coreGuiType == Enum.CoreGuiType.PlayerList then + MainFrame.Visible = enabled + end +end + +function TeamsChildAdded(nteam) + if nteam:IsA('Team') then + TeamAdded(nteam) + else + BlowThisPopsicleStand() + end +end + +function TeamsChildRemoved(nteam) + if nteam:IsA('Team') then + TeamRemoved(nteam) + else + BlowThisPopsicleStand() + end +end + + ---------------------------- + -- Hookups and initialization + ---------------------------- +function debugPlayerAdd(p) + InsertPlayerFrame(p) +end + +pcall(function() + coreGuiChanged(Enum.CoreGuiType.PlayerList, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.PlayerList)) + Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) +end) + +while not game:GetService('Teams') do wait(1/30) debugprint('Waiting For Teams') end +for _,i in pairs(game.Teams:GetTeams()) do TeamAdded(i) end +for _,i in pairs(Players:GetPlayers()) do Spawn(function() debugPlayerAdd(i) end) end + +game.Teams.ChildAdded:connect(TeamsChildAdded) +game.Teams.ChildRemoved:connect(TeamsChildRemoved) +Players.ChildAdded:connect(PlayersChildAdded) + +InitReportAbuse() +AreNamesExpanded.Value = true +BaseUpdate() + + + +--UGGGLY,find a better way later +wait(2) +IsPersonalServer= not not game.Workspace:FindFirstChild("PSVariable") + + ---------------------------- + -- Running Logic + ---------------------------- + + --debug stuffs, will only run for 'newplayerlistisbad' + if LocalPlayer.Name == 'newplayerlistisbad' or LocalPlayer.Name == 'imtotallyadmin' then + debugFrame.Parent = ScreenGui + Spawn(function() + while true do + local str_players='' + for _,i in pairs(game.Players:GetPlayers()) do + str_players= str_players .." " .. i.Name + end + debugplayers.Text=str_players + wait(.5) + end + end) + end + + diff --git a/app/files/CoreGui/48488236 b/app/files/CoreGui/48488236 new file mode 100644 index 0000000..8ac9234 --- /dev/null +++ b/app/files/CoreGui/48488236 @@ -0,0 +1,2425 @@ +local RbxGui + +local localTesting = true + +local screen = script.Parent +local screenResizeCon = nil + +local friendWord = "Friend" +local friendWordLowercase = "friend" + +local elementNames = {} +local elementNameToElement = {} + +local privilegeOwner = 255 +local privilegeAdmin = 240 +local privilegeMember = 128 +local privilegeVisitor = 10 +local privilegeBanned = 0 + +local inContextMenu = false +local contextMenu3d = true + +local bigEasingStyle = Enum.EasingStyle.Back +local smallEasingStyle = Enum.EasingStyle.Quart + +local personalServerContextAdded = false +local personalServerPlace = false +local success = pcall(function() personalServerPlace = game.IsPersonalServer end) +if not success then + personalServerPlace = false +end + +local friendRequestBlacklist = {} +local otherPlayerBlacklist = {} + +local currentSortName = "" + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +local function waitForProperty(instance, prop) + while not instance[prop] do + instance.Changed:wait() + end +end + +local function Color3I(r,g,b) + return Color3.new(r/255,g/255,b/255) +end + +function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function ArrayRemove(t, obj) + for i, obj2 in ipairs(t) do + if obj == obj2 then + table.remove(t, i) + return true + end + end + return false +end + +local function getPlayers() + local result = {} + local players = game:GetService("Players"):GetChildren() + if players then + for i, player in ipairs(players) do + if player:IsA("Player") then + table.insert(result, player) + end + end + end + return result +end + +local brickColorTable = {} +for i = 0, 63 do + brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(i).Color +end + +local function remapColor(i, j) + brickColorTable[BrickColor.palette(i).Name] = BrickColor.palette(j).Color +end + +remapColor(13, 12) +remapColor(14, 12) +remapColor(15, 12) +remapColor(61, 29) +remapColor(63, 62) +remapColor(56, 50) +remapColor(45, 53) +remapColor(51, 20) +remapColor(4, 20) +remapColor(59, 35) +remapColor(60, 29) + +local function getColor(brickColor) + if brickColorTable[brickColor.Name] then + return brickColorTable[brickColor.Name] + else + return brickColor.Color; + end +end + + + +local function getTeams() + local result = {} + local teams = game:GetService("Teams"):GetChildren() + for i, team in ipairs(teams) do + if team:IsA("Team") then + table.insert(result, team) + end + end + return result +end + +local supportFriends = true +local currentBoardType = "PlayerList" +local currentStatCount = 0 + +local createBoardsFunction = nil + + +local playerTable = {} +local teamTable = {} +local teamColorTable = {} + +local removePlayerFunction = nil +local recreatePlayerFunction = nil +local addPlayerFunction = function(player) + if recreatePlayerFunction then + recreatePlayerFunction(player) + end +end +local sortPlayerListsFunction = nil + +local minimizedState = nil +local bigWindowImposter = nil +local smallWindowPosition = UDim2.new(0, -20, 0,5) +local smallWindowSize = UDim2.new(1,0,1,0) +local bigWindowSize = UDim2.new(0.6,0,0.6,0) +local bigWindowPosition = UDim2.new(.2, 0, .2,0) + +local smallWindowHeaderYSize = 32 + +local debounceTeamsChanged = false + +local currentWindowState = "Small" +local previousWindowState = nil +local transitionWindowsFunction = nil + +local container = nil +local topRightTrayContainer = nil + +local playerContextMenu = nil +local contextMenuElements = {} +local updateContextMenuItems = nil + +local function addContextMenuLabel(getText1, getText2, isVisible) + local t = {} + t.Type = "Label" + t.GetText1 = getText1 + t.GetText2 = getText2 + t.IsVisible = isVisible + table.insert(contextMenuElements, t) +end +local function addContextMenuButton(text, isVisible, isActive, doIt) + local t = {} + t.Text = text + t.Type = "Button" + t.IsVisible = isVisible + t.IsActive = isActive + t.DoIt = doIt + table.insert(contextMenuElements, t) +end + +local function getFriendStatus(player) + if player == game.Players.LocalPlayer then + return Enum.FriendStatus.NotFriend + else + local success, result = pcall(function() return game.Players.LocalPlayer:GetFriendStatus(player) end) + if success then + return result + else + return Enum.FriendStatus.NotFriend + end + end +end + + +local function getPrivilegeType(player) + local rank = player.PersonalServerRank + if rank >= privilegeOwner then + return privilegeOwner + elseif rank < privilegeOwner and rank >= privilegeAdmin then + return privilegeAdmin + elseif rank < privilegeAdmin and rank >= privilegeMember then + return privilegeMember + elseif rank < privilegeMember and rank >= privilegeVisitor then + return privilegeVisitor + else + return privilegeBanned + end +end + +--Populate the ContextMenus +addContextMenuLabel( + --GetText1 + function(player) + return "Loading..." + end, + --GetText2 + nil, + --IsVisible + function(player) + return getFriendStatus(player) == Enum.FriendStatus.Unknown + end) + +addContextMenuButton("Send " .. friendWord .. " Request", + --IsVisible + function(player) + return (not otherPlayerBlacklist[player]) and (getFriendStatus(player) == Enum.FriendStatus.NotFriend) + end, + --IsActive + function(player) + return true + end, + --DoIt? + function(player) + otherPlayerBlacklist[player] = true + return game.Players.LocalPlayer:RequestFriendship(player) + end +) +addContextMenuButton("Un" .. friendWordLowercase, + --IsVisible + function(player) + return getFriendStatus(player) == Enum.FriendStatus.Friend + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + return game.Players.LocalPlayer:RevokeFriendship(player) + end +) +addContextMenuButton("Accept " .. friendWord .. " Request", + --IsVisible + function(player) + return (not friendRequestBlacklist[player]) and (getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + return game.Players.LocalPlayer:RequestFriendship(player) + end +) + +addContextMenuButton("Deny " .. friendWord .. " Request", + --IsVisible + function(player) + return getFriendStatus(player) == Enum.FriendStatus.FriendRequestReceived + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + friendRequestBlacklist[player] = true + return game.Players.LocalPlayer:RevokeFriendship(player) + end +) + +addContextMenuButton("Cancel " .. friendWord .. " Request", + --IsVisible + function(player) + return false -- disable cancel request for now (can lead to griefing) + --return getFriendStatus(player) == Enum.FriendStatus.FriendRequestSent + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + otherPlayerBlacklist[player] = false + return game.Players.LocalPlayer:RevokeFriendship(player) + end +) + +function addPersonalServerContext() + if personalServerContextAdded then return end + personalServerContextAdded = true + addContextMenuButton("Ban", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) >= privilegeAdmin and (getPrivilegeType(player) < privilegeAdmin) ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + player.PersonalServerRank = privilegeBanned + return true + end + ) + addContextMenuButton("Promote to Visitor", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) >= privilegeAdmin ) and ( getPrivilegeType(player) == privilegeBanned ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Promote(player) + return true + end + ) + addContextMenuButton("Promote to Member", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) >= privilegeAdmin ) and ( getPrivilegeType(player) == privilegeVisitor ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Promote(player) + return true + end + ) + addContextMenuButton("Promote to Admin", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) == privilegeOwner ) and ( getPrivilegeType(player) == privilegeMember ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Promote(player) + return true + end + ) + addContextMenuButton("Demote to Member", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) == privilegeOwner ) and ( getPrivilegeType(player) == privilegeAdmin ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Demote(player) + return true + end + ) + addContextMenuButton("Demote to Visitor", + --IsVisible + function(player) + return ( getPrivilegeType(game.Players.LocalPlayer) >= privilegeAdmin ) and ( getPrivilegeType(player) == privilegeMember ) + end, + --IsActive + function(player) + return true + end, + --DoIt + function(player) + game:GetService("PersonalServerService"):Demote(player) + return true + end + ) +end + +local function setupBuildToolManagement() + local buildToolManagerAssetId = 64164692 + game:GetService("ScriptContext"):AddCoreScript(buildToolManagerAssetId,game.Players.LocalPlayer,"BuildToolManager") +end + + +local function getStatColumns(players) + for i, player in ipairs(players) do + local leaderstats = player:FindFirstChild("leaderstats") + if leaderstats then + local stats = {} + local children = leaderstats:GetChildren() + if children then + for i, stat in ipairs(children) do + if stat:IsA("IntValue") then + table.insert(stats, stat) + else + --TODO: This should check for IntValue only but current ScoreHud does not + table.insert(stats, stat) + end + end + end + return stats + end + end + return nil +end + +local function determineBoardType() + local players = getPlayers() + + local foundLeaderstats = false + local numStats = 0 + local foundTeam = false + + local stats = getStatColumns(players) + if stats then + foundLeaderstats = true + numStats = #stats + end + + for i, player in ipairs(players) do + if not foundTeam then + if not player.Neutral then + foundTeam = true + break + end + end + end + + if foundLeaderstats and foundTeam then + return "TeamScore", numStats + elseif foundLeaderstats then + return "PlayerScore", numStats + elseif foundTeam then + return "TeamList", numStats + else + return "PlayerList", numStats + end +end + +local function toggleBigWindow() + if container == nil then + return + end + + if currentWindowState == "Big" then + --Hide it + if previousWindowState == nil or previousWindowState == "Big" or previousWindowState == "None" then + transitionWindowsFunction("None") + else + transitionWindowsFunction("Small") + end + else + previousWindowState = currentWindowState + transitionWindowsFunction("Big") + end +end +local previousBigPlayerList = nil +local function rebuildBoard(owner, boardType, numStats) + if topRightTrayContainer == nil then + topRightTrayContainer = owner:FindFirstChild("PlayerListTopRightFrame") + if topRightTrayContainer == nil then + topRightTrayContainer = Instance.new("Frame") + topRightTrayContainer.Name = "PlayerListTopRightFrame" + topRightTrayContainer.BackgroundTransparency = 1 + topRightTrayContainer.Size = UDim2.new(0.2, 16, 0.42, 16) + topRightTrayContainer.Position = UDim2.new(0.8, 0, 0, 0) + topRightTrayContainer.Parent = container + end + end + if minimizedState == nil then + minimizedState = Instance.new("Frame") + minimizedState.Name = "MinimizedPlayerlist" + minimizedState.BackgroundTransparency = 1 + minimizedState.Position = UDim2.new(1, -166, 0,0) + minimizedState.Size = UDim2.new(0, 151, 0, 30) + + playerListButton = Instance.new("ImageButton") + playerListButton.Name = "GoSmallButton" + playerListButton.Image = "rbxasset://textures/ui/playerlist_hidden_small.png" + playerListButton.BackgroundTransparency = 1 + playerListButton.Size = UDim2.new(0.0, 35, 0, 30) + playerListButton.Position = UDim2.new(1, -35, 0, 0) + playerListButton.MouseButton1Click:connect( + function() + transitionWindowsFunction("Small") + end) + playerListButton.Parent = minimizedState + + minimizedState.Visible = false + robloxLock(minimizedState) + minimizedState.Parent = topRightTrayContainer + end + if bigWindowImposter == nil then + bigWindowImposter = owner:FindFirstChild("BigPlayerListWindowImposter") + if bigWindowImposter == nil then + bigWindowImposter = Instance.new("Frame") + bigWindowImposter.Name = "BigPlayerListWindowImposter" + bigWindowImposter.Visible = false + bigWindowImposter.BackgroundColor3 = Color3.new(0,0,0) + bigWindowImposter.BackgroundTransparency = 0.7 + bigWindowImposter.BorderSizePixel = 0 + bigWindowImposter.Size = UDim2.new(0.4, 7, 0.4, 7) + bigWindowImposter.Position = UDim2.new(0.3, 0, 0.3, 0) + robloxLock(bigWindowImposter) + bigWindowImposter.Parent = container + end + end + if container == nil or container ~= owner then + container = owner + + topRightTrayContainer.Parent = container + bigWindowImposter.Parent = container + end + + local smallVisible = true + local bigVisible = false + if container then + if topRightTrayContainer then + --Delete the old boards + if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then + smallVisible = topRightTrayContainer.SmallPlayerlist.Visible + topRightTrayContainer.SmallPlayerlist.Parent = nil + end + end + if container:FindFirstChild("BigPlayerlist") then + bigVisible = container.BigPlayerlist.Visible or (previousBigPlayerList ~= nil) + container.BigPlayerlist.Parent = nil + if previousBigPlayerList ~= nil then + pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) + previousBigPlayerList = nil + end + end + end + + local smallBoard, bigBoard = createBoardsFunction(boardType, numStats) + if smallBoard then + smallBoard.Visible = smallVisible + smallBoard.Parent = topRightTrayContainer + recalculateSmallPlayerListSize(smallBoard) + end + if bigBoard then + if bigVisible then + previousBigPlayerList = bigBoard + local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + previousBigPlayerList.Visible = true + end, + function() + previousBigPlayerList.Visible = false + end) + end) + bigBoard.Visible = bigVisible + else + bigBoard.Visible = false + end + bigBoard.Parent = container + end + return container +end + +function recalculateSmallPlayerListSize(smallPlayerList) + waitForChild(smallPlayerList,"ScrollingArea") + waitForChild(smallPlayerList.ScrollingArea, "ScrollingFrame") + local scrollingFrame = smallPlayerList.ScrollingArea.ScrollingFrame + local playerLines = scrollingFrame:GetChildren() + + local totalPlayerListSize = 0 + for i = 1, #playerLines do + totalPlayerListSize = totalPlayerListSize + playerLines[i].AbsoluteSize.Y + end + + if not smallPlayerList.Parent then return end + + local yOffset = math.max(0,(smallPlayerList.Size.Y.Scale * smallPlayerList.Parent.AbsoluteSize.Y) - totalPlayerListSize - smallWindowHeaderYSize) + smallPlayerList.Size = UDim2.new(smallPlayerList.Size.X.Scale,smallPlayerList.Size.X.Offset,smallPlayerList.Size.Y.Scale,-yOffset) +end + + +local function showBigPlayerWindow() + if container:FindFirstChild("BigPlayerlist") then + if container.BigPlayerlist.Visible then + return + end + end + + bigWindowImposter.Visible = true + bigWindowImposter:TweenSizeAndPosition(bigWindowSize, bigWindowPosition, Enum.EasingDirection.Out, bigEasingStyle, 0.3, true, + function(state) + if state == Enum.TweenStatus.Completed then + bigWindowImposter.Visible = false + if container:FindFirstChild("BigPlayerlist") then + container.BigPlayerlist.Visible = true + end + end + end) +end + +local function hideBigPlayerWindow(completed) + if playerContextMenu then + playerContextMenu.Visible = false + end + + if container:FindFirstChild("BigPlayerlist") then + if container.BigPlayerlist.Visible == false and bigWindowImposter.Visible == false then + if completed then + completed() + end + --Already completely hidden + return + end + container.BigPlayerlist.Visible = false + end + + local completedFunction = completed + bigWindowImposter.Visible = true + bigWindowImposter:TweenSizeAndPosition(UDim2.new(0.4, 0, 0.4, 0), UDim2.new(0.3, 0, 0.3, 0), Enum.EasingDirection.In, Enum.EasingStyle.Quart, 0.15, true, + function(state) + if state == Enum.TweenStatus.Completed then + bigWindowImposter.Visible = false + if completedFunction then + completedFunction() + end + end + end) +end +local function hideSmallPlayerWindow(completed) + if playerContextMenu then + playerContextMenu.Visible = false + end + if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then + local completedFunction = completed + if topRightTrayContainer.SmallPlayerlist.Visible then + topRightTrayContainer.SmallPlayerlist:TweenPosition(UDim2.new(1,0,smallWindowPosition.Y.Scale, smallWindowPosition.Y.Offset), Enum.EasingDirection.Out, smallEasingStyle, 0.3, true, + function(state) + if state == Enum.TweenStatus.Completed then + if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then + topRightTrayContainer.SmallPlayerlist.Visible = false + end + if completedFunction then + completedFunction() + end + end + end) + return + end + end + if completed then + completed() + end +end + + +transitionWindowsFunction = function(desiredState) + if desiredState == "Big" then + minimizedState.Visible = false + hideSmallPlayerWindow() + + if previousBigPlayerList ~= nil then + if previousBigPlayerList ~= container:FindFirstChild("BigPlayerlist") then + pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) + previousBigPlayerList = nil + previousBigPlayerList = container:FindFirstChild("BigPlayerlist") + end + else + previousBigPlayerList = container:FindFirstChild("BigPlayerlist") + end + + if previousBigPlayerList then + local firstShow = false + local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(previousBigPlayerList, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + if not firstShow then + showBigPlayerWindow() + firstShow = true + else + previousBigPlayerList.Visible = true + end + end, + function() + if previousBigPlayerList then + previousBigPlayerList.Visible = false + end + end) + end) + if centerDialogSupported == false then + print("Exception", msg) + showBigPlayerWindow() + end + else + showBigPlayerWindow() + end + currentWindowState = "Big" + elseif desiredState == "Small" then + minimizedState.Visible = false + if previousBigPlayerList ~= nil then + pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) + previousBigPlayerList = nil + end + + hideBigPlayerWindow() + if topRightTrayContainer:FindFirstChild("SmallPlayerlist") then + if not topRightTrayContainer.SmallPlayerlist.Visible or topRightTrayContainer.SmallPlayerlist.Position ~= smallWindowPosition then + topRightTrayContainer.SmallPlayerlist.Visible = true + topRightTrayContainer.SmallPlayerlist:TweenPosition(smallWindowPosition, Enum.EasingDirection.Out, smallEasingStyle, 0.3, true) + end + end + currentWindowState = "Small" + elseif desiredState == "None" then + if previousBigPlayerList ~= nil then + pcall(function() game.GuiService:RemoveCenterDialog(previousBigPlayerList) end) + previousBigPlayerList = nil + end + + local smallDone = false + local bigDone = false + hideSmallPlayerWindow( + function() + smallDone = true + if bigDone and smallDone then + minimizedState.Visible = true + end + end) + hideBigPlayerWindow( + function() + bigDone = true + if bigDone and smallDone then + minimizedState.Visible = true + end + end) + currentWindowState = "None" + end +end + +local function getStatValuesForPlayer(player) + local leaderstats = player:FindFirstChild("leaderstats") + if leaderstats then + local children = leaderstats:GetChildren() + if children then + local result = {} + --Just go based on position + for i, stat in ipairs(children) do + if stat:IsA("IntValue") then + table.insert(result, stat) + else + table.insert(result, 0) + end + end + + return result, leaderstats + end + end + return nil +end + +--ChildAdded on Player (if it's name is "leaderstats") + +if UserSettings and LoadLibrary then + + RbxGui,msg = LoadLibrary("RbxGui") + + local function createTeamName(name, color) + local fontHeight = 20 + local frame = Instance.new("Frame") + frame.Name = "Team-" .. name + frame.BorderSizePixel = 0 + frame.BackgroundTransparency = 0.5 + frame.BackgroundColor3 = Color3.new(1,1,1) + frame.Size = UDim2.new(1, 0, 0, fontHeight) + frame.Position = UDim2.new(0,0,0,0) + + local label = Instance.new("TextLabel") + label.Name = "NameLabel" + label.Text = " " .. name + label.Font = Enum.Font.ArialBold + label.FontSize = Enum.FontSize.Size18 + label.Position = UDim2.new(0,0,0,0) + label.Size = UDim2.new(1,0,1,0) + label.TextColor3 = Color3.new(1,1,1) + label.BackgroundTransparency = 0.5 + label.BackgroundColor3 = getColor(color) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Left + + local changeFunc = nil + label, changeFunc = RbxGui.AutoTruncateTextObject(label) + label.Parent = frame + + return frame, changeFunc + end + + local function getFriendStatusIcon(friendStatus) + if friendStatus == Enum.FriendStatus.Unknown or friendStatus == Enum.FriendStatus.NotFriend then + return nil + elseif friendStatus == Enum.FriendStatus.Friend then + return "rbxasset://textures/ui/PlayerlistFriendIcon.png" + elseif friendStatus == Enum.FriendStatus.FriendRequestSent then + return "rbxasset://textures/ui/PlayerlistFriendRequestSentIcon.png" + elseif friendStatus == Enum.FriendStatus.FriendRequestReceived then + return "rbxasset://textures/ui/PlayerlistFriendRequestReceivedIcon.png" + else + error("Unknown FriendStatus: " .. friendStatus) + end + end + + local function getMembershipTypeIcon(membershipType) + if membershipType == Enum.MembershipType.None then + return "" + elseif membershipType == Enum.MembershipType.BuildersClub then + return "rbxasset://textures/ui/TinyBcIcon.png" + elseif membershipType == Enum.MembershipType.TurboBuildersClub then + return "rbxasset://textures/ui/TinyTbcIcon.png" + elseif membershipType == Enum.MembershipType.OutrageousBuildersClub then + return "rbxasset://textures/ui/TinyObcIcon.png" + else + error("Uknown membershipType" .. membershipType) + end + end + + + local function updatePlayerFriendStatus(nameObject, friendStatus) + local fontHeight = 20 + + local friendIconImage = getFriendStatusIcon(friendStatus) + nameObject.MembershipTypeLabel.FriendStatusLabel.Visible = (friendIconImage ~= nil) + + if friendIconImage ~= nil then + --Show friend icon + nameObject.MembershipTypeLabel.FriendStatusLabel.Image = friendIconImage + nameObject.NameLabel.Position =UDim2.new(0,2*fontHeight,0,1) + nameObject.NameLabel.Size = UDim2.new(1,-2*fontHeight,1,-2) + else + --Hide the friend icon + nameObject.NameLabel.Position = UDim2.new(0,fontHeight+1,0,1) + nameObject.NameLabel.Size = UDim2.new(1,-(fontHeight+1),1,-2) + end + end + local function updatePlayerName(nameObject, membershipStatus, teamColor) + local fontHeight = 20 + + nameObject.Size = UDim2.new(1,0,0,fontHeight) + nameObject.MembershipTypeLabel.Image = getMembershipTypeIcon(membershipStatus) + end + + + local function updatePlayerNameColor(player, teamColor) + local function updatePlayerNameColorHelper(nameObject) + if teamColor ~= nil then + nameObject.NameLabel.TextColor3 = getColor(teamColor) + nameObject.NameLabel.FullNameLabel.TextColor3 = getColor(teamColor) + else + nameObject.NameLabel.TextColor3 = Color3.new(1,1,1) + nameObject.NameLabel.FullNameLabel.TextColor3 = Color3.new(1,1,1) + end + end + + updatePlayerNameColorHelper(playerTable[player].NameObjectSmall) + updatePlayerNameColorHelper(playerTable[player].NameObjectBig) + end + + + local function createPlayerName(name, membershipStatus, teamColor, friendStatus) + local frame = Instance.new("Frame") + frame.Name = "Player_" .. name + frame.BackgroundColor3 = Color3.new(1,1,1) + frame.BackgroundTransparency = 0.5 + frame.BorderSizePixel = 0 + + local membershipStatusLabel = Instance.new("ImageLabel") + membershipStatusLabel.Name = "MembershipTypeLabel" + membershipStatusLabel.BackgroundTransparency = 1 + membershipStatusLabel.Size = UDim2.new(1,0,1,0) + membershipStatusLabel.Position = UDim2.new(0,0,0,0) + membershipStatusLabel.SizeConstraint = Enum.SizeConstraint.RelativeYY + membershipStatusLabel.Parent = frame + + local friendStatusLabel = Instance.new("ImageLabel") + friendStatusLabel.Name = "FriendStatusLabel" + friendStatusLabel.Visible = false + friendStatusLabel.BackgroundTransparency = 1 + friendStatusLabel.Size = UDim2.new(1,0,1,0) + friendStatusLabel.Position = UDim2.new(1,0,0,0) + friendStatusLabel.Parent = membershipStatusLabel + + local changeNameFunction + local nameLabel = Instance.new("TextLabel") + nameLabel.Name = "NameLabel" + nameLabel.Text = name + nameLabel.Font = Enum.Font.ArialBold + nameLabel.FontSize = Enum.FontSize.Size14 + nameLabel.TextColor3 = Color3.new(1,1,1) + nameLabel.BackgroundTransparency = 1 + nameLabel.BackgroundColor3 = Color3.new(0,0,0) + nameLabel.TextXAlignment = Enum.TextXAlignment.Left + nameLabel, changeNameFunction = RbxGui.AutoTruncateTextObject(nameLabel) + nameLabel.Parent = frame + + updatePlayerName(frame, membershipStatus, teamColor) + if supportFriends and not friendRequestBlacklist[game.Players:FindFirstChild(name)] then + updatePlayerFriendStatus(frame, friendStatus) + else + updatePlayerFriendStatus(frame, Enum.FriendStatus.NotFriend) + end + return frame, changeNameFunction + end + + local function createStatColumn(i, numColumns, isTeam, color3, isHeader, stat) + local textLabel = Instance.new("TextButton") + textLabel.Name = "Stat" .. i + textLabel.AutoButtonColor = false + textLabel.TextColor3 = Color3.new(1,1,1) + textLabel.TextXAlignment = Enum.TextXAlignment.Right + textLabel.TextYAlignment = Enum.TextYAlignment.Center + textLabel.FontSize = Enum.FontSize.Size14 + + if isHeader then + textLabel.FontSize = Enum.FontSize.Size18 + else + textLabel.FontSize = Enum.FontSize.Size14 + end + if isHeader or isTeam then + textLabel.Font = Enum.Font.ArialBold + else + textLabel.Font = Enum.Font.Arial + end + + if isTeam then + textLabel.BackgroundColor3 = color3 + textLabel.Text = 0 + else + textLabel.BackgroundColor3 = Color3.new(0,0,0) + textLabel.Text = "" + end + textLabel.BackgroundTransparency = 1 + if i == numColumns then + textLabel.Size = UDim2.new(1/numColumns, -6, 1, 0) + else + textLabel.Size = UDim2.new(1/numColumns, -4, 1, 0) + end + + textLabel.Position = UDim2.new((i-1) * (1/numColumns), 0, 0, 0) + + local truncLabel, changer = RbxGui.AutoTruncateTextObject(textLabel) + + if isHeader then + local mouseCon = {} + + mouseCon[1] = truncLabel.MouseEnter:connect(function() + truncLabel.BackgroundTransparency = 0.2 + end) + mouseCon[2] = truncLabel.MouseLeave:connect(function() + truncLabel.BackgroundTransparency = 1 + end) + + mouseCon[3] = truncLabel.MouseButton1Click:connect(function() + sortPlayerListsFunction(truncLabel:GetChildren()[1].Name, (currentSortName == truncLabel:GetChildren()[1].Name) ) + truncLabel.BackgroundTransparency = 1 + end) + + mouseCon[4] = truncLabel:GetChildren()[1].MouseButton1Click:connect(function() + sortPlayerListsFunction(textLabel.Name, (currentSortName == truncLabel.Name) ) + truncLabel.BackgroundTransparency = 1 + end) + + mouseCon[5] = nil + mouseCon[5] = truncLabel.AncestryChanged:connect(function(child,parent) + if parent == nil then + for i,connection in pairs(mouseCon) do + connection:disconnect() + end + end + end) + end + + return truncLabel, changer + end + + local function createStatHeaders(stats, numColumns, isBig) + local frame = Instance.new("Frame") + frame.Name = "Headers" + frame.BorderSizePixel = 0 + frame.BackgroundColor3 = Color3.new(0,0,0) + frame.BackgroundTransparency = 1 + + local nameSize + if isBig then + nameSize = 0.5 + elseif numColumns == 1 then + nameSize = 0.7 + elseif numColumns == 2 then + nameSize = 0.6 + else + nameSize = 0.45 + end + frame.Size = UDim2.new(1-nameSize, 0, 1,0) + if isBig then + frame.Position = UDim2.new(nameSize,-25, 0,0) + else + frame.Position = UDim2.new(nameSize,0, 0,0) + end + + local i = 1 + while i <= numColumns do + local headerColumn, changeText = createStatColumn(i, numColumns, false, nil, true,stats[i]) + changeText(stats[i].Name) + headerColumn.Parent = frame + i = i + 1 + end + return frame, textChangers + end + + local function createStatColumns(nameObject, numColumns, isTeam, isBig) + local frame = Instance.new("Frame") + frame.Name = nameObject.Name .. "_WithStats" + frame.BorderSizePixel = 0 + frame.BackgroundColor3 = nameObject.BackgroundColor3 + frame.BackgroundTransparency = nameObject.BackgroundTransparency + frame.Size = nameObject.Size + frame.Position = nameObject.Position + + nameObject.BackgroundTransparency = 1 + + if numColumns == 0 then + nameObject.Size = UDim2.new(1,0,1,0) + nameObject.Position = UDim2.new(0,0,0,0) + nameObject.Parent = frame + return frame + end + + local statFrame = Instance.new("Frame") + statFrame.Name = "Stats" + if isTeam then + statFrame.BorderSizePixel = 0 + statFrame.BackgroundColor3 = nameObject.NameLabel.BackgroundColor3 + statFrame.BackgroundTransparency = nameObject.NameLabel.BackgroundTransparency + else + statFrame.BackgroundTransparency = 1 + end + + local nameSize + if isBig then + nameSize = 0.5 + elseif numColumns == 1 then + nameSize = 0.7 + elseif numColumns == 2 then + nameSize = 0.6 + else + nameSize = 0.45 + end + nameObject.Size = UDim2.new(nameSize, 0, 1, 0) + nameObject.Position = UDim2.new(0, 0, 0, 0) + statFrame.Size = UDim2.new(1-nameSize,0, 1,0) + statFrame.Position = UDim2.new(nameSize,0, 0,0) + + nameObject.Parent = frame + statFrame.Parent = frame + + local textChangers = {} + local i = 1 + while i <= numColumns do + local statColumn, changeText = createStatColumn(i, numColumns, isTeam, statFrame.BackgroundColor3) + statColumn.Parent = statFrame + table.insert(textChangers, changeText) + + i = i + 1 + end + + return frame, statFrame, textChangers + end + + local function createAlternatingRows(objects) + for i, line in ipairs(objects) do + if i % 2 == 0 then + line.BackgroundTransparency = 1 + else + line.BackgroundTransparency = 0.95 + end + end + end + local removeFromTeam = nil + + local function clearTableEntry(obj, tableInfo) + if tableInfo.MainObjectSmall then + tableInfo.MainObjectSmall.Parent = nil + tableInfo.MainObjectSmall = nil + end + if tableInfo.MainObjectBig then + tableInfo.MainObjectBig.Parent = nil + tableInfo.MainObjectBig = nil + end + if tableInfo.Connections then + for i, connection in ipairs(tableInfo.Connections) do + connection:disconnect() + end + tableInfo.Connections = nil + end + if tableInfo.LeaderStatConnections then + for i, connection in ipairs(tableInfo.LeaderStatConnections) do + connection:disconnect() + end + tableInfo.LeaderStatConnections = nil + end + if tableInfo.CurrentTeam then + removeFromTeam(obj) + tableInfo.CurrentTeam = nil + end + if tableInfo.Players then + for i, player in ipairs(tableInfo.Players) do + playerTable[player].CurrentTeam = nil + end + tableInfo.Players = {} + end + if tableInfo.StatValues then + tableInfo.StatValues = nil + end + end + + local function resetPlayerTable() + for player, info in pairs(playerTable) do + clearTableEntry(player, info) + playerTable[player] = nil + end + playerTable = {} + end + + local function resetTeamTable() + for team, info in pairs(teamTable) do + clearTableEntry(team, info) + teamTable[team] = nil + end + teamTable = {} + teamColorTable = {} + end + + local function getBoardTypeInfo() + local isTeam = (currentBoardType == "TeamScore" or currentBoardType == "TeamList") + local isScore = (currentBoardType == "TeamScore" or currentBoardType == "PlayerScore") + return isTeam, isScore + end + + + local function recomputeTeamScore(team, column) + if not team or team == "Neutral" then + return + end + + local function recomputeScoreHelper(statChangers) + if statChangers and column <= #statChangers then + local sum = 0 + for i, p in ipairs(teamTable[team].Players) do + if playerTable[p].StatValues and column <= #playerTable[p].StatValues then + sum = sum + playerTable[p].StatValues[column].Value + end + end + statChangers[column](sum) + end + end + + recomputeScoreHelper(teamTable[team].StatChangersSmall) + recomputeScoreHelper(teamTable[team].StatChangersBig) + end + local function recomputeCompleteTeamScore(team) + local col = 1 + while col <= currentStatCount do + recomputeTeamScore(team, col) + col = col + 1 + end + end + removeFromTeam = function(player) + if playerTable[player].CurrentTeam ~= nil and teamTable[playerTable[player].CurrentTeam] ~= nil then + ArrayRemove(teamTable[playerTable[player].CurrentTeam].Players, player) + recomputeCompleteTeamScore(playerTable[player].CurrentTeam) + playerTable[player].CurrentTeam = nil + end + end + + local function assignToTeam(player) + local isTeam, isScore = getBoardTypeInfo() + + if isTeam then + local newTeam = nil + + if player.Neutral or teamColorTable[player.TeamColor.Name] == nil then + newTeam = "Neutral" + else + newTeam = teamColorTable[player.TeamColor.Name] + end + + if playerTable[player].CurrentTeam == newTeam then + return + end + + local oldTeam = playerTable[player].LastTeam + removeFromTeam(player) + + playerTable[player].CurrentTeam = newTeam + + if teamTable[oldTeam] and teamTable[oldTeam]["NameChangeFuncBig"] then + if #teamTable[oldTeam].Players < 1 then + teamTable[oldTeam]["NameChangeFuncBig"](" " .. oldTeam.Name) + else + teamTable[oldTeam]["NameChangeFuncBig"](" " .. oldTeam.Name .. " (" .. tostring(#teamTable[oldTeam].Players) ..")") + end + end + + if teamTable[newTeam] then + table.insert(teamTable[newTeam].Players, player) + if newTeam["Name"] then + if teamTable[newTeam]["NameChangeFuncBig"] then + if #teamTable[newTeam].Players < 1 then + teamTable[newTeam]["NameChangeFuncBig"](" " .. newTeam.Name) + else + teamTable[newTeam]["NameChangeFuncBig"](" " .. newTeam.Name .. " (" .. tostring(#teamTable[newTeam].Players) ..")") + end + end + end + end + + if newTeam == "Neutral" then + updatePlayerNameColor(player, nil) + else + updatePlayerNameColor(player, player.TeamColor) + end + + playerTable[player].LastTeam = newTeam + + recomputeCompleteTeamScore(newTeam) + + --Relayout + if sortPlayerListsFunction then + sortPlayerListsFunction() + end + end + end + + local function buildTeamObject(team, numStatColumns, suffix) + local isTeam, isScore = getBoardTypeInfo() + local teamObject, changeFunc = createTeamName(team.Name, team.TeamColor) + teamObject.NameLabel.Text = " " .. team.Name .. " (0)" + if not teamTable[team] then + teamTable[team] = {} + end + teamTable[team]["NameObject" .. suffix] = teamObject + teamTable[team]["NameChangeFunc" .. suffix] = changeFunc + if isScore then + local statObject + local textChangers + teamObject, statObject, textChangers = createStatColumns(teamObject, numStatColumns, true, suffix == "Big") + teamTable[team]["StatObject" .. suffix] = statObject + teamTable[team]["StatChangers" .. suffix] = textChangers + end + teamTable[team]["MainObject" .. suffix] = teamObject + changeFunc(" " .. team.Name) + if not teamTable[team].Players then + teamTable[team].Players = {} + else + if suffix ~= "Small" and #teamTable[team].Players > 0 then + changeFunc(" " .. team.Name .. " (" .. tostring(#teamTable[team].Players) ..")") + end + end + + return teamObject + end + + local currentContextMenuPlayer = nil + local function updatePlayerContextMenu(player,x,y) + currentContextMenuPlayer = player + local elementHeight = 18 + local function highlight(button) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) + end + local function clearHighlight(button) + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundColor3 = Color3.new(0,0,0) + end + if playerContextMenu == nil then + elementNames = {} + elementNameToElement = {} + + for i, contextElement in ipairs(contextMenuElements) do + table.insert(elementNames, contextElement.Text) + elementNameToElement[tostring(contextElement.Text)] = contextElement + end + + playerContextMenu = Instance.new("TextButton") + playerContextMenu.Name = "PlayerListContextMenu" + playerContextMenu.Style = Enum.ButtonStyle.RobloxButton + playerContextMenu.Text = "" + playerContextMenu.Visible = false + playerContextMenu.ZIndex = 4 + + playerContextMenu.MouseLeave:connect(function() + local menuChildren = playerContextMenu:GetChildren() + for i = 1, #menuChildren do + if menuChildren[i].Name == "ChoiceButton" then + menuChildren[i].TextColor3 = Color3.new(1,1,1) + menuChildren[i].BackgroundTransparency = 1 + end + end + playerContextMenu.Visible = false + inContextMenu = false + end) + + playerContextMenu.MouseEnter:connect(function() + inContextMenu = true + end) + + for i = 1, #elementNames do + local newElementButton = Instance.new("TextButton") + newElementButton.Name = "ChoiceButton" + newElementButton.Text = elementNames[i] + newElementButton.TextColor3 = Color3.new(1,1,1) + newElementButton.Font = Enum.Font.Arial + newElementButton.FontSize = Enum.FontSize.Size14 + newElementButton.BackgroundTransparency = 1 + newElementButton.TextWrap = true + newElementButton.Size = UDim2.new(1,0,0,elementHeight) + newElementButton.Position = UDim2.new(0,0,0,elementHeight * (i - 1)) + newElementButton.ZIndex = playerContextMenu.ZIndex + 1 + + newElementButton.MouseEnter:connect(function() + newElementButton.TextColor3 = Color3.new(0,0,0) + newElementButton.BackgroundTransparency = 0 + end) + + newElementButton.MouseLeave:connect(function() + newElementButton.TextColor3 = Color3.new(1,1,1) + newElementButton.BackgroundTransparency = 1 + end) + + newElementButton.MouseButton1Click:connect(function() + local element = elementNameToElement[newElementButton.Text] + pcall(function() element.DoIt(currentContextMenuPlayer) end) + playerContextMenu.Visible = false + newElementButton.TextColor3 = Color3.new(1,1,1) + newElementButton.BackgroundTransparency = 1 + end) + + newElementButton.Parent = playerContextMenu + end + + robloxLock(playerContextMenu) + playerContextMenu.Parent = script.Parent + + end + + local visibleElements = 0 + for i, contextElement in ipairs(contextMenuElements) do + local isVisible = false + + if contextElement.IsVisible then + local success, visible = pcall(function() return contextElement.IsVisible(currentContextMenuPlayer) end) + if success then + isVisible = visible + else + print("Error in IsVisible call: " .. visible) + end + end + + if isVisible then + local foundElement = false + for i = 1, #elementNames do + if elementNames[i] == contextElement.Text then + foundElement = true + break + end + end + if not foundElement then + table.insert(elementNames,contextElement.Text) + end + visibleElements = visibleElements + 1 + else + for i = 1, #elementNames do + if elementNames[i] == contextElement.Text then + table.remove(elementNames,i) + break + end + end + end + end + playerContextMenu.Size = UDim2.new(0, 150, 0, elementHeight + (elementHeight * visibleElements) ) + + if x and y then + x = x - (playerContextMenu.AbsoluteSize.X/2) + if x + playerContextMenu.AbsoluteSize.X >= script.Parent.AbsoluteSize.X then + x = script.Parent.AbsoluteSize.X - playerContextMenu.AbsoluteSize.X + end + playerContextMenu.Position = UDim2.new(0, x, 0, y - 3) + end + + local elementPos = 0 + local contextChildren = playerContextMenu:GetChildren() + for i = 1, #contextChildren do + if contextChildren[i]:IsA("GuiObject") and contextChildren[i].Name == "ChoiceButton" then + contextChildren[i].Visible = false + for j = 1, #elementNames do + if elementNames[j] == contextChildren[i].Text then + contextChildren[i].Visible = true + contextChildren[i].Position = UDim2.new(0,0,0,elementPos * elementHeight) + elementPos = elementPos + 1 + break + end + end + end + end + end + + local function playerContextMenuHasItems() + if playerContextMenu then + local children = playerContextMenu:GetChildren() + for i = 1, #children do + if children[i]:IsA("GuiObject") and children[i].Name == "ChoiceButton" and children[i].Visible then + return true + end + end + end + return false + end + + local function showPlayerMenu(player, x, y) + updatePlayerContextMenu(player,x,y) + if not playerContextMenuHasItems() then return end -- don't show if we have nothing to show + playerContextMenu.Visible = true + end + + local function buildPlayerObject(player, numStatColumns, suffix) + if not player then return nil end + + local isTeam, isScore = getBoardTypeInfo() + + local playerObject = nil + local changePlayerNameFunction = nil + local currentColor = nil + if isTeam and not player.Neutral then + currentColor = player.TeamColor.Color + else + currentColor = Color3.new(1,1,1) + end + playerObject, changePlayerNameFunction = createPlayerName(player.Name, player.MembershipType, currentColor, getFriendStatus(player)) + + if not playerTable[player] then + playerTable[player] = {} + end + if not playerTable[player].Connections then + playerTable[player].Connections = {} + end + if not playerTable[player].CurrentTeam then + playerTable[player].CurrentTeam = nil + end + if not playerTable[player].LastTeam then + playerTable[player].LastTeam = nil + end + playerTable[player]["NameObject" .. suffix] = playerObject + playerTable[player]["ChangeName" .. suffix] = changePlayerNameFunction + + if isScore then + local statObject = nil + local textChangers = nil + playerObject, statObject, textChangers = createStatColumns(playerObject, numStatColumns, false, suffix == "Big") + playerTable[player]["StatObject" .. suffix]= statObject + playerTable[player]["StatChangers" .. suffix] = textChangers + + local statValues, leaderstats = getStatValuesForPlayer(player) + if not statValues or #statValues < numStatColumns then + if not playerTable[player].LeaderStatConnections then + playerTable[player].LeaderStatConnections = {} + end + --Setup a listener to see when this data gets filled in + if not leaderstats then + --We don't even have a leaderstats child, wait for one + table.insert(playerTable[player].LeaderStatConnections, + player.ChildAdded:connect( + function(child) + if child.Name == "leaderstats" then + --Connections will be torn down + recreatePlayerFunction(player) + else + table.insert(playerTable[player].LeaderStatConnections, + child.Changed:connect( + function(prop) + if prop == "Name" and child.Name == "leaderstats" then + --Connections will be torn down + recreatePlayerFunction(player) + end + end)) + end + end)) + else + --We have a leaderstats, but not enough children, recreate if we get them + table.insert(playerTable[player].LeaderStatConnections, + leaderstats.ChildAdded:connect( + function(child) + --TODO only look for IntValue + recreatePlayerFunction(player) + end) + ) + table.insert(playerTable[player].LeaderStatConnections, + leaderstats.AncestryChanged:connect( + function(child) + --We got deleted, try again + recreatePlayerFunction(player) + end) + ) + end + end + if statValues then + if not playerTable[player].StatValues then + playerTable[player].StatValues = {} + end + local pos = 1 + while pos <= numStatColumns and pos <= #statValues do + local currentColumn = pos + local statValue = statValues[pos] + local statChanger = textChangers[pos] + + local updateStat = function(val) + statChanger(val) + if playerTable[player] ~= nil then recomputeTeamScore(playerTable[player].CurrentTeam, currentColumn) end + end + if pos > #playerTable[player].StatValues then + table.insert(playerTable[player].StatValues, statValue) + end + + if type(statValue) ~= "number" and statValue["Changed"] then + table.insert(playerTable[player].Connections, + statValue.Changed:connect(updateStat) + ) + end + + table.insert(playerTable[player].Connections, + statValue.AncestryChanged:connect( + function() + recreatePlayerFunction(player) + end) + ) + updateStat(statValue.Value) + pos = pos + 1 + end + end + end + + if supportFriends and player ~= game.Players.LocalPlayer and player.userId > 0 and game.Players.LocalPlayer.userId > 0 then + local button = Instance.new("TextButton") + button.Name = playerObject.Name .. "Button" + button.Text = "" + button.Active = false + button.Size = playerObject.Size + button.Position = playerObject.Position + button.BackgroundColor3 = playerObject.BackgroundColor3 + + local secondButton = Instance.new("TextButton") + secondButton.Name = playerObject.Name .. "RealButton" + secondButton.Text = "" + secondButton.BackgroundTransparency = 1 + secondButton.BackgroundColor3 = playerObject.BackgroundColor3 + local theNameLabel = playerObject:findFirstChild("NameLabel",true) + if theNameLabel then + theNameLabel.TextColor3 = Color3.new(1,1,1) + secondButton.Parent = theNameLabel + end + secondButton.Parent.BackgroundTransparency = 1 + secondButton.Parent.Visible = true + secondButton.ZIndex = 2 + secondButton.Size = UDim2.new(1,0,1,0) + + local previousTransparency = nil + table.insert(playerTable[player].Connections, + secondButton.MouseEnter:connect( + function(x,y) + if playerContextMenu and playerContextMenu.Visible then + return + end -- don't update if we currently see it + + updatePlayerContextMenu(player,x,y) + if not playerContextMenuHasItems() then return end -- don't show if we have nothing to show + + if previousTransparency == nil then + previousTransparency = secondButton.BackgroundTransparency + end + secondButton.Parent.BackgroundTransparency = 0 + end)) + table.insert(playerTable[player].Connections, + secondButton.MouseLeave:connect( + function() + if previousTransparency ~= nil then + previousTransparency = nil + end + delay(0.01,function() + if playerContextMenu and not inContextMenu then + playerContextMenu.Visible = false + end + end) + secondButton.Parent.BackgroundTransparency = 1 + end)) + + local mouseDownX, mouseDownY + table.insert(playerTable[player].Connections, + secondButton.MouseButton1Down:connect(function(x,y) + mouseDownX = x + mouseDownY = y + end)) + table.insert(playerTable[player].Connections, + secondButton.MouseButton1Click:connect(function() + showPlayerMenu(player, mouseDownX, secondButton.AbsolutePosition.Y + secondButton.AbsoluteSize.Y ) + end)) + playerObject.BackgroundTransparency = 1 + playerObject.Size = UDim2.new(1,0,1,0) + playerObject.Position = UDim2.new(0,0,0,0) + playerObject.Parent = button + + playerTable[player]["MainObject" .. suffix] = button + + playerObject = button + else + playerTable[player]["MainObject" .. suffix] = playerObject + + if player == game.Players.LocalPlayer and supportFriends then + table.insert(playerTable[player].Connections, + player.FriendStatusChanged:connect( + function(otherPlayer, friendStatus) + if friendRequestBlacklist[otherPlayer] then + updatePlayerFriendStatus(playerTable[otherPlayer]["NameObject" .. suffix], Enum.FriendStatus.NotFriend) + elseif playerTable[otherPlayer] then + updatePlayerFriendStatus(playerTable[otherPlayer]["NameObject" .. suffix], friendStatus) + end + end) + ) + end + end + table.insert(playerTable[player].Connections, + player.Changed:connect( + function(prop) + if prop == "MembershipType" then + updatePlayerName(playerTable[player]["NameObject" .. suffix], player.MembershipType, currentColor) + elseif prop == "Name" then + playerTable[player]["ChangeName" .. suffix](player.Name) + elseif prop == "Neutral" or prop == "TeamColor" then + assignToTeam(player) + end + end) + ) + return playerObject + end + + local function doSort(tableToSort, objectName, order, startPos, sortType, ascending) + local orderedPlayerTable = {} + getLocalPlayer = false + for i, player in ipairs(tableToSort) do + if playerTable[player] then + if playerTable[player][objectName] ~= nil then + if player ~= game.Players.LocalPlayer then + table.insert(orderedPlayerTable,playerTable[player][objectName]) + else + getLocalPlayer = true + end + end + end + end + + if sortType == nil then -- default back to alphabetical sort + table.sort(orderedPlayerTable,function(a,b) + return string.lower(a:FindFirstChild("FullNameLabel",true).Text) < string.lower(b:FindFirstChild("FullNameLabel",true).Text) + end) + else -- we are sorting by a value + table.sort(orderedPlayerTable,function(a,b) + if ascending then + currentSortName = "" + return tonumber(a:FindFirstChild(sortType,true).Text) > tonumber(b:FindFirstChild(sortType,true).Text) + else + currentSortName = sortType + return tonumber(a:FindFirstChild(sortType,true).Text) < tonumber(b:FindFirstChild(sortType,true).Text) + end + end) + end + if getLocalPlayer and playerTable[game.Players.LocalPlayer] and playerTable[game.Players.LocalPlayer][objectName] then + table.insert(orderedPlayerTable,1,playerTable[game.Players.LocalPlayer][objectName]) + end + for i = 1, #orderedPlayerTable do + order[orderedPlayerTable[i]] = startPos + startPos = startPos + 1 + end + + return startPos + end + + local function orderScrollList(scrollOrder, objectName, scrollFrame, sortType, ascending) + local pos = 0 + local order = {} + local isTeam, isScore = getBoardTypeInfo() + for i, obj in ipairs(scrollOrder) do + order[obj] = 0 + end + + if isTeam then + local teams = getTeams() + for i, team in ipairs(teams) do + if teamTable[team][objectName] then + order[teamTable[team][objectName]] = pos + pos = pos + 1 + end + pos = doSort(teamTable[team].Players, objectName, order, pos, sortType, ascending) + end + + if #teamTable["Neutral"].Players > 0 then + teamTable["Neutral"][objectName].Parent = scrollFrame + order[teamTable["Neutral"][objectName]] = pos + pos = pos + 1 + doSort(teamTable["Neutral"].Players, objectName, order, pos, sortType, ascending) + else + teamTable["Neutral"][objectName].Parent = nil + end + else + local players = getPlayers() + doSort(players, objectName, order, pos, sortType, ascending) + end + + table.sort(scrollOrder, + function(a,b) + return order[a] < order[b] + end) + end + + local function createPlayerListBasics(frame, isBig) + local headerFrame = Instance.new("Frame") + headerFrame.Name = "Header" + headerFrame.BackgroundTransparency = 1 + headerFrame.Size = UDim2.new(1,-13,0,26) + headerFrame.Position = UDim2.new(0,0,0,0) + headerFrame.Parent = frame + + local lowerPaneFrame = Instance.new("Frame") + lowerPaneFrame.Name = "ScrollingArea" + lowerPaneFrame.BackgroundTransparency = 1 + lowerPaneFrame.Size = UDim2.new(1,-3,1,-26) + if not isBig then lowerPaneFrame.Size = UDim2.new(1,-3,1,-30) end + lowerPaneFrame.Position = UDim2.new(0,0,0,26) + lowerPaneFrame.Parent = frame + + local scrollOrder = {} + local scrollFrame, scrollUp, scrollDown, recalculateScroll, scrollBar = RbxGui.CreateScrollingFrame(scrollOrder) + + scrollBar.Size = UDim2.new(0, 17, 1, -36) + if isBig then scrollBar.Size = UDim2.new(0, 17, 1, -61) end + scrollBar.Parent = lowerPaneFrame + + scrollFrame.Parent = lowerPaneFrame + scrollUp.Parent = lowerPaneFrame + scrollDown.Parent = lowerPaneFrame + + if isBig then + scrollFrame.Position = UDim2.new(0,0,0,0) + scrollUp.Position = UDim2.new(1,-41,0,5) + scrollDown.Position = UDim2.new(1,-41,1,-35) + scrollBar.Position = UDim2.new(1, -41, 0, 24) + + scrollFrame.Size = UDim2.new(1,-48,1,-16) + headerFrame.Size = UDim2.new(1,-20,0,26) + + else + scrollBar.Position = UDim2.new(1, -15, 0, 14) + scrollBar.Size = UDim2.new(0,17,1,-36) + scrollFrame.Position = UDim2.new(0,1,0,0) + scrollUp.Position = UDim2.new(1,-15,0,-5) + scrollDown.Position = UDim2.new(1,-15,1,-20) + + lowerPaneFrame.Position = UDim2.new(0,0,0,30) + + local toggleScrollBar = function(visible) + if visible then + scrollFrame.Size = UDim2.new(1,-16,1,0) + headerFrame.Size = UDim2.new(1,-16,0,smallWindowHeaderYSize) + else + scrollFrame.Size = UDim2.new(1,0,1,0) + headerFrame.Size = UDim2.new(1,0,0,smallWindowHeaderYSize) + end + scrollUp.Visible = visible + scrollDown.Visible = visible + scrollBar.Visible = visible + end + scrollUp.Changed:connect(function(prop) + if prop == "Active" then + toggleScrollBar(scrollUp.Active or scrollDown.Active) + end + end) + + scrollDown.Changed:connect(function(prop) + if prop == "Active" then + toggleScrollBar(scrollUp.Active or scrollDown.Active) + end + end) + + toggleScrollBar(scrollUp.Active or scrollDown.Active) + end + return headerFrame, scrollFrame, recalculateScroll, scrollOrder + end + + createBoardsFunction = function (boardType, numStatColumns) + local updatePlayerCount = function() + return #getPlayers() + end + + local smallFrame = Instance.new("Frame") + smallFrame.Name = "SmallPlayerlist" + smallFrame.Position = smallWindowPosition + smallFrame.Active = false + smallFrame.Size = smallWindowSize + smallFrame.BackgroundColor3 = Color3.new(0,0,0) + smallFrame.BackgroundTransparency = 0.7 + smallFrame.BorderSizePixel = 0 + + local bigFrame = Instance.new("Frame") + bigFrame.Name = "BigPlayerlist" + bigFrame.Size = bigWindowSize + bigFrame.Position = bigWindowPosition + bigFrame.BackgroundColor3 = Color3.new(0,0,0) + bigFrame.BackgroundTransparency = 0.7 + bigFrame.BorderSizePixel = 0 + bigFrame.Visible = false + + local bigFrameWrapper = Instance.new("Frame") + bigFrameWrapper.Name = "Expander" + bigFrameWrapper.Size = UDim2.new(1,21,1,16) + bigFrameWrapper.Position = UDim2.new(0, 0, 0,0) + bigFrameWrapper.BackgroundTransparency = 1 + bigFrameWrapper.Parent = bigFrame + + local smallHeaderFrame, scrollFrameSmall, recalculateScrollSmall, scrollOrderSmall = createPlayerListBasics(smallFrame, false) + local bigHeaderFrame, scrollFrameBig, recalculateScrollBig, scrollOrderBig = createPlayerListBasics(bigFrameWrapper, true) + + local playerListButton = Instance.new("ImageButton") + playerListButton.Name = "GoBigButton" + playerListButton.BackgroundTransparency = 1 + playerListButton.Image = "rbxasset://textures/ui/playerlist_small_maximize.png" + playerListButton.Size = UDim2.new(0.0, 35, 0, 29) + playerListButton.Position = UDim2.new(0, 0, 0, 0) + playerListButton.MouseButton1Click:connect( + function() + toggleBigWindow() + end) + playerListButton.Parent = smallHeaderFrame + + playerListButton = Instance.new("ImageButton") + playerListButton.Name = "CloseButton" + playerListButton.BackgroundTransparency = 1 + playerListButton.Image = "rbxasset://textures/ui/playerlist_small_hide.png" + playerListButton.Size = UDim2.new(0.0, 38, 0, 29) + playerListButton.Position = UDim2.new(0, 35, 0, 0) + playerListButton.MouseButton1Click:connect( + function() + transitionWindowsFunction("None") + end) + playerListButton.Parent = smallHeaderFrame + + playerListButton = Instance.new("ImageButton") + playerListButton.Name = "CloseButton" + playerListButton.Image = "rbxasset://textures/ui/playerlist_big_hide.png" + playerListButton.BackgroundTransparency = 1 + playerListButton.Size = UDim2.new(0.0, 29, 0, 29) + playerListButton.Position = UDim2.new(1, -30, 0.5, -13) + playerListButton.MouseButton1Click:connect( + function() + toggleBigWindow() + end) + playerListButton.Parent = bigHeaderFrame + + local placeName = Instance.new("TextButton") + placeName.Name = "PlaceName" + placeName.Text = " Players (" .. tostring(updatePlayerCount()) .. ")" + placeName.AutoButtonColor = false + placeName.FontSize = Enum.FontSize.Size24 + placeName.TextXAlignment = Enum.TextXAlignment.Left + placeName.Font = Enum.Font.ArialBold + placeName.BorderSizePixel = 0 + placeName.BackgroundColor3 = Color3.new(0,0,0) + placeName.BackgroundTransparency = 1 + placeName.TextColor3 = Color3.new(1,1,1) + placeName.Size = UDim2.new(0.4, 0, 1, 0) + placeName.Position = UDim2.new(0, 0, 0.0, 0) + placeName = RbxGui.AutoTruncateTextObject(placeName) + placeName.Parent = bigHeaderFrame + + placeName.MouseEnter:connect(function() + placeName.BackgroundTransparency = 0.2 + end) + + placeName.MouseLeave:connect(function() + placeName.BackgroundTransparency = 1 + end) + + placeName.MouseButton1Click:connect(function() + sortPlayerListsFunction() + end) + + currentBoardType = boardType + currentStatCount = numStatColumns + local isTeam, isScore = getBoardTypeInfo() + local players = getPlayers() + + if isScore then + local statColumns = getStatColumns(players) + numStatColumns = #statColumns + if numStatColumns > 3 then + numStatColumns = 3 + end + createStatHeaders(statColumns, numStatColumns, false).Parent = smallHeaderFrame + createStatHeaders(statColumns, currentStatCount, true).Parent = bigHeaderFrame + end + + --Clean up all old stuff + resetPlayerTable() + updatePlayerCount() + + for i, player in ipairs(players) do + local playerObject = buildPlayerObject(player, numStatColumns, "Small") + table.insert(scrollOrderSmall, playerObject) + playerObject.Parent = scrollFrameSmall + + playerObject = buildPlayerObject(player, currentStatCount, "Big") + table.insert(scrollOrderBig, playerObject) + playerObject.Parent = scrollFrameBig + end + + --Clean up old stuff + resetTeamTable() + + local teamStatObjects = {} + if isTeam then + local teams = getTeams() + local i = #teams + while i >= 1 do + --We go backwards so the "first" team color gets the team + local team = teams[i] + teamColorTable[team.TeamColor.Name] = team + i = i - 1 + end + + --Adding/Removing a Team causes a full invalidation of the board + for i, team in ipairs(teams) do + local teamObject = buildTeamObject(team, numStatColumns, "Small") + table.insert(scrollOrderSmall, teamObject) + teamObject.Parent = scrollFrameSmall + + teamObject = buildTeamObject(team, currentStatCount, "Big") + table.insert(scrollOrderBig, teamObject) + teamObject.Parent = scrollFrameBig + end + + teamTable["Neutral"] = {} + teamTable["Neutral"].Players = {} + + local neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8)) + teamTable["Neutral"].NameObjectSmall = neutralTeamObject + teamTable["Neutral"].StatObjectSmall = nil + teamTable["Neutral"].MainObjectSmall = neutralTeamObject + table.insert(scrollOrderSmall, neutralTeamObject) + + neutralTeamObject = createTeamName("Neutral", BrickColor.palette(8)) + teamTable["Neutral"].NameObjectBig = neutralTeamObject + teamTable["Neutral"].StatObjectBig = nil + teamTable["Neutral"].MainObjectBig = neutralTeamObject + table.insert(scrollOrderBig, neutralTeamObject) + + local neutralPlayers = {} + for i, player in ipairs(players) do + assignToTeam(player) + end + end + + removePlayerFunction = function(player) + if playerTable[player] then + clearTableEntry(player, playerTable[player]) + + placeName.Text = " Players (" .. tostring(updatePlayerCount()) .. ")" + + ArrayRemove(scrollOrderSmall, playerTable[player].MainObjectSmall) + ArrayRemove(scrollOrderBig, playerTable[player].MainObjectBig) + + playerTable[player] = nil + recalculateSmallPlayerListSize(smallFrame) + end + end + recreatePlayerFunction = function(player) + placeName.Text = " Players (" .. tostring(updatePlayerCount()) .. ")" + + removePlayerFunction(player) + + local playerObject = buildPlayerObject(player, numStatColumns, "Small") + table.insert(scrollOrderSmall, playerObject) + robloxLock(playerObject) + playerObject.Parent = scrollFrameSmall + + playerObject = buildPlayerObject(player, currentStatCount, "Big") + table.insert(scrollOrderBig, playerObject) + robloxLock(playerObject) + playerObject.Parent = scrollFrameBig + + local isTeam, isScore = getBoardTypeInfo() + if isTeam then + assignToTeam(player) + end + + sortPlayerListsFunction() + recalculateSmallPlayerListSize(smallFrame) + end + + if screenResizeCon then screenResizeCon:disconnect() end + screenResizeCon = screen.Changed:connect( + function(prop) + if prop == "AbsoluteSize" then + wait() + recalculateSmallPlayerListSize(smallFrame) + end + end) + + sortPlayerListsFunction = function(sortType, ascending) + orderScrollList(scrollOrderSmall, "MainObjectSmall", scrollFrameSmall, sortType, ascending) + recalculateScrollSmall() + createAlternatingRows(scrollOrderSmall) + + orderScrollList(scrollOrderBig, "MainObjectBig", scrollFrameBig, sortType, ascending) + recalculateScrollBig() + createAlternatingRows(scrollOrderBig) + end + + sortPlayerListsFunction() + + robloxLock(smallFrame) + robloxLock(bigFrame) + return smallFrame, bigFrame + end + + --Teams changing invalidates the whole board + local function teamsChanged() + if debounceTeamsChanged then + return + end + + debounceTeamsChanged = true + wait() + rebuildBoard(script.Parent, determineBoardType()) + debounceTeamsChanged = false + end + + + local checkIfBoardChanged = function() + local newBoardType, numStats = determineBoardType() + if newBoardType ~= currentBoardType or numStats ~= currentStatCount then + rebuildBoard(script.Parent, newBoardType, numStats) + end + end + + local function buildPlayerList() + waitForChild(game, "Players") + waitForProperty(game.Players, "LocalPlayer") + + local teams = game:GetService("Teams") + if teams then + local teamConnections = {} + + teams.ChildAdded:connect( + function(child) + if child:IsA("Team") then + teamsChanged() + teamConnections[child] = child.Changed:connect( + function(prop) + if prop == "TeamColor" or prop == "Name" then + --Rebuild when things change + teamsChanged() + end + end) + end + end) + teams.ChildRemoved:connect( + function(child) + if child:IsA("Team") then + if teamConnections[child] then + teamConnections[child]:disconnect() + teamConnections[child] = nil + end + teamsChanged() + end + end) + end + + game.Players.ChildAdded:connect( + function(player) + if player:IsA("Player") then + addPlayerFunction(player) + end + end) + + game.Players.ChildRemoved:connect( + function(player) + if player:IsA("Player") then + if removePlayerFunction then + removePlayerFunction(player) + end + end + end) + + rebuildBoard(script.Parent, determineBoardType()) + game.GuiService.ShowLegacyPlayerList = false + + game.GuiService:AddKey("\t") + local lastTime = nil + game.GuiService.KeyPressed:connect( + function(key) + if key == "\t" then + local modalCheck, isModal = pcall(function() return game.GuiService.IsModalDialog end) + if modalCheck == false or (modalCheck and isModal == false) then + local currentTime = time() + if lastTime == nil or currentTime - lastTime > 0.4 then + lastTime = currentTime + toggleBigWindow() + end + end + end + end) + + delay(0, + function() + while true do + wait(5) + checkIfBoardChanged() + end + end) + end + + if game.CoreGui.Version >= 2 then + buildPlayerList() + end +end + +if not personalServerPlace then -- one more backup check + local theBool = game.Workspace:FindFirstChild("PSVariable") + if theBool and theBool:IsA("BoolValue") then + personalServerPlace = true + end +end + +if personalServerPlace then + addPersonalServerContext() + setupBuildToolManagement() +else + local psVarCon = nil + psVarCon = game.Workspace.ChildAdded:connect(function(child) + if child:IsA("BoolValue") and child.Name == "PSVariable" then + psVarCon:disconnect() + personalServerPlace = true + addPersonalServerContext() + setupBuildToolManagement() + end + end) +end + + +---------------------------------- Start Player Hover Code ---------------------------------------- +if contextMenu3d then + local inMenu = false + + function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end + end + + function makeNewActionButton() + local button = Instance.new("TextButton") + button.Name = "ActionButton" + button.Style = Enum.ButtonStyle.RobloxButtonDefault + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderColor3 = Color3.new(1,0,0) + button.BackgroundTransparency = 0.5 + button.Size = UDim2.new(1,0,0,50) + button.Text = "" + button.Font = Enum.Font.ArialBold + button.FontSize = Enum.FontSize.Size18 + button.TextColor3 = Color3.new(1,1,1) + button.ZIndex = 4 + return button + end + + function getContextElements(currentContextMenuPlayer) + local elements = {} + for i, contextElement in ipairs(contextMenuElements) do + local element = contextElement + + local isVisible = false + + if contextElement.IsVisible then + local success, visible = pcall(function() return contextElement.IsVisible(currentContextMenuPlayer) end) + if success then + isVisible = visible + else + print("Error in IsVisible call: " .. visible) + end + end + + if element.Type == "Button" then + local button = makeNewActionButton() + button.Name = "ContextButton" .. i + button.Visible = isVisible + button.Text = contextElement.Text + button.MouseButton1Click:connect(function() + if button.Active then + local success, result = pcall(function() element.DoIt(currentContextMenuPlayer) end) + end + end) + + contextElement.Button = button + contextElement.Element = button + + table.insert(elements,contextElement) + end + end + + return elements + end + + function findContextElement(contextElements, button) + for i = 1, #contextElements do + if contextElements[i].Button == button then + return contextElements[i] + end + end + end + + function populateActions(scrollFrame, nullFrame, recalcFunction, otherPlayer) + local elements = getContextElements(otherPlayer) + for i = 1, #elements do + if elements[i].Button.Visible then + elements[i].Button.Parent = scrollFrame + else + elements[i].Button.Parent = nullFrame + end + + local actionButtonCon + actionButtonCon = elements[i].Button.MouseButton1Click:connect(function() + actionButtonCon:disconnect() + + local nullFrameChildren = nullFrame:GetChildren() + for j = 1, #nullFrameChildren do + local contextElement = findContextElement(elements, nullFrameChildren[j]) + pcall(function() nullFrameChildren[j].Visible = contextElement.IsVisible(otherPlayer) end) + if nullFrameChildren[j].Visible then + nullFrameChildren[j].Parent = scrollFrame + end + end + + local scrollFrameChildren = scrollFrame:GetChildren() + for j = 1, #scrollFrameChildren do + local contextElement = findContextElement(elements, scrollFrameChildren[j]) + pcall(function() scrollFrameChildren[j].Visible = contextElement.IsVisible(otherPlayer) end) + if not scrollFrameChildren[j].Visible then + scrollFrameChildren[j].Parent = nullFrame + end + end + + elements[i].Button.Parent = nullFrame + recalcFunction() + end) + end + end + + + function createContextMenu(otherPlayer) + + local frame = Instance.new("Frame") + frame.Name = "ContextMenuFrame" + frame.Style = Enum.FrameStyle.RobloxRound + frame.Size = UDim2.new(0,300,0,400) + frame.Position = UDim2.new(0.5,-150,0.5,-200) + frame.ZIndex = 2 + + local scrollFrame, scrollUpButton, scrollDownButton, recalc, scrollBar = RbxGui.CreateScrollingFrame() + + scrollFrame.Name = "Actions" + scrollFrame.BackgroundTransparency = 1 + scrollFrame.Position = UDim2.new(0,0,0,25) + scrollFrame.Size = UDim2.new(1,-20,1,-80) + scrollFrame.ZIndex = 3 + scrollFrame.Parent = frame + + local nullFrame = Instance.new("Frame") + nullFrame.Name = "NullFrame" + nullFrame.BackgroundTransparency = 1 + nullFrame.Visible = false + nullFrame.Parent = frame + + local scrollButtons = Instance.new("Frame") + scrollButtons.Name = "ScrollButtons" + scrollButtons.BackgroundTransparency = 1 + scrollButtons.Position = UDim2.new(1,-17,0,25) + scrollButtons.Size = UDim2.new(0,17,1,-80) + scrollButtons.ZIndex = 3 + scrollButtons.Parent = frame + + scrollUpButton.ZIndex = 3 + scrollUpButton.Parent = scrollButtons + scrollDownButton.Position = UDim2.new(0,0,1,-17) + scrollDownButton.ZIndex = 3 + scrollDownButton.Parent = scrollButtons + + scrollBar.Size = UDim2.new(1,0,1,-34) + scrollBar.Position = UDim2.new(0,0,0,17) + scrollBar.Parent = scrollButtons + + local playerImage = Instance.new("ImageLabel") + playerImage.Name = "PlayerImage" + playerImage.BackgroundTransparency = 1 + playerImage.Image = "http://www.roblox.com/thumbs/avatar.ashx?userId=" .. tostring(otherPlayer.userId) .. "&x=352&y=352" + playerImage.Position = UDim2.new(0.5,-150,0.5,-150) + playerImage.Size = UDim2.new(0,300,0,300) + playerImage.Parent = frame + + local playerName = Instance.new("TextLabel") + playerName.Name = "PlayerName" + playerName.BackgroundTransparency = 1 + playerName.Font = Enum.Font.ArialBold + playerName.FontSize = Enum.FontSize.Size24 + playerName.Position = UDim2.new(0,-8,0,-6) + playerName.Size = UDim2.new(1,16,0,24) + playerName.Text = otherPlayer["Name"] + playerName.TextColor3 = Color3.new(1,1,1) + playerName.TextWrap = true + playerName.ZIndex = 3 + playerName.Parent = frame + + local doneButtonCon + + local doneButton = Instance.new("TextButton") + doneButton.Name = "DoneButton" + doneButton.Style = Enum.ButtonStyle.RobloxButton + doneButton.Font = Enum.Font.ArialBold + doneButton.FontSize = Enum.FontSize.Size36 + doneButton.Position = UDim2.new(0.25,0,1,-50) + doneButton.Size = UDim2.new(0.5,0,0,50) + doneButton.Text = "Done" + doneButton.TextColor3 = Color3.new(1,1,1) + doneButton.ZIndex = 3 + doneButton.Parent = frame + doneButton.Modal = true + doneButtonCon = doneButton.MouseButton1Click:connect(function() + doneButtonCon:disconnect() + inMenu = false + game.GuiService:RemoveCenterDialog(frame) + frame:remove() + end) + + populateActions(scrollFrame, nullFrame, recalc, otherPlayer) + recalc() + + return frame + end + + function makeContextInvisible(menu) + menu.Visible = false + end + + function goToContextMenu(otherPlayer) + + local menu = createContextMenu(otherPlayer) + + game.GuiService:AddCenterDialog(menu, Enum.CenterDialogType.PlayerInitiatedDialog, + --ShowFunction + function() + menu.Visible = true + menu:TweenSize(UDim2.new(0,300,0,400),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true) + end, + --HideFunction + function() + menu:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,0.5,true,function() makeContextInvisible(menu) end) + end) + menu.Parent = game.CoreGui.RobloxGui + + inMenu = true + end + + waitForProperty(game.Players, "LocalPlayer") + + local currSelectedPlayer = nil + if game.Players.LocalPlayer["HoverOnPlayerChanged"] then + game.Players.LocalPlayer.HoverOnPlayerChanged:connect(function(otherPlayer) + if not inMenu then + if otherPlayer and otherPlayer.userId < 0 then return end -- we don't want this for guests + end + wait(0.5) + currSelectedPlayer = otherPlayer + end) + end + + if game.Players.LocalPlayer["MouseDownOnPlayer"] then + game.Players.LocalPlayer.MouseDownOnPlayer:connect(function(otherPlayer) + if currSelectedPlayer ~= otherPlayer then return end + if not inMenu and otherPlayer.userId > 0 then + goToContextMenu(otherPlayer) + end + end) + end +end +---------------------------------- End Player Hover Code ---------------------------------------- \ No newline at end of file diff --git a/app/files/CoreGui/48488398 b/app/files/CoreGui/48488398 new file mode 100644 index 0000000..76a4ece --- /dev/null +++ b/app/files/CoreGui/48488398 @@ -0,0 +1,306 @@ +function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForProperty(game.Players,"LocalPlayer") +waitForChild(script.Parent,"Popup") +waitForChild(script.Parent.Popup,"AcceptButton") +script.Parent.Popup.AcceptButton.Modal = true + +local localPlayer = game.Players.LocalPlayer +local teleportUI = nil + +local acceptedTeleport = Instance.new("IntValue") + +local friendRequestBlacklist = {} + +local teleportEnabled = true + +local makePopupInvisible = function() + if script.Parent.Popup then script.Parent.Popup.Visible = false end +end + +function makeFriend(fromPlayer,toPlayer) + + local popup = script.Parent:FindFirstChild("Popup") + if popup == nil then return end -- there is no popup! + if popup.Visible then return end -- currently popping something, abort! + if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it! + + popup.PopupText.Text = "Accept Friend Request from " .. tostring(fromPlayer.Name) .. "?" + popup.PopupImage.Image = "http://www.syntax.eco/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=352&y=352" + + showTwoButtons() + popup.Visible = true + popup.AcceptButton.Text = "Accept" + popup.DeclineButton.Text = "Decline" + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + + local yesCon, noCon + + yesCon = popup.AcceptButton.MouseButton1Click:connect(function() + popup.Visible = false + toPlayer:RequestFriendship(fromPlayer) + if yesCon then yesCon:disconnect() end + if noCon then noCon:disconnect() end + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + + noCon = popup.DeclineButton.MouseButton1Click:connect(function() + popup.Visible = false + toPlayer:RevokeFriendship(fromPlayer) + friendRequestBlacklist[fromPlayer] = true + print("pop up blacklist") + if yesCon then yesCon:disconnect() end + if noCon then noCon:disconnect() end + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) +end + + +game.Players.FriendRequestEvent:connect(function(fromPlayer,toPlayer,event) + + -- if this doesn't involve me, then do nothing + if fromPlayer ~= localPlayer and toPlayer ~= localPlayer then return end + + if fromPlayer == localPlayer then + if event == Enum.FriendRequestEvent.Accept then + game:GetService("GuiService"):SendNotification("You are Friends", + "With " .. toPlayer.Name .. "!", + "http://www.syntax.eco/thumbs/avatar.ashx?userId="..tostring(toPlayer.userId).."&x=48&y=48", + 5, + function() + + end) + end + elseif toPlayer == localPlayer then + if event == Enum.FriendRequestEvent.Issue then + if friendRequestBlacklist[fromPlayer] then return end -- previously cancelled friend request, we don't want it! + game:GetService("GuiService"):SendNotification("Friend Request", + "From " .. fromPlayer.Name, + "http://www.syntax.eco/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48", + 8, + function() + makeFriend(fromPlayer,toPlayer) + end) + elseif event == Enum.FriendRequestEvent.Accept then + game:GetService("GuiService"):SendNotification("You are Friends", + "With " .. fromPlayer.Name .. "!", + "http://www.syntax.eco/thumbs/avatar.ashx?userId="..tostring(fromPlayer.userId).."&x=48&y=48", + 5, + function() + + end) + end + end +end) + +function showOneButton() + local popup = script.Parent:FindFirstChild("Popup") + if popup then + popup.OKButton.Visible = true + popup.DeclineButton.Visible = false + popup.AcceptButton.Visible = false + end +end + +function showTwoButtons() + local popup = script.Parent:FindFirstChild("Popup") + if popup then + popup.OKButton.Visible = false + popup.DeclineButton.Visible = true + popup.AcceptButton.Visible = true + end +end + +function onTeleport(teleportState, placeId, spawnName) + if game:GetService("TeleportService").CustomizedTeleportUI == false then + if teleportState == Enum.TeleportState.Started then + showTeleportUI("Teleport started...", 0) + elseif teleportState == Enum.TeleportState.WaitingForServer then + showTeleportUI("Requesting server...", 0) + elseif teleportState == Enum.TeleportState.InProgress then + showTeleportUI("Teleporting...", 0) + elseif teleportState == Enum.TeleportState.Failed then + showTeleportUI("Teleport failed. Insufficient privileges or target place does not exist.", 3) + end + end +end + +function showTeleportUI(message, timer) + if teleportUI ~= nil then + teleportUI:Remove() + end + waitForChild(localPlayer, "PlayerGui") + teleportUI = Instance.new("Message", localPlayer.PlayerGui) + teleportUI.Text = message + if timer > 0 then + wait(timer) + teleportUI:Remove() + end +end + +if teleportEnabled then + + localPlayer.OnTeleport:connect(onTeleport) + + game:GetService("TeleportService").ErrorCallback = function(message) + local popup = script.Parent:FindFirstChild("Popup") + showOneButton() + popup.PopupText.Text = message + local clickCon + clickCon = popup.OKButton.MouseButton1Click:connect(function() + game:GetService("TeleportService"):TeleportCancel() + if clickCon then clickCon:disconnect() end + game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + showOneButton() + script.Parent:FindFirstChild("Popup").Visible = true + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end, + --HideFunction + function() + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + + end + game:GetService("TeleportService").ConfirmationCallback = function(message, placeId, spawnName) + local popup = script.Parent:FindFirstChild("Popup") + popup.PopupText.Text = message + popup.PopupImage.Image = "" + + local yesCon, noCon + + local function killCons() + if yesCon then yesCon:disconnect() end + if noCon then noCon:disconnect() end + game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end + + yesCon = popup.AcceptButton.MouseButton1Click:connect(function() + killCons() + local success, err = pcall(function() game:GetService("TeleportService"):TeleportImpl(placeId,spawnName) end) + if not success then + showOneButton() + popup.PopupText.Text = err + local clickCon + clickCon = popup.OKButton.MouseButton1Click:connect(function() + if clickCon then clickCon:disconnect() end + game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + showOneButton() + script.Parent:FindFirstChild("Popup").Visible = true + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end, + --HideFunction + function() + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + end + end) + + noCon = popup.DeclineButton.MouseButton1Click:connect(function() + killCons() + local success = pcall(function() game:GetService("TeleportService"):TeleportCancel() end) + end) + + local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, + --ShowFunction + function() + showTwoButtons() + popup.AcceptButton.Text = "Leave" + popup.DeclineButton.Text = "Stay" + script.Parent:FindFirstChild("Popup").Visible = true + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end, + --HideFunction + function() + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + end) + + if centerDialogSuccess == false then + script.Parent:FindFirstChild("Popup").Visible = true + popup.AcceptButton.Text = "Leave" + popup.DeclineButton.Text = "Stay" + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end + return true + + end +end + +game:GetService("MarketplaceService").ClientLuaDialogRequested:connect(function(message, accept, decline) + local popup = script.Parent:FindFirstChild("Popup") + popup.PopupText.Text = message + popup.PopupImage.Image = "" + + local yesCon, noCon + + local function killCons() + if yesCon then yesCon:disconnect() end + if noCon then noCon:disconnect() end + game.GuiService:RemoveCenterDialog(script.Parent:FindFirstChild("Popup")) + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end + + yesCon = popup.AcceptButton.MouseButton1Click:connect(function() + killCons() + game:GetService("MarketplaceService"):SignalServerLuaDialogClosed(true); + end) + + noCon = popup.DeclineButton.MouseButton1Click:connect(function() + killCons() + game:GetService("MarketplaceService"):SignalServerLuaDialogClosed(false); + end) + + local centerDialogSuccess = pcall(function() game.GuiService:AddCenterDialog(script.Parent:FindFirstChild("Popup"), Enum.CenterDialogType.QuitDialog, + function() + showTwoButtons() + popup.AcceptButton.Text = accept + popup.DeclineButton.Text = decline + script.Parent:FindFirstChild("Popup").Visible = true + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end, + function() + popup:TweenSize(UDim2.new(0,0,0,0),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true,makePopupInvisible()) + end) + end) + + if centerDialogSuccess == false then + script.Parent:FindFirstChild("Popup").Visible = true + popup.AcceptButton.Text = accept + popup.DeclineButton.Text = decline + popup:TweenSize(UDim2.new(0,330,0,350),Enum.EasingDirection.Out,Enum.EasingStyle.Quart,1,true) + end + + return true + +end) + +Game:GetService("PointsService").PointsAwarded:connect( function(userId, pointsAwarded, userBalanceInGame, userTotalBalance) + if userId == Game.Players.LocalPlayer.userId then + game:GetService("GuiService"):SendNotification("Points Awarded!", + "You received " ..tostring(pointsAwarded) .. " points!", + "http://www.syntax.eco/asset?id=155363793", + 5, + function() + end) + end +end) diff --git a/app/files/CoreGui/48488451 b/app/files/CoreGui/48488451 new file mode 100644 index 0000000..cfcb8b7 --- /dev/null +++ b/app/files/CoreGui/48488451 @@ -0,0 +1,72 @@ +--build our gui + +local popupFrame = Instance.new("Frame") +popupFrame.Position = UDim2.new(0.5,-165,0.5,-175) +popupFrame.Size = UDim2.new(0,330,0,350) +popupFrame.Style = Enum.FrameStyle.RobloxRound +popupFrame.ZIndex = 4 +popupFrame.Name = "Popup" +popupFrame.Visible = false +popupFrame.Parent = script.Parent + +local darken = popupFrame:clone() +darken.Size = UDim2.new(1,16,1,16) +darken.Position = UDim2.new(0,-8,0,-8) +darken.Name = "Darken" +darken.ZIndex = 1 +darken.Parent = popupFrame + +local acceptButton = Instance.new("TextButton") +acceptButton.Position = UDim2.new(0,20,0,270) +acceptButton.Size = UDim2.new(0,100,0,50) +acceptButton.Font = Enum.Font.ArialBold +acceptButton.FontSize = Enum.FontSize.Size24 +acceptButton.Style = Enum.ButtonStyle.RobloxButton +acceptButton.TextColor3 = Color3.new(248/255,248/255,248/255) +acceptButton.Text = "Yes" +acceptButton.ZIndex = 5 +acceptButton.Name = "AcceptButton" +acceptButton.Parent = popupFrame + +local declineButton = acceptButton:clone() +declineButton.Position = UDim2.new(1,-120,0,270) +declineButton.Text = "No" +declineButton.Name = "DeclineButton" +declineButton.Parent = popupFrame + +local okButton = acceptButton:clone() +okButton.Name = "OKButton" +okButton.Text = "OK" +okButton.Position = UDim2.new(0.5,-50,0,270) +okButton.Visible = false +okButton.Parent = popupFrame + +local popupImage = Instance.new("ImageLabel") +popupImage.BackgroundTransparency = 1 +popupImage.Position = UDim2.new(0.5,-140,0,0) +popupImage.Size = UDim2.new(0,280,0,280) +popupImage.ZIndex = 3 +popupImage.Name = "PopupImage" +popupImage.Parent = popupFrame + +local backing = Instance.new("ImageLabel") +backing.BackgroundTransparency = 1 +backing.Size = UDim2.new(1,0,1,0) +backing.Image = "http://www.syntax.eco/asset/?id=47574181" +backing.Name = "Backing" +backing.ZIndex = 2 +backing.Parent = popupImage + +local popupText = Instance.new("TextLabel") +popupText.Name = "PopupText" +popupText.Size = UDim2.new(1,0,0.8,0) +popupText.Font = Enum.Font.ArialBold +popupText.FontSize = Enum.FontSize.Size36 +popupText.BackgroundTransparency = 1 +popupText.Text = "Hello I'm a popup" +popupText.TextColor3 = Color3.new(248/255,248/255,248/255) +popupText.TextWrap = true +popupText.ZIndex = 5 +popupText.Parent = popupFrame + +script:remove() \ No newline at end of file diff --git a/app/files/CoreGui/53878047 b/app/files/CoreGui/53878047 new file mode 100644 index 0000000..4267ddf --- /dev/null +++ b/app/files/CoreGui/53878047 @@ -0,0 +1,874 @@ +-- This script creates almost all gui elements found in the backpack (warning: there are a lot!) +-- TODO: automate this process + +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +local gui = script.Parent + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +local function IsTouchDevice() + local touchEnabled = false + pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) + return touchEnabled +end + +local function IsPhone() + if gui.AbsoluteSize.Y <= 320 then + return true + end + return false +end + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +-- First up is the current loadout +local CurrentLoadout = Instance.new("Frame") +CurrentLoadout.Name = "CurrentLoadout" +CurrentLoadout.Position = UDim2.new(0.5, -300, 1, -85) +CurrentLoadout.Size = UDim2.new(0, 600, 0, 54) +CurrentLoadout.BackgroundTransparency = 1 +CurrentLoadout.RobloxLocked = true +CurrentLoadout.Parent = gui + +local CLBackground = Instance.new('ImageLabel') +CLBackground.Name = 'Background'; +CLBackground.Size = UDim2.new(1.2, 0, 1.2, 0); +CLBackground.Image = "http://www.syntax.eco/asset/?id=96536002" +CLBackground.BackgroundTransparency = 1.0; +CLBackground.Position = UDim2.new(-0.1, 0, -0.1, 0); +CLBackground.ZIndex = 0.0; +CLBackground.Parent = CurrentLoadout +CLBackground.Visible = false + +local BackgroundUp = Instance.new('ImageLabel') +BackgroundUp.Size = UDim2.new(1, 0, 0.025, 1) +BackgroundUp.Position = UDim2.new(0, 0, 0, 0) +BackgroundUp.Image = 'http://www.syntax.eco/asset/?id=97662207' +BackgroundUp.BackgroundTransparency = 1.0 +BackgroundUp.Parent = CLBackground + +local Debounce = Instance.new("BoolValue") +Debounce.Name = "Debounce" +Debounce.RobloxLocked = true +Debounce.Parent = CurrentLoadout + +local BackpackButton = Instance.new("ImageButton") +BackpackButton.RobloxLocked = true +BackpackButton.Visible = false +BackpackButton.Name = "BackpackButton" +BackpackButton.BackgroundTransparency = 1 +BackpackButton.Image = "http://www.syntax.eco/asset/?id=97617958" +BackpackButton.Position = UDim2.new(0.5, -60, 1, -108) +BackpackButton.Size = UDim2.new(0, 120, 0, 18) +waitForChild(gui,"ControlFrame") +BackpackButton.Parent = gui.ControlFrame + +local NumSlots = 9 + +if IsPhone() then + NumSlots = 3 + CurrentLoadout.Size = UDim2.new(0,180,0,54) + CurrentLoadout.Position = UDim2.new(0.5,-90,1,-85) +end + +for i = 0, NumSlots do + local slotFrame = Instance.new("Frame") + slotFrame.RobloxLocked = true + slotFrame.BackgroundColor3 = Color3.new(0,0,0) + slotFrame.BackgroundTransparency = 1 + slotFrame.BorderColor3 = Color3.new(1, 1, 1) + slotFrame.Name = "Slot" .. tostring(i) + slotFrame.ZIndex = 4.0 + if i == 0 then + slotFrame.Position = UDim2.new(0.9, 0, 0, 0) + else + slotFrame.Position = UDim2.new((i - 1) * 0.1, (i-1)* 6,0,0) + end + + + slotFrame.Size = UDim2.new(0, 54, 1, 0) + slotFrame.Parent = CurrentLoadout + + if gui.AbsoluteSize.Y <= 320 then + slotFrame.Position = UDim2.new(0, (i-1)* 60, 0, -50) + print('Well got here', slotFrame, slotFrame.Position.X.Scale, slotFrame.Position.X.Offset) + end + if gui.AbsoluteSize.Y <= 320 and i == 0 then + slotFrame:Destroy() + end +end + +local TempSlot = Instance.new("ImageButton") +TempSlot.Name = "TempSlot" +TempSlot.Active = true +TempSlot.Size = UDim2.new(1,0,1,0) +TempSlot.BackgroundTransparency = 1.0 +TempSlot.Style = 'Custom' +TempSlot.Visible = false +TempSlot.RobloxLocked = true +TempSlot.Parent = CurrentLoadout +TempSlot.ZIndex = 3.0 + + local slotBackground = Instance.new('ImageLabel') + slotBackground.Name = 'Background' + slotBackground.BackgroundTransparency = 1.0 + slotBackground.Image = 'http://www.syntax.eco/asset/?id=97613075' + slotBackground.Size = UDim2.new(1, 0, 1, 0) + slotBackground.Parent = TempSlot + + local HighLight = Instance.new('ImageLabel') + HighLight.Name = 'Highlight' + HighLight.BackgroundTransparency = 1.0 + HighLight.Image = 'http://www.syntax.eco/asset/?id=97643886' + HighLight.Size = UDim2.new(1, 0, 1, 0) + --HighLight.Parent = TempSlot + HighLight.Visible = false + + -- TempSlot Children + local GearReference = Instance.new("ObjectValue") + GearReference.Name = "GearReference" + GearReference.RobloxLocked = true + GearReference.Parent = TempSlot + + + local ToolTipLabel = Instance.new("TextLabel") + ToolTipLabel.Name = "ToolTipLabel" + ToolTipLabel.RobloxLocked = true + ToolTipLabel.Text = "" + ToolTipLabel.BackgroundTransparency = 0.5 + ToolTipLabel.BorderSizePixel = 0 + ToolTipLabel.Visible = false + ToolTipLabel.TextColor3 = Color3.new(1,1,1) + ToolTipLabel.BackgroundColor3 = Color3.new(0,0,0) + ToolTipLabel.TextStrokeTransparency = 0 + ToolTipLabel.Font = Enum.Font.ArialBold + ToolTipLabel.FontSize = Enum.FontSize.Size14 + --ToolTipLabel.TextWrap = true + ToolTipLabel.Size = UDim2.new(1,60,0,20) + ToolTipLabel.Position = UDim2.new(0,-30,0,-30) + ToolTipLabel.Parent = TempSlot + + + local Kill = Instance.new("BoolValue") + Kill.Name = "Kill" + Kill.RobloxLocked = true + Kill.Parent = TempSlot + + local GearImage = Instance.new("ImageLabel") + GearImage.Name = "GearImage" + GearImage.BackgroundTransparency = 1 + GearImage.Position = UDim2.new(0, 0, 0, 0) + GearImage.Size = UDim2.new(1, 0, 1, 0) + GearImage.ZIndex = 5.0 + GearImage.RobloxLocked = true + GearImage.Parent = TempSlot + + local SlotNumber = Instance.new("TextLabel") + SlotNumber.Name = "SlotNumber" + SlotNumber.BackgroundTransparency = 1 + SlotNumber.BorderSizePixel = 0 + SlotNumber.Font = Enum.Font.ArialBold + SlotNumber.FontSize = Enum.FontSize.Size18 + SlotNumber.Position = UDim2.new(0, 0, 0, 0) + SlotNumber.Size = UDim2.new(0,10,0,15) + SlotNumber.TextColor3 = Color3.new(1,1,1) + SlotNumber.TextTransparency = 0 + SlotNumber.TextXAlignment = Enum.TextXAlignment.Left + SlotNumber.TextYAlignment = Enum.TextYAlignment.Bottom + SlotNumber.RobloxLocked = true + SlotNumber.Parent = TempSlot + SlotNumber.ZIndex = 5 + + if IsTouchDevice() then + SlotNumber.Visible = false + end + + local SlotNumberDownShadow = SlotNumber:Clone() + SlotNumberDownShadow.Name = "SlotNumberDownShadow" + SlotNumberDownShadow.TextColor3 = Color3.new(0,0,0) + SlotNumberDownShadow.Position = UDim2.new(0, 1, 0, -1) + SlotNumberDownShadow.Parent = TempSlot + SlotNumberDownShadow.ZIndex = 2 + + local SlotNumberUpShadow = SlotNumberDownShadow:Clone() + SlotNumberUpShadow.Name = "SlotNumberUpShadow" + SlotNumberUpShadow.Position = UDim2.new(0, -1, 0, -1) + SlotNumberUpShadow.Parent = TempSlot + + local GearText = Instance.new("TextLabel") + GearText.RobloxLocked = true + GearText.Name = "GearText" + GearText.BackgroundTransparency = 1 + GearText.Font = Enum.Font.Arial + GearText.FontSize = Enum.FontSize.Size14 + GearText.Position = UDim2.new(0,-8,0,-8) + GearText.Size = UDim2.new(1,16,1,16) + GearText.Text = "" + GearText.TextColor3 = Color3.new(1,1,1) + GearText.TextWrap = true + GearText.Parent = TempSlot + GearText.ZIndex = 5.0 + +--- Great, now lets make the inventory! + +local Backpack = Instance.new("Frame") +Backpack.RobloxLocked = true +Backpack.Visible = false +Backpack.Name = "Backpack" +Backpack.Position = UDim2.new(0.5, 0, 0.5, 0) +Backpack.BackgroundColor3 = Color3.new(32/255, 32/255, 32/255) +Backpack.BackgroundTransparency = 0.0 +Backpack.BorderSizePixel = 0 +Backpack.Parent = gui +Backpack.Active = true + + -- Backpack Children + local SwapSlot = Instance.new("BoolValue") + SwapSlot.RobloxLocked = true + SwapSlot.Name = "SwapSlot" + SwapSlot.Parent = Backpack + + -- SwapSlot Children + local Slot = Instance.new("IntValue") + Slot.RobloxLocked = true + Slot.Name = "Slot" + Slot.Parent = SwapSlot + + local GearButton = Instance.new("ObjectValue") + GearButton.RobloxLocked = true + GearButton.Name = "GearButton" + GearButton.Parent = SwapSlot + + local Tabs = Instance.new("Frame") + Tabs.Name = "Tabs" + Tabs.Visible = false + Tabs.Active = false + Tabs.RobloxLocked = true + Tabs.BackgroundColor3 = Color3.new(0,0,0) + Tabs.BackgroundTransparency = 0.08 + Tabs.BorderSizePixel = 0 + Tabs.Position = UDim2.new(0,0,-0.1,-4) + Tabs.Size = UDim2.new(1,0,0.1,4) + Tabs.Parent = Backpack + + -- Tabs Children + + local tabLine = Instance.new("Frame") + tabLine.RobloxLocked = true + tabLine.Name = "TabLine" + tabLine.BackgroundColor3 = Color3.new(53/255, 53/255, 53/255) + tabLine.BorderSizePixel = 0 + tabLine.Position = UDim2.new(0,5,1,-4) + tabLine.Size = UDim2.new(1,-10,0,4) + tabLine.ZIndex = 2 + tabLine.Parent = Tabs + + local InventoryButton = Instance.new("TextButton") + InventoryButton.RobloxLocked = true + InventoryButton.Name = "InventoryButton" + InventoryButton.Size = UDim2.new(0,60,0,30) + InventoryButton.Position = UDim2.new(0,7,1,-31) + InventoryButton.BackgroundColor3 = Color3.new(1,1,1) + InventoryButton.BorderColor3 = Color3.new(1,1,1) + InventoryButton.Font = Enum.Font.ArialBold + InventoryButton.FontSize = Enum.FontSize.Size18 + InventoryButton.Text = "Gear" + InventoryButton.AutoButtonColor = false + InventoryButton.TextColor3 = Color3.new(0,0,0) + InventoryButton.Selected = true + InventoryButton.Active = true + InventoryButton.ZIndex = 3 + InventoryButton.Parent = Tabs + + if game.CoreGui.Version >= 8 then + local WardrobeButton = Instance.new("TextButton") + WardrobeButton.RobloxLocked = true + WardrobeButton.Name = "WardrobeButton" + WardrobeButton.Size = UDim2.new(0,90,0,30) + WardrobeButton.Position = UDim2.new(0,77,1,-31) + WardrobeButton.BackgroundColor3 = Color3.new(0,0,0) + WardrobeButton.BorderColor3 = Color3.new(1,1,1) + WardrobeButton.Font = Enum.Font.ArialBold + WardrobeButton.FontSize = Enum.FontSize.Size18 + WardrobeButton.Text = "Wardrobe" + WardrobeButton.AutoButtonColor = false + WardrobeButton.TextColor3 = Color3.new(1,1,1) + WardrobeButton.Selected = false + WardrobeButton.Active = true + WardrobeButton.Parent = Tabs + end + + local closeButton = Instance.new("TextButton") + closeButton.RobloxLocked = true + closeButton.Name = "CloseButton" + closeButton.Font = Enum.Font.ArialBold + closeButton.FontSize = Enum.FontSize.Size24 + closeButton.Position = UDim2.new(1,-33,0,4) + closeButton.Size = UDim2.new(0,30,0,30) + closeButton.Style = Enum.ButtonStyle.RobloxButton + closeButton.Text = "" + closeButton.TextColor3 = Color3.new(1,1,1) + closeButton.Parent = Tabs + closeButton.Modal = true + + --closeButton child + local XImage = Instance.new("ImageLabel") + XImage.RobloxLocked = true + XImage.Name = "XImage" + game:GetService("ContentProvider"):Preload("http://www.syntax.eco/asset/?id=75547445") + XImage.Image = "http://www.syntax.eco/asset/?id=75547445" --TODO: move to rbxasset + XImage.BackgroundTransparency = 1 + XImage.Position = UDim2.new(-.25,-1,-.25,-1) + XImage.Size = UDim2.new(1.5,2,1.5,2) + XImage.ZIndex = 2 + XImage.Parent = closeButton + + -- Generic Search gui used across backpack + local SearchFrame = Instance.new("Frame") + SearchFrame.RobloxLocked = true + SearchFrame.Name = "SearchFrame" + SearchFrame.BackgroundTransparency = 1 + SearchFrame.Position = UDim2.new(1,-220,0,2) + SearchFrame.Size = UDim2.new(0,220,0,24) + SearchFrame.Parent = Backpack + + -- SearchFrame Children + local SearchButton = Instance.new("ImageButton") + SearchButton.RobloxLocked = true + SearchButton.Name = "SearchButton" + SearchButton.Size = UDim2.new(0,25,0,25) + SearchButton.BackgroundTransparency = 1 + SearchButton.Image = "rbxasset://textures/ui/SearchIcon.png" + SearchButton.Parent = SearchFrame + + local SearchBoxFrame = Instance.new("TextButton") + SearchBoxFrame.RobloxLocked = true + SearchBoxFrame.Position = UDim2.new(0,25,0,0) + SearchBoxFrame.Size = UDim2.new(1,-28,0,26) + SearchBoxFrame.Name = "SearchBoxFrame" + SearchBoxFrame.Text = "" + SearchBoxFrame.Style = Enum.ButtonStyle.RobloxButton + SearchBoxFrame.Parent = SearchFrame + + -- SearchBoxFrame Children + local SearchBox = Instance.new("TextBox") + SearchBox.RobloxLocked = true + SearchBox.Name = "SearchBox" + SearchBox.BackgroundTransparency = 1 + SearchBox.Font = Enum.Font.ArialBold + SearchBox.FontSize = Enum.FontSize.Size12 + SearchBox.Position = UDim2.new(0,-5,0,-5) + SearchBox.Size = UDim2.new(1,10,1,10) + SearchBox.TextColor3 = Color3.new(1,1,1) + SearchBox.TextXAlignment = Enum.TextXAlignment.Left + SearchBox.ZIndex = 2 + SearchBox.TextWrap = true + SearchBox.Text = "Search..." + SearchBox.Parent = SearchBoxFrame + + + local ResetButton = Instance.new("TextButton") + ResetButton.RobloxLocked = true + ResetButton.Visible = false + ResetButton.Name = "ResetButton" + ResetButton.Position = UDim2.new(1,-26,0,3) + ResetButton.Size = UDim2.new(0,20,0,20) + ResetButton.Style = Enum.ButtonStyle.RobloxButtonDefault + ResetButton.Text = "X" + ResetButton.TextColor3 = Color3.new(1,1,1) + ResetButton.Font = Enum.Font.ArialBold + ResetButton.FontSize = Enum.FontSize.Size18 + ResetButton.ZIndex = 3 + ResetButton.Parent = SearchFrame + +------------------------------- GEAR ------------------------------------------------------- + local Gear = Instance.new("Frame") + Gear.Name = "Gear" + Gear.RobloxLocked = true + Gear.BackgroundTransparency = 1 + Gear.Size = UDim2.new(1,0,1,0) + Gear.ClipsDescendants = true + Gear.Parent = Backpack + + -- Gear Children + local AssetsList = Instance.new("Frame") + AssetsList.RobloxLocked = true + AssetsList.Name = "AssetsList" + AssetsList.BackgroundTransparency = 1 + AssetsList.Size = UDim2.new(0.2,0,1,0) + AssetsList.Style = Enum.FrameStyle.RobloxSquare + AssetsList.Visible = false + AssetsList.Parent = Gear + + local GearGrid = Instance.new("Frame") + GearGrid.RobloxLocked = true + GearGrid.Name = "GearGrid" + GearGrid.Size = UDim2.new(0.95, 0, 1, 0) + GearGrid.BackgroundTransparency = 1 + GearGrid.Parent = Gear + + + local GearButton = Instance.new("ImageButton") + GearButton.RobloxLocked = true + GearButton.Visible = false + GearButton.Name = "GearButton" + GearButton.Size = UDim2.new(0, 54, 0, 54) + GearButton.Style = 'Custom' + GearButton.Parent = GearGrid + GearButton.BackgroundTransparency = 1.0 + + local slotBackground = Instance.new('ImageLabel') + slotBackground.Name = 'Background' + slotBackground.BackgroundTransparency = 1.0 + slotBackground.Image = 'http://www.syntax.eco/asset/?id=97613075' + slotBackground.Size = UDim2.new(1, 0, 1, 0) + slotBackground.Parent = GearButton + + + -- GearButton Children + local GearReference = Instance.new("ObjectValue") + GearReference.RobloxLocked = true + GearReference.Name = "GearReference" + GearReference.Parent = GearButton + + local GreyOutButton = Instance.new("Frame") + GreyOutButton.RobloxLocked = true + GreyOutButton.Name = "GreyOutButton" + GreyOutButton.BackgroundTransparency = 0.5 + GreyOutButton.Size = UDim2.new(1,0,1,0) + GreyOutButton.Active = true + GreyOutButton.Visible = false + GreyOutButton.ZIndex = 3 + GreyOutButton.Parent = GearButton + + local GearText = Instance.new("TextLabel") + GearText.RobloxLocked = true + GearText.Name = "GearText" + GearText.BackgroundTransparency = 1 + GearText.Font = Enum.Font.Arial + GearText.FontSize = Enum.FontSize.Size14 + GearText.Position = UDim2.new(0,-8,0,-8) + GearText.Size = UDim2.new(1,16,1,16) + GearText.Text = "" + GearText.ZIndex = 2 + GearText.TextColor3 = Color3.new(1,1,1) + GearText.TextWrap = true + GearText.Parent = GearButton + + local GearGridScrollingArea = Instance.new("Frame") + GearGridScrollingArea.RobloxLocked = true + GearGridScrollingArea.Name = "GearGridScrollingArea" + GearGridScrollingArea.Position = UDim2.new(1, -19, 0, 35) + GearGridScrollingArea.Size = UDim2.new(0, 17, 1, -45) + GearGridScrollingArea.BackgroundTransparency = 1 + GearGridScrollingArea.Parent = Gear + + local GearLoadouts = Instance.new("Frame") + GearLoadouts.RobloxLocked = true + GearLoadouts.Name = "GearLoadouts" + GearLoadouts.BackgroundTransparency = 1 + GearLoadouts.Position = UDim2.new(0.7,23,0.5,1) + GearLoadouts.Size = UDim2.new(0.3,-23,0.5,-1) + GearLoadouts.Parent = Gear + GearLoadouts.Visible = false + + -- GearLoadouts Children + local GearLoadoutsHeader = Instance.new("Frame") + GearLoadoutsHeader.RobloxLocked = true + GearLoadoutsHeader.Name = "GearLoadoutsHeader" + GearLoadoutsHeader.BackgroundColor3 = Color3.new(0,0,0) + GearLoadoutsHeader.BackgroundTransparency = 0.2 + GearLoadoutsHeader.BorderColor3 = Color3.new(1,0,0) + GearLoadoutsHeader.Size = UDim2.new(1,2,0.15,-1) + GearLoadoutsHeader.Parent = GearLoadouts + + -- GearLoadoutsHeader Children + local LoadoutsHeaderText = Instance.new("TextLabel") + LoadoutsHeaderText.RobloxLocked = true + LoadoutsHeaderText.Name = "LoadoutsHeaderText" + LoadoutsHeaderText.BackgroundTransparency = 1 + LoadoutsHeaderText.Font = Enum.Font.ArialBold + LoadoutsHeaderText.FontSize = Enum.FontSize.Size18 + LoadoutsHeaderText.Size = UDim2.new(1,0,1,0) + LoadoutsHeaderText.Text = "Loadouts" + LoadoutsHeaderText.TextColor3 = Color3.new(1,1,1) + LoadoutsHeaderText.Parent = GearLoadoutsHeader + + local GearLoadoutsScrollingArea = GearGridScrollingArea:clone() + GearLoadoutsScrollingArea.RobloxLocked = true + GearLoadoutsScrollingArea.Name = "GearLoadoutsScrollingArea" + GearLoadoutsScrollingArea.Position = UDim2.new(1,-15,0.15,2) + GearLoadoutsScrollingArea.Size = UDim2.new(0,17,0.85,-2) + GearLoadoutsScrollingArea.Parent = GearLoadouts + + local LoadoutsList = Instance.new("Frame") + LoadoutsList.RobloxLocked = true + LoadoutsList.Name = "LoadoutsList" + LoadoutsList.Position = UDim2.new(0,0,0.15,2) + LoadoutsList.Size = UDim2.new(1,-17,0.85,-2) + LoadoutsList.Style = Enum.FrameStyle.RobloxSquare + LoadoutsList.Parent = GearLoadouts + + local GearPreview = Instance.new("Frame") + GearPreview.RobloxLocked = true + GearPreview.Name = "GearPreview" + GearPreview.Position = UDim2.new(0.7,23,0,0) + GearPreview.Size = UDim2.new(0.3,-28,0.5,-1) + GearPreview.BackgroundTransparency = 1 + GearPreview.ZIndex = 7 + GearPreview.Parent = Gear + + -- GearPreview Children + local GearStats = Instance.new("Frame") + GearStats.RobloxLocked = true + GearStats.Name = "GearStats" + GearStats.BackgroundTransparency = 1 + GearStats.Position = UDim2.new(0,0,0.75,0) + GearStats.Size = UDim2.new(1,0,0.25,0) + GearStats.ZIndex = 8 + GearStats.Parent = GearPreview + + -- GearStats Children + local GearName = Instance.new("TextLabel") + GearName.RobloxLocked = true + GearName.Name = "GearName" + GearName.BackgroundTransparency = 1 + GearName.Font = Enum.Font.ArialBold + GearName.FontSize = Enum.FontSize.Size18 + GearName.Position = UDim2.new(0,-3,0,0) + GearName.Size = UDim2.new(1,6,1,5) + GearName.Text = "" + GearName.TextColor3 = Color3.new(1,1,1) + GearName.TextWrap = true + GearName.ZIndex = 9 + GearName.Parent = GearStats + + local GearImage = Instance.new("ImageLabel") + GearImage.RobloxLocked = true + GearImage.Name = "GearImage" + GearImage.Image = "" + GearImage.BackgroundTransparency = 1 + GearImage.Position = UDim2.new(0.125,0,0,0) + GearImage.Size = UDim2.new(0.75,0,0.75,0) + GearImage.ZIndex = 8 + GearImage.Parent = GearPreview + + --GearImage Children + local GearIcons = Instance.new("Frame") + GearIcons.BackgroundColor3 = Color3.new(0,0,0) + GearIcons.BackgroundTransparency = 0.5 + GearIcons.BorderSizePixel = 0 + GearIcons.RobloxLocked = true + GearIcons.Name = "GearIcons" + GearIcons.Position = UDim2.new(0.4,2,0.85,-2) + GearIcons.Size = UDim2.new(0.6,0,0.15,0) + GearIcons.Visible = false + GearIcons.ZIndex = 9 + GearIcons.Parent = GearImage + + -- GearIcons Children + local GenreImage = Instance.new("ImageLabel") + GenreImage.RobloxLocked = true + GenreImage.Name = "GenreImage" + GenreImage.BackgroundColor3 = Color3.new(102/255,153/255,1) + GenreImage.BackgroundTransparency = 0.5 + GenreImage.BorderSizePixel = 0 + GenreImage.Size = UDim2.new(0.25,0,1,0) + GenreImage.Parent = GearIcons + + local AttributeOneImage = GenreImage:clone() + AttributeOneImage.RobloxLocked = true + AttributeOneImage.Name = "AttributeOneImage" + AttributeOneImage.BackgroundColor3 = Color3.new(1,51/255,0) + AttributeOneImage.Position = UDim2.new(0.25,0,0,0) + AttributeOneImage.Parent = GearIcons + + local AttributeTwoImage = GenreImage:clone() + AttributeTwoImage.RobloxLocked = true + AttributeTwoImage.Name = "AttributeTwoImage" + AttributeTwoImage.BackgroundColor3 = Color3.new(153/255,1,153/255) + AttributeTwoImage.Position = UDim2.new(0.5,0,0,0) + AttributeTwoImage.Parent = GearIcons + + local AttributeThreeImage = GenreImage:clone() + AttributeThreeImage.RobloxLocked = true + AttributeThreeImage.Name = "AttributeThreeImage" + AttributeThreeImage.BackgroundColor3 = Color3.new(0,0.5,0.5) + AttributeThreeImage.Position = UDim2.new(0.75,0,0,0) + AttributeThreeImage.Parent = GearIcons + +------------------------------- WARDROBE ------------------------------------------------------- + if game.CoreGui.Version < 8 then + -- no need for this to stick around, we aren't ready for wardrobe + script:remove() + return + end + + local function makeCharFrame(frameName, parent) + local frame = Instance.new("Frame") + frame.RobloxLocked = true + frame.Size = UDim2.new(1,0,1,-70) + frame.Position = UDim2.new(0,0,0,20) + frame.Name = frameName + frame.BackgroundTransparency = 1 + frame.Parent = parent + frame.Visible = false + return frame + end + local function makeZone( zoneName, image, size, position, parent ) + local zone = Instance.new("ImageLabel") + zone.RobloxLocked = true + zone.Name = zoneName + zone.Image = image + zone.Size = size + zone.BackgroundTransparency = 1 + zone.Position = position + zone.Parent = parent + return zone + end + local function makeStyledButton( buttonName, size, position, parent, buttonStyle ) + local button = Instance.new("ImageButton") + button.RobloxLocked = true + button.Name = buttonName + button.Size = size + button.Position = position + if buttonStyle then + button.Style = buttonStyle + else + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderColor3 = Color3.new(1,1,1) + end + button.Parent = parent + return button + end + local function makeTextLabel( TextLabelName,text,position,parent ) + local label = Instance.new("TextLabel") + label.RobloxLocked = true + label.BackgroundTransparency = 1 + label.Size = UDim2.new(0,32,0,14) + label.Name = TextLabelName + label.Font = Enum.Font.Arial + label.TextColor3 = Color3.new(1,1,1) + label.FontSize = Enum.FontSize.Size14 + label.Text = text + label.Position = position + label.Parent = parent + end + + + local Wardrobe = Instance.new("Frame") + Wardrobe.Name = "Wardrobe" + Wardrobe.RobloxLocked = true + Wardrobe.BackgroundTransparency = 1 + Wardrobe.Visible = false + Wardrobe.Size = UDim2.new(1,0,1,0) + Wardrobe.Parent = Backpack + + local AssetList = Instance.new("Frame") + AssetList.RobloxLocked = true + AssetList.Name = "AssetList" + AssetList.Position = UDim2.new(0,4,0,5) + AssetList.Size = UDim2.new(0,85,1,-5) + AssetList.BackgroundTransparency = 1 + AssetList.Visible = true + AssetList.Parent = Wardrobe + + local PreviewAssetFrame = Instance.new("Frame") + PreviewAssetFrame.RobloxLocked = true + PreviewAssetFrame.Name = "PreviewAssetFrame" + PreviewAssetFrame.BackgroundTransparency = 1 + PreviewAssetFrame.Position = UDim2.new(1,-240,0,30) + PreviewAssetFrame.Size = UDim2.new(0,250,0,250) + PreviewAssetFrame.Parent = Wardrobe + + local PreviewAssetBacking = Instance.new("TextButton") + PreviewAssetBacking.RobloxLocked = true + PreviewAssetBacking.Name = "PreviewAssetBacking" + PreviewAssetBacking.Active = false + PreviewAssetBacking.Text = "" + PreviewAssetBacking.AutoButtonColor = false + PreviewAssetBacking.Size = UDim2.new(1,0,1,0) + PreviewAssetBacking.Style = Enum.ButtonStyle.RobloxButton + PreviewAssetBacking.Visible = false + PreviewAssetBacking.ZIndex = 9 + PreviewAssetBacking.Parent = PreviewAssetFrame + + local PreviewAssetImage = Instance.new("ImageLabel") + PreviewAssetImage.RobloxLocked = true + PreviewAssetImage.Name = "PreviewAssetImage" + PreviewAssetImage.BackgroundTransparency = 0.8 + PreviewAssetImage.Position = UDim2.new(0.5,-100,0,0) + PreviewAssetImage.Size = UDim2.new(0,200,0,200) + PreviewAssetImage.BorderSizePixel = 0 + PreviewAssetImage.ZIndex = 10 + PreviewAssetImage.Parent = PreviewAssetBacking + + local AssetNameLabel = Instance.new("TextLabel") + AssetNameLabel.Name = "AssetNameLabel" + AssetNameLabel.RobloxLocked = true + AssetNameLabel.BackgroundTransparency = 1 + AssetNameLabel.Position = UDim2.new(0,0,1,-20) + AssetNameLabel.Size = UDim2.new(0.5,0,0,24) + AssetNameLabel.ZIndex = 10 + AssetNameLabel.Font = Enum.Font.Arial + AssetNameLabel.Text = "" + AssetNameLabel.TextColor3 = Color3.new(1,1,1) + AssetNameLabel.TextScaled = true + AssetNameLabel.Parent = PreviewAssetBacking + + local AssetTypeLabel = AssetNameLabel:clone() + AssetTypeLabel.RobloxLocked = true + AssetTypeLabel.Name = "AssetTypeLabel" + AssetTypeLabel.TextScaled = false + AssetTypeLabel.FontSize = Enum.FontSize.Size18 + AssetTypeLabel.Position = UDim2.new(0.5,3,1,-20) + AssetTypeLabel.Parent = PreviewAssetBacking + + + + local PreviewButton = Instance.new("TextButton") + PreviewButton.RobloxLocked = true + PreviewButton.Name = "PreviewButton" + PreviewButton.Text = "Rotate" + PreviewButton.BackgroundColor3 = Color3.new(0,0,0) + PreviewButton.BackgroundTransparency = 0.5 + PreviewButton.BorderColor3 = Color3.new(1,1,1) + PreviewButton.Position = UDim2.new(1.2,-62,1,-50) + PreviewButton.Size = UDim2.new(0,125,0,50) + PreviewButton.Font = Enum.Font.ArialBold + PreviewButton.FontSize = Enum.FontSize.Size24 + PreviewButton.TextColor3 = Color3.new(1,1,1) + PreviewButton.TextWrapped = true + PreviewButton.TextStrokeTransparency = 0 + PreviewButton.Parent = Wardrobe + + local CharacterPane = Instance.new("Frame") + CharacterPane.RobloxLocked = true + CharacterPane.Name = "CharacterPane" + CharacterPane.Position = UDim2.new(1,-220,0,32) + CharacterPane.Size = UDim2.new(0,220,1,-40) + CharacterPane.BackgroundTransparency = 1 + CharacterPane.Visible = true + CharacterPane.Parent = Wardrobe + + --CharacterPane Children + local FaceFrame = makeCharFrame("FacesFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.syntax.eco/asset/?id=75460621") + makeZone("FaceZone","http://www.syntax.eco/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),FaceFrame) + makeStyledButton("Face",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),FaceFrame) + + local HeadFrame = makeCharFrame("HeadsFrame", CharacterPane) + makeZone("FaceZone","http://www.syntax.eco/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),HeadFrame) + makeStyledButton("Head",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),HeadFrame) + + local HatsFrame = makeCharFrame("HatsFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.syntax.eco/asset/?id=75457888") + local HatsZone = makeZone("HatsZone","http://www.syntax.eco/asset/?id=75457888",UDim2.new(0,186,0,184),UDim2.new(0.5,-93,0.5,-100), HatsFrame) + makeStyledButton("Hat1Button",UDim2.new(0,64,0,64),UDim2.new(0,-1,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + makeStyledButton("Hat2Button",UDim2.new(0,64,0,64),UDim2.new(0,63,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + makeStyledButton("Hat3Button",UDim2.new(0,64,0,64),UDim2.new(0,127,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + + local PantsFrame = makeCharFrame("PantsFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.syntax.eco/asset/?id=75457920") + makeZone("PantsZone","http://www.syntax.eco/asset/?id=75457920",UDim2.new(0,121,0,99),UDim2.new(0.5,-60,0.5,-100),PantsFrame) + + local pantFrame = Instance.new("Frame") + pantFrame.RobloxLocked = true + pantFrame.Size = UDim2.new(0,25,0,56) + pantFrame.Position = UDim2.new(0.5,-26,0.5,0) + pantFrame.BackgroundColor3 = Color3.new(0,0,0) + pantFrame.BorderColor3 = Color3.new(1,1,1) + pantFrame.Name = "PantFrame" + pantFrame.Parent = PantsFrame + + local otherPantFrame = pantFrame:clone() + otherPantFrame.Position = UDim2.new(0.5,3,0.5,0) + otherPantFrame.RobloxLocked = true + otherPantFrame.Parent = PantsFrame + + local CurrentPants = Instance.new("ImageButton") + CurrentPants.RobloxLocked = true + CurrentPants.BackgroundTransparency = 1 + CurrentPants.ZIndex = 2 + CurrentPants.Name = "CurrentPants" + CurrentPants.Position = UDim2.new(0.5,-31,0.5,-4) + CurrentPants.Size = UDim2.new(0,54,0,59) + CurrentPants.Parent = PantsFrame + + local MeshFrame = makeCharFrame("PackagesFrame", CharacterPane) + local torsoButton = makeStyledButton("TorsoMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("TorsoLabel","Torso",UDim2.new(0.5,-16,0,-25),torsoButton) + local leftLegButton = makeStyledButton("LeftLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,0,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("LeftLegLabel","Left Leg",UDim2.new(0.5,-16,0,-25),leftLegButton) + local rightLegButton = makeStyledButton("RightLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-64,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("RightLegLabel","Right Leg",UDim2.new(0.5,-16,0,-25),rightLegButton) + local rightArmButton = makeStyledButton("RightArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-96,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("RightArmLabel","Right Arm",UDim2.new(0.5,-16,0,-25),rightArmButton) + local leftArmButton = makeStyledButton("LeftArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("LeftArmLabel","Left Arm",UDim2.new(0.5,-16,0,-25),leftArmButton) + + local TShirtFrame = makeCharFrame("T-ShirtsFrame",CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.syntax.eco/asset/?id=75460642") + makeZone("TShirtZone","http://www.syntax.eco/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),TShirtFrame) + makeStyledButton("TShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),TShirtFrame) + + + local ShirtFrame = makeCharFrame("ShirtsFrame", CharacterPane) + makeZone("ShirtZone","http://www.syntax.eco/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),ShirtFrame) + makeStyledButton("ShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),ShirtFrame) + + + local ColorFrame = makeCharFrame("ColorFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.syntax.eco/asset/?id=76049888") + local ColorZone = makeZone("ColorZone","http://www.syntax.eco/asset/?id=76049888", UDim2.new(0,120,0,150),UDim2.new(0.5,-60,0.5,-100),ColorFrame) + makeStyledButton("Head",UDim2.new(0.26,0,0.19,0),UDim2.new(0.37,0,0.02,0),ColorZone).AutoButtonColor = false + makeStyledButton("LeftArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.78,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("RightArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.025,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("Torso",UDim2.new(0.43,0,0.36,0),UDim2.new(0.28,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("RightLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.275,0,0.67,0),ColorZone).AutoButtonColor = false + makeStyledButton("LeftLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.525,0,0.67,0),ColorZone).AutoButtonColor = false + + -- Character Panel label (shows what category we are currently browsing) + local CategoryLabel = Instance.new("TextLabel") + CategoryLabel.RobloxLocked = true + CategoryLabel.Name = "CategoryLabel" + CategoryLabel.BackgroundTransparency = 1 + CategoryLabel.Font = Enum.Font.ArialBold + CategoryLabel.FontSize = Enum.FontSize.Size18 + CategoryLabel.Position = UDim2.new(0,0,0,-7) + CategoryLabel.Size = UDim2.new(1,0,0,20) + CategoryLabel.TextXAlignment = Enum.TextXAlignment.Center + CategoryLabel.Text = "All" + CategoryLabel.TextColor3 = Color3.new(1,1,1) + CategoryLabel.Parent = CharacterPane + + --Save Button + local SaveButton = Instance.new("TextButton") + SaveButton.RobloxLocked = true + SaveButton.Name = "SaveButton" + SaveButton.Size = UDim2.new(0.6,0,0,50) + SaveButton.Position = UDim2.new(0.2,0,1,-50) + SaveButton.Style = Enum.ButtonStyle.RobloxButton + SaveButton.Selected = false + SaveButton.Font = Enum.Font.ArialBold + SaveButton.FontSize = Enum.FontSize.Size18 + SaveButton.Text = "Save" + SaveButton.TextColor3 = Color3.new(1,1,1) + SaveButton.Parent = CharacterPane + +-- no need for this to stick around + +script:Destroy() \ No newline at end of file diff --git a/app/files/CoreGui/53878048 b/app/files/CoreGui/53878048 new file mode 100644 index 0000000..4d3e7db --- /dev/null +++ b/app/files/CoreGui/53878048 @@ -0,0 +1,790 @@ +-- This script creates almost all gui elements found in the backpack (warning: there are a lot!) +-- TODO: automate this process + +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +local gui = script.Parent + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +-- First up is the current loadout +local CurrentLoadout = Instance.new("Frame") +CurrentLoadout.Name = "CurrentLoadout" +CurrentLoadout.Position = UDim2.new(0.5, -240, 1, -85) +CurrentLoadout.Size = UDim2.new(0, 480, 0, 48) +CurrentLoadout.BackgroundTransparency = 1 +CurrentLoadout.RobloxLocked = true +CurrentLoadout.Parent = gui + +local Debounce = Instance.new("BoolValue") +Debounce.Name = "Debounce" +Debounce.RobloxLocked = true +Debounce.Parent = CurrentLoadout + +local BackpackButton = Instance.new("ImageButton") +BackpackButton.RobloxLocked = true +BackpackButton.Visible = false +BackpackButton.Name = "BackpackButton" +BackpackButton.BackgroundTransparency = 1 +BackpackButton.Image = "rbxasset://textures/ui/backpackButton.png" +BackpackButton.Position = UDim2.new(0.5, -195, 1, -30) +BackpackButton.Size = UDim2.new(0,107,0,26) +waitForChild(gui,"ControlFrame") +BackpackButton.Parent = gui.ControlFrame + +for i = 0, 9 do + local slotFrame = Instance.new("Frame") + slotFrame.RobloxLocked = true + slotFrame.BackgroundColor3 = Color3.new(0,0,0) + slotFrame.BackgroundTransparency = 1 + slotFrame.BorderColor3 = Color3.new(1,1,1) + slotFrame.Name = "Slot" .. tostring(i) + if i == 0 then + slotFrame.Position = UDim2.new(0.9,0,0,0) + else + slotFrame.Position = UDim2.new((i - 1) * 0.1,0,0,0) + end + slotFrame.Size = UDim2.new(0.1,0,1,0) + slotFrame.Parent = CurrentLoadout +end + +local TempSlot = Instance.new("ImageButton") +TempSlot.Name = "TempSlot" +TempSlot.Active = true +TempSlot.Size = UDim2.new(1,0,1,0) +TempSlot.Style = Enum.ButtonStyle.RobloxButton +TempSlot.Visible = false +TempSlot.RobloxLocked = true +TempSlot.Parent = CurrentLoadout + + -- TempSlot Children + local GearReference = Instance.new("ObjectValue") + GearReference.Name = "GearReference" + GearReference.RobloxLocked = true + GearReference.Parent = TempSlot + + local ToolTipLabel = Instance.new("TextLabel") + ToolTipLabel.Name = "ToolTipLabel" + ToolTipLabel.RobloxLocked = true + ToolTipLabel.Text = "" + ToolTipLabel.BackgroundTransparency = 0.5 + ToolTipLabel.BorderSizePixel = 0 + ToolTipLabel.Visible = false + ToolTipLabel.TextColor3 = Color3.new(1,1,1) + ToolTipLabel.BackgroundColor3 = Color3.new(0,0,0) + ToolTipLabel.TextStrokeTransparency = 0 + ToolTipLabel.Font = Enum.Font.ArialBold + ToolTipLabel.FontSize = Enum.FontSize.Size14 + --ToolTipLabel.TextWrap = true + ToolTipLabel.Size = UDim2.new(1,60,0,20) + ToolTipLabel.Position = UDim2.new(0,-30,0,-30) + ToolTipLabel.Parent = TempSlot + + local Kill = Instance.new("BoolValue") + Kill.Name = "Kill" + Kill.RobloxLocked = true + Kill.Parent = TempSlot + + local GearImage = Instance.new("ImageLabel") + GearImage.Name = "GearImage" + GearImage.BackgroundTransparency = 1 + GearImage.Position = UDim2.new(0,-7,0,-7) + GearImage.Size = UDim2.new(1,14,1,14) + GearImage.ZIndex = 2 + GearImage.RobloxLocked = true + GearImage.Parent = TempSlot + + local SlotNumber = Instance.new("TextLabel") + SlotNumber.Name = "SlotNumber" + SlotNumber.BackgroundTransparency = 1 + SlotNumber.BorderSizePixel = 0 + SlotNumber.Font = Enum.Font.ArialBold + SlotNumber.FontSize = Enum.FontSize.Size18 + SlotNumber.Position = UDim2.new(0,-7,0,-7) + SlotNumber.Size = UDim2.new(0,10,0,15) + SlotNumber.TextColor3 = Color3.new(1,1,1) + SlotNumber.TextTransparency = 0 + SlotNumber.TextXAlignment = Enum.TextXAlignment.Left + SlotNumber.TextYAlignment = Enum.TextYAlignment.Bottom + SlotNumber.ZIndex = 4 + SlotNumber.RobloxLocked = true + SlotNumber.Parent = TempSlot + + local SlotNumberDownShadow = SlotNumber:clone() + SlotNumberDownShadow.Name = "SlotNumberDownShadow" + SlotNumberDownShadow.TextColor3 = Color3.new(0,0,0) + SlotNumberDownShadow.ZIndex = 3 + SlotNumberDownShadow.Position = UDim2.new(0,-6,0,-6) + SlotNumberDownShadow.Parent = TempSlot + + local SlotNumberUpShadow = SlotNumberDownShadow:clone() + SlotNumberUpShadow.Name = "SlotNumberUpShadow" + SlotNumberUpShadow.Position = UDim2.new(0,-8,0,-8) + SlotNumberUpShadow.Parent = TempSlot + + local GearText = Instance.new("TextLabel") + GearText.RobloxLocked = true + GearText.Name = "GearText" + GearText.BackgroundTransparency = 1 + GearText.Font = Enum.Font.Arial + GearText.FontSize = Enum.FontSize.Size14 + GearText.Position = UDim2.new(0,-8,0,-8) + GearText.ZIndex = 2 + GearText.Size = UDim2.new(1,16,1,16) + GearText.Text = "" + GearText.TextColor3 = Color3.new(1,1,1) + GearText.TextWrap = true + GearText.Parent = TempSlot + +--- Great, now lets make the inventory! + +local Backpack = Instance.new("Frame") +Backpack.RobloxLocked = true +Backpack.Visible = false +Backpack.Name = "Backpack" +Backpack.Position = UDim2.new(0.5,0,0.5,0) +Backpack.BackgroundColor3 = Color3.new(0,0,0) +Backpack.BackgroundTransparency = 0.08 +Backpack.BorderSizePixel = 0 +Backpack.Parent = gui +Backpack.Active = true + + -- Backpack Children + local SwapSlot = Instance.new("BoolValue") + SwapSlot.RobloxLocked = true + SwapSlot.Name = "SwapSlot" + SwapSlot.Parent = Backpack + + -- SwapSlot Children + local Slot = Instance.new("IntValue") + Slot.RobloxLocked = true + Slot.Name = "Slot" + Slot.Parent = SwapSlot + + local GearButton = Instance.new("ObjectValue") + GearButton.RobloxLocked = true + GearButton.Name = "GearButton" + GearButton.Parent = SwapSlot + + local Tabs = Instance.new("Frame") + Tabs.Name = "Tabs" + Tabs.Visible = true + Tabs.RobloxLocked = true + Tabs.BackgroundColor3 = Color3.new(0,0,0) + Tabs.BackgroundTransparency = 0.08 + Tabs.BorderSizePixel = 0 + Tabs.Position = UDim2.new(0,0,-0.1,-4) + Tabs.Size = UDim2.new(1,0,0.1,4) + Tabs.Parent = Backpack + + -- Tabs Children + + local tabLine = Instance.new("Frame") + tabLine.RobloxLocked = true + tabLine.Name = "TabLine" + tabLine.BackgroundColor3 = Color3.new(53/255, 53/255, 53/255) + tabLine.BorderSizePixel = 0 + tabLine.Position = UDim2.new(0,5,1,-4) + tabLine.Size = UDim2.new(1,-10,0,4) + tabLine.ZIndex = 2 + tabLine.Parent = Tabs + + local InventoryButton = Instance.new("TextButton") + InventoryButton.RobloxLocked = true + InventoryButton.Name = "InventoryButton" + InventoryButton.Size = UDim2.new(0,60,0,30) + InventoryButton.Position = UDim2.new(0,7,1,-31) + InventoryButton.BackgroundColor3 = Color3.new(1,1,1) + InventoryButton.BorderColor3 = Color3.new(1,1,1) + InventoryButton.Font = Enum.Font.ArialBold + InventoryButton.FontSize = Enum.FontSize.Size18 + InventoryButton.Text = "Gear" + InventoryButton.AutoButtonColor = false + InventoryButton.TextColor3 = Color3.new(0,0,0) + InventoryButton.Selected = true + InventoryButton.Active = true + InventoryButton.ZIndex = 3 + InventoryButton.Parent = Tabs + + if game.CoreGui.Version >= 8 then + local WardrobeButton = Instance.new("TextButton") + WardrobeButton.RobloxLocked = true + WardrobeButton.Name = "WardrobeButton" + WardrobeButton.Size = UDim2.new(0,90,0,30) + WardrobeButton.Position = UDim2.new(0,77,1,-31) + WardrobeButton.BackgroundColor3 = Color3.new(0,0,0) + WardrobeButton.BorderColor3 = Color3.new(1,1,1) + WardrobeButton.Font = Enum.Font.ArialBold + WardrobeButton.FontSize = Enum.FontSize.Size18 + WardrobeButton.Text = "Wardrobe" + WardrobeButton.AutoButtonColor = false + WardrobeButton.TextColor3 = Color3.new(1,1,1) + WardrobeButton.Selected = false + WardrobeButton.Active = true + WardrobeButton.Parent = Tabs + end + + local closeButton = Instance.new("TextButton") + closeButton.RobloxLocked = true + closeButton.Name = "CloseButton" + closeButton.Font = Enum.Font.ArialBold + closeButton.FontSize = Enum.FontSize.Size24 + closeButton.Position = UDim2.new(1,-33,0,4) + closeButton.Size = UDim2.new(0,30,0,30) + closeButton.Style = Enum.ButtonStyle.RobloxButton + closeButton.Text = "" + closeButton.TextColor3 = Color3.new(1,1,1) + closeButton.Parent = Tabs + closeButton.Modal = true + + --closeButton child + local XImage = Instance.new("ImageLabel") + XImage.RobloxLocked = true + XImage.Name = "XImage" + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75547445") + XImage.Image = "http://www.roblox.com/asset/?id=75547445" --TODO: move to rbxasset + XImage.BackgroundTransparency = 1 + XImage.Position = UDim2.new(-.25,-1,-.25,-1) + XImage.Size = UDim2.new(1.5,2,1.5,2) + XImage.ZIndex = 2 + XImage.Parent = closeButton + + -- Generic Search gui used across backpack + local SearchFrame = Instance.new("Frame") + SearchFrame.RobloxLocked = true + SearchFrame.Name = "SearchFrame" + SearchFrame.BackgroundTransparency = 1 + SearchFrame.Position = UDim2.new(1,-220,0,2) + SearchFrame.Size = UDim2.new(0,220,0,24) + SearchFrame.Parent = Backpack + + -- SearchFrame Children + local SearchButton = Instance.new("ImageButton") + SearchButton.RobloxLocked = true + SearchButton.Name = "SearchButton" + SearchButton.Size = UDim2.new(0,25,0,25) + SearchButton.BackgroundTransparency = 1 + SearchButton.Image = "rbxasset://textures/ui/SearchIcon.png" + SearchButton.Parent = SearchFrame + + local SearchBoxFrame = Instance.new("TextButton") + SearchBoxFrame.RobloxLocked = true + SearchBoxFrame.Position = UDim2.new(0,25,0,0) + SearchBoxFrame.Size = UDim2.new(1,-28,0,26) + SearchBoxFrame.Name = "SearchBoxFrame" + SearchBoxFrame.Text = "" + SearchBoxFrame.Style = Enum.ButtonStyle.RobloxButton + SearchBoxFrame.Parent = SearchFrame + + -- SearchBoxFrame Children + local SearchBox = Instance.new("TextBox") + SearchBox.RobloxLocked = true + SearchBox.Name = "SearchBox" + SearchBox.BackgroundTransparency = 1 + SearchBox.Font = Enum.Font.ArialBold + SearchBox.FontSize = Enum.FontSize.Size12 + SearchBox.Position = UDim2.new(0,-5,0,-5) + SearchBox.Size = UDim2.new(1,10,1,10) + SearchBox.TextColor3 = Color3.new(1,1,1) + SearchBox.TextXAlignment = Enum.TextXAlignment.Left + SearchBox.ZIndex = 2 + SearchBox.TextWrap = true + SearchBox.Text = "Search..." + SearchBox.Parent = SearchBoxFrame + + + local ResetButton = Instance.new("TextButton") + ResetButton.RobloxLocked = true + ResetButton.Visible = false + ResetButton.Name = "ResetButton" + ResetButton.Position = UDim2.new(1,-26,0,3) + ResetButton.Size = UDim2.new(0,20,0,20) + ResetButton.Style = Enum.ButtonStyle.RobloxButtonDefault + ResetButton.Text = "X" + ResetButton.TextColor3 = Color3.new(1,1,1) + ResetButton.Font = Enum.Font.ArialBold + ResetButton.FontSize = Enum.FontSize.Size18 + ResetButton.ZIndex = 3 + ResetButton.Parent = SearchFrame + +------------------------------- GEAR ------------------------------------------------------- + local Gear = Instance.new("Frame") + Gear.Name = "Gear" + Gear.RobloxLocked = true + Gear.BackgroundTransparency = 1 + Gear.Size = UDim2.new(1,0,1,0) + Gear.Parent = Backpack + + -- Gear Children + local AssetsList = Instance.new("Frame") + AssetsList.RobloxLocked = true + AssetsList.Name = "AssetsList" + AssetsList.BackgroundTransparency = 1 + AssetsList.Size = UDim2.new(0.2,0,1,0) + AssetsList.Style = Enum.FrameStyle.RobloxSquare + AssetsList.Visible = false + AssetsList.Parent = Gear + + local GearGrid = Instance.new("Frame") + GearGrid.RobloxLocked = true + GearGrid.Name = "GearGrid" + GearGrid.Size = UDim2.new(0.69,0,1,0) + GearGrid.BackgroundTransparency = 1 + GearGrid.Parent = Gear + + + local GearButton = Instance.new("ImageButton") + GearButton.RobloxLocked = true + GearButton.Visible = false + GearButton.Name = "GearButton" + GearButton.Size = UDim2.new(0,64,0,64) + GearButton.Style = Enum.ButtonStyle.RobloxButton + GearButton.Parent = GearGrid + + -- GearButton Children + local GearReference = Instance.new("ObjectValue") + GearReference.RobloxLocked = true + GearReference.Name = "GearReference" + GearReference.Parent = GearButton + + local GreyOutButton = Instance.new("Frame") + GreyOutButton.RobloxLocked = true + GreyOutButton.Name = "GreyOutButton" + GreyOutButton.BackgroundTransparency = 0.5 + GreyOutButton.Size = UDim2.new(1,0,1,0) + GreyOutButton.Active = true + GreyOutButton.Visible = false + GreyOutButton.ZIndex = 3 + GreyOutButton.Parent = GearButton + + local GearText = Instance.new("TextLabel") + GearText.RobloxLocked = true + GearText.Name = "GearText" + GearText.BackgroundTransparency = 1 + GearText.Font = Enum.Font.Arial + GearText.FontSize = Enum.FontSize.Size14 + GearText.Position = UDim2.new(0,-8,0,-8) + GearText.Size = UDim2.new(1,16,1,16) + GearText.Text = "" + GearText.ZIndex = 2 + GearText.TextColor3 = Color3.new(1,1,1) + GearText.TextWrap = true + GearText.Parent = GearButton + + local GearGridScrollingArea = Instance.new("Frame") + GearGridScrollingArea.RobloxLocked = true + GearGridScrollingArea.Name = "GearGridScrollingArea" + GearGridScrollingArea.Position = UDim2.new(0.7,0,0,35) + GearGridScrollingArea.Size = UDim2.new(0,17,1,-45) + GearGridScrollingArea.BackgroundTransparency = 1 + GearGridScrollingArea.Parent = Gear + + local GearLoadouts = Instance.new("Frame") + GearLoadouts.RobloxLocked = true + GearLoadouts.Name = "GearLoadouts" + GearLoadouts.BackgroundTransparency = 1 + GearLoadouts.Position = UDim2.new(0.7,23,0.5,1) + GearLoadouts.Size = UDim2.new(0.3,-23,0.5,-1) + GearLoadouts.Parent = Gear + GearLoadouts.Visible = false + + -- GearLoadouts Children + local GearLoadoutsHeader = Instance.new("Frame") + GearLoadoutsHeader.RobloxLocked = true + GearLoadoutsHeader.Name = "GearLoadoutsHeader" + GearLoadoutsHeader.BackgroundColor3 = Color3.new(0,0,0) + GearLoadoutsHeader.BackgroundTransparency = 0.2 + GearLoadoutsHeader.BorderColor3 = Color3.new(1,0,0) + GearLoadoutsHeader.Size = UDim2.new(1,2,0.15,-1) + GearLoadoutsHeader.Parent = GearLoadouts + + -- GearLoadoutsHeader Children + local LoadoutsHeaderText = Instance.new("TextLabel") + LoadoutsHeaderText.RobloxLocked = true + LoadoutsHeaderText.Name = "LoadoutsHeaderText" + LoadoutsHeaderText.BackgroundTransparency = 1 + LoadoutsHeaderText.Font = Enum.Font.ArialBold + LoadoutsHeaderText.FontSize = Enum.FontSize.Size18 + LoadoutsHeaderText.Size = UDim2.new(1,0,1,0) + LoadoutsHeaderText.Text = "Loadouts" + LoadoutsHeaderText.TextColor3 = Color3.new(1,1,1) + LoadoutsHeaderText.Parent = GearLoadoutsHeader + + local GearLoadoutsScrollingArea = GearGridScrollingArea:clone() + GearLoadoutsScrollingArea.RobloxLocked = true + GearLoadoutsScrollingArea.Name = "GearLoadoutsScrollingArea" + GearLoadoutsScrollingArea.Position = UDim2.new(1,-15,0.15,2) + GearLoadoutsScrollingArea.Size = UDim2.new(0,17,0.85,-2) + GearLoadoutsScrollingArea.Parent = GearLoadouts + + local LoadoutsList = Instance.new("Frame") + LoadoutsList.RobloxLocked = true + LoadoutsList.Name = "LoadoutsList" + LoadoutsList.Position = UDim2.new(0,0,0.15,2) + LoadoutsList.Size = UDim2.new(1,-17,0.85,-2) + LoadoutsList.Style = Enum.FrameStyle.RobloxSquare + LoadoutsList.Parent = GearLoadouts + + local GearPreview = Instance.new("Frame") + GearPreview.RobloxLocked = true + GearPreview.Name = "GearPreview" + GearPreview.Position = UDim2.new(0.7,23,0,0) + GearPreview.Size = UDim2.new(0.3,-28,0.5,-1) + GearPreview.BackgroundTransparency = 1 + GearPreview.ZIndex = 7 + GearPreview.Parent = Gear + + -- GearPreview Children + local GearStats = Instance.new("Frame") + GearStats.RobloxLocked = true + GearStats.Name = "GearStats" + GearStats.BackgroundTransparency = 1 + GearStats.Position = UDim2.new(0,0,0.75,0) + GearStats.Size = UDim2.new(1,0,0.25,0) + GearStats.ZIndex = 8 + GearStats.Parent = GearPreview + + -- GearStats Children + local GearName = Instance.new("TextLabel") + GearName.RobloxLocked = true + GearName.Name = "GearName" + GearName.BackgroundTransparency = 1 + GearName.Font = Enum.Font.ArialBold + GearName.FontSize = Enum.FontSize.Size18 + GearName.Position = UDim2.new(0,-3,0,0) + GearName.Size = UDim2.new(1,6,1,5) + GearName.Text = "" + GearName.TextColor3 = Color3.new(1,1,1) + GearName.TextWrap = true + GearName.ZIndex = 9 + GearName.Parent = GearStats + + local GearImage = Instance.new("ImageLabel") + GearImage.RobloxLocked = true + GearImage.Name = "GearImage" + GearImage.Image = "" + GearImage.BackgroundTransparency = 1 + GearImage.Position = UDim2.new(0.125,0,0,0) + GearImage.Size = UDim2.new(0.75,0,0.75,0) + GearImage.ZIndex = 8 + GearImage.Parent = GearPreview + + --GearImage Children + local GearIcons = Instance.new("Frame") + GearIcons.BackgroundColor3 = Color3.new(0,0,0) + GearIcons.BackgroundTransparency = 0.5 + GearIcons.BorderSizePixel = 0 + GearIcons.RobloxLocked = true + GearIcons.Name = "GearIcons" + GearIcons.Position = UDim2.new(0.4,2,0.85,-2) + GearIcons.Size = UDim2.new(0.6,0,0.15,0) + GearIcons.Visible = false + GearIcons.ZIndex = 9 + GearIcons.Parent = GearImage + + -- GearIcons Children + local GenreImage = Instance.new("ImageLabel") + GenreImage.RobloxLocked = true + GenreImage.Name = "GenreImage" + GenreImage.BackgroundColor3 = Color3.new(102/255,153/255,1) + GenreImage.BackgroundTransparency = 0.5 + GenreImage.BorderSizePixel = 0 + GenreImage.Size = UDim2.new(0.25,0,1,0) + GenreImage.Parent = GearIcons + + local AttributeOneImage = GenreImage:clone() + AttributeOneImage.RobloxLocked = true + AttributeOneImage.Name = "AttributeOneImage" + AttributeOneImage.BackgroundColor3 = Color3.new(1,51/255,0) + AttributeOneImage.Position = UDim2.new(0.25,0,0,0) + AttributeOneImage.Parent = GearIcons + + local AttributeTwoImage = GenreImage:clone() + AttributeTwoImage.RobloxLocked = true + AttributeTwoImage.Name = "AttributeTwoImage" + AttributeTwoImage.BackgroundColor3 = Color3.new(153/255,1,153/255) + AttributeTwoImage.Position = UDim2.new(0.5,0,0,0) + AttributeTwoImage.Parent = GearIcons + + local AttributeThreeImage = GenreImage:clone() + AttributeThreeImage.RobloxLocked = true + AttributeThreeImage.Name = "AttributeThreeImage" + AttributeThreeImage.BackgroundColor3 = Color3.new(0,0.5,0.5) + AttributeThreeImage.Position = UDim2.new(0.75,0,0,0) + AttributeThreeImage.Parent = GearIcons + +------------------------------- WARDROBE ------------------------------------------------------- + if game.CoreGui.Version < 8 then + -- no need for this to stick around, we aren't ready for wardrobe + script:remove() + return + end + + local function makeCharFrame(frameName, parent) + local frame = Instance.new("Frame") + frame.RobloxLocked = true + frame.Size = UDim2.new(1,0,1,-70) + frame.Position = UDim2.new(0,0,0,20) + frame.Name = frameName + frame.BackgroundTransparency = 1 + frame.Parent = parent + frame.Visible = false + return frame + end + local function makeZone( zoneName, image, size, position, parent ) + local zone = Instance.new("ImageLabel") + zone.RobloxLocked = true + zone.Name = zoneName + zone.Image = image + zone.Size = size + zone.BackgroundTransparency = 1 + zone.Position = position + zone.Parent = parent + return zone + end + local function makeStyledButton( buttonName, size, position, parent, buttonStyle ) + local button = Instance.new("ImageButton") + button.RobloxLocked = true + button.Name = buttonName + button.Size = size + button.Position = position + if buttonStyle then + button.Style = buttonStyle + else + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderColor3 = Color3.new(1,1,1) + end + button.Parent = parent + return button + end + local function makeTextLabel( TextLabelName,text,position,parent ) + local label = Instance.new("TextLabel") + label.RobloxLocked = true + label.BackgroundTransparency = 1 + label.Size = UDim2.new(0,32,0,14) + label.Name = TextLabelName + label.Font = Enum.Font.Arial + label.TextColor3 = Color3.new(1,1,1) + label.FontSize = Enum.FontSize.Size14 + label.Text = text + label.Position = position + label.Parent = parent + end + + + local Wardrobe = Instance.new("Frame") + Wardrobe.Name = "Wardrobe" + Wardrobe.RobloxLocked = true + Wardrobe.BackgroundTransparency = 1 + Wardrobe.Visible = false + Wardrobe.Size = UDim2.new(1,0,1,0) + Wardrobe.Parent = Backpack + + local AssetList = Instance.new("Frame") + AssetList.RobloxLocked = true + AssetList.Name = "AssetList" + AssetList.Position = UDim2.new(0,4,0,5) + AssetList.Size = UDim2.new(0,85,1,-5) + AssetList.BackgroundTransparency = 1 + AssetList.Visible = true + AssetList.Parent = Wardrobe + + local PreviewAssetFrame = Instance.new("Frame") + PreviewAssetFrame.RobloxLocked = true + PreviewAssetFrame.Name = "PreviewAssetFrame" + PreviewAssetFrame.BackgroundTransparency = 1 + PreviewAssetFrame.Position = UDim2.new(1,-240,0,30) + PreviewAssetFrame.Size = UDim2.new(0,250,0,250) + PreviewAssetFrame.Parent = Wardrobe + + local PreviewAssetBacking = Instance.new("TextButton") + PreviewAssetBacking.RobloxLocked = true + PreviewAssetBacking.Name = "PreviewAssetBacking" + PreviewAssetBacking.Active = false + PreviewAssetBacking.Text = "" + PreviewAssetBacking.AutoButtonColor = false + PreviewAssetBacking.Size = UDim2.new(1,0,1,0) + PreviewAssetBacking.Style = Enum.ButtonStyle.RobloxButton + PreviewAssetBacking.Visible = false + PreviewAssetBacking.ZIndex = 9 + PreviewAssetBacking.Parent = PreviewAssetFrame + + local PreviewAssetImage = Instance.new("ImageLabel") + PreviewAssetImage.RobloxLocked = true + PreviewAssetImage.Name = "PreviewAssetImage" + PreviewAssetImage.BackgroundTransparency = 0.8 + PreviewAssetImage.Position = UDim2.new(0.5,-100,0,0) + PreviewAssetImage.Size = UDim2.new(0,200,0,200) + PreviewAssetImage.BorderSizePixel = 0 + PreviewAssetImage.ZIndex = 10 + PreviewAssetImage.Parent = PreviewAssetBacking + + local AssetNameLabel = Instance.new("TextLabel") + AssetNameLabel.Name = "AssetNameLabel" + AssetNameLabel.RobloxLocked = true + AssetNameLabel.BackgroundTransparency = 1 + AssetNameLabel.Position = UDim2.new(0,0,1,-20) + AssetNameLabel.Size = UDim2.new(0.5,0,0,24) + AssetNameLabel.ZIndex = 10 + AssetNameLabel.Font = Enum.Font.Arial + AssetNameLabel.Text = "" + AssetNameLabel.TextColor3 = Color3.new(1,1,1) + AssetNameLabel.TextScaled = true + AssetNameLabel.Parent = PreviewAssetBacking + + local AssetTypeLabel = AssetNameLabel:clone() + AssetTypeLabel.RobloxLocked = true + AssetTypeLabel.Name = "AssetTypeLabel" + AssetTypeLabel.TextScaled = false + AssetTypeLabel.FontSize = Enum.FontSize.Size18 + AssetTypeLabel.Position = UDim2.new(0.5,3,1,-20) + AssetTypeLabel.Parent = PreviewAssetBacking + + + + local PreviewButton = Instance.new("TextButton") + PreviewButton.RobloxLocked = true + PreviewButton.Name = "PreviewButton" + PreviewButton.Text = "Rotate" + PreviewButton.BackgroundColor3 = Color3.new(0,0,0) + PreviewButton.BackgroundTransparency = 0.5 + PreviewButton.BorderColor3 = Color3.new(1,1,1) + PreviewButton.Position = UDim2.new(1.2,-62,1,-50) + PreviewButton.Size = UDim2.new(0,125,0,50) + PreviewButton.Font = Enum.Font.ArialBold + PreviewButton.FontSize = Enum.FontSize.Size24 + PreviewButton.TextColor3 = Color3.new(1,1,1) + PreviewButton.TextWrapped = true + PreviewButton.TextStrokeTransparency = 0 + PreviewButton.Parent = Wardrobe + + local CharacterPane = Instance.new("Frame") + CharacterPane.RobloxLocked = true + CharacterPane.Name = "CharacterPane" + CharacterPane.Position = UDim2.new(1,-220,0,32) + CharacterPane.Size = UDim2.new(0,220,1,-40) + CharacterPane.BackgroundTransparency = 1 + CharacterPane.Visible = true + CharacterPane.Parent = Wardrobe + + --CharacterPane Children + local FaceFrame = makeCharFrame("FacesFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75460621") + makeZone("FaceZone","http://www.roblox.com/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),FaceFrame) + makeStyledButton("Face",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),FaceFrame) + + local HeadFrame = makeCharFrame("HeadsFrame", CharacterPane) + makeZone("FaceZone","http://www.roblox.com/asset/?id=75460621",UDim2.new(0,157,0,137),UDim2.new(0.5,-78,0.5,-68),HeadFrame) + makeStyledButton("Head",UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-135),HeadFrame) + + local HatsFrame = makeCharFrame("HatsFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75457888") + local HatsZone = makeZone("HatsZone","http://www.roblox.com/asset/?id=75457888",UDim2.new(0,186,0,184),UDim2.new(0.5,-93,0.5,-100), HatsFrame) + makeStyledButton("Hat1Button",UDim2.new(0,64,0,64),UDim2.new(0,-1,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + makeStyledButton("Hat2Button",UDim2.new(0,64,0,64),UDim2.new(0,63,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + makeStyledButton("Hat3Button",UDim2.new(0,64,0,64),UDim2.new(0,127,0,-1),HatsZone,Enum.ButtonStyle.RobloxButton) + + local PantsFrame = makeCharFrame("PantsFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75457920") + makeZone("PantsZone","http://www.roblox.com/asset/?id=75457920",UDim2.new(0,121,0,99),UDim2.new(0.5,-60,0.5,-100),PantsFrame) + + local pantFrame = Instance.new("Frame") + pantFrame.RobloxLocked = true + pantFrame.Size = UDim2.new(0,25,0,56) + pantFrame.Position = UDim2.new(0.5,-26,0.5,0) + pantFrame.BackgroundColor3 = Color3.new(0,0,0) + pantFrame.BorderColor3 = Color3.new(1,1,1) + pantFrame.Name = "PantFrame" + pantFrame.Parent = PantsFrame + + local otherPantFrame = pantFrame:clone() + otherPantFrame.Position = UDim2.new(0.5,3,0.5,0) + otherPantFrame.RobloxLocked = true + otherPantFrame.Parent = PantsFrame + + local CurrentPants = Instance.new("ImageButton") + CurrentPants.RobloxLocked = true + CurrentPants.BackgroundTransparency = 1 + CurrentPants.ZIndex = 2 + CurrentPants.Name = "CurrentPants" + CurrentPants.Position = UDim2.new(0.5,-31,0.5,-4) + CurrentPants.Size = UDim2.new(0,54,0,59) + CurrentPants.Parent = PantsFrame + + local MeshFrame = makeCharFrame("PackagesFrame", CharacterPane) + local torsoButton = makeStyledButton("TorsoMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("TorsoLabel","Torso",UDim2.new(0.5,-16,0,-25),torsoButton) + local leftLegButton = makeStyledButton("LeftLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,0,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("LeftLegLabel","Left Leg",UDim2.new(0.5,-16,0,-25),leftLegButton) + local rightLegButton = makeStyledButton("RightLegMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-64,0.5,-25),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("RightLegLabel","Right Leg",UDim2.new(0.5,-16,0,-25),rightLegButton) + local rightArmButton = makeStyledButton("RightArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-96,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("RightArmLabel","Right Arm",UDim2.new(0.5,-16,0,-25),rightArmButton) + local leftArmButton = makeStyledButton("LeftArmMeshButton", UDim2.new(0,64,0,64),UDim2.new(0.5,32,0.5,-110),MeshFrame,Enum.ButtonStyle.RobloxButton) + makeTextLabel("LeftArmLabel","Left Arm",UDim2.new(0.5,-16,0,-25),leftArmButton) + + local TShirtFrame = makeCharFrame("T-ShirtsFrame",CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=75460642") + makeZone("TShirtZone","http://www.roblox.com/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),TShirtFrame) + makeStyledButton("TShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),TShirtFrame) + + + local ShirtFrame = makeCharFrame("ShirtsFrame", CharacterPane) + makeZone("ShirtZone","http://www.roblox.com/asset/?id=75460642",UDim2.new(0,121,0,154),UDim2.new(0.5,-60,0.5,-100),ShirtFrame) + makeStyledButton("ShirtButton", UDim2.new(0,64,0,64),UDim2.new(0.5,-32,0.5,-64),ShirtFrame) + + + local ColorFrame = makeCharFrame("ColorFrame", CharacterPane) + game:GetService("ContentProvider"):Preload("http://www.roblox.com/asset/?id=76049888") + local ColorZone = makeZone("ColorZone","http://www.roblox.com/asset/?id=76049888", UDim2.new(0,120,0,150),UDim2.new(0.5,-60,0.5,-100),ColorFrame) + makeStyledButton("Head",UDim2.new(0.26,0,0.19,0),UDim2.new(0.37,0,0.02,0),ColorZone).AutoButtonColor = false + makeStyledButton("LeftArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.78,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("RightArm",UDim2.new(0.19,0,0.36,0),UDim2.new(0.025,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("Torso",UDim2.new(0.43,0,0.36,0),UDim2.new(0.28,0,0.26,0),ColorZone).AutoButtonColor = false + makeStyledButton("RightLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.275,0,0.67,0),ColorZone).AutoButtonColor = false + makeStyledButton("LeftLeg",UDim2.new(0.19,0,0.31,0),UDim2.new(0.525,0,0.67,0),ColorZone).AutoButtonColor = false + + -- Character Panel label (shows what category we are currently browsing) + local CategoryLabel = Instance.new("TextLabel") + CategoryLabel.RobloxLocked = true + CategoryLabel.Name = "CategoryLabel" + CategoryLabel.BackgroundTransparency = 1 + CategoryLabel.Font = Enum.Font.ArialBold + CategoryLabel.FontSize = Enum.FontSize.Size18 + CategoryLabel.Position = UDim2.new(0,0,0,-7) + CategoryLabel.Size = UDim2.new(1,0,0,20) + CategoryLabel.TextXAlignment = Enum.TextXAlignment.Center + CategoryLabel.Text = "All" + CategoryLabel.TextColor3 = Color3.new(1,1,1) + CategoryLabel.Parent = CharacterPane + + --Save Button + local SaveButton = Instance.new("TextButton") + SaveButton.RobloxLocked = true + SaveButton.Name = "SaveButton" + SaveButton.Size = UDim2.new(0.6,0,0,50) + SaveButton.Position = UDim2.new(0.2,0,1,-50) + SaveButton.Style = Enum.ButtonStyle.RobloxButton + SaveButton.Selected = false + SaveButton.Font = Enum.Font.ArialBold + SaveButton.FontSize = Enum.FontSize.Size18 + SaveButton.Text = "Save" + SaveButton.TextColor3 = Color3.new(1,1,1) + SaveButton.Parent = CharacterPane + +-- no need for this to stick around +script:remove() \ No newline at end of file diff --git a/app/files/CoreGui/53878053 b/app/files/CoreGui/53878053 new file mode 100644 index 0000000..79b5c9d --- /dev/null +++ b/app/files/CoreGui/53878053 @@ -0,0 +1,968 @@ +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +local RbxGui,msg = LoadLibrary("RbxGui") +if not RbxGui then print("could not find RbxGui!") return end + +--- Begin Locals +waitForChild(game,"Players") + +-- don't do anything if we are in an empty game +if #game.Players:GetChildren() < 1 then + game.Players.ChildAdded:wait() +end + +local tilde = "~" +local backquote = "`" +game:GetService("GuiService"):AddKey(tilde) -- register our keys +game:GetService("GuiService"):AddKey(backquote) + +local player = game.Players.LocalPlayer + +local backpack = script.Parent +local screen = script.Parent.Parent +local closeButton = backpack.Tabs.CloseButton + +local openCloseDebounce = false + +local backpackItems = {} + +local buttons = {} + +local debounce = false + +local guiTweenSpeed = 1 + +local backpackOldStateVisible = false +local browsingMenu = false + +local mouseEnterCons = {} +local mouseClickCons = {} + +local characterChildAddedCon = nil +local characterChildRemovedCon = nil +local backpackAddCon = nil +local humanoidDiedCon = nil +local backpackButtonClickCon = nil +local guiServiceKeyPressCon = nil + +waitForChild(player,"Backpack") +local playerBackpack = player.Backpack + +waitForChild(backpack,"Gear") +waitForChild(backpack.Gear,"GearPreview") +local gearPreview = backpack.Gear.GearPreview + +waitForChild(backpack.Gear,"GearGridScrollingArea") +local scroller = backpack.Gear.GearGridScrollingArea + +waitForChild(backpack.Parent,"CurrentLoadout") +local currentLoadout = backpack.Parent.CurrentLoadout + +waitForChild(backpack.Parent,"ControlFrame") +waitForChild(backpack.Parent.ControlFrame,"BackpackButton") +local backpackButton = backpack.Parent.ControlFrame.BackpackButton + +waitForChild(backpack.Gear,"GearGrid") +waitForChild(backpack.Gear.GearGrid,"GearButton") +local gearButton = backpack.Gear.GearGrid.GearButton +local grid = backpack.Gear.GearGrid + +waitForChild(backpack.Gear.GearGrid,"SearchFrame") +waitForChild(backpack.Gear.GearGrid.SearchFrame,"SearchBoxFrame") +waitForChild(backpack.Gear.GearGrid.SearchFrame.SearchBoxFrame,"SearchBox") +local searchBox = backpack.Gear.GearGrid.SearchFrame.SearchBoxFrame.SearchBox + +waitForChild(backpack.Gear.GearGrid.SearchFrame,"SearchButton") +local searchButton = backpack.Gear.GearGrid.SearchFrame.SearchButton + +waitForChild(backpack.Gear.GearGrid,"ResetFrame") +local resetFrame = backpack.Gear.GearGrid.ResetFrame + +waitForChild(backpack.Gear.GearGrid.ResetFrame,"ResetButtonBorder") +local resetButton = backpack.Gear.GearGrid.ResetFrame.ResetButtonBorder + +waitForChild(script.Parent,"SwapSlot") +local swapSlot = script.Parent.SwapSlot + + +-- creating scroll bar early as to make sure items get placed correctly +local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(nil, "grid", Vector2.new(4, 4)) + +scrollFrame.Position = UDim2.new(0,0,0,30) +scrollFrame.Size = UDim2.new(1,0,1,-30) +scrollFrame.Parent = backpack.Gear.GearGrid + +local scrollBar = Instance.new("Frame") +scrollBar.Name = "ScrollBar" +scrollBar.BackgroundTransparency = 0.9 +scrollBar.BackgroundColor3 = Color3.new(1,1,1) +scrollBar.BorderSizePixel = 0 +scrollBar.Size = UDim2.new(0, 17, 1, -36) +scrollBar.Position = UDim2.new(0,0,0,18) +scrollBar.Parent = scroller + +scrollDown.Position = UDim2.new(0,0,1,-17) + +scrollUp.Parent = scroller +scrollDown.Parent = scroller + +local scrollFrameLoadout, scrollUpLoadout, scrollDownLoadout, recalculateScrollLoadout = RbxGui.CreateScrollingFrame() + +scrollFrameLoadout.Position = UDim2.new(0,0,0,0) +scrollFrameLoadout.Size = UDim2.new(1,0,1,0) +scrollFrameLoadout.Parent = backpack.Gear.GearLoadouts.LoadoutsList + +local LoadoutButton = Instance.new("TextButton") +LoadoutButton.RobloxLocked = true +LoadoutButton.Name = "LoadoutButton" +LoadoutButton.Font = Enum.Font.ArialBold +LoadoutButton.FontSize = Enum.FontSize.Size14 +LoadoutButton.Position = UDim2.new(0,0,0,0) +LoadoutButton.Size = UDim2.new(1,0,0,32) +LoadoutButton.Style = Enum.ButtonStyle.RobloxButton +LoadoutButton.Text = "Loadout #1" +LoadoutButton.TextColor3 = Color3.new(1,1,1) +LoadoutButton.Parent = scrollFrameLoadout + +local LoadoutButtonTwo = LoadoutButton:clone() +LoadoutButtonTwo.Text = "Loadout #2" +LoadoutButtonTwo.Parent = scrollFrameLoadout + +local LoadoutButtonThree = LoadoutButton:clone() +LoadoutButtonThree.Text = "Loadout #3" +LoadoutButtonThree.Parent = scrollFrameLoadout + +local LoadoutButtonFour = LoadoutButton:clone() +LoadoutButtonFour.Text = "Loadout #4" +LoadoutButtonFour.Parent = scrollFrameLoadout + +local scrollBarLoadout = Instance.new("Frame") +scrollBarLoadout.Name = "ScrollBarLoadout" +scrollBarLoadout.BackgroundTransparency = 0.9 +scrollBarLoadout.BackgroundColor3 = Color3.new(1,1,1) +scrollBarLoadout.BorderSizePixel = 0 +scrollBarLoadout.Size = UDim2.new(0, 17, 1, -36) +scrollBarLoadout.Position = UDim2.new(0,0,0,18) +scrollBarLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + +scrollDownLoadout.Position = UDim2.new(0,0,1,-17) + +scrollUpLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea +scrollDownLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + + +-- Begin Functions +function removeFromMap(map,object) + for i = 1, #map do + if map[i] == object then + table.remove(map,i) + break + end + end +end + +function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resize() + local size = 0 + if gearPreview.AbsoluteSize.Y > gearPreview.AbsoluteSize.X then + size = gearPreview.AbsoluteSize.X * 0.75 + else + size = gearPreview.AbsoluteSize.Y * 0.75 + end + + gearPreview.GearImage.Size = UDim2.new(0,size,0,size) + gearPreview.GearImage.Position = UDim2.new(0,gearPreview.AbsoluteSize.X/2 - size/2,0.75,-size) + + resizeGrid() +end + +function addToGrid(child) + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + return + end + end + if child:FindFirstChild("RobloxBuildTool") then return end + + for i,v in pairs(backpackItems) do -- check to see if we already have this gear registered + if v == child then return end + end + + table.insert(backpackItems,child) + + local changeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if buttons[child] then + if buttons[child].Image == "" then + buttons[child].GearText.Text = child.Name + end + end + end + end) + local ancestryCon = nil + ancestryCon = child.AncestryChanged:connect(function(theChild,theParent) + local thisObject = nil + for k,v in pairs(backpackItems) do + if v == child then + thisObject = v + break + end + end + + waitForProperty(player,"Character") + waitForChild(player,"Backpack") + if (child.Parent ~= player.Backpack and child.Parent ~= player.Character) then + if ancestryCon then ancestryCon:disconnect() end + if changeCon then changeCon:disconnect() end + + for k,v in pairs(backpackItems) do + if v == thisObject then + if mouseEnterCons[buttons[v]] then mouseEnterCons[buttons[v]]:disconnect() end + if mouseClickCons[buttons[v]] then mouseClickCons[buttons[v]]:disconnect() end + buttons[v].Parent = nil + buttons[v] = nil + break + end + end + + removeFromMap(backpackItems,thisObject) + + resizeGrid() + else + resizeGrid() + end + updateGridActive() + end) + resizeGrid() +end + +function buttonClick(button) + if button:FindFirstChild("UnequipContextMenu") and not button.Active then + button.UnequipContextMenu.Visible = true + browsingMenu = true + end +end + +function previewGear(button) + if not browsingMenu then + gearPreview.GearImage.Image = button.Image + gearPreview.GearStats.GearName.Text = button.GearReference.Value.Name + end +end + +function findEmptySlot() + local smallestNum = nil + local loadout = currentLoadout:GetChildren() + for i = 1, #loadout do + if loadout[i]:IsA("Frame") and #loadout[i]:GetChildren() <= 0 then + local frameNum = tonumber(string.sub(loadout[i].Name,5)) + if frameNum == 0 then frameNum = 10 end + if not smallestNum or (smallestNum > frameNum) then + smallestNum = frameNum + end + end + end + if smallestNum == 10 then smallestNum = 0 end + return smallestNum +end + +function checkForSwap(button,x,y) + local loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + if x >= loadoutChildren[i].AbsolutePosition.x and x <= (loadoutChildren[i].AbsolutePosition.x + loadoutChildren[i].AbsoluteSize.x) then + if y >= loadoutChildren[i].AbsolutePosition.y and y <= (loadoutChildren[i].AbsolutePosition.y + loadoutChildren[i].AbsoluteSize.y) then + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + swapGearSlot(slot,button) + return true + end + end + end + end + return false +end + +function resizeGrid() + for k,v in pairs(backpackItems) do + if not v:FindFirstChild("RobloxBuildTool") then + if not buttons[v] then + local buttonClone = gearButton:clone() + buttonClone.Parent = grid.ScrollingFrame + buttonClone.Visible = true + buttonClone.Image = v.TextureId + if buttonClone.Image == "" then + buttonClone.GearText.Text = v.Name + end + + buttonClone.GearReference.Value = v + buttonClone.Draggable = true + buttons[v] = buttonClone + + local unequipMenu = getGearContextMenu() + + unequipMenu.Visible = false + unequipMenu.Parent = buttonClone + + local beginPos = nil + buttonClone.DragBegin:connect(function(value) + buttonClone.ZIndex = 9 + beginPos = value + end) + buttonClone.DragStopped:connect(function(x,y) + buttonClone.ZIndex = 1 + if beginPos ~= buttonClone.Position then + if not checkForSwap(buttonClone,x,y) then + buttonClone:TweenPosition(beginPos,Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.5, true) + buttonClone.Draggable = false + delay(0.5,function() + buttonClone.Draggable = true + end) + else + buttonClone.Position = beginPos + end + end + end) + local clickTime = tick() + mouseEnterCons[buttonClone] = buttonClone.MouseEnter:connect(function() previewGear(buttonClone) end) + mouseClickCons[buttonClone] = buttonClone.MouseButton1Click:connect(function() + local newClickTime = tick() + if buttonClone.Active and (newClickTime - clickTime) < 0.5 then + local slot = findEmptySlot() + if slot then + buttonClone.ZIndex = 1 + swapGearSlot(slot,buttonClone) + end + else + buttonClick(buttonClone) + end + clickTime = newClickTime + end) + end + end + end + recalculateScroll() +end + +function showPartialGrid(subset) + + resetFrame.Visible = true + + for k,v in pairs(buttons) do + v.Parent = nil + end + for k,v in pairs(subset) do + v.Parent = grid.ScrollingFrame + end + recalculateScroll() +end + +function showEntireGrid() + resetFrame.Visible = false + + for k,v in pairs(buttons) do + v.Parent = grid.ScrollingFrame + end + recalculateScroll() +end + +function inLoadout(gear) + local children = currentLoadout:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + local button = children[i]:GetChildren() + if #button > 0 then + if button[1].GearReference.Value and button[1].GearReference.Value == gear then + return true + end + end + end + end + return false +end + +function updateGridActive() + for k,v in pairs(backpackItems) do + if buttons[v] then + local gear = nil + local gearRef = buttons[v]:FindFirstChild("GearReference") + + if gearRef then gear = gearRef.Value end + + if not gear then + buttons[v].Active = false + elseif inLoadout(gear) then + buttons[v].Active = false + else + buttons[v].Active = true + end + end + end +end + +function centerGear(loadoutChildren) + local gearButtons = {} + local lastSlotAdd = nil + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end +end + +function spreadOutGear(loadoutChildren) + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + if slot == 0 then slot = 10 end + loadoutChildren[i]:TweenPosition(UDim2.new((slot - 1)/10,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end + end +end + +function openCloseBackpack(close) + if openCloseDebounce then return end + openCloseDebounce = true + + local visible = not backpack.Visible + if visible and not close then + updateGridActive() + local centerDialogSupported, msg = pcall(function() game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + backpack.Visible = true + loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 0.5 + end + end + spreadOutGear(loadoutChildren) + end, + function() + backpack.Visible = false + end) + end) + backpackButton.Selected = true + backpack:TweenSizeAndPosition(UDim2.new(0.55, 0, 0.6, 0),UDim2.new(0.225, 0, 0.2, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed/2, true) + delay(guiTweenSpeed/2 + 0.01, + function() + local children = backpack:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + children[i].Visible = true + end + end + resizeGrid() + resize() + openCloseDebounce = false + end) + else + backpackButton.Selected = false + local children = backpack:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + children[i].Visible = false + end + end + loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 1 + end + end + centerGear(loadoutChildren) + + backpack:TweenSizeAndPosition(UDim2.new(0,0,0,0),UDim2.new(0.5,0,0.5,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed/2, true) + delay(guiTweenSpeed/2 + 0.01, + function() + backpack.Visible = visible + resizeGrid() + resize() + pcall(function() game.GuiService:RemoveCenterDialog(backpack) end) + openCloseDebounce = false + end) + end +end + +function loadoutCheck(child, selectState) + if not child:IsA("ImageButton") then return end + for k,v in pairs(backpackItems) do + if buttons[v] then + if child:FindFirstChild("GearReference") and buttons[v]:FindFirstChild("GearReference") then + if buttons[v].GearReference.Value == child.GearReference.Value then + buttons[v].Active = selectState + break + end + end + end + end +end + +function clearPreview() + gearPreview.GearImage.Image = "" + gearPreview.GearStats.GearName.Text = "" +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + stuff[i].Parent = playerBackpack + end + end +end + +function equipGear(physGear) + removeAllEquippedGear(physGear) + physGear.Parent = player.Character + updateGridActive() +end + +function unequipGear(physGear) + physGear.Parent = playerBackpack + updateGridActive() +end + +function highlight(button) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) +end +function clearHighlight(button) + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function swapGearSlot(slot,gearButton) + if not swapSlot.Value then -- signal loadout to swap a gear out + swapSlot.Slot.Value = slot + swapSlot.GearButton.Value = gearButton + swapSlot.Value = true + updateGridActive() + end +end + + +local UnequipGearMenuClick = function(element, menu) + if type(element.Action) ~= "number" then return end + local num = element.Action + if num == 1 then -- remove from loadout + unequipGear(menu.Parent.GearReference.Value) + local inventoryButton = menu.Parent + local gearToUnequip = inventoryButton.GearReference.Value + local loadoutChildren = currentLoadout:GetChildren() + local slot = -1 + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + local button = loadoutChildren[i]:GetChildren() + if button[1] and button[1].GearReference.Value == gearToUnequip then + slot = button[1].SlotNumber.Text + break + end + end + end + swapGearSlot(slot,nil) + end +end + +-- these next two functions are used to stop any use of backpack while the player is dead (can cause issues) +function activateBackpack() + backpack.Visible = backpackOldStateVisible + + loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 1 + end + end + + backpackButtonClickCon = backpackButton.MouseButton1Click:connect(function() openCloseBackpack() end) + guiServiceKeyPressCon = game:GetService("GuiService").KeyPressed:connect(function(key) + if key == tilde or key == backquote then + openCloseBackpack() + end + end) +end +function deactivateBackpack() + if backpackButtonClickCon then backpackButtonClickCon:disconnect() end + if guiServiceKeyPressCon then guiServiceKeyPressCon:disconnect() end + + backpackOldStateVisible = backpack.Visible + backpack.Visible = false + openCloseBackpack(true) +end + +function setupCharacterConnections() + + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + + -- make sure we get all the children + local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() + for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) + end + + if characterChildAddedCon then characterChildAddedCon:disconnect() end + characterChildAddedCon = + game.Players.LocalPlayer.Character.ChildAdded:connect(function(child) + addToGrid(child) + updateGridActive() + end) + + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + characterChildRemovedCon = + game.Players.LocalPlayer.Character.ChildRemoved:connect(function(child) + updateGridActive() + end) + + + if humanoidDiedCon then humanoidDiedCon:disconnect() end + local localPlayer = game.Players.LocalPlayer + waitForProperty(localPlayer,"Character") + waitForChild(localPlayer.Character,"Humanoid") + humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(function() deactivateBackpack() end) + + activateBackpack() + + wait() + centerGear(currentLoadout:GetChildren()) +end + +function removeCharacterConnections() + if characterChildAddedCon then characterChildAddedCon:disconnect() end + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + if backpackAddCon then backpackAddCon:disconnect() end +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function splitByWhiteSpace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 2 then + table.insert(terms,token) + end + end + return terms +end + +function filterGear(searchTerm) + string.lower(searchTerm) + searchTerm = trim(searchTerm) + if string.len(searchTerm) < 2 then return nil end + local terms = splitByWhiteSpace(searchTerm) + + local filteredGear = {} + for k,v in pairs(backpackItems) do + if buttons[v] then + local gearString = string.lower(buttons[v].GearReference.Value.Name) + gearString = trim(gearString) + for i = 1, #terms do + if string.match(gearString,terms[i]) then + table.insert(filteredGear,buttons[v]) + break + end + end + end + end + + return filteredGear +end + + +function showSearchGear() + local searchText = searchBox.Text + searchBox.Text = "Search..." + local filteredButtons = filterGear(searchText) + if filteredButtons and #filteredButtons > 0 then + showPartialGrid(filteredButtons) + else + showEntireGrid() + end +end + +function nukeBackpack() + while #buttons > 0 do + table.remove(buttons) + end + buttons = {} + while #backpackItems > 0 do + table.remove(backpackItems) + end + backpackItems = {} + local scrollingFrameChildren = grid.ScrollingFrame:GetChildren() + for i = 1, #scrollingFrameChildren do + scrollingFrameChildren[i]:remove() + end +end + +function getGearContextMenu() + local gearContextMenu = Instance.new("Frame") + gearContextMenu.Active = true + gearContextMenu.Name = "UnequipContextMenu" + gearContextMenu.Size = UDim2.new(0,115,0,70) + gearContextMenu.Position = UDim2.new(0,-16,0,-16) + gearContextMenu.BackgroundTransparency = 1 + gearContextMenu.Visible = false + + local gearContextMenuButton = Instance.new("TextButton") + gearContextMenuButton.Name = "UnequipContextMenuButton" + gearContextMenuButton.Text = "" + gearContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault + gearContextMenuButton.ZIndex = 8 + gearContextMenuButton.Size = UDim2.new(1, 0, 1, -20) + gearContextMenuButton.Visible = true + gearContextMenuButton.Parent = gearContextMenu + + local elementHeight = 12 + + local contextMenuElements = {} + local contextMenuElementsName = {"Remove Hotkey"} + + for i = 1, #contextMenuElementsName do + local element = {} + element.Type = "Button" + element.Text = contextMenuElementsName[i] + element.Action = i + element.DoIt = UnequipGearMenuClick + table.insert(contextMenuElements,element) + end + + for i, contextElement in ipairs(contextMenuElements) do + local element = contextElement + if element.Type == "Button" then + local button = Instance.new("TextButton") + button.Name = "UnequipContextButton" .. i + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderSizePixel = 0 + button.TextXAlignment = Enum.TextXAlignment.Left + button.Text = " " .. contextElement.Text + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size14 + button.Size = UDim2.new(1, 8, 0, elementHeight) + button.Position = UDim2.new(0,0,0,elementHeight * i) + button.TextColor3 = Color3.new(1,1,1) + button.ZIndex = 9 + button.Parent = gearContextMenuButton + + button.MouseButton1Click:connect(function() + if button.Active and not gearContextMenu.Parent.Active then + local success, result = pcall(function() element.DoIt(element, gearContextMenu) end) + browsingMenu = false + gearContextMenu.Visible = false + clearHighlight(button) + clearPreview() + end + end) + + button.MouseEnter:connect(function() + if button.Active and gearContextMenu.Parent.Active then + highlight(button) + end + end) + button.MouseLeave:connect(function() + if button.Active and gearContextMenu.Parent.Active then + clearHighlight(button) + end + end) + + contextElement.Button = button + contextElement.Element = button + elseif element.Type == "Label" then + local frame = Instance.new("Frame") + frame.Name = "ContextLabel" .. i + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1, 8, 0, elementHeight) + + local label = Instance.new("TextLabel") + label.Name = "Text1" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Left + label.Font = Enum.Font.ArialBold + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.0, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label1 = label + + if element.GetText2 then + label = Instance.new("TextLabel") + label.Name = "Text2" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Right + label.Font = Enum.Font.Arial + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.5, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label2 = label + end + frame.Parent = gearContextMenuButton + element.Label = frame + element.Element = frame + end + end + + gearContextMenu.ZIndex = 4 + gearContextMenu.MouseLeave:connect(function() + browsingMenu = false + gearContextMenu.Visible = false + clearPreview() + end) + robloxLock(gearContextMenu) + + return gearContextMenu +end + +local backpackChildren = player.Backpack:GetChildren() +for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) +end + +------------------------- Start Lifelong Connections ----------------------- +screen.Changed:connect(function(prop) + if prop == "AbsoluteSize" then + if debounce then return end + debounce = true + wait() + resize() + resizeGrid() + debounce = false + end +end) + +currentLoadout.ChildAdded:connect(function(child) loadoutCheck(child, false) end) +currentLoadout.ChildRemoved:connect(function(child) loadoutCheck(child, true) end) + +currentLoadout.DescendantAdded:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + centerGear(currentLoadout:GetChildren()) + end +end) +currentLoadout.DescendantRemoving:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + wait() + centerGear(currentLoadout:GetChildren()) + end +end) + +grid.MouseEnter:connect(function() clearPreview() end) +grid.MouseLeave:connect(function() clearPreview() end) + +player.CharacterRemoving:connect(function() + removeCharacterConnections() + nukeBackpack() +end) +player.CharacterAdded:connect(function() setupCharacterConnections() end) + +player.ChildAdded:connect(function(child) + if child:IsA("Backpack") then + playerBackpack = child + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + end +end) + +swapSlot.Changed:connect(function() + if not swapSlot.Value then + updateGridActive() + end +end) + +searchBox.FocusLost:connect(function(enterPressed) + if enterPressed then + showSearchGear() + end +end) + +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + loadoutChildren[i].ChildRemoved:connect(function() + updateGridActive() + end) + loadoutChildren[i].ChildAdded:connect(function() + updateGridActive() + end) + end +end + +pcall(function() closeButton.Modal = true end) +closeButton.MouseButton1Click:connect(function() openCloseBackpack() end) + +searchButton.MouseButton1Click:connect(function() showSearchGear() end) +resetButton.MouseButton1Click:connect(function() showEntireGrid() end) +------------------------- End Lifelong Connections ----------------------- + +resize() +resizeGrid() + +-- make sure any items in the loadout are accounted for in inventory +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + loadoutCheck(loadoutChildren[i], false) +end +if not backpack.Visible then centerGear(currentLoadout:GetChildren()) end + +-- make sure that inventory is listening to gear reparenting +if characterChildAddedCon == nil and game.Players.LocalPlayer["Character"] then + setupCharacterConnections() +end +if not backpackAddCon then + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) +end + +-- flip it on if we are good +if game.CoreGui.Version >= 3 then + backpackButton.Visible = true +end + +recalculateScrollLoadout() + + diff --git a/app/files/CoreGui/53878057 b/app/files/CoreGui/53878057 new file mode 100644 index 0000000..f74cba0 --- /dev/null +++ b/app/files/CoreGui/53878057 @@ -0,0 +1,1098 @@ +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +local useCoreHealthBar = false +pcall(function() useCoreHealthBar = Game.Players:GetUseCoreScriptHealthBar() end) + + +local currentLoadout = script.Parent +local StaticTabName = "gear" +local backpackEnabled = true + +local robloxGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") +assert(robloxGui) +local controlFrame = waitForChild(robloxGui, 'ControlFrame') +local backpackButton = waitForChild(controlFrame, 'BackpackButton') +local backpack = waitForChild(robloxGui, 'Backpack') +waitForChild(robloxGui,"CurrentLoadout") +waitForChild(robloxGui.CurrentLoadout,"TempSlot") +waitForChild(robloxGui.CurrentLoadout.TempSlot,"SlotNumber") + +waitForChild(currentLoadout, 'Background') +local clBackground = currentLoadout.Background + +local function IsTouchDevice() + return Game:GetService('UserInputService').TouchEnabled +end + +local function IsSmallScreen() + return (robloxGui.AbsoluteSize.Y <= 500) +end + +local function moveHealthBar(pGui) + waitForChild(pGui, 'HealthGUI') + waitForChild(pGui['HealthGUI'], 'tray') + local tray = pGui['HealthGUI']['tray'] + tray.Position = UDim2.new(0.5, -85, 1, -26) +end + +local function setHealthBarVisible( pGui, visible ) + waitForChild(pGui, 'HealthGUI') + waitForChild(pGui['HealthGUI'], 'tray') + local tray = pGui['HealthGUI']['tray'] + tray.Visible = visible +end + + +--- Begin Locals +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +if not useCoreHealthBar then + waitForChild(player, 'PlayerGui') + Spawn(function() + moveHealthBar(player.PlayerGui) + end) +end + +while player.Character == nil do wait(0.03) end +local humanoid = waitForChild(player.Character, 'Humanoid') +humanoid.Died:connect(function() + backpackButton.Visible = false +end) + +waitForChild(game, "LocalBackpack") +game.LocalBackpack:SetOldSchoolBackpack(false) + +waitForChild(currentLoadout.Parent,"Backpack") +local guiBackpack = currentLoadout.Parent.Backpack + +local backpackManager = waitForChild(guiBackpack,"CoreScripts/BackpackScripts/BackpackManager") +local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") +local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") +local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") +local resizeEvent = waitForChild(backpackManager,"ResizeEvent") + +local inGearTab = true + +local maxNumLoadoutItems = 10 +if IsSmallScreen() then + maxNumLoadoutItems = 4 +end + + +local characterChildAddedCon = nil +local backpackChildCon = nil + +local debounce = false + +local enlargeFactor = 1.18 +local buttonSizeEnlarge = UDim2.new(1 * enlargeFactor,0,1 * enlargeFactor,0) +local buttonSizeNormal = UDim2.new(1,0,1,0) +local enlargeOverride = true +local guiTweenSpeed = 0.5 + +local firstInstanceOfLoadout = false + +local inventory = {} + +local gearSlots = {} +for i = 1, maxNumLoadoutItems do + gearSlots[i] = "empty" +end + +local backpackWasOpened = false +--- End Locals + + + + + + +-- Begin Functions +local function backpackIsOpen() + if guiBackpack then + return guiBackpack.Visible + end + return false +end + + +local function kill(prop,con,gear) + if con then con:disconnect() end + if prop == true and gear then + reorganizeLoadout(gear,false) + end +end + +function registerNumberKeys() + for i = 0, 9 do + game:GetService("GuiService"):AddKey(tostring(i)) + end +end + +function unregisterNumberKeys() + for i = 0, 9 do + game:GetService("GuiService"):RemoveKey(tostring(i)) + end +end + +function characterInWorkspace() + if game.Players["LocalPlayer"] then + if game.Players.LocalPlayer["Character"] then + if game.Players.LocalPlayer.Character ~= nil then + if game.Players.LocalPlayer.Character.Parent ~= nil then + return true + end + end + end + end + + return false +end + +function removeGear(gear) + local emptySlot = nil + for i = 1, #gearSlots do + if gearSlots[i] == gear and gear.Parent ~= nil then + emptySlot = i + break + end + end + if emptySlot then + if gearSlots[emptySlot].GearReference.Value then + if gearSlots[emptySlot].GearReference.Value.Parent == game.Players.LocalPlayer.Character then -- if we currently have this equipped, unequip it + gearSlots[emptySlot].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack + end + + if gearSlots[emptySlot].GearReference.Value:IsA("HopperBin") and gearSlots[emptySlot].GearReference.Value.Active then -- this is an active hopperbin + gearSlots[emptySlot].GearReference.Value:Disable() + gearSlots[emptySlot].GearReference.Value.Active = false + end + end + + gearSlots[emptySlot] = "empty" + + local centerizeX = gear.Size.X.Scale/2 + local centerizeY = gear.Size.Y.Scale/2 + --[[gear:TweenSizeAndPosition(UDim2.new(0,0,0,0), + UDim2.new(gear.Position.X.Scale + centerizeX,gear.Position.X.Offset,gear.Position.Y.Scale + centerizeY,gear.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/4,true)]] + delay(0, + function() + gear:remove() + end) + + Spawn(function() + while backpackIsOpen() do wait(0.03) end + waitForChild(player, 'Backpack') + local allEmpty = true + for i = 1, #gearSlots do + if gearSlots[i] ~= 'empty' then + allEmpty = false + end + end + + if allEmpty then + if #player.Backpack:GetChildren() < 1 then + backpackButton.Visible = false + else + backpackButton.Position = UDim2.new(0.5, -60, 1, -44) + end + clBackground.Visible = false + end + end) + end +end + +function insertGear(gear, addToSlot) + local pos = nil + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + pos = i + break + end + end + + if pos == 1 and gearSlots[1] ~= "empty" then gear:remove() return end -- we are currently full, can't add in + else + pos = addToSlot + -- push all gear down one slot + local start = 1 + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + start = i + break + end + end + for i = start, pos + 1, -1 do + gearSlots[i] = gearSlots[i - 1] + if i == 10 then + gearSlots[i].SlotNumber.Text = "0" + gearSlots[i].SlotNumberDownShadow.Text = "0" + gearSlots[i].SlotNumberUpShadow.Text = "0" + else + gearSlots[i].SlotNumber.Text = i + gearSlots[i].SlotNumberDownShadow.Text = i + gearSlots[i].SlotNumberUpShadow.Text = i + end + end + end + + gearSlots[pos] = gear + if pos ~= maxNumLoadoutItems then + if(type(tostring(pos)) == "string") then + local posString = tostring(pos) + gear.SlotNumber.Text = posString + gear.SlotNumberDownShadow.Text = posString + gear.SlotNumberUpShadow.Text = posString + end + else -- tenth gear doesn't follow mathematical pattern :( + gear.SlotNumber.Text = "0" + gear.SlotNumberDownShadow.Text = "0" + gear.SlotNumberUpShadow.Text = "0" + end + gear.Visible = true + + local con = nil + con = gear.Kill.Changed:connect(function(prop) kill(prop,con,gear) end) +end + + +function reorganizeLoadout(gear, inserting, equipped, addToSlot) + if inserting then -- add in gear + insertGear(gear, addToSlot) + else + removeGear(gear) + end + if gear ~= "empty" then gear.ZIndex = 1 end +end + +function checkToolAncestry(child,parent) + if child:FindFirstChild("RobloxBuildTool") then return end -- don't show roblox build tools + if child:IsA("Tool") or child:IsA("HopperBin") then + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then + if parent == nil then + gearSlots[i].Kill.Value = true + return false + elseif child.Parent == player.Character then + gearSlots[i].Selected = true + return true + elseif child.Parent == player.Backpack then + if child:IsA("Tool") or child:IsA("HopperBin") then gearSlots[i].Selected = false end + return true + else + gearSlots[i].Kill.Value = true + return false + end + return true + end + end + end +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + if stuff[i]:IsA("Tool") then stuff[i].Parent = player.Backpack end + if stuff[i]:IsA("HopperBin") then + stuff[i]:Disable() + end + end + end +end + +function hopperBinSwitcher(numKey, physGear) + if not physGear then return end + + physGear:ToggleSelect() + + if gearSlots[numKey] == "empty" then return end + + if not physGear.Active then + gearSlots[numKey].Selected = false + normalizeButton(gearSlots[numKey]) + else + gearSlots[numKey].Selected = true + enlargeButton(gearSlots[numKey]) + end +end + +function toolSwitcher(numKey) + + if not gearSlots[numKey] then return end + local physGear = gearSlots[numKey].GearReference.Value + if physGear == nil then return end + + removeAllEquippedGear(physGear) -- we don't remove this gear, as then we get a double switcheroo + + local key = numKey + if numKey == 0 then key = 10 end + + for i = 1, #gearSlots do + if gearSlots[i] and gearSlots[i] ~= "empty" and i ~= key then + normalizeButton(gearSlots[i]) + gearSlots[i].Selected = false + if gearSlots[i].GearReference and gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value:IsA("HopperBin") and gearSlots[i].GearReference.Value.Active then + gearSlots[i].GearReference.Value:ToggleSelect() + end + end + end + + if physGear:IsA("HopperBin") then + hopperBinSwitcher(numKey,physGear) + else + if physGear.Parent == player.Character then + physGear.Parent = player.Backpack + + if gearSlots[numKey] ~= "empty" then + gearSlots[numKey].Selected = false + normalizeButton(gearSlots[numKey]) + end + else + --player.Character.Humanoid:EquipTool(physGear) + + physGear.Parent = player.Character + gearSlots[numKey].Selected = true + + enlargeButton(gearSlots[numKey]) + end + end +end + + +function activateGear(num) + local numKey = nil + if num == "0" then + numKey = 10 -- why do lua indexes have to start at 1? :( + else + numKey = tonumber(num) + end + + if(numKey == nil) then return end + + if gearSlots[numKey] ~= "empty" then + toolSwitcher(numKey) + end +end + + +enlargeButton = function(button) + if button.Size.Y.Scale > 1 then return end + if not button.Parent then return end + if not button.Selected then return end + + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i] ~= button then + normalizeButton(gearSlots[i]) + end + end + + if not enlargeOverride then + return + end + + if button:FindFirstChild('Highlight') then + button.Highlight.Visible = true + end + + if button:IsA("ImageButton") or button:IsA("TextButton") then + button.ZIndex = 5 + local centerizeX = -(buttonSizeEnlarge.X.Scale - button.Size.X.Scale)/2 + local centerizeY = -(buttonSizeEnlarge.Y.Scale - button.Size.Y.Scale)/2 + button:TweenSizeAndPosition(buttonSizeEnlarge, + UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/5,enlargeOverride) + end +end + +normalizeAllButtons = function() + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i] ~= button then + normalizeButton(gearSlots[i],0.1) + end + end +end + + +normalizeButton = function(button, speed) + if not button then return end + if button.Size.Y.Scale <= 1 then return end + if button.Selected then return end + if not button.Parent then return end + + local moveSpeed = speed + if moveSpeed == nil or type(moveSpeed) ~= "number" then moveSpeed = guiTweenSpeed/5 end + + if button:FindFirstChild('Highlight') then + button.Highlight.Visible = false + end + + if button:IsA("ImageButton") or button:IsA("TextButton") then + button.ZIndex = 1 + local inverseEnlarge = 1/enlargeFactor + local centerizeX = -(buttonSizeNormal.X.Scale - button.Size.X.Scale)/2 + local centerizeY = -(buttonSizeNormal.Y.Scale - button.Size.Y.Scale)/2 + button:TweenSizeAndPosition(buttonSizeNormal, + UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,moveSpeed,enlargeOverride) + end +end + +local waitForDebounce = function() + while debounce do + wait() + end +end + +function pointInRectangle(point,rectTopLeft,rectSize) + if point.x > rectTopLeft.x and point.x < (rectTopLeft.x + rectSize.x) then + if point.y > rectTopLeft.y and point.y < (rectTopLeft.y + rectSize.y) then + return true + end + end + return false +end + +function swapGear(gearClone,toFrame) + local toFrameChildren = toFrame:GetChildren() + if #toFrameChildren == 1 then + if toFrameChildren[1]:FindFirstChild("SlotNumber") then + + local toSlot = tonumber(toFrameChildren[1].SlotNumber.Text) + local gearCloneSlot = tonumber(gearClone.SlotNumber.Text) + if toSlot == 0 then toSlot = 10 end + if gearCloneSlot == 0 then gearCloneSlot = 10 end + + gearSlots[toSlot] = gearClone + gearSlots[gearCloneSlot] = toFrameChildren[1] + + toFrameChildren[1].SlotNumber.Text = gearClone.SlotNumber.Text + toFrameChildren[1].SlotNumberDownShadow.Text = gearClone.SlotNumber.Text + toFrameChildren[1].SlotNumberUpShadow.Text = gearClone.SlotNumber.Text + + local subString = string.sub(toFrame.Name,5) + gearClone.SlotNumber.Text = subString + gearClone.SlotNumberDownShadow.Text = subString + gearClone.SlotNumberUpShadow.Text = subString + + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) + toFrameChildren[1].Position = UDim2.new(toFrameChildren[1].Position.X.Scale,0,toFrameChildren[1].Position.Y.Scale,0) + + toFrameChildren[1].Parent = gearClone.Parent + gearClone.Parent = toFrame + end + else + local slotNum = tonumber(gearClone.SlotNumber.Text) + if slotNum == 0 then slotNum = 10 end + gearSlots[slotNum] = "empty" -- reset this gear slot + + local subString = string.sub(toFrame.Name,5) + gearClone.SlotNumber.Text = subString + gearClone.SlotNumberDownShadow.Text = subString + gearClone.SlotNumberUpShadow.Text = subString + + local toSlotNum = tonumber(gearClone.SlotNumber.Text) + if toSlotNum == 0 then toSlotNum = 10 end + gearSlots[toSlotNum] = gearClone + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) + gearClone.Parent = toFrame + end +end + +function resolveDrag(gearClone,x,y) + local mousePoint = Vector2.new(x,y) + + local frame = gearClone.Parent + local frames = frame.Parent:GetChildren() + + for i = 1, #frames do + if frames[i]:IsA("Frame") then + if pointInRectangle(mousePoint, frames[i].AbsolutePosition,frames[i].AbsoluteSize) then + swapGear(gearClone,frames[i]) + return true + end + end + end + + if x < frame.AbsolutePosition.x or x > ( frame.AbsolutePosition.x + frame.AbsoluteSize.x ) then + reorganizeLoadout(gearClone,false) + return false + elseif y < frame.AbsolutePosition.y or y > ( frame.AbsolutePosition.y + frame.AbsoluteSize.y ) then + reorganizeLoadout(gearClone,false) + return false + else + if dragBeginPos then gearClone.Position = dragBeginPos end + return -1 + end +end + +function unequipAllItems(dontEquipThis) + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value ~= dontEquipThis then + if gearSlots[i].GearReference.Value:IsA("HopperBin") then + gearSlots[i].GearReference.Value:Disable() + elseif gearSlots[i].GearReference.Value:IsA("Tool") then + gearSlots[i].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack + end + gearSlots[i].Selected = false + end + end +end + +function showToolTip(button, tip) + if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") and not IsTouchDevice() then + button.ToolTipLabel.Text = tostring(tip) + local xSize = button.ToolTipLabel.TextBounds.X + 6 + button.ToolTipLabel.Size = UDim2.new(0,xSize,0,20) + button.ToolTipLabel.Position = UDim2.new(0.5,-xSize/2,0,-30) + button.ToolTipLabel.Visible = true + end +end + +function hideToolTip(button, tip) + if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") then + button.ToolTipLabel.Visible = false + end +end + +local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButton) + waitForDebounce() + debounce = true + + if child:FindFirstChild("RobloxBuildTool") then debounce = false return end -- don't show roblox build tools + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + debounce = false + return -- we don't care about anything besides tools (sigh...) + end + end + + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then -- we already have gear, do nothing + debounce = false + return + end + end + end + + local gearClone = currentLoadout.TempSlot:clone() + gearClone.Name = child.Name + gearClone.GearImage.Image = child.TextureId + if gearClone.GearImage.Image == "" then + gearClone.GearText.Text = child.Name + end + gearClone.GearReference.Value = child + + gearClone.MouseEnter:connect(function() + local gear = gearClone.GearReference and gearClone.GearReference.Value + if gear:IsA("Tool") and gear.ToolTip ~= "" then + showToolTip(gearClone, gear.ToolTip) + end + end) + + gearClone.MouseLeave:connect(function() + local gear = gearClone.GearReference and gearClone.GearReference.Value + if gear:IsA("Tool") and gear.ToolTip ~= "" then + hideToolTip(gearClone, gear.ToolTip) + end + end) + + gearClone.RobloxLocked = true + + local slotToMod = -1 + + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + slotToMod = i + break + end + end + else + slotToMod = addToSlot + end + + if slotToMod == - 1 then -- No available slot to add in! + debounce = false + return + end + + local slotNum = slotToMod % 10 + local parent = currentLoadout:FindFirstChild("Slot"..tostring(slotNum)) + gearClone.Parent = parent + + if inventoryGearButton then + local absolutePositionFinal = inventoryGearButton.AbsolutePosition + local currentAbsolutePosition = gearClone.AbsolutePosition + local diff = absolutePositionFinal - currentAbsolutePosition + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,diff.x,gearClone.Position.Y.Scale,diff.y) + gearClone.ZIndex = 4 + end + + if addToSlot then + reorganizeLoadout(gearClone, true, equipped, addToSlot) + else + reorganizeLoadout(gearClone, true) + end + + if gearClone.Parent == nil then debounce = false return end -- couldn't fit in (hopper is full!) + + if equipped then + gearClone.Selected = true + unequipAllItems(child) + delay(guiTweenSpeed + 0.01,function() -- if our gear is equipped, we will want to enlarge it when done moving + if gearClone:FindFirstChild("GearReference") and ( (gearClone.GearReference.Value:IsA("Tool") and gearClone.GearReference.Value.Parent == player.Character) or + (gearClone.GearReference.Value:IsA("HopperBin") and gearClone.GearReference.Value.Active == true) ) then + enlargeButton(gearClone) + end + end) + end + + local dragBeginPos = nil + local clickCon, buttonDeleteCon, mouseEnterCon, mouseLeaveCon, dragStop, dragBegin = nil + clickCon = gearClone.MouseButton1Click:connect(function() + if characterInWorkspace() then + if not gearClone.Draggable then + activateGear(gearClone.SlotNumber.Text) + end + end + end) + mouseEnterCon = gearClone.MouseEnter:connect(function() + if guiBackpack.Visible then + gearClone.Draggable = true + end + end) + dragBegin = gearClone.DragBegin:connect(function(pos) + dragBeginPos = pos + gearClone.ZIndex = 7 + local children = gearClone:GetChildren() + for i = 1, #children do + if children[i]:IsA("TextLabel") then + if string.find(children[i].Name,"Shadow") then + children[i].ZIndex = 8 + else + children[i].ZIndex = 9 + end + elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then + children[i].ZIndex = 7 + end + end + end) + dragStop = gearClone.DragStopped:connect(function(x,y) + if gearClone.Selected then + gearClone.ZIndex = 4 + else + gearClone.ZIndex = 3 + end + local children = gearClone:GetChildren() + for i = 1, #children do + if children[i]:IsA("TextLabel") then + if string.find(children[i].Name,"Shadow") then + children[i].ZIndex = 3 + else + children[i].ZIndex = 4 + end + elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then + children[i].ZIndex = 2 + end + end + resolveDrag(gearClone,x,y) + end) + mouseLeaveCon = gearClone.MouseLeave:connect(function() + gearClone.Draggable = false + end) + buttonDeleteCon = gearClone.AncestryChanged:connect(function() + if gearClone.Parent and gearClone.Parent.Parent == currentLoadout then return end + if clickCon then clickCon:disconnect() end + if buttonDeleteCon then buttonDeleteCon:disconnect() end + if mouseEnterCon then mouseEnterCon:disconnect() end + if mouseLeaveCon then mouseLeaveCon:disconnect() end + if dragStop then dragStop:disconnect() end + if dragBegin then dragBegin:disconnect() end + end) -- this probably isn't necessary since objects are being deleted (probably), but this might still leak just in case + + local childCon = nil + local childChangeCon = nil + childCon = child.AncestryChanged:connect(function(newChild,parent) + if not checkToolAncestry(newChild,parent) then + if childCon then childCon:disconnect() end + if childChangeCon then childChangeCon:disconnect() end + removeFromInventory(child) + elseif parent == game.Players.LocalPlayer.Backpack then + normalizeButton(gearClone) + end + end) + + childChangeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if gearClone and gearClone.GearImage.Image == "" then + gearClone.GearText.Text = child.Name + end + elseif prop == "Active" then + if child and child:IsA("HopperBin") then + if not child.Active then + gearClone.Selected = false + normalizeButton(gearClone) + end + end + elseif prop == "TextureId" then + gearClone.GearImage.Image = child.TextureId + end + end) + + debounce = false + + Spawn(function() + while backpackIsOpen() do wait(0.03) end + for i = 1, #gearSlots do + if gearSlots[i] ~= 'empty' then + backpackButton.Position = UDim2.new(0.5, -60, 1, -108) + if backpackEnabled then + backpackButton.Visible = true + clBackground.Visible = true + end + end + end + end) +end + +function addToInventory(child) + if not child:IsA("Tool") or not child:IsA("HopperBin") then return end + + local slot = nil + for i = 1, #inventory do + if inventory[i] and inventory[i] == child then return end + if not inventory[i] then slot = i end + end + if slot then + inventory[slot] = child + elseif #inventory < 1 then + inventory[1] = child + else + inventory[#inventory + 1] = child + end +end + +function removeFromInventory(child) + for i = 1, #inventory do + if inventory[i] == child then + table.remove(inventory,i) + inventory[i] = nil + end + end +end + +local spreadOutGear = function() + loadoutChildren = currentLoadout:GetChildren() + + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 0.5 + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + if slot == 0 then slot = 10 end + if IsSmallScreen() then + loadoutChildren[i]:TweenPosition(UDim2.new(0,(slot-1) * 60,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + else + loadoutChildren[i]:TweenPosition(UDim2.new((slot - 1)/10,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end + end + end +end + +local centerGear = function() + loadoutChildren = currentLoadout:GetChildren() + local gearButtons = {} + local lastSlotAdd = nil + + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + if #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + loadoutChildren[i].BackgroundTransparency = 1 + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + if IsSmallScreen() then + startPos = ( 0.5 - (#gearButtons * 0.333)/2 ) + gearButtons[i]:TweenPosition(UDim2.new(startPos + (i-1) * 0.33, 0, 0, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + else + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end + end +end + +function editLoadout() + backpackWasOpened = true + if inGearTab then + spreadOutGear() + end +end + +function readonlyLoadout() + if not inGearTab then + centerGear() + end +end + +function setupBackpackListener() + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + backpackChildCon = player.Backpack.ChildAdded:connect(function(child) + if not firstInstanceOfLoadout then + firstInstanceOfLoadout = true + if backpackEnabled then + backpackButton.Visible = true + clBackground.Visible = true + end + end + addingPlayerChild(child) + addToInventory(child) + end) +end + +function playerCharacterChildAdded(child) + addingPlayerChild(child,true) + addToInventory(child) +end + +function activateLoadout() + currentLoadout.Visible = true +end + +function deactivateLoadout() + currentLoadout.Visible = false +end + +function tabHandler(inFocus) + inGearTab = inFocus + if inFocus then + editLoadout() + else + readonlyLoadout() + end +end + +function coreGuiChanged(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then + backpackButton.Visible = enabled + clBackground.Visible = enabled + backpackEnabled = enabled + + if enabled then + registerNumberKeys() + else + unregisterNumberKeys() + end + end + + if not useCoreHealthBar and coreGuiType == Enum.CoreGuiType.Health or coreGuiType == Enum.CoreGuiType.All then + setHealthBarVisible(game.Players.LocalPlayer.PlayerGui, enabled) + end +end +-- End Functions + + + + + + +-- Begin Script +registerNumberKeys() + +coreGuiChanged(Enum.CoreGuiType.Backpack, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Backpack)) +if not useCoreHealthBar then + coreGuiChanged(Enum.CoreGuiType.Health, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Health)) +end +Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) + +wait() -- let stuff initialize incase this is first heartbeat... + +waitForChild(player,"Backpack") +waitForProperty(player,"Character") + +-- not sure why this had no delay but the player.CharacterAdded one had one... this type of error would be easier to avoid with function reusage +delay(1,function() + local backpackChildren = player.Backpack:GetChildren() + local size = math.min(10,#backpackChildren) + for i = 1, size do + if backpackEnabled then + backpackButton.Visible = true + clBackground.Visible = true + end + addingPlayerChild(backpackChildren[i],false) + end + setupBackpackListener() +end) + +delay(2, function() + --while true do + if not backpackWasOpened then + if IsSmallScreen() then + local cChildren = currentLoadout:GetChildren() + for i = 1, #cChildren do + local slotNum = tonumber(string.sub(cChildren[i].Name, 5, string.len(cChildren[i].Name))) + if type(slotNum) == 'number' then + cChildren[i].Position = UDim2.new(0, (slotNum-1) * 60, 0, 0) + end + end + end + end + wait(0.25) + --end +end) + +if not useCoreHealthBar then + player.ChildAdded:connect(function(child) + if child:IsA('PlayerGui') then + moveHealthBar(child) + end + end) +end + +waitForProperty(player,"Character") +for i,v in ipairs(player.Character:GetChildren()) do + playerCharacterChildAdded(v) +end +characterChildAddedCon = player.Character.ChildAdded:connect(function(child) playerCharacterChildAdded(child) end) + +waitForChild(player.Character,"Humanoid") +humanoidDiedCon = player.Character.Humanoid.Died:connect(function() + if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end + deactivateLoadout() + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + backpackWasOpened = false +end) + +player.CharacterRemoving:connect(function() + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" then + gearSlots[i].Parent = nil + gearSlots[i] = "empty" + end + end +end) + +player.CharacterAdded:connect(function() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer -- make sure we are still looking at the correct character + waitForChild(player,"Backpack") + + + delay(1,function() + local backpackChildren = player.Backpack:GetChildren() + local size = math.min(10,#backpackChildren) + for i = 1, size do + if backpackEnabled then + backpackButton.Visible = true + clBackground.Visible = true + end + addingPlayerChild(backpackChildren[i],false) + end + setupBackpackListener() + end) + + activateLoadout() + + if characterChildAddedCon then + characterChildAddedCon:disconnect() + characterChildAddedCon = nil + end + + characterChildAddedCon = + player.Character.ChildAdded:connect(function(child) + addingPlayerChild(child,true) + end) + + waitForChild(player.Character,"Humanoid") + if backpack.Visible then + backpackOpenEvent:Fire() + end + humanoidDiedCon = + player.Character.Humanoid.Died:connect(function() + if backpackEnabled then + backpackButton.Visible = false + clBackground.Visible = false + end + firstInstanceOfLoadout = false + deactivateLoadout() + + if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + end) + if not useCoreHealthBar then + waitForChild(player, 'PlayerGui') + moveHealthBar(player.PlayerGui) + end + delay(2, function() + --while true do + if not backpackWasOpened then + if IsSmallScreen() then + local cChildren = currentLoadout:GetChildren() + for i = 1, #cChildren do + local slotNum = tonumber(string.sub(cChildren[i].Name, 5, string.len(cChildren[i].Name))) + if type(slotNum) == 'number' then + cChildren[i].Position = UDim2.new(0, (slotNum-1) * 60, 0, 0) + end + end + end + end + wait(0.25) + --end + end) +end) + +waitForChild(guiBackpack,"SwapSlot") +guiBackpack.SwapSlot.Changed:connect(function() + if guiBackpack.SwapSlot.Value then + local swapSlot = guiBackpack.SwapSlot + local pos = swapSlot.Slot.Value + if pos == 0 then pos = 10 end + if gearSlots[pos] then + reorganizeLoadout(gearSlots[pos],false) + end + if swapSlot.GearButton.Value then + addingPlayerChild(swapSlot.GearButton.Value.GearReference.Value,false,pos) + end + guiBackpack.SwapSlot.Value = false + end +end) + +game:GetService("GuiService").KeyPressed:connect(function(key) + if characterInWorkspace() then + activateGear(key) + end +end) + +backpackOpenEvent.Event:connect(editLoadout) +backpackCloseEvent.Event:connect(centerGear) +tabClickedEvent.Event:connect(function ( tabName ) + tabHandler(tabName == StaticTabName) +end) diff --git a/app/files/CoreGui/53878058 b/app/files/CoreGui/53878058 new file mode 100644 index 0000000..a763e8c --- /dev/null +++ b/app/files/CoreGui/53878058 @@ -0,0 +1,883 @@ +if game.CoreGui.Version < 3 then return end -- peace out if we aren't using the right client + +-- A couple of necessary functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +local currentLoadout = script.Parent +local StaticTabName = "gear" + +local robloxGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") +assert(robloxGui) +waitForChild(robloxGui,"CurrentLoadout") +waitForChild(robloxGui.CurrentLoadout,"TempSlot") +waitForChild(robloxGui.CurrentLoadout.TempSlot,"SlotNumber") + + +--- Begin Locals +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +waitForChild(game, "LocalBackpack") +game.LocalBackpack:SetOldSchoolBackpack(false) + +waitForChild(currentLoadout.Parent,"Backpack") +local guiBackpack = currentLoadout.Parent.Backpack + +local backpackManager = waitForChild(guiBackpack,"CoreScripts/BackpackScripts/BackpackManager") +local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") +local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") +local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") +local resizeEvent = waitForChild(backpackManager,"ResizeEvent") + +local inGearTab = true + +local maxNumLoadoutItems = 10 + +local characterChildAddedCon = nil +local backpackChildCon = nil + +local debounce = false + +local enlargeFactor = 1.18 +local buttonSizeEnlarge = UDim2.new(1 * enlargeFactor,0,1 * enlargeFactor,0) +local buttonSizeNormal = UDim2.new(1,0,1,0) +local enlargeOverride = true +local guiTweenSpeed = 0.5 + +local inventory = {} + +for i = 0, 9 do + game:GetService("GuiService"):AddKey(tostring(i)) -- register our keys +end + +local gearSlots = {} +for i = 1, maxNumLoadoutItems do + gearSlots[i] = "empty" +end +--- End Locals + + + + + + +-- Begin Functions +local function kill(prop,con,gear) + if con then con:disconnect() end + if prop == true and gear then + reorganizeLoadout(gear,false) + end +end + +function characterInWorkspace() + if game.Players["LocalPlayer"] then + if game.Players.LocalPlayer["Character"] then + if game.Players.LocalPlayer.Character ~= nil then + if game.Players.LocalPlayer.Character.Parent ~= nil then + return true + end + end + end + end + + return false +end + +function removeGear(gear) + local emptySlot = nil + for i = 1, #gearSlots do + if gearSlots[i] == gear and gear.Parent ~= nil then + emptySlot = i + break + end + end + if emptySlot then + if gearSlots[emptySlot].GearReference.Value then + if gearSlots[emptySlot].GearReference.Value.Parent == game.Players.LocalPlayer.Character then -- if we currently have this equipped, unequip it + gearSlots[emptySlot].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack + end + + if gearSlots[emptySlot].GearReference.Value:IsA("HopperBin") and gearSlots[emptySlot].GearReference.Value.Active then -- this is an active hopperbin + gearSlots[emptySlot].GearReference.Value:Disable() + gearSlots[emptySlot].GearReference.Value.Active = false + end + end + + gearSlots[emptySlot] = "empty" + + local centerizeX = gear.Size.X.Scale/2 + local centerizeY = gear.Size.Y.Scale/2 + gear:TweenSizeAndPosition(UDim2.new(0,0,0,0), + UDim2.new(gear.Position.X.Scale + centerizeX,gear.Position.X.Offset,gear.Position.Y.Scale + centerizeY,gear.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/4,true) + delay(guiTweenSpeed/2, + function() + gear:remove() + end) + end +end + +function insertGear(gear, addToSlot) + local pos = nil + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + pos = i + break + end + end + + if pos == 1 and gearSlots[1] ~= "empty" then gear:remove() return end -- we are currently full, can't add in + else + pos = addToSlot + -- push all gear down one slot + local start = 1 + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + start = i + break + end + end + for i = start, pos + 1, -1 do + gearSlots[i] = gearSlots[i - 1] + if i == 10 then + gearSlots[i].SlotNumber.Text = "0" + gearSlots[i].SlotNumberDownShadow.Text = "0" + gearSlots[i].SlotNumberUpShadow.Text = "0" + else + gearSlots[i].SlotNumber.Text = i + gearSlots[i].SlotNumberDownShadow.Text = i + gearSlots[i].SlotNumberUpShadow.Text = i + end + end + end + + gearSlots[pos] = gear + if pos ~= maxNumLoadoutItems then + if(type(tostring(pos)) == "string") then + local posString = tostring(pos) + gear.SlotNumber.Text = posString + gear.SlotNumberDownShadow.Text = posString + gear.SlotNumberUpShadow.Text = posString + end + else -- tenth gear doesn't follow mathematical pattern :( + gear.SlotNumber.Text = "0" + gear.SlotNumberDownShadow.Text = "0" + gear.SlotNumberUpShadow.Text = "0" + end + gear.Visible = true + + local con = nil + con = gear.Kill.Changed:connect(function(prop) kill(prop,con,gear) end) +end + + +function reorganizeLoadout(gear, inserting, equipped, addToSlot) + if inserting then -- add in gear + insertGear(gear, addToSlot) + else + removeGear(gear) + end + if gear ~= "empty" then gear.ZIndex = 1 end +end + +function checkToolAncestry(child,parent) + if child:FindFirstChild("RobloxBuildTool") then return end -- don't show roblox build tools + if child:IsA("Tool") or child:IsA("HopperBin") then + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then + if parent == nil then + gearSlots[i].Kill.Value = true + return false + elseif child.Parent == player.Character then + gearSlots[i].Selected = true + return true + elseif child.Parent == player.Backpack then + if child:IsA("Tool") or child:IsA("HopperBin") then gearSlots[i].Selected = false end + return true + else + gearSlots[i].Kill.Value = true + return false + end + return true + end + end + end +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + if stuff[i]:IsA("Tool") then stuff[i].Parent = player.Backpack end + if stuff[i]:IsA("HopperBin") then + stuff[i]:Disable() + end + end + end +end + +function hopperBinSwitcher(numKey, physGear) + if not physGear then return end + + physGear:ToggleSelect() + + if gearSlots[numKey] == "empty" then return end + + if not physGear.Active then + gearSlots[numKey].Selected = false + normalizeButton(gearSlots[numKey]) + else + gearSlots[numKey].Selected = true + enlargeButton(gearSlots[numKey]) + end +end + +function toolSwitcher(numKey) + + if not gearSlots[numKey] then return end + local physGear = gearSlots[numKey].GearReference.Value + if physGear == nil then return end + + removeAllEquippedGear(physGear) -- we don't remove this gear, as then we get a double switcheroo + + local key = numKey + if numKey == 0 then key = 10 end + + for i = 1, #gearSlots do + if gearSlots[i] and gearSlots[i] ~= "empty" and i ~= key then + normalizeButton(gearSlots[i]) + gearSlots[i].Selected = false + if gearSlots[i].GearReference and gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value:IsA("HopperBin") and gearSlots[i].GearReference.Value.Active then + gearSlots[i].GearReference.Value:ToggleSelect() + end + end + end + + if physGear:IsA("HopperBin") then + hopperBinSwitcher(numKey,physGear) + else + if physGear.Parent == player.Character then + physGear.Parent = player.Backpack + + if gearSlots[numKey] ~= "empty" then + gearSlots[numKey].Selected = false + normalizeButton(gearSlots[numKey]) + end + else + --player.Character.Humanoid:EquipTool(physGear) + + physGear.Parent = player.Character + gearSlots[numKey].Selected = true + + enlargeButton(gearSlots[numKey]) + end + end +end + + +function activateGear(num) + local numKey = nil + if num == "0" then + numKey = 10 -- why do lua indexes have to start at 1? :( + else + numKey = tonumber(num) + end + + if(numKey == nil) then return end + + if gearSlots[numKey] ~= "empty" then + toolSwitcher(numKey) + end +end + + +enlargeButton = function(button) + if button.Size.Y.Scale > 1 then return end + if not button.Parent then return end + if not button.Selected then return end + + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i] ~= button then + normalizeButton(gearSlots[i]) + end + end + + if not enlargeOverride then + return + end + + if button:IsA("ImageButton") or button:IsA("TextButton") then + button.ZIndex = 2 + local centerizeX = -(buttonSizeEnlarge.X.Scale - button.Size.X.Scale)/2 + local centerizeY = -(buttonSizeEnlarge.Y.Scale - button.Size.Y.Scale)/2 + button:TweenSizeAndPosition(buttonSizeEnlarge, + UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,guiTweenSpeed/5,enlargeOverride) + end +end + +normalizeAllButtons = function() + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i] ~= button then + normalizeButton(gearSlots[i],0.1) + end + end +end + + +normalizeButton = function(button, speed) + if not button then return end + if button.Size.Y.Scale <= 1 then return end + if button.Selected then return end + if not button.Parent then return end + + local moveSpeed = speed + if moveSpeed == nil or type(moveSpeed) ~= "number" then moveSpeed = guiTweenSpeed/5 end + + if button:IsA("ImageButton") or button:IsA("TextButton") then + button.ZIndex = 1 + local inverseEnlarge = 1/enlargeFactor + local centerizeX = -(buttonSizeNormal.X.Scale - button.Size.X.Scale)/2 + local centerizeY = -(buttonSizeNormal.Y.Scale - button.Size.Y.Scale)/2 + button:TweenSizeAndPosition(buttonSizeNormal, + UDim2.new(button.Position.X.Scale + centerizeX,button.Position.X.Offset,button.Position.Y.Scale + centerizeY,button.Position.Y.Offset), + Enum.EasingDirection.Out, Enum.EasingStyle.Quad,moveSpeed,enlargeOverride) + end +end + +local waitForDebounce = function() + while debounce do + wait() + end +end + +function pointInRectangle(point,rectTopLeft,rectSize) + if point.x > rectTopLeft.x and point.x < (rectTopLeft.x + rectSize.x) then + if point.y > rectTopLeft.y and point.y < (rectTopLeft.y + rectSize.y) then + return true + end + end + return false +end + +function swapGear(gearClone,toFrame) + local toFrameChildren = toFrame:GetChildren() + if #toFrameChildren == 1 then + if toFrameChildren[1]:FindFirstChild("SlotNumber") then + + local toSlot = tonumber(toFrameChildren[1].SlotNumber.Text) + local gearCloneSlot = tonumber(gearClone.SlotNumber.Text) + if toSlot == 0 then toSlot = 10 end + if gearCloneSlot == 0 then gearCloneSlot = 10 end + + gearSlots[toSlot] = gearClone + gearSlots[gearCloneSlot] = toFrameChildren[1] + + toFrameChildren[1].SlotNumber.Text = gearClone.SlotNumber.Text + toFrameChildren[1].SlotNumberDownShadow.Text = gearClone.SlotNumber.Text + toFrameChildren[1].SlotNumberUpShadow.Text = gearClone.SlotNumber.Text + + local subString = string.sub(toFrame.Name,5) + gearClone.SlotNumber.Text = subString + gearClone.SlotNumberDownShadow.Text = subString + gearClone.SlotNumberUpShadow.Text = subString + + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) + toFrameChildren[1].Position = UDim2.new(toFrameChildren[1].Position.X.Scale,0,toFrameChildren[1].Position.Y.Scale,0) + + toFrameChildren[1].Parent = gearClone.Parent + gearClone.Parent = toFrame + end + else + local slotNum = tonumber(gearClone.SlotNumber.Text) + if slotNum == 0 then slotNum = 10 end + gearSlots[slotNum] = "empty" -- reset this gear slot + + local subString = string.sub(toFrame.Name,5) + gearClone.SlotNumber.Text = subString + gearClone.SlotNumberDownShadow.Text = subString + gearClone.SlotNumberUpShadow.Text = subString + + local toSlotNum = tonumber(gearClone.SlotNumber.Text) + if toSlotNum == 0 then toSlotNum = 10 end + gearSlots[toSlotNum] = gearClone + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,0,gearClone.Position.Y.Scale,0) + gearClone.Parent = toFrame + end +end + +function resolveDrag(gearClone,x,y) + local mousePoint = Vector2.new(x,y) + + local frame = gearClone.Parent + local frames = frame.Parent:GetChildren() + + for i = 1, #frames do + if frames[i]:IsA("Frame") then + if pointInRectangle(mousePoint, frames[i].AbsolutePosition,frames[i].AbsoluteSize) then + swapGear(gearClone,frames[i]) + return true + end + end + end + + if x < frame.AbsolutePosition.x or x > ( frame.AbsolutePosition.x + frame.AbsoluteSize.x ) then + reorganizeLoadout(gearClone,false) + return false + elseif y < frame.AbsolutePosition.y or y > ( frame.AbsolutePosition.y + frame.AbsoluteSize.y ) then + reorganizeLoadout(gearClone,false) + return false + else + if dragBeginPos then gearClone.Position = dragBeginPos end + return -1 + end +end + +function unequipAllItems(dontEquipThis) + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then break end + if gearSlots[i].GearReference.Value and gearSlots[i].GearReference.Value ~= dontEquipThis then + if gearSlots[i].GearReference.Value:IsA("HopperBin") then + gearSlots[i].GearReference.Value:Disable() + elseif gearSlots[i].GearReference.Value:IsA("Tool") then + gearSlots[i].GearReference.Value.Parent = game.Players.LocalPlayer.Backpack + end + gearSlots[i].Selected = false + end + end +end + +function showToolTip(button, tip) + if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") then + button.ToolTipLabel.Text = tostring(tip) + local xSize = button.ToolTipLabel.TextBounds.X + 6 + button.ToolTipLabel.Size = UDim2.new(0,xSize,0,20) + button.ToolTipLabel.Position = UDim2.new(0.5,-xSize/2,0,-30) + button.ToolTipLabel.Visible = true + end +end + +function hideToolTip(button, tip) + if button and button:FindFirstChild("ToolTipLabel") and button.ToolTipLabel:IsA("TextLabel") then + button.ToolTipLabel.Visible = false + end +end + +local addingPlayerChild = function(child, equipped, addToSlot, inventoryGearButton) + waitForDebounce() + debounce = true + + if child:FindFirstChild("RobloxBuildTool") then debounce = false return end -- don't show roblox build tools + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + debounce = false + return -- we don't care about anything besides tools (sigh...) + end + end + + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" and gearSlots[i].GearReference.Value == child then -- we already have gear, do nothing + debounce = false + return + end + end + end + + + local gearClone = currentLoadout.TempSlot:clone() + gearClone.Name = child.Name + gearClone.GearImage.Image = child.TextureId + if gearClone.GearImage.Image == "" then + gearClone.GearText.Text = child.Name + end + gearClone.GearReference.Value = child + + gearClone.MouseEnter:connect(function() + if gearClone.GearReference and gearClone.GearReference.Value["ToolTip"] and gearClone.GearReference.Value.ToolTip ~= "" then + showToolTip(gearClone, gearClone.GearReference.Value.ToolTip) + end + end) + + gearClone.MouseLeave:connect(function() + if gearClone.GearReference and gearClone.GearReference.Value["ToolTip"] and gearClone.GearReference.Value.ToolTip ~= "" then + hideToolTip(gearClone, gearClone.GearReference.Value.ToolTip) + end + end) + + gearClone.RobloxLocked = true + + local slotToMod = -1 + + if not addToSlot then + for i = 1, #gearSlots do + if gearSlots[i] == "empty" then + slotToMod = i + break + end + end + else + slotToMod = addToSlot + end + + if slotToMod == - 1 then -- No available slot to add in! + debounce = false + return + end + + local slotNum = slotToMod % 10 + local parent = currentLoadout:FindFirstChild("Slot"..tostring(slotNum)) + gearClone.Parent = parent + + if inventoryGearButton then + local absolutePositionFinal = inventoryGearButton.AbsolutePosition + local currentAbsolutePosition = gearClone.AbsolutePosition + local diff = absolutePositionFinal - currentAbsolutePosition + gearClone.Position = UDim2.new(gearClone.Position.X.Scale,diff.x,gearClone.Position.Y.Scale,diff.y) + gearClone.ZIndex = 4 + end + + if addToSlot then + reorganizeLoadout(gearClone, true, equipped, addToSlot) + else + reorganizeLoadout(gearClone, true) + end + + if gearClone.Parent == nil then debounce = false return end -- couldn't fit in (hopper is full!) + + if equipped then + gearClone.Selected = true + unequipAllItems(child) + delay(guiTweenSpeed + 0.01,function() -- if our gear is equipped, we will want to enlarge it when done moving + if gearClone:FindFirstChild("GearReference") and ( (gearClone.GearReference.Value:IsA("Tool") and gearClone.GearReference.Value.Parent == player.Character) or + (gearClone.GearReference.Value:IsA("HopperBin") and gearClone.GearReference.Value.Active == true) ) then + enlargeButton(gearClone) + end + end) + end + + local dragBeginPos = nil + local clickCon, buttonDeleteCon, mouseEnterCon, mouseLeaveCon, dragStop, dragBegin = nil + clickCon = gearClone.MouseButton1Click:connect(function() + if characterInWorkspace() then + if not gearClone.Draggable then + activateGear(gearClone.SlotNumber.Text) + end + end + end) + mouseEnterCon = gearClone.MouseEnter:connect(function() + if guiBackpack.Visible then + gearClone.Draggable = true + end + end) + dragBegin = gearClone.DragBegin:connect(function(pos) + dragBeginPos = pos + gearClone.ZIndex = 7 + local children = gearClone:GetChildren() + for i = 1, #children do + if children[i]:IsA("TextLabel") then + if string.find(children[i].Name,"Shadow") then + children[i].ZIndex = 8 + else + children[i].ZIndex = 9 + end + elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then + children[i].ZIndex = 7 + end + end + end) + dragStop = gearClone.DragStopped:connect(function(x,y) + if gearClone.Selected then + gearClone.ZIndex = 2 + else + gearClone.ZIndex = 1 + end + local children = gearClone:GetChildren() + for i = 1, #children do + if children[i]:IsA("TextLabel") then + if string.find(children[i].Name,"Shadow") then + children[i].ZIndex = 3 + else + children[i].ZIndex = 4 + end + elseif children[i]:IsA("Frame") or children[i]:IsA("ImageLabel") then + children[i].ZIndex = 2 + end + end + resolveDrag(gearClone,x,y) + end) + mouseLeaveCon = gearClone.MouseLeave:connect(function() + gearClone.Draggable = false + end) + buttonDeleteCon = gearClone.AncestryChanged:connect(function() + if gearClone.Parent and gearClone.Parent.Parent == currentLoadout then return end + if clickCon then clickCon:disconnect() end + if buttonDeleteCon then buttonDeleteCon:disconnect() end + if mouseEnterCon then mouseEnterCon:disconnect() end + if mouseLeaveCon then mouseLeaveCon:disconnect() end + if dragStop then dragStop:disconnect() end + if dragBegin then dragBegin:disconnect() end + end) -- this probably isn't necessary since objects are being deleted (probably), but this might still leak just in case + + local childCon = nil + local childChangeCon = nil + childCon = child.AncestryChanged:connect(function(newChild,parent) + if not checkToolAncestry(newChild,parent) then + if childCon then childCon:disconnect() end + if childChangeCon then childChangeCon:disconnect() end + removeFromInventory(child) + elseif parent == game.Players.LocalPlayer.Backpack then + normalizeButton(gearClone) + end + end) + + childChangeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if gearClone and gearClone.GearImage.Image == "" then + gearClone.GearText.Text = child.Name + end + elseif prop == "Active" then + if child and child:IsA("HopperBin") then + if not child.Active then + gearClone.Selected = false + normalizeButton(gearClone) + end + end + elseif prop == "TextureId" then + gearClone.GearImage.Image = child.TextureId + end + end) + + debounce = false + +end + +function addToInventory(child) + if not child:IsA("Tool") or not child:IsA("HopperBin") then return end + + local slot = nil + for i = 1, #inventory do + if inventory[i] and inventory[i] == child then return end + if not inventory[i] then slot = i end + end + if slot then + inventory[slot] = child + elseif #inventory < 1 then + inventory[1] = child + else + inventory[#inventory + 1] = child + end +end + +function removeFromInventory(child) + for i = 1, #inventory do + if inventory[i] == child then + table.remove(inventory,i) + inventory[i] = nil + end + end +end + +local spreadOutGear = function() + loadoutChildren = currentLoadout:GetChildren() + + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + loadoutChildren[i].BackgroundTransparency = 0.5 + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + if slot == 0 then slot = 10 end + loadoutChildren[i]:TweenPosition(UDim2.new((slot - 1)/10,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end + end +end + +local centerGear = function() + loadoutChildren = currentLoadout:GetChildren() + local gearButtons = {} + local lastSlotAdd = nlii + + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + if #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + loadoutChildren[i].BackgroundTransparency = 1 + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end +end + +function editLoadout() + if inGearTab then + spreadOutGear() + end +end + +function readonlyLoadout() + if not inGearTab then + centerGear() + end +end + +function setupBackpackListener() + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + backpackChildCon = player.Backpack.ChildAdded:connect(function(child) + addingPlayerChild(child) + addToInventory(child) + end) +end + +function playerCharacterChildAdded(child) + addingPlayerChild(child,true) + addToInventory(child) +end + +function activateLoadout() + currentLoadout.Visible = true +end + +function deactivateLoadout() + currentLoadout.Visible = false +end + +function tabHandler(inFocus) + inGearTab = inFocus + if inFocus then + editLoadout() + else + readonlyLoadout() + end +end +-- End Functions + + + + + + +-- Begin Script +wait() -- let stuff initialize incase this is first heartbeat... + +waitForChild(player,"Backpack") +waitForProperty(player,"Character") + +-- not sure why this had no delay but the player.CharacterAdded one had one... this type of error would be easier to avoid with function reusage +delay(1,function() + local backpackChildren = player.Backpack:GetChildren() + local size = math.min(10,#backpackChildren) + for i = 1, size do + addingPlayerChild(backpackChildren[i],false) + end + setupBackpackListener() +end) + +waitForProperty(player,"Character") +for i,v in ipairs(player.Character:GetChildren()) do + playerCharacterChildAdded(v) +end +characterChildAddedCon = player.Character.ChildAdded:connect(function(child) playerCharacterChildAdded(child) end) + +waitForChild(player.Character,"Humanoid") +humanoidDiedCon = player.Character.Humanoid.Died:connect(function() + if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end + deactivateLoadout() + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end +end) + +player.CharacterRemoving:connect(function() + for i = 1, #gearSlots do + if gearSlots[i] ~= "empty" then + gearSlots[i].Parent = nil + gearSlots[i] = "empty" + end + end +end) + +player.CharacterAdded:connect(function() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer -- make sure we are still looking at the correct character + waitForChild(player,"Backpack") + + + delay(1,function() + local backpackChildren = player.Backpack:GetChildren() + local size = math.min(10,#backpackChildren) + for i = 1, size do + addingPlayerChild(backpackChildren[i],false) + end + setupBackpackListener() + end) + + activateLoadout() + + if characterChildAddedCon then + characterChildAddedCon:disconnect() + characterChildAddedCon = nil + end + + characterChildAddedCon = + player.Character.ChildAdded:connect(function(child) + addingPlayerChild(child,true) + end) + + waitForChild(player.Character,"Humanoid") + humanoidDiedCon = + player.Character.Humanoid.Died:connect(function() + deactivateLoadout() + + if humanoidDiedCon then humanoidDiedCon:disconnect() humanoidDiedCon = nil end + if backpackChildCon then backpackChildCon:disconnect() backpackChildCon = nil end + end) + +end) + +waitForChild(guiBackpack,"SwapSlot") +guiBackpack.SwapSlot.Changed:connect(function() + if guiBackpack.SwapSlot.Value then + local swapSlot = guiBackpack.SwapSlot + local pos = swapSlot.Slot.Value + if pos == 0 then pos = 10 end + if gearSlots[pos] then + reorganizeLoadout(gearSlots[pos],false) + end + if swapSlot.GearButton.Value then + addingPlayerChild(swapSlot.GearButton.Value.GearReference.Value,false,pos) + end + guiBackpack.SwapSlot.Value = false + end +end) + +game:GetService("GuiService").KeyPressed:connect(function(key) + if characterInWorkspace() then + activateGear(key) + end +end) + +backpackOpenEvent.Event:connect(editLoadout) +backpackCloseEvent.Event:connect(centerGear) +tabClickedEvent.Event:connect(function ( tabName ) + tabHandler(tabName == StaticTabName) +end) \ No newline at end of file diff --git a/app/files/CoreGui/59002209 b/app/files/CoreGui/59002209 new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/app/files/CoreGui/59002209 @@ -0,0 +1 @@ + diff --git a/app/files/CoreGui/59431535 b/app/files/CoreGui/59431535 new file mode 100644 index 0000000..5e2f30a --- /dev/null +++ b/app/files/CoreGui/59431535 @@ -0,0 +1,204 @@ +-- This script is responsible for loading in all build tools for build mode + +-- Script Globals +local buildTools = {} +local currentTools = {} + +local DeleteToolID = 73089190 +local PartSelectionID = 73089166 +local CloneToolID = 73089204 +local RecentPartToolID = 73089229 +local RotateToolID = 73089214 +local ConfigToolID = 73089239 +local WiringToolID = 73089259 +local classicToolID = 58921588 + +local player = nil +local backpack = nil + +-- Basic Functions +local function waitForProperty(instance, name) + while not instance[name] do + instance.Changed:wait() + end +end + +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +waitForProperty(game.Players,"LocalPlayer") +waitForProperty(game.Players.LocalPlayer,"userId") + +-- we aren't in a true build mode session, don't give build tools and delete this script +if game.Players.LocalPlayer.userId < 1 then + script:Destroy() + return -- this is probably not necessesary, doing it just in case +end + +-- Functions +function getLatestPlayer() + waitForProperty(game.Players,"LocalPlayer") + player = game.Players.LocalPlayer + waitForChild(player,"Backpack") + backpack = player.Backpack +end + +function waitForCharacterLoad() + + local startTick = tick() + + local playerLoaded = false + + local success = pcall(function() playerLoaded = player.AppearanceDidLoad end) --TODO: remove pcall once this in client on prod + if not success then return false end + + while not playerLoaded do + player.Changed:wait() + playerLoaded = player.AppearanceDidLoad + end + + return true +end + +function showBuildToolsTutorial() + local tutorialKey = "BuildToolsTutorial" + if UserSettings().GameSettings:GetTutorialState(tutorialKey) == true then return end --already have shown tutorial + + local RbxGui = LoadLibrary("RbxGui") + + local frame, showTutorial, dismissTutorial, gotoPage = RbxGui.CreateTutorial("Build", tutorialKey, false) + local firstPage = RbxGui.CreateImageTutorialPage(" ", "http://www.syntax.eco/asset/?id=59162193", 359, 296, function() dismissTutorial() end, true) + + RbxGui.AddTutorialPage(frame, firstPage) + frame.Parent = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + + game:GetService("GuiService"):AddCenterDialog(frame, Enum.CenterDialogType.UnsolicitedDialog, + --showFunction + function() + frame.Visible = true + showTutorial() + end, + --hideFunction + function() + frame.Visible = false + end + ) + + wait(1) + showTutorial() +end + +function clearLoadout() + currentTools = {} + + local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() + for i = 1, #backpackChildren do + if backpackChildren[i]:IsA("Tool") or backpackChildren[i]:IsA("HopperBin") then + table.insert(currentTools,backpackChildren[i]) + end + end + + if game.Players.LocalPlayer["Character"] then + local characterChildren = game.Players.LocalPlayer.Character:GetChildren() + for i = 1, #characterChildren do + if characterChildren[i]:IsA("Tool") or characterChildren[i]:IsA("HopperBin") then + table.insert(currentTools,characterChildren[i]) + end + end + end + + for i = 1, #currentTools do + currentTools[i].Parent = nil + end +end + +function giveToolsBack() + for i = 1, #currentTools do + currentTools[i].Parent = game.Players.LocalPlayer.Backpack + end +end + +function backpackHasTool(tool) + local backpackChildren = backpack:GetChildren() + for i = 1, #backpackChildren do + if backpackChildren[i] == tool then + return true + end + end + return false +end + +function getToolAssetID(assetID) + local newTool = game:GetService("InsertService"):LoadAsset(assetID) + local toolChildren = newTool:GetChildren() + for i = 1, #toolChildren do + if toolChildren[i]:IsA("Tool") then + return toolChildren[i] + end + end + return nil +end + +-- remove legacy identifiers +-- todo: determine if we still need this +function removeBuildToolTag(tool) + if tool:FindFirstChild("RobloxBuildTool") then + tool.RobloxBuildTool:Destroy() + end +end + +function giveAssetId(assetID,toolName) + local theTool = getToolAssetID(assetID,toolName) + if theTool and not backpackHasTool(theTool) then + removeBuildToolTag(theTool) + theTool.Parent = backpack + table.insert(buildTools,theTool) + end +end + +function loadBuildTools() + giveAssetId(PartSelectionID) + giveAssetId(DeleteToolID) + giveAssetId(CloneToolID) + giveAssetId(RotateToolID) + giveAssetId(RecentPartToolID) + giveAssetId(WiringToolID) + giveAssetId(ConfigToolID) + + -- deprecated tools + giveAssetId(classicToolID) +end + +function givePlayerBuildTools() + getLatestPlayer() + + clearLoadout() + + loadBuildTools() + + giveToolsBack() +end + +function takePlayerBuildTools() + for k,v in ipairs(buildTools) do + v.Parent = nil + end + buildTools = {} +end + + +-- Script start +getLatestPlayer() +waitForCharacterLoad() +givePlayerBuildTools() + +-- If player dies, we make sure to give them build tools again +player.CharacterAdded:connect(function() + takePlayerBuildTools() + givePlayerBuildTools() +end) + +showBuildToolsTutorial() diff --git a/app/files/CoreGui/60595411 b/app/files/CoreGui/60595411 new file mode 100644 index 0000000..f8318ee --- /dev/null +++ b/app/files/CoreGui/60595411 @@ -0,0 +1,1115 @@ +local t = {} + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------JSON Functions Begin---------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ + + --JSON Encoder and Parser for Lua 5.1 + -- + --Copyright 2007 Shaun Brown (http://www.chipmunkav.com) + --All Rights Reserved. + + --Permission is hereby granted, free of charge, to any person + --obtaining a copy of this software to deal in the Software without + --restriction, including without limitation the rights to use, + --copy, modify, merge, publish, distribute, sublicense, and/or + --sell copies of the Software, and to permit persons to whom the + --Software is furnished to do so, subject to the following conditions: + + --The above copyright notice and this permission notice shall be + --included in all copies or substantial portions of the Software. + --If you find this software useful please give www.chipmunkav.com a mention. + + --THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + --EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + --OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + --IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + --ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + --CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + --CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +local string = string +local math = math +local table = table +local error = error +local tonumber = tonumber +local tostring = tostring +local type = type +local setmetatable = setmetatable +local pairs = pairs +local ipairs = ipairs +local assert = assert +local Chipmunk = Chipmunk + + +local StringBuilder = { + buffer = {} +} + +function StringBuilder:New() + local o = {} + setmetatable(o, self) + self.__index = self + o.buffer = {} + return o +end + +function StringBuilder:Append(s) + self.buffer[#self.buffer+1] = s +end + +function StringBuilder:ToString() + return table.concat(self.buffer) +end + +local JsonWriter = { + backslashes = { + ['\b'] = "\\b", + ['\t'] = "\\t", + ['\n'] = "\\n", + ['\f'] = "\\f", + ['\r'] = "\\r", + ['"'] = "\\\"", + ['\\'] = "\\\\", + ['/'] = "\\/" + } +} + +function JsonWriter:New() + local o = {} + o.writer = StringBuilder:New() + setmetatable(o, self) + self.__index = self + return o +end + +function JsonWriter:Append(s) + self.writer:Append(s) +end + +function JsonWriter:ToString() + return self.writer:ToString() +end + +function JsonWriter:Write(o) + local t = type(o) + if t == "nil" then + self:WriteNil() + elseif t == "boolean" then + self:WriteString(o) + elseif t == "number" then + self:WriteString(o) + elseif t == "string" then + self:ParseString(o) + elseif t == "table" then + self:WriteTable(o) + elseif t == "function" then + self:WriteFunction(o) + elseif t == "thread" then + self:WriteError(o) + elseif t == "userdata" then + self:WriteError(o) + end +end + +function JsonWriter:WriteNil() + self:Append("null") +end + +function JsonWriter:WriteString(o) + self:Append(tostring(o)) +end + +function JsonWriter:ParseString(s) + self:Append('"') + self:Append(string.gsub(s, "[%z%c\\\"/]", function(n) + local c = self.backslashes[n] + if c then return c end + return string.format("\\u%.4X", string.byte(n)) + end)) + self:Append('"') +end + +function JsonWriter:IsArray(t) + local count = 0 + local isindex = function(k) + if type(k) == "number" and k > 0 then + if math.floor(k) == k then + return true + end + end + return false + end + for k,v in pairs(t) do + if not isindex(k) then + return false, '{', '}' + else + count = math.max(count, k) + end + end + return true, '[', ']', count +end + +function JsonWriter:WriteTable(t) + local ba, st, et, n = self:IsArray(t) + self:Append(st) + if ba then + for i = 1, n do + self:Write(t[i]) + if i < n then + self:Append(',') + end + end + else + local first = true; + for k, v in pairs(t) do + if not first then + self:Append(',') + end + first = false; + self:ParseString(k) + self:Append(':') + self:Write(v) + end + end + self:Append(et) +end + +function JsonWriter:WriteError(o) + error(string.format( + "Encoding of %s unsupported", + tostring(o))) +end + +function JsonWriter:WriteFunction(o) + if o == Null then + self:WriteNil() + else + self:WriteError(o) + end +end + +local StringReader = { + s = "", + i = 0 +} + +function StringReader:New(s) + local o = {} + setmetatable(o, self) + self.__index = self + o.s = s or o.s + return o +end + +function StringReader:Peek() + local i = self.i + 1 + if i <= #self.s then + return string.sub(self.s, i, i) + end + return nil +end + +function StringReader:Next() + self.i = self.i+1 + if self.i <= #self.s then + return string.sub(self.s, self.i, self.i) + end + return nil +end + +function StringReader:All() + return self.s +end + +local JsonReader = { + escapes = { + ['t'] = '\t', + ['n'] = '\n', + ['f'] = '\f', + ['r'] = '\r', + ['b'] = '\b', + } +} + +function JsonReader:New(s) + local o = {} + o.reader = StringReader:New(s) + setmetatable(o, self) + self.__index = self + return o; +end + +function JsonReader:Read() + self:SkipWhiteSpace() + local peek = self:Peek() + if peek == nil then + error(string.format( + "Nil string: '%s'", + self:All())) + elseif peek == '{' then + return self:ReadObject() + elseif peek == '[' then + return self:ReadArray() + elseif peek == '"' then + return self:ReadString() + elseif string.find(peek, "[%+%-%d]") then + return self:ReadNumber() + elseif peek == 't' then + return self:ReadTrue() + elseif peek == 'f' then + return self:ReadFalse() + elseif peek == 'n' then + return self:ReadNull() + elseif peek == '/' then + self:ReadComment() + return self:Read() + else + return nil + end +end + +function JsonReader:ReadTrue() + self:TestReservedWord{'t','r','u','e'} + return true +end + +function JsonReader:ReadFalse() + self:TestReservedWord{'f','a','l','s','e'} + return false +end + +function JsonReader:ReadNull() + self:TestReservedWord{'n','u','l','l'} + return nil +end + +function JsonReader:TestReservedWord(t) + for i, v in ipairs(t) do + if self:Next() ~= v then + error(string.format( + "Error reading '%s': %s", + table.concat(t), + self:All())) + end + end +end + +function JsonReader:ReadNumber() + local result = self:Next() + local peek = self:Peek() + while peek ~= nil and string.find( + peek, + "[%+%-%d%.eE]") do + result = result .. self:Next() + peek = self:Peek() + end + result = tonumber(result) + if result == nil then + error(string.format( + "Invalid number: '%s'", + result)) + else + return result + end +end + +function JsonReader:ReadString() + local result = "" + assert(self:Next() == '"') + while self:Peek() ~= '"' do + local ch = self:Next() + if ch == '\\' then + ch = self:Next() + if self.escapes[ch] then + ch = self.escapes[ch] + end + end + result = result .. ch + end + assert(self:Next() == '"') + local fromunicode = function(m) + return string.char(tonumber(m, 16)) + end + return string.gsub( + result, + "u%x%x(%x%x)", + fromunicode) +end + +function JsonReader:ReadComment() + assert(self:Next() == '/') + local second = self:Next() + if second == '/' then + self:ReadSingleLineComment() + elseif second == '*' then + self:ReadBlockComment() + else + error(string.format( + "Invalid comment: %s", + self:All())) + end +end + +function JsonReader:ReadBlockComment() + local done = false + while not done do + local ch = self:Next() + if ch == '*' and self:Peek() == '/' then + done = true + end + if not done and + ch == '/' and + self:Peek() == "*" then + error(string.format( + "Invalid comment: %s, '/*' illegal.", + self:All())) + end + end + self:Next() +end + +function JsonReader:ReadSingleLineComment() + local ch = self:Next() + while ch ~= '\r' and ch ~= '\n' do + ch = self:Next() + end +end + +function JsonReader:ReadArray() + local result = {} + assert(self:Next() == '[') + local done = false + if self:Peek() == ']' then + done = true; + end + while not done do + local item = self:Read() + result[#result+1] = item + self:SkipWhiteSpace() + if self:Peek() == ']' then + done = true + end + if not done then + local ch = self:Next() + if ch ~= ',' then + error(string.format( + "Invalid array: '%s' due to: '%s'", + self:All(), ch)) + end + end + end + assert(']' == self:Next()) + return result +end + +function JsonReader:ReadObject() + local result = {} + assert(self:Next() == '{') + local done = false + if self:Peek() == '}' then + done = true + end + while not done do + local key = self:Read() + if type(key) ~= "string" then + error(string.format( + "Invalid non-string object key: %s", + key)) + end + self:SkipWhiteSpace() + local ch = self:Next() + if ch ~= ':' then + error(string.format( + "Invalid object: '%s' due to: '%s'", + self:All(), + ch)) + end + self:SkipWhiteSpace() + local val = self:Read() + result[key] = val + self:SkipWhiteSpace() + if self:Peek() == '}' then + done = true + end + if not done then + ch = self:Next() + if ch ~= ',' then + error(string.format( + "Invalid array: '%s' near: '%s'", + self:All(), + ch)) + end + end + end + assert(self:Next() == "}") + return result +end + +function JsonReader:SkipWhiteSpace() + local p = self:Peek() + while p ~= nil and string.find(p, "[%s/]") do + if p == '/' then + self:ReadComment() + else + self:Next() + end + p = self:Peek() + end +end + +function JsonReader:Peek() + return self.reader:Peek() +end + +function JsonReader:Next() + return self.reader:Next() +end + +function JsonReader:All() + return self.reader:All() +end + +function Encode(o) + local writer = JsonWriter:New() + writer:Write(o) + return writer:ToString() +end + +function Decode(s) + local reader = JsonReader:New(s) + return reader:Read() +end + +function Null() + return Null +end +-------------------- End JSON Parser ------------------------ + + +t.DecodeJSON = function(jsonString) + if type(jsonString) == "string" then + return Decode(jsonString) + end + print("RbxUtil.DecodeJSON expects string argument!") + return nil +end + +t.EncodeJSON = function(jsonTable) + return Encode(jsonTable) +end + + + + + + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--------------------------------------------Terrain Utilities Begin----------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--makes a wedge at location x, y, z +--sets cell x, y, z to default material if parameter is provided, if not sets cell x, y, z to be whatever material it previously w +--returns true if made a wedge, false if the cell remains a block +t.MakeWedge = function(x, y, z, defaultmaterial) + return game:GetService("Terrain"):AutoWedgeCell(x,y,z) +end + +t.SelectTerrainRegion = function(regionToSelect, color, selectEmptyCells, selectionParent) + local terrain = game.Workspace:FindFirstChild("Terrain") + if not terrain then return end + + assert(regionToSelect) + assert(color) + + if not type(regionToSelect) == "Region3" then + error("regionToSelect (first arg), should be of type Region3, but is type",type(regionToSelect)) + end + if not type(color) == "BrickColor" then + error("color (second arg), should be of type BrickColor, but is type",type(color)) + end + + -- frequently used terrain calls (speeds up call, no lookup necessary) + local GetCell = terrain.GetCell + local WorldToCellPreferSolid = terrain.WorldToCellPreferSolid + local CellCenterToWorld = terrain.CellCenterToWorld + local emptyMaterial = Enum.CellMaterial.Empty + + -- container for all adornments, passed back to user + local selectionContainer = Instance.new("Model") + selectionContainer.Name = "SelectionContainer" + selectionContainer.Archivable = false + if selectionParent then + selectionContainer.Parent = selectionParent + else + selectionContainer.Parent = game.Workspace + end + + local updateSelection = nil -- function we return to allow user to update selection + local currentKeepAliveTag = nil -- a tag that determines whether adorns should be destroyed + local aliveCounter = 0 -- helper for currentKeepAliveTag + local lastRegion = nil -- used to stop updates that do nothing + local adornments = {} -- contains all adornments + local reusableAdorns = {} + + local selectionPart = Instance.new("Part") + selectionPart.Name = "SelectionPart" + selectionPart.Transparency = 1 + selectionPart.Anchored = true + selectionPart.Locked = true + selectionPart.CanCollide = false + selectionPart.FormFactor = Enum.FormFactor.Custom + selectionPart.Size = Vector3.new(4.2,4.2,4.2) + + local selectionBox = Instance.new("SelectionBox") + + -- srs translation from region3 to region3int16 + function Region3ToRegion3int16(region3) + local theLowVec = region3.CFrame.p - (region3.Size/2) + Vector3.new(2,2,2) + local lowCell = WorldToCellPreferSolid(terrain,theLowVec) + + local theHighVec = region3.CFrame.p + (region3.Size/2) - Vector3.new(2,2,2) + local highCell = WorldToCellPreferSolid(terrain, theHighVec) + + local highIntVec = Vector3int16.new(highCell.x,highCell.y,highCell.z) + local lowIntVec = Vector3int16.new(lowCell.x,lowCell.y,lowCell.z) + + return Region3int16.new(lowIntVec,highIntVec) + end + + -- helper function that creates the basis for a selection box + function createAdornment(theColor) + local selectionPartClone = nil + local selectionBoxClone = nil + + if #reusableAdorns > 0 then + selectionPartClone = reusableAdorns[1]["part"] + selectionBoxClone = reusableAdorns[1]["box"] + table.remove(reusableAdorns,1) + + selectionBoxClone.Visible = true + else + selectionPartClone = selectionPart:Clone() + selectionPartClone.Archivable = false + + selectionBoxClone = selectionBox:Clone() + selectionBoxClone.Archivable = false + + selectionBoxClone.Adornee = selectionPartClone + selectionBoxClone.Parent = selectionContainer + + selectionBoxClone.Adornee = selectionPartClone + + selectionBoxClone.Parent = selectionContainer + end + + if theColor then + selectionBoxClone.Color = theColor + end + + return selectionPartClone, selectionBoxClone + end + + -- iterates through all current adornments and deletes any that don't have latest tag + function cleanUpAdornments() + for cellPos, adornTable in pairs(adornments) do + + if adornTable.KeepAlive ~= currentKeepAliveTag then -- old news, we should get rid of this + adornTable.SelectionBox.Visible = false + table.insert(reusableAdorns,{part = adornTable.SelectionPart, box = adornTable.SelectionBox}) + adornments[cellPos] = nil + end + end + end + + -- helper function to update tag + function incrementAliveCounter() + aliveCounter = aliveCounter + 1 + if aliveCounter > 1000000 then + aliveCounter = 0 + end + return aliveCounter + end + + -- finds full cells in region and adorns each cell with a box, with the argument color + function adornFullCellsInRegion(region, color) + local regionBegin = region.CFrame.p - (region.Size/2) + Vector3.new(2,2,2) + local regionEnd = region.CFrame.p + (region.Size/2) - Vector3.new(2,2,2) + + local cellPosBegin = WorldToCellPreferSolid(terrain, regionBegin) + local cellPosEnd = WorldToCellPreferSolid(terrain, regionEnd) + + currentKeepAliveTag = incrementAliveCounter() + for y = cellPosBegin.y, cellPosEnd.y do + for z = cellPosBegin.z, cellPosEnd.z do + for x = cellPosBegin.x, cellPosEnd.x do + local cellMaterial = GetCell(terrain, x, y, z) + + if cellMaterial ~= emptyMaterial then + local cframePos = CellCenterToWorld(terrain, x, y, z) + local cellPos = Vector3int16.new(x,y,z) + + local updated = false + for cellPosAdorn, adornTable in pairs(adornments) do + if cellPosAdorn == cellPos then + adornTable.KeepAlive = currentKeepAliveTag + if color then + adornTable.SelectionBox.Color = color + end + updated = true + break + end + end + + if not updated then + local selectionPart, selectionBox = createAdornment(color) + selectionPart.Size = Vector3.new(4,4,4) + selectionPart.CFrame = CFrame.new(cframePos) + local adornTable = {SelectionPart = selectionPart, SelectionBox = selectionBox, KeepAlive = currentKeepAliveTag} + adornments[cellPos] = adornTable + end + end + end + end + end + cleanUpAdornments() + end + + + ------------------------------------- setup code ------------------------------ + lastRegion = regionToSelect + + if selectEmptyCells then -- use one big selection to represent the area selected + local selectionPart, selectionBox = createAdornment(color) + + selectionPart.Size = regionToSelect.Size + selectionPart.CFrame = regionToSelect.CFrame + + adornments.SelectionPart = selectionPart + adornments.SelectionBox = selectionBox + + updateSelection = + function (newRegion, color) + if newRegion and newRegion ~= lastRegion then + lastRegion = newRegion + selectionPart.Size = newRegion.Size + selectionPart.CFrame = newRegion.CFrame + end + if color then + selectionBox.Color = color + end + end + else -- use individual cell adorns to represent the area selected + adornFullCellsInRegion(regionToSelect, color) + updateSelection = + function (newRegion, color) + if newRegion and newRegion ~= lastRegion then + lastRegion = newRegion + adornFullCellsInRegion(newRegion, color) + end + end + + end + + local destroyFunc = function() + updateSelection = nil + if selectionContainer then selectionContainer:Destroy() end + adornments = nil + end + + return updateSelection, destroyFunc +end + +-----------------------------Terrain Utilities End----------------------------- + + + + + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------Signal class begin------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--[[ +A 'Signal' object identical to the internal RBXScriptSignal object in it's public API and semantics. This function +can be used to create "custom events" for user-made code. +API: +Method :connect( function handler ) + Arguments: The function to connect to. + Returns: A new connection object which can be used to disconnect the connection + Description: Connects this signal to the function specified by |handler|. That is, when |fire( ... )| is called for + the signal the |handler| will be called with the arguments given to |fire( ... )|. Note, the functions + connected to a signal are called in NO PARTICULAR ORDER, so connecting one function after another does + NOT mean that the first will be called before the second as a result of a call to |fire|. + +Method :disconnect() + Arguments: None + Returns: None + Description: Disconnects all of the functions connected to this signal. + +Method :fire( ... ) + Arguments: Any arguments are accepted + Returns: None + Description: Calls all of the currently connected functions with the given arguments. + +Method :wait() + Arguments: None + Returns: The arguments given to fire + Description: This call blocks until +]] + +function t.CreateSignal() + local this = {} + + local mBindableEvent = Instance.new('BindableEvent') + local mAllCns = {} --all connection objects returned by mBindableEvent::connect + + --main functions + function this:connect(func) + if self ~= this then error("connect must be called with `:`, not `.`", 2) end + if type(func) ~= 'function' then + error("Argument #1 of connect must be a function, got a "..type(func), 2) + end + local cn = mBindableEvent.Event:connect(func) + mAllCns[cn] = true + local pubCn = {} + function pubCn:disconnect() + cn:disconnect() + mAllCns[cn] = nil + end + return pubCn + end + function this:disconnect() + if self ~= this then error("disconnect must be called with `:`, not `.`", 2) end + for cn, _ in pairs(mAllCns) do + cn:disconnect() + mAllCns[cn] = nil + end + end + function this:wait() + if self ~= this then error("wait must be called with `:`, not `.`", 2) end + return mBindableEvent.Event:wait() + end + function this:fire(...) + if self ~= this then error("fire must be called with `:`, not `.`", 2) end + mBindableEvent:Fire(...) + end + + return this +end + +------------------------------------------------- Sigal class End ------------------------------------------------------ + + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +-----------------------------------------------Create Function Begins--------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +--[[ +A "Create" function for easy creation of Roblox instances. The function accepts a string which is the classname of +the object to be created. The function then returns another function which either accepts accepts no arguments, in +which case it simply creates an object of the given type, or a table argument that may contain several types of data, +in which case it mutates the object in varying ways depending on the nature of the aggregate data. These are the +type of data and what operation each will perform: +1) A string key mapping to some value: + Key-Value pairs in this form will be treated as properties of the object, and will be assigned in NO PARTICULAR + ORDER. If the order in which properties is assigned matter, then they must be assigned somewhere else than the + |Create| call's body. + +2) An integral key mapping to another Instance: + Normal numeric keys mapping to Instances will be treated as children if the object being created, and will be + parented to it. This allows nice recursive calls to Create to create a whole hierarchy of objects without a + need for temporary variables to store references to those objects. + +3) A key which is a value returned from Create.Event( eventname ), and a value which is a function function + The Create.E( string ) function provides a limited way to connect to signals inside of a Create hierarchy + for those who really want such a functionality. The name of the event whose name is passed to + Create.E( string ) + +4) A key which is the Create function itself, and a value which is a function + The function will be run with the argument of the object itself after all other initialization of the object is + done by create. This provides a way to do arbitrary things involving the object from withing the create + hierarchy. + Note: This function is called SYNCHRONOUSLY, that means that you should only so initialization in + it, not stuff which requires waiting, as the Create call will block until it returns. While waiting in the + constructor callback function is possible, it is probably not a good design choice. + Note: Since the constructor function is called after all other initialization, a Create block cannot have two + constructor functions, as it would not be possible to call both of them last, also, this would be unnecessary. + + +Some example usages: + +A simple example which uses the Create function to create a model object and assign two of it's properties. +local model = Create'Model'{ + Name = 'A New model', + Parent = game.Workspace, +} + + +An example where a larger hierarchy of object is made. After the call the hierarchy will look like this: +Model_Container + |-ObjectValue + | | + | `-BoolValueChild + `-IntValue + +local model = Create'Model'{ + Name = 'Model_Container', + Create'ObjectValue'{ + Create'BoolValue'{ + Name = 'BoolValueChild', + }, + }, + Create'IntValue'{}, +} + + +An example using the event syntax: + +local part = Create'Part'{ + [Create.E'Touched'] = function(part) + print("I was touched by "..part.Name) + end, +} + + +An example using the general constructor syntax: + +local model = Create'Part'{ + [Create] = function(this) + print("Constructor running!") + this.Name = GetGlobalFoosAndBars(this) + end, +} + + +Note: It is also perfectly legal to save a reference to the function returned by a call Create, this will not cause + any unexpected behavior. EG: + local partCreatingFunction = Create'Part' + local part = partCreatingFunction() +]] + +--the Create function need to be created as a functor, not a function, in order to support the Create.E syntax, so it +--will be created in several steps rather than as a single function declaration. +local function Create_PrivImpl(objectType) + if type(objectType) ~= 'string' then + error("Argument of Create must be a string", 2) + end + --return the proxy function that gives us the nice Create'string'{data} syntax + --The first function call is a function call using Lua's single-string-argument syntax + --The second function call is using Lua's single-table-argument syntax + --Both can be chained together for the nice effect. + return function(dat) + --default to nothing, to handle the no argument given case + dat = dat or {} + + --make the object to mutate + local obj = Instance.new(objectType) + + --stored constructor function to be called after other initialization + local ctor = nil + + for k, v in pairs(dat) do + --add property + if type(k) == 'string' then + obj[k] = v + + + --add child + elseif type(k) == 'number' then + if type(v) ~= 'userdata' then + error("Bad entry in Create body: Numeric keys must be paired with children, got a: "..type(v), 2) + end + v.Parent = obj + + + --event connect + elseif type(k) == 'table' and k.__eventname then + if type(v) ~= 'function' then + error("Bad entry in Create body: Key `[Create.E\'"..k.__eventname.."\']` must have a function value\ + got: "..tostring(v), 2) + end + obj[k.__eventname]:connect(v) + + + --define constructor function + elseif k == t.Create then + if type(v) ~= 'function' then + error("Bad entry in Create body: Key `[Create]` should be paired with a constructor function, \ + got: "..tostring(v), 2) + elseif ctor then + --ctor already exists, only one allowed + error("Bad entry in Create body: Only one constructor function is allowed", 2) + end + ctor = v + + + else + error("Bad entry ("..tostring(k).." => "..tostring(v)..") in Create body", 2) + end + end + + --apply constructor function if it exists + if ctor then + ctor(obj) + end + + --return the completed object + return obj + end +end + +--now, create the functor: +t.Create = setmetatable({}, {__call = function(tb, ...) return Create_PrivImpl(...) end}) + +--and create the "Event.E" syntax stub. Really it's just a stub to construct a table which our Create +--function can recognize as special. +t.Create.E = function(eventName) + return {__eventname = eventName} +end + +-------------------------------------------------Create function End---------------------------------------------------- + + + + +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------Documentation Begin----------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------ + +t.Help = + function(funcNameOrFunc) + --input argument can be a string or a function. Should return a description (of arguments and expected side effects) + if funcNameOrFunc == "DecodeJSON" or funcNameOrFunc == t.DecodeJSON then + return "Function DecodeJSON. " .. + "Arguments: (string). " .. + "Side effect: returns a table with all parsed JSON values" + end + if funcNameOrFunc == "EncodeJSON" or funcNameOrFunc == t.EncodeJSON then + return "Function EncodeJSON. " .. + "Arguments: (table). " .. + "Side effect: returns a string composed of argument table in JSON data format" + end + if funcNameOrFunc == "MakeWedge" or funcNameOrFunc == t.MakeWedge then + return "Function MakeWedge. " .. + "Arguments: (x, y, z, [default material]). " .. + "Description: Makes a wedge at location x, y, z. Sets cell x, y, z to default material if ".. + "parameter is provided, if not sets cell x, y, z to be whatever material it previously was. ".. + "Returns true if made a wedge, false if the cell remains a block " + end + if funcNameOrFunc == "SelectTerrainRegion" or funcNameOrFunc == t.SelectTerrainRegion then + return "Function SelectTerrainRegion. " .. + "Arguments: (regionToSelect, color, selectEmptyCells, selectionParent). " .. + "Description: Selects all terrain via a series of selection boxes within the regionToSelect " .. + "(this should be a region3 value). The selection box color is detemined by the color argument " .. + "(should be a brickcolor value). SelectionParent is the parent that the selection model gets placed to (optional)." .. + "SelectEmptyCells is bool, when true will select all cells in the " .. + "region, otherwise we only select non-empty cells. Returns a function that can update the selection," .. + "arguments to said function are a new region3 to select, and the adornment color (color arg is optional). " .. + "Also returns a second function that takes no arguments and destroys the selection" + end + if funcNameOrFunc == "CreateSignal" or funcNameOrFunc == t.CreateSignal then + return "Function CreateSignal. ".. + "Arguments: None. ".. + "Returns: The newly created Signal object. This object is identical to the RBXScriptSignal class ".. + "used for events in Objects, but is a Lua-side object so it can be used to create custom events in".. + "Lua code. ".. + "Methods of the Signal object: :connect, :wait, :fire, :disconnect. ".. + "For more info you can pass the method name to the Help function, or view the wiki page ".. + "for this library. EG: Help('Signal:connect')." + end + if funcNameOrFunc == "Signal:connect" then + return "Method Signal:connect. ".. + "Arguments: (function handler). ".. + "Return: A connection object which can be used to disconnect the connection to this handler. ".. + "Description: Connectes a handler function to this Signal, so that when |fire| is called the ".. + "handler function will be called with the arguments passed to |fire|." + end + if funcNameOrFunc == "Signal:wait" then + return "Method Signal:wait. ".. + "Arguments: None. ".. + "Returns: The arguments passed to the next call to |fire|. ".. + "Description: This call does not return until the next call to |fire| is made, at which point it ".. + "will return the values which were passed as arguments to that |fire| call." + end + if funcNameOrFunc == "Signal:fire" then + return "Method Signal:fire. ".. + "Arguments: Any number of arguments of any type. ".. + "Returns: None. ".. + "Description: This call will invoke any connected handler functions, and notify any waiting code ".. + "attached to this Signal to continue, with the arguments passed to this function. Note: The calls ".. + "to handlers are made asynchronously, so this call will return immediately regardless of how long ".. + "it takes the connected handler functions to complete." + end + if funcNameOrFunc == "Signal:disconnect" then + return "Method Signal:disconnect. ".. + "Arguments: None. ".. + "Returns: None. ".. + "Description: This call disconnects all handlers attacched to this function, note however, it ".. + "does NOT make waiting code continue, as is the behavior of normal Roblox events. This method ".. + "can also be called on the connection object which is returned from Signal:connect to only ".. + "disconnect a single handler, as opposed to this method, which will disconnect all handlers." + end + if funcNameOrFunc == "Create" then + return "Function Create. ".. + "Arguments: A table containing information about how to construct a collection of objects. ".. + "Returns: The constructed objects. ".. + "Descrition: Create is a very powerfull function, whose description is too long to fit here, and ".. + "is best described via example, please see the wiki page for a description of how to use it." + end + end + +--------------------------------------------Documentation Ends---------------------------------------------------------- + +return t + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/files/CoreGui/60595695 b/app/files/CoreGui/60595695 new file mode 100644 index 0000000..dbec354 --- /dev/null +++ b/app/files/CoreGui/60595695 @@ -0,0 +1,26 @@ +-- Library Registration Script +-- This script is used to register RbxLua libraries on game servers, so game scripts have +-- access to all of the libraries (otherwise only local scripts do) + +local deepakTestingPlace = 3569749 +local sc = game:GetService("ScriptContext") +local tries = 0 + +while not sc and tries < 3 do + tries = tries + 1 + sc = game:GetService("ScriptContext") + wait(0.2) +end + +if sc then + sc:RegisterLibrary("Libraries/RbxGui", "45284430") + sc:RegisterLibrary("Libraries/RbxGear", "45374389") + if game.PlaceId == deepakTestingPlace then + sc:RegisterLibrary("Libraries/RbxStatus", "52177566") + end + sc:RegisterLibrary("Libraries/RbxUtility", "60595411") + sc:RegisterLibrary("Libraries/RbxStamper", "73157242") + sc:LibraryRegistrationComplete() +else + print("failed to find script context, libraries did not load") +end diff --git a/app/files/CoreGui/60595696 b/app/files/CoreGui/60595696 new file mode 100644 index 0000000..dbec354 --- /dev/null +++ b/app/files/CoreGui/60595696 @@ -0,0 +1,26 @@ +-- Library Registration Script +-- This script is used to register RbxLua libraries on game servers, so game scripts have +-- access to all of the libraries (otherwise only local scripts do) + +local deepakTestingPlace = 3569749 +local sc = game:GetService("ScriptContext") +local tries = 0 + +while not sc and tries < 3 do + tries = tries + 1 + sc = game:GetService("ScriptContext") + wait(0.2) +end + +if sc then + sc:RegisterLibrary("Libraries/RbxGui", "45284430") + sc:RegisterLibrary("Libraries/RbxGear", "45374389") + if game.PlaceId == deepakTestingPlace then + sc:RegisterLibrary("Libraries/RbxStatus", "52177566") + end + sc:RegisterLibrary("Libraries/RbxUtility", "60595411") + sc:RegisterLibrary("Libraries/RbxStamper", "73157242") + sc:LibraryRegistrationComplete() +else + print("failed to find script context, libraries did not load") +end diff --git a/app/files/CoreGui/64164692 b/app/files/CoreGui/64164692 new file mode 100644 index 0000000..4011edb --- /dev/null +++ b/app/files/CoreGui/64164692 @@ -0,0 +1,146 @@ +-- Responsible for giving out tools in personal servers + +-- first, lets see if buildTools have already been created +-- create the object in lighting (TODO: move to some sort of "container" object when we have one) +local toolsArray = game.Lighting:FindFirstChild("BuildToolsModel") +local ownerArray = game.Lighting:FindFirstChild("OwnerToolsModel") +local hasBuildTools = false + +function getIds(idTable, assetTable) + for i = 1, #idTable do + local model = game:GetService("InsertService"):LoadAsset(idTable[i]) + if model then + local children = model:GetChildren() + for i = 1, #children do + if children[i]:IsA("Tool") then + table.insert(assetTable,children[i]) + end + end + end + end +end + +function storeInLighting(modelName, assetTable) + local model = Instance.new("Model") + model.Archivable = false + model.Name = modelName + + for i = 1, #assetTable do + assetTable[i].Parent = model + end + + if not game.Lighting:FindFirstChild(modelName) then -- no one beat us to it, we get to insert + model.Parent = game.Lighting + end +end + +if not toolsArray then -- no one has made build tools yet, we get to! + local buildToolIds = {} + local ownerToolIds = {} + + table.insert(buildToolIds,73089166) -- PartSelectionTool + table.insert(buildToolIds,73089190) -- DeleteTool + table.insert(buildToolIds,73089204) -- CloneTool + table.insert(buildToolIds,73089214) -- RotateTool + table.insert(buildToolIds,73089239) -- ConfigTool + table.insert(buildToolIds,73089259) -- WiringTool + table.insert(buildToolIds,58921588) -- ClassicTool + + table.insert(ownerToolIds, 65347268) + + -- next, create array of our tools + local buildTools = {} + local ownerTools = {} + + getIds(buildToolIds, buildTools) + getIds(ownerToolIds, ownerTools) + + storeInLighting("BuildToolsModel",buildTools) + storeInLighting("OwnerToolsModel",ownerTools) + + toolsArray = game.Lighting:FindFirstChild("BuildToolsModel") + ownerArray = game.Lighting:FindFirstChild("OwnerToolsModel") +end + +local localBuildTools = {} + +function giveBuildTools() + if not hasBuildTools then + hasBuildTools = true + local theTools = toolsArray:GetChildren() + for i = 1, #theTools do + local toolClone = theTools[i]:clone() + if toolClone then + toolClone.Parent = game.Players.LocalPlayer.Backpack + table.insert(localBuildTools,toolClone) + end + end + end +end + +function giveOwnerTools() + local theOwnerTools = ownerArray:GetChildren() + for i = 1, #theOwnerTools do + local ownerToolClone = theOwnerTools[i]:clone() + if ownerToolClone then + ownerToolClone.Parent = game.Players.LocalPlayer.Backpack + table.insert(localBuildTools,ownerToolClone) + end + end +end + +function removeBuildTools() + if hasBuildTools then + hasBuildTools = false + for i = 1, #localBuildTools do + localBuildTools[i].Parent = nil + end + localBuildTools = {} + end +end + +if game.Players.LocalPlayer.HasBuildTools then + giveBuildTools() +end +if game.Players.LocalPlayer.PersonalServerRank >= 255 then + giveOwnerTools() +end + +local debounce = false +game.Players.LocalPlayer.Changed:connect(function(prop) + if prop == "HasBuildTools" then + while debounce do + wait(0.5) + end + + debounce = true + + if game.Players.LocalPlayer.HasBuildTools then + giveBuildTools() + else + removeBuildTools() + end + + if game.Players.LocalPlayer.PersonalServerRank >= 255 then + giveOwnerTools() + end + + debounce = false + elseif prop == "PersonalServerRank" then + if game.Players.LocalPlayer.PersonalServerRank >= 255 then + giveOwnerTools() + elseif game.Players.LocalPlayer.PersonalServerRank <= 0 then + game.Players.LocalPlayer:Remove() -- you're banned, goodbye! + end + end +end) + +game.Players.LocalPlayer.CharacterAdded:connect(function() + hasBuildTools = false + if game.Players.LocalPlayer.HasBuildTools then + giveBuildTools() + end + if game.Players.LocalPlayer.PersonalServerRank >= 255 then + giveOwnerTools() + end +end) \ No newline at end of file diff --git a/app/files/CoreGui/73157242 b/app/files/CoreGui/73157242 new file mode 100644 index 0000000..8d88b84 --- /dev/null +++ b/app/files/CoreGui/73157242 @@ -0,0 +1,2207 @@ +local t = {} + +function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end +end + +-- Do a line/plane intersection. The line starts at the camera. The plane is at y == 0, normal(0, 1, 0) +-- +-- vectorPos - End point of the line. +-- +-- Return: +-- cellPos - The terrain cell intersection point if there is one, vectorPos if there isn't. +-- hit - Whether there was a plane intersection. Value is true if there was, false if not. +function PlaneIntersection(vectorPos) + local hit = false + local currCamera = game.Workspace.CurrentCamera + local startPos = Vector3.new(currCamera.CoordinateFrame.p.X, currCamera.CoordinateFrame.p.Y, currCamera.CoordinateFrame.p.Z) + local endPos = Vector3.new(vectorPos.X, vectorPos.Y, vectorPos.Z) + local normal = Vector3.new(0, 1, 0) + local p3 = Vector3.new(0, 0, 0) + local startEndDot = normal:Dot(endPos - startPos) + local cellPos = vectorPos + if startEndDot ~= 0 then + local t = normal:Dot(p3 - startPos) / startEndDot + if(t >=0 and t <=1) then + local intersection = ((endPos - startPos) * t) + startPos + cellPos = game.Workspace.Terrain:WorldToCell(intersection) + hit = true + end + end + + return cellPos, hit +end + + +-- Purpose: +-- Checks for terrain touched by the mouse hit. +-- Will do a plane intersection if no terrain is touched. +-- +-- mouse - Mouse to check the .hit for. +-- +-- Return: +-- cellPos - Cell position hit. Nil if none. +function GetTerrainForMouse(mouse) + -- There was no target, so all it could be is a plane intersection. + -- Check for a plane intersection. If there isn't one then nothing will get hit. + local cell = game.Workspace.Terrain:WorldToCellPreferSolid(Vector3.new(mouse.hit.x, mouse.hit.y, mouse.hit.z)) + local planeLoc = nil + -- If nothing was hit, do the plane intersection. + if 0 == game.Workspace.Terrain:GetCell(cell.X, cell.Y, cell.Z).Value then + cell = nil + planeLoc, hit = PlaneIntersection(Vector3.new(mouse.hit.x, mouse.hit.y, mouse.hit.z)) + if hit then + cell = planeLoc + end + end + return cell +end + +-- setup helper functions +local insertBoundingBoxOverlapVector = Vector3.new(.3, .3, .3) -- we can still stamp if our character extrudes into the target stamping space by .3 or fewer units + +-- rotates a model by yAngle radians about the global y-axis +local function rotatePartAndChildren(part, rotCF, offsetFromOrigin) + -- rotate this thing, if it's a part + if part:IsA("BasePart") then + part.CFrame = (rotCF * (part.CFrame - offsetFromOrigin)) + offsetFromOrigin + end + + -- recursively do the same to all children + local partChildren = part:GetChildren() + for c = 1, #partChildren do rotatePartAndChildren(partChildren[c], rotCF, offsetFromOrigin) end +end + +local function modelRotate(model, yAngle) + local rotCF = CFrame.Angles(0, yAngle, 0) + local offsetFromOrigin = model:GetModelCFrame().p + + rotatePartAndChildren(model, rotCF, offsetFromOrigin) +end + + +local function collectParts(object, baseParts, scripts, decals) + if object:IsA("BasePart") then + baseParts[#baseParts+1] = object + elseif object:IsA("Script") then + scripts[#scripts+1] = object + elseif object:IsA("Decal") then + decals[#decals+1] = object + end + + for index,child in pairs(object:GetChildren()) do + collectParts(child, baseParts, scripts, decals) + end +end + +local function clusterPartsInRegion(startVector, endVector) + local cluster = game.Workspace:FindFirstChild("Terrain") + + local startCell = cluster:WorldToCell(startVector) + local endCell = cluster:WorldToCell(endVector) + + local startX = startCell.X + local startY = startCell.Y + local startZ = startCell.Z + + local endX = endCell.X + local endY = endCell.Y + local endZ = endCell.Z + + if startX < cluster.MaxExtents.Min.X then startX = cluster.MaxExtents.Min.X end + if startY < cluster.MaxExtents.Min.Y then startY = cluster.MaxExtents.Min.Y end + if startZ < cluster.MaxExtents.Min.Z then startZ = cluster.MaxExtents.Min.Z end + + if endX > cluster.MaxExtents.Max.X then endX = cluster.MaxExtents.Max.X end + if endY > cluster.MaxExtents.Max.Y then endY = cluster.MaxExtents.Max.Y end + if endZ > cluster.MaxExtents.Max.Z then endZ = cluster.MaxExtents.Max.Z end + + for x = startX, endX do + for y = startY, endY do + for z = startZ, endZ do + if (cluster:GetCell(x, y, z).Value) > 0 then return true end + end + end + end + + return false +end + +local function findSeatsInModel(parent, seatTable) + if not parent then return end + + if parent.className == "Seat" or parent.className == "VehicleSeat" then + table.insert(seatTable, parent) + end + local myChildren = parent:GetChildren() + for j = 1, #myChildren do + findSeatsInModel(myChildren[j], seatTable) + end +end + +local function setSeatEnabledStatus(model, isEnabled) + local seatList = {} + findSeatsInModel(model, seatList) + + if isEnabled then + -- remove any welds called "SeatWeld" in seats + for i = 1, #seatList do + local nextSeat = seatList[i]:FindFirstChild("SeatWeld") + while nextSeat do nextSeat:Remove() nextSeat = seatList[i]:FindFirstChild("SeatWeld") end + end + else + -- put a weld called "SeatWeld" in every seat + -- this tricks it into thinking there's already someone sitting there, and it won't make you sit XD + for i = 1, #seatList do + local fakeWeld = Instance.new("Weld") + fakeWeld.Name = "SeatWeld" + fakeWeld.Parent = seatList[i] + end + end +end + +local function autoAlignToFace(parts) + local aatf = parts:FindFirstChild("AutoAlignToFace") + if aatf then return aatf.Value else return false end +end + +local function getClosestAlignedWorldDirection(aVector3InWorld) + local xDir = Vector3.new(1,0,0) + local yDir = Vector3.new(0,1,0) + local zDir = Vector3.new(0,0,1) + local xDot = aVector3InWorld.x * xDir.x + aVector3InWorld.y * xDir.y + aVector3InWorld.z * xDir.z + local yDot = aVector3InWorld.x * yDir.x + aVector3InWorld.y * yDir.y + aVector3InWorld.z * yDir.z + local zDot = aVector3InWorld.x * zDir.x + aVector3InWorld.y * zDir.y + aVector3InWorld.z * zDir.z + + if math.abs(xDot) > math.abs(yDot) and math.abs(xDot) > math.abs(zDot) then + if xDot > 0 then + return 0 + else + return 3 + end + elseif math.abs(yDot) > math.abs(xDot) and math.abs(yDot) > math.abs(zDot) then + if yDot > 0 then + return 1 + else + return 4 + end + else + if zDot > 0 then + return 2 + else + return 5 + end + end +end + +local function positionPartsAtCFrame3(aCFrame, currentParts) + local insertCFrame = nil + if not currentParts then return currentParts end + if currentParts and (currentParts:IsA("Model") or currentParts:IsA("Tool")) then + insertCFrame = currentParts:GetModelCFrame() + currentParts:TranslateBy(aCFrame.p - insertCFrame.p) + else + currentParts.CFrame = aCFrame + end + return currentParts +end + +local function calcRayHitTime(rayStart, raySlope, intersectionPlane) + if math.abs(raySlope) < .01 then return 0 end -- 0 slope --> we just say intersection time is 0, and sidestep this dimension + return (intersectionPlane - rayStart) / raySlope +end + +local function modelTargetSurface(partOrModel, rayStart, rayEnd) + if not partOrModel then + return 0 + end + + local modelCFrame = nil + local modelSize = nil + if partOrModel:IsA("Model") then + modelCFrame = partOrModel:GetModelCFrame() + modelSize = partOrModel:GetModelSize() + else + modelCFrame = partOrModel.CFrame + modelSize = partOrModel.Size + end + + local mouseRayStart = modelCFrame:pointToObjectSpace(rayStart) + local mouseRayEnd = modelCFrame:pointToObjectSpace(rayEnd) + local mouseSlope = mouseRayEnd - mouseRayStart + + local xPositive = 1 + local yPositive = 1 + local zPositive = 1 + if mouseSlope.X > 0 then xPositive = -1 end + if mouseSlope.Y > 0 then yPositive = -1 end + if mouseSlope.Z > 0 then zPositive = -1 end + + -- find which surface the transformed mouse ray hits (using modelSize): + local xHitTime = calcRayHitTime(mouseRayStart.X, mouseSlope.X, modelSize.X/2 * xPositive) + local yHitTime = calcRayHitTime(mouseRayStart.Y, mouseSlope.Y, modelSize.Y/2 * yPositive) + local zHitTime = calcRayHitTime(mouseRayStart.Z, mouseSlope.Z, modelSize.Z/2 * zPositive) + + local hitFace = 0 + + --if xHitTime >= 0 and yHitTime >= 0 and zHitTime >= 0 then + if xHitTime > yHitTime then + if xHitTime > zHitTime then + -- xFace is hit + hitFace = 1*xPositive + else + -- zFace is hit + hitFace = 3*zPositive + end + else + if yHitTime > zHitTime then + -- yFace is hit + hitFace = 2*yPositive + else + -- zFace is hit + hitFace = 3*zPositive + end + end + + return hitFace +end + +local function getBoundingBox2(partOrModel) + + -- for models, the bounding box is defined as the minimum and maximum individual part bounding boxes + -- relative to the first part's coordinate frame. + local minVec = Vector3.new(math.huge, math.huge, math.huge) + local maxVec = Vector3.new(-math.huge, -math.huge, -math.huge) + + if partOrModel:IsA("Terrain") then + minVec = Vector3.new(-2, -2, -2) + maxVec = Vector3.new(2, 2, 2) + elseif partOrModel:IsA("BasePart") then + minVec = -0.5 * partOrModel.Size + maxVec = -minVec + else + maxVec = partOrModel:GetModelSize()*0.5 + minVec = -maxVec + end + + -- Adjust bounding box to reflect what the model or part author wants in terms of justification + local justifyValue = partOrModel:FindFirstChild("Justification") + if justifyValue ~= nil then + -- find the multiple of 4 that contains the model + justify = justifyValue.Value + two = Vector3.new(2, 2, 2) + actualBox = maxVec - minVec - Vector3.new(0.01, 0.01, 0.01) + containingGridBox = Vector3.new(4 * math.ceil(actualBox.x/4), 4 * math.ceil(actualBox.y/4), 4 * math.ceil(actualBox.z/4)) + adjustment = containingGridBox - actualBox + minVec = minVec - 0.5 * adjustment * justify + maxVec = maxVec + 0.5 * adjustment * (two - justify) + end + + return minVec, maxVec +end + +local function getBoundingBoxInWorldCoordinates(partOrModel) + local minVec = Vector3.new(math.huge, math.huge, math.huge) + local maxVec = Vector3.new(-math.huge, -math.huge, -math.huge) + + if partOrModel:IsA("BasePart") and not partOrModel:IsA("Terrain") then + vec1 = partOrModel.CFrame:pointToWorldSpace(-0.5 * partOrModel.Size) + vec2 = partOrModel.CFrame:pointToWorldSpace(0.5 * partOrModel.Size) + minVec = Vector3.new(math.min(vec1.X, vec2.X), math.min(vec1.Y, vec2.Y), math.min(vec1.Z, vec2.Z)) + maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z)) + elseif partOrModel:IsA("Terrain") then + -- we shouldn't have to deal with this case + --minVec = Vector3.new(-2, -2, -2) + --maxVec = Vector3.new(2, 2, 2) + else + vec1 = partOrModel:GetModelCFrame():pointToWorldSpace(-0.5 * partOrModel:GetModelSize()) + vec2 = partOrModel:GetModelCFrame():pointToWorldSpace(0.5 * partOrModel:GetModelSize()) + minVec = Vector3.new(math.min(vec1.X, vec2.X), math.min(vec1.Y, vec2.Y), math.min(vec1.Z, vec2.Z)) + maxVec = Vector3.new(math.max(vec1.X, vec2.X), math.max(vec1.Y, vec2.Y), math.max(vec1.Z, vec2.Z)) + end + + return minVec, maxVec +end + +local function getTargetPartBoundingBox(targetPart) + if targetPart.Parent:FindFirstChild("RobloxModel") ~= nil then + return getBoundingBox2(targetPart.Parent) + else + return getBoundingBox2(targetPart) + end +end + +local function getMouseTargetCFrame(targetPart) + if targetPart.Parent:FindFirstChild("RobloxModel") ~= nil then + if targetPart.Parent:IsA("Tool") then return targetPart.Parent.Handle.CFrame + else return targetPart.Parent:GetModelCFrame() end + else + return targetPart.CFrame + end +end + +local function isBlocker(part) -- returns whether or not we want to cancel the stamp because we're blocked by this part + if not part then return false end + if not part.Parent then return false end + if part:FindFirstChild("Humanoid") then return false end + if part:FindFirstChild("RobloxStamper") or part:FindFirstChild("RobloxModel") then return true end + if part:IsA("Part") and not part.CanCollide then return false end + if part == game.Lighting then return false end + return isBlocker(part.Parent) +end + +-- helper function to determine if a character can be pushed upwards by a certain amount +-- character is 5 studs tall, we'll check a 1.5 x 1.5 x 4.5 box around char, with center .5 studs below torsocenter +local function spaceAboveCharacter(charTorso, newTorsoY, stampData) + local partsAboveChar = game.Workspace:FindPartsInRegion3( + Region3.new(Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) - Vector3.new(.75, 2.75, .75), + Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) + Vector3.new(.75, 1.75, .75)), + charTorso.Parent, + 100) + + for j = 1, #partsAboveChar do + if partsAboveChar[j].CanCollide and not partsAboveChar[j]:IsDescendantOf(stampData.CurrentParts) then return false end + end + + if clusterPartsInRegion(Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) - Vector3.new(.75, 2.75, .75), + Vector3.new(charTorso.Position.X, newTorsoY, charTorso.Position.Z) + Vector3.new(.75, 1.75, .75)) then + return false + end + + return true +end + + +local function findConfigAtMouseTarget(Mouse, stampData) + -- *Critical Assumption* : + -- This function assumes the target CF axes are orthogonal with the target bounding box faces + -- And, it assumes the insert CF axes are orthongonal with the insert bounding box faces + -- Therefore, insertion will not work with angled faces on wedges or other "non-block" parts, nor + -- will it work for parts in a model that are not orthogonally aligned with the model's CF. + + if not Mouse then return nil end -- This can happen sometimes, return if so + if not stampData then error("findConfigAtMouseTarget: stampData is nil") return nil end + if not stampData["CurrentParts"] then return nil end + + local grid = 4.0 + local admissibleConfig = false + local targetConfig = CFrame.new(0,0,0) + + local minBB, maxBB = getBoundingBox2(stampData.CurrentParts) + local diagBB = maxBB - minBB + + local insertCFrame + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + insertCFrame = stampData.CurrentParts:GetModelCFrame() + else + insertCFrame = stampData.CurrentParts.CFrame + end + + if Mouse then + if stampData.CurrentParts:IsA("Tool") then + Mouse.TargetFilter = stampData.CurrentParts.Handle + else + Mouse.TargetFilter = stampData.CurrentParts + end + end + + local hitPlane = false + local targetPart = nil + local success = pcall(function() targetPart = Mouse.Target end) + + if not success then-- or targetPart == nil then + return admissibleConfig, targetConfig + end + + local mouseHitInWorld = Vector3.new(0, 0, 0) + if Mouse then + mouseHitInWorld = Vector3.new(Mouse.Hit.x, Mouse.Hit.y, Mouse.Hit.z) + end + + local cellPos = nil + + -- Nothing was hit, so check for the default plane. + if nil == targetPart then + cellPos = GetTerrainForMouse(Mouse) + if nil == cellPos then + hitPlane = false + return admissibleConfig, targetConfig + else + targetPart = game.Workspace.Terrain + hitPlane = true + -- Take into account error that will occur. + cellPos = Vector3.new(cellPos.X - 1, cellPos.Y, cellPos.Z) + mouseHitInWorld = game.Workspace.Terrain:CellCenterToWorld(cellPos.x, cellPos.y, cellPos.z) + end + end + + -- test mouse hit location + local minBBTarget, maxBBTarget = getTargetPartBoundingBox(targetPart) + local diagBBTarget = maxBBTarget - minBBTarget + local targetCFrame = getMouseTargetCFrame(targetPart) + + if targetPart:IsA("Terrain") then + if not cluster then cluster = game.Workspace:FindFirstChild("Terrain") end + local cellID = cluster:WorldToCellPreferSolid(mouseHitInWorld) + if hitPlane then + cellID = cellPos + end + + targetCFrame = CFrame.new(game.Workspace.Terrain:CellCenterToWorld(cellID.x, cellID.y, cellID.z)) + end + + local mouseHitInTarget = targetCFrame:pointToObjectSpace(mouseHitInWorld) + local targetVectorInWorld = Vector3.new(0,0,0) + if Mouse then + -- DON'T WANT THIS IN TERMS OF THE MODEL CFRAME! (.TargetSurface is in terms of the part CFrame, so this would break, right? [HotThoth]) + -- (ideally, we would want to make the Mouse.TargetSurface a model-targetsurface instead, but for testing will be using the converse) + --targetVectorInWorld = targetCFrame:vectorToWorldSpace(Vector3.FromNormalId(Mouse.TargetSurface)) + targetVectorInWorld = targetPart.CFrame:vectorToWorldSpace(Vector3.FromNormalId(Mouse.TargetSurface)) -- better, but model cframe would be best + --[[if targetPart.Parent:IsA("Model") then + local hitFace = modelTargetSurface(targetPart.Parent, Mouse.Hit.p, game.Workspace.CurrentCamera.CoordinateFrame.p) -- best, if you get it right + local WORLD_AXES = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} + if hitFace > 0 then + targetVectorInWorld = targetCFrame:vectorToWorldSpace(WORLD_AXES[hitFace]) + elseif hitFace < 0 then + targetVectorInWorld = targetCFrame:vectorToWorldSpace(-WORLD_AXES[-hitFace]) + end + end]] + end + + local targetRefPointInTarget + local clampToSurface + + if getClosestAlignedWorldDirection(targetVectorInWorld) == 0 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(1, -1, 1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) + clampToSurface = Vector3.new(0,1,1) + elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 3 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, -1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(1, -1, -1)) + clampToSurface = Vector3.new(0,1,1) + elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 1 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, 1, 1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) + clampToSurface = Vector3.new(1,0,1) + elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 4 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, 1, 1)) + clampToSurface = Vector3.new(1,0,1) + elseif getClosestAlignedWorldDirection(targetVectorInWorld) == 2 then + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(-1, -1, 1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(-1, -1, -1)) + clampToSurface = Vector3.new(1,1,0) + else + targetRefPointInTarget = targetCFrame:vectorToObjectSpace(Vector3.new(1, -1, -1)) + insertRefPointInInsert = insertCFrame:vectorToObjectSpace(Vector3.new(1, -1, 1)) + clampToSurface = Vector3.new(1,1,0) + end + + targetRefPointInTarget = targetRefPointInTarget * (0.5 * diagBBTarget) + 0.5 * (maxBBTarget + minBBTarget) + insertRefPointInInsert = insertRefPointInInsert * (0.5 * diagBB) + 0.5 * (maxBB + minBB) + + -- To Do: For cases that are not aligned to the world grid, account for the minimal rotation + -- needed to bring the Insert part(s) into alignment with the Target Part + -- Apply the rotation here + + local delta = mouseHitInTarget - targetRefPointInTarget + local deltaClamped = Vector3.new(grid * math.modf(delta.x/grid), grid * math.modf(delta.y/grid), grid * math.modf(delta.z/grid)) + deltaClamped = deltaClamped * clampToSurface + local targetTouchInTarget = deltaClamped + targetRefPointInTarget + + local TargetTouchRelToWorld = targetCFrame:pointToWorldSpace(targetTouchInTarget) + local InsertTouchInWorld = insertCFrame:vectorToWorldSpace(insertRefPointInInsert) + local posInsertOriginInWorld = TargetTouchRelToWorld - InsertTouchInWorld + + local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = insertCFrame:components() + targetConfig = CFrame.new(posInsertOriginInWorld.x, posInsertOriginInWorld.y, posInsertOriginInWorld.z, R00, R01, R02, R10, R11, R12, R20, R21, R22) + admissibleConfig = true + + return admissibleConfig, targetConfig, getClosestAlignedWorldDirection(targetVectorInWorld) +end + +local function truncateToCircleEighth(bigValue, littleValue) + local big = math.abs(bigValue) + local little = math.abs(littleValue) + local hypotenuse = math.sqrt(big*big + little*little) + local frac = little / hypotenuse + + local bigSign = 1 + local littleSign = 1 + if bigValue < 0 then bigSign = -1 end + if littleValue < 0 then littleSign = -1 end + + if frac > .382683432 then + -- between 22.5 and 45 degrees, so truncate to 45-degree tilt + return .707106781 * hypotenuse * bigSign, .707106781 * hypotenuse * littleSign + else + -- between 0 and 22.5 degrees, so truncate to 0-degree tilt + return hypotenuse * bigSign, 0 + end +end + + +local function saveTheWelds(object, manualWeldTable, manualWeldParentTable) + if object:IsA("ManualWeld") or object:IsA("Rotate") then + table.insert(manualWeldTable, object) + table.insert(manualWeldParentTable, object.Parent) + else + local children = object:GetChildren() + for i = 1, #children do + saveTheWelds(children[i], manualWeldTable, manualWeldParentTable) + end + end +end + +local function restoreTheWelds(manualWeldTable, manualWeldParentTable) + for i = 1, #manualWeldTable do + manualWeldTable[i].Parent = manualWeldParentTable[i] + end +end + +t.CanEditRegion = function(partOrModel, EditRegion) -- todo: use model and stamper metadata + if not EditRegion then return true, false end + + local minBB, maxBB = getBoundingBoxInWorldCoordinates(partOrModel) + + if minBB.X < EditRegion.CFrame.p.X - EditRegion.Size.X/2 or + minBB.Y < EditRegion.CFrame.p.Y - EditRegion.Size.Y/2 or + minBB.Z < EditRegion.CFrame.p.Z - EditRegion.Size.Z/2 then + return false, false + end + + if maxBB.X > EditRegion.CFrame.p.X + EditRegion.Size.X/2 or + maxBB.Y > EditRegion.CFrame.p.Y + EditRegion.Size.Y/2 or + maxBB.Z > EditRegion.CFrame.p.Z + EditRegion.Size.Z/2 then + return false, false + end + + return true, false +end + +t.GetStampModel = function(assetId, terrainShape, useAssetVersionId) + if assetId == 0 then + return nil, "No Asset" + end + if assetId < 0 then + return nil, "Negative Asset" + end + + local function UnlockInstances(object) + if object:IsA("BasePart") then + object.Locked = false + end + for index,child in pairs(object:GetChildren()) do + UnlockInstances(child) + end + end + + local function getClosestColorToTerrainMaterial(terrainValue) + if terrainValue == 1 then + return BrickColor.new("Bright green") + elseif terrainValue == 2 then + return BrickColor.new("Bright yellow") + elseif terrainValue == 3 then + return BrickColor.new("Bright red") + elseif terrainValue == 4 then + return BrickColor.new("Sand red") + elseif terrainValue == 5 then + return BrickColor.new("Black") + elseif terrainValue == 6 then + return BrickColor.new("Dark stone grey") + elseif terrainValue == 7 then + return BrickColor.new("Sand blue") + elseif terrainValue == 8 then + return BrickColor.new("Deep orange") + elseif terrainValue == 9 then + return BrickColor.new("Dark orange") + elseif terrainValue == 10 then + return BrickColor.new("Reddish brown") + elseif terrainValue == 11 then + return BrickColor.new("Light orange") + elseif terrainValue == 12 then + return BrickColor.new("Light stone grey") + elseif terrainValue == 13 then + return BrickColor.new("Sand green") + elseif terrainValue == 14 then + return BrickColor.new("Medium stone grey") + elseif terrainValue == 15 then + return BrickColor.new("Really red") + elseif terrainValue == 16 then + return BrickColor.new("Really blue") + elseif terrainValue == 17 then + return BrickColor.new("Bright blue") + else + return BrickColor.new("Bright green") + end + end + + local function setupFakeTerrainPart(cellMat, cellType, cellOrient) + local newTerrainPiece = nil + if (cellType == 1 or cellType == 4) then newTerrainPiece = Instance.new("WedgePart") newTerrainPiece.formFactor = "Custom" + elseif (cellType == 2) then newTerrainPiece = Instance.new("CornerWedgePart") + else newTerrainPiece = Instance.new("Part") newTerrainPiece.formFactor = "Custom" end + newTerrainPiece.Name = "MegaClusterCube" + newTerrainPiece.Size = Vector3.new(4, 4, 4) + newTerrainPiece.BottomSurface = "Smooth" + newTerrainPiece.TopSurface = "Smooth" + + -- can add decals or textures here if feeling particularly adventurous... for now, can make a table of look-up colors + newTerrainPiece.BrickColor = getClosestColorToTerrainMaterial(cellMat) + + local sideways = 0 + local flipped = math.pi + if cellType == 4 then sideways = -math.pi/2 end + if cellType == 2 or cellType == 3 then flipped = 0 end + newTerrainPiece.CFrame = CFrame.Angles(0, math.pi/2*cellOrient + flipped, sideways) + + if cellType == 3 then + local inverseCornerWedgeMesh = Instance.new("SpecialMesh") + inverseCornerWedgeMesh.MeshType = "FileMesh" + inverseCornerWedgeMesh.MeshId = "http://www.syntax.eco/asset?id=66832495" + inverseCornerWedgeMesh.Scale = Vector3.new(2, 2, 2) + inverseCornerWedgeMesh.Parent = newTerrainPiece + end + + local materialTag = Instance.new("Vector3Value") + materialTag.Value = Vector3.new(cellMat, cellType, cellOrient) + materialTag.Name = "ClusterMaterial" + materialTag.Parent = newTerrainPiece + + return newTerrainPiece + end + + -- This call will cause a "wait" until the data comes back + -- below we wait a max of 8 seconds before deciding to bail out on loading + local root + local loader + loading = true + if useAssetVersionId then + loader = coroutine.create(function() + root = game:GetService("InsertService"):LoadAssetVersion(assetId) + loading = false + end) + coroutine.resume(loader) + else + loader = coroutine.create(function() + root = game:GetService("InsertService"):LoadAsset(assetId) + loading = false + end) + coroutine.resume(loader) + end + + local lastGameTime = 0 + local totalTime = 0 + local maxWait = 8 + while loading and totalTime < maxWait do + lastGameTime = tick() + wait(1) + totalTime = totalTime + tick() - lastGameTime + end + loading = false + + if totalTime >= maxWait then + return nil, "Load Time Fail" + end + + + if root == nil then + return nil, "Load Asset Fail" + end + + if not root:IsA("Model") then + return nil, "Load Type Fail" + end + + local instances = root:GetChildren() + if #instances == 0 then + return nil, "Empty Model Fail" + end + + --Unlock all parts that are inserted, to make sure they are editable + UnlockInstances(root) + + --Continue the insert process + root = root:GetChildren()[1] + + --Examine the contents and decide what it looks like + for pos, instance in pairs(instances) do + if instance:IsA("Team") then + instance.Parent = game:GetService("Teams") + elseif instance:IsA("Sky") then + local lightingService = game:GetService("Lighting") + for index,child in pairs(lightingService:GetChildren()) do + if child:IsA("Sky") then + child:Remove(); + end + end + instance.Parent = lightingService + return + end + end + + -- ...and tag all inserted models for subsequent origin identification + -- if no RobloxModel tag already exists, then add it. + if root:FindFirstChild("RobloxModel") == nil then + local stringTag = Instance.new("BoolValue", root) + stringTag.Name = "RobloxModel" + + if root:FindFirstChild("RobloxStamper") == nil then + local stringTag2 = Instance.new("BoolValue", root) + stringTag2.Name = "RobloxStamper" + end + end + + if terrainShape then + if root.Name == "MegaClusterCube" then + if (terrainShape == 6) then -- insert an autowedging tag + local autowedgeTag = Instance.new("BoolValue") + autowedgeTag.Name = "AutoWedge" + autowedgeTag.Parent = root + else + local clusterTag = root:FindFirstChild("ClusterMaterial") + if clusterTag then + if clusterTag:IsA("Vector3Value") then + root = setupFakeTerrainPart(clusterTag.Value.X, terrainShape, clusterTag.Value.Z) + else + root = setupFakeTerrainPart(clusterTag.Value, terrainShape, 0) + end + else + root = setupFakeTerrainPart(1, terrainShape, 0) + end + end + end + end + + return root +end + + + +t.SetupStamperDragger = function(modelToStamp, Mouse, StampInModel, AllowedStampRegion, StampFailedFunc) + if not modelToStamp then + error("SetupStamperDragger: modelToStamp (first arg) is nil! Should be a stamper model") + return nil + end + if not modelToStamp:IsA("Model") and not modelToStamp:IsA("BasePart") then + error("SetupStamperDragger: modelToStamp (first arg) is neither a Model or Part!") + return nil + end + if not Mouse then + error("SetupStamperDragger: Mouse (second arg) is nil! Should be a mouse object") + return nil + end + if not Mouse:IsA("Mouse") then + error("SetupStamperDragger: Mouse (second arg) is not of type Mouse!") + return nil + end + + local stampInModel = nil + local allowedStampRegion = nil + local stampFailedFunc = nil + if StampInModel then + if not StampInModel:IsA("Model") then + error("SetupStamperDragger: StampInModel (optional third arg) is not of type 'Model'") + return nil + end + if not AllowedStampRegion then + error("SetupStamperDragger: AllowedStampRegion (optional fourth arg) is nil when StampInModel (optional third arg) is defined") + return nil + end + stampFailedFunc = StampFailedFunc + stampInModel = StampInModel + allowedStampRegion = AllowedStampRegion + end + + -- Init all state variables + local gInitial90DegreeRotations = 0 + local stampData = nil + local mouseTarget = nil + + local errorBox = Instance.new("SelectionBox") + errorBox.Color = BrickColor.new("Bright red") + errorBox.Transparency = 0 + errorBox.Archivable = false + + -- for megacluster MEGA STAMPING + local adornPart = Instance.new("Part") + adornPart.Parent = nil + adornPart.formFactor = "Custom" + adornPart.Size = Vector3.new(4, 4, 4) + adornPart.CFrame = CFrame.new() + adornPart.Archivable = false + + local adorn = Instance.new("SelectionBox") + adorn.Color = BrickColor.new("Toothpaste") + adorn.Adornee = adornPart + adorn.Visible = true + adorn.Transparency = 0 + adorn.Name = "HighScalabilityStamperLine" + adorn.Archivable = false + + local HighScalabilityLine = {} + HighScalabilityLine.Start = nil + HighScalabilityLine.End = nil + HighScalabilityLine.Adorn = adorn + HighScalabilityLine.AdornPart = adornPart + HighScalabilityLine.InternalLine = nil + HighScalabilityLine.NewHint = true + + HighScalabilityLine.MorePoints = {nil, nil} + HighScalabilityLine.MoreLines = {nil, nil} + HighScalabilityLine.Dimensions = 1 + + local control = {} + local movingLock = false + local stampUpLock = false + local unstampableSurface = false + local mouseCons = {} + local keyCon = nil + + local stamped = Instance.new("BoolValue") + stamped.Archivable = false + stamped.Value = false + + local lastTarget = {} + lastTarget.TerrainOrientation = 0 + lastTarget.CFrame = 0 + + local cellInfo = {} + cellInfo.Material = 1 + cellInfo.clusterType = 0 + cellInfo.clusterOrientation = 0 + + local function isMegaClusterPart() + if not stampData then return false end + if not stampData.CurrentParts then return false end + + return ( stampData.CurrentParts:FindFirstChild("ClusterMaterial",true) or (stampData.CurrentParts.Name == "MegaClusterCube") ) + end + + local function DoHighScalabilityRegionSelect() + local megaCube = stampData.CurrentParts:FindFirstChild("MegaClusterCube") + if not megaCube then + if not stampData.CurrentParts.Name == "MegaClusterCube" then + return + else + megaCube = stampData.CurrentParts + end + end + + HighScalabilityLine.End = megaCube.CFrame.p + local line = nil + local line2 = Vector3.new(0, 0, 0) + local line3 = Vector3.new(0, 0, 0) + + if HighScalabilityLine.Dimensions == 1 then + -- extract the line from these positions and limit to a 2D plane made from 2 of the world axes + -- then use dominating axis to limit line to be at 45-degree intervals + -- will use this internal representation of the line for the actual stamping + line = (HighScalabilityLine.End - HighScalabilityLine.Start) + + if math.abs(line.X) < math.abs(line.Y) then + if math.abs(line.X) < math.abs(line.Z) then + -- limit to Y/Z plane, domination unknown + local newY, newZ + if (math.abs(line.Y) > math.abs(line.Z)) then + newY, newZ = truncateToCircleEighth(line.Y, line.Z) + else + newZ, newY = truncateToCircleEighth(line.Z, line.Y) + end + line = Vector3.new(0, newY, newZ) + else + -- limit to X/Y plane, with Y dominating + local newY, newX = truncateToCircleEighth(line.Y, line.X) + line = Vector3.new(newX, newY, 0) + end + else + if math.abs(line.Y) < math.abs(line.Z) then + -- limit to X/Z plane, domination unknown + local newX, newZ + if math.abs(line.X) > math.abs(line.Z) then + newX, newZ = truncateToCircleEighth(line.X, line.Z) + else + newZ, newX = truncateToCircleEighth(line.Z, line.X) + end + line = Vector3.new(newX, 0, newZ) + else + -- limit to X/Y plane, with X dominating + local newX, newY = truncateToCircleEighth(line.X, line.Y) + line = Vector3.new(newX, newY, 0) + end + end + HighScalabilityLine.InternalLine = line + + elseif HighScalabilityLine.Dimensions == 2 then + line = HighScalabilityLine.MoreLines[1] + line2 = HighScalabilityLine.End - HighScalabilityLine.MorePoints[1] + + -- take out any component of line2 along line1, so you get perpendicular to line1 component + line2 = line2 - line.unit*line.unit:Dot(line2) + + tempCFrame = CFrame.new(HighScalabilityLine.Start, HighScalabilityLine.Start + line) + + -- then zero out whichever is the smaller component + local yAxis = tempCFrame:vectorToWorldSpace(Vector3.new(0, 1, 0)) + local xAxis = tempCFrame:vectorToWorldSpace(Vector3.new(1, 0, 0)) + + local xComp = xAxis:Dot(line2) + local yComp = yAxis:Dot(line2) + + if math.abs(yComp) > math.abs(xComp) then + line2 = line2 - xAxis * xComp + else + line2 = line2 - yAxis * yComp + end + + HighScalabilityLine.InternalLine = line2 + + elseif HighScalabilityLine.Dimensions == 3 then + line = HighScalabilityLine.MoreLines[1] + line2 = HighScalabilityLine.MoreLines[2] + line3 = HighScalabilityLine.End - HighScalabilityLine.MorePoints[2] + + -- zero out all components of previous lines + line3 = line3 - line.unit * line.unit:Dot(line3) + line3 = line3 - line2.unit * line2.unit:Dot(line3) + + HighScalabilityLine.InternalLine = line3 + end + + -- resize the "line" graphic to be the correct size and orientation + tempCFrame = CFrame.new(HighScalabilityLine.Start, HighScalabilityLine.Start + line) + + if HighScalabilityLine.Dimensions == 1 then -- faster calculation for line + HighScalabilityLine.AdornPart.Size = Vector3.new(4, 4, line.magnitude + 4) + HighScalabilityLine.AdornPart.CFrame = tempCFrame + tempCFrame:vectorToWorldSpace(Vector3.new(2, 2, 2) - HighScalabilityLine.AdornPart.Size/2) + else + local boxSize = tempCFrame:vectorToObjectSpace(line + line2 + line3) + HighScalabilityLine.AdornPart.Size = Vector3.new(4, 4, 4) + Vector3.new(math.abs(boxSize.X), math.abs(boxSize.Y), math.abs(boxSize.Z)) + HighScalabilityLine.AdornPart.CFrame = tempCFrame + tempCFrame:vectorToWorldSpace(boxSize/2) + end + + -- make player able to see this ish + + local gui = nil + if game.Players["LocalPlayer"] then + gui = game.Players.LocalPlayer:FindFirstChild("PlayerGui") + if gui and gui:IsA("PlayerGui") then + if HighScalabilityLine.Dimensions == 1 and line.magnitude > 3 then -- don't show if mouse hasn't moved enough + HighScalabilityLine.Adorn.Parent = gui + elseif HighScalabilityLine.Dimensions > 1 then + HighScalabilityLine.Adorn.Parent = gui + end + end + end + + if gui == nil then -- we are in studio + gui = game:GetService("CoreGui") + if HighScalabilityLine.Dimensions == 1 and line.magnitude > 3 then -- don't show if mouse hasn't moved enough + HighScalabilityLine.Adorn.Parent = gui + elseif HighScalabilityLine.Dimensions > 1 then + HighScalabilityLine.Adorn.Parent = gui + end + end + end + + + local function DoStamperMouseMove(Mouse) + if not Mouse then + error("Error: RbxStamper.DoStamperMouseMove: Mouse is nil") + return + end + if not Mouse:IsA("Mouse") then + error("Error: RbxStamper.DoStamperMouseMove: Mouse is of type", Mouse.className,"should be of type Mouse") + return + end + + -- There wasn't a target (no part or terrain), so check for plane intersection. + if not Mouse.Target then + local cellPos = GetTerrainForMouse(Mouse) + if nil == cellPos then + return + end + end + + if not stampData then + return + end + + -- don't move with dragger - will move in one step on mouse down + -- draw ghost at acceptable positions + configFound, targetCFrame, targetSurface = findConfigAtMouseTarget(Mouse, stampData) + if not configFound then + error("RbxStamper.DoStamperMouseMove No configFound, returning") + return + end + + local numRotations = 0 -- update this according to how many rotations you need to get it to target surface + if autoAlignToFace(stampData.CurrentParts) and targetSurface ~= 1 and targetSurface ~= 4 then -- pre-rotate the flag or portrait so it's aligned correctly + if targetSurface == 3 then numRotations = 0 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) + elseif targetSurface == 0 then numRotations = 2 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) + elseif targetSurface == 5 then numRotations = 3 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) + elseif targetSurface == 2 then numRotations = 1 - gInitial90DegreeRotations + autoAlignToFace(stampData.CurrentParts) + end + end + + local ry = math.pi/2 + gInitial90DegreeRotations = gInitial90DegreeRotations + numRotations + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + --stampData.CurrentParts:Rotate(0, ry*numRotations, 0) + modelRotate(stampData.CurrentParts, ry*numRotations) + else + stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry*numRotations, 0) * stampData.CurrentParts.CFrame + end + + -- CODE TO CHECK FOR DRAGGING GHOST PART INTO A COLLIDING STATE + local minBB, maxBB = getBoundingBoxInWorldCoordinates(stampData.CurrentParts) + + -- need to offset by distance to be dragged + local currModelCFrame = nil + if stampData.CurrentParts:IsA("Model") then + currModelCFrame = stampData.CurrentParts:GetModelCFrame() + else + currModelCFrame = stampData.CurrentParts.CFrame + end + + minBB = minBB + targetCFrame.p - currModelCFrame.p + maxBB = maxBB + targetCFrame.p - currModelCFrame.p + + -- don't drag into terrain + if clusterPartsInRegion(minBB + insertBoundingBoxOverlapVector, maxBB - insertBoundingBoxOverlapVector) then + if lastTarget.CFrame then + if (stampData.CurrentParts:FindFirstChild("ClusterMaterial", true)) then + local theClusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if theClusterMaterial:IsA("Vector3Value") then + local stampClusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if stampClusterMaterial then + stampClusterMaterial = clusterMat + end + end + end + end + return + end + + -- if we are stamping a terrain part, make sure it goes on the grid! Otherwise preview block could be placed off grid, but stamped on grid + if isMegaClusterPart() then + local cellToStamp = game.Workspace.Terrain:WorldToCell(targetCFrame.p) + local newCFramePosition = game.Workspace.Terrain:CellCenterToWorld(cellToStamp.X, cellToStamp.Y, cellToStamp.Z) + local x, y, z, R00, R01, R02, R10, R11, R12, R20, R21, R22 = targetCFrame:components() + targetCFrame = CFrame.new(newCFramePosition.X,newCFramePosition.Y,newCFramePosition.Z,R00, R01, R02, R10, R11, R12, R20, R21, R22) + end + + positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) + lastTarget.CFrame = targetCFrame -- successful positioning, so update 'dat cframe + if stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) then + local clusterMat = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if clusterMat:IsA("Vector3Value") then + lastTarget.TerrainOrientation = clusterMat.Value.Z + end + end + + + -- auto break joints code + if Mouse and Mouse.Target and Mouse.Target.Parent then + local modelInfo = Mouse.Target:FindFirstChild("RobloxModel") + if not modelInfo then modelInfo = Mouse.Target.Parent:FindFirstChild("RobloxModel") end + + local myModelInfo = stampData.CurrentParts:FindFirstChild("UnstampableFaces") + + --if (modelInfo and modelInfo.Parent:FindFirstChild("UnstampableFaces")) or (modelInfo and myModelInfo) then -- need better targetSurface calcs + if (true) then + local breakingFaces = "" + local myBreakingFaces = "" + if modelInfo and modelInfo.Parent:FindFirstChild("UnstampableFaces") then breakingFaces = modelInfo.Parent.UnstampableFaces.Value end + if myModelInfo then myBreakingFaces = myModelInfo.Value end + local hitFace = 0 + + if modelInfo then hitFace = modelTargetSurface(modelInfo.Parent, game.Workspace.CurrentCamera.CoordinateFrame.p, Mouse.Hit.p) end + + -- are we stamping TO an unstampable surface? + for bf in string.gmatch(breakingFaces, "[^,]+") do + if hitFace == tonumber(bf) then + -- return before we hit the JointsService code below! + unstampableSurface = true + game.JointsService:ClearJoinAfterMoveJoints() -- clear the JointsService cache + return + end + end + + -- now we have to cast the ray back in the other direction to find the surface we're stamping FROM + hitFace = modelTargetSurface(stampData.CurrentParts, Mouse.Hit.p, game.Workspace.CurrentCamera.CoordinateFrame.p) + + -- are we stamping WITH an unstampable surface? + for bf in string.gmatch(myBreakingFaces, "[^,]+") do + if hitFace == tonumber(bf) then + unstampableSurface = true + game.JointsService:ClearJoinAfterMoveJoints() -- clear the JointsService cache + return + end + end + + -- just need to match breakingFace against targetSurface using rotation supplied by modelCFrame + -- targetSurface: 1 is top, 4 is bottom, + end + end + + -- to show joints during the mouse move + unstampableSurface = false + game.JointsService:SetJoinAfterMoveInstance(stampData.CurrentParts) + + -- most common mouse inactive error occurs here, so check mouse active one more time in a pcall + if not pcall(function() + if Mouse and Mouse.Target and Mouse.Target.Parent:FindFirstChild("RobloxModel") == nil then + return + else + return + end + end) + then + error("Error: RbxStamper.DoStamperMouseMove Mouse is nil on second check") + game.JointsService:ClearJoinAfterMoveJoints() + Mouse = nil + return + end + + if Mouse and Mouse.Target and Mouse.Target.Parent:FindFirstChild("RobloxModel") == nil then + game.JointsService:SetJoinAfterMoveTarget(Mouse.Target) + else + game.JointsService:SetJoinAfterMoveTarget(nil) + end + game.JointsService:ShowPermissibleJoints() + + -- here we allow for a line of high-scalability parts + if isMegaClusterPart() and HighScalabilityLine and HighScalabilityLine.Start then + DoHighScalabilityRegionSelect() + end + end + + local function setupKeyListener(key, Mouse) + if control and control["Paused"] then return end -- don't do this if we have no stamp + + key = string.lower(key) + if key == 'r' and not autoAlignToFace(stampData.CurrentParts) then -- rotate the model + gInitial90DegreeRotations = gInitial90DegreeRotations + 1 + + -- Update orientation value if this is a fake terrain part + local clusterValues = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if clusterValues and clusterValues:IsA("Vector3Value") then + clusterValues.Value = Vector3.new(clusterValues.Value.X, clusterValues.Value.Y, (clusterValues.Value.Z + 1) % 4) + end + + -- Rotate the parts or all the parts in the model + local ry = math.pi/2 + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + --stampData.CurrentParts:Rotate(0, ry, 0) + modelRotate(stampData.CurrentParts, ry) + else + stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry, 0) * stampData.CurrentParts.CFrame + end + + -- After rotating, update the position + configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) + if configFound then + positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) + + -- update everything else in MouseMove + DoStamperMouseMove(Mouse) + end + elseif key == 'c' then -- try to expand our high scalability dragger dimension + if HighScalabilityLine.InternalLine and HighScalabilityLine.InternalLine.magnitude > 0 and HighScalabilityLine.Dimensions < 3 then + HighScalabilityLine.MorePoints[HighScalabilityLine.Dimensions] = HighScalabilityLine.End + HighScalabilityLine.MoreLines[HighScalabilityLine.Dimensions] = HighScalabilityLine.InternalLine + HighScalabilityLine.Dimensions = HighScalabilityLine.Dimensions + 1 + HighScalabilityLine.NewHint = true + end + end + end + + keyCon = Mouse.KeyDown:connect(function(key) -- init key connection (keeping code close to func) + setupKeyListener(key, Mouse) + end) + + local function resetHighScalabilityLine() + if HighScalabilityLine then + HighScalabilityLine.Start = nil + HighScalabilityLine.End = nil + HighScalabilityLine.InternalLine = nil + HighScalabilityLine.NewHint = true + end + end + + local function flashRedBox() + local gui = game.CoreGui + if game:FindFirstChild("Players") then + if game.Players["LocalPlayer"] then + if game.Players.LocalPlayer:FindFirstChild("PlayerGui") then + gui = game.Players.LocalPlayer.PlayerGui + end + end + end + if not stampData["ErrorBox"] then return end + + stampData.ErrorBox.Parent = gui + if stampData.CurrentParts:IsA("Tool") then + stampData.ErrorBox.Adornee = stampData.CurrentParts.Handle + else + stampData.ErrorBox.Adornee = stampData.CurrentParts + end + + delay(0,function() + for i = 1, 3 do + if stampData["ErrorBox"] then stampData.ErrorBox.Visible = true end + wait(0.13) + if stampData["ErrorBox"] then stampData.ErrorBox.Visible = false end + wait(0.13) + end + if stampData["ErrorBox"] then + stampData.ErrorBox.Adornee = nil + stampData.ErrorBox.Parent = Tool + end + end) + end + + local function DoStamperMouseDown(Mouse) + if not Mouse then + error("Error: RbxStamper.DoStamperMouseDown: Mouse is nil") + return + end + if not Mouse:IsA("Mouse") then + error("Error: RbxStamper.DoStamperMouseDown: Mouse is of type", Mouse.className,"should be of type Mouse") + return + end + if not stampData then + return + end + + if isMegaClusterPart() then + if Mouse and HighScalabilityLine then + local megaCube = stampData.CurrentParts:FindFirstChild("MegaClusterCube", true) + local terrain = game.Workspace.Terrain + if megaCube then + HighScalabilityLine.Dimensions = 1 + local tempCell = terrain:WorldToCell(megaCube.CFrame.p) + HighScalabilityLine.Start = terrain:CellCenterToWorld(tempCell.X, tempCell.Y, tempCell.Z) + return + else + HighScalabilityLine.Dimensions = 1 + local tempCell = terrain:WorldToCell(stampData.CurrentParts.CFrame.p) + HighScalabilityLine.Start = terrain:CellCenterToWorld(tempCell.X, tempCell.Y, tempCell.Z) + return + end + end + end + end + + local function loadSurfaceTypes(part, surfaces) + part.TopSurface = surfaces[1] + part.BottomSurface = surfaces[2] + part.LeftSurface = surfaces[3] + part.RightSurface = surfaces[4] + part.FrontSurface = surfaces[5] + part.BackSurface = surfaces[6] + end + + local function saveSurfaceTypes(part, myTable) + local tempTable = {} + tempTable[1] = part.TopSurface + tempTable[2] = part.BottomSurface + tempTable[3] = part.LeftSurface + tempTable[4] = part.RightSurface + tempTable[5] = part.FrontSurface + tempTable[6] = part.BackSurface + + myTable[part] = tempTable + end + + local function makeSurfaceUnjoinable(part, surface) + -- TODO: FILL OUT! + end + + local function prepareModel(model) + if not model then return nil end + + local gDesiredTrans = 0.7 + local gStaticTrans = 1 + + local clone = model:Clone() + local scripts = {} + local parts = {} + local decals = {} + + stampData = {} + stampData.DisabledScripts = {} + stampData.TransparencyTable = {} + stampData.MaterialTable = {} + stampData.CanCollideTable = {} + stampData.AnchoredTable = {} + stampData.ArchivableTable = {} + stampData.DecalTransparencyTable = {} + stampData.SurfaceTypeTable = {} + + collectParts(clone, parts, scripts, decals) + + if #parts <= 0 then return nil, "no parts found in modelToStamp" end + + for index,script in pairs(scripts) do + if not(script.Disabled) then + script.Disabled = true + stampData.DisabledScripts[#stampData.DisabledScripts + 1] = script + end + end + for index, part in pairs(parts) do + stampData.TransparencyTable[part] = part.Transparency + part.Transparency = gStaticTrans + (1 - gStaticTrans) * part.Transparency + stampData.MaterialTable[part] = part.Material + part.Material = Enum.Material.Plastic + stampData.CanCollideTable[part] = part.CanCollide + part.CanCollide = false + stampData.AnchoredTable[part] = part.Anchored + part.Anchored = true + stampData.ArchivableTable[part] = part.Archivable + part.Archivable = false + + saveSurfaceTypes(part, stampData.SurfaceTypeTable) + + local fadeInDelayTime = 0.5 + local transFadeInTime = 0.5 + delay(0,function() + wait(fadeInDelayTime) -- give it some time to be completely transparent + + local begTime = tick() + local currTime = begTime + while (currTime - begTime) < transFadeInTime and part and part:IsA("BasePart") and part.Transparency > gDesiredTrans do + local newTrans = 1 - (((currTime - begTime)/transFadeInTime) * (gStaticTrans - gDesiredTrans)) + if stampData["TransparencyTable"] and stampData.TransparencyTable[part] then + part.Transparency = newTrans + (1 - newTrans) * stampData.TransparencyTable[part] + end + wait(0.03) + currTime = tick() + end + if part and part:IsA("BasePart") then + if stampData["TransparencyTable"] and stampData.TransparencyTable[part] then + part.Transparency = gDesiredTrans + (1 - gDesiredTrans) * stampData.TransparencyTable[part] + end + end + end) + end + + for index, decal in pairs(decals) do + stampData.DecalTransparencyTable[decal] = decal.Transparency + decal.Transparency = gDesiredTrans + (1 - gDesiredTrans) * decal.Transparency + end + + -- disable all seats + setSeatEnabledStatus(clone, true) + setSeatEnabledStatus(clone, false) + + stampData.CurrentParts = clone + + -- if auto-alignable, we enforce a pre-rotation to the canonical "0-frame" + if autoAlignToFace(clone) then + stampData.CurrentParts:ResetOrientationToIdentity() + gInitial90DegreeRotations = 0 + else -- pre-rotate if necessary + local ry = gInitial90DegreeRotations * math.pi/2 + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + --stampData.CurrentParts:Rotate(0, ry, 0) + modelRotate(stampData.CurrentParts, ry) + else + stampData.CurrentParts.CFrame = CFrame.fromEulerAnglesXYZ(0, ry, 0) * stampData.CurrentParts.CFrame + end + end + + -- since we're cloning the old model instead of the new one, we will need to update the orientation based on the original value AND how many more + -- rotations we expect since then [either that or we need to store the just-stamped clusterMaterial.Value.Z somewhere]. This should fix the terrain rotation + -- issue (fingers crossed) [HotThoth] + + local clusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if clusterMaterial and clusterMaterial:IsA("Vector3Value") then + clusterMaterial.Value = Vector3.new(clusterMaterial.Value.X, clusterMaterial.Value.Y, (clusterMaterial.Value.Z + gInitial90DegreeRotations) % 4) + end + + -- After rotating, update the position + local configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) + if configFound then + stampData.CurrentParts = positionPartsAtCFrame3(targetCFrame, stampData.CurrentParts) + end + + -- to show joints during the mouse move + game.JointsService:SetJoinAfterMoveInstance(stampData.CurrentParts) + + return clone, parts + end + + local function checkTerrainBlockCollisions(cellPos, checkHighScalabilityStamp) + local cellCenterToWorld = game.Workspace.Terrain.CellCenterToWorld + local cellCenter = cellCenterToWorld(game.Workspace.Terrain, cellPos.X, cellPos.Y, cellPos.Z) + local cellBlockingParts = game.Workspace:FindPartsInRegion3(Region3.new(cellCenter - Vector3.new(2, 2, 2) + insertBoundingBoxOverlapVector, cellCenter + Vector3.new(2, 2, 2) - insertBoundingBoxOverlapVector), stampData.CurrentParts, 100) + + local skipThisCell = false + + for b = 1, #cellBlockingParts do + if isBlocker(cellBlockingParts[b]) then skipThisCell = true break end + end + + if not skipThisCell then + -- pop players up above any set cells + local alreadyPushedUp = {} + -- if no blocking model below, then see if stamping on top of a character + for b = 1, #cellBlockingParts do + if cellBlockingParts[b].Parent and + not alreadyPushedUp[cellBlockingParts[b].Parent] and + cellBlockingParts[b].Parent:FindFirstChild("Humanoid") and + cellBlockingParts[b].Parent:FindFirstChild("Humanoid"):IsA("Humanoid") then + ----------------------------------------------------------------------------------- + local blockingPersonTorso = cellBlockingParts[b].Parent:FindFirstChild("Torso") + alreadyPushedUp[cellBlockingParts[b].Parent] = true + + if blockingPersonTorso then + -- if so, let's push the person upwards so they pop on top of the stamped model/part (but only if there's space above them) + local newY = cellCenter.Y + 5 + if spaceAboveCharacter(blockingPersonTorso, newY, stampData) then + blockingPersonTorso.CFrame = blockingPersonTorso.CFrame + Vector3.new(0, newY - blockingPersonTorso.CFrame.p.Y, 0) + else + -- if no space, we just skip this one + skipThisCell = true + break + end + end + ----------------------------------------------------------------------------------- + end + end + end + + if not skipThisCell then -- if we STILL aren't skipping... then we're good to go! + local canSetCell = true + + if checkHighScalabilityStamp then -- check to see if cell is in region, if not we'll skip set + if allowedStampRegion then + local cellPos = cellCenterToWorld(game.Workspace.Terrain, cellPos.X, cellPos.Y, cellPos.Z) + if cellPos.X + 2 > allowedStampRegion.CFrame.p.X + allowedStampRegion.Size.X/2 then + canSetCell = false + elseif cellPos.X - 2 < allowedStampRegion.CFrame.p.X - allowedStampRegion.Size.X/2 then + canSetCell = false + elseif cellPos.Y + 2 > allowedStampRegion.CFrame.p.Y + allowedStampRegion.Size.Y/2 then + canSetCell = false + elseif cellPos.Y - 2 < allowedStampRegion.CFrame.p.Y - allowedStampRegion.Size.Y/2 then + canSetCell = false + elseif cellPos.Z + 2 > allowedStampRegion.CFrame.p.Z + allowedStampRegion.Size.Z/2 then + canSetCell = false + elseif cellPos.Z - 2 < allowedStampRegion.CFrame.p.Z - allowedStampRegion.Size.Z/2 then + canSetCell = false + end + end + end + + return canSetCell + end + return false + end + + + local function ResolveMegaClusterStamp(checkHighScalabilityStamp) + local cellSet = false + + local cluser = game.Workspace.Terrain + + local line = HighScalabilityLine.InternalLine + local cMax = game.Workspace.Terrain.MaxExtents.Max + local cMin = game.Workspace.Terrain.MaxExtents.Min + + local clusterMaterial = 1 -- default is grass + local clusterType = 0 -- default is brick + local clusterOrientation = 0 -- default is 0 rotation + + local autoWedgeClusterParts = false + if stampData.CurrentParts:FindFirstChild("AutoWedge") then autoWedgeClusterParts = true end + + if stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) then + clusterMaterial = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + if clusterMaterial:IsA("Vector3Value") then + clusterType = clusterMaterial.Value.Y + clusterOrientation = clusterMaterial.Value.Z + clusterMaterial = clusterMaterial.Value.X + elseif clusterMaterial:IsA("IntValue") then + clusterMaterial = clusterMaterial.Value + end + end + + if HighScalabilityLine.Adorn.Parent and HighScalabilityLine.Start and ((HighScalabilityLine.Dimensions > 1) or (line and line.magnitude > 0)) then + local startCell = game.Workspace.Terrain:WorldToCell(HighScalabilityLine.Start) + local xInc = {0,0,0} + local yInc = {0,0,0} + local zInc = {0,0,0} + + local cluster = game.Workspace.Terrain + + local incrementVect = {nil, nil, nil} + local stepVect = {Vector3.new(0, 0, 0), Vector3.new(0, 0, 0), Vector3.new(0, 0, 0)} + + local worldAxes = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} + + local lines = {} + if HighScalabilityLine.Dimensions > 1 then table.insert(lines, HighScalabilityLine.MoreLines[1]) end + if line and line.magnitude > 0 then table.insert(lines, line) end + if HighScalabilityLine.Dimensions > 2 then table.insert(lines, HighScalabilityLine.MoreLines[2]) end + + for i = 1, #lines do + lines[i] = Vector3.new(math.floor(lines[i].X+.5), math.floor(lines[i].Y+.5), math.floor(lines[i].Z+.5)) -- round to integers + + if lines[i].X > 0 then xInc[i] = 1 elseif lines[i].X < 0 then xInc[i] = -1 end + if lines[i].Y > 0 then yInc[i] = 1 elseif lines[i].Y < 0 then yInc[i] = -1 end + if lines[i].Z > 0 then zInc[i] = 1 elseif lines[i].Z < 0 then zInc[i] = -1 end + + incrementVect[i] = Vector3.new(xInc[i], yInc[i], zInc[i]) + if incrementVect[i].magnitude < .9 then incrementVect[i] = nil end + end + + + if not lines[2] then lines[2] = Vector3.new(0, 0, 0) end + if not lines[3] then lines[3] = Vector3.new(0, 0, 0) end + + local waterForceTag = stampData.CurrentParts:FindFirstChild("WaterForceTag", true) + local waterForceDirectionTag = stampData.CurrentParts:FindFirstChild("WaterForceDirectionTag", true) + + while (stepVect[3].magnitude*4 <= lines[3].magnitude) do + local outerStepVectIndex = 1 + while outerStepVectIndex < 4 do + stepVect[2] = Vector3.new(0, 0, 0) + while (stepVect[2].magnitude*4 <= lines[2].magnitude) do + local innerStepVectIndex = 1 + while innerStepVectIndex < 4 do + stepVect[1] = Vector3.new(0, 0, 0) + while (stepVect[1].magnitude*4 <= lines[1].magnitude) do + local stepVectSum = stepVect[1] + stepVect[2] + stepVect[3] + local cellPos = Vector3int16.new(startCell.X + stepVectSum.X, startCell.Y + stepVectSum.Y, startCell.Z + stepVectSum.Z) + if cellPos.X >= cMin.X and cellPos.Y >= cMin.Y and cellPos.Z >= cMin.Z and cellPos.X < cMax.X and cellPos.Y < cMax.Y and cellPos.Z < cMax.Z then + -- check if overlaps player or part + local okToStampTerrainBlock = checkTerrainBlockCollisions(cellPos, checkHighScalabilityStamp) + + if okToStampTerrainBlock then + if waterForceTag then + cluster:SetWaterCell(cellPos.X, cellPos.Y, cellPos.Z, Enum.WaterForce[waterForceTag.Value], Enum.WaterDirection[waterForceDirectionTag.Value]) + else + cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterMaterial, clusterType, clusterOrientation) + end + cellSet = true + + -- auto-wedge it? + if (autoWedgeClusterParts) then + game.Workspace.Terrain:AutowedgeCells(Region3int16.new(Vector3int16.new(cellPos.x - 1, cellPos.y - 1, cellPos.z - 1), + Vector3int16.new(cellPos.x + 1, cellPos.y + 1, cellPos.z + 1))) + end + end + end + stepVect[1] = stepVect[1] + incrementVect[1] + end + if incrementVect[2] then + while innerStepVectIndex < 4 and worldAxes[innerStepVectIndex]:Dot(incrementVect[2]) == 0 do + innerStepVectIndex = innerStepVectIndex + 1 + end + if innerStepVectIndex < 4 then + stepVect[2] = stepVect[2] + worldAxes[innerStepVectIndex] * worldAxes[innerStepVectIndex]:Dot(incrementVect[2]) + end + innerStepVectIndex = innerStepVectIndex + 1 + else + stepVect[2] = Vector3.new(1, 0, 0) + innerStepVectIndex = 4 -- skip all remaining loops + end + if (stepVect[2].magnitude*4 > lines[2].magnitude) then innerStepVectIndex = 4 end + end + end + if incrementVect[3] then + while outerStepVectIndex < 4 and worldAxes[outerStepVectIndex]:Dot(incrementVect[3]) == 0 do + outerStepVectIndex = outerStepVectIndex + 1 + end + if outerStepVectIndex < 4 then + stepVect[3] = stepVect[3] + worldAxes[outerStepVectIndex] * worldAxes[outerStepVectIndex]:Dot(incrementVect[3]) + end + outerStepVectIndex = outerStepVectIndex + 1 + else -- skip all remaining loops + stepVect[3] = Vector3.new(1, 0, 0) outerStepVectIndex = 4 + end + if (stepVect[3].magnitude*4 > lines[3].magnitude) then outerStepVectIndex = 4 end + end + end + end + + -- and also get rid of any HighScalabilityLine stuff if it's there + HighScalabilityLine.Start = nil + HighScalabilityLine.Adorn.Parent = nil + + -- Mark for undo. + if cellSet then + stampData.CurrentParts.Parent = nil + pcall(function() game:GetService("ChangeHistoryService"): SetWaypoint("StamperMulti") end) + end + + return cellSet + end + + local function DoStamperMouseUp(Mouse) + if not Mouse then + error("Error: RbxStamper.DoStamperMouseUp: Mouse is nil") + return false + end + if not Mouse:IsA("Mouse") then + error("Error: RbxStamper.DoStamperMouseUp: Mouse is of type", Mouse.className,"should be of type Mouse") + return false + end + + if not stampData.Dragger then + error("Error: RbxStamper.DoStamperMouseUp: stampData.Dragger is nil") + return false + end + + if not HighScalabilityLine then + return false + end + + local checkHighScalabilityStamp = nil + if stampInModel then + local canStamp = nil + local isHSLPart = isMegaClusterPart() + + if isHSLPart and + HighScalabilityLine and + HighScalabilityLine.Start and + HighScalabilityLine.InternalLine and + HighScalabilityLine.InternalLine.magnitude > 0 then -- we have an HSL line, test later + canStamp = true + checkHighScalabilityStamp = true + else + canStamp, checkHighScalabilityStamp = t.CanEditRegion(stampData.CurrentParts, allowedStampRegion) + end + + if not canStamp then + if stampFailedFunc then + stampFailedFunc() + end + return false + end + end + + -- if unstampable face, then don't let us stamp there! + if unstampableSurface then + flashRedBox() + return false + end + + -- recheck if we can stamp, as we just moved part + canStamp, checkHighScalabilityStamp = t.CanEditRegion(stampData.CurrentParts, allowedStampRegion) + if not canStamp then + if stampFailedFunc then + stampFailedFunc() + end + return false + end + + -- Prevent part from being stamped on top of a player + + local minBB, maxBB = getBoundingBoxInWorldCoordinates(stampData.CurrentParts) + + -- HotThoth's note: Now that above CurrentParts positioning has been commented out, to be truly correct, we would need to use the + -- value of configFound from the previous onStamperMouseMove call which moved the CurrentParts + -- Shouldn't this be true when lastTargetCFrame has been set and false otherwise? + configFound, targetCFrame = findConfigAtMouseTarget(Mouse, stampData) + + if configFound and not HighScalabilityLine.Adorn.Parent then + if clusterPartsInRegion(minBB + insertBoundingBoxOverlapVector, maxBB - insertBoundingBoxOverlapVector) then + flashRedBox() + return false + end + + local blockingParts = game.Workspace:FindPartsInRegion3(Region3.new(minBB + insertBoundingBoxOverlapVector, + maxBB - insertBoundingBoxOverlapVector), + stampData.CurrentParts, + 100) + + + for b = 1, #blockingParts do + if isBlocker(blockingParts[b]) then + flashRedBox() + return false + end + end + + local alreadyPushedUp = {} + -- if no blocking model below, then see if stamping on top of a character + for b = 1, #blockingParts do + if blockingParts[b].Parent and + not alreadyPushedUp[blockingParts[b].Parent] and + blockingParts[b].Parent:FindFirstChild("Humanoid") and + blockingParts[b].Parent:FindFirstChild("Humanoid"):IsA("Humanoid") then + --------------------------------------------------------------------------- + local blockingPersonTorso = blockingParts[b].Parent:FindFirstChild("Torso") + alreadyPushedUp[blockingParts[b].Parent] = true + + if blockingPersonTorso then + -- if so, let's push the person upwards so they pop on top of the stamped model/part (but only if there's space above them) + local newY = maxBB.Y + 3 + if spaceAboveCharacter(blockingPersonTorso, newY, stampData) then + blockingPersonTorso.CFrame = blockingPersonTorso.CFrame + Vector3.new(0, newY - blockingPersonTorso.CFrame.p.Y, 0) + else + -- if no space, we just error + flashRedBox() + return false + end + end + --------------------------------------------------------------------------- + end + end + + elseif (not configFound) and not (HighScalabilityLine.Start and HighScalabilityLine.Adorn.Parent) then -- if no config then only stamp if it's a real HSL! + resetHighScalabilityLine() + return false + end + + -- something will be stamped! so set the "StampedSomething" toggle to true + if game:FindFirstChild("Players") then + if game.Players["LocalPlayer"] then + if game.Players.LocalPlayer["Character"] then + local localChar = game.Players.LocalPlayer.Character + local stampTracker = localChar:FindFirstChild("StampTracker") + if stampTracker and not stampTracker.Value then + stampTracker.Value = true + end + end + end + end + + -- if we drew a line of mega parts, stamp them out + if HighScalabilityLine.Start and HighScalabilityLine.Adorn.Parent and isMegaClusterPart() then + if ResolveMegaClusterStamp(checkHighScalabilityStamp) or checkHighScalabilityStamp then + -- kill the ghost part + stampData.CurrentParts.Parent = nil + return true + end + end + + -- not High-Scalability-Line-Based, so behave normally [and get rid of any HSL stuff] + HighScalabilityLine.Start = nil + HighScalabilityLine.Adorn.Parent = nil + + local cluster = game.Workspace.Terrain + + -- if target point is in cluster, just use cluster:SetCell + if isMegaClusterPart() then + -- if targetCFrame is inside cluster, just set that cell to 1 and return + --local cellPos = cluster:WorldToCell(targetCFrame.p) + + local cellPos + if stampData.CurrentParts:IsA("Model") then cellPos = cluster:WorldToCell(stampData.CurrentParts:GetModelCFrame().p) + else cellPos = cluster:WorldToCell(stampData.CurrentParts.CFrame.p) end + + local cMax = game.Workspace.Terrain.MaxExtents.Max + local cMin = game.Workspace.Terrain.MaxExtents.Min + + if checkTerrainBlockCollisions(cellPos, false) then + + local clusterValues = stampData.CurrentParts:FindFirstChild("ClusterMaterial", true) + local waterForceTag = stampData.CurrentParts:FindFirstChild("WaterForceTag", true) + local waterForceDirectionTag = stampData.CurrentParts:FindFirstChild("WaterForceDirectionTag", true) + + if cellPos.X >= cMin.X and cellPos.Y >= cMin.Y and cellPos.Z >= cMin.Z and cellPos.X < cMax.X and cellPos.Y < cMax.Y and cellPos.Z < cMax.Z then + + if waterForceTag then + cluster:SetWaterCell(cellPos.X, cellPos.Y, cellPos.Z, Enum.WaterForce[waterForceTag.Value], Enum.WaterDirection[waterForceDirectionTag.Value]) + elseif not clusterValues then + cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, cellInfo.Material, cellInfo.clusterType, gInitial90DegreeRotations % 4) + elseif clusterValues:IsA("Vector3Value") then + cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterValues.Value.X, clusterValues.Value.Y, clusterValues.Value.Z) + else + cluster:SetCell(cellPos.X, cellPos.Y, cellPos.Z, clusterValues.Value, 0, 0) + end + + local autoWedgeClusterParts = false + if stampData.CurrentParts:FindFirstChild("AutoWedge") then autoWedgeClusterParts = true end + + -- auto-wedge it + if (autoWedgeClusterParts) then + game.Workspace.Terrain:AutowedgeCells( + Region3int16.new( + Vector3int16.new(cellPos.x - 1, cellPos.y - 1, cellPos.z - 1), + Vector3int16.new(cellPos.x + 1, cellPos.y + 1, cellPos.z + 1) + ) + ) + end + + -- kill the ghost part + stampData.CurrentParts.Parent = nil + + -- Mark for undo. It has to happen here or the selection display will come back also. + pcall(function() game:GetService("ChangeHistoryService"):SetWaypoint("StamperSingle") end) + return true + end + else + -- you tried to stamp a HSL-single part where one does not belong! + flashRedBox() + return false + end + end + + local function getPlayer() + if game:FindFirstChild("Players") then + if game.Players["LocalPlayer"] then + return game.Players.LocalPlayer + end + end + return nil + end + + + -- Post process: after positioning the part or model, restore transparency, material, anchored and collide states and create joints + if stampData.CurrentParts:IsA("Model") or stampData.CurrentParts:IsA("Tool") then + if stampData.CurrentParts:IsA("Model") then + -- Tyler's magical hack-code for allowing/preserving clones of both Surface and Manual Welds... just don't ask X< + local manualWeldTable = {} + local manualWeldParentTable = {} + saveTheWelds(stampData.CurrentParts, manualWeldTable, manualWeldParentTable) + stampData.CurrentParts:BreakJoints() + stampData.CurrentParts:MakeJoints() + restoreTheWelds(manualWeldTable, manualWeldParentTable) + end + + -- if it's a model, we also want to fill in the playerID and playerName tags, if it has those (e.g. for the friend-only door) + playerIdTag = stampData.CurrentParts:FindFirstChild("PlayerIdTag") + playerNameTag = stampData.CurrentParts:FindFirstChild("PlayerNameTag") + if playerIdTag ~= nil then + tempPlayerValue = getPlayer() + if tempPlayerValue ~= nil then playerIdTag.Value = tempPlayerValue.userId end + end + if playerNameTag ~= nil then + if game:FindFirstChild("Players") and game.Players["LocalPlayer"] then + tempPlayerValue = game.Players.LocalPlayer + if tempPlayerValue ~= nil then playerNameTag.Value = tempPlayerValue.Name end + end + end + -- ...and tag all inserted models for subsequent origin identification + -- if no RobloxModel tag already exists, then add it. + if stampData.CurrentParts:FindFirstChild("RobloxModel") == nil then + local stringTag = Instance.new("BoolValue", stampData.CurrentParts) + stringTag.Name = "RobloxModel" + + if stampData.CurrentParts:FindFirstChild("RobloxStamper") == nil then + local stringTag2 = Instance.new("BoolValue", stampData.CurrentParts) + stringTag2.Name = "RobloxStamper" + end + end + + else + stampData.CurrentParts:BreakJoints() + if stampData.CurrentParts:FindFirstChild("RobloxStamper") == nil then + local stringTag2 = Instance.new("BoolValue", stampData.CurrentParts) + stringTag2.Name = "RobloxStamper" + end + end + + -- make sure all the joints are activated before restoring anchor states + if not createJoints then game.JointsService:CreateJoinAfterMoveJoints() end + + -- Restore the original properties for all parts being stamped + for part, transparency in pairs(stampData.TransparencyTable) do + part.Transparency = transparency + end + for part, archivable in pairs(stampData.ArchivableTable) do + part.Archivable = archivable + end + for part, material in pairs(stampData.MaterialTable) do + part.Material = material + end + for part, collide in pairs(stampData.CanCollideTable) do + part.CanCollide = collide + end + for part, anchored in pairs(stampData.AnchoredTable) do + part.Anchored = anchored + end + for decal, transparency in pairs(stampData.DecalTransparencyTable) do + decal.Transparency = transparency + end + + for part, surfaces in pairs(stampData.SurfaceTypeTable) do + loadSurfaceTypes(part, surfaces) + end + + if isMegaClusterPart() then + stampData.CurrentParts.Transparency = 0 + end + + -- re-enable all seats + setSeatEnabledStatus(stampData.CurrentParts, true) + + stampData.TransparencyTable = nil + stampData.ArchivableTable = nil + stampData.MaterialTable = nil + stampData.CanCollideTable = nil + stampData.AnchoredTable = nil + stampData.SurfaceTypeTable = nil + + -- ...and tag all inserted models for subsequent origin identification + -- if no RobloxModel tag already exists, then add it. + if stampData.CurrentParts:FindFirstChild("RobloxModel") == nil then + local stringTag = Instance.new("BoolValue", stampData.CurrentParts) + stringTag.Name = "RobloxModel" + end + + -- and make sure we don't delete it, now that it's not a ghost part + if ghostRemovalScript then ghostRemovalScript.Parent = nil end + + --Re-enable the scripts + for index,script in pairs(stampData.DisabledScripts) do + script.Disabled = false + end + + --Now that they are all marked enabled, reinsert them into the world so they start running + for index,script in pairs(stampData.DisabledScripts) do + local oldParent = script.Parent + script.Parent = nil + script:Clone().Parent = oldParent + end + + -- clear out more data + stampData.DisabledScripts = nil + stampData.Dragger = nil + stampData.CurrentParts = nil + + pcall(function() game:GetService("ChangeHistoryService"): SetWaypoint("StampedObject") end) + return true + end + + local function pauseStamper() + for i = 1, #mouseCons do -- stop the mouse from doing anything + mouseCons[i]:disconnect() + mouseCons[i] = nil + end + mouseCons = {} + + if stampData and stampData.CurrentParts then -- remove our ghost part + stampData.CurrentParts.Parent = nil + stampData.CurrentParts:Remove() + end + + resetHighScalabilityLine() + + game.JointsService:ClearJoinAfterMoveJoints() + end + + + local function prepareUnjoinableSurfaces(modelCFrame, parts, whichSurface) + local AXIS_VECTORS = {Vector3.new(1, 0, 0), Vector3.new(0, 1, 0), Vector3.new(0, 0, 1)} -- maybe last one is negative? TODO: check this! + local isPositive = 1 + if whichSurface < 0 then isPositive = isPositive * -1 whichSurface = whichSurface*-1 end + local surfaceNormal = isPositive * modelCFrame:vectorToWorldSpace(AXIS_VECTORS[whichSurface]) + + for i = 1, #parts do + local currPart = parts[i] + + -- now just need to find which surface of currPart most closely match surfaceNormal and then set that to Unjoinable + local surfaceNormalInLocalCoords = currPart.CFrame:vectorToObjectSpace(surfaceNormal) + if math.abs(surfaceNormalInLocalCoords.X) > math.abs(surfaceNormalInLocalCoords.Y) then + if math.abs(surfaceNormalInLocalCoords.X) > math.abs(surfaceNormalInLocalCoords.Z) then + if surfaceNormalInLocalCoords.X > 0 then currPart.RightSurface = "Unjoinable" else currPart.LeftSurface = "Unjoinable" end + else + if surfaceNormalInLocalCoords.Z > 0 then currPart.BackSurface = "Unjoinable" else currPart.FrontSurface = "Unjoinable" end + end + else + if math.abs(surfaceNormalInLocalCoords.Y) > math.abs(surfaceNormalInLocalCoords.Z) then + if surfaceNormalInLocalCoords.Y > 0 then currPart.TopSurface = "Unjoinable" else currPart.BottomSurface = "Unjoinable" end + else + if surfaceNormalInLocalCoords.Z > 0 then currPart.BackSurface = "Unjoinable" else currPart.FrontSurface = "Unjoinable" end + end + end + end + end + + local function resumeStamper() + clone, parts = prepareModel(modelToStamp) + + if not clone or not parts then + return + end + + -- if we have unjoinable faces, then we want to change those surfaces to be Unjoinable + local unjoinableTag = clone:FindFirstChild("UnjoinableFaces", true) + if unjoinableTag then + for unjoinableSurface in string.gmatch(unjoinableTag.Value, "[^,]*") do + if tonumber(unjoinableSurface) then + if clone:IsA("Model") then + prepareUnjoinableSurfaces(clone:GetModelCFrame(), parts, tonumber(unjoinableSurface)) + else + prepareUnjoinableSurfaces(clone.CFrame, parts, tonumber(unjoinableSurface)) + end + end + end + end + + stampData.ErrorBox = errorBox + if stampInModel then + clone.Parent = stampInModel + else + clone.Parent = game.Workspace + end + + if clone:FindFirstChild("ClusterMaterial", true) then -- extract all info from vector + clusterMaterial = clone:FindFirstChild("ClusterMaterial", true) + if (clusterMaterial:IsA("Vector3Value")) then + cellInfo.Material = clusterMaterial.Value.X + cellInfo.clusterType = clusterMaterial.Value.Y + cellInfo.clusterOrientation = clusterMaterial.Value.Z + elseif clusterMaterial:IsA("IntValue") then + cellInfo.Material = clusterMaterial.Value + end + end + + pcall(function() mouseTarget = Mouse.Target end) + + if mouseTarget and mouseTarget.Parent:FindFirstChild("RobloxModel") == nil then + game.JointsService:SetJoinAfterMoveTarget(mouseTarget) + else + game.JointsService:SetJoinAfterMoveTarget(nil) + end + game.JointsService:ShowPermissibleJoints() + + for index, object in pairs(stampData.DisabledScripts) do + if object.Name == "GhostRemovalScript" then + object.Parent = stampData.CurrentParts + end + end + + stampData.Dragger = Instance.new("Dragger") + + --Begin a movement by faking a MouseDown signal + stampData.Dragger:MouseDown(parts[1], Vector3.new(0,0,0), parts) + stampData.Dragger:MouseUp() + + DoStamperMouseMove(Mouse) + + table.insert(mouseCons,Mouse.Move:connect(function() + if movingLock or stampUpLock then return end + movingLock = true + DoStamperMouseMove(Mouse) + movingLock = false + end)) + + table.insert(mouseCons,Mouse.Button1Down:connect(function() + DoStamperMouseDown(Mouse) + end)) + + table.insert(mouseCons,Mouse.Button1Up:connect(function() + stampUpLock = true + while movingLock do wait() end + stamped.Value = DoStamperMouseUp(Mouse) + resetHighScalabilityLine() + stampUpLock = false + end)) + + stamped.Value = false + end + + local function resetStamperState(newModelToStamp) + + -- if we have a new model, swap it out + if newModelToStamp then + if not newModelToStamp:IsA("Model") and not newModelToStamp:IsA("BasePart") then + error("resetStamperState: newModelToStamp (first arg) is not nil, but not a model or part!") + end + modelToStamp = newModelToStamp + end + + -- first clear our state + pauseStamper() + -- now lets load in the new model + resumeStamper() + + end + + -- load the model initially + resetStamperState() + + + -- setup the control table we pass back to the user + control.Stamped = stamped -- BoolValue that fires when user stamps + control.Paused = false + + control.LoadNewModel = function(newStampModel) -- allows us to specify a new stamper model to be used with this stamper + if newStampModel and not newStampModel:IsA("Model") and not newStampModel:IsA("BasePart") then + error("Control.LoadNewModel: newStampModel (first arg) is not a Model or Part!") + return nil + end + resetStamperState(newStampModel) + end + + control.ReloadModel = function() -- will automatically set stamper to get a new model of current model and start stamping with new model + resetStamperState() + end + + control.Pause = function() -- temporarily stops stamping, use resume to start up again + if not control.Paused then + pauseStamper() + control.Paused = true + else + print("RbxStamper Warning: Tried to call Control.Pause() when already paused") + end + end + + control.Resume = function() -- resumes stamping, if currently paused + if control.Paused then + resumeStamper() + control.Paused = false + else + print("RbxStamper Warning: Tried to call Control.Resume() without Pausing First") + end + end + + control.ResetRotation = function() -- resets the model rotation so new models are at default orientation + -- gInitial90DegreeRotations = 0 + -- Note: This function will not always work quite the way we want it to; we will have to build this out further so it works with + -- High-Scalability and with the new model orientation setting methods (model:ResetOrientationToIdentity()) [HotThoth] + end + + control.Destroy = function() -- Stops current Stamp operation and destroys control construct + for i = 1, #mouseCons do + mouseCons[i]:disconnect() + mouseCons[i] = nil + end + + if keyCon then + keyCon:disconnect() + end + + game.JointsService:ClearJoinAfterMoveJoints() + + if adorn then adorn:Destroy() end + if adornPart then adornPart:Destroy() end + if errorBox then errorBox:Destroy() end + if stampData then + if stampData["Dragger"] then + stampData.Dragger:Destroy() + end + if stampData.CurrentParts then + stampData.CurrentParts:Destroy() + end + end + if control and control["Stamped"] then + control.Stamped:Destroy() + end + control = nil + end + + return control +end + +t.Help = + function(funcNameOrFunc) + --input argument can be a string or a function. Should return a description (of arguments and expected side effects) + if funcNameOrFunc == "GetStampModel" or funcNameOrFunc == t.GetStampModel then + return "Function GetStampModel. Arguments: assetId, useAssetVersionId. assetId is the asset to load in, define useAssetVersionId as true if assetId is a version id instead of a relative assetId. Side effect: returns a model of the assetId, or a string with error message if something fails" + end + if funcNameOrFunc == "SetupStamperDragger" or funcNameOrFunc == t.SetupStamperDragger then + return "Function SetupStamperDragger. Side Effect: Creates 4x4 stamping mechanism for building out parts quickly. Arguments: ModelToStamp, Mouse, LegalStampCheckFunction. ModelToStamp should be a Model or Part, preferrably loaded from RbxStamper.GetStampModel and should have extents that are multiples of 4. Mouse should be a mouse object (obtained from things such as Tool.OnEquipped), used to drag parts around 'stamp' them out. LegalStampCheckFunction is optional, used as a callback with a table argument (table is full of instances about to be stamped). Function should return either true or false, false stopping the stamp action." + end + end + +return t diff --git a/app/files/CoreGui/89449008 b/app/files/CoreGui/89449008 new file mode 100644 index 0000000..1ecbd88 --- /dev/null +++ b/app/files/CoreGui/89449008 @@ -0,0 +1,876 @@ +-- A couple of necessary functions +local function waitForChild(instance, name) + assert(instance) + assert(name) + while not instance:FindFirstChild(name) do + print('Waiting for ...', instance, name) + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + assert(instance) + assert(property) + while not instance[property] do + instance.Changed:wait() + end +end + +local function IsTouchDevice() + local touchEnabled = false + pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) + return touchEnabled +end + + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +local RbxGui, msg = LoadLibrary("RbxGui") +if not RbxGui then print("could not find RbxGui!") return end + +--- Begin Locals +local StaticTabName = "gear" + +local backpack = script.Parent +local screen = script.Parent.Parent + +local backpackItems = {} +local buttons = {} + +local debounce = false +local browsingMenu = false + +local mouseEnterCons = {} +local mouseClickCons = {} + +local characterChildAddedCon = nil +local characterChildRemovedCon = nil +local backpackAddCon = nil + +local playerBackpack = waitForChild(player,"Backpack") + +waitForChild(backpack,"Tabs") + +waitForChild(backpack,"Gear") +local gearPreview = waitForChild(backpack.Gear,"GearPreview") + +local scroller = waitForChild(backpack.Gear,"GearGridScrollingArea") + +local currentLoadout = waitForChild(backpack.Parent,"CurrentLoadout") + +local grid = waitForChild(backpack.Gear,"GearGrid") +local gearButton = waitForChild(grid,"GearButton") + +local swapSlot = waitForChild(script.Parent,"SwapSlot") + +local backpackManager = waitForChild(script.Parent,"CoreScripts/BackpackScripts/BackpackManager") +local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") +local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") +local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") +local resizeEvent = waitForChild(backpackManager,"ResizeEvent") +local searchRequestedEvent = waitForChild(backpackManager,"SearchRequestedEvent") +local tellBackpackReadyFunc = waitForChild(backpackManager,"BackpackReady") + +-- creating scroll bar early as to make sure items get placed correctly +local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(nil, "grid", Vector2.new(6, 6)) + +scrollFrame.Position = UDim2.new(0,0,0,30) +scrollFrame.Size = UDim2.new(1,0,1,-30) +scrollFrame.Parent = backpack.Gear.GearGrid + +local scrollBar = Instance.new("Frame") +scrollBar.Name = "ScrollBar" +scrollBar.BackgroundTransparency = 0.9 +scrollBar.BackgroundColor3 = Color3.new(1,1,1) +scrollBar.BorderSizePixel = 0 +scrollBar.Size = UDim2.new(0, 17, 1, -36) +scrollBar.Position = UDim2.new(0,0,0,18) +scrollBar.Parent = scroller + +scrollDown.Position = UDim2.new(0,0,1,-17) + +scrollUp.Parent = scroller +scrollDown.Parent = scroller + +local scrollFrameLoadout, scrollUpLoadout, scrollDownLoadout, recalculateScrollLoadout = RbxGui.CreateScrollingFrame() + +scrollFrameLoadout.Position = UDim2.new(0,0,0,0) +scrollFrameLoadout.Size = UDim2.new(1,0,1,0) +scrollFrameLoadout.Parent = backpack.Gear.GearLoadouts.LoadoutsList + +local LoadoutButton = Instance.new("TextButton") +LoadoutButton.RobloxLocked = true +LoadoutButton.Name = "LoadoutButton" +LoadoutButton.Font = Enum.Font.ArialBold +LoadoutButton.FontSize = Enum.FontSize.Size14 +LoadoutButton.Position = UDim2.new(0,0,0,0) +LoadoutButton.Size = UDim2.new(1,0,0,32) +LoadoutButton.Style = Enum.ButtonStyle.RobloxButton +LoadoutButton.Text = "Loadout #1" +LoadoutButton.TextColor3 = Color3.new(1,1,1) +LoadoutButton.Parent = scrollFrameLoadout + +local LoadoutButtonTwo = LoadoutButton:clone() +LoadoutButtonTwo.Text = "Loadout #2" +LoadoutButtonTwo.Parent = scrollFrameLoadout + +local LoadoutButtonThree = LoadoutButton:clone() +LoadoutButtonThree.Text = "Loadout #3" +LoadoutButtonThree.Parent = scrollFrameLoadout + +local LoadoutButtonFour = LoadoutButton:clone() +LoadoutButtonFour.Text = "Loadout #4" +LoadoutButtonFour.Parent = scrollFrameLoadout + +local scrollBarLoadout = Instance.new("Frame") +scrollBarLoadout.Name = "ScrollBarLoadout" +scrollBarLoadout.BackgroundTransparency = 0.9 +scrollBarLoadout.BackgroundColor3 = Color3.new(1,1,1) +scrollBarLoadout.BorderSizePixel = 0 +scrollBarLoadout.Size = UDim2.new(0, 17, 1, -36) +scrollBarLoadout.Position = UDim2.new(0,0,0,18) +scrollBarLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + +scrollDownLoadout.Position = UDim2.new(0,0,1,-17) + +scrollUpLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea +scrollDownLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + + +-- Begin Functions +function removeFromMap(map,object) + for i = 1, #map do + if map[i] == object then + table.remove(map,i) + break + end + end +end + +function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resize() + local size = 0 + if gearPreview.AbsoluteSize.Y > gearPreview.AbsoluteSize.X then + size = gearPreview.AbsoluteSize.X * 0.75 + else + size = gearPreview.AbsoluteSize.Y * 0.75 + end + + waitForChild(gearPreview,"GearImage") + gearPreview.GearImage.Size = UDim2.new(0,size,0,size) + gearPreview.GearImage.Position = UDim2.new(0,gearPreview.AbsoluteSize.X/2 - size/2,0.75,-size) + + resizeGrid() +end + +function addToGrid(child) + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + return + end + end + if child:FindFirstChild("RobloxBuildTool") then return end + + for i,v in pairs(backpackItems) do -- check to see if we already have this gear registered + if v == child then return end + end + + table.insert(backpackItems,child) + + local changeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if buttons[child] then + if buttons[child].Image == "" then + buttons[child].GearText.Text = child.Name + end + end + end + end) + local ancestryCon = nil + ancestryCon = child.AncestryChanged:connect(function(theChild,theParent) + local thisObject = nil + for k,v in pairs(backpackItems) do + if v == child then + thisObject = v + break + end + end + + waitForProperty(player,"Character") + waitForChild(player,"Backpack") + if (child.Parent ~= player.Backpack and child.Parent ~= player.Character) then + if ancestryCon then ancestryCon:disconnect() end + if changeCon then changeCon:disconnect() end + + for k,v in pairs(backpackItems) do + if v == thisObject then + if mouseEnterCons[buttons[v]] then mouseEnterCons[buttons[v]]:disconnect() end + if mouseClickCons[buttons[v]] then mouseClickCons[buttons[v]]:disconnect() end + buttons[v].Parent = nil + buttons[v] = nil + break + end + end + + removeFromMap(backpackItems,thisObject) + + resizeGrid() + else + resizeGrid() + end + updateGridActive() + end) + resizeGrid() +end + +function buttonClick(button) + if button:FindFirstChild("UnequipContextMenu") and not button.Active then + button.UnequipContextMenu.Visible = true + browsingMenu = true + end +end + +function previewGear(button) + if not browsingMenu then + gearPreview.Visible = false + gearPreview.GearImage.Image = button.Image + gearPreview.GearStats.GearName.Text = button.GearReference.Value.Name + end +end + +function findEmptySlot() + local smallestNum = nil + local loadout = currentLoadout:GetChildren() + for i = 1, #loadout do + if loadout[i]:IsA("Frame") and #loadout[i]:GetChildren() <= 0 then + local frameNum = tonumber(string.sub(loadout[i].Name,5)) + if frameNum == 0 then frameNum = 10 end + if not smallestNum or (smallestNum > frameNum) then + smallestNum = frameNum + end + end + end + if smallestNum == 10 then smallestNum = 0 end + return smallestNum +end + +function checkForSwap(button,x,y) + local loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + if x >= loadoutChildren[i].AbsolutePosition.x and x <= (loadoutChildren[i].AbsolutePosition.x + loadoutChildren[i].AbsoluteSize.x) then + if y >= loadoutChildren[i].AbsolutePosition.y and y <= (loadoutChildren[i].AbsolutePosition.y + loadoutChildren[i].AbsoluteSize.y) then + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + swapGearSlot(slot,button) + return true + end + end + end + end + return false +end + +function resizeGrid() + for k,v in pairs(backpackItems) do + if not v:FindFirstChild("RobloxBuildTool") then + if not buttons[v] then + local buttonClone = gearButton:clone() + buttonClone.Parent = grid.ScrollingFrame + buttonClone.Visible = true + buttonClone.Image = v.TextureId + if buttonClone.Image == "" then + buttonClone.GearText.Text = v.Name + end + + buttonClone.GearReference.Value = v + buttonClone.Draggable = true + buttons[v] = buttonClone + + + if not IsTouchDevice() then + local unequipMenu = getGearContextMenu() + + + unequipMenu.Visible = false + unequipMenu.Parent = buttonClone + end + + local beginPos = nil + buttonClone.DragBegin:connect(function(value) + waitForChild(buttonClone, 'Background') + buttonClone['Background'].ZIndex = 10 + buttonClone.ZIndex = 10 + beginPos = value + end) + buttonClone.DragStopped:connect(function(x,y) + waitForChild(buttonClone, 'Background') + buttonClone['Background'].ZIndex = 1.0 + buttonClone.ZIndex = 2 + if beginPos ~= buttonClone.Position then + if not checkForSwap(buttonClone,x,y) then + buttonClone:TweenPosition(beginPos,Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.5, true) + buttonClone.Draggable = false + delay(0.5,function() + buttonClone.Draggable = true + end) + else + buttonClone.Position = beginPos + end + end + end) + local clickTime = tick() + mouseEnterCons[buttonClone] = buttonClone.MouseEnter:connect(function() previewGear(buttonClone) end) + mouseClickCons[buttonClone] = buttonClone.MouseButton1Click:connect(function() + local newClickTime = tick() + if buttonClone.Active and (newClickTime - clickTime) < 0.5 then + local slot = findEmptySlot() + if slot then + buttonClone.ZIndex = 1 + swapGearSlot(slot,buttonClone) + end + else + buttonClick(buttonClone) + end + clickTime = newClickTime + end) + end + end + end + recalculateScroll() +end + +function showPartialGrid(subset) + for k,v in pairs(buttons) do + v.Parent = nil + end + if subset then + for k,v in pairs(subset) do + v.Parent = grid.ScrollingFrame + end + end + recalculateScroll() +end + +function showEntireGrid() + for k,v in pairs(buttons) do + v.Parent = grid.ScrollingFrame + end + recalculateScroll() +end + +function inLoadout(gear) + local children = currentLoadout:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + local button = children[i]:GetChildren() + if #button > 0 then + if button[1].GearReference.Value and button[1].GearReference.Value == gear then + return true + end + end + end + end + return false +end + +function updateGridActive() + for k,v in pairs(backpackItems) do + if buttons[v] then + local gear = nil + local gearRef = buttons[v]:FindFirstChild("GearReference") + + if gearRef then gear = gearRef.Value end + + if not gear then + buttons[v].Active = false + elseif inLoadout(gear) then + buttons[v].Active = false + else + buttons[v].Active = true + end + end + end +end + +function centerGear(loadoutChildren) + local gearButtons = {} + local lastSlotAdd = nil + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end +end + +function tabClickHandler(tabName) + if tabName == StaticTabName then + backpackOpenHandler(tabName) + else + backpackCloseHandler(tabName) + end +end + +function backpackOpenHandler(currentTab) + if currentTab and currentTab ~= StaticTabName then + backpack.Gear.Visible = false + return + end + + backpack.Gear.Visible = true + updateGridActive() + + resizeGrid() + resize() + tellBackpackReadyFunc:Invoke() +end + +function backpackCloseHandler(currentTab) + if currentTab and currentTab ~= StaticTabName then + backpack.Gear.Visible = false + return + end + + backpack.Gear.Visible = false + + resizeGrid() + resize() + tellBackpackReadyFunc:Invoke() +end + +function loadoutCheck(child, selectState) + if not child:IsA("ImageButton") then return end + for k,v in pairs(backpackItems) do + if buttons[v] then + if child:FindFirstChild("GearReference") and buttons[v]:FindFirstChild("GearReference") then + if buttons[v].GearReference.Value == child.GearReference.Value then + buttons[v].Active = selectState + break + end + end + end + end +end + +function clearPreview() + gearPreview.GearImage.Image = "" + gearPreview.GearStats.GearName.Text = "" +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + stuff[i].Parent = playerBackpack + end + end +end + +function equipGear(physGear) + removeAllEquippedGear(physGear) + physGear.Parent = player.Character + updateGridActive() +end + +function unequipGear(physGear) + physGear.Parent = playerBackpack + updateGridActive() +end + +function highlight(button) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) +end +function clearHighlight(button) + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function swapGearSlot(slot,gearButton) + if not swapSlot.Value then -- signal loadout to swap a gear out + swapSlot.Slot.Value = slot + swapSlot.GearButton.Value = gearButton + swapSlot.Value = true + updateGridActive() + end +end + + +local UnequipGearMenuClick = function(element, menu) + if type(element.Action) ~= "number" then return end + local num = element.Action + if num == 1 then -- remove from loadout + unequipGear(menu.Parent.GearReference.Value) + local inventoryButton = menu.Parent + local gearToUnequip = inventoryButton.GearReference.Value + local loadoutChildren = currentLoadout:GetChildren() + local slot = -1 + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + local button = loadoutChildren[i]:GetChildren() + if button[1] and button[1].GearReference.Value == gearToUnequip then + slot = button[1].SlotNumber.Text + break + end + end + end + swapGearSlot(slot,nil) + end +end + +function setupCharacterConnections() + + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + + -- make sure we get all the children + local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() + for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) + end + + if characterChildAddedCon then characterChildAddedCon:disconnect() end + characterChildAddedCon = + game.Players.LocalPlayer.Character.ChildAdded:connect(function(child) + addToGrid(child) + updateGridActive() + end) + + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + characterChildRemovedCon = + game.Players.LocalPlayer.Character.ChildRemoved:connect(function(child) + updateGridActive() + end) + + wait() + centerGear(currentLoadout:GetChildren()) +end + +function removeCharacterConnections() + if characterChildAddedCon then characterChildAddedCon:disconnect() end + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + if backpackAddCon then backpackAddCon:disconnect() end +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function filterGear(terms) + local filteredGear = {} + for k,v in pairs(backpackItems) do + if buttons[v] then + local gearString = string.lower(buttons[v].GearReference.Value.Name) + gearString = trim(gearString) + for i = 1, #terms do + if string.match(gearString,terms[i]) then + table.insert(filteredGear,buttons[v]) + break + end + end + end + end + + return filteredGear +end +function splitByWhitespace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 0 then + table.insert(terms,token) + end + end + return terms +end +function showSearchGear(searchTerms) + if not backpack.Gear.Visible then return end -- currently not active tab + + local searchTermTable = splitByWhitespace(searchTerms) + if searchTermTable and (#searchTermTable > 0) then + currSearchTerms = searchTermTable + else + currSearchTerms = nil + end + + if searchTermTable == nil then + showEntireGrid() + return + end + + local filteredButtons = filterGear(currSearchTerms) + showPartialGrid(filteredButtons) +end + +function nukeBackpack() + while #buttons > 0 do + table.remove(buttons) + end + buttons = {} + while #backpackItems > 0 do + table.remove(backpackItems) + end + backpackItems = {} + local scrollingFrameChildren = grid.ScrollingFrame:GetChildren() + for i = 1, #scrollingFrameChildren do + scrollingFrameChildren[i]:remove() + end +end + +function getGearContextMenu() + local gearContextMenu = Instance.new("Frame") + gearContextMenu.Active = true + gearContextMenu.Name = "UnequipContextMenu" + gearContextMenu.Size = UDim2.new(0,115,0,70) + gearContextMenu.Position = UDim2.new(0,-16,0,-16) + gearContextMenu.BackgroundTransparency = 1 + gearContextMenu.Visible = false + + local gearContextMenuButton = Instance.new("TextButton") + gearContextMenuButton.Name = "UnequipContextMenuButton" + gearContextMenuButton.Text = "" + gearContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault + gearContextMenuButton.ZIndex = 8 + gearContextMenuButton.Size = UDim2.new(1, 0, 1, -20) + gearContextMenuButton.Visible = true + gearContextMenuButton.Parent = gearContextMenu + + local elementHeight = 12 + + local contextMenuElements = {} + local contextMenuElementsName = {"Remove Hotkey"} + + for i = 1, #contextMenuElementsName do + local element = {} + element.Type = "Button" + element.Text = contextMenuElementsName[i] + element.Action = i + element.DoIt = UnequipGearMenuClick + table.insert(contextMenuElements,element) + end + + for i, contextElement in ipairs(contextMenuElements) do + local element = contextElement + if element.Type == "Button" then + local button = Instance.new("TextButton") + button.Name = "UnequipContextButton" .. i + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderSizePixel = 0 + button.TextXAlignment = Enum.TextXAlignment.Left + button.Text = " " .. contextElement.Text + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size14 + button.Size = UDim2.new(1, 8, 0, elementHeight) + button.Position = UDim2.new(0,0,0,elementHeight * i) + button.TextColor3 = Color3.new(1,1,1) + button.ZIndex = 9 + button.Parent = gearContextMenuButton + + if not IsTouchDevice() then + + button.MouseButton1Click:connect(function() + if button.Active and not gearContextMenu.Parent.Active then + local success, result = pcall(function() element.DoIt(element, gearContextMenu) end) + browsingMenu = false + gearContextMenu.Visible = false + clearHighlight(button) + clearPreview() + end + end) + + button.MouseEnter:connect(function() + if button.Active and gearContextMenu.Parent.Active then + highlight(button) + end + end) + button.MouseLeave:connect(function() + if button.Active and gearContextMenu.Parent.Active then + clearHighlight(button) + end + end) + end + + contextElement.Button = button + contextElement.Element = button + elseif element.Type == "Label" then + local frame = Instance.new("Frame") + frame.Name = "ContextLabel" .. i + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1, 8, 0, elementHeight) + + local label = Instance.new("TextLabel") + label.Name = "Text1" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Left + label.Font = Enum.Font.ArialBold + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.0, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label1 = label + + if element.GetText2 then + label = Instance.new("TextLabel") + label.Name = "Text2" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Right + label.Font = Enum.Font.Arial + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.5, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label2 = label + end + frame.Parent = gearContextMenuButton + element.Label = frame + element.Element = frame + end + end + + gearContextMenu.ZIndex = 4 + gearContextMenu.MouseLeave:connect(function() + browsingMenu = false + gearContextMenu.Visible = false + clearPreview() + end) + robloxLock(gearContextMenu) + + return gearContextMenu +end + +function coreGuiChanged(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then + if not enabled then + backpack.Gear.Visible = false + end + end +end + + +local backpackChildren = player.Backpack:GetChildren() +for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) +end + +------------------------- Start Lifelong Connections ----------------------- + + +resizeEvent.Event:connect(function(absSize) + if debounce then return end + + debounce = true + wait() + resize() + resizeGrid() + debounce = false +end) + +currentLoadout.ChildAdded:connect(function(child) loadoutCheck(child, false) end) +currentLoadout.ChildRemoved:connect(function(child) loadoutCheck(child, true) end) + +currentLoadout.DescendantAdded:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + centerGear(currentLoadout:GetChildren()) + end +end) +currentLoadout.DescendantRemoving:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + wait() + centerGear(currentLoadout:GetChildren()) + end +end) + +grid.MouseEnter:connect(function() clearPreview() end) +grid.MouseLeave:connect(function() clearPreview() end) + +player.CharacterRemoving:connect(function() + removeCharacterConnections() + nukeBackpack() +end) +player.CharacterAdded:connect(function() setupCharacterConnections() end) + +player.ChildAdded:connect(function(child) + if child:IsA("Backpack") then + playerBackpack = child + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + end +end) + +swapSlot.Changed:connect(function() + if not swapSlot.Value then + updateGridActive() + end +end) + +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + loadoutChildren[i].ChildRemoved:connect(function() + updateGridActive() + end) + loadoutChildren[i].ChildAdded:connect(function() + updateGridActive() + end) + end +end +------------------------- End Lifelong Connections ----------------------- + +pcall(function() + coreGuiChanged(Enum.CoreGuiType.Backpack, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Backpack)) + Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) +end) + +resize() +resizeGrid() + +-- make sure any items in the loadout are accounted for in inventory +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + loadoutCheck(loadoutChildren[i], false) +end +if not backpack.Visible then centerGear(currentLoadout:GetChildren()) end + +-- make sure that inventory is listening to gear reparenting +if characterChildAddedCon == nil and game.Players.LocalPlayer["Character"] then + setupCharacterConnections() +end +if not backpackAddCon then + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) +end + +backpackOpenEvent.Event:connect(backpackOpenHandler) +backpackCloseEvent.Event:connect(backpackCloseHandler) +tabClickedEvent.Event:connect(tabClickHandler) +searchRequestedEvent.Event:connect(showSearchGear) + +recalculateScrollLoadout() \ No newline at end of file diff --git a/app/files/CoreGui/89449009 b/app/files/CoreGui/89449009 new file mode 100644 index 0000000..2100eb3 --- /dev/null +++ b/app/files/CoreGui/89449009 @@ -0,0 +1,842 @@ +-- A couple of necessary functions +local function waitForChild(instance, name) + assert(instance) + assert(name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + assert(instance) + assert(property) + while not instance[property] do + instance.Changed:wait() + end +end + +waitForChild(game,"Players") +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + +local RbxGui, msg = LoadLibrary("RbxGui") +if not RbxGui then print("could not find RbxGui!") return end + +--- Begin Locals +local StaticTabName = "gear" + +local backpack = script.Parent +local screen = script.Parent.Parent + +local backpackItems = {} +local buttons = {} + +local debounce = false +local browsingMenu = false + +local mouseEnterCons = {} +local mouseClickCons = {} + +local characterChildAddedCon = nil +local characterChildRemovedCon = nil +local backpackAddCon = nil + +local playerBackpack = waitForChild(player,"Backpack") + +waitForChild(backpack,"Tabs") + +waitForChild(backpack,"Gear") +local gearPreview = waitForChild(backpack.Gear,"GearPreview") + +local scroller = waitForChild(backpack.Gear,"GearGridScrollingArea") + +local currentLoadout = waitForChild(backpack.Parent,"CurrentLoadout") + +local grid = waitForChild(backpack.Gear,"GearGrid") +local gearButton = waitForChild(grid,"GearButton") + +local swapSlot = waitForChild(script.Parent,"SwapSlot") + +local backpackManager = waitForChild(script.Parent,"CoreScripts/BackpackScripts/BackpackManager") +local backpackOpenEvent = waitForChild(backpackManager,"BackpackOpenEvent") +local backpackCloseEvent = waitForChild(backpackManager,"BackpackCloseEvent") +local tabClickedEvent = waitForChild(backpackManager,"TabClickedEvent") +local resizeEvent = waitForChild(backpackManager,"ResizeEvent") +local searchRequestedEvent = waitForChild(backpackManager,"SearchRequestedEvent") +local tellBackpackReadyFunc = waitForChild(backpackManager,"BackpackReady") + +-- creating scroll bar early as to make sure items get placed correctly +local scrollFrame, scrollUp, scrollDown, recalculateScroll = RbxGui.CreateScrollingFrame(nil,"grid") + +scrollFrame.Position = UDim2.new(0,0,0,30) +scrollFrame.Size = UDim2.new(1,0,1,-30) +scrollFrame.Parent = backpack.Gear.GearGrid + +local scrollBar = Instance.new("Frame") +scrollBar.Name = "ScrollBar" +scrollBar.BackgroundTransparency = 0.9 +scrollBar.BackgroundColor3 = Color3.new(1,1,1) +scrollBar.BorderSizePixel = 0 +scrollBar.Size = UDim2.new(0, 17, 1, -36) +scrollBar.Position = UDim2.new(0,0,0,18) +scrollBar.Parent = scroller + +scrollDown.Position = UDim2.new(0,0,1,-17) + +scrollUp.Parent = scroller +scrollDown.Parent = scroller + +local scrollFrameLoadout, scrollUpLoadout, scrollDownLoadout, recalculateScrollLoadout = RbxGui.CreateScrollingFrame() + +scrollFrameLoadout.Position = UDim2.new(0,0,0,0) +scrollFrameLoadout.Size = UDim2.new(1,0,1,0) +scrollFrameLoadout.Parent = backpack.Gear.GearLoadouts.LoadoutsList + +local LoadoutButton = Instance.new("TextButton") +LoadoutButton.RobloxLocked = true +LoadoutButton.Name = "LoadoutButton" +LoadoutButton.Font = Enum.Font.ArialBold +LoadoutButton.FontSize = Enum.FontSize.Size14 +LoadoutButton.Position = UDim2.new(0,0,0,0) +LoadoutButton.Size = UDim2.new(1,0,0,32) +LoadoutButton.Style = Enum.ButtonStyle.RobloxButton +LoadoutButton.Text = "Loadout #1" +LoadoutButton.TextColor3 = Color3.new(1,1,1) +LoadoutButton.Parent = scrollFrameLoadout + +local LoadoutButtonTwo = LoadoutButton:clone() +LoadoutButtonTwo.Text = "Loadout #2" +LoadoutButtonTwo.Parent = scrollFrameLoadout + +local LoadoutButtonThree = LoadoutButton:clone() +LoadoutButtonThree.Text = "Loadout #3" +LoadoutButtonThree.Parent = scrollFrameLoadout + +local LoadoutButtonFour = LoadoutButton:clone() +LoadoutButtonFour.Text = "Loadout #4" +LoadoutButtonFour.Parent = scrollFrameLoadout + +local scrollBarLoadout = Instance.new("Frame") +scrollBarLoadout.Name = "ScrollBarLoadout" +scrollBarLoadout.BackgroundTransparency = 0.9 +scrollBarLoadout.BackgroundColor3 = Color3.new(1,1,1) +scrollBarLoadout.BorderSizePixel = 0 +scrollBarLoadout.Size = UDim2.new(0, 17, 1, -36) +scrollBarLoadout.Position = UDim2.new(0,0,0,18) +scrollBarLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + +scrollDownLoadout.Position = UDim2.new(0,0,1,-17) + +scrollUpLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea +scrollDownLoadout.Parent = backpack.Gear.GearLoadouts.GearLoadoutsScrollingArea + + +-- Begin Functions +function removeFromMap(map,object) + for i = 1, #map do + if map[i] == object then + table.remove(map,i) + break + end + end +end + +function robloxLock(instance) + instance.RobloxLocked = true + children = instance:GetChildren() + if children then + for i, child in ipairs(children) do + robloxLock(child) + end + end +end + +function resize() + local size = 0 + if gearPreview.AbsoluteSize.Y > gearPreview.AbsoluteSize.X then + size = gearPreview.AbsoluteSize.X * 0.75 + else + size = gearPreview.AbsoluteSize.Y * 0.75 + end + + waitForChild(gearPreview,"GearImage") + gearPreview.GearImage.Size = UDim2.new(0,size,0,size) + gearPreview.GearImage.Position = UDim2.new(0,gearPreview.AbsoluteSize.X/2 - size/2,0.75,-size) + + resizeGrid() +end + +function addToGrid(child) + if not child:IsA("Tool") then + if not child:IsA("HopperBin") then + return + end + end + if child:FindFirstChild("RobloxBuildTool") then return end + + for i,v in pairs(backpackItems) do -- check to see if we already have this gear registered + if v == child then return end + end + + table.insert(backpackItems,child) + + local changeCon = child.Changed:connect(function(prop) + if prop == "Name" then + if buttons[child] then + if buttons[child].Image == "" then + buttons[child].GearText.Text = child.Name + end + end + end + end) + local ancestryCon = nil + ancestryCon = child.AncestryChanged:connect(function(theChild,theParent) + local thisObject = nil + for k,v in pairs(backpackItems) do + if v == child then + thisObject = v + break + end + end + + waitForProperty(player,"Character") + waitForChild(player,"Backpack") + if (child.Parent ~= player.Backpack and child.Parent ~= player.Character) then + if ancestryCon then ancestryCon:disconnect() end + if changeCon then changeCon:disconnect() end + + for k,v in pairs(backpackItems) do + if v == thisObject then + if mouseEnterCons[buttons[v]] then mouseEnterCons[buttons[v]]:disconnect() end + if mouseClickCons[buttons[v]] then mouseClickCons[buttons[v]]:disconnect() end + buttons[v].Parent = nil + buttons[v] = nil + break + end + end + + removeFromMap(backpackItems,thisObject) + + resizeGrid() + else + resizeGrid() + end + updateGridActive() + end) + resizeGrid() +end + +function buttonClick(button) + if button:FindFirstChild("UnequipContextMenu") and not button.Active then + button.UnequipContextMenu.Visible = true + browsingMenu = true + end +end + +function previewGear(button) + if not browsingMenu then + gearPreview.GearImage.Image = button.Image + gearPreview.GearStats.GearName.Text = button.GearReference.Value.Name + end +end + +function findEmptySlot() + local smallestNum = nil + local loadout = currentLoadout:GetChildren() + for i = 1, #loadout do + if loadout[i]:IsA("Frame") and #loadout[i]:GetChildren() <= 0 then + local frameNum = tonumber(string.sub(loadout[i].Name,5)) + if frameNum == 0 then frameNum = 10 end + if not smallestNum or (smallestNum > frameNum) then + smallestNum = frameNum + end + end + end + if smallestNum == 10 then smallestNum = 0 end + return smallestNum +end + +function checkForSwap(button,x,y) + local loadoutChildren = currentLoadout:GetChildren() + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + if x >= loadoutChildren[i].AbsolutePosition.x and x <= (loadoutChildren[i].AbsolutePosition.x + loadoutChildren[i].AbsoluteSize.x) then + if y >= loadoutChildren[i].AbsolutePosition.y and y <= (loadoutChildren[i].AbsolutePosition.y + loadoutChildren[i].AbsoluteSize.y) then + local slot = tonumber(string.sub(loadoutChildren[i].Name,5)) + swapGearSlot(slot,button) + return true + end + end + end + end + return false +end + +function resizeGrid() + for k,v in pairs(backpackItems) do + if not v:FindFirstChild("RobloxBuildTool") then + if not buttons[v] then + local buttonClone = gearButton:clone() + buttonClone.Parent = grid.ScrollingFrame + buttonClone.Visible = true + buttonClone.Image = v.TextureId + if buttonClone.Image == "" then + buttonClone.GearText.Text = v.Name + end + + buttonClone.GearReference.Value = v + buttonClone.Draggable = true + buttons[v] = buttonClone + + local unequipMenu = getGearContextMenu() + + unequipMenu.Visible = false + unequipMenu.Parent = buttonClone + + local beginPos = nil + buttonClone.DragBegin:connect(function(value) + buttonClone.ZIndex = 9 + beginPos = value + end) + buttonClone.DragStopped:connect(function(x,y) + buttonClone.ZIndex = 1 + if beginPos ~= buttonClone.Position then + if not checkForSwap(buttonClone,x,y) then + buttonClone:TweenPosition(beginPos,Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.5, true) + buttonClone.Draggable = false + delay(0.5,function() + buttonClone.Draggable = true + end) + else + buttonClone.Position = beginPos + end + end + end) + local clickTime = tick() + mouseEnterCons[buttonClone] = buttonClone.MouseEnter:connect(function() previewGear(buttonClone) end) + mouseClickCons[buttonClone] = buttonClone.MouseButton1Click:connect(function() + local newClickTime = tick() + if buttonClone.Active and (newClickTime - clickTime) < 0.5 then + local slot = findEmptySlot() + if slot then + buttonClone.ZIndex = 1 + swapGearSlot(slot,buttonClone) + end + else + buttonClick(buttonClone) + end + clickTime = newClickTime + end) + end + end + end + recalculateScroll() +end + +function showPartialGrid(subset) + for k,v in pairs(buttons) do + v.Parent = nil + end + if subset then + for k,v in pairs(subset) do + v.Parent = grid.ScrollingFrame + end + end + recalculateScroll() +end + +function showEntireGrid() + for k,v in pairs(buttons) do + v.Parent = grid.ScrollingFrame + end + recalculateScroll() +end + +function inLoadout(gear) + local children = currentLoadout:GetChildren() + for i = 1, #children do + if children[i]:IsA("Frame") then + local button = children[i]:GetChildren() + if #button > 0 then + if button[1].GearReference.Value and button[1].GearReference.Value == gear then + return true + end + end + end + end + return false +end + +function updateGridActive() + for k,v in pairs(backpackItems) do + if buttons[v] then + local gear = nil + local gearRef = buttons[v]:FindFirstChild("GearReference") + + if gearRef then gear = gearRef.Value end + + if not gear then + buttons[v].Active = false + elseif inLoadout(gear) then + buttons[v].Active = false + else + buttons[v].Active = true + end + end + end +end + +function centerGear(loadoutChildren) + local gearButtons = {} + local lastSlotAdd = nil + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and #loadoutChildren[i]:GetChildren() > 0 then + if loadoutChildren[i].Name == "Slot0" then + lastSlotAdd = loadoutChildren[i] + else + table.insert(gearButtons, loadoutChildren[i]) + end + end + end + if lastSlotAdd then table.insert(gearButtons,lastSlotAdd) end + + local startPos = ( 1 - (#gearButtons * 0.1) ) / 2 + for i = 1, #gearButtons do + gearButtons[i]:TweenPosition(UDim2.new(startPos + ((i - 1) * 0.1),0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.25, true) + end +end + +function tabClickHandler(tabName) + if tabName == StaticTabName then + backpackOpenHandler(tabName) + else + backpackCloseHandler(tabName) + end +end + +function backpackOpenHandler(currentTab) + if currentTab and currentTab ~= StaticTabName then + backpack.Gear.Visible = false + return + end + + backpack.Gear.Visible = true + updateGridActive() + + resizeGrid() + resize() + tellBackpackReadyFunc:Invoke() +end + +function backpackCloseHandler(currentTab) + if currentTab and currentTab ~= StaticTabName then + backpack.Gear.Visible = false + return + end + + backpack.Gear.Visible = false + + resizeGrid() + resize() + tellBackpackReadyFunc:Invoke() +end + +function loadoutCheck(child, selectState) + if not child:IsA("ImageButton") then return end + for k,v in pairs(backpackItems) do + if buttons[v] then + if child:FindFirstChild("GearReference") and buttons[v]:FindFirstChild("GearReference") then + if buttons[v].GearReference.Value == child.GearReference.Value then + buttons[v].Active = selectState + break + end + end + end + end +end + +function clearPreview() + gearPreview.GearImage.Image = "" + gearPreview.GearStats.GearName.Text = "" +end + +function removeAllEquippedGear(physGear) + local stuff = player.Character:GetChildren() + for i = 1, #stuff do + if ( stuff[i]:IsA("Tool") or stuff[i]:IsA("HopperBin") ) and stuff[i] ~= physGear then + stuff[i].Parent = playerBackpack + end + end +end + +function equipGear(physGear) + removeAllEquippedGear(physGear) + physGear.Parent = player.Character + updateGridActive() +end + +function unequipGear(physGear) + physGear.Parent = playerBackpack + updateGridActive() +end + +function highlight(button) + button.TextColor3 = Color3.new(0,0,0) + button.BackgroundColor3 = Color3.new(0.8,0.8,0.8) +end +function clearHighlight(button) + button.TextColor3 = Color3.new(1,1,1) + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function swapGearSlot(slot,gearButton) + if not swapSlot.Value then -- signal loadout to swap a gear out + swapSlot.Slot.Value = slot + swapSlot.GearButton.Value = gearButton + swapSlot.Value = true + updateGridActive() + end +end + + +local UnequipGearMenuClick = function(element, menu) + if type(element.Action) ~= "number" then return end + local num = element.Action + if num == 1 then -- remove from loadout + unequipGear(menu.Parent.GearReference.Value) + local inventoryButton = menu.Parent + local gearToUnequip = inventoryButton.GearReference.Value + local loadoutChildren = currentLoadout:GetChildren() + local slot = -1 + for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") then + local button = loadoutChildren[i]:GetChildren() + if button[1] and button[1].GearReference.Value == gearToUnequip then + slot = button[1].SlotNumber.Text + break + end + end + end + swapGearSlot(slot,nil) + end +end + +function setupCharacterConnections() + + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + + -- make sure we get all the children + local backpackChildren = game.Players.LocalPlayer.Backpack:GetChildren() + for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) + end + + if characterChildAddedCon then characterChildAddedCon:disconnect() end + characterChildAddedCon = + game.Players.LocalPlayer.Character.ChildAdded:connect(function(child) + addToGrid(child) + updateGridActive() + end) + + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + characterChildRemovedCon = + game.Players.LocalPlayer.Character.ChildRemoved:connect(function(child) + updateGridActive() + end) + + wait() + centerGear(currentLoadout:GetChildren()) +end + +function removeCharacterConnections() + if characterChildAddedCon then characterChildAddedCon:disconnect() end + if characterChildRemovedCon then characterChildRemovedCon:disconnect() end + if backpackAddCon then backpackAddCon:disconnect() end +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function filterGear(terms) + local filteredGear = {} + for k,v in pairs(backpackItems) do + if buttons[v] then + local gearString = string.lower(buttons[v].GearReference.Value.Name) + gearString = trim(gearString) + for i = 1, #terms do + if string.match(gearString,terms[i]) then + table.insert(filteredGear,buttons[v]) + break + end + end + end + end + + return filteredGear +end +function splitByWhitespace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 0 then + table.insert(terms,token) + end + end + return terms +end +function showSearchGear(searchTerms) + if not backpack.Gear.Visible then return end -- currently not active tab + + local searchTermTable = splitByWhitespace(searchTerms) + if searchTermTable and (#searchTermTable > 0) then + currSearchTerms = searchTermTable + else + currSearchTerms = nil + end + + if searchTermTable == nil then + showEntireGrid() + return + end + + local filteredButtons = filterGear(currSearchTerms) + showPartialGrid(filteredButtons) +end + +function nukeBackpack() + while #buttons > 0 do + table.remove(buttons) + end + buttons = {} + while #backpackItems > 0 do + table.remove(backpackItems) + end + backpackItems = {} + local scrollingFrameChildren = grid.ScrollingFrame:GetChildren() + for i = 1, #scrollingFrameChildren do + scrollingFrameChildren[i]:remove() + end +end + +function getGearContextMenu() + local gearContextMenu = Instance.new("Frame") + gearContextMenu.Active = true + gearContextMenu.Name = "UnequipContextMenu" + gearContextMenu.Size = UDim2.new(0,115,0,70) + gearContextMenu.Position = UDim2.new(0,-16,0,-16) + gearContextMenu.BackgroundTransparency = 1 + gearContextMenu.Visible = false + + local gearContextMenuButton = Instance.new("TextButton") + gearContextMenuButton.Name = "UnequipContextMenuButton" + gearContextMenuButton.Text = "" + gearContextMenuButton.Style = Enum.ButtonStyle.RobloxButtonDefault + gearContextMenuButton.ZIndex = 8 + gearContextMenuButton.Size = UDim2.new(1, 0, 1, -20) + gearContextMenuButton.Visible = true + gearContextMenuButton.Parent = gearContextMenu + + local elementHeight = 12 + + local contextMenuElements = {} + local contextMenuElementsName = {"Remove Hotkey"} + + for i = 1, #contextMenuElementsName do + local element = {} + element.Type = "Button" + element.Text = contextMenuElementsName[i] + element.Action = i + element.DoIt = UnequipGearMenuClick + table.insert(contextMenuElements,element) + end + + for i, contextElement in ipairs(contextMenuElements) do + local element = contextElement + if element.Type == "Button" then + local button = Instance.new("TextButton") + button.Name = "UnequipContextButton" .. i + button.BackgroundColor3 = Color3.new(0,0,0) + button.BorderSizePixel = 0 + button.TextXAlignment = Enum.TextXAlignment.Left + button.Text = " " .. contextElement.Text + button.Font = Enum.Font.Arial + button.FontSize = Enum.FontSize.Size14 + button.Size = UDim2.new(1, 8, 0, elementHeight) + button.Position = UDim2.new(0,0,0,elementHeight * i) + button.TextColor3 = Color3.new(1,1,1) + button.ZIndex = 9 + button.Parent = gearContextMenuButton + + button.MouseButton1Click:connect(function() + if button.Active and not gearContextMenu.Parent.Active then + local success, result = pcall(function() element.DoIt(element, gearContextMenu) end) + browsingMenu = false + gearContextMenu.Visible = false + clearHighlight(button) + clearPreview() + end + end) + + button.MouseEnter:connect(function() + if button.Active and gearContextMenu.Parent.Active then + highlight(button) + end + end) + button.MouseLeave:connect(function() + if button.Active and gearContextMenu.Parent.Active then + clearHighlight(button) + end + end) + + contextElement.Button = button + contextElement.Element = button + elseif element.Type == "Label" then + local frame = Instance.new("Frame") + frame.Name = "ContextLabel" .. i + frame.BackgroundTransparency = 1 + frame.Size = UDim2.new(1, 8, 0, elementHeight) + + local label = Instance.new("TextLabel") + label.Name = "Text1" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Left + label.Font = Enum.Font.ArialBold + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.0, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label1 = label + + if element.GetText2 then + label = Instance.new("TextLabel") + label.Name = "Text2" + label.BackgroundTransparency = 1 + label.BackgroundColor3 = Color3.new(1,1,1) + label.BorderSizePixel = 0 + label.TextXAlignment = Enum.TextXAlignment.Right + label.Font = Enum.Font.Arial + label.FontSize = Enum.FontSize.Size14 + label.Position = UDim2.new(0.5, 0, 0, 0) + label.Size = UDim2.new(0.5, 0, 1, 0) + label.TextColor3 = Color3.new(1,1,1) + label.ZIndex = 9 + label.Parent = frame + element.Label2 = label + end + frame.Parent = gearContextMenuButton + element.Label = frame + element.Element = frame + end + end + + gearContextMenu.ZIndex = 4 + gearContextMenu.MouseLeave:connect(function() + browsingMenu = false + gearContextMenu.Visible = false + clearPreview() + end) + robloxLock(gearContextMenu) + + return gearContextMenu +end + +local backpackChildren = player.Backpack:GetChildren() +for i = 1, #backpackChildren do + addToGrid(backpackChildren[i]) +end + +------------------------- Start Lifelong Connections ----------------------- + + +resizeEvent.Event:connect(function(absSize) + if debounce then return end + + debounce = true + wait() + resize() + resizeGrid() + debounce = false +end) + +currentLoadout.ChildAdded:connect(function(child) loadoutCheck(child, false) end) +currentLoadout.ChildRemoved:connect(function(child) loadoutCheck(child, true) end) + +currentLoadout.DescendantAdded:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + centerGear(currentLoadout:GetChildren()) + end +end) +currentLoadout.DescendantRemoving:connect(function(descendant) + if not backpack.Visible and ( descendant:IsA("ImageButton") or descendant:IsA("TextButton") ) then + wait() + centerGear(currentLoadout:GetChildren()) + end +end) + +grid.MouseEnter:connect(function() clearPreview() end) +grid.MouseLeave:connect(function() clearPreview() end) + +player.CharacterRemoving:connect(function() + removeCharacterConnections() + nukeBackpack() +end) +player.CharacterAdded:connect(function() setupCharacterConnections() end) + +player.ChildAdded:connect(function(child) + if child:IsA("Backpack") then + playerBackpack = child + if backpackAddCon then backpackAddCon:disconnect() end + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) + end +end) + +swapSlot.Changed:connect(function() + if not swapSlot.Value then + updateGridActive() + end +end) + +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + if loadoutChildren[i]:IsA("Frame") and string.find(loadoutChildren[i].Name,"Slot") then + loadoutChildren[i].ChildRemoved:connect(function() + updateGridActive() + end) + loadoutChildren[i].ChildAdded:connect(function() + updateGridActive() + end) + end +end +------------------------- End Lifelong Connections ----------------------- + +resize() +resizeGrid() + +-- make sure any items in the loadout are accounted for in inventory +local loadoutChildren = currentLoadout:GetChildren() +for i = 1, #loadoutChildren do + loadoutCheck(loadoutChildren[i], false) +end +if not backpack.Visible then centerGear(currentLoadout:GetChildren()) end + +-- make sure that inventory is listening to gear reparenting +if characterChildAddedCon == nil and game.Players.LocalPlayer["Character"] then + setupCharacterConnections() +end +if not backpackAddCon then + backpackAddCon = game.Players.LocalPlayer.Backpack.ChildAdded:connect(function(child) addToGrid(child) end) +end + +backpackOpenEvent.Event:connect(backpackOpenHandler) +backpackCloseEvent.Event:connect(backpackCloseHandler) +tabClickedEvent.Event:connect(tabClickHandler) +searchRequestedEvent.Event:connect(showSearchGear) + +recalculateScrollLoadout() \ No newline at end of file diff --git a/app/files/CoreGui/89449093 b/app/files/CoreGui/89449093 new file mode 100644 index 0000000..e0747a8 --- /dev/null +++ b/app/files/CoreGui/89449093 @@ -0,0 +1,443 @@ +-- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search) +if game.CoreGui.Version < 7 then return end -- peace out if we aren't using the right client + +-- basic functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- don't do anything if we are in an empty game +waitForChild(game,"Players") +if #game.Players:GetChildren() < 1 then + game.Players.ChildAdded:wait() +end +-- make sure everything is loaded in before we do anything +-- get our local player +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + + + +------------------------ Locals ------------------------------ +local backpack = script.Parent +waitForChild(backpack,"Gear") + +local screen = script.Parent.Parent +assert(screen:IsA("ScreenGui")) + +waitForChild(backpack, "Tabs") +waitForChild(backpack.Tabs, "CloseButton") +local closeButton = backpack.Tabs.CloseButton + +waitForChild(backpack.Tabs, "InventoryButton") +local inventoryButton = backpack.Tabs.InventoryButton +if game.CoreGui.Version >= 8 then + waitForChild(backpack.Tabs, "WardrobeButton") + local wardrobeButton = backpack.Tabs.WardrobeButton +end +waitForChild(backpack.Parent,"ControlFrame") +local backpackButton = waitForChild(backpack.Parent.ControlFrame,"BackpackButton") +local currentTab = "gear" + +local searchFrame = waitForChild(backpack,"SearchFrame") +waitForChild(backpack.SearchFrame,"SearchBoxFrame") +local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame,"SearchBox") +local searchButton = waitForChild(backpack.SearchFrame,"SearchButton") +local resetButton = waitForChild(backpack.SearchFrame,"ResetButton") + +local robloxGui = waitForChild(Game.CoreGui, 'RobloxGui') +local currentLoadout = waitForChild(robloxGui, 'CurrentLoadout') +local loadoutBackground = waitForChild(currentLoadout, 'Background') + +local canToggle = true +local readyForNextEvent = true +local backpackIsOpen = false +local active = true +local disabledByDeveloper = false + +local humanoidDiedCon = nil + +local backpackButtonPos + +local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack + +local searchDefaultText = "Search..." +local tilde = "~" +local backquote = "`" + +local backpackSize = UDim2.new(0, 600, 0, 400) + +if robloxGui.AbsoluteSize.Y <= 320 then + backpackSize = UDim2.new(0, 200, 0, 140) +end + + +------------------------ End Locals --------------------------- + + +---------------------------------------- Public Event Setup ---------------------------------------- + +function createPublicEvent(eventName) + assert(eventName, "eventName is nil") + assert(tostring(eventName),"eventName is not a string") + + local newEvent = Instance.new("BindableEvent") + newEvent.Name = tostring(eventName) + newEvent.Parent = script + + return newEvent +end + +function createPublicFunction(funcName, invokeFunc) + assert(funcName, "funcName is nil") + assert(tostring(funcName), "funcName is not a string") + assert(invokeFunc, "invokeFunc is nil") + assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'") + + local newFunction = Instance.new("BindableFunction") + newFunction.Name = tostring(funcName) + newFunction.OnInvoke = invokeFunc + newFunction.Parent = script + + return newFunction +end + +-- Events +local resizeEvent = createPublicEvent("ResizeEvent") +local backpackOpenEvent = createPublicEvent("BackpackOpenEvent") +local backpackCloseEvent = createPublicEvent("BackpackCloseEvent") +local tabClickedEvent = createPublicEvent("TabClickedEvent") +local searchRequestedEvent = createPublicEvent("SearchRequestedEvent") +---------------------------------------- End Public Event Setup ---------------------------------------- + + + +--------------------------- Internal Functions ---------------------------------------- + +function deactivateBackpack() + backpack.Visible = false + active = false +end + +function activateBackpack() + initHumanoidDiedConnections() + active = true + backpack.Visible = backpackIsOpen + if backpackIsOpen then + toggleBackpack() + end +end + +function initHumanoidDiedConnections() + if humanoidDiedCon then + humanoidDiedCon:disconnect() + end + waitForProperty(game.Players.LocalPlayer,"Character") + waitForChild(game.Players.LocalPlayer.Character,"Humanoid") + humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack) +end + +local hideBackpack = function() + backpackIsOpen = false + readyForNextEvent = false + backpackButton.Selected = false + resetSearch() + backpackCloseEvent:Fire(currentTab) + backpack.Tabs.Visible = false + searchFrame.Visible = false + backpack:TweenSizeAndPosition(UDim2.new(0, backpackSize.X.Offset,0, 0), UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -85), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true, + function() + game.GuiService:RemoveCenterDialog(backpack) + backpack.Visible = false + backpackButton.Selected = false + end) + delay(guiTweenSpeed,function() + game.GuiService:RemoveCenterDialog(backpack) + backpack.Visible = false + backpackButton.Selected = false + readyForNextEvent = true + canToggle = true + end) +end + +function showBackpack() + game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + backpack.Visible = true + backpackButton.Selected = true + end, + function() + backpack.Visible = false + backpackButton.Selected = false + end) + backpack.Visible = true + backpackButton.Selected = true + backpack:TweenSizeAndPosition(backpackSize, UDim2.new(0.5, -backpackSize.X.Offset/2, 1, -backpackSize.Y.Offset - 88), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true) + delay(guiTweenSpeed,function() + backpack.Tabs.Visible = false + searchFrame.Visible = true + backpackOpenEvent:Fire(currentTab) + canToggle = true + readyForNextEvent = true + backpackButton.Image = 'http://www.syntax.eco/asset/?id=97644093' + backpackButton.Position = UDim2.new(0.5, -60, 1, -backpackSize.Y.Offset - 103) + end) +end + +function toggleBackpack() + if not game.Players.LocalPlayer then return end + if not game.Players.LocalPlayer["Character"] then return end + if not canToggle then return end + if not readyForNextEvent then return end + readyForNextEvent = false + canToggle = false + + backpackIsOpen = not backpackIsOpen + + if backpackIsOpen then + loadoutBackground.Image = 'http://www.syntax.eco/asset/?id=97623721' + loadoutBackground.Position = UDim2.new(-0.03, 0, -0.17, 0) + loadoutBackground.Size = UDim2.new(1.05, 0, 1.25, 0) + loadoutBackground.ZIndex = 2.0 + loadoutBackground.Visible = true + showBackpack() + else + backpackButton.Position = UDim2.new(0.5, -60, 1, -44) + loadoutBackground.Visible = false + backpackButton.Selected = false + backpackButton.Image = "http://www.syntax.eco/asset/?id=97617958" + loadoutBackground.Image = 'http://www.syntax.eco/asset/?id=96536002' + loadoutBackground.Position = UDim2.new(-0.1, 0, -0.1, 0) + loadoutBackground.Size = UDim2.new(1.2, 0, 1.2, 0) + hideBackpack() + + + local clChildren = currentLoadout:GetChildren() + for i = 1, #clChildren do + if clChildren[i] and clChildren[i]:IsA('Frame') then + local frame = clChildren[i] + if #frame:GetChildren() > 0 then + backpackButton.Position = UDim2.new(0.5, -60, 1, -108) + backpackButton.Visible = true + loadoutBackground.Visible = true + if frame:GetChildren()[1]:IsA('ImageButton') then + local imgButton = frame:GetChildren()[1] + imgButton.Active = true + imgButton.Draggable = false + end + end + end + end + + end +end + +function closeBackpack() + if backpackIsOpen then + toggleBackpack() + end +end + +function setSelected(tab) + assert(tab) + assert(tab:IsA("TextButton")) + + tab.BackgroundColor3 = Color3.new(1,1,1) + tab.TextColor3 = Color3.new(0,0,0) + tab.Selected = true + tab.ZIndex = 3 +end + +function setUnselected(tab) + assert(tab) + assert(tab:IsA("TextButton")) + + tab.BackgroundColor3 = Color3.new(0,0,0) + tab.TextColor3 = Color3.new(1,1,1) + tab.Selected = false + tab.ZIndex = 1 +end + +function updateTabGui(selectedTab) + assert(selectedTab) + + if selectedTab == "gear" then + setSelected(inventoryButton) + setUnselected(wardrobeButton) + elseif selectedTab == "wardrobe" then + setSelected(wardrobeButton) + setUnselected(inventoryButton) + end +end + +function mouseLeaveTab(button) + assert(button) + assert(button:IsA("TextButton")) + + if button.Selected then return end + + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function mouseOverTab(button) + assert(button) + assert(button:IsA("TextButton")) + + if button.Selected then return end + + button.BackgroundColor3 = Color3.new(39/255,39/255,39/255) +end + +function newTabClicked(tabName) + assert(tabName) + tabName = string.lower(tabName) + currentTab = tabName + + updateTabGui(tabName) + tabClickedEvent:Fire(tabName) + resetSearch() +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function splitByWhitespace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 0 then + table.insert(terms,token) + end + end + return terms +end + +function resetSearchBoxGui() + resetButton.Visible = false + searchBox.Text = searchDefaultText +end + +function doSearch() + local searchText = searchBox.Text + if searchText == "" then + resetSearch() + return + end + searchText = trim(searchText) + resetButton.Visible = true + termTable = splitByWhitespace(searchText) + searchRequestedEvent:Fire(searchText) -- todo: replace this with termtable when table passing is possible +end + +function resetSearch() + resetSearchBoxGui() + searchRequestedEvent:Fire() +end + +local backpackReady = function() + readyForNextEvent = true +end + +function coreGuiChanged(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Backpack or coreGuiType == Enum.CoreGuiType.All then + active = enabled + disabledByDeveloper = not enabled + + if disabledByDeveloper then + pcall(function() + game:GetService("GuiService"):RemoveKey(tilde) + game:GetService("GuiService"):RemoveKey(backquote) + end) + else + game:GetService("GuiService"):AddKey(tilde) + game:GetService("GuiService"):AddKey(backquote) + end + + resetSearch() + searchFrame.Visible = enabled and backpackIsOpen + + currentLoadout.Visible = enabled + backpack.Visible = enabled + backpackButton.Visible = enabled + end +end + +--------------------------- End Internal Functions ------------------------------------- + + +------------------------------ Public Functions Setup ------------------------------------- +createPublicFunction("CloseBackpack", hideBackpack) +createPublicFunction("BackpackReady", backpackReady) +------------------------------ End Public Functions Setup --------------------------------- + + +------------------------ Connections/Script Main ------------------------------------------- + +pcall(function() + coreGuiChanged(Enum.CoreGuiType.Backpack, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Backpack)) + Game.StarterGui.CoreGuiChangedSignal:connect(coreGuiChanged) +end) + +inventoryButton.MouseButton1Click:connect(function() newTabClicked("gear") end) +inventoryButton.MouseEnter:connect(function() mouseOverTab(inventoryButton) end) +inventoryButton.MouseLeave:connect(function() mouseLeaveTab(inventoryButton) end) + +if game.CoreGui.Version >= 8 then + wardrobeButton.MouseButton1Click:connect(function() newTabClicked("wardrobe") end) + wardrobeButton.MouseEnter:connect(function() mouseOverTab(wardrobeButton) end) + wardrobeButton.MouseLeave:connect(function() mouseLeaveTab(wardrobeButton) end) +end + +closeButton.MouseButton1Click:connect(closeBackpack) + +screen.Changed:connect(function(prop) + if prop == "AbsoluteSize" then + resizeEvent:Fire(screen.AbsoluteSize) + end +end) + +-- GuiService key setup +game:GetService("GuiService"):AddKey(tilde) +game:GetService("GuiService"):AddKey(backquote) +game:GetService("GuiService").KeyPressed:connect(function(key) + if not active or disabledByDeveloper then return end + if key == tilde or key == backquote then + toggleBackpack() + end +end) +backpackButton.MouseButton1Click:connect(function() + if not active or disabledByDeveloper then return end + toggleBackpack() +end) + +if game.Players.LocalPlayer["Character"] then + activateBackpack() +end + +game.Players.LocalPlayer.CharacterAdded:connect(activateBackpack) + +-- search functions +searchBox.FocusLost:connect(function(enterPressed) + if enterPressed or searchBox.Text ~= "" then + doSearch() + elseif searchBox.Text == "" then + resetSearch() + end +end) +searchButton.MouseButton1Click:connect(doSearch) +resetButton.MouseButton1Click:connect(resetSearch) + +if searchFrame and robloxGui.AbsoluteSize.Y <= 320 then + searchFrame.RobloxLocked = false + searchFrame:Destroy() +end \ No newline at end of file diff --git a/app/files/CoreGui/89449094 b/app/files/CoreGui/89449094 new file mode 100644 index 0000000..3c14c16 --- /dev/null +++ b/app/files/CoreGui/89449094 @@ -0,0 +1,360 @@ +-- This script manages context switches in the backpack (Gear to Wardrobe, etc.) and player state changes. Also manages global functions across different tabs (currently only search) +if game.CoreGui.Version < 7 then return end -- peace out if we aren't using the right client + +-- basic functions +local function waitForChild(instance, name) + while not instance:FindFirstChild(name) do + instance.ChildAdded:wait() + end + return instance:FindFirstChild(name) +end +local function waitForProperty(instance, property) + while not instance[property] do + instance.Changed:wait() + end +end + +-- don't do anything if we are in an empty game +waitForChild(game,"Players") +if #game.Players:GetChildren() < 1 then + game.Players.ChildAdded:wait() +end +-- make sure everything is loaded in before we do anything +-- get our local player +waitForProperty(game.Players,"LocalPlayer") +local player = game.Players.LocalPlayer + + + +------------------------ Locals ------------------------------ +local backpack = script.Parent +waitForChild(backpack,"Gear") + +local screen = script.Parent.Parent +assert(screen:IsA("ScreenGui")) + +waitForChild(backpack, "Tabs") +waitForChild(backpack.Tabs, "CloseButton") +local closeButton = backpack.Tabs.CloseButton + +waitForChild(backpack.Tabs, "InventoryButton") +local inventoryButton = backpack.Tabs.InventoryButton +if game.CoreGui.Version >= 8 then + waitForChild(backpack.Tabs, "WardrobeButton") + local wardrobeButton = backpack.Tabs.WardrobeButton +end +waitForChild(backpack.Parent,"ControlFrame") +local backpackButton = waitForChild(backpack.Parent.ControlFrame,"BackpackButton") +local currentTab = "gear" + +local searchFrame = waitForChild(backpack,"SearchFrame") +waitForChild(backpack.SearchFrame,"SearchBoxFrame") +local searchBox = waitForChild(backpack.SearchFrame.SearchBoxFrame,"SearchBox") +local searchButton = waitForChild(backpack.SearchFrame,"SearchButton") +local resetButton = waitForChild(backpack.SearchFrame,"ResetButton") + +local canToggle = true +local readyForNextEvent = true +local backpackIsOpen = false +local active = true + +local humanoidDiedCon = nil + +local guiTweenSpeed = 0.25 -- how quickly we open/close the backpack + +local searchDefaultText = "Search..." +local tilde = "~" +local backquote = "`" + +------------------------ End Locals --------------------------- + + +---------------------------------------- Public Event Setup ---------------------------------------- + +function createPublicEvent(eventName) + assert(eventName, "eventName is nil") + assert(tostring(eventName),"eventName is not a string") + + local newEvent = Instance.new("BindableEvent") + newEvent.Name = tostring(eventName) + newEvent.Parent = script + + return newEvent +end + +function createPublicFunction(funcName, invokeFunc) + assert(funcName, "funcName is nil") + assert(tostring(funcName), "funcName is not a string") + assert(invokeFunc, "invokeFunc is nil") + assert(type(invokeFunc) == "function", "invokeFunc should be of type 'function'") + + local newFunction = Instance.new("BindableFunction") + newFunction.Name = tostring(funcName) + newFunction.OnInvoke = invokeFunc + newFunction.Parent = script + + return newFunction +end + +-- Events +local resizeEvent = createPublicEvent("ResizeEvent") +local backpackOpenEvent = createPublicEvent("BackpackOpenEvent") +local backpackCloseEvent = createPublicEvent("BackpackCloseEvent") +local tabClickedEvent = createPublicEvent("TabClickedEvent") +local searchRequestedEvent = createPublicEvent("SearchRequestedEvent") +---------------------------------------- End Public Event Setup ---------------------------------------- + + + +--------------------------- Internal Functions ---------------------------------------- + +function deactivateBackpack() + backpack.Visible = false + active = false +end + +function activateBackpack() + initHumanoidDiedConnections() + active = true + backpack.Visible = backpackIsOpen +end + +function initHumanoidDiedConnections() + if humanoidDiedCon then + humanoidDiedCon:disconnect() + end + waitForProperty(game.Players.LocalPlayer,"Character") + waitForChild(game.Players.LocalPlayer.Character,"Humanoid") + humanoidDiedCon = game.Players.LocalPlayer.Character.Humanoid.Died:connect(deactivateBackpack) +end + +local hideBackpack = function() + backpackIsOpen = false + readyForNextEvent = false + backpackButton.Selected = false + resetSearch() + backpackCloseEvent:Fire(currentTab) + backpack.Tabs.Visible = false + searchFrame.Visible = false + backpack:TweenSizeAndPosition(UDim2.new(0,0,0,0),UDim2.new(0.5,0,0.5,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true, + function() + game.GuiService:RemoveCenterDialog(backpack) + backpack.Visible = false + backpackButton.Selected = false + end) + delay(guiTweenSpeed,function() + game.GuiService:RemoveCenterDialog(backpack) + backpack.Visible = false + backpackButton.Selected = false + canToggle = true + end) +end + +function showBackpack() + game.GuiService:AddCenterDialog(backpack, Enum.CenterDialogType.PlayerInitiatedDialog, + function() + backpack.Visible = true + backpackButton.Selected = true + end, + function() + backpack.Visible = false + backpackButton.Selected = false + end) + backpack.Visible = true + backpackButton.Selected = true + backpack:TweenSizeAndPosition(UDim2.new(0.55, 0, 0.76, 0),UDim2.new(0.225, 0, 0.09, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, guiTweenSpeed, true) + delay(guiTweenSpeed,function() + backpack.Tabs.Visible = true + searchFrame.Visible = true + backpackOpenEvent:Fire(currentTab) + canToggle = true + end) +end + +function toggleBackpack() + if not game.Players.LocalPlayer then return end + if not game.Players.LocalPlayer["Character"] then return end + + if not canToggle then return end + if not readyForNextEvent then return end + readyForNextEvent = false + canToggle = false + + backpackIsOpen = not backpackIsOpen + + if backpackIsOpen then + showBackpack() + else + backpackButton.Selected = false + hideBackpack() + end +end + +function closeBackpack() + if backpackIsOpen then + toggleBackpack() + end +end + +function setSelected(tab) + assert(tab) + assert(tab:IsA("TextButton")) + + tab.BackgroundColor3 = Color3.new(1,1,1) + tab.TextColor3 = Color3.new(0,0,0) + tab.Selected = true + tab.ZIndex = 3 +end + +function setUnselected(tab) + assert(tab) + assert(tab:IsA("TextButton")) + + tab.BackgroundColor3 = Color3.new(0,0,0) + tab.TextColor3 = Color3.new(1,1,1) + tab.Selected = false + tab.ZIndex = 1 +end + +function updateTabGui(selectedTab) + assert(selectedTab) + + if selectedTab == "gear" then + setSelected(inventoryButton) + setUnselected(wardrobeButton) + elseif selectedTab == "wardrobe" then + setSelected(wardrobeButton) + setUnselected(inventoryButton) + end +end + +function mouseLeaveTab(button) + assert(button) + assert(button:IsA("TextButton")) + + if button.Selected then return end + + button.BackgroundColor3 = Color3.new(0,0,0) +end + +function mouseOverTab(button) + assert(button) + assert(button:IsA("TextButton")) + + if button.Selected then return end + + button.BackgroundColor3 = Color3.new(39/255,39/255,39/255) +end + +function newTabClicked(tabName) + assert(tabName) + tabName = string.lower(tabName) + currentTab = tabName + + updateTabGui(tabName) + tabClickedEvent:Fire(tabName) + resetSearch() +end + +function trim(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +function splitByWhitespace(text) + if type(text) ~= "string" then return nil end + + local terms = {} + for token in string.gmatch(text, "[^%s]+") do + if string.len(token) > 0 then + table.insert(terms,token) + end + end + return terms +end + +function resetSearchBoxGui() + resetButton.Visible = false + searchBox.Text = searchDefaultText +end + +function doSearch() + local searchText = searchBox.Text + if searchText == "" then + resetSearch() + return + end + searchText = trim(searchText) + resetButton.Visible = true + termTable = splitByWhitespace(searchText) + searchRequestedEvent:Fire(searchText) -- todo: replace this with termtable when table passing is possible +end + +function resetSearch() + resetSearchBoxGui() + searchRequestedEvent:Fire() +end + +local backpackReady = function() + readyForNextEvent = true +end + +--------------------------- End Internal Functions ------------------------------------- + + +------------------------------ Public Functions Setup ------------------------------------- +createPublicFunction("CloseBackpack", hideBackpack) +createPublicFunction("BackpackReady", backpackReady) +------------------------------ End Public Functions Setup --------------------------------- + + +------------------------ Connections/Script Main ------------------------------------------- + +inventoryButton.MouseButton1Click:connect(function() newTabClicked("gear") end) +inventoryButton.MouseEnter:connect(function() mouseOverTab(inventoryButton) end) +inventoryButton.MouseLeave:connect(function() mouseLeaveTab(inventoryButton) end) + +if game.CoreGui.Version >= 8 then + wardrobeButton.MouseButton1Click:connect(function() newTabClicked("wardrobe") end) + wardrobeButton.MouseEnter:connect(function() mouseOverTab(wardrobeButton) end) + wardrobeButton.MouseLeave:connect(function() mouseLeaveTab(wardrobeButton) end) +end + +closeButton.MouseButton1Click:connect(closeBackpack) + +screen.Changed:connect(function(prop) + if prop == "AbsoluteSize" then + resizeEvent:Fire(screen.AbsoluteSize) + end +end) + +-- GuiService key setup +game:GetService("GuiService"):AddKey(tilde) +game:GetService("GuiService"):AddKey(backquote) +game:GetService("GuiService").KeyPressed:connect(function(key) + if not active then return end + if key == tilde or key == backquote then + toggleBackpack() + end +end) +backpackButton.MouseButton1Click:connect(function() + if not active then return end + toggleBackpack() +end) + +if game.Players.LocalPlayer["Character"] then + activateBackpack() +end +game.Players.LocalPlayer.CharacterAdded:connect(activateBackpack) + +-- search functions +searchBox.FocusLost:connect(function(enterPressed) + if enterPressed or searchBox.Text ~= "" then + doSearch() + elseif searchBox.Text == "" then + resetSearch() + end +end) +searchButton.MouseButton1Click:connect(doSearch) +resetButton.MouseButton1Click:connect(resetSearch) + +backpackButton.Visible = true diff --git a/app/files/CoreGui/97188756 b/app/files/CoreGui/97188756 new file mode 100644 index 0000000..1b12424 --- /dev/null +++ b/app/files/CoreGui/97188756 @@ -0,0 +1,1376 @@ +--[[ + //FileName: ChatScript.LUA + //Written by: Sorcus + //Description: Code for lua side chat on ROBLOX. Supports Scrolling. + //NOTE: If you find any bugs or inaccuracies PM Sorcus on ROBLOX or @Canavus on Twitter +]] + +local forceChatGUI = false + +-- Utility functions + Globals +local function WaitForChild(parent, childName) + while parent:FindFirstChild(childName) == nil do + parent.ChildAdded:wait(0.03) + end + return parent[childName] +end + +local function typedef(obj) + return obj +end + +local function IsPhone() + local cGui = Game:GetService('CoreGui') + local rGui = WaitForChild(cGui, 'RobloxGui') + if rGui.AbsoluteSize.Y < 600 then + return true + end + return false +end + +-- Users can use enough white spaces to spoof chatting as other players +-- This function removes trailing and leading white spaces +-- AFAIK, there is no reason for spam white spaces +local function StringTrim(str) + -- %S is whitespaces + -- When we find the first non space character defined by ^%s + -- we yank out anything in between that and the end of the string + -- Everything else is replaced with %1 which is essentially nothing + return (str:gsub("^%s*(.-)%s*$", "%1")) +end + +while Game.Players.LocalPlayer == nil do wait(0.03) end + +local Player = Game.Players.LocalPlayer +while Player.Character == nil do wait(0.03) end +local RbxUtility = LoadLibrary('RbxUtility') +local Gui = typedef(RbxUtility) +local Camera = Game.Workspace.CurrentCamera + +-- Services +local CoreGuiService = Game:GetService('CoreGui') +local PlayersService = Game:GetService('Players') +local DebrisService= Game:GetService('Debris') +local GuiService = Game:GetService('GuiService') +local inputService = game:GetService("UserInputService") + +-- Lua Enums +local Enums do + Enums = {} + local EnumName = {} -- used as unique key for enum name + local enum_mt = { + __call = function(self,value) + return self[value] or self[tonumber(value)] + end; + __index = { + GetEnumItems = function(self) + local t = {} + for i,item in pairs(self) do + if type(i) == 'number' then + t[#t+1] = item + end + end + table.sort(t,function(a,b) return a.Value < b.Value end) + return t + end; + }; + __tostring = function(self) + return "Enum." .. self[EnumName] + end; + } + local item_mt = { + __call = function(self,value) + return value == self or value == self.Name or value == self.Value + end; + __tostring = function(self) + return "Enum." .. self[EnumName] .. "." .. self.Name + end; + } + function CreateEnum(enumName) + return function(t) + local e = {[EnumName] = enumName} + for i,name in pairs(t) do + local item = setmetatable({Name=name,Value=i,Enum=e,[EnumName]=enumName},item_mt) + e[i] = item + e[name] = item + e[item] = item + end + Enums[enumName] = e + return setmetatable(e, enum_mt) + end + end +end +--------------------------------------------------- +------------------ Input class -------------------- +local Input = { + Mouse = Player:GetMouse(), + Speed = 0, + Simulating = false, + + Configuration = { + DefaultSpeed = 1 + }, + UserIsScrolling = false + } + +--------------------------------------------------- +------------------ Chat class -------------------- +local Chat = { + + ChatColors = { + BrickColor.new("Bright red"), + BrickColor.new("Bright blue"), + BrickColor.new("Earth green"), + BrickColor.new("Bright violet"), + BrickColor.new("Bright orange"), + BrickColor.new("Bright yellow"), + BrickColor.new("Light reddish violet"), + BrickColor.new("Brick yellow"), + }, + + Gui = nil, + Frame = nil, + RenderFrame = nil, + TapToChatLabel = nil, + ClickToChatButton = nil, + + ScrollingLock = false, + EventListener = nil, + + -- This is actually a ring buffer + -- Meaning at hitting the historyLength it wraps around + -- Reuses the text objects, so chat atmost uses 100 text objects + MessageQueue = {}, + + -- Stores all the values for configuring chat + Configuration = { + FontSize = Enum.FontSize.Size12, -- 10 is good + -- Also change this when you are changing the above, this is suboptimal but so is our interface to find FontSize + NumFontSize = 12, + HistoryLength = 20, -- stores up to 50 of the last chat messages for you to scroll through, + Size = UDim2.new(0.38, 0, 0.20, 0), + MessageColor = Color3.new(1, 1, 1), + AdminMessageColor = Color3.new(1, 215/255, 0), + XScale = 0.025, + LifeTime = 45, + Position = UDim2.new(0, 2, 0.05, 0), + DefaultTweenSpeed = 0.15, + }, + + -- This could be redone by just using the previous and next fields of the Queue + -- But the iterators cause issues, will be optimized later + SlotPositions_List = {}, + -- To precompute and store all player null strings since its an expensive process + CachedSpaceStrings_List = {}, + MouseOnFrame = false, + GotFocus = false, + + Messages_List = {}, + MessageThread = nil, + + Admins_List = { + 'Rbadam', 'Adamintygum', 'androidtest', 'RobloxFrenchie', 'JacksSmirkingRevenge', 'LindaPepita', 'vaiobot', 'Goddessnoob', 'effward', 'Blockhaak', 'Drewbda', '659223', 'Tone', 'fasterbuilder19', 'Zeuxcg', 'concol2', + 'ReeseMcBlox', 'Jeditkacheff', 'whkm1980', 'ChiefJustus', 'Ellissar', 'Arbolito', 'Noob007', 'Limon', 'cmed', 'hawkington', 'Tabemono', 'autoconfig', 'BrightEyes', 'Monsterinc3D', 'MrDoomBringer', 'IsolatedEvent', + 'CountOnConnor', 'Scubasomething', 'OnlyTwentyCharacters', 'LordRugdumph', 'bellavour', 'david.baszucki', 'ibanez2189', 'Sorcus', 'DeeAna00', 'TheLorekt', 'NiqueMonster', 'Thorasaur', 'MSE6', 'CorgiParade', 'Varia', + '4runningwolves', 'pulmoesflor', 'Olive71', 'groundcontroll2', 'GuruKrish', 'Countvelcro', 'IltaLumi', 'juanjuan23', 'OstrichSized', 'jackintheblox', 'SlingshotJunkie', 'gordonrox24', 'sharpnine', 'Motornerve', 'Motornerve', + 'watchmedogood', 'jmargh', 'JayKorean', 'Foyle', 'MajorTom4321', 'Shedletsky', 'supernovacaine', 'FFJosh', 'Sickenedmonkey', 'Doughtless', 'KBUX', 'totallynothere', 'ErzaStar', 'Keith', 'Chro', 'SolarCrane', 'GloriousSalt', + 'UristMcSparks', 'ITOlaurEN', 'Malcomso', 'Stickmasterluke', 'windlight13', 'yumyumcheerios', 'Stravant', 'ByteMe', 'imaginationsensation', 'Matt.Dusek', 'Mcrtest', 'Seranok', 'maxvee', 'Coatp0cketninja', 'Screenme', + 'b1tsh1ft', 'Totbl', 'Aquabot8', 'grossinger', 'Merely', 'CDakkar', 'Siekiera', 'Robloxkidsaccount', 'flotsamthespork', 'Soggoth', 'Phil', 'OrcaSparkles', 'skullgoblin', 'RickROSStheB0SS', 'ArgonPirate', 'NobleDragon', + 'Squidcod', 'Raeglyn', 'RobloxSai', 'Briarroze', 'hawkeyebandit', 'DapperBuffalo', 'Vukota', 'swiftstone', 'Gemlocker', 'Loopylens', 'Tarabyte', 'Timobius', 'Tobotrobot', 'Foster008', 'Twberg', 'DarthVaden', 'Khanovich', + 'CodeWriter', 'VladTheFirst', 'Phaedre', 'gorroth', 'SphinxShen', 'jynj1984', 'RoboYZ', 'ZodiacZak' + }, + + + SafeChat_List = { + ['Use the Chat menu to talk to me.'] = {'/sc 0', true}, + ['I can only see menu chats.'] = {'/sc 1', true}, + ['Hello'] = { + ['Hi'] = {'/sc 2_0', true, ['Hi there!'] = true, ['Hi everyone'] = true}, + ['Howdy'] = {'/sc 2_1', true, ['Howdy partner!'] = true}, + ['Greetings'] = {'/sc 2_2', true, ['Greetings everyone'] = true, ['Greetings Robloxians!'] = true, ['Seasons greetings!'] = true}, + ['Welcome'] = {'/sc 2_3', true, ['Welcome to my place'] = true, ['Welcome to my barbeque'] = true, ['Welcome to our base'] = true}, + ['Hey there!'] = {'/sc 2_4', true}, + ['What\'s up?'] = {'/sc 2_5', true, ['How are you doing?'] = true, ['How\'s it going?'] = true, ['What\'s new?'] = true}, + ['Good day'] = {'/sc 2_6', true, ['Good morning'] = true, ['Good evening'] = true, ['Good afternoon'] = true, ['Good night'] = true}, + ['Silly'] = {'/sc 2_7', true, ['Waaaaaaaz up?!'] = true, ['Hullo!'] = true, ['Behold greatness, mortals!'] = true, ['Pardon me, is this Sparta?'] = true, ['THIS IS SPARTAAAA!'] = true}, + ['Happy Holidays!'] = {'/sc 2_8', true, ['Happy New Year!'] = true, + ['Happy Valentine\'s Day!'] = true, + ['Beware the Ides of March!'] = true, + ['Happy St. Patrick\'s Day!'] = true, + ['Happy Easter!'] = true, + ['Happy Earth Day!'] = true, + ['Happy 4th of July!'] = true, + ['Happy Thanksgiving!'] = true, + ['Happy Halloween!'] = true, + ['Happy Hanukkah!'] = true, + ['Merry Christmas!'] = true, + ['Happy Halloween!'] = true, + ['Happy Earth Day!'] = true, + ['Happy May Day!'] = true, + ['Happy Towel Day!'] = true, + ['Happy ROBLOX Day!'] = true, + ['Happy LOL Day!'] = true }, + + [1] = '/sc 2' + }, + ['Goodbye'] = { + ['Good Night']= {'/sc 3_0', true, + ['Sweet dreams'] = true, + ['Go to sleep!'] = true, + ['Lights out!'] = true, + ['Bedtime'] = true, + ['Going to bed now'] = true}, + + ['Later']= {'/sc 3_1', true, + ['See ya later'] = true, + ['Later gator!'] = true, + ['See you tomorrow'] = true}, + + ['Bye'] = {'/sc 3_2', true, ['Hasta la bye bye!'] = true}, + ['I\'ll be right back'] = {'/sc 3_3', true}, + ['I have to go'] = {'/sc 3_4', true}, + ['Farewell'] = {'/sc 3_5', true, ['Take care'] = true, ['Have a nice day'] = true, ['Goodluck!'] = true, ['Ta-ta for now!'] = true}, + ['Peace'] = {'/sc 3_6', true, ['Peace out!'] = true, ['Peace dudes!'] = true, ['Rest in pieces!'] = true}, + ['Silly'] = {'/sc 3_7', true, + ['To the batcave!'] = true, + ['Over and out!'] = true, + ['Happy trails!'] = true, + ['I\'ve got to book it!'] = true, + ['Tootles!'] = true, + ['Smell you later!'] = true, + ['GG!'] = true, + ['My house is on fire! gtg.'] = true}, + [1] = '/sc 3' + }, + ['Friend'] ={ + ['Wanna be friends?'] = {'/sc 4_0', true}, + ['Follow me'] = {'/sc 4_1', true, ['Come to my place!'] = true, ['Come to my base!'] = true, ['Follow me, team!'] = true, ['Follow me'] = true}, + ['Your place is cool'] = {'/sc 4_2', true, ['Your place is fun'] = true, ['Your place is awesome'] = true, ['Your place looks good'] = true, ['This place is awesome!'] = true}, + ['Thank you'] = {'/sc 4_3', true, ['Thanks for playing'] = true, ['Thanks for visiting'] = true, ['Thanks for everything'] = true, ['No, thank you'] = true, ['Thanx'] = true}, + ['No problem'] = {'/sc 4_4', true, ['Don\'t worry'] = true, ['That\'s ok'] = true, ['np'] = true}, + ['You are ...'] = {'/sc 4_5', true, + ['You are great!'] = true, + ['You are good!'] = true, + ['You are cool!'] = true, + ['You are funny!'] = true, + ['You are silly!'] = true, + ['You are awesome!'] = true, + ['You are doing something I don\'t like, please stop'] = true + }, + ['I like ...'] = {'/sc 4_6', true, ['I like your name'] = true, ['I like your shirt'] = true, ['I like your place'] = true, ['I like your style'] = true, + ['I like you'] = true, ['I like items'] = true, ['I like money'] = true}, + ['Sorry'] = {'/sc 4_7', true, ['My bad!'] = true, ['I\'m sorry'] = true, ['Whoops!'] = true, ['Please forgive me.'] = true, ['I forgive you.'] = true, + ['I didn\'t mean to do that.'] = true, ['Sorry, I\'ll stop now.'] = true}, + [1] = '/sc 4' + }, + ['Questions'] = { + ['Who?'] = {'/sc 5_0', true, ['Who wants to be my friend?'] = true, ['Who wants to be on my team?'] = true, ['Who made this brilliant game?'] = true}, + ['What?'] = {'/sc 5_1', true, ['What is your favorite animal?'] = true, ['What is your favorite game?'] = true, ['What is your favorite movie?'] = true, + ['What is your favorite TV show?'] = true, ['What is your favorite music?'] = true, ['What are your hobbies?'] = true, ['LOLWUT?'] = true}, + ['When?'] = {'/sc 5_2', true, ['When are you online?'] = true, ['When is the new version coming out?'] = true, ['When can we play again?'] = true, ['When will your place be done?'] = true}, + ['Where?'] = {'/sc 5_3', true, ['Where do you want to go?'] = true, ['Where are you going?'] = true, ['Where am I?!'] = true, ['Where did you go?'] = true}, + ['How?'] = {'/sc 5_4', true, ['How are you today?'] = true, ['How did you make this cool place?'] = true, ['LOLHOW?'] = true}, + ['Can I...'] = {'/sc 5_5', true, ['Can I have a tour?'] = true, ['Can I be on your team?'] = true, ['Can I be your friend?'] = true, ['Can I try something?'] = true, + ['Can I have that please?'] = true, ['Can I have that back please?'] = true, ['Can I have borrow your hat?'] = true, ['Can I have borrow your gear?'] = true}, + [1] = '/sc 5' + }, + ['Answers'] = { + ['You need help?'] = {'/sc 6_0', true, ['Check out the news section'] = true, ['Check out the help section'] = true, ['Read the wiki!'] = true, + ['All the answers are in the wiki!'] = true, ['I will help you with this.'] = true}, + ['Some people ...'] = {'/sc 6_1', true, ['Me'] = true, ['Not me'] = true, ['You'] = true, ['All of us'] = true, ['Everyone but you'] = true, ['Builderman!'] = true, + ['Telamon!'] = true, ['My team'] = true, ['My group'] = true, ['Mom'] = true, ['Dad'] = true, ['Sister'] = true, ['Brother'] = true, ['Cousin'] = true, + ['Grandparent'] = true, ['Friend'] = true}, + ['Time ...'] = {'/sc 6_2', true, ['In the morning'] = true, ['In the afternoon'] = true, ['At night'] = true, ['Tomorrow'] = true, ['This week'] = true, ['This month'] = true, + ['Sometime'] = true, ['Sometimes'] = true, ['Whenever you want'] = true, ['Never'] = true, ['After this'] = true, ['In 10 minutes'] = true, ['In a couple hours'] = true, + ['In a couple days'] = true}, + ['Animals'] = {'/sc 6_3', true, + ['Cats'] = {['Lion'] = true, ['Tiger'] = true, ['Leopard'] = true, ['Cheetah'] = true}, + ['Dogs'] = {['Wolves'] = true, ['Beagle'] = true, ['Collie'] = true, ['Dalmatian'] = true, ['Poodle'] = true, ['Spaniel'] = true, + ['Shepherd'] = true, ['Terrier'] = true, ['Retriever'] = true}, + ['Horses'] = {['Ponies'] = true, ['Stallions'] = true, ['Pwnyz'] = true}, + ['Reptiles'] = {['Dinosaurs'] = true, ['Lizards'] = true, ['Snakes'] = true, ['Turtles!'] = true}, + ['Hamster'] = true, + ['Monkey'] = true, + ['Bears'] = true, + ['Fish'] = {['Goldfish'] = true, ['Sharks'] = true, ['Sea Bass'] = true, ['Halibut'] = true, ['Tropical Fish'] = true}, + ['Birds'] = {['Eagles'] = true, ['Penguins'] = true, ['Parakeets'] = true, ['Owls'] = true, ['Hawks'] = true, ['Pidgeons'] = true}, + ['Elephants'] = true, + ['Mythical Beasts'] = {['Dragons'] = true, ['Unicorns'] = true, ['Sea Serpents'] = true, ['Sphinx'] = true, ['Cyclops'] = true, + ['Minotaurs'] = true, ['Goblins'] = true, ['Honest Politicians'] = true, ['Ghosts'] = true, ['Scylla and Charybdis'] = true} + }, + ['Games'] = {'/sc 6_4', true, + ['Action'] = true, ['Puzzle'] = true, ['Strategy'] = true, ['Racing'] = true, ['RPG'] = true, ['Obstacle Course'] = true, ['Tycoon'] = true, + ['Roblox'] = { ['BrickBattle'] = true, ['Community Building'] = true, ['Roblox Minigames'] = true, ['Contest Place'] = true}, + ['Board games'] = { ['Chess'] = true, ['Checkers'] = true, ['Settlers of Catan'] = true, ['Tigris and Euphrates'] = true, ['El Grande'] = true, + ['Stratego'] = true, ['Carcassonne'] = true} + }, + ['Sports'] = {'/sc 6_5', true, ['Hockey'] = true, ['Soccer'] = true, ['Football'] = true, ['Baseball'] = true, ['Basketball'] = true, + ['Volleyball'] = true, ['Tennis'] = true, ['Sports team practice'] = true, + ['Watersports'] = { ['Surfing'] = true,['Swimming'] = true, ['Water Polo'] = true}, + ['Winter sports'] = { ['Skiing'] = true, ['Snowboarding'] = true, ['Sledding'] = true, ['Skating'] = true}, + ['Adventure'] = {['Rock climbing'] = true, ['Hiking'] = true, ['Fishing'] = true, ['Horseback riding'] = true}, + ['Wacky'] = {['Foosball'] = true, ['Calvinball'] = true, ['Croquet'] = true, ['Cricket'] = true, ['Dodgeball'] = true, + ['Squash'] = true, ['Trampoline'] = true} + }, + ['Movies/TV'] = {'/sc 6_6', true, ['Science Fiction'] = true, ['Animated'] = {['Anime'] = true}, ['Comedy'] = true, ['Romantic'] = true, + ['Action'] = true, ['Fantasy'] = true}, + ['Music'] = {'/sc 6_7', true, ['Country'] = true, ['Jazz'] = true, ['Rap'] = true, ['Hip-hop'] = true, ['Techno'] = true, ['Classical'] = true, + ['Pop'] = true, ['Rock'] = true}, + ['Hobbies'] = {'/sc 6_8', true, + ['Computers'] = { ['Building computers'] = true, ['Videogames'] = true, ['Coding'] = true, ['Hacking'] = true}, + ['The Internet'] = { ['lol. teh internets!'] = true, ['Watching vids'] = true}, + ['Dance'] = true, ['Gymnastics'] = true, ['Listening to music'] = true, ['Arts and crafts'] = true, + ['Martial Arts'] = {['Karate'] = true, ['Judo'] = true, ['Taikwon Do'] = true, ['Wushu'] = true, ['Street fighting'] = true}, + ['Music lessons'] = {['Playing in my band'] = true, ['Playing piano'] = true, ['Playing guitar'] = true, + ['Playing violin'] = true, ['Playing drums'] = true, ['Playing a weird instrument'] = true} + }, + ['Location'] = {'/sc 6_9', true, + ['USA'] = { + ['West'] = { ['Alaska'] = true, ['Arizona'] = true, ['California'] = true, ['Colorado'] = true, ['Hawaii'] = true, + ['Idaho'] = true, ['Montana'] = true, ['Nevada'] = true, ['New Mexico'] = true, ['Oregon'] = true, + ['Utah'] = true, ['Washington'] = true, ['Wyoming'] = true + }, + ['South'] = { ['Alabama'] = true, ['Arkansas'] = true, ['Florida'] = true, ['Georgia'] = true, ['Kentucky'] = true, + ['Louisiana'] = true, ['Mississippi'] = true, ['North Carolina'] = true, ['Oklahoma'] = true, + ['South Carolina'] = true, ['Tennessee'] = true, ['Texas'] = true, ['Virginia'] = true, ['West Virginia'] = true + }, + ['Northeast'] = {['Connecticut'] = true, ['Delaware'] = true, ['Maine'] = true, ['Maryland'] = true, ['Massachusetts'] = true, + ['New Hampshire'] = true, ['New Jersey'] = true, ['New York'] = true, ['Pennsylvania'] = true, ['Rhode Island'] = true, + ['Vermont'] = true + }, + ['Midwest'] = {['Illinois'] = true, ['Indiana'] = true, ['Iowa'] = true, ['Kansas'] = true, ['Michigan'] = true, ['Minnesota'] = true, + ['Missouri'] = true, ['Nebraska'] = true, ['North Dakota'] = true, ['Ohio'] = true, ['South Dakota'] = true, ['Wisconsin'] = true} + }, + ['Canada'] = {['Alberta'] = true, ['British Columbia'] = true, ['Manitoba'] = true, ['New Brunswick'] = true, ['Newfoundland'] = true, + ['Northwest Territories'] = true, ['Nova Scotia'] = true, ['Nunavut'] = true, ['Ontario'] = true, ['Prince Edward Island'] = true, + ['Quebec'] = true, ['Saskatchewan'] = true, ['Yukon'] = true}, + ['Mexico'] = true, + ['Central America'] = true, + ['Europe'] = {['France'] = true, ['Germany'] = true, ['Spain'] = true, ['Italy'] = true, ['Poland'] = true, ['Switzerland'] = true, + ['Greece'] = true, ['Romania'] = true, ['Netherlands'] = true, + ['Great Britain'] = {['England'] = true, ['Scotland'] = true, ['Wales'] = true, ['Northern Ireland'] = true} + }, + ['Asia'] = { ['China'] = true, ['India'] = true, ['Japan'] = true, ['Korea'] = true, ['Russia'] = true, ['Vietnam'] = true}, + ['South America'] = { ['Argentina'] = true, ['Brazil'] = true}, + ['Africa'] = { ['Eygpt'] = true, ['Swaziland'] = true}, + ['Australia'] = true, ['Middle East'] = true, ['Antarctica'] = true, ['New Zealand'] = true + }, + ['Age'] = {'/sc 6_10', true, ['Rugrat'] = true, ['Kid'] = true, ['Tween'] = true, ['Teen'] = true, ['Twenties'] = true, + ['Old'] = true, ['Ancient'] = true, ['Mesozoic'] = true, ['I don\'t want to say my age. Don\'t ask.'] = true}, + ['Mood'] = {'/sc 6_11', true, ['Good'] = true, ['Great!'] = true, ['Not bad'] = true, ['Sad'] = true, ['Hyper'] = true, + ['Chill'] = true, ['Happy'] = true, ['Kind of mad'] = true}, + ['Boy'] = {'/sc 6_12', true}, + ['Girl'] = {'/sc 6_13', true}, + ['I don\'t want to say boy or girl. Don\'t ask.'] = {'/sc 6_14', true}, + [1] = '/sc 6' + }, + ['Game'] = { + ['Let\'s build'] = {'/sc 7_0', true}, + ['Let\'s battle'] = {'/sc 7_1', true}, + ['Nice one!'] = {'/sc 7_2', true}, + ['So far so good'] = {'/sc 7_3', true}, + ['Lucky shot!'] = {'/sc 7_4', true}, + ['Oh man!'] = {'/sc 7_5', true}, + ['I challenge you to a fight!'] = {'/sc 7_6', true}, + ['Help me with this'] = {'/sc 7_7', true}, + ['Let\'s go to your game'] = {'/sc 7_8', true}, + ['Can you show me how do to that?'] = {'/sc 7_9', true}, + ['Backflip!'] = {'/sc 7_10', true}, + ['Frontflip!'] = {'/sc 7_11', true}, + ['Dance!'] = {'/sc 7_12', true}, + ['I\'m on your side!'] = {'/sc 7_13', true}, + ['Game Commands'] = {'/sc 7_14', true, ['regen'] = true, ['reset'] = true, ['go'] = true, ['fix'] = true, ['respawn'] = true}, + [1] = '/sc 7' + }; + ['Silly'] = { + ['Muahahahaha!'] = true, + ['all your base are belong to me!'] = true, + ['GET OFF MAH LAWN'] = true, + ['TEH EPIK DUCK IS COMING!!!'] = true, + ['ROFL'] = true, + ['1337'] = {true, ['i r teh pwnz0r!'] = true, ['w00t!'] = true, ['z0mg h4x!'] = true, ['ub3rR0xXorzage!'] = true} + }, + ['Yes'] = { + ['Absolutely!'] = true, + ['Rock on!'] = true, + ['Totally!'] = true, + ['Juice!'] = true, + ['Yay!'] = true, + ['Yesh'] = true + }, + ['No'] = { + ['Ummm. No.'] = true, + ['...'] = true, + ['Stop!'] = true, + ['Go away!'] = true, + ['Don\'t do that'] = true, + ['Stop breaking the rules'] = true, + ['I don\'t want to'] = true + }, + ['Ok'] = { + ['Well... ok'] = true, + ['Sure'] = true + }, + ['Uncertain'] = { + ['Maybe'] = true, + ['I don\'t know'] = true, + ['idk'] = true, + ['I can\'t decide'] = true, + ['Hmm...'] = true + }, + [':-)'] = { + [':-('] = true, + [':D'] = true, + [':-O'] = true, + ['lol'] = true, + ['=D'] = true, + ['D='] = true, + ['XD'] = true, + [';D'] = true, + [';)'] = true, + ['O_O'] = true, + ['=)'] = true, + ['@_@'] = true, + ['>_<'] = true, + ['T_T'] = true, + ['^_^'] = true, + ['<(0_0<) <(0_0)> (>0_0)> KIRBY DANCE'] = true, + [')\';'] = true, + [':3'] = true + }, + ['Ratings'] = { + ['Rate it!'] = true, + ['I give it a 1 out of 10'] = true, + ['I give it a 2 out of 10'] = true, + ['I give it a 3 out of 10'] = true, + ['I give it a 4 out of 10'] = true, + ['I give it a 5 out of 10'] = true, + ['I give it a 6 out of 10'] = true, + ['I give it a 7 out of 10'] = true, + ['I give it a 8 out of 10'] = true, + ['I give it a 9 out of 10'] = true, + ['I give it a 10 out of 10!'] = true, + } + }, + CreateEnum('SafeChat'){'Level1', 'Level2', 'Level3'}, + SafeChatTree = {}, + TempSpaceLabel = nil + } +--------------------------------------------------- + +local function GetNameValue(pName) + local value = 0 + for index = 1, #pName do + local cValue = string.byte(string.sub(pName, index, index)) + local reverseIndex = #pName - index + 1 + if #pName%2 == 1 then + reverseIndex = reverseIndex - 1 + end + if reverseIndex%4 >= 2 then + cValue = -cValue + end + value = value + cValue + end + return value%8 +end + +function Chat:ComputeChatColor(pName) + return self.ChatColors[GetNameValue(pName) + 1].Color +end + +-- This is context based scrolling +function Chat:EnableScrolling(toggle) + -- Genius idea gone to fail, if we switch the camera type we can effectively lock the + -- camera and do no click scrolling + self.MouseOnFrame = false + if self.RenderFrame then + self.RenderFrame.MouseEnter:connect(function() + local character = Player.Character + local torso = WaitForChild(character, 'Torso') + local humanoid = WaitForChild(character, 'Humanoid') + local head = WaitForChild(character, 'Head') + if toggle then + self.MouseOnFrame = true + Camera.CameraType = 'Scriptable' + -- Get relative position of camera and keep to it + Spawn(function() + local currentRelativePos = Camera.CoordinateFrame.p - torso.Position + while Chat.MouseOnFrame do + Camera.CoordinateFrame = CFrame.new(torso.Position + currentRelativePos, head.Position) + wait(0.015) + end + end) + end + end) + + self.RenderFrame.MouseLeave:connect(function() + Camera.CameraType = 'Custom' + self.MouseOnFrame = false + end) + end +end + +-- TODO: Scrolling using Mouse wheel +function Chat:OnScroll(speed) + if self.MouseOnFrame then + -- + end +end + +-- Check if we are running on a touch device +function Chat:IsTouchDevice() + local touchEnabled = false + pcall(function() touchEnabled = inputService.TouchEnabled end) + return touchEnabled +end + +-- Scrolling +function Chat:ScrollQueue(value) + --[[for i = 1, #self.MessageQueue do + if self.MessageQueue[i] then + for _, label in pairs(self.MessageQueue[i]) do + local next = self.MessageQueue[i].Next + local previous = self.MessageQueue[i].Previous + if label and label:IsA('TextLabel') or label:IsA('TextButton') then + if value > 0 and previous and previous['Message'] then + label.Position = previous['Message'].Position + elseif value < 1 and next['Message'] then + label.Position = previous['Message'].Position + end + end + end + end + end ]] +end + +-- Handles the rendering of the text objects in their appropriate places +function Chat:UpdateQueue(field, diff) + -- Have to do some sort of correction here + for i = #self.MessageQueue, 1, -1 do + if self.MessageQueue[i] then + for _, label in pairs(self.MessageQueue[i]) do + if label and type(label) ~= 'table' and type(label) ~= 'number' then + if label:IsA('TextLabel') or label:IsA('TextButton') then + if diff then + label.Position = label.Position - UDim2.new(0, 0, diff, 0) + else + if field == self.MessageQueue[i] then + label.Position = UDim2.new(self.Configuration.XScale, 0, label.Position.Y.Scale - field['Message'].Size.Y.Scale , 0) + -- Just to show up popping effect for the latest message in chat + Spawn(function() + wait(0.05) + while label.TextTransparency >= 0 do + label.TextTransparency = label.TextTransparency - 0.2 + wait(0.03) + end + if label == field['Message'] then + label.TextStrokeTransparency = 0.8 + else + label.TextStrokeTransparency = 1.0 + end + end) + else + label.Position = UDim2.new(self.Configuration.XScale, 0, label.Position.Y.Scale - field['Message'].Size.Y.Scale, 0) + end + if label.Position.Y.Scale < -0.01 then + -- NOTE: Remove this fix when Textbounds is fixed + label.Visible = false + label:Destroy() + end + end + end + end + end + end + end +end + +function Chat:CreateScrollBar() + -- Code for scrolling is in here, partially, but scroll bar drawing isn't drawn + -- TODO: Implement +end + +-- For scrolling, to see if we hit the bounds so that we can stop it from scrolling anymore +function Chat:CheckIfInBounds(value) + if #Chat.MessageQueue < 3 then + return true + end + + if value > 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale == 0 then + return true + elseif value < 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale < 0 then + return true + else + return false + end + return false +end + +-- This is to precompute all playerName space strings +-- This is used to offset the message by exactly this + 2 spacestrings +function Chat:ComputeSpaceString(pLabel) + local nString = " " + if not self.TempSpaceLabel then + self.TempSpaceLabel = Gui.Create'TextButton' + { + Size = UDim2.new(0, pLabel.AbsoluteSize.X, 0, pLabel.AbsoluteSize.Y); + FontSize = self.Configuration.FontSize; + Parent = self.RenderFrame; + BackgroundTransparency = 1.0; + Text = nString; + Name = 'SpaceButton' + }; + else + self.TempSpaceLabel.Text = nString + end + + while self.TempSpaceLabel.TextBounds.X < pLabel.TextBounds.X do + nString = nString .. " " + self.TempSpaceLabel.Text = nString + end + nString = nString .. " " + self.CachedSpaceStrings_List[pLabel.Text] = nString + self.TempSpaceLabel.Text = "" + return nString +end + +-- When the playerChatted event fires +-- The message is what the player chatted +function Chat:UpdateChat(cPlayer, message) + local messageField = { + ['Player'] = cPlayer, + ['Message'] = message + } + if coroutine.status(Chat.MessageThread) == 'dead' then + --Chat.Messages_List = {} + table.insert(Chat.Messages_List, messageField) + Chat.MessageThread = coroutine.create(function() + for i = 1, #Chat.Messages_List do + local field = Chat.Messages_List[i] + Chat:CreateMessage(field['Player'], field['Message']) + end + Chat.Messages_List = {} + end) + coroutine.resume(Chat.MessageThread) + else + table.insert(Chat.Messages_List, messageField) + end +end + +function Chat:RecalculateSpacing() + --[[for i = 1, #self.MessageQueue do + local pLabel = self.MessageQueue[i]['Player'] + local mLabel = self.MessageQueue[i]['Message'] + + local prevYScale = mLabel.Size.Y.Scale + local prevText = mLabel.Text + mLabel.Text = prevText + + local heightField = mLabel.TextBounds.Y + + mLabel.Size = UDim2.new(1, 0, heightField/self.RenderFrame.AbsoluteSize.Y, 0) + pLabel.Size = mLabel.Size + + local diff = mLabel.Size.Y.Scale - prevYScale + + Chat:UpdateQueue(self.MessageQueue[i], diff) + end ]] +end + +function Chat:ApplyFilter(str) + --[[for _, word in pair(self.Filter_List) do + if string.find(str, word) then + str:gsub(word, '@#$^') + end + end ]] +end + +-- NOTE: Temporarily disabled ring buffer to allow for chat to always wrap around +function Chat:CreateMessage(cPlayer, message) + local pName + if not cPlayer then + pName = '' + else + pName = cPlayer.Name + end + message = StringTrim(message) + local pLabel + local mLabel + -- Our history stores upto 50 messages that is 100 textlabels + -- If we ever hit the mark, which would be in every popular game btw + -- we wrap around and reuse the labels + if #self.MessageQueue > self.Configuration.HistoryLength then + --[[pLabel = self.MessageQueue[#self.MessageQueue]['Player'] + mLabel = self.MessageQueue[#self.MessageQueue]['Message'] + + pLabel.Text = pName .. ':' + pLabel.Name = pName + + local pColor + if cPlayer.Neutral then + pLabel.TextColor3 = Chat:ComputeChatColor(pName) + else + pLabel.TextColor3 = cPlayer.TeamColor.Color + end + + local nString + + if not self.CachedSpaceStrings_List[pName] then + nString = Chat:ComputeSpaceString(pLabel) + else + nString = self.CachedSpaceStrings_List[pName] + end + + mLabel.Text = "" + mLabel.Name = pName .. " - message" + mLabel.Text = nString .. message; + + mLabel.Parent = nil + mLabel.Parent = self.RenderFrame + + mLabel.Position = UDim2.new(0, 0, 1, 0); + pLabel.Position = UDim2.new(0, 0, 1, 0);]] + + -- Reinserted at the beginning, ring buffer + self.MessageQueue[#self.MessageQueue] = nil + end + --else + -- Haven't hit the mark yet, so keep creating + pLabel = Gui.Create'TextLabel' + { + Name = pName; + Text = pName .. ":"; + TextColor3 = pColor; + FontSize = Chat.Configuration.FontSize; + TextXAlignment = Enum.TextXAlignment.Left; + TextYAlignment = Enum.TextYAlignment.Top; + Parent = self.RenderFrame; + TextWrapped = false; + Size = UDim2.new(1, 0, 0.1, 0); + BackgroundTransparency = 1.0; + TextTransparency = 1.0; + Position = UDim2.new(0, 0, 1, 0); + BorderSizePixel = 0.0; + TextStrokeColor3 = Color3.new(0.5, 0.5, 0.5); + TextStrokeTransparency = 0.75; + --Active = false; + }; + local pColor + if cPlayer.Neutral then + pLabel.TextColor3 = Chat:ComputeChatColor(pName) + else + pLabel.TextColor3 = cPlayer.TeamColor.Color + end + + local nString + + if not self.CachedSpaceStrings_List[pName] then + nString = Chat:ComputeSpaceString(pLabel) + else + nString = self.CachedSpaceStrings_List[pName] + end + + mLabel = Gui.Create'TextLabel' + { + Name = pName .. ' - message'; + -- Max is 3 lines + Size = UDim2.new(1, 0, 0.5, 0); + TextColor3 = Chat.Configuration.MessageColor; + FontSize = Chat.Configuration.FontSize; + TextXAlignment = Enum.TextXAlignment.Left; + TextYAlignment = Enum.TextYAlignment.Top; + Text = ""; -- this is to stop when the engine reverts the swear words to default, which is button, ugh + Parent = self.RenderFrame; + TextWrapped = true; + BackgroundTransparency = 1.0; + TextTransparency = 1.0; + Position = UDim2.new(0, 0, 1, 0); + BorderSizePixel = 0.0; + TextStrokeColor3 = Color3.new(0, 0, 0); + --TextStrokeTransparency = 0.8; + --Active = false; + }; + mLabel.Text = nString .. message; + + if not pName then + pLabel.Text = '' + mLabel.TextColor3 = Color3.new(0, 0.4, 1.0) + end + --end + + for _, adminName in pairs(self.Admins_List) do + if string.lower(adminName) == string.lower(pName) then + mLabel.TextColor3 = self.Configuration.AdminMessageColor + end + end + + pLabel.Visible = true + mLabel.Visible = true + + -- This will give beautiful multilines as well + local heightField = mLabel.TextBounds.Y + + mLabel.Size = UDim2.new(1, 0, heightField/self.RenderFrame.AbsoluteSize.Y, 0) + pLabel.Size = mLabel.Size + + local yPixels = self.RenderFrame.AbsoluteSize.Y + local yFieldSize = mLabel.TextBounds.Y + + local queueField = {} + queueField['Player'] = pLabel + queueField['Message'] = mLabel + queueField['SpawnTime'] = tick() -- Used for identifying when to make the message invisible + + table.insert(self.MessageQueue, 1, queueField) + Chat:UpdateQueue(queueField) +end + +function Chat:ScreenSizeChanged() + wait() + while self.Frame.AbsoluteSize.Y > 120 do + self.Frame.Size = self.Frame.Size - UDim2.new(0, 0, 0.005, 0) + end + Chat:RecalculateSpacing() +end + + +function Chat:FindButtonTree(scButton, rootList) + local list = {} + rootList = rootList or self.SafeChatTree + for button, _ in pairs(rootList) do + if button == scButton then + list = rootList[button] + elseif type(rootList[button]) == 'table' then + list = Chat:FindButtonTree(scButton, rootList[button]) + end + end + return list +end + +function Chat:ToggleSafeChatMenu(scButton) + local list = Chat:FindButtonTree(scButton, self.SafeChatTree) + if list then + for button, _ in pairs(list) do + if button:IsA('TextButton') or button:IsA('ImageButton') then + button.Visible = not button.Visible + end + end + return true + end + return false +end + +function Chat:CreateSafeChatOptions(list, rootButton) + local text_List = {} + level = level or 0 + local count = 0 + text_List[rootButton] = {} + text_List[rootButton][1] = list[1] + rootButton = rootButton or self.SafeChatButton + for msg, _ in pairs(list) do + if type(msg) == 'string' then + local chatText = Gui.Create'TextButton' + { + Name = msg; + Text = msg; + Size = UDim2.new(0, 100, 0, 20); + TextXAlignment = Enum.TextXAlignment.Center; + TextColor3 = Color3.new(0.2, 0.1, 0.1); + BackgroundTransparency = 0.5; + BackgroundColor3 = Color3.new(1, 1, 1); + Parent = self.SafeChatFrame; + Visible = false; + Position = UDim2.new(0, rootButton.Position.X.Scale + 105, 0, rootButton.Position.Y.Scale - ((count - 3) * 100)); + }; + + count = count + 1 + + if type(list[msg]) == 'table' then + text_List[rootButton][chatText] = Chat:CreateSafeChatOptions(list[msg], chatText) + else + --table.insert(text_List[chatText], true) + end + chatText.MouseEnter:connect(function() + Chat:ToggleSafeChatMenu(chatText) + end) + + chatText.MouseLeave:connect(function() + Chat:ToggleSafeChatMenu(chatText) + end) + + chatText.MouseButton1Click:connect(function() + local lList = Chat:FindButtonTree(chatText) + if lList then + for i, v in pairs(lList) do + end + else + end + pcall(function() PlayersService:Chat(lList[1]) end) + end) + end + end + return text_List +end + +function Chat:CreateSafeChatGui() + self.SafeChatFrame = Gui.Create'Frame' + { + Name = 'SafeChatFrame'; + Size = UDim2.new(1, 0, 1, 0); + Parent = self.Gui; + BackgroundTransparency = 1.0; + + Gui.Create'ImageButton' + { + Name = 'SafeChatButton'; + Size = UDim2.new(0, 44, 0, 31); + Position = UDim2.new(0, 1, 0.35, 0); + BackgroundTransparency = 1.0; + Image = 'http://www.syntax.eco/asset/?id=97080365'; + }; + } + + self.SafeChatButton = self.SafeChatFrame.SafeChatButton + -- safe chat button is the root of this tree + self.SafeChatTree[self.SafeChatButton] = Chat:CreateSafeChatOptions(self.SafeChat_List, self.SafeChatButton) + + self.SafeChatButton.MouseButton1Click:connect(function() + Chat:ToggleSafeChatMenu(self.SafeChatButton) + end) +end + + +function Chat:FocusOnChatBar() + if self.ClickToChatButton then + self.ClickToChatButton.Visible = false + end + + self.GotFocus = true + if self.Frame['Background'] then + self.Frame.Background.Visible = false + end + self.ChatBar:CaptureFocus() +end + +-- For touch devices we create a button instead +function Chat:CreateTouchButton() + self.ChatTouchFrame = Gui.Create'Frame' + { + Name = 'ChatTouchFrame'; + Size = UDim2.new(0, 128, 0, 32); + Position = UDim2.new(0, 88, 0, 0); + BackgroundTransparency = 1.0; + Parent = self.Gui; + + Gui.Create'ImageButton' + { + Name = 'ChatLabel'; + Size = UDim2.new(0, 74, 0, 28); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ZIndex = 2.0; + }; + Gui.Create'ImageLabel' + { + Name = 'Background'; + Size = UDim2.new(1, 0, 1, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + Image = 'http://www.syntax.eco/asset/?id=97078724' + }; + + } + self.TapToChatLabel = self.ChatTouchFrame.ChatLabel + self.TouchLabelBackground = self.ChatTouchFrame.Background + + self.ChatBar = Gui.Create'TextBox' + { + Name = 'ChatBar'; + Size = UDim2.new(1, 0, 0.2, 0); + Position = UDim2.new(0, 0, 0.8, 800); + Text = ""; + ZIndex = 1.0; + BackgroundTransparency = 1.0; + Parent = self.Frame; + TextXAlignment = Enum.TextXAlignment.Left; + TextColor3 = Color3.new(1, 1, 1); + ClearTextOnFocus = false; + }; + + self.TapToChatLabel.MouseButton1Click:connect(function() + self.TapToChatLabel.Visible = false + --self.ChatBar.Visible = true + --self.Frame.Background.Visible = true + self.ChatBar:CaptureFocus() + self.GotFocus = true + if self.TouchLabelBackground then + self.TouchLabelBackground.Visible = false + end + end) +end + +-- Non touch devices, create the bottom chat bar +function Chat:CreateChatBar() + -- okay now we do + local status, result = pcall(function() return GuiService.UseLuaChat end) + if forceChatGUI or (status and result) then + self.ClickToChatButton = Gui.Create'TextButton' + { + Name = 'ClickToChat'; + Size = UDim2.new(1, 0, 0, 20); + BackgroundTransparency = 1.0; + ZIndex = 2.0; + Parent = self.Gui; + Text = "To chat click here or press \"/\" key"; + TextColor3 = Color3.new(1, 1, 0.9); + Position = UDim2.new(0, 0, 1, 0); + TextXAlignment = Enum.TextXAlignment.Left; + FontSize = Enum.FontSize.Size12; + } + + self.ChatBar = Gui.Create'TextBox' + { + Name = 'ChatBar'; + Size = UDim2.new(1, 0, 0, 20); + Position = UDim2.new(0, 0, 1, 0); + Text = ""; + ZIndex = 1.0; + BackgroundColor3 = Color3.new(0, 0, 0); + BackgroundTransparency = 0.25; + Parent = self.Gui; + TextXAlignment = Enum.TextXAlignment.Left; + TextColor3 = Color3.new(1, 1, 1); + FontSize = Enum.FontSize.Size12; + ClearTextOnFocus = false; + Text = ''; + }; + + -- Engine has code to offset the entire world, so if we do it by -20 pixels nothing gets in our chat's way + --GuiService:SetGlobalSizeOffsetPixel(0, -20) + local success, error = pcall(function() GuiService:SetGlobalGuiInset(0, 0, 0, 20) end) + if not success then + pcall(function() GuiService:SetGlobalSizeOffsetPixel(0, -20) end) -- Doesn't hurt to throw a non-existent function into a pcall + end + -- ChatHotKey is '/' + GuiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) + GuiService.SpecialKeyPressed:connect(function(key) + if key == Enum.SpecialKey.ChatHotkey then + Chat:FocusOnChatBar() + end + end) + + self.ClickToChatButton.MouseButton1Click:connect(function() + Chat:FocusOnChatBar() + end) + end +end + +-- Create the initial Chat stuff +-- Done only once +function Chat:CreateGui() + self.Gui = WaitForChild(CoreGuiService, 'RobloxGui') + self.Frame = Gui.Create'Frame' + { + Name = 'ChatFrame'; + --Size = self.Configuration.Size; + Size = UDim2.new(0, 500, 0, 120); + Position = UDim2.new(0, 0, 0, 5); + BackgroundTransparency = 1.0; + --ClipsDescendants = true; + ZIndex = 0.0; + Parent = self.Gui; + Active = false; + + Gui.Create'ImageLabel' + { + Name = 'Background'; + Image = 'http://www.syntax.eco/asset/?id=97120937'; --96551212'; + Size = UDim2.new(1.3, 0, 1.64, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ZIndex = 0.0; + Visible = false + }; + + Gui.Create'Frame' + { + Name = 'Border'; + Size = UDim2.new(1, 0, 0, 1); + Position = UDim2.new(0, 0, 0.8, 0); + BackgroundTransparency = 0.0; + BackgroundColor3 = Color3.new(236/255, 236/255, 236/255); + BorderSizePixel = 0.0; + Visible = false; + }; + + Gui.Create'Frame' + { + Name = 'ChatRenderFrame'; + Size = UDim2.new(1.02, 0, 1.01, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + --ClipsDescendants = true; + ZIndex = 0.0; + Active = false; + + }; + }; + + Spawn(function() + wait(0.5) + if IsPhone() then + self.Frame.Size = UDim2.new(0, 280, 0, 120) + end + end) + + self.RenderFrame = self.Frame.ChatRenderFrame + if Chat:IsTouchDevice() then + self.Frame.Position = self.Configuration.Position; + self.RenderFrame.Size = UDim2.new(1, 0, 1, 0) + elseif self.Frame.AbsoluteSize.Y > 120 then + Chat:ScreenSizeChanged() + self.Gui.Changed:connect(function(property) + if property == 'AbsoluteSize' then + Chat:ScreenSizeChanged() + end + end) + end + + if forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu then + if Chat:IsTouchDevice() then + Chat:CreateTouchButton() + else + Chat:CreateChatBar() + --Chat:CreateSafeChatGui() + end + + if self.ChatBar then + self.ChatBar.FocusLost:connect(function(enterPressed) + Chat.GotFocus = false + if Chat:IsTouchDevice() then + self.ChatBar.Visible = false + self.TapToChatLabel.Visible = true + + if self.TouchLabelBackground then + self.TouchLabelBackground.Visible = true + end + end + if enterPressed and self.ChatBar.Text ~= "" then + + local cText = self.ChatBar.Text + if string.sub(self.ChatBar.Text, 1, 1) == '%' then + cText = '(TEAM) ' .. string.sub(cText, 2, #cText) + pcall(function() PlayersService:TeamChat(cText) end) + else + pcall(function() PlayersService:Chat(cText) end) + end + + if self.ClickToChatButton then + self.ClickToChatButton.Visible = true + end + self.ChatBar.Text = "" + end + Spawn(function() + wait(5.0) + if not Chat.GotFocus then + Chat.Frame.Background.Visible = false + end + end) + end) + + -- Make the escape key clear the chat box (like it used to) + inputService.InputBegan:connect(function(input) + if (input.KeyCode == Enum.KeyCode.Escape) then + if self.ClickToChatButton then + self.ClickToChatButton.Visible = true + end + + self.ChatBar.Text = "" + end + end) + end + end +end + +-- Scrolling function +-- Applies a speed(velocity) to have nice scrolling effect +function Input:OnMouseScroll() + Spawn(function() + -- How long should the speed last? + while Input.Speed ~=0 do + if Input.Speed > 1 then + while Input.Speed > 0 do + Input.Speed = Input.Speed - 1 + wait(0.25) + end + elseif Input.Speed < 0 then + while Input.Speed < 0 do + Input.Speed = Input.Speed + 1 + wait(0.25) + end + end + wait(0.03) + end + end) + if Chat:CheckIfInBounds(Input.Speed) then + return + end + Chat:ScrollQueue() +end + +function Input:ApplySpeed(value) + Input.Speed = Input.Speed + value + if not self.Simulating then + Input:OnMouseScroll() + end +end + +function Input:Initialize() + self.Mouse.WheelBackward:connect(function() + Input:ApplySpeed(self.Configuration.DefaultSpeed) + end) + + self.Mouse.WheelForward:connect(function() + Input:ApplySpeed(self.Configuration.DefaultSpeed) + end) +end + +function Chat:FindMessageInSafeChat(message, list) + local foundMessage = false + for msg, _ in pairs(list) do + if msg == message then + return true + end + if type(list[msg]) == 'table' then + foundMessage = Chat:FindMessageInSafeChat(message, list[msg]) + if foundMessage then + return true + end + end + end + return foundMessage +end + +-- Just a wrapper around our PlayerChatted event +function Chat:PlayerChatted(...) + local args = {...} + local argCount = select('#', ...) + local player + local message + -- This doesn't look very good, but what else to do? + if args[2] then + player = args[2] + end + if args[3] then + message = args[3] + if string.sub(message, 1, 1) == '%' then + message = '(TEAM) ' .. string.sub(message, 2, #message) + end + end + + if PlayersService.ClassicChat then + if string.sub(message, 1, 3) == '/e ' or string.sub(message, 1, 7) == '/emote ' then + -- don't do anything right now + elseif forceChatGUI or Player.ChatMode == Enum.ChatMode.TextAndMenu then + Chat:UpdateChat(player, message) + elseif Player.ChatMode == Enum.ChatMode.Menu and string.sub(message, 1, 3) == '/sc' then + Chat:UpdateChat(player, message) + else + if Chat:FindMessageInSafeChat(message, self.SafeChat_List) then + Chat:UpdateChat(player, message) + end + end + end +end + +-- After Chat.Configuration.Lifetime seconds of existence, the labels become invisible +-- Runs only every 5 seconds and has to loop through 50 values +-- Shouldn't be too expensive +function Chat:CullThread() + while true do + if #self.MessageQueue > 0 then + for _, field in pairs(self.MessageQueue) do + if field['SpawnTime'] and field['Player'] and field['Message'] and tick() - field['SpawnTime'] > self.Configuration.LifeTime then + field['Player'].Visible = false + field['Message'].Visible = false + end + end + end + wait(5.0) + end +end + +-- RobloxLock everything so users can't delete them(?) +function Chat:LockAllFields(gui) + local children = gui:GetChildren() + for i = 1, #children do + children[i].RobloxLocked = true + if #children[i]:GetChildren() > 0 then + Chat:LockAllFields(children[i]) + end + end +end + +function Chat:CoreGuiChanged(coreGuiType,enabled) + if coreGuiType == Enum.CoreGuiType.Chat or coreGuiType == Enum.CoreGuiType.All then + if self.Frame then self.Frame.Visible = enabled end + if self.TapToChatLabel then self.TapToChatLabel.Visible = enabled end + + if not Chat:IsTouchDevice() and self.ChatBar then + self.ChatBar.Visible = enabled + if enabled then + GuiService:SetGlobalGuiInset(0, 0, 0, 20) + else + GuiService:SetGlobalGuiInset(0, 0, 0, 0) + end + end + end +end + +-- Constructor +-- This function initializes everything +function Chat:Initialize() + + Chat:CreateGui() + + pcall(function() + Chat:CoreGuiChanged(Enum.CoreGuiType.Chat, Game.StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Chat)) + Game.StarterGui.CoreGuiChangedSignal:connect(function(coreGuiType,enabled) Chat:CoreGuiChanged(coreGuiType,enabled) end) + end) + + self.EventListener = PlayersService.PlayerChatted:connect(function(...) + -- This event has 4 callback arguments + -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer + Chat:PlayerChatted(...) + + end) + + self.MessageThread = coroutine.create(function() end) + coroutine.resume(self.MessageThread) + + -- Initialize input for us + Input:Initialize() + -- Eww, everytime a player is added, you have to redo the connection + -- Seems this is not automatic + -- NOTE: PlayerAdded only fires on the server, hence ChildAdded is used here + PlayersService.ChildAdded:connect(function() + Chat.EventListener:disconnect() + self.EventListener = PlayersService.PlayerChatted:connect(function(...) + -- This event has 4 callback arguments + -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer + Chat:PlayerChatted(...) + end) + end) + + Spawn(function() + Chat:CullThread() + end) + + self.Frame.RobloxLocked = true + Chat:LockAllFields(self.Frame) + self.Frame.DescendantAdded:connect(function(descendant) + Chat:LockAllFields(descendant) + end) +end + +Chat:Initialize() diff --git a/app/files/CoreGui/97188757 b/app/files/CoreGui/97188757 new file mode 100644 index 0000000..7b3dfa5 --- /dev/null +++ b/app/files/CoreGui/97188757 @@ -0,0 +1,1211 @@ +--[[ + //FileName: ChatScript.LUA + //Written by: Sorcus + //Description: Code for lua side chat on ROBLOX. Supports Scrolling. + //NOTE: If you find any bugs or inaccuracies PM Sorcus on ROBLOX or @Canavus on Twitter +]] + +-- Utility functions + Globals +local function WaitForChild(parent, childName) + while parent:FindFirstChild(childName) == nil do + wait() + end + return parent[childName] +end + +local function typedef(obj) + return obj +end + +while Game.Players.LocalPlayer == nil do wait() end + +local Player = Game.Players.LocalPlayer +while Player.Character == nil do wait() end +local RbxUtility = LoadLibrary('RbxUtility') +local Gui = typedef(RbxUtility) +local Camera = Game.Workspace.CurrentCamera + +-- Services +local CoreGuiService = Game:GetService('CoreGui') +local PlayersService = Game:GetService('Players') +local DebrisService= Game:GetService('Debris') +local GuiService = Game:GetService('GuiService') + +-- Lua Enums +local Enums do + Enums = {} + local EnumName = {} -- used as unique key for enum name + local enum_mt = { + __call = function(self,value) + return self[value] or self[tonumber(value)] + end; + __index = { + GetEnumItems = function(self) + local t = {} + for i,item in pairs(self) do + if type(i) == 'number' then + t[#t+1] = item + end + end + table.sort(t,function(a,b) return a.Value < b.Value end) + return t + end; + }; + __tostring = function(self) + return "Enum." .. self[EnumName] + end; + } + local item_mt = { + __call = function(self,value) + return value == self or value == self.Name or value == self.Value + end; + __tostring = function(self) + return "Enum." .. self[EnumName] .. "." .. self.Name + end; + } + function CreateEnum(enumName) + return function(t) + local e = {[EnumName] = enumName} + for i,name in pairs(t) do + local item = setmetatable({Name=name,Value=i,Enum=e,[EnumName]=enumName},item_mt) + e[i] = item + e[name] = item + e[item] = item + end + Enums[enumName] = e + return setmetatable(e, enum_mt) + end + end +end +--------------------------------------------------- +------------------ Input class -------------------- +local Input = { + Mouse = Player:GetMouse(), + Speed = 0, + Simulating = false, + + Configuration = { + DefaultSpeed = 1 + }, + UserIsScrolling = false + } + +--------------------------------------------------- +------------------ Chat class -------------------- +local Chat = { + + ChatColors = { + BrickColor.new("Bright red"), + BrickColor.new("Bright blue"), + BrickColor.new("Earth green"), + BrickColor.new("Bright violet"), + BrickColor.new("Bright orange"), + BrickColor.new("Bright yellow"), + BrickColor.new("Light reddish violet"), + BrickColor.new("Brick yellow"), + }, + + Gui = nil, + Frame = nil, + RenderFrame = nil, + TapToChatLabel = nil, + ClickToChatButton = nil, + + ScrollingLock = false, + EventListener = nil, + + -- This is actually a ring buffer + -- Meaning at hitting the historyLength it wraps around + -- Reuses the text objects, so chat atmost uses 100 text objects + MessageQueue = {}, + + -- Stores all the values for configuring chat + Configuration = { + FontSize = Enum.FontSize.Size10, -- 10 is good + -- Also change this when you are changing the above, this is suboptimal but so is our interface to find FontSize + NumFontSize = 10, + HistoryLength = 50, -- stores up to 50 of the last chat messages for you to scroll through, + Size = UDim2.new(0.38, 0, 0.20, 0), + MessageColor = Color3.new(1, 1, 1), + XScale = 0.025, + LifeTime = 45, + Position = UDim2.new(0, 2, 0.05, 0), + DefaultTweenSpeed = 0.15, + }, + + -- This could be redone by just using the previous and next fields of the Queue + -- But the iterators cause issues, will be optimized later + SlotPositions_List = {}, + -- To precompute and store all player null strings since its an expensive process + CachedSpaceStrings_List = {}, + MouseOnFrame = false, + GotFocus = false, + + SafeChat_List = { + ['Use the Chat menu to talk to me.'] = {'/sc 0', true}, + ['I can only see menu chats.'] = {'/sc 1', true}, + ['Hello'] = { + ['Hi'] = {'/sc 2_0', true, ['Hi there!'] = true, ['Hi everyone'] = true}, + ['Howdy'] = {'/sc 2_1', true, ['Howdy partner!'] = true}, + ['Greetings'] = {'/sc 2_2', true, ['Greetings everyone'] = true, ['Greetings Robloxians!'] = true, ['Seasons greetings!'] = true}, + ['Welcome'] = {'/sc 2_3', true, ['Welcome to my place'] = true, ['Welcome to my barbeque'] = true, ['Welcome to our base'] = true}, + ['Hey there!'] = {'/sc 2_4', true}, + ['What\'s up?'] = {'/sc 2_5', true, ['How are you doing?'] = true, ['How\'s it going?'] = true, ['What\'s new?'] = true}, + ['Good day'] = {'/sc 2_6', true, ['Good morning'] = true, ['Good evening'] = true, ['Good afternoon'] = true, ['Good night'] = true}, + ['Silly'] = {'/sc 2_7', true, ['Waaaaaaaz up?!'] = true, ['Hullo!'] = true, ['Behold greatness, mortals!'] = true, ['Pardon me, is this Sparta?'] = true, ['THIS IS SPARTAAAA!'] = true}, + ['Happy Holidays!'] = {'/sc 2_8', true, ['Happy New Year!'] = true, + ['Happy Valentine\'s Day!'] = true, + ['Beware the Ides of March!'] = true, + ['Happy St. Patrick\'s Day!'] = true, + ['Happy Easter!'] = true, + ['Happy Earth Day!'] = true, + ['Happy 4th of July!'] = true, + ['Happy Thanksgiving!'] = true, + ['Happy Halloween!'] = true, + ['Happy Hanukkah!'] = true, + ['Merry Christmas!'] = true, + ['Happy Halloween!'] = true, + ['Happy Earth Day!'] = true, + ['Happy May Day!'] = true, + ['Happy Towel Day!'] = true, + ['Happy ROBLOX Day!'] = true, + ['Happy LOL Day!'] = true }, + + [1] = '/sc 2' + }, + ['Goodbye'] = { + ['Good Night']= {'/sc 3_0', true, + ['Sweet dreams'] = true, + ['Go to sleep!'] = true, + ['Lights out!'] = true, + ['Bedtime'] = true, + ['Going to bed now'] = true}, + + ['Later']= {'/sc 3_1', true, + ['See ya later'] = true, + ['Later gator!'] = true, + ['See you tomorrow'] = true}, + + ['Bye'] = {'/sc 3_2', true, ['Hasta la bye bye!'] = true}, + ['I\'ll be right back'] = {'/sc 3_3', true}, + ['I have to go'] = {'/sc 3_4', true}, + ['Farewell'] = {'/sc 3_5', true, ['Take care'] = true, ['Have a nice day'] = true, ['Goodluck!'] = true, ['Ta-ta for now!'] = true}, + ['Peace'] = {'/sc 3_6', true, ['Peace out!'] = true, ['Peace dudes!'] = true, ['Rest in pieces!'] = true}, + ['Silly'] = {'/sc 3_7', true, + ['To the batcave!'] = true, + ['Over and out!'] = true, + ['Happy trails!'] = true, + ['I\'ve got to book it!'] = true, + ['Tootles!'] = true, + ['Smell you later!'] = true, + ['GG!'] = true, + ['My house is on fire! gtg.'] = true}, + [1] = '/sc 3' + }, + ['Friend'] ={ + ['Wanna be friends?'] = {'/sc 4_0', true}, + ['Follow me'] = {'/sc 4_1', true, ['Come to my place!'] = true, ['Come to my base!'] = true, ['Follow me, team!'] = true, ['Follow me'] = true}, + ['Your place is cool'] = {'/sc 4_2', true, ['Your place is fun'] = true, ['Your place is awesome'] = true, ['Your place looks good'] = true, ['This place is awesome!'] = true}, + ['Thank you'] = {'/sc 4_3', true, ['Thanks for playing'] = true, ['Thanks for visiting'] = true, ['Thanks for everything'] = true, ['No, thank you'] = true, ['Thanx'] = true}, + ['No problem'] = {'/sc 4_4', true, ['Don\'t worry'] = true, ['That\'s ok'] = true, ['np'] = true}, + ['You are ...'] = {'/sc 4_5', true, + ['You are great!'] = true, + ['You are good!'] = true, + ['You are cool!'] = true, + ['You are funny!'] = true, + ['You are silly!'] = true, + ['You are awesome!'] = true, + ['You are doing something I don\'t like, please stop'] = true + }, + ['I like ...'] = {'/sc 4_6', true, ['I like your name'] = true, ['I like your shirt'] = true, ['I like your place'] = true, ['I like your style'] = true, + ['I like you'] = true, ['I like items'] = true, ['I like money'] = true}, + ['Sorry'] = {'/sc 4_7', true, ['My bad!'] = true, ['I\'m sorry'] = true, ['Whoops!'] = true, ['Please forgive me.'] = true, ['I forgive you.'] = true, + ['I didn\'t mean to do that.'] = true, ['Sorry, I\'ll stop now.'] = true}, + [1] = '/sc 4' + }, + ['Questions'] = { + ['Who?'] = {'/sc 5_0', true, ['Who wants to be my friend?'] = true, ['Who wants to be on my team?'] = true, ['Who made this brilliant game?'] = true}, + ['What?'] = {'/sc 5_1', true, ['What is your favorite animal?'] = true, ['What is your favorite game?'] = true, ['What is your favorite movie?'] = true, + ['What is your favorite TV show?'] = true, ['What is your favorite music?'] = true, ['What are your hobbies?'] = true, ['LOLWUT?'] = true}, + ['When?'] = {'/sc 5_2', true, ['When are you online?'] = true, ['When is the new version coming out?'] = true, ['When can we play again?'] = true, ['When will your place be done?'] = true}, + ['Where?'] = {'/sc 5_3', true, ['Where do you want to go?'] = true, ['Where are you going?'] = true, ['Where am I?!'] = true, ['Where did you go?'] = true}, + ['How?'] = {'/sc 5_4', true, ['How are you today?'] = true, ['How did you make this cool place?'] = true, ['LOLHOW?'] = true}, + ['Can I...'] = {'/sc 5_5', true, ['Can I have a tour?'] = true, ['Can I be on your team?'] = true, ['Can I be your friend?'] = true, ['Can I try something?'] = true, + ['Can I have that please?'] = true, ['Can I have that back please?'] = true, ['Can I have borrow your hat?'] = true, ['Can I have borrow your gear?'] = true}, + [1] = '/sc 5' + }, + ['Answers'] = { + ['You need help?'] = {'/sc 6_0', true, ['Check out the news section'] = true, ['Check out the help section'] = true, ['Read the wiki!'] = true, + ['All the answers are in the wiki!'] = true, ['I will help you with this.'] = true}, + ['Some people ...'] = {'/sc 6_1', true, ['Me'] = true, ['Not me'] = true, ['You'] = true, ['All of us'] = true, ['Everyone but you'] = true, ['Builderman!'] = true, + ['Telamon!'] = true, ['My team'] = true, ['My group'] = true, ['Mom'] = true, ['Dad'] = true, ['Sister'] = true, ['Brother'] = true, ['Cousin'] = true, + ['Grandparent'] = true, ['Friend'] = true}, + ['Time ...'] = {'/sc 6_2', true, ['In the morning'] = true, ['In the afternoon'] = true, ['At night'] = true, ['Tomorrow'] = true, ['This week'] = true, ['This month'] = true, + ['Sometime'] = true, ['Sometimes'] = true, ['Whenever you want'] = true, ['Never'] = true, ['After this'] = true, ['In 10 minutes'] = true, ['In a couple hours'] = true, + ['In a couple days'] = true}, + ['Animals'] = {'/sc 6_3', true, + ['Cats'] = {['Lion'] = true, ['Tiger'] = true, ['Leopard'] = true, ['Cheetah'] = true}, + ['Dogs'] = {['Wolves'] = true, ['Beagle'] = true, ['Collie'] = true, ['Dalmatian'] = true, ['Poodle'] = true, ['Spaniel'] = true, + ['Shepherd'] = true, ['Terrier'] = true, ['Retriever'] = true}, + ['Horses'] = {['Ponies'] = true, ['Stallions'] = true, ['Pwnyz'] = true}, + ['Reptiles'] = {['Dinosaurs'] = true, ['Lizards'] = true, ['Snakes'] = true, ['Turtles!'] = true}, + ['Hamster'] = true, + ['Monkey'] = true, + ['Bears'] = true, + ['Fish'] = {['Goldfish'] = true, ['Sharks'] = true, ['Sea Bass'] = true, ['Halibut'] = true, ['Tropical Fish'] = true}, + ['Birds'] = {['Eagles'] = true, ['Penguins'] = true, ['Parakeets'] = true, ['Owls'] = true, ['Hawks'] = true, ['Pidgeons'] = true}, + ['Elephants'] = true, + ['Mythical Beasts'] = {['Dragons'] = true, ['Unicorns'] = true, ['Sea Serpents'] = true, ['Sphinx'] = true, ['Cyclops'] = true, + ['Minotaurs'] = true, ['Goblins'] = true, ['Honest Politicians'] = true, ['Ghosts'] = true, ['Scylla and Charybdis'] = true} + }, + ['Games'] = {'/sc 6_4', true, + ['Action'] = true, ['Puzzle'] = true, ['Strategy'] = true, ['Racing'] = true, ['RPG'] = true, ['Obstacle Course'] = true, ['Tycoon'] = true, + ['Roblox'] = { ['BrickBattle'] = true, ['Community Building'] = true, ['Roblox Minigames'] = true, ['Contest Place'] = true}, + ['Board games'] = { ['Chess'] = true, ['Checkers'] = true, ['Settlers of Catan'] = true, ['Tigris and Euphrates'] = true, ['El Grande'] = true, + ['Stratego'] = true, ['Carcassonne'] = true} + }, + ['Sports'] = {'/sc 6_5', true, ['Hockey'] = true, ['Soccer'] = true, ['Football'] = true, ['Baseball'] = true, ['Basketball'] = true, + ['Volleyball'] = true, ['Tennis'] = true, ['Sports team practice'] = true, + ['Watersports'] = { ['Surfing'] = true,['Swimming'] = true, ['Water Polo'] = true}, + ['Winter sports'] = { ['Skiing'] = true, ['Snowboarding'] = true, ['Sledding'] = true, ['Skating'] = true}, + ['Adventure'] = {['Rock climbing'] = true, ['Hiking'] = true, ['Fishing'] = true, ['Horseback riding'] = true}, + ['Wacky'] = {['Foosball'] = true, ['Calvinball'] = true, ['Croquet'] = true, ['Cricket'] = true, ['Dodgeball'] = true, + ['Squash'] = true, ['Trampoline'] = true} + }, + ['Movies/TV'] = {'/sc 6_6', true, ['Science Fiction'] = true, ['Animated'] = {['Anime'] = true}, ['Comedy'] = true, ['Romantic'] = true, + ['Action'] = true, ['Fantasy'] = true}, + ['Music'] = {'/sc 6_7', true, ['Country'] = true, ['Jazz'] = true, ['Rap'] = true, ['Hip-hop'] = true, ['Techno'] = true, ['Classical'] = true, + ['Pop'] = true, ['Rock'] = true}, + ['Hobbies'] = {'/sc 6_8', true, + ['Computers'] = { ['Building computers'] = true, ['Videogames'] = true, ['Coding'] = true, ['Hacking'] = true}, + ['The Internet'] = { ['lol. teh internets!'] = true, ['Watching vids'] = true}, + ['Dance'] = true, ['Gymnastics'] = true, ['Listening to music'] = true, ['Arts and crafts'] = true, + ['Martial Arts'] = {['Karate'] = true, ['Judo'] = true, ['Taikwon Do'] = true, ['Wushu'] = true, ['Street fighting'] = true}, + ['Music lessons'] = {['Playing in my band'] = true, ['Playing piano'] = true, ['Playing guitar'] = true, + ['Playing violin'] = true, ['Playing drums'] = true, ['Playing a weird instrument'] = true} + }, + ['Location'] = {'/sc 6_9', true, + ['USA'] = { + ['West'] = { ['Alaska'] = true, ['Arizona'] = true, ['California'] = true, ['Colorado'] = true, ['Hawaii'] = true, + ['Idaho'] = true, ['Montana'] = true, ['Nevada'] = true, ['New Mexico'] = true, ['Oregon'] = true, + ['Utah'] = true, ['Washington'] = true, ['Wyoming'] = true + }, + ['South'] = { ['Alabama'] = true, ['Arkansas'] = true, ['Florida'] = true, ['Georgia'] = true, ['Kentucky'] = true, + ['Louisiana'] = true, ['Mississippi'] = true, ['North Carolina'] = true, ['Oklahoma'] = true, + ['South Carolina'] = true, ['Tennessee'] = true, ['Texas'] = true, ['Virginia'] = true, ['West Virginia'] = true + }, + ['Northeast'] = {['Connecticut'] = true, ['Delaware'] = true, ['Maine'] = true, ['Maryland'] = true, ['Massachusetts'] = true, + ['New Hampshire'] = true, ['New Jersey'] = true, ['New York'] = true, ['Pennsylvania'] = true, ['Rhode Island'] = true, + ['Vermont'] = true + }, + ['Midwest'] = {['Illinois'] = true, ['Indiana'] = true, ['Iowa'] = true, ['Kansas'] = true, ['Michigan'] = true, ['Minnesota'] = true, + ['Missouri'] = true, ['Nebraska'] = true, ['North Dakota'] = true, ['Ohio'] = true, ['South Dakota'] = true, ['Wisconsin'] = true} + }, + ['Canada'] = {['Alberta'] = true, ['British Columbia'] = true, ['Manitoba'] = true, ['New Brunswick'] = true, ['Newfoundland'] = true, + ['Northwest Territories'] = true, ['Nova Scotia'] = true, ['Nunavut'] = true, ['Ontario'] = true, ['Prince Edward Island'] = true, + ['Quebec'] = true, ['Saskatchewan'] = true, ['Yukon'] = true}, + ['Mexico'] = true, + ['Central America'] = true, + ['Europe'] = {['France'] = true, ['Germany'] = true, ['Spain'] = true, ['Italy'] = true, ['Poland'] = true, ['Switzerland'] = true, + ['Greece'] = true, ['Romania'] = true, ['Netherlands'] = true, + ['Great Britain'] = {['England'] = true, ['Scotland'] = true, ['Wales'] = true, ['Northern Ireland'] = true} + }, + ['Asia'] = { ['China'] = true, ['India'] = true, ['Japan'] = true, ['Korea'] = true, ['Russia'] = true, ['Vietnam'] = true}, + ['South America'] = { ['Argentina'] = true, ['Brazil'] = true}, + ['Africa'] = { ['Eygpt'] = true, ['Swaziland'] = true}, + ['Australia'] = true, ['Middle East'] = true, ['Antarctica'] = true, ['New Zealand'] = true + }, + ['Age'] = {'/sc 6_10', true, ['Rugrat'] = true, ['Kid'] = true, ['Tween'] = true, ['Teen'] = true, ['Twenties'] = true, + ['Old'] = true, ['Ancient'] = true, ['Mesozoic'] = true, ['I don\'t want to say my age. Don\'t ask.'] = true}, + ['Mood'] = {'/sc 6_11', true, ['Good'] = true, ['Great!'] = true, ['Not bad'] = true, ['Sad'] = true, ['Hyper'] = true, + ['Chill'] = true, ['Happy'] = true, ['Kind of mad'] = true}, + ['Boy'] = {'/sc 6_12', true}, + ['Girl'] = {'/sc 6_13', true}, + ['I don\'t want to say boy or girl. Don\'t ask.'] = {'/sc 6_14', true}, + [1] = '/sc 6' + }, + ['Game'] = { + ['Let\'s build'] = {'/sc 7_0', true}, + ['Let\'s battle'] = {'/sc 7_1', true}, + ['Nice one!'] = {'/sc 7_2', true}, + ['So far so good'] = {'/sc 7_3', true}, + ['Lucky shot!'] = {'/sc 7_4', true}, + ['Oh man!'] = {'/sc 7_5', true}, + ['I challenge you to a fight!'] = {'/sc 7_6', true}, + ['Help me with this'] = {'/sc 7_7', true}, + ['Let\'s go to your game'] = {'/sc 7_8', true}, + ['Can you show me how do to that?'] = {'/sc 7_9', true}, + ['Backflip!'] = {'/sc 7_10', true}, + ['Frontflip!'] = {'/sc 7_11', true}, + ['Dance!'] = {'/sc 7_12', true}, + ['I\'m on your side!'] = {'/sc 7_13', true}, + ['Game Commands'] = {'/sc 7_14', true, ['regen'] = true, ['reset'] = true, ['go'] = true, ['fix'] = true, ['respawn'] = true}, + [1] = '/sc 7' + }; + ['Silly'] = { + ['Muahahahaha!'] = true, + ['all your base are belong to me!'] = true, + ['GET OFF MAH LAWN'] = true, + ['TEH EPIK DUCK IS COMING!!!'] = true, + ['ROFL'] = true, + ['1337'] = {true, ['i r teh pwnz0r!'] = true, ['w00t!'] = true, ['z0mg h4x!'] = true, ['ub3rR0xXorzage!'] = true} + }, + ['Yes'] = { + ['Absolutely!'] = true, + ['Rock on!'] = true, + ['Totally!'] = true, + ['Juice!'] = true, + ['Yay!'] = true, + ['Yesh'] = true + }, + ['No'] = { + ['Ummm. No.'] = true, + ['...'] = true, + ['Stop!'] = true, + ['Go away!'] = true, + ['Don\'t do that'] = true, + ['Stop breaking the rules'] = true, + ['I don\'t want to'] = true + }, + ['Ok'] = { + ['Well... ok'] = true, + ['Sure'] = true + }, + ['Uncertain'] = { + ['Maybe'] = true, + ['I don\'t know'] = true, + ['idk'] = true, + ['I can\'t decide'] = true, + ['Hmm...'] = true + }, + [':-)'] = { + [':-('] = true, + [':D'] = true, + [':-O'] = true, + ['lol'] = true, + ['=D'] = true, + ['D='] = true, + ['XD'] = true, + [';D'] = true, + [';)'] = true, + ['O_O'] = true, + ['=)'] = true, + ['@_@'] = true, + ['>_<'] = true, + ['T_T'] = true, + ['^_^'] = true, + ['<(0_0<) <(0_0)> (>0_0)> KIRBY DANCE'] = true, + [')\';'] = true, + [':3'] = true + }, + ['Ratings'] = { + ['Rate it!'] = true, + ['I give it a 1 out of 10'] = true, + ['I give it a 2 out of 10'] = true, + ['I give it a 3 out of 10'] = true, + ['I give it a 4 out of 10'] = true, + ['I give it a 5 out of 10'] = true, + ['I give it a 6 out of 10'] = true, + ['I give it a 7 out of 10'] = true, + ['I give it a 8 out of 10'] = true, + ['I give it a 9 out of 10'] = true, + ['I give it a 10 out of 10!'] = true, + } + }, + CreateEnum('SafeChat'){'Level1', 'Level2', 'Level3'}, + SafeChatTree = {} + } +--------------------------------------------------- + +local function GetNameValue(pName) + local value = 0 + for index = 1, #pName do + local cValue = string.byte(string.sub(pName, index, index)) + local reverseIndex = #pName - index + 1 + if #pName%2 == 1 then + reverseIndex = reverseIndex - 1 + end + if reverseIndex%4 >= 2 then + cValue = -cValue + end + value = value + cValue + end + return value%8 +end + +function Chat:ComputeChatColor(pName) + return self.ChatColors[GetNameValue(pName) + 1].Color +end + +-- This is context based scrolling +function Chat:EnableScrolling(toggle) + -- Genius idea gone to fail, if we switch the camera type we can effectively lock the + -- camera and do no click scrolling + self.MouseOnFrame = false + if self.RenderFrame then + self.RenderFrame.MouseEnter:connect(function() + local character = Player.Character + local torso = WaitForChild(character, 'Torso') + local humanoid = WaitForChild(character, 'Humanoid') + local head = WaitForChild(character, 'Head') + if toggle then + self.MouseOnFrame = true + Camera.CameraType = 'Scriptable' + -- Get relative position of camera and keep to it + Spawn(function() + local currentRelativePos = Camera.CoordinateFrame.p - torso.Position + while Chat.MouseOnFrame do + Camera.CoordinateFrame = CFrame.new(torso.Position + currentRelativePos, head.Position) + wait(0.015) + end + end) + end + end) + + self.RenderFrame.MouseLeave:connect(function() + Camera.CameraType = 'Custom' + self.MouseOnFrame = false + end) + end +end + +-- TODO: Scrolling using Mouse wheel +function Chat:OnScroll(speed) + if self.MouseOnFrame then + -- + end +end + +-- Check if we are running on a touch device +function Chat:IsTouchDevice() + local touchEnabled = false + pcall(function() touchEnabled = Game:GetService('UserInputService').TouchEnabled end) + return touchEnabled +end + +-- Scrolling +function Chat:ScrollQueue(value) + for i = 1, #self.MessageQueue do + if self.MessageQueue[i] then + for _, label in pairs(self.MessageQueue[i]) do + local next = self.MessageQueue[i].Next + local previous = self.MessageQueue[i].Previous + if label and label:IsA('TextLabel') or label:IsA('TextButton') then + if value > 0 and previous and previous['Message'] then + label.Position = previous['Message'].Position + elseif value < 1 and next['Message'] then + label.Position = previous['Message'].Position + end + end + end + end + end +end + +-- Handles the rendering of the text objects in their appropriate places +function Chat:UpdateQueue(field) + -- Have to do some sort of correction here + for i = #self.MessageQueue, 1, -1 do + if self.MessageQueue[i] then + for _, label in pairs(self.MessageQueue[i]) do + if label and type(label) ~= 'table' and type(label) ~= 'number' then + if label:IsA('TextLabel') or label:IsA('TextButton') then + if self.SlotPositions_List[i] and self.MessageQueue[i] ~= field then + label.Position = self.SlotPositions_List[i][1] - UDim2.new(0, 0, field['Message'].Size.Y.Scale, 0) + label.Position = UDim2.new(self.Configuration.XScale, 0, label.Position.Y.Scale, 0) + else + label.Position = UDim2.new(self.Configuration.XScale, 0, label.Position.Y.Scale - field['Message'].Size.Y.Scale , 0) + end + if field == self.MessageQueue[i] then + -- Just to show up popping effect for the latest message in chat + Spawn(function() + wait(0.15) + while label.TextTransparency > 0 do + label.TextTransparency = label.TextTransparency - 0.2 + wait() + end + end) + end + if label.Position.Y.Scale < -0.05 or label.Position.Y.Scale > 1.0 then + label.TextTransparency = 1.0 + else + label.TextTransparency = 0.0 + end + end + end + end + end + end +end + +function Chat:InsertIntoQueue(field) + -- This is a ring buffer where insertions happen at the beginning + -- One optimization here would be to not copy the queue by reference + -- And reuse the same queue and do the insertion in place + -- But rendering code must be changed accordingly and this becomes rather hard to manage + -- plus the effects are minimal + -- TODO: Revist if this becomes a problem for optimization + local tmpQueue = self.MessageQueue + self.MessageQueue = {} + self.MessageQueue[1] = field + self.MessageQueue[1].Previous = tmpQueue[i] + self.MessageQueue[1].Next = nil + + self.SlotPositions_List = {} + self.SlotPositions_List[1] = {field.Position, field.Size} + + if tmpQueue[self.Configuration.HistoryLength] then + if tmpQueue[self.Configuration.HistoryLength]['Player'] then + tmpQueue[self.Configuration.HistoryLength]['Player']:Destroy() + end + if tmpQueue[self.Configuration.HistoryLength]['Message'] then + tmpQueue[self.Configuration.HistoryLength]['Message']:Destroy() + end + tmpQueue[self.Configuration.HistoryLength] = nil + end + + for i = 1, self.Configuration.HistoryLength - 1 do + if tmpQueue[i] and tmpQueue[i]['Player'] and tmpQueue[i]['Player'].Parent then + table.insert(self.MessageQueue, tmpQueue[i]) + self.MessageQueue[#self.MessageQueue].Previous = tmpQueue[i+1] or nil + self.MessageQueue[#self.MessageQueue].Next = tmpQueue[i-1] or nil + + self.SlotPositions_List[#self.MessageQueue] = {tmpQueue[i]['Message'].Position, tmpQueue[i]['Message'].Size} + end + end + -- Now, render the queue + Chat:UpdateQueue(field) +end + +function Chat:CreateScrollBar() + -- Code for scrolling is in here, partially, but scroll bar drawing isn't drawn + -- TODO: Implement +end + +function Chat:FocusOnChatBar() + if self.ClickToChatButton then + self.ClickToChatButton.Visible = false + end + + self.GotFocus = true + if self.Frame['Background'] then + self.Frame.Background.Visible = false + end + self.ChatBar:CaptureFocus() +end + +-- For touch devices we create a button instead +function Chat:CreateTouchButton() + self.ChatTouchFrame = Gui.Create'Frame' + { + Name = 'ChatTouchFrame'; + Size = UDim2.new(0, 128, 0, 32); + Position = UDim2.new(0, 88, 0, 0); + BackgroundTransparency = 1.0; + Parent = self.Gui; + + Gui.Create'ImageButton' + { + Name = 'ChatLabel'; + Size = UDim2.new(0, 74, 0, 28); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ZIndex = 2.0; + }; + + Gui.Create'ImageLabel' + { + Name = 'Background'; + Size = UDim2.new(1, 0, 1, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + Image = 'http://www.roblox.com/asset/?id=97078724' + }; + } + self.TapToChatLabel = self.ChatTouchFrame.ChatLabel + self.TouchLabelBackground = self.ChatTouchFrame.Background + + self.ChatBar = Gui.Create'TextBox' + { + Name = 'ChatBar'; + Size = UDim2.new(1, 0, 0.2, 0); + Position = UDim2.new(0, 0, 0.8, 0); + Text = ""; + ZIndex = 1.0; + BackgroundTransparency = 1.0; + Parent = self.Frame; + TextXAlignment = Enum.TextXAlignment.Left; + TextColor3 = Color3.new(1, 1, 1); + ClearTextOnFocus = false; + }; + + self.TapToChatLabel.MouseButton1Click:connect(function() + self.TapToChatLabel.Visible = false + --self.ChatBar.Visible = true + self.Frame.Background.Visible = true + self.ChatBar:CaptureFocus() + self.GotFocus = true + if self.TouchLabelBackground then + self.TouchLabelBackground.Visible = false + end + end) +end + +-- Non touch devices, create the bottom chat bar +function Chat:CreateChatBar() + -- okay now we do + local status, result = pcall(function() return GuiService.UseLuaChat end) + if status and result then + self.ClickToChatButton = Gui.Create'TextButton' + { + Name = 'ClickToChat'; + Size = UDim2.new(1, 0, 0, 20); + BackgroundTransparency = 1.0; + ZIndex = 2.0; + Parent = self.Gui; + Text = "To chat click here or press \"/\" key"; + TextColor3 = Color3.new(1, 1, 0.9); + Position = UDim2.new(0, 0, 1, 0); + TextXAlignment = Enum.TextXAlignment.Left; + FontSize = Enum.FontSize.Size12; + } + + self.ChatBar = Gui.Create'TextBox' + { + Name = 'ChatBar'; + Size = UDim2.new(1, 0, 0, 20); + Position = UDim2.new(0, 0, 1, 0); + Text = ""; + ZIndex = 1.0; + BackgroundColor3 = Color3.new(0, 0, 0); + BackgroundTransparency = 0.25; + Parent = self.Gui; + TextXAlignment = Enum.TextXAlignment.Left; + TextColor3 = Color3.new(1, 1, 1); + FontSize = Enum.FontSize.Size12; + ClearTextOnFocus = false; + Text = ''; + }; + + -- Engine has code to offset the entire world, so if we do it by -20 pixels nothing gets in our chat's way + GuiService:SetGlobalSizeOffsetPixel(0, -20) + -- CHatHotKey is '/' + GuiService:AddSpecialKey(Enum.SpecialKey.ChatHotkey) + GuiService.SpecialKeyPressed:connect(function(key) + if key == Enum.SpecialKey.ChatHotkey then + Chat:FocusOnChatBar() + end + end) + + self.ClickToChatButton.MouseButton1Click:connect(function() + Chat:FocusOnChatBar() + end) + end +end + +-- For scrolling, to see if we hit the bounds so that we can stop it from scrolling anymore +function Chat:CheckIfInBounds(value) + if #Chat.MessageQueue < 3 then + return true + end + + if value > 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale == 0 then + return true + elseif value < 0 and Chat.MessageQueue[1] and Chat.MessageQueue[1]['Player'] and Chat.MessageQueue[1]['Player'].Position.Y.Scale < 0 then + return true + else + return false + end + return false +end + +-- This is to precompute all playerName space strings +-- This is used to offset the message by exactly this + 2 spacestrings +function Chat:ComputeSpaceString(pLabel) + local tLabel = Gui.Create'TextButton' + { + Size = UDim2.new(0, pLabel.AbsoluteSize.X, 0, pLabel.AbsoluteSize.Y); + FontSize = self.Configuration.FontSize; + Parent = self.RenderFrame; + BackgroundTransparency = 1.0; + Text = nString; + }; + local nString = " " + while tLabel.TextBounds.X < pLabel.TextBounds.X do + nString = nString .. " " + tLabel.Text = nString + end + self.CachedSpaceStrings_List[pLabel.Text] = nString + return nString +end + +-- When the playerChatted event fires +-- The message is what the player chatted +function Chat:UpdateChat(cPlayer, message) + local pName = cPlayer.Name + local pLabel + local mLabel + -- Our history stores upto 50 messages that is 100 textlabels + -- If we ever hit the mark, which would be in every popular game btw + -- we wrap around and reuse the labels + if #self.MessageQueue > self.Configuration.HistoryLength then + pLabel = self.MessageQueue[#self.MessageQueue]['Player'] + mLabel = self.MessageQueue[#self.MessageQueue]['Message'] + + pLabel.Text = pName + pLabel.Name = pName + pLabel.TextColor3 = Chat:ComputeChatColor(pName) + + local nString + + if not self.CachedSpaceStrings_List[pName] then + nString = Chat:ComputeSpaceString(pLabel) + else + nString = self.CachedSpaceStrings_List[pName] + end + + mLabel.Name = pName .. " - message" + mLabel.Text = nString .. message; + + -- Reinserted at the beginning, ring buffer + self.MessageQueue[#self.MessageQueue] = nil + else + -- Haven't hit the mark yet, so keep creating + pLabel = Gui.Create'TextButton' + { + Name = pName; + Text = pName .. ":"; + TextColor3 = Chat:ComputeChatColor(pName); + FontSize = Chat.Configuration.FontSize; + TextXAlignment = Enum.TextXAlignment.Left; + TextYAlignment = Enum.TextYAlignment.Top; + Parent = self.RenderFrame; + TextWrapped = false; + Size = UDim2.new(1, 0, 0.1, 0); + BackgroundTransparency = 1.0; + TextTransparency = 1.0; + Position = UDim2.new(0, 0, 1, 0); + BorderSizePixel = 0.0; + }; + + local nString + + if not self.CachedSpaceStrings_List[pName] then + nString = Chat:ComputeSpaceString(pLabel) + else + nString = self.CachedSpaceStrings_List[pName] + end + + mLabel = Gui.Create'TextButton' + { + Name = pName .. ' - message'; + -- Max is 3 lines + Size = UDim2.new(1, 0, 0.5, 0); + Text = nString .. message; + TextColor3 = Chat.Configuration.MessageColor; + FontSize = Chat.Configuration.FontSize; + TextXAlignment = Enum.TextXAlignment.Left; + TextYAlignment = Enum.TextYAlignment.Top; + Parent = self.RenderFrame; + TextWrapped = true; + BackgroundTransparency = 1.0; + TextTransparency = 1.0; + Position = UDim2.new(0, 0, 1, 0); + BorderSizePixel = 0.0; + }; + end + + -- This is to find if we need to wrap the text around + -- Expensive, but works well and worthwhile + -- This will give beautiful multilines as well + local heightField = 0.1 * self.RenderFrame.AbsoluteSize.Y + + while heightField < mLabel.TextBounds.Y do + heightField = heightField + 1 + end + + pLabel.Visible = true + mLabel.Visible = true + + mLabel.Size = UDim2.new(1, 0, heightField/self.RenderFrame.AbsoluteSize.Y, 0) + pLabel.Size = mLabel.Size + local yPixels = self.RenderFrame.AbsoluteSize.Y + local yFieldSize = mLabel.TextBounds.Y + + local queueField = {} + queueField['Player'] = pLabel + queueField['Message'] = mLabel + queueField['SpawnTime'] = tick() -- Used for identifying when to make the message invisible + + Chat:InsertIntoQueue(queueField) +end + +function Chat:ScreenSizeChanged() + while self.Frame.AbsoluteSize.Y > 120 do + self.Frame.Size = self.Frame.Size - UDim2.new(0, 0, 0.005, 0) + end +end + +-- Create the initial Chat stuff +-- Done only once +function Chat:CreateGui() + self.Gui = WaitForChild(CoreGuiService, 'RobloxGui') + self.Frame = Gui.Create'Frame' + { + Name = 'ChatFrame'; + Size = self.Configuration.Size; + Position = UDim2.new(0, 0, 0, 5); + BackgroundTransparency = 1.0; + --ClipsDescendants = true; + ZIndex = 0.0; + Parent = self.Gui; + + Gui.Create'ImageLabel' + { + Name = 'Background'; + Image = 'http://www.roblox.com/asset/?id=97120937'; --96551212'; + Size = UDim2.new(1.3, 0, 1.64, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ZIndex = 0.0; + Visible = false + }; + + Gui.Create'Frame' + { + Name = 'Border'; + Size = UDim2.new(1, 0, 0, 1); + Position = UDim2.new(0, 0, 0.8, 0); + BackgroundTransparency = 0.0; + BackgroundColor3 = Color3.new(236/255, 236/255, 236/255); + BorderSizePixel = 0.0; + Visible = false; + }; + + Gui.Create'Frame' + { + Name = 'ChatRenderFrame'; + Size = UDim2.new(1.02, 0, 1.01, 0); + Position = UDim2.new(0, 0, 0, 0); + BackgroundTransparency = 1.0; + ClipsDescendants = true; + ZIndex = 0.0; + + }; + }; + + + self.RenderFrame = self.Frame.ChatRenderFrame + if Chat:IsTouchDevice() then + self.Frame.Position = self.Configuration.Position; + self.RenderFrame.Size = UDim2.new(1, 0, 1, 0) + elseif self.Frame.AbsoluteSize.Y > 120 then + Chat:ScreenSizeChanged() + self.Gui.Changed:connect(function(property) + if property == 'AbsoluteSize' then + Chat:ScreenSizeChanged() + end + end) + end + + if Player.ChatMode == Enum.ChatMode.TextAndMenu then + if Chat:IsTouchDevice() then + Chat:CreateTouchButton() + else + Chat:CreateChatBar() + --Chat:CreateSafeChatGui() + end + + if self.ChatBar then + self.ChatBar.FocusLost:connect(function(enterPressed) + Chat.GotFocus = false + if Chat:IsTouchDevice() then + self.ChatBar.Visible = false + self.TapToChatLabel.Visible = true + + if self.TouchLabelBackground then + self.TouchLabelBackground.Visible = true + end + end + if enterPressed and self.ChatBar.Text ~= "" then + if PlayersService.ClassicChat then + pcall(function() PlayersService:Chat(self.ChatBar.Text) end) + elseif PlayersService.BubbleChat then + -- do nothing + end + if self.ClickToChatButton then + self.ClickToChatButton.Visible = true + end + self.ChatBar.Text = "" + end + Spawn(function() + wait(5.0) + if not Chat.GotFocus then + Chat.Frame.Background.Visible = false + end + end) + end) + end + end +end + +function Chat:FindButtonTree(scButton, rootList) + local list = {} + rootList = rootList or self.SafeChatTree + for button, _ in pairs(rootList) do + if button == scButton then + list = rootList[button] + elseif type(rootList[button]) == 'table' then + list = Chat:FindButtonTree(scButton, rootList[button]) + end + end + return list +end + +function Chat:ToggleSafeChatMenu(scButton) + local list = Chat:FindButtonTree(scButton, self.SafeChatTree) + if list then + for button, _ in pairs(list) do + if button:IsA('TextButton') or button:IsA('ImageButton') then + button.Visible = not button.Visible + end + end + return true + end + return false +end + +function Chat:CreateSafeChatOptions(list, rootButton) + local text_List = {} + level = level or 0 + local count = 0 + text_List[rootButton] = {} + text_List[rootButton][1] = list[1] + rootButton = rootButton or self.SafeChatButton + for msg, _ in pairs(list) do + if type(msg) == 'string' then + local chatText = Gui.Create'TextButton' + { + Name = msg; + Text = msg; + Size = UDim2.new(0, 100, 0, 20); + TextXAlignment = Enum.TextXAlignment.Center; + TextColor3 = Color3.new(0.2, 0.1, 0.1); + BackgroundTransparency = 0.5; + BackgroundColor3 = Color3.new(1, 1, 1); + Parent = self.SafeChatFrame; + Visible = false; + Position = UDim2.new(0, rootButton.Position.X.Scale + 105, 0, rootButton.Position.Y.Scale - ((count - 3) * 100)); + }; + + count = count + 1 + + if type(list[msg]) == 'table' then + text_List[rootButton][chatText] = Chat:CreateSafeChatOptions(list[msg], chatText) + else + --table.insert(text_List[chatText], true) + end + chatText.MouseEnter:connect(function() + Chat:ToggleSafeChatMenu(chatText) + end) + + chatText.MouseLeave:connect(function() + Chat:ToggleSafeChatMenu(chatText) + end) + + chatText.MouseButton1Click:connect(function() + local lList = Chat:FindButtonTree(chatText) + if lList then + for i, v in pairs(lList) do + end + else + end + pcall(function() PlayersService:Chat(lList[1]) end) + end) + end + end + return text_List +end + +function Chat:CreateSafeChatGui() + self.SafeChatFrame = Gui.Create'Frame' + { + Name = 'SafeChatFrame'; + Size = UDim2.new(1, 0, 1, 0); + Parent = self.Gui; + BackgroundTransparency = 1.0; + + Gui.Create'ImageButton' + { + Name = 'SafeChatButton'; + Size = UDim2.new(0, 44, 0, 31); + Position = UDim2.new(0, 1, 0.35, 0); + BackgroundTransparency = 1.0; + Image = 'http://www.roblox.com/asset/?id=97080365'; + }; + } + + self.SafeChatButton = self.SafeChatFrame.SafeChatButton + -- safe chat button is the root of this tree + self.SafeChatTree[self.SafeChatButton] = Chat:CreateSafeChatOptions(self.SafeChat_List, self.SafeChatButton) + + self.SafeChatButton.MouseButton1Click:connect(function() + Chat:ToggleSafeChatMenu(self.SafeChatButton) + end) + +end + +-- Scrolling function +-- Applies a speed(velocity) to have nice scrolling effect +function Input:OnMouseScroll() + Spawn(function() + -- How long should the speed last? + while Input.Speed ~=0 do + if Input.Speed > 1 then + while Input.Speed > 0 do + Input.Speed = Input.Speed - 1 + wait(0.25) + end + elseif Input.Speed < 0 then + while Input.Speed < 0 do + Input.Speed = Input.Speed + 1 + wait(0.25) + end + end + wait() + end + end) + if Chat:CheckIfInBounds(Input.Speed) then + return + end + Chat:ScrollQueue() +end + +function Input:ApplySpeed(value) + Input.Speed = Input.Speed + value + if not self.Simulating then + Input:OnMouseScroll() + end +end + +function Input:Initialize() + self.Mouse.WheelBackward:connect(function() + Input:ApplySpeed(self.Configuration.DefaultSpeed) + end) + + self.Mouse.WheelForward:connect(function() + Input:ApplySpeed(self.Configuration.DefaultSpeed) + end) +end + +function Chat:FindMessageInSafeChat(message, list) + local foundMessage = false + for msg, _ in pairs(list) do + if msg == message then + return true + end + if type(list[msg]) == 'table' then + foundMessage = Chat:FindMessageInSafeChat(message, list[msg]) + if foundMessage then + return true + end + end + end + return foundMessage +end + +-- Just a wrapper around our PlayerChatted event +function Chat:PlayerChatted(...) + local args = {...} + local argCount = select('#', ...) + local player + local message + -- This doesn't look very good, but what else to do? + if args[2] then + player = args[2] + end + if args[3] then + message = args[3] + end + if PlayersService.ClassicChat then + if Player.ChatMode == Enum.ChatMode.TextAndMenu then + Chat:UpdateChat(player, message) + elseif Player.ChatMode == Enum.ChatMode.Menu and string.sub(message, 3) == '/sc' then + Chat:UpdateChat(player, message) + else + if Chat:FindMessageInSafeChat(message, self.SafeChat_List) then + Chat:UpdateChat(player, message) + end + end + end +end + +-- After 5 minutes of existence, the labels become invisible +-- Runs only every 5 seconds and has to loop through 50 values +-- Shouldn't be too expensive +function Chat:CullThread() + while true do + if #self.MessageQueue > 0 then + for _, field in pairs(self.MessageQueue) do + if tick() - field['SpawnTime'] > self.Configuration.LifeTime and field['Player'] and field['Message'] then + field['Player'].Visible = false + field['Message'].Visible = false + end + end + end + wait(5.0) + end +end + +-- RobloxLock everything so users can't delete them(?) +function Chat:LockAllFields(gui) + local children = gui:GetChildren() + for i = 1, #children do + children[i].RobloxLocked = true + if #children[i]:GetChildren() > 0 then + Chat:LockAllFields(children[i]) + end + end +end + +-- Constructor +-- This function initializes everything +function Chat:Initialize() + Chat:CreateGui() + self.EventListener = PlayersService.PlayerChatted:connect(function(...) + -- This event has 4 callback arguments + -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer + Chat:PlayerChatted(...) + + end) + + -- Initialize input for us + Input:Initialize() + -- Eww, everytime a player is added, you have to redo the connection + -- Seems this is not automatic + Game.Players.ChildAdded:connect(function() + Chat.EventListener:disconnect() + self.EventListener = PlayersService.PlayerChatted:connect(function(...) + -- This event has 4 callback arguments + -- Enum.PlayerChatType.All, chatPlayer, message, targetPlayer + Chat:PlayerChatted(...) + end) + end) + + Spawn(function() + Chat:CullThread() + end) + + self.Frame.RobloxLocked = true + Chat:LockAllFields(self.Frame) + self.Frame.DescendantAdded:connect(function(descendant) + Chat:LockAllFields(descendant) + end) +end + +Chat:Initialize() + + + + + diff --git a/app/files/LuaThumbnail.png b/app/files/LuaThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..b481fdfe4a54932ce1be23f626b7f0dc0b3d7537 GIT binary patch literal 56304 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 gmh>F6AH&B6D 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 Rx3sVT;qKz?Tz4oq?cbIkA8`Nx literal 0 HcmV?d00001 diff --git a/app/files/NoRender.png b/app/files/NoRender.png new file mode 100644 index 0000000000000000000000000000000000000000..f2fda92b565f9eb77e43d1d702654d729b6b2349 GIT binary patch literal 4621 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 PnE(JYgd2Q>Jc#%&2$n;E literal 0 HcmV?d00001 diff --git a/app/files/Old2014Join.lua b/app/files/Old2014Join.lua new file mode 100644 index 0000000..d4debbc --- /dev/null +++ b/app/files/Old2014Join.lua @@ -0,0 +1,418 @@ + +-- functions -------------------------- +function onPlayerAdded(player) + -- override +end +-- MultiplayerSharedScript.lua inserted here ------ Prepended to GroupBuild.lua and Join.lua -- + +-- log app init time +pcall(function() + local t = ElapsedTime() + local platform = settings().Diagnostics.OsPlatform + game:HttpGet("http://www.syntax.eco/Game/JoinRate.ashx?st=0&i=0&p=-1&c=GameAppInit&r=Success&d=" .. (math.floor(t*1000)) .. "&ip=localhost&errorType=&platform=" .. platform, false) +end) + +pcall(function() game:SetPlaceID(-1, false) end) + +local startTime = tick() +local connectResolved = false +local loadResolved = false +local joinResolved = false +local playResolved = true +local playStartTime = 0 + +local cdnSuccess = 0 +local cdnFailure = 0 + +settings()["Game Options"].CollisionSoundEnabled = true +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings().Physics.Is30FpsThrottleEnabled = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) +pcall(function() settings().Physics.PhysicsEnvironmentalThrottle = Enum.EnviromentalPhysicsThrottle.DefaultAuto end) + +function reportContentProvider(time, queueLength, blocking) + pcall(function() + game:HttpGet("http://www.syntax.eco/Analytics/ContentProvider.ashx?t=" .. time .. "&ql=" .. queueLength, blocking) + end) +end +function reportCdn(blocking) + pcall(function() + local newCdnSuccess = settings().Diagnostics.CdnSuccessCount + local newCdnFailure = settings().Diagnostics.CdnFailureCount + local successDelta = newCdnSuccess - cdnSuccess + local failureDelta = newCdnFailure - cdnFailure + cdnSuccess = newCdnSuccess + cdnFailure = newCdnFailure + if successDelta > 0 or failureDelta > 0 then + game:HttpGet("http://www.syntax.eco/Game/Cdn.ashx?source=client&success=" .. successDelta .. "&failure=" .. failureDelta, blocking) + end + end) +end + +function reportDuration(category, result, duration, blocking,errorType) + if not errorType then + errorType = '' + end + local platform = settings().Diagnostics.OsPlatform + local bytesReceived = -1 + if stats().Network:getChildren()[2] ~= nil then + bytesReceived = stats().Network:getChildren()[2].Stats.totalBytesReceived:GetValue() + end + pcall(function() game:HttpGet("http://www.syntax.eco/Game/JoinRate.ashx?st=0&i=0&p=-1&c=" .. category .. "&r=" .. result .. "&d=" .. (math.floor(duration*1000)) .. "&b=" .. bytesReceived .. "&ip=localhost&errorType=" .. errorType .. "&platform=" .. platform, blocking) end) +end +-- arguments --------------------------------------- +local threadSleepTime = ... + +if threadSleepTime==nil then + threadSleepTime = 15 +end + +local test = true + +print("! Joining game '' place -1 at localhost") +local closeConnection = game.Close:connect(function() + if 0 then + reportCdn(true) + if not connectResolved then + local duration = tick() - startTime; + reportDuration("GameConnect", "Failure", duration, true) + elseif (not loadResolved) or (not joinResolved) then + local duration = tick() - startTime; + if not loadResolved then + loadResolved = true + reportDuration("GameLoad","Cancel", duration, true) + end + if not joinResolved then + joinResolved = true + reportDuration("GameJoin","Cancel", duration, true) + end + elseif not playResolved then + local duration = tick() - playStartTime; + playResolved = true + reportDuration("GameDuration","Success", duration, true) + end + pcall(function() game:HttpGet("&disconnect=true", true) end) + if true then pcall(function() game:HttpPost("https://api.syntax.eco/auth/invalidate", "invalidate") end) end + end +end) + +game:GetService("ChangeHistoryService"):SetEnabled(false) +game:GetService("ContentProvider"):SetThreadPool(16) +game:GetService("InsertService"):SetBaseSetsUrl("http://www.syntax.eco/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl("http://www.syntax.eco/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl("http://www.syntax.eco/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl("http://www.syntax.eco/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl("http://www.syntax.eco/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl("http://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("http://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("http://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("http://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("http://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl("http://www.syntax.eco/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl("https://api.syntax.eco/marketplace/productinfo?assetId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl("https://api.syntax.eco/ownership/hasasset?userId=%d&assetId=%d") end) +pcall(function() game:SetCreatorID(0, Enum.CreatorType.User) end) + +-- Bubble chat. This is all-encapsulated to allow us to turn it off with a config setting +pcall(function() game:GetService("Players"):SetChatStyle(Enum.ChatStyle.Classic) end) + +local waitingForCharacter = false +local waitingForCharacterGuid = "26c3de03-3381-4ab6-8e60-e415fa757eba"; +pcall( function() + if settings().Network.MtuOverride == 0 then + settings().Network.MtuOverride = 1400 + end +end) + + +-- globals ----------------------------------------- + +client = game:GetService("NetworkClient") +visit = game:GetService("Visit") + +-- functions --------------------------------------- +function ifSeleniumThenSetCookie(key, value) + if false then + game:GetService("CookiesService"):SetCookieValue(key, value) + end +end + +function setMessage(message) + -- todo: animated "..." + if not false then + game:SetMessage(message) + else + -- hack, good enought for now + game:SetMessage("Teleporting ...") + end +end +setMessage("Connecting to SYNTAX...") +function showErrorWindow(message, errorType, errorCategory) + if 0 then + if (not loadResolved) or (not joinResolved) then + local duration = tick() - startTime; + if not loadResolved then + loadResolved = true + reportDuration("GameLoad","Failure", duration, false,errorType) + end + if not joinResolved then + joinResolved = true + reportDuration("GameJoin",errorCategory, duration, false,errorType) + end + + pcall(function() game:HttpGet("?FilterName=Type&FilterValue=" .. errorType .. "&Type=JoinFailure", false) end) + elseif not playResolved then + local duration = tick() - playStartTime; + playResolved = true + reportDuration("GameDuration",errorCategory, duration, false,errorType) + + pcall(function() game:HttpGet("?FilterName=Type&FilterValue=" .. errorType .. "&Type=GameDisconnect", false) end) + end + end + + game:SetMessage(message) +end + +function registerPlay(key) + return +end + +function analytics(name) + return +end + +function analyticsGuid(name, guid) + return +end + +function reportError(err, message) + print("***ERROR*** " .. err) + if not test then visit:SetUploadUrl("") end + client:Disconnect() + wait(4) + showErrorWindow("Error: " .. err, message, "Other") +end + +-- called when the client connection closes +function onDisconnection(peer, lostConnection) + if lostConnection then + if waitingForCharacter then analyticsGuid("Waiting for Character Lost Connection",waitingForCharacterGuid) end + showErrorWindow("You have lost the connection to the game", "LostConnection", "LostConnection") + else + if waitingForCharacter then analyticsGuid("Waiting for Character Game Shutdown",waitingForCharacterGuid) end + showErrorWindow("This game has shut down", "Kick", "Kick") + end + pcall(function() game:HttpGet("&disconnect=true", true) end) + if true then pcall(function() game:HttpPost("https://api.syntax.eco/auth/invalidate", "invalidate") end) end +end + +function requestCharacter(replicator) + + -- prepare code for when the Character appears + local connection + connection = player.Changed:connect(function (property) + if property=="Character" then + game:ClearMessage() + waitingForCharacter = false + analyticsGuid("Waiting for Character Success", waitingForCharacterGuid) + + connection:disconnect() + + if 0 then + if not joinResolved then + local duration = tick() - startTime; + joinResolved = true + reportDuration("GameJoin","Success", duration, false) + + playStartTime = tick() + playResolved = false + end + end + end + end) + + setMessage("Requesting character") + + if 0 and not loadResolved then + local duration = tick() - startTime; + loadResolved = true + reportDuration("GameLoad","Success", duration, false) + end + + local success, err = pcall(function() + replicator:RequestCharacter() + setMessage("Waiting for character") + waitingForCharacter = true + analyticsGuid("Waiting for Character Begin",waitingForCharacterGuid); + end) + if not success then + reportError(err,"W4C") + return + end +end + +-- called when the client connection is established +function onConnectionAccepted(url, replicator) + connectResolved = true + --reportDuration("GameConnect", "Success", tick() - startTime, false) + + local waitingForMarker = true + + local success, err = pcall(function() + if not test then + visit:SetPing("", 300) + end + + if not false then + game:SetMessageBrickCount() + else + setMessage("Teleporting ...") + end + + replicator.Disconnection:connect(onDisconnection) + + -- Wait for a marker to return before creating the Player + local marker = replicator:SendMarker() + + marker.Received:connect(function() + waitingForMarker = false + requestCharacter(replicator) + end) + end) + + if not success then + reportError(err,"ConnectionAccepted") + return + end + + -- TODO: report marker progress + + while waitingForMarker do + workspace:ZoomToExtents() + wait(0.5) + end +end + +-- called when the client connection fails +function onConnectionFailed(_, error) + showErrorWindow("Failed to connect to the Game. (ID=" .. error .. ")", "ID" .. error, "Other") +end + +-- called when the client connection is rejected +function onConnectionRejected() + connectionFailed:disconnect() + showErrorWindow("This game is not available. Please try another", "WrongVersion", "WrongVersion") +end + +idled = false +function onPlayerIdled(time) + if time > 20*60 then + showErrorWindow(string.format("You were disconnected for being idle %d minutes", time/60), "Idle", "Idle") + client:Disconnect() + if not idled then + idled = true + end + end +end + + +-- main ------------------------------------------------------------ + +--analytics("Start Join Script") + +--ifSeleniumThenSetCookie("SeleniumTest1", "Started join script") + +pcall(function() settings().Diagnostics:LegacyScriptMode() end) +local success, err = pcall(function() + + game:SetRemoteBuildMode(true) + + setMessage("Connecting to SYNTAX...") + client.ConnectionAccepted:connect(onConnectionAccepted) + client.ConnectionRejected:connect(onConnectionRejected) + connectionFailed = client.ConnectionFailed:connect(onConnectionFailed) + client.Ticket = "" + ifSeleniumThenSetCookie("SeleniumTest2", "Successfully connected to server") + + playerConnectSucces, player = pcall(function() return client:PlayerConnect(0, "localhost", 53640, 0, threadSleepTime) end) + if not playerConnectSucces then + --Old player connection scheme + player = game:GetService("Players"):CreateLocalPlayer(0) + analytics("Created Player") + client:Connect("localhost", 53640, 0, threadSleepTime) + else + analytics("Created Player") + end + + pcall(function() + registerPlay("rbx_evt_ftp") + delay(60*5, function() registerPlay("rbx_evt_fmp") end) + end) + + -- negotiate an auth token + if true then + pcall(function() game:HttpPost("https://api.syntax.eco/auth/negotiate?ticket=", "negotiate") end) + delay(300, function() + while true do + pcall(function() game:HttpPost("https://api.syntax.eco/auth/renew", "renew") end) + wait(300) + end + end) + end + + player:SetSuperSafeChat(false) + pcall(function() player:SetUnder13(false) end) + pcall(function() player:SetMembershipType(Enum.MembershipType.OutrageousBuildersClub) end) + pcall(function() player:SetAccountAge(365) end) + player.Idled:connect(onPlayerIdled) + + -- Overriden + onPlayerAdded(player) + + pcall(function() player.Name = [========[Player]========] end) + player.CharacterAppearance = "http://www.syntax.eco/Asset/CharacterFetch.ashx?userId=1" + if not test then visit:SetUploadUrl("")end + + analytics("Connect Client") + +end) + +if not success then + reportError(err,"CreatePlayer") +end + +--[[ +ifSeleniumThenSetCookie("SeleniumTest3", "Successfully created player") + +if not test then + -- TODO: Async get? + loadfile("")("", -1, 0) +end + +if 0 then + delay(60*5, function() + while true do + reportCdn(false) + wait(60*5) + end + end) + local cpTime = 30 + delay(cpTime, function() + while cpTime <= 480 do + reportContentProvider(cpTime, game:GetService("ContentProvider").RequestQueueSize, false) + wait(cpTime) + cpTime = cpTime * 2 + end + end) +end +]] + +pcall(function() game:SetScreenshotInfo("") end) +pcall(function() game:SetVideoInfo('GamesROBLOX, video, free game, online virtual world') end) +-- use single quotes here because the video info string may have unescaped double quotes +--[[ +analytics("Join Finished") + +ifSeleniumThenSetCookie("SeleniumTest4", "Finished join") +]] \ No newline at end of file diff --git a/app/files/Pants.rbxmx b/app/files/Pants.rbxmx new file mode 100644 index 0000000..8f151da --- /dev/null +++ b/app/files/Pants.rbxmx @@ -0,0 +1,13 @@ + + null + nil + + + + http://www.syntax.eco/asset/?id={PantsImageId} + + Pants + true + + + \ No newline at end of file diff --git a/app/files/Shirt.rbxmx b/app/files/Shirt.rbxmx new file mode 100644 index 0000000..d6ca36a --- /dev/null +++ b/app/files/Shirt.rbxmx @@ -0,0 +1,13 @@ + + null + nil + + + + http://www.syntax.eco/asset/?id={ShirtImageId} + + Shirt + true + + + \ No newline at end of file diff --git a/app/files/ShutdownServer.lua b/app/files/ShutdownServer.lua new file mode 100644 index 0000000..b49473b --- /dev/null +++ b/app/files/ShutdownServer.lua @@ -0,0 +1,37 @@ +local AuthToken, PlaceId = ... +local Players = game:GetService("Players") + +warn("Server shutdown requested by website") + +local function ReportServerShutdown() + local success, message = pcall(function() + local MessagePayload = HttpService:JSONEncode({ + ["AuthToken"] = AuthToken, + ["JobId"] = game.JobId, + ["PlaceId"] = PlaceId, + ["ServerAliveTime"] = workspace.DistributedGameTime + }) + game:HttpPost(BaseURL.."/internal/gameserver/reportshutdown", MessagePayload, false, "application/json") + end) +end + +Players.PlayerAdded:Connect(function(player) + coroutine.wrap(function() + local success, message = pcall(function() + player:Kick("This game has shut down.") + end) + end)() +end) + +for _, Player in pairs(Players:GetPlayers()) do + coroutine.wrap(function() + local success, message = pcall(function() + Player:Kick("This game has shut down.") + end) + end)() +end +ReportServerShutdown() +ScriptContext.ScriptsDisabled = true +game:HttpPost("http://127.0.0.1:3000/CloseJob?RCCReturnAuth="..AuthToken, HttpService:JSONEncode({ + ["jobid"] = game.JobId +}), false, "application/json") diff --git a/app/files/Studio.lua b/app/files/Studio.lua new file mode 100644 index 0000000..c2f1740 --- /dev/null +++ b/app/files/Studio.lua @@ -0,0 +1,27 @@ +-- Setup studio cmd bar & load core scripts +local baseUrl = "http://www.syntax.eco" + +pcall(function() game:GetService("InsertService"):SetFreeModelUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?type=fm&q=%s&pg=%d&rs=%d") end) +pcall(function() game:GetService("InsertService"):SetFreeDecalUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?type=fd&q=%s&pg=%d&rs=%d") end) + +game:GetService("ScriptInformationProvider"):SetAssetUrl(baseUrl.."/Asset/") +game:GetService("InsertService"):SetBaseSetsUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl(baseUrl.."/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl(baseUrl.."/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl(baseUrl.."/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl(baseUrl.."/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl(baseUrl.."/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl(baseUrl.."/marketplace/productinfo?assetId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetDevProductInfoUrl(baseUrl.."/marketplace/productDetails?productId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl(baseUrl.."/ownership/hasasset?userId=%d&assetId=%d") end) + +local result = pcall(function() game:GetService("ScriptContext"):AddStarterScript(37801172) end) +if not result then + pcall(function() game:GetService("ScriptContext"):AddCoreScript(37801172,game:GetService("ScriptContext"),"StarterScript") end) +end \ No newline at end of file diff --git a/app/files/TShirt.rbxmx b/app/files/TShirt.rbxmx new file mode 100644 index 0000000..895a1b8 --- /dev/null +++ b/app/files/TShirt.rbxmx @@ -0,0 +1,13 @@ + + null + nil + + + + http://www.syntax.eco/asset/?id={TShirtImageId} + + Shirt Graphic + true + + + \ No newline at end of file diff --git a/app/files/Visit.lua b/app/files/Visit.lua new file mode 100644 index 0000000..e1085af --- /dev/null +++ b/app/files/Visit.lua @@ -0,0 +1,132 @@ +function ifSeleniumThenSetCookie(key, value) + if false then + game:GetService("CookiesService"):SetCookieValue(key, value) + end +end + +ifSeleniumThenSetCookie("SeleniumTest1", "Inside the visit lua script") + +pcall(function() game:SetPlaceID({PlaceId}) end) +pcall(function() game:SetUniverseId({UniverseId}) end) + +visit = game:GetService("Visit") + +local message = Instance.new("Message") +message.Parent = workspace +message.archivable = false + +game:GetService("ScriptInformationProvider"):SetAssetUrl("https://www.syntax.eco/Asset/") +game:GetService("ContentProvider"):SetThreadPool(16) +pcall(function() game:GetService("InsertService"):SetFreeModelUrl("https://www.syntax.eco/Game/Tools/InsertAsset.ashx?type=fm&q=%s&pg=%d&rs=%d") end) -- Used for free model search (insert tool) +pcall(function() game:GetService("InsertService"):SetFreeDecalUrl("https://www.syntax.eco/Game/Tools/InsertAsset.ashx?type=fd&q=%s&pg=%d&rs=%d") end) -- Used for free decal search (insert tool) + +ifSeleniumThenSetCookie("SeleniumTest2", "Set URL service") + +settings().Diagnostics:LegacyScriptMode() + +game:GetService("InsertService"):SetBaseSetsUrl("https://www.syntax.eco/Game/Tools/InsertAsset.ashx?nsets=10&type=base") +game:GetService("InsertService"):SetUserSetsUrl("https://www.syntax.eco/Game/Tools/InsertAsset.ashx?nsets=20&type=user&userid=%d") +game:GetService("InsertService"):SetCollectionUrl("https://www.syntax.eco/Game/Tools/InsertAsset.ashx?sid=%d") +game:GetService("InsertService"):SetAssetUrl("https://www.syntax.eco/Asset/?id=%d") +game:GetService("InsertService"):SetAssetVersionUrl("https://www.syntax.eco/Asset/?assetversionid=%d") + +pcall(function() game:GetService("SocialService"):SetFriendUrl("https://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=IsFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetBestFriendUrl("https://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=IsBestFriendsWith&playerid=%d&userid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupUrl("https://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=IsInGroup&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRankUrl("https://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRank&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("SocialService"):SetGroupRoleUrl("https://www.syntax.eco/Game/LuaWebService/HandleSocialRequest.ashx?method=GetGroupRole&playerid=%d&groupid=%d") end) +pcall(function() game:GetService("GamePassService"):SetPlayerHasPassUrl("https://www.syntax.eco/Game/GamePass/GamePassHandler.ashx?Action=HasPass&UserID=%d&PassID=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetProductInfoUrl("https://www.syntax.eco/marketplace/productinfo?assetId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetDevProductInfoUrl("https://www.syntax.eco/marketplace/productDetails?productId=%d") end) +pcall(function() game:GetService("MarketplaceService"):SetPlayerOwnsAssetUrl("https://www.syntax.eco/ownership/hasasset?userId=%d&assetId=%d") end) +pcall(function() game:SetCreatorID(0, Enum.CreatorType.User) end) + +ifSeleniumThenSetCookie("SeleniumTest3", "Set creator ID") + +pcall(function() game:SetScreenshotInfo("") end) +pcall(function() game:SetVideoInfo("") end) + +ifSeleniumThenSetCookie("SeleniumTest4", "Exiting SingleplayerSharedScript")-- SingleplayerSharedScript.lua inserted here -- + +pcall(function() settings().Rendering.EnableFRM = true end) +pcall(function() settings()["Task Scheduler"].PriorityMethod = Enum.PriorityMethod.AccumulatedError end) + +game:GetService("ChangeHistoryService"):SetEnabled(false) +pcall(function() game:GetService("Players"):SetBuildUserPermissionsUrl("https://www.syntax.eco/Game/BuildActionPermissionCheck.ashx?assetId=0&userId=%d&isSolo=true") end) + +workspace:SetPhysicsThrottleEnabled(true) + +local addedBuildTools = false +local screenGui = game:GetService("CoreGui"):FindFirstChild("RobloxGui") + +local inStudio = true + +function doVisit() + message.Text = "Loading Game" + if false then + if false then + success, err = pcall(function() game:Load("") end) + if not success then + message.Text = "Could not teleport" + return + end + end + else + if false then + game:Load("") + pcall(function() visit:SetUploadUrl("") end) + else + pcall(function() visit:SetUploadUrl("") end) + end + end + + message.Text = "Running" + game:GetService("RunService"):Run() + + message.Text = "Creating Player" + player = game:GetService("Players"):CreateLocalPlayer(0) + player.CharacterAppearance = "https://www.syntax.eco/Asset/CharacterFetch.ashx?userId={UserId}&placeId={PlaceId}" + local propExists, canAutoLoadChar = false + propExists = pcall(function() canAutoLoadChar = game.Players.CharacterAutoLoads end) + + if (propExists and canAutoLoadChar) or (not propExists) then + player:LoadCharacter() + end + + message.Text = "Setting GUI" + player:SetSuperSafeChat(false) + pcall(function() player:SetUnder13(false) end) + pcall(function() player:SetMembershipType(None) end) + pcall(function() player:SetAccountAge(0) end) +end + +success, err = pcall(doVisit) + +if not inStudio and not addedBuildTools then + local playerName = Instance.new("StringValue") + playerName.Name = "PlayerName" + playerName.Value = player.Name + playerName.RobloxLocked = true + playerName.Parent = screenGui + + pcall(function() game:GetService("ScriptContext"):AddCoreScript(59431535,screenGui,"BuildToolsScript") end) + addedBuildTools = true +end + +if success then + message.Parent = nil +else + print(err) + if not inStudio then + if false then + pcall(function() visit:SetUploadUrl("") end) + end + end + wait(5) + message.Text = "Error on visit: " .. err + if not inStudio then + if false then + game:HttpPost("https://www.syntax.eco/Error/Lua.ashx", "Visit.lua: " .. err) + end + end +end \ No newline at end of file diff --git a/app/models/admin_permissions.py b/app/models/admin_permissions.py new file mode 100644 index 0000000..d93f594 --- /dev/null +++ b/app/models/admin_permissions.py @@ -0,0 +1,16 @@ +from app.extensions import db + +class AdminPermissions(db.Model): + id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True) + userid = db.Column(db.BigInteger, nullable=False, index=True) + permission = db.Column(db.String(128), nullable=False, index=True) + + def __init__(self, userid, permission): + self.userid = userid + self.permission = permission + + def __repr__(self): + return "".format( + userid=self.userid, + permission=self.permission + ) \ No newline at end of file diff --git a/app/models/asset.py b/app/models/asset.py new file mode 100644 index 0000000..7398a40 --- /dev/null +++ b/app/models/asset.py @@ -0,0 +1,83 @@ +from app.extensions import db +from app.enums.AssetType import AssetType +from sqlalchemy import Enum +from datetime import datetime + +class Asset(db.Model): + id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True) + roblox_asset_id = db.Column(db.BigInteger, nullable=True, default=None, index=True) # Roblox asset ID + name = db.Column(db.Text, nullable=False) # Asset name + description = db.Column(db.String(4096), nullable=False) # Asset description + created_at = db.Column(db.DateTime, nullable=False) # Asset creation date + updated_at = db.Column(db.DateTime, nullable=False) # Asset last update date + asset_type = db.Column(Enum(AssetType), nullable=False, index=True) # Asset type (e.g. shirt, pants, etc.) + asset_genre = db.Column(db.SmallInteger, nullable=False) # Asset genre (e.g. all, town and city, etc.) + creator_type = db.Column(db.SmallInteger, nullable=False) # Asset creator type (e.g. user, group, etc.) + creator_id = db.Column(db.BigInteger, nullable=False, index=True) # Asset creator ID + + moderation_status = db.Column(db.SmallInteger, nullable=False, index=True) # Asset moderation status ( 0 = Approved, 1 = Pending, 2 = Declined ) + + # Economy + is_for_sale = db.Column(db.Boolean, nullable=False, default=False, index=True) # Is the asset for sale? + price_robux = db.Column(db.BigInteger, nullable=False, default=0) # Asset price in Robux + price_tix = db.Column(db.BigInteger, nullable=False, default=0) # Asset price in Tix + is_limited = db.Column(db.Boolean, nullable=False, default=False, index=True) # Is the asset limited? + is_limited_unique = db.Column(db.Boolean, nullable=False, default=False) # Is the asset limited unique? + serial_count = db.Column(db.BigInteger, nullable=False, default=0) # Asset serial count + sale_count = db.Column(db.BigInteger, nullable=False, default=0) # Asset sale count + offsale_at = db.Column(db.DateTime, nullable=True, default=None) # Asset offsale date + + def __init__( + self, + roblox_asset_id=None, + name="Asset", + description="", + created_at=None, + updated_at=None, + asset_type=AssetType.Image, + asset_genre=0, + creator_type=0, + creator_id=1, + moderation_status=1, + + is_for_sale=False, + price_robux=0, + price_tix=0, + is_limited=False, + is_limited_unique=False, + serial_count=0, + sale_count=0, + offsale_at=None, + + force_asset_id=None + ): + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + + self.roblox_asset_id = roblox_asset_id + self.name = name + self.description = description + self.created_at = created_at + self.updated_at = updated_at + self.asset_type = asset_type + self.asset_genre = asset_genre + self.creator_type = creator_type + self.creator_id = creator_id + self.moderation_status = moderation_status + + self.is_for_sale = is_for_sale + self.price_robux = price_robux + self.price_tix = price_tix + self.is_limited = is_limited + self.is_limited_unique = is_limited_unique + self.serial_count = serial_count + self.sale_count = sale_count + self.offsale_at = offsale_at + + if force_asset_id is not None: + self.id = force_asset_id + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/asset_favorite.py b/app/models/asset_favorite.py new file mode 100644 index 0000000..f9adeb8 --- /dev/null +++ b/app/models/asset_favorite.py @@ -0,0 +1,13 @@ +from app.extensions import db + +class AssetFavorite( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, autoincrement=True ) + assetid = db.Column( db.BigInteger, nullable=False, index=True ) + userid = db.Column( db.BigInteger, nullable=False, index=True ) + + def __init__(self, assetid : int, userid : int): + self.assetid = assetid + self.userid = userid + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/asset_moderation_link.py b/app/models/asset_moderation_link.py new file mode 100644 index 0000000..e001d5a --- /dev/null +++ b/app/models/asset_moderation_link.py @@ -0,0 +1,27 @@ +from app.extensions import db + +# This is used for the asset moderation system to link two assets together, eg. a Image and Shirt +# So the moderator does not need to approve both assets + +class AssetModerationLink(db.Model): + id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True) + ParentAssetId = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Parent asset ID, eg. Shirt + ChildAssetId = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Child asset ID eg. Image + + ParentAsset = db.relationship("Asset", foreign_keys=[ParentAssetId], uselist=False, lazy="joined") + ChildAsset = db.relationship("Asset", foreign_keys=[ChildAssetId], uselist=False, lazy="joined") + + def __init__( + self, + ParentAssetId, + ChildAssetId + ): + self.ParentAssetId = ParentAssetId + self.ChildAssetId = ChildAssetId + + def __repr__(self): + return "".format( + id=self.id, + ParentAssetId=self.ParentAssetId, + ChildAssetId=self.ChildAssetId + ) \ No newline at end of file diff --git a/app/models/asset_rap.py b/app/models/asset_rap.py new file mode 100644 index 0000000..547a47a --- /dev/null +++ b/app/models/asset_rap.py @@ -0,0 +1,23 @@ +from app.extensions import db +from datetime import datetime + +class AssetRap(db.Model): + assetid = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True) + rap = db.Column(db.BigInteger, nullable=False, default=0) + updated = db.Column(db.DateTime, nullable=False) + + def __init__( + self, + assetid, + rap=0 + ): + self.assetid = assetid + self.rap = rap + self.updated = datetime.utcnow() + + def __repr__(self): + return "".format( + assetid=self.assetid, + rap=self.rap, + updated=self.updated + ) \ No newline at end of file diff --git a/app/models/asset_thumbnail.py b/app/models/asset_thumbnail.py new file mode 100644 index 0000000..e098d15 --- /dev/null +++ b/app/models/asset_thumbnail.py @@ -0,0 +1,36 @@ +from app.extensions import db + +class AssetThumbnail(db.Model): + id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True) + asset_id = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Asset ID + asset_version_id = db.Column(db.BigInteger, nullable=False) # Asset version ID + content_hash = db.Column(db.String(512), nullable=False) # Asset thumbnail content hash + created_at = db.Column(db.DateTime, nullable=False) # Asset thumbnail creation date + updated_at = db.Column(db.DateTime, nullable=False) # Asset thumbnail last update date + moderation_status = db.Column(db.SmallInteger, nullable=False) # Asset thumbnail moderation status ( 0 = Approved, 1 = Pending, 2 = Declined ) + + asset = db.relationship('Asset', backref=db.backref('thumbnails', lazy=True, uselist=True), uselist=False) + def __init__( + self, + asset_id, + asset_version_id, + content_hash, + created_at, + moderation_status + ): + self.asset_id = asset_id + self.asset_version_id = asset_version_id + self.content_hash = content_hash + self.created_at = created_at + self.updated_at = created_at + self.moderation_status = moderation_status + + def __repr__(self): + return "".format( + asset_id=self.asset_id, + asset_version_id=self.asset_version_id, + content_hash=self.content_hash, + created_at=self.created_at, + updated_at=self.updated_at, + moderation_status=self.moderation_status + ) \ No newline at end of file diff --git a/app/models/asset_version.py b/app/models/asset_version.py new file mode 100644 index 0000000..d305f1d --- /dev/null +++ b/app/models/asset_version.py @@ -0,0 +1,35 @@ +from app.extensions import db + +class AssetVersion(db.Model): + id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True) + asset_id = db.Column(db.BigInteger, nullable=False, index=True) + version = db.Column(db.BigInteger, nullable=False) + content_hash = db.Column(db.String(512), nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + uploaded_by = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True) + + def __init__( + self, + asset_id, + version, + content_hash, + created_at, + uploaded_by=None + ): + self.asset_id = asset_id + self.version = version + self.content_hash = content_hash + self.created_at = created_at + self.updated_at = created_at + self.uploaded_by = uploaded_by + + def __repr__(self): + return "".format( + id=self.id, + asset_id=self.asset_id, + version=self.version, + content_hash=self.content_hash, + created_at=self.created_at, + updated_at=self.updated_at + ) \ No newline at end of file diff --git a/app/models/asset_votes.py b/app/models/asset_votes.py new file mode 100644 index 0000000..0721622 --- /dev/null +++ b/app/models/asset_votes.py @@ -0,0 +1,15 @@ +from app.extensions import db + +class AssetVote( db.Model ): + id = db.Column( db.BigInteger, primary_key=True ) + assetid = db.Column( db.BigInteger, nullable=False, index=True ) + userid = db.Column( db.BigInteger, nullable=False, index=True ) + vote = db.Column( db.Boolean, nullable=False, default=True ) + + def __init__(self, assetid : int, userid : int, vote : bool): + self.assetid = assetid + self.userid = userid + self.vote = vote + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/cryptomus_invoice.py b/app/models/cryptomus_invoice.py new file mode 100644 index 0000000..fed0e3f --- /dev/null +++ b/app/models/cryptomus_invoice.py @@ -0,0 +1,52 @@ +from app.extensions import db +from datetime import datetime +from app.enums.CryptomusPaymentStatus import CryptomusPaymentStatus + +class CryptomusInvoice(db.Model): + id = db.Column( db.Text, primary_key=True, unique=True, nullable=False, index = True ) + cryptomus_invoice_id = db.Column( db.Text, nullable=False, index = True ) + + initiator_id = db.Column( db.Integer, db.ForeignKey('user.id'), nullable=False, index = True ) + + required_amount = db.Column( db.Float, nullable=False ) + paid_amount_usd = db.Column( db.Float, nullable=False, default=0 ) + currency = db.Column( db.Text, nullable=False ) + status = db.Column( db.Enum(CryptomusPaymentStatus), nullable=False ) + is_final = db.Column( db.Boolean, nullable=False, default=False ) + + extra_data = db.Column( db.Text, nullable=True ) + + created_at = db.Column( db.DateTime, nullable=False ) + updated_at = db.Column( db.DateTime, nullable=False ) + expires_at = db.Column( db.DateTime, nullable=False ) + + assigned_key = db.Column( db.Text, nullable=True ) + + def __init__( + self, + id : str, + cryptomus_invoice_id : str, + + initiator_id : int, + + required_amount : float, + currency : str, + status : CryptomusPaymentStatus, + + expires_at : datetime, + created_at : datetime = None, + updated_at : datetime = None, + paid_amount_usd : float = 0, + extra_data : str = None + ): + self.id = id + self.cryptomus_invoice_id = cryptomus_invoice_id + self.initiator_id = initiator_id + self.required_amount = required_amount + self.currency = currency + self.status = status + self.expires_at = expires_at + self.created_at = created_at if created_at is not None else datetime.utcnow() + self.updated_at = updated_at if updated_at is not None else datetime.utcnow() + self.paid_amount_usd = paid_amount_usd + self.extra_data = extra_data \ No newline at end of file diff --git a/app/models/exchange_offer.py b/app/models/exchange_offer.py new file mode 100644 index 0000000..6a2681d --- /dev/null +++ b/app/models/exchange_offer.py @@ -0,0 +1,54 @@ +from app.extensions import db +from datetime import datetime, timedelta + +class ExchangeOffer(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + creator_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + creator = db.relationship('User', backref=db.backref('exchange_offers', lazy=True), foreign_keys=[creator_id], uselist=False) + + offer_value = db.Column(db.BigInteger, nullable=False) # Amount of currency the creator is sending + receive_value = db.Column(db.BigInteger, nullable=False) # Amount of currency the creator is receiving + + offer_currency_type = db.Column(db.SmallInteger, nullable=False) # Currency type of the offer value, 0 = Robux, 1 = Tix + # Recieve currency type is the opposite of the offer currency type + + reciever_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True) # If the offer is accepted by someone, this will be set to the user's id + reciever = db.relationship('User', backref=db.backref('exchange_offers_recieved', lazy=True), foreign_keys=[reciever_id], uselist=False) + + created_at = db.Column(db.DateTime, nullable=False) + expires_at = db.Column(db.DateTime, nullable=False) + + ratio = db.Column(db.Float, nullable=False, default=0) # The ratio of the offer value to the receive value + worth = db.Column(db.Float, nullable=False, default=0, index = True) + + def __init___( + self, + creator_id, + offer_value, + receive_value, + offer_currency_type=0, # Robux + reciever_id=None, + ratio = None, + created_at=None, + expires_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + + if expires_at is None: + expires_at = datetime.utcnow() + timedelta(days=31) + + self.creator_id = creator_id + self.offer_value = offer_value + self.receive_value = receive_value + self.offer_currency_type = offer_currency_type + self.reciever_id = reciever_id + self.created_at = created_at + self.expires_at = expires_at + + if ratio is None: + self.ratio = (offer_value / receive_value) if offer_currency_type == 0 else (receive_value / offer_value) + else: + self.ratio = ratio + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/fflag_group.py b/app/models/fflag_group.py new file mode 100644 index 0000000..d053ea1 --- /dev/null +++ b/app/models/fflag_group.py @@ -0,0 +1,35 @@ +from app.extensions import db + +class FflagGroup(db.Model): + group_id = db.Column(db.BigInteger, primary_key=True, nullable=False, index=True) # Group ID + name = db.Column(db.String(128), nullable=False) # Group name + description = db.Column(db.String(512), nullable=False) # Group description + created_at = db.Column(db.DateTime, nullable=False) # Group creation date + updated_at = db.Column(db.DateTime, nullable=False) # Group last update date + enabled = db.Column(db.Boolean, nullable=False) # Group enabled + apikey = db.Column(db.String(128), nullable=True) # Group API key ( optional ) + gameserver_only = db.Column(db.Boolean, nullable=False) # Group is for gameserver only + + def __init__( + self, + group_id, + name, + description, + created_at, + enabled, + apikey + ): + self.group_id = group_id + self.name = name + self.description = description + self.created_at = created_at + self.updated_at = created_at + self.enabled = enabled + self.apikey = apikey + + def __repr__(self): + return "".format( + group_id=self.group_id, + name=self.name, + enabled=self.enabled + ) \ No newline at end of file diff --git a/app/models/fflag_value.py b/app/models/fflag_value.py new file mode 100644 index 0000000..d5504cb --- /dev/null +++ b/app/models/fflag_value.py @@ -0,0 +1,29 @@ +from app.extensions import db + +class FflagValue(db.Model): + flag_id = db.Column(db.BigInteger, primary_key=True, nullable=False, autoincrement=True) # Flag ID + group_id = db.Column(db.BigInteger, nullable=False, index=True) # Group ID + name = db.Column(db.String(128), nullable=False) # Flag name + + flag_type = db.Column(db.Integer, nullable=False, default=1) # Flag type ( 1 = bool, 2 = number, 3 = string) + flag_value = db.Column(db.Text, nullable=False) # Flag value ( base64 ) + + def __init__( + self, + group_id, + name, + flag_type, + flag_value + ): + self.group_id = group_id + self.name = name + self.flag_type = flag_type + self.flag_value = flag_value + + def __repr__(self): + return "".format( + flag_id=self.flag_id, + group_id=self.group_id, + name=self.name, + flag_type=self.flag_type + ) diff --git a/app/models/follow_relationship.py b/app/models/follow_relationship.py new file mode 100644 index 0000000..9c36517 --- /dev/null +++ b/app/models/follow_relationship.py @@ -0,0 +1,20 @@ +from app.extensions import db +from datetime import datetime + +class FollowRelationship(db.Model): + id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True) + followerUserId = db.Column(db.BigInteger, nullable=False, index=True) + followeeUserId = db.Column(db.BigInteger, nullable=False, index=True) + created = db.Column(db.DateTime, nullable=False) + + def __init__(self, followerUserId, followeeUserId): + self.followerUserId = followerUserId + self.followeeUserId = followeeUserId + self.created = datetime.utcnow() + + def __repr__(self): + return "".format( + followerUserId=self.followerUserId, + followeeUserId=self.followeeUserId, + created=self.created + ) \ No newline at end of file diff --git a/app/models/friend_relationship.py b/app/models/friend_relationship.py new file mode 100644 index 0000000..c5b35cb --- /dev/null +++ b/app/models/friend_relationship.py @@ -0,0 +1,16 @@ +from app.extensions import db +from datetime import datetime + +class FriendRelationship(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + user_id = db.Column(db.BigInteger, nullable=False, index=True) + friend_id = db.Column(db.BigInteger, nullable=False, index=True) + created_at = db.Column(db.DateTime, nullable=False) + + def __init__(self, user_id, friend_id): + self.user_id = user_id + self.friend_id = friend_id + self.created_at = datetime.utcnow() + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/friend_request.py b/app/models/friend_request.py new file mode 100644 index 0000000..90257b6 --- /dev/null +++ b/app/models/friend_request.py @@ -0,0 +1,17 @@ +from app.extensions import db +from datetime import datetime + +class FriendRequest(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + requester_id = db.Column(db.BigInteger, db.ForeignKey("user.id") ,nullable=False, index=True) # The person who sent the friend request + requestee_id = db.Column(db.BigInteger, nullable=False, index=True) # The person who received the friend request + created_at = db.Column(db.DateTime, nullable=False) + + requester = db.relationship("User", foreign_keys=[requester_id], backref="friend_requests_sent", uselist=False) + + def __init__(self, requester_id, requestee_id): + self.requester_id = requester_id + self.requestee_id = requestee_id + self.created_at = datetime.utcnow() + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/game_session_log.py b/app/models/game_session_log.py new file mode 100644 index 0000000..6611711 --- /dev/null +++ b/app/models/game_session_log.py @@ -0,0 +1,36 @@ +from app.extensions import db +from sqlalchemy.dialects.postgresql import UUID +from datetime import datetime, timedelta + +class GameSessionLog( db.Model ): + id = db.Column( db.BigInteger, primary_key = True, autoincrement = True, nullable = False ) + user_id = db.Column( db.BigInteger, db.ForeignKey( "user.id" ), nullable = False, index=True) + serveruuid = db.Column( UUID(as_uuid=True), nullable=False, index=True ) + joined_at = db.Column( db.DateTime, nullable = False, index = True ) + left_at = db.Column( db.DateTime, nullable = True ) + place_id = db.Column( db.BigInteger, nullable = False, index=True ) + + def __init__( + self, + user_id, + serveruuid, + place_id, + joined_at = None, + left_at = None + ): + self.user_id = user_id + self.serveruuid = serveruuid + self.place_id = place_id + self.joined_at = joined_at or datetime.utcnow() + self.left_at = left_at + + def __repr__(self): + return "".format( + user_id=self.user_id, + serveruuid=self.serveruuid, + place_id=self.place_id, + joined_at=self.joined_at, + left_at=self.left_at + ) + + \ No newline at end of file diff --git a/app/models/gamepass_link.py b/app/models/gamepass_link.py new file mode 100644 index 0000000..eddd619 --- /dev/null +++ b/app/models/gamepass_link.py @@ -0,0 +1,24 @@ +from app.extensions import db +import datetime + +class GamepassLink(db.Model): + gamepass_id = db.Column(db.BigInteger, db.ForeignKey("asset.id"), primary_key=True, nullable=False) + place_id = db.Column(db.BigInteger, db.ForeignKey("asset.id"), primary_key=True, nullable=False, index=True) # DEPRECATED + creator_id = db.Column(db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True) + created_at = db.Column(db.DateTime, nullable=False) + + gamepass = db.relationship("Asset", foreign_keys=[gamepass_id], uselist=False, lazy="joined") + place = db.relationship("Asset", foreign_keys=[place_id], uselist=False, lazy="joined") + creator = db.relationship("User", foreign_keys=[creator_id], uselist=False, lazy="joined") + + universe_id = db.Column(db.BigInteger, db.ForeignKey("universe.id"), nullable=True, index=True) + + def __init__(self, place_id, gamepass_id, universe_id, creator_id): + self.place_id = place_id + self.gamepass_id = gamepass_id + self.universe_id = universe_id + self.creator_id = creator_id + self.created_at = datetime.datetime.utcnow() + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/gameservers.py b/app/models/gameservers.py new file mode 100644 index 0000000..6d84ea8 --- /dev/null +++ b/app/models/gameservers.py @@ -0,0 +1,45 @@ +from app.extensions import db +from sqlalchemy.dialects.postgresql import UUID +import uuid + +class GameServer(db.Model): + serverId = db.Column(UUID(as_uuid=True), primary_key=True, nullable=False, unique=True, default=uuid.uuid4) + serverName = db.Column(db.String(128), nullable=False) + serverIP = db.Column(db.String(128), nullable=False) + serverPort = db.Column(db.Integer, nullable=False) + accessKey = db.Column(db.String(128), nullable=False) + + lastHeartbeat = db.Column(db.DateTime, nullable=True, default=None) + heartbeatResponseTime = db.Column(db.Float, nullable=True, default=0) + isRCCOnline = db.Column(db.Boolean, nullable=False, default=False) + thumbnailQueueSize = db.Column(db.Integer, nullable=False, default=0) + RCCmemoryUsage = db.Column(db.BigInteger, nullable=False, default=0) + + allowThumbnailGen = db.Column(db.Boolean, nullable=False, default=True) # If false, the server will not be able to generate thumbnails + allowGameServerHost = db.Column(db.Boolean, nullable=False, default=True) # If false, the server will not be able to host game servers + + def __init__( + self, + serverId, + serverName, + serverIP, + serverPort, + accessKey, + allowThumbnailGen=True, + allowGameServerHost=True + ): + self.serverId = serverId + self.serverName = serverName + self.serverIP = serverIP + self.serverPort = serverPort + self.accessKey = accessKey + self.allowThumbnailGen = allowThumbnailGen + self.allowGameServerHost = allowGameServerHost + + def __repr__(self): + return "".format( + serverId=self.serverId, + serverName=self.serverName, + serverIP=self.serverIP, + serverPort=self.serverPort + ) \ No newline at end of file diff --git a/app/models/giftcard_key.py b/app/models/giftcard_key.py new file mode 100644 index 0000000..0407664 --- /dev/null +++ b/app/models/giftcard_key.py @@ -0,0 +1,31 @@ +from app.extensions import db +from app.enums.GiftcardType import GiftcardType +from datetime import datetime + +class GiftcardKey(db.Model): + id = db.Column(db.BigInteger, primary_key=True) + key = db.Column(db.String(255), nullable=False) + type = db.Column(db.Enum(GiftcardType), nullable=False) + value = db.Column(db.BigInteger, nullable=True) + + created_at = db.Column(db.DateTime, nullable=False) + redeemed_at = db.Column(db.DateTime, nullable=True) + redeemed_by = db.Column(db.BigInteger, nullable=True) + + def __init__( + self, + key: str, + type: GiftcardType, + value: int = None, + created_at: datetime = None, + ): + if created_at is None: + created_at = datetime.utcnow() + + self.key = key + self.type = type + self.value = value + self.created_at = created_at + + def __repr__(self): + return f'' diff --git a/app/models/groups.py b/app/models/groups.py new file mode 100644 index 0000000..5b62f47 --- /dev/null +++ b/app/models/groups.py @@ -0,0 +1,296 @@ +from app.extensions import db +from datetime import datetime + +class Group(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + owner_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True) # Can be nullable since owners can leave groups + name = db.Column(db.String(255), nullable=False, index=True) + description = db.Column(db.String(1024), nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + locked = db.Column(db.Boolean, nullable=False, default=False) + + owner = db.relationship('User', backref=db.backref('groups', lazy=True)) + + def __init__( + self, + owner_id, + name, + description, + created_at=None, + updated_at=None, + ): + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + + self.owner_id = owner_id + self.name = name + self.description = description + self.created_at = created_at + self.updated_at = updated_at + + def __repr__(self): + return '' % self.name + +class GroupIcon(db.Model): + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True) + content_hash = db.Column(db.String(512), nullable=False, index=True) + moderation_status = db.Column(db.Integer, nullable=False, default=1) + creator_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('icon', lazy=True, uselist=False), uselist=False) + creator = db.relationship('User', backref=db.backref('group_icons', lazy=True)) + + def __init__( + self, + group_id, + content_hash, + moderation_status, + creator_id, + created_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + + self.group_id = group_id + self.content_hash = content_hash + self.moderation_status = moderation_status + self.creator_id = creator_id + self.created_at = created_at + + def __repr__(self): + return '' % self.group_id + +class GroupSettings(db.Model): + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True) + approval_required = db.Column(db.Boolean, nullable=False, default=False) + enemies_allowed = db.Column(db.Boolean, nullable=False, default=False) + funds_visible = db.Column(db.Boolean, nullable=False, default=False) + games_visible = db.Column(db.Boolean, nullable=False, default=False) + membership_required = db.Column(db.Boolean, nullable=False, default=False) + + last_updated = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('settings', lazy=True, uselist=False), uselist=False) + + def __init__( + self, + group_id, + approval_required = False, + enemies_allowed = False, + funds_visible = False, + games_visible = False, + membership_required = False, + last_updated=None + ): + if last_updated is None: + last_updated = datetime.utcnow() + + self.group_id = group_id + self.approval_required = approval_required + self.enemies_allowed = enemies_allowed + self.funds_visible = funds_visible + self.games_visible = games_visible + self.membership_required = membership_required + self.last_updated = last_updated + + def __repr__(self): + return '' % self.group_id + +class GroupRole(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + name = db.Column(db.String(255), nullable=False) + description = db.Column(db.String(255), nullable=False) + rank = db.Column(db.Integer, nullable=False, default=1) + member_count = db.Column(db.Integer, nullable=False, default=0) + + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('roles', lazy=True)) + + def __init__( + self, + group_id, + name, + description, + rank, + member_count, + created_at=None, + updated_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + + self.group_id = group_id + self.name = name + self.description = description + self.rank = rank + self.member_count = member_count + self.created_at = created_at + self.updated_at = updated_at + + def __repr__(self): + return '' % self.name + +class GroupRolePermission(db.Model): + group_role_id = db.Column(db.BigInteger, db.ForeignKey('group_role.id'), primary_key=True) + # One to one relationship + group_roleset = db.relationship('GroupRole', backref=db.backref('permissions', uselist=False, lazy=True), lazy=True, uselist=False) + + delete_from_wall = db.Column(db.Boolean, nullable=False, default=False) + post_to_wall = db.Column(db.Boolean, nullable=False, default=False) + invite_members = db.Column(db.Boolean, nullable=False, default=False) + post_to_status = db.Column(db.Boolean, nullable=False, default=False) + remove_members = db.Column(db.Boolean, nullable=False, default=False) + view_status = db.Column(db.Boolean, nullable=False, default=False) + view_wall = db.Column(db.Boolean, nullable=False, default=False) + change_rank = db.Column(db.Boolean, nullable=False, default=False) + advertise_group = db.Column(db.Boolean, nullable=False, default=False) + manage_relationships = db.Column(db.Boolean, nullable=False, default=False) + add_group_places = db.Column(db.Boolean, nullable=False, default=False) + view_audit_logs = db.Column(db.Boolean, nullable=False, default=False) + create_items = db.Column(db.Boolean, nullable=False, default=False) + manage_items = db.Column(db.Boolean, nullable=False, default=False) + spend_group_funds = db.Column(db.Boolean, nullable=False, default=False) + manage_clan = db.Column(db.Boolean, nullable=False, default=False) + manage_group_games = db.Column(db.Boolean, nullable=False, default=False) + + def __init__( + self, + group_role_id + ): + self.group_role_id = group_role_id + + def __repr__(self): + return '' % self.group_role_id + +class GroupMember(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + group_role_id = db.Column(db.BigInteger, db.ForeignKey('group_role.id'), nullable=False, index=True) + + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('members', lazy=True)) + user = db.relationship('User', backref=db.backref('group_members', lazy=True)) + group_role = db.relationship('GroupRole', backref=db.backref('members', lazy=True)) + + def __init__( + self, + group_id, + user_id, + group_role_id, + created_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + self.created_at = created_at + self.group_id = group_id + self.user_id = user_id + self.group_role_id = group_role_id + + def __repr__(self): + return '' % self.id + +class GroupEconomy(db.Model): + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True) + robux_balance = db.Column(db.BigInteger, nullable=False, default=0) + tix_balance = db.Column(db.BigInteger, nullable=False, default=0) + + group = db.relationship('Group', backref=db.backref('economy', lazy=True, uselist=False), uselist=False) + + def __init__( + self, + group_id + ): + self.group_id = group_id + + def __repr__(self): + return '' % self.group_id + +class GroupJoinRequest(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('join_requests', lazy=True)) + user = db.relationship('User', backref=db.backref('group_join_requests', lazy=True)) + + def __init__( + self, + group_id, + user_id, + created_at=None + ): + if created_at is None: + created_at = datetime.utcnow() + self.group_id = group_id + self.user_id = user_id + self.created_at = created_at + + def __repr__(self): + return '' % self.id + +class GroupStatus(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + poster_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + content = db.Column(db.String(1024), nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('statuses', lazy=True)) + poster = db.relationship('User', backref=db.backref('group_statuses', lazy=True)) + + def __init__( + self, + group_id, + poster_id, + content, + created_at=None + ): + self.group_id = group_id + self.poster_id = poster_id + self.content = content + if created_at is None: + created_at = datetime.utcnow() + self.created_at = created_at + + def __repr__(self): + return '' % self.id + +class GroupWallPost(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True) + poster_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + content = db.Column(db.String(1024), nullable=False) + created_at = db.Column(db.DateTime, nullable=False) + + group = db.relationship('Group', backref=db.backref('wall_posts', lazy=True)) + poster = db.relationship('User', backref=db.backref('group_wall_posts', lazy=True, uselist=False), uselist=False) + + def __init__( + self, + group_id, + poster_id, + content, + created_at=None + ): + self.group_id = group_id + self.poster_id = poster_id + self.content = content + if created_at is None: + created_at = datetime.utcnow() + self.created_at = created_at + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/invite_key.py b/app/models/invite_key.py new file mode 100644 index 0000000..e93f34d --- /dev/null +++ b/app/models/invite_key.py @@ -0,0 +1,25 @@ +from app.extensions import db +from datetime import datetime + +class InviteKey(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + key = db.Column(db.String(255), nullable=False) # syntax-randomstring + created_at = db.Column(db.DateTime, nullable=False) + created_by = db.Column(db.BigInteger, db.ForeignKey('user.id') ,nullable=True, index=True) + used_by = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True) + used_on = db.Column(db.DateTime, nullable=True) + + creator = db.relationship('User', backref=db.backref('invite_keys', lazy=True), foreign_keys=[created_by], uselist=False) + user = db.relationship('User', backref=db.backref('used_invite_keys', lazy=True), foreign_keys=[used_by], uselist=False) + + def __init__( + self, + key, + created_by + ): + self.key = key + self.created_by = created_by + self.created_at = datetime.utcnow() + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/kofi_transaction.py b/app/models/kofi_transaction.py new file mode 100644 index 0000000..3310cb3 --- /dev/null +++ b/app/models/kofi_transaction.py @@ -0,0 +1,41 @@ +from app.extensions import db + +class KofiTransaction(db.Model): + kofi_transaction_id = db.Column(db.Text, primary_key=True) + timestamp = db.Column(db.DateTime, nullable=False) + donation_type = db.Column(db.Text, nullable=False) + amount = db.Column(db.Float, nullable=False) + currency = db.Column(db.Text, nullable=False) + is_subscription_payment = db.Column(db.Boolean, nullable=False) + message = db.Column(db.Text, nullable=False) + from_name = db.Column(db.Text, nullable=False) + from_email = db.Column(db.Text, nullable=False) + + assigned_key = db.Column(db.Text ,nullable=True) + + def __init__( + self, + kofi_transaction_id, + timestamp, + donation_type, + amount, + currency, + is_subscription_payment, + message, + from_name, + from_email, + assigned_key=None + ): + self.kofi_transaction_id = kofi_transaction_id + self.timestamp = timestamp + self.donation_type = donation_type + self.amount = amount + self.currency = currency + self.is_subscription_payment = is_subscription_payment + self.message = message + self.from_name = from_name + self.from_email = from_email + self.assigned_key = assigned_key + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/legacy_data_persistence.py b/app/models/legacy_data_persistence.py new file mode 100644 index 0000000..0c2ba71 --- /dev/null +++ b/app/models/legacy_data_persistence.py @@ -0,0 +1,31 @@ +from app.extensions import db +from datetime import datetime + +class LegacyDataPersistence( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True ) + userid = db.Column( db.BigInteger, nullable=False, index=True ) + placeid = db.Column( db.BigInteger, nullable=False, index=True ) # DEPRECATED + data = db.Column( db.LargeBinary, nullable=False ) + + last_updated = db.Column( db.DateTime, nullable=False ) + + universe_id = db.Column( db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True ) + + def __init__( + self, + userid, + placeid, + universe_id + ): + self.userid = userid + self.placeid = placeid + self.last_updated = datetime.utcnow() + self.universe_id = universe_id + + def __repr__(self): + return "".format( + id=self.id, + userid=self.userid, + placeid=self.placeid + ) + diff --git a/app/models/limited_item_transfers.py b/app/models/limited_item_transfers.py new file mode 100644 index 0000000..bda0190 --- /dev/null +++ b/app/models/limited_item_transfers.py @@ -0,0 +1,33 @@ +from app.extensions import db +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod + +from datetime import datetime + +class LimitedItemTransfer(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + + original_owner_id = db.Column(db.BigInteger, nullable=False, index=True) + new_owner_id = db.Column(db.BigInteger, nullable=False, index=True) + + asset_id = db.Column(db.BigInteger, nullable=False, index=True) + user_asset_id = db.Column(db.BigInteger, nullable=False, index=True) + transferred_at = db.Column(db.DateTime, nullable=False) + + transfer_method = db.Column(db.Enum(LimitedItemTransferMethod), nullable=False, index=True) + purchased_price = db.Column(db.BigInteger, nullable=True, default=None) + associated_trade_id = db.Column(db.BigInteger, nullable=True, default=None) + + def __init__(self, original_owner_id, new_owner_id, asset_id, user_asset_id, transfer_method=LimitedItemTransferMethod.Purchase, transferred_at=None, purchased_price=None, associated_trade_id = None): + self.original_owner_id = original_owner_id + self.new_owner_id = new_owner_id + self.asset_id = asset_id + self.user_asset_id = user_asset_id + self.transfer_method = transfer_method + + if transferred_at is None: + self.transferred_at = datetime.utcnow() + else: + self.transferred_at = transferred_at + + self.purchased_price = purchased_price + self.associated_trade_id = associated_trade_id \ No newline at end of file diff --git a/app/models/linked_discord.py b/app/models/linked_discord.py new file mode 100644 index 0000000..c401c09 --- /dev/null +++ b/app/models/linked_discord.py @@ -0,0 +1,49 @@ +from app.extensions import db +from datetime import datetime + +class LinkedDiscord(db.Model): + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True) + discord_id = db.Column(db.BigInteger, nullable=False) + discord_username = db.Column(db.String(255), nullable=False) + discord_discriminator = db.Column(db.String(255), nullable=True) + discord_avatar = db.Column(db.Text, nullable=True) + discord_access_token = db.Column(db.String(512), nullable=True) + discord_refresh_token = db.Column(db.String(512), nullable=True) + discord_expiry = db.Column(db.DateTime, nullable=True) + + last_updated = db.Column(db.DateTime, nullable=False) + linked_on = db.Column(db.DateTime, nullable=False) + + user = db.relationship('User', backref=db.backref('discord', lazy=True)) + + def __init__(self, + user_id, + discord_id, + discord_username, + discord_discriminator, + discord_avatar, + discord_access_token, + discord_refresh_token, + discord_expiry, + last_updated=None, + linked_on=None + ): + self.user_id = user_id + self.discord_id = discord_id + self.discord_username = discord_username + self.discord_discriminator = discord_discriminator + self.discord_avatar = discord_avatar + self.discord_access_token = discord_access_token + self.discord_refresh_token = discord_refresh_token, + self.discord_expiry = discord_expiry + + if last_updated is None: + self.last_updated = datetime.utcnow() + else: + self.last_updated = last_updated + if linked_on is None: + self.linked_on = datetime.utcnow() + else: + self.linked_on = linked_on + def __repr__(self): + return '' % self.user_id \ No newline at end of file diff --git a/app/models/login_records.py b/app/models/login_records.py new file mode 100644 index 0000000..c51b705 --- /dev/null +++ b/app/models/login_records.py @@ -0,0 +1,21 @@ +from app.extensions import db + +class LoginRecord(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + ip = db.Column(db.Text, nullable=False, index=True) + useragent = db.Column(db.Text, nullable=False) + timestamp = db.Column(db.DateTime, nullable=False) + session_token = db.Column(db.Text, nullable=True, index=True) + + User = db.relationship('User', backref=db.backref('login_records', lazy=True), uselist=False) + + def __init__(self, userid, ip, useragent, timestamp, session_token = None): + self.userid = userid + self.ip = ip + self.useragent = useragent + self.timestamp = timestamp + self.session_token = session_token + + def __repr__(self): + return ''.format(self.id, self.userid, self.ip) \ No newline at end of file diff --git a/app/models/messages.py b/app/models/messages.py new file mode 100644 index 0000000..839b0ed --- /dev/null +++ b/app/models/messages.py @@ -0,0 +1,33 @@ +from app.extensions import db +from datetime import datetime + +class Message( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, autoincrement=True, nullable=False ) + sender_id = db.Column( db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True ) + recipient_id = db.Column( db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True ) + created = db.Column( db.DateTime, nullable=False ) + read = db.Column( db.Boolean, nullable=False ) + subject = db.Column( db.String( 128 ), nullable=False ) + content = db.Column( db.Text, nullable=False ) + + sender = db.relationship( "User", foreign_keys=[sender_id], uselist=False) + recipient = db.relationship( "User", foreign_keys=[recipient_id], uselist=False) + + def __init__( + self, + sender_id, + recipient_id, + content, + subject, + + read=False + ): + self.sender_id = sender_id + self.recipient_id = recipient_id + self.content = content + self.read = read + self.subject = subject + self.created = datetime.utcnow() + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/moderator_note.py b/app/models/moderator_note.py new file mode 100644 index 0000000..9cac09b --- /dev/null +++ b/app/models/moderator_note.py @@ -0,0 +1,36 @@ +from app.extensions import db +from datetime import datetime + +class ModeratorNote( db.Model ): + id = db.Column( db.BigInteger, primary_key = True, autoincrement = True ) + user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True) + note_creator_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True) + note = db.Column( db.Text ) + + created_at = db.Column( db.DateTime, index=True, nullable=False ) + updated_at = db.Column( db.DateTime, index=True, nullable=False ) + + related_action_id = db.Column( db.BigInteger, db.ForeignKey('user_ban.id'), nullable = True, index = True) + + def __init__( self, user_id, note_creator_id, note, related_action_id = None ): + self.user_id = user_id + self.note_creator_id = note_creator_id + self.note = note + self.related_action_id = related_action_id + + self.created_at = datetime.utcnow() + self.updated_at = datetime.utcnow() + + def __repr__( self ): + return '' % self.id + +class ModeratorNoteAttachment( db.Model ): + id = db.Column( db.BigInteger, primary_key = True, autoincrement = True ) + moderator_note_id = db.Column( db.BigInteger, db.ForeignKey( 'moderator_note.id' ), index = True) + attachment_hash = db.Column( db.String( 512 ), index = True, nullable = False ) + attachment_name = db.Column( db.String( 512 ), index = True, nullable = False ) + + def __init__( self, moderator_note_id, attachment_hash, attachment_name ): + self.moderator_note_id = moderator_note_id + self.attachment_hash = attachment_hash + self.attachment_name = attachment_name \ No newline at end of file diff --git a/app/models/package_asset.py b/app/models/package_asset.py new file mode 100644 index 0000000..2fd3f32 --- /dev/null +++ b/app/models/package_asset.py @@ -0,0 +1,13 @@ +from app.extensions import db + +class PackageAsset( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, autoincrement=True) + package_asset_id = db.Column( db.BigInteger, nullable=False, index=True ) + asset_id = db.Column( db.BigInteger, nullable=False ) + + def __init__( self, package_asset_id, asset_id ): + self.package_asset_id = package_asset_id + self.asset_id = asset_id + + def __repr__( self ): + return '' % self.package_asset_id \ No newline at end of file diff --git a/app/models/past_usernames.py b/app/models/past_usernames.py new file mode 100644 index 0000000..0c7b031 --- /dev/null +++ b/app/models/past_usernames.py @@ -0,0 +1,16 @@ +from app.extensions import db +from datetime import datetime + +class PastUsername(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False) + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True) + username = db.Column(db.Text, nullable=False) + created = db.Column(db.DateTime, nullable=False) + + def __init__(self, user_id, username): + self.user_id = user_id + self.username = username + self.created = datetime.utcnow() + + def __repr__(self): + return ''.format(self.username, str(self.id)) diff --git a/app/models/place.py b/app/models/place.py new file mode 100644 index 0000000..6382adb --- /dev/null +++ b/app/models/place.py @@ -0,0 +1,51 @@ +from app.extensions import db +from app.models.asset import Asset +from app.enums.PlaceYear import PlaceYear +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.enums.ChatStyle import ChatStyle + +class Place( db.Model ): + placeid = db.Column( db.BigInteger, db.ForeignKey('asset.id') ,primary_key=True, nullable=False, unique=True ) # Should be the same as the asset id + visitcount = db.Column( db.BigInteger, nullable=False, default=0 ) + is_public = db.Column( db.Boolean, nullable=False, default=True ) + maxplayers = db.Column( db.BigInteger, nullable=False, default=10 ) + placeyear = db.Column( db.Enum( PlaceYear ), nullable=False, default=PlaceYear.Sixteen ) + featured = db.Column( db.Boolean, nullable=False, default=False, index=True) + bc_required = db.Column( db.Boolean, nullable=False, default=False, index=True) + rig_choice = db.Column( db.Enum( PlaceRigChoice ), nullable=False, default=PlaceRigChoice.UserChoice ) + chat_style = db.Column( db.Enum( ChatStyle ), nullable=False, default=ChatStyle.ClassicAndBubble ) + min_account_age = db.Column( db.Integer, nullable=False, default=0) + + parent_universe_id = db.Column( db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True ) + + assetObj = db.relationship( 'Asset', backref=db.backref('place', lazy=True, uselist=False), uselist=False ) + + def __init__( + self, + placeid, + visitcount = 0, + is_public = True, + maxplayers = 10, + placeyear = PlaceYear.Sixteen, + rig_choice = PlaceRigChoice.UserChoice, + chat_style = ChatStyle.ClassicAndBubble, + min_account_age = 0, + parent_universe_id = None + ): + self.placeid = placeid + self.visitcount = visitcount + self.is_public = is_public + self.maxplayers = maxplayers + self.placeyear = placeyear + self.rig_choice = rig_choice + self.chat_style = chat_style + self.min_account_age = min_account_age + self.parent_universe_id = parent_universe_id + + def __repr__(self): + return "".format( + placeid=self.placeid, + visitcount=self.visitcount, + is_public=self.is_public, + maxplayers=self.maxplayers + ) \ No newline at end of file diff --git a/app/models/place_badge.py b/app/models/place_badge.py new file mode 100644 index 0000000..3a2a6e8 --- /dev/null +++ b/app/models/place_badge.py @@ -0,0 +1,48 @@ +from app.extensions import db +from datetime import datetime + +class PlaceBadge( db.Model ): + id = db.Column( db.BigInteger, primary_key=True ) + associated_place_id = db.Column( db.BigInteger, db.ForeignKey( 'place.placeid' ), index = True ) # DEPRECATED + icon_image_id = db.Column( db.BigInteger, db.ForeignKey( 'asset.id' ), nullable = False ) + + name = db.Column( db.String( 255 ), nullable = False ) + description = db.Column( db.String( 1024 ), nullable = False ) + created_at = db.Column( db.DateTime, nullable = False, index = True ) + updated_at = db.Column( db.DateTime, nullable = False, index = True ) + + enabled = db.Column( db.Boolean, nullable = False, default = True ) + asset_reward = db.Column( db.BigInteger, nullable = True, default = None ) + + universe_id = db.Column( db.BigInteger, db.ForeignKey( 'universe.id' ), nullable = True, index = True ) + + def __init__( self, name, description, icon_image_id, associated_place_id, universe_id): + self.name = name + self.description = description + self.icon_image_id = icon_image_id + self.associated_place_id = associated_place_id + self.universe_id = universe_id + + self.created_at = datetime.utcnow() + self.updated_at = datetime.utcnow() + + def __repr__( self ): + return '' % self.id + +class UserBadge( db.Model ): + id = db.Column( db.BigInteger, primary_key=True ) + badge_id = db.Column( db.BigInteger, db.ForeignKey( 'place_badge.id' ), index = True ) + user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True ) + + awarded_at = db.Column( db.DateTime, nullable = False, index = True ) + + badge = db.relationship( 'PlaceBadge', backref = db.backref( 'user_badges', lazy = 'dynamic' ) ) + + def __init__( self, badge_id, user_id ): + self.badge_id = badge_id + self.user_id = user_id + + self.awarded_at = datetime.utcnow() + + def __repr__( self ): + return '' % self.id \ No newline at end of file diff --git a/app/models/place_datastore.py b/app/models/place_datastore.py new file mode 100644 index 0000000..08752d5 --- /dev/null +++ b/app/models/place_datastore.py @@ -0,0 +1,34 @@ +from app.extensions import db +from datetime import datetime + +class PlaceDatastore( db.Model ): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + placeid = db.Column(db.BigInteger, nullable=False, index=True) # DEPRECATED + + scope = db.Column(db.String(255), nullable=False, index=True) + key = db.Column(db.String(255), nullable=False, index=True) + name = db.Column(db.String(255), nullable=False) + value = db.Column(db.String(1024 * 1024), nullable=False) + + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + + universe_id = db.Column(db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True) + + def __init__(self, placeid, scope, key, name, value, created_at=None, updated_at=None, universe_id = None): + self.placeid = placeid + self.scope = scope + self.key = key + self.name = name + self.value = value + self.universe_id = universe_id + + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + self.created_at = created_at + self.updated_at = updated_at + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/place_developer_product.py b/app/models/place_developer_product.py new file mode 100644 index 0000000..22a0542 --- /dev/null +++ b/app/models/place_developer_product.py @@ -0,0 +1,48 @@ +from app.extensions import db +from datetime import datetime + +class DeveloperProduct( db.Model ): + productid = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True ) + placeid = db.Column( db.BigInteger, db.ForeignKey( 'place.placeid' ), nullable=True, index=True ) # DEPRECATED + name = db.Column( db.String( 256 ), nullable=False ) + description = db.Column( db.String( 1024 ), nullable=False ) + iconimage_assetid = db.Column( db.BigInteger, db.ForeignKey( 'asset.id' ), nullable=True, index=True ) + + robux_price = db.Column( db.BigInteger, nullable=False, default = 0 ) + sales_count = db.Column( db.BigInteger, nullable=False, default = 0 ) + is_for_sale = db.Column( db.Boolean, nullable=False, default = False ) + + created_at = db.Column( db.DateTime, nullable=False ) + updated_at = db.Column( db.DateTime, nullable=False ) + + creator_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), nullable=False, index=True ) + universe_id = db.Column( db.BigInteger, db.ForeignKey( 'universe.id' ), nullable=True, index=True ) + + placeObj = db.relationship( 'Place', lazy='joined', uselist=False ) + creatorObj = db.relationship( 'User', lazy='joined', uselist=False ) + iconimageObj = db.relationship( 'Asset', lazy='joined', uselist=False ) + + def __init__( self, placeid, name, description, iconimage_assetid, creator_id, universe_id ): + self.placeid = placeid + self.name = name + self.description = description + self.iconimage_assetid = iconimage_assetid + self.creator_id = creator_id + self.universe_id = universe_id + + self.created_at = datetime.utcnow() + self.updated_at = datetime.utcnow() + + def __repr__( self ): + return "".format( + productid=self.productid, + placeid=self.placeid, + name=self.name, + description=self.description, + iconimage_assetid=self.iconimage_assetid, + robux_price=self.robux_price, + sales_count=self.sales_count, + created_at=self.created_at, + updated_at=self.updated_at, + creator_id=self.creator_id + ) \ No newline at end of file diff --git a/app/models/place_icon.py b/app/models/place_icon.py new file mode 100644 index 0000000..cd4c2cc --- /dev/null +++ b/app/models/place_icon.py @@ -0,0 +1,22 @@ +from app.extensions import db + +class PlaceIcon(db.Model): + placeid = db.Column(db.BigInteger, db.ForeignKey('asset.id'), primary_key=True, nullable=False, unique=True) + contenthash = db.Column(db.String(512), nullable=True) + updated_at = db.Column(db.DateTime, nullable=True) + moderation_status = db.Column(db.SmallInteger, nullable=False, default=1) # Asset thumbnail moderation status ( 0 = Approved, 1 = Pending, 2 = Declined ) + + asset = db.relationship('Asset', backref=db.backref('place_icon', lazy=True, uselist=False), uselist=False) + + def __init__(self, placeid, contenthash, updated_at, moderation_status=1): + self.placeid = placeid + self.contenthash = contenthash + self.updated_at = updated_at + self.moderation_status = moderation_status + + def __repr__(self): + return "".format( + placeid=self.placeid, + contenthash=self.contenthash, + updated_at=self.updated_at + ) \ No newline at end of file diff --git a/app/models/place_ordered_datastore.py b/app/models/place_ordered_datastore.py new file mode 100644 index 0000000..fa6975b --- /dev/null +++ b/app/models/place_ordered_datastore.py @@ -0,0 +1,33 @@ +from app.extensions import db +from datetime import datetime + +class PlaceOrderedDatastore( db.Model ): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + placeid = db.Column(db.BigInteger, nullable=False) + + scope = db.Column(db.String(255), nullable=False) + key = db.Column(db.String(255), nullable=False) + name = db.Column(db.String(255), nullable=False) + value = db.Column(db.BigInteger, nullable=False) + + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + + universe_id = db.Column(db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True) + + def __init__(self, placeid, scope, key, name, value, created_at=None, updated_at=None, universe_id=None): + self.placeid = placeid + self.scope = scope + self.key = key + self.name = name + self.value = value + + if created_at is None: + created_at = datetime.utcnow() + if updated_at is None: + updated_at = datetime.utcnow() + self.created_at = created_at + self.updated_at = updated_at + + def __repr__(self): + return '' % self.id \ No newline at end of file diff --git a/app/models/placeserver_players.py b/app/models/placeserver_players.py new file mode 100644 index 0000000..86f8577 --- /dev/null +++ b/app/models/placeserver_players.py @@ -0,0 +1,23 @@ +from app.extensions import db +from sqlalchemy.dialects.postgresql import UUID + +class PlaceServerPlayer(db.Model): + userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True, nullable=False, unique=True) + serveruuid = db.Column(UUID(as_uuid=True), nullable=False, index=True) + joinTime = db.Column(db.DateTime, nullable=False) + lastHeartbeat = db.Column(db.DateTime, nullable=True, default=None) + + user = db.relationship('User', backref=db.backref('placeserver_players', lazy=True), uselist=False) + + def __init__(self, userid, serveruuid, joinTime): + self.userid = userid + self.serveruuid = serveruuid + self.joinTime = joinTime + self.lastHeartbeat = joinTime + + def __repr__(self): + return "".format( + userid=self.userid, + serveruuid=self.serveruuid, + joinTime=self.joinTime + ) diff --git a/app/models/placeservers.py b/app/models/placeservers.py new file mode 100644 index 0000000..8c715df --- /dev/null +++ b/app/models/placeservers.py @@ -0,0 +1,52 @@ +from app.extensions import db +from sqlalchemy.dialects.postgresql import UUID +from datetime import datetime, timedelta + +class PlaceServer(db.Model): + serveruuid = db.Column(UUID(as_uuid=True), primary_key=True, nullable=False, unique=True) + originServerId = db.Column(UUID(as_uuid=True), nullable=False, index=True) + serverIP = db.Column(db.String(128), nullable=False) + serverPort = db.Column(db.Integer, nullable=False) + + serverPlaceId = db.Column(db.BigInteger, nullable=False, index=True) + serverRunningTime = db.Column(db.BigInteger, nullable=False, default=0) + + playerCount = db.Column(db.Integer, nullable=False, default=0) + maxPlayerCount = db.Column(db.Integer, nullable=False, default=20) + + lastping = db.Column(db.DateTime, nullable=True) + + reservedServerAccessCode = db.Column(db.Text, nullable=True) + + def __init__( + self, + serveruuid, + originServerId, + serverIP, + serverPort, + serverPlaceId, + + serverRunningTime=0, + playerCount=0, + maxPlayerCount=20, + reservedServerAccessCode=None + ): + self.serveruuid = serveruuid + self.originServerId = originServerId + self.serverIP = serverIP + self.serverPort = serverPort + self.serverPlaceId = serverPlaceId + self.serverRunningTime = serverRunningTime + self.playerCount = playerCount + self.maxPlayerCount = maxPlayerCount + self.lastping = datetime.utcnow() + self.reservedServerAccessCode = reservedServerAccessCode + + def __repr__(self): + return "".format( + serveruuid=self.serveruuid, + originServerId=self.originServerId, + serverIP=self.serverIP, + serverPort=self.serverPort, + serverPlaceId=self.serverPlaceId + ) diff --git a/app/models/pointsservice.py b/app/models/pointsservice.py new file mode 100644 index 0000000..5b7a480 --- /dev/null +++ b/app/models/pointsservice.py @@ -0,0 +1,15 @@ +from app.extensions import db + +class PointsService(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + placeId = db.Column(db.BigInteger, nullable=False, index=True) + userId = db.Column(db.BigInteger, nullable=False, index=True) + points = db.Column(db.BigInteger, nullable=False, default=0) + + def __init__(self, placeId, userId, points): + self.placeId = placeId + self.userId = userId + self.points = points + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/previously_played.py b/app/models/previously_played.py new file mode 100644 index 0000000..3663743 --- /dev/null +++ b/app/models/previously_played.py @@ -0,0 +1,16 @@ +from app.extensions import db +from datetime import datetime + +class PreviouslyPlayed(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, unique=True) + userid = db.Column(db.BigInteger, nullable=False, index=True) + lastplayed = db.Column(db.DateTime, nullable=False) + placeid = db.Column(db.BigInteger, nullable=False, index=True) + + def __init__(self, userid, placeid): + self.userid = userid + self.placeid = placeid + self.lastplayed = datetime.utcnow() + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/product_receipt.py b/app/models/product_receipt.py new file mode 100644 index 0000000..918418f --- /dev/null +++ b/app/models/product_receipt.py @@ -0,0 +1,31 @@ +from app.extensions import db +from datetime import datetime + +class ProductReceipt( db.Model ): + receipt_id = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True ) + user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), nullable=False, index=True ) + product_id = db.Column( db.BigInteger, db.ForeignKey( 'developer_product.productid' ), nullable=False, index=True ) + robux_amount = db.Column( db.BigInteger, nullable=False ) + is_processed = db.Column( db.Boolean, nullable=False, default = False ) + + created_at = db.Column( db.DateTime, nullable=False ) + + userObj = db.relationship( 'User', lazy='joined', uselist=False ) + productObj = db.relationship( 'DeveloperProduct', lazy='joined', uselist=False ) + + def __init__( self, user_id, product_id, robux_amount ): + self.user_id = user_id + self.product_id = product_id + self.robux_amount = robux_amount + + self.created_at = datetime.utcnow() + + def __repr__( self ): + return "".format( + receipt_id=self.receipt_id, + user_id=self.user_id, + product_id=self.product_id, + robux_amount=self.robux_amount, + is_processed=self.is_processed, + created_at=self.created_at + ) \ No newline at end of file diff --git a/app/models/universe.py b/app/models/universe.py new file mode 100644 index 0000000..69c343d --- /dev/null +++ b/app/models/universe.py @@ -0,0 +1,56 @@ +from app.extensions import db +from datetime import datetime +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.enums.PlaceYear import PlaceYear + +class Universe( db.Model ): + id = db.Column( db.BigInteger, primary_key=True, autoincrement=True, nullable=False ) + root_place_id = db.Column( db.BigInteger, nullable=False, index=True, unique=True ) + creator_id = db.Column( db.BigInteger, nullable=False, index=True ) + creator_type = db.Column( db.SmallInteger, nullable=False ) + + created_at = db.Column( db.DateTime, nullable=False ) + updated_at = db.Column( db.DateTime, nullable=False ) + + place_rig_choice = db.Column( db.Enum( PlaceRigChoice ), nullable=False, default = PlaceRigChoice.UserChoice ) + place_year = db.Column( db.Enum( PlaceYear ), nullable=False, default = PlaceYear.Sixteen ) + is_featured = db.Column( db.Boolean, nullable=False, default = False, index=True ) + minimum_account_age = db.Column( db.Integer, nullable=False, default = 0 ) + bc_required = db.Column( db.Boolean, nullable=False, default = False, index=True ) + allow_direct_join = db.Column( db.Boolean, nullable=False, default = False, index=True ) + is_public = db.Column( db.Boolean, nullable=False, default = True, index=True ) + moderation_status = db.Column( db.SmallInteger, nullable=False, default = 0, index=True ) + visit_count = db.Column( db.BigInteger, nullable=False, default = 0, index=True ) + + def __init__( + self, + root_place_id : int, + creator_id : int, + creator_type : int, + + place_rig_choice : PlaceRigChoice = PlaceRigChoice.UserChoice, + place_year : PlaceYear = PlaceYear.Sixteen, + is_featured : bool = False, + minimum_account_age : int = 0, + bc_required : bool = False, + allow_direct_join : bool = False, + is_public : bool = True, + + updated_at : datetime = None, + created_at : datetime = None + ): + self.root_place_id = root_place_id + self.creator_id = creator_id + self.creator_type = creator_type + + self.place_rig_choice = place_rig_choice + self.place_year = place_year + + self.is_featured = is_featured + self.minimum_account_age = minimum_account_age + self.bc_required = bc_required + self.allow_direct_join = allow_direct_join + self.is_public = is_public + + self.created_at = datetime.utcnow() if created_at is None else created_at + self.updated_at = datetime.utcnow() if updated_at is None else updated_at \ No newline at end of file diff --git a/app/models/user.py b/app/models/user.py new file mode 100644 index 0000000..f5a3fed --- /dev/null +++ b/app/models/user.py @@ -0,0 +1,25 @@ +from app.extensions import db + +class User(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, unique=True, nullable=False) + username = db.Column(db.Text, index=True, unique=True, nullable=False) + password = db.Column(db.Text, nullable=False) + + created = db.Column(db.DateTime, nullable=False) + description = db.Column(db.Text, nullable=False, default="") + lastonline = db.Column(db.DateTime, nullable=False) + + # 1 = OK, 2 = Banned, 3 = Deleted, 4 = Forgotten + accountstatus = db.Column(db.Integer, nullable=False, default=1) + TOTPEnabled = db.Column(db.Boolean, nullable=False, default=False) + + def __init__( self, username, password, created, lastonline): + self.username = username + self.password = password + self.created = created + self.lastonline = lastonline + self.description = "Hi! I just joined Syntax!" + + def __repr__(self): + return ''.format(self.username, str(self.id)) + diff --git a/app/models/user_avatar.py b/app/models/user_avatar.py new file mode 100644 index 0000000..696e671 --- /dev/null +++ b/app/models/user_avatar.py @@ -0,0 +1,43 @@ +from app.extensions import db + +class UserAvatar(db.Model): + user_id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True) # User ID + content_hash = db.Column(db.String(512), nullable=True, default=None) # User avatar content hash + avatar_type = db.Column(db.SmallInteger, nullable=False, default=1) # Deprecated + + # Refer to https://create.roblox.com/docs/reference/engine/datatypes/BrickColor + # for BrickColor IDs and names + # The only IDs that should be used is 1001-1032 + head_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar head color ID + torso_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar torso color ID + right_arm_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar right arm color ID + left_arm_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar left arm color ID + right_leg_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar right leg color ID + left_leg_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar left leg color ID + + r15 = db.Column(db.Boolean, nullable=True, default=False) # Is the user using R15? + + height_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar height scale + width_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar width scale + head_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar head scale + proportion_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar proportion scale + body_type_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar body type scale + + def __init__( + self, + user_id + ): + self.user_id = user_id + + def __repr__(self): + return "".format( + user_id=self.user_id, + content_hash=self.content_hash, + avatar_type=self.avatar_type, + head_color_id=self.head_color_id, + torso_color_id=self.torso_color_id, + right_arm_color_id=self.right_arm_color_id, + left_arm_color_id=self.left_arm_color_id, + right_leg_color_id=self.right_leg_color_id, + left_leg_color_id=self.left_leg_color_id + ) \ No newline at end of file diff --git a/app/models/user_avatar_asset.py b/app/models/user_avatar_asset.py new file mode 100644 index 0000000..313f68b --- /dev/null +++ b/app/models/user_avatar_asset.py @@ -0,0 +1,22 @@ +from app.extensions import db + +class UserAvatarAsset(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) # ID + user_id = db.Column(db.BigInteger, nullable=False, index=True) # User ID + asset_id = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Asset ID + + asset = db.relationship('Asset', uselist=False) + + def __init__( + self, + user_id, + asset_id + ): + self.user_id = user_id + self.asset_id = asset_id + + def __repr__(self): + return "".format( + user_id=self.user_id, + asset_id=self.asset_id + ) \ No newline at end of file diff --git a/app/models/user_ban.py b/app/models/user_ban.py new file mode 100644 index 0000000..3764491 --- /dev/null +++ b/app/models/user_ban.py @@ -0,0 +1,40 @@ +from app.extensions import db +from datetime import datetime, timedelta +from app.enums.BanType import BanType + +class UserBan(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False) + author_userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False) + reason = db.Column(db.String(512), nullable=False) + ban_type = db.Column(db.Enum(BanType), nullable=False) + moderator_note = db.Column(db.String(512), nullable=True) + + created_at = db.Column(db.DateTime, nullable=False) + expires_at = db.Column(db.DateTime, nullable=True) + + acknowledged = db.Column(db.Boolean, nullable=False, default=False) + + def __init__( + self, + userid: int, + author_userid: int, + reason: str, + ban_type: BanType, + moderator_note: str, + expires_at: datetime, + created_at: datetime = None + ): + self.userid = userid + self.author_userid = author_userid + self.reason = reason + self.ban_type = ban_type + self.moderator_note = moderator_note + self.expires_at = expires_at + + if created_at is None: + created_at = datetime.utcnow() + self.created_at = created_at + + def __repr__(self): + return f'' \ No newline at end of file diff --git a/app/models/user_email.py b/app/models/user_email.py new file mode 100644 index 0000000..eb2e932 --- /dev/null +++ b/app/models/user_email.py @@ -0,0 +1,19 @@ +from app.extensions import db +from datetime import datetime + +class UserEmail( db.Model ): + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True) + email = db.Column(db.String(256), nullable=False, primary_key=True) + verified = db.Column(db.Boolean, nullable=False, default=False) + updated_at = db.Column(db.DateTime, nullable=False) + + user = db.relationship("User", foreign_keys=[user_id], uselist=False, lazy="joined") + + def __init__(self, user_id, email, verified): + self.user_id = user_id + self.email = email + self.verified = verified + self.updated_at = datetime.utcnow() + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/user_hwid_log.py b/app/models/user_hwid_log.py new file mode 100644 index 0000000..3b16973 --- /dev/null +++ b/app/models/user_hwid_log.py @@ -0,0 +1,18 @@ +from app.extensions import db +from datetime import datetime, timedelta + +class UserHWIDLog( db.Model ): + id = db.Column( db.BigInteger, primary_key = True, autoincrement = True, nullable = False ) + user_id = db.Column( db.BigInteger, db.ForeignKey( "user.id" ), nullable = False, index=True) + hwid = db.Column( db.Text, nullable = False, index=True ) + created_at = db.Column( db.DateTime, nullable = False ) + + def __init__( + self, + user_id, + hwid, + created_at = None + ): + self.user_id = user_id + self.hwid = hwid + self.created_at = created_at or datetime.utcnow() \ No newline at end of file diff --git a/app/models/user_membership.py b/app/models/user_membership.py new file mode 100644 index 0000000..a49b2ba --- /dev/null +++ b/app/models/user_membership.py @@ -0,0 +1,24 @@ +from app.extensions import db +from app.enums.MembershipType import MembershipType +from datetime import datetime, timedelta + +class UserMembership(db.Model): + user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True) + membership_type = db.Column(db.Enum(MembershipType), nullable=False) + created = db.Column(db.DateTime, nullable=True) + expiration = db.Column(db.DateTime, nullable=True) + next_stipend = db.Column(db.DateTime, nullable=True) + + def __init__(self, user_id, membership_type, created, expiration): + self.user_id = user_id + self.membership_type = membership_type + self.created = created + self.expiration = expiration + if created is not None: + self.next_stipend = created + timedelta(hours=24) + else: + self.next_stipend = None + + def __repr__(self): + return '' % self.user_id + \ No newline at end of file diff --git a/app/models/user_thumbnail.py b/app/models/user_thumbnail.py new file mode 100644 index 0000000..ec23456 --- /dev/null +++ b/app/models/user_thumbnail.py @@ -0,0 +1,22 @@ +from app.extensions import db + +class UserThumbnail(db.Model): + userid = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True) + full_contenthash = db.Column(db.String(512), nullable=True) + headshot_contenthash = db.Column(db.String(512), nullable=True) + updated_at = db.Column(db.DateTime, nullable=True) + + def __init__(self, userid, full_contenthash, headshot_contenthash, updated_at): + self.userid = userid + self.full_contenthash = full_contenthash + self.headshot_contenthash = headshot_contenthash + self.updated_at = updated_at + + def __repr__(self): + return "".format( + userid=self.userid, + full_contenthash=self.full_contenthash, + headshot_contenthash=self.headshot_contenthash, + updated_at=self.updated_at + ) + diff --git a/app/models/user_trade_items.py b/app/models/user_trade_items.py new file mode 100644 index 0000000..6af6013 --- /dev/null +++ b/app/models/user_trade_items.py @@ -0,0 +1,17 @@ +from app.extensions import db + +class UserTradeItem(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + tradeid = db.Column(db.BigInteger, nullable=False, index=True) + userid = db.Column(db.BigInteger, nullable=False, index=True) + user_asset_id = db.Column(db.BigInteger, db.ForeignKey("user_asset.id"), nullable=False) + + userasset = db.relationship("UserAsset", backref="tradeitems", lazy=True) + + def __init__(self, tradeid : int, userid : int, user_asset_id : int): + self.tradeid = tradeid + self.userid = userid + self.user_asset_id = user_asset_id + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/user_trades.py b/app/models/user_trades.py new file mode 100644 index 0000000..a8d52df --- /dev/null +++ b/app/models/user_trades.py @@ -0,0 +1,39 @@ +from app.extensions import db +from app.enums.TradeStatus import TradeStatus +from datetime import datetime, timedelta +class UserTrade(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + sender_userid = db.Column(db.BigInteger, nullable=False, index=True) + recipient_userid = db.Column(db.BigInteger, nullable=False, index=True) + + sender_userid_robux = db.Column(db.BigInteger, nullable=False, default=0) # Robux the sender is offering + recipient_userid_robux = db.Column(db.BigInteger, nullable=False, default=0) # Robux the recipient is offering + + status = db.Column(db.Enum(TradeStatus), nullable=False, default=TradeStatus.Pending) + + created_at = db.Column(db.DateTime, nullable=False) + updated_at = db.Column(db.DateTime, nullable=False) + expires_at = db.Column(db.DateTime, nullable=False) + + def __init__( + self, + sender_userid : int, + recipient_userid : int, + sender_userid_robux : int = 0, + recipient_userid_robux : int = 0, + status : TradeStatus = TradeStatus.Pending, + created_at : datetime = None, + updated_at : datetime = None, + expires_at : datetime = None + ): + self.sender_userid = sender_userid + self.recipient_userid = recipient_userid + self.sender_userid_robux = sender_userid_robux + self.recipient_userid_robux = recipient_userid_robux + self.status = status + self.created_at = created_at or datetime.utcnow() + self.updated_at = updated_at or datetime.utcnow() + self.expires_at = expires_at or datetime.utcnow() + timedelta(days=7) + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/app/models/user_transactions.py b/app/models/user_transactions.py new file mode 100644 index 0000000..3662f38 --- /dev/null +++ b/app/models/user_transactions.py @@ -0,0 +1,51 @@ +from app.extensions import db +from app.enums.TransactionType import TransactionType +from sqlalchemy import Enum +from datetime import datetime + +class UserTransaction(db.Model): + id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) + + reciever_id = db.Column(db.BigInteger, nullable=False, index=True) + reciever_type = db.Column(db.Integer, nullable=False, default=0) # 0 = User, 1 = Group + sender_id = db.Column(db.BigInteger, nullable=False, index=True) + sender_type = db.Column(db.Integer, nullable=False, default=0) # 0 = User, 1 = Group + + currency_amount = db.Column(db.BigInteger, nullable=False) + currency_type = db.Column(db.Integer, nullable=False, default=0) # 0 = Robux, 1 = Tix + + assetId = db.Column(db.BigInteger, nullable=True, default=None, index=True) + custom_text = db.Column(db.Text, nullable=True, default=None) + + transaction_type = db.Column(Enum(TransactionType), nullable=False, index=True) + created_at = db.Column(db.DateTime, nullable=False) + + def __init__( + self, + reciever_id, + reciever_type, + sender_id, + sender_type, + currency_amount, + currency_type, + transaction_type, + asset_id=None, + custom_text=None, + created_at=None + ): + self.reciever_id = reciever_id + self.reciever_type = reciever_type + self.sender_id = sender_id + self.sender_type = sender_type + self.currency_amount = currency_amount + self.currency_type = currency_type + self.transaction_type = transaction_type + self.assetId = asset_id + self.custom_text = custom_text + + if created_at is None: + self.created_at = datetime.utcnow() + else: + self.created_at = created_at + def __repr__(self): + return "" % self.id \ No newline at end of file diff --git a/app/models/userassets.py b/app/models/userassets.py new file mode 100644 index 0000000..448727a --- /dev/null +++ b/app/models/userassets.py @@ -0,0 +1,43 @@ +from app.extensions import db +from datetime import datetime + +class UserAsset(db.Model): + id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True) + userid = db.Column(db.BigInteger, nullable=False, index=True) + assetid = db.Column(db.BigInteger, db.ForeignKey("asset.id"), nullable=False, index=True) + + serial = db.Column(db.BigInteger, nullable=True, default=None) + price = db.Column(db.BigInteger, nullable=False, default=0) + + created = db.Column(db.DateTime, nullable=False) + updated = db.Column(db.DateTime, nullable=False) + + is_for_sale = db.Column(db.Boolean, nullable=False, default=False) + + asset = db.relationship("Asset", foreign_keys=[assetid], uselist=False, lazy="joined") + + def __init__( + self, + userid, + assetid, + + serial=None, + price=0 + ): + self.userid = userid + self.assetid = assetid + self.serial = serial + self.price = price + self.created = datetime.utcnow() + self.updated = datetime.utcnow() + + def __repr__(self): + return "".format( + id=self.id, + userid=self.userid, + assetid=self.assetid, + serial=self.serial, + price=self.price, + created=self.created, + updated=self.updated + ) \ No newline at end of file diff --git a/app/models/usereconomy.py b/app/models/usereconomy.py new file mode 100644 index 0000000..3aaffa0 --- /dev/null +++ b/app/models/usereconomy.py @@ -0,0 +1,16 @@ +from app.extensions import db + +class UserEconomy(db.Model): + userid = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True, unique=True, nullable=False ) + robux = db.Column(db.Integer, nullable=False, default=0) + tix = db.Column(db.Integer, nullable=False, default=0) + + user = db.relationship('User', backref=db.backref('economy', lazy=True, uselist=False), uselist=False) + + def __init__(self, userid, robux, tix): + self.userid = userid + self.robux = robux + self.tix = tix + + def __repr__(self): + return ''.format(self.userid, str(self.robux), str(self.tix)) \ No newline at end of file diff --git a/app/pages/403.html b/app/pages/403.html new file mode 100644 index 0000000..9bdf834 --- /dev/null +++ b/app/pages/403.html @@ -0,0 +1,12 @@ +{% extends '__layout__.html' %} +{% block title %}Not Found{% endblock %} +{% block head %} +{% endblock %} +{% block content %} +
+
+

403 Forbidden

+

You do not have the required permission to access this page, please contact an administrator if you think this is a mistake.

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/404.html b/app/pages/404.html new file mode 100644 index 0000000..887a1f9 --- /dev/null +++ b/app/pages/404.html @@ -0,0 +1,12 @@ +{% extends '__layout__.html' %} +{% block title %}Not Found{% endblock %} +{% block head %} +{% endblock %} +{% block content %} +
+
+

404 Not Found

+

This page does not exist or has been removed, we apologise for any inconvenience caused.

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/405.html b/app/pages/405.html new file mode 100644 index 0000000..56ce04c --- /dev/null +++ b/app/pages/405.html @@ -0,0 +1,12 @@ +{% extends '__layout__.html' %} +{% block title %}Method Not Allowed{% endblock %} +{% block head %} +{% endblock %} +{% block content %} +
+
+

405 Method Not Allowed

+

The method is not allowed for the requested URL.

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/500.html b/app/pages/500.html new file mode 100644 index 0000000..77a3e39 --- /dev/null +++ b/app/pages/500.html @@ -0,0 +1,25 @@ +{% extends '__layout__.html' %} +{% block title %}Not Found{% endblock %} +{% block head %} +{% endblock %} +{% block content %} +
+
+

500 Internal Server Error

+

Uh oh, something went wrong on our end, we apologise for any inconvenience caused.

+ {% if error %} +
+ + +
+ {% endif %} +

Route: {{page}} | Please report this error in our Discord Server

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/__layout__.html b/app/pages/__layout__.html new file mode 100644 index 0000000..c37fb43 --- /dev/null +++ b/app/pages/__layout__.html @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + {% if currentuser: %}{% endif %} + + + {% block title %}{% endblock %} - Syntax + + {% block head %}{% endblock %} + + +
+ {% block content %}{% endblock %} + {% if currentuser: %} + + {% endif %} + + \ No newline at end of file diff --git a/app/pages/about.html b/app/pages/about.html new file mode 100644 index 0000000..09c8fa2 --- /dev/null +++ b/app/pages/about.html @@ -0,0 +1,7 @@ +{% extends '__layout__.html' %} +{% block title %}About us{% endblock %} +{% block content %} +
+

About Syntax

+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/admin.py b/app/pages/admin/admin.py new file mode 100644 index 0000000..da30703 --- /dev/null +++ b/app/pages/admin/admin.py @@ -0,0 +1,2780 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from functools import wraps +from app.extensions import db, redis_controller, csrf, limiter +import uuid +import json +import base64 +import re +from datetime import datetime, timedelta, timezone +from app.enums.AssetType import AssetType +import hashlib +import os +import requests +import logging +import random +import time +import threading +import random +import string +from sqlalchemy import or_, and_, func +from config import Config +config = Config() + +from app.routes.asset import migrateAsset +from app.util import auth, assetversion, discord, redislock +from app.services import economy, gameserver_comm +from app.models.admin_permissions import AdminPermissions +from app.models.user import User +from app.models.gameservers import GameServer +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.fflag_group import FflagGroup +from app.models.fflag_value import FflagValue +from app.models.asset import Asset +from app.models.asset_version import AssetVersion +from app.models.asset_moderation_link import AssetModerationLink +from app.models.asset_thumbnail import AssetThumbnail +from app.models.place_icon import PlaceIcon +from app.models.past_usernames import PastUsername +from app.models.usereconomy import UserEconomy +from app.models.login_records import LoginRecord +from app.models.place import Place +from app.models.linked_discord import LinkedDiscord +from app.models.user_ban import UserBan +from app.models.giftcard_key import GiftcardKey +from app.models.invite_key import InviteKey +from app.models.groups import Group, GroupIcon +from app.models.userassets import UserAsset +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.user_hwid_log import UserHWIDLog +from app.models.game_session_log import GameSessionLog +from app.models.user_transactions import UserTransaction +from app.models.moderator_note import ModeratorNote +from app.models.universe import Universe +from app.models.limited_item_transfers import LimitedItemTransfer +from app.enums.GiftcardType import GiftcardType +from app.enums.BanType import BanType +from app.enums.TransactionType import TransactionType +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod +from app.routes.jobreporthandler import EvictPlayer +from app.routes.thumbnailer import TakeThumbnail, TakeUserThumbnail +from app.pages.admin.permissionsdefinition import PermissionsDefinition +from app.pages.messages.messages import CreateSystemMessage + +def GetCreatorOfAsset( AssetObj : Asset ) -> User | Group | None: + if AssetObj.creator_type == 0: + return User.query.filter_by(id=AssetObj.creator_id).first() + elif AssetObj.creator_type == 1: + return Group.query.filter_by(id=AssetObj.creator_id).first() + return None + +def AdminPermissionRequired(permission): + UserObj : User = auth.GetCurrentUser() + UserAdminPermission = AdminPermissions.query.filter_by(userid=UserObj.id, permission=permission).first() + if UserAdminPermission is None: + abort(403) + +def HasAdminPermission(permission) -> bool: + UserObj : User = auth.GetCurrentUser() + UserAdminPermission = AdminPermissions.query.filter_by(userid=UserObj.id, permission=permission).first() + if UserAdminPermission is None: + return False + return True + +def IsUserAnAdministrator( UserObj : User, AvoidCache : bool = False) -> bool: + if not AvoidCache: + CachedResult = redis_controller.get(f"IsUserAnAdministrator:Lookup:{UserObj.id}") + if CachedResult is not None: + try: + return CachedResult == "1" + except: + pass + isUserAdministrator = AdminPermissions.query.filter_by(userid=UserObj.id).first() is not None + redis_controller.set(f"IsUserAnAdministrator:Lookup:{UserObj.id}", int(isUserAdministrator), ex = 60) + + return isUserAdministrator + +def GetAmountOfPendingAssets( AvoidCache : bool = False ) -> int: + if not AvoidCache: + CachedResult = redis_controller.get("GetAmountOfPendingAssets:Lookup") + if CachedResult is not None: + try: + return int(CachedResult) + except: + pass + PendingAssetsCount = Asset.query.filter_by(moderation_status=1).count() + PlaceIcon.query.filter_by(moderation_status=1).count() + AssetThumbnail.query.filter_by(moderation_status=1).count() + GroupIcon.query.filter_by(moderation_status=1).count() + redis_controller.set("GetAmountOfPendingAssets:Lookup", str(PendingAssetsCount), ex = 10) + + return PendingAssetsCount + +def MustBeAdmin(f): + @wraps(f) + def decorated_function(*args, **kwargs): + if not auth.isAuthenticated(): + return redirect("/login") + UserObj : User = auth.GetCurrentUser() + UserAdminPermission = AdminPermissions.query.filter_by(userid=UserObj.id).first() + if UserAdminPermission is None: + return redirect("/home") + return f(*args, **kwargs) + return decorated_function + +def GetAdminPermissions(): + # Get admin permissions for the current user + # and returns them in a array + UserObj : User = auth.GetCurrentUser() + UserAdminPermissions = AdminPermissions.query.filter_by(userid=UserObj.id).all() + if UserAdminPermissions is None: + return [] + UserAdminPermissionsArray = [] + for UserAdminPermission in UserAdminPermissions: + UserAdminPermissionsArray.append(UserAdminPermission.permission) + return UserAdminPermissionsArray + +AdminRoute = Blueprint('admin', __name__, url_prefix='/admin') + +@AdminRoute.before_request +def before_request(): + if not auth.isAuthenticated(): + return redirect("/login") + AuthTokenInfo = auth.GetCurrentUser() + UserAdminPermission = AdminPermissions.query.filter_by(userid=int(AuthTokenInfo[0])).first() + if UserAdminPermission is None: + return redirect("/home") + +@AdminRoute.route('/', methods=['GET']) +def admin(): + userPermissions = [] + for permission in GetAdminPermissions(): + if permission in PermissionsDefinition: + userPermissions.append(PermissionsDefinition[permission]) + AuthenticatedUser : User = auth.GetCurrentUser() + stats = {} + stats['UsersPlaying'] = PlaceServerPlayer.query.count() + stats['PlaceServersCount'] = PlaceServer.query.count() + stats['UsersOnline'] = User.query.filter(User.lastonline > (datetime.utcnow() - timedelta(minutes=1))).count() + stats['UsersSignedUpToday'] = User.query.filter(User.created > (datetime.utcnow() - timedelta(days=1))).count() + stats['PendingAssets'] = Asset.query.filter_by(moderation_status=1).count() + PlaceIcon.query.filter_by(moderation_status=1).count() + AssetThumbnail.query.filter_by(moderation_status=1).count() + GroupIcon.query.filter_by(moderation_status=1).count() + stats['SystemTime'] = datetime.utcnow() + return render_template('admin/index.html', permissions = userPermissions, stats = stats, user = AuthenticatedUser) + +@AdminRoute.route('/gameservers', methods=['GET']) +def gameservers(): + AdminPermissionRequired('GameServerManager') + + gameServers = GameServer.query.all() + + return render_template('admin/gameservers/index.html', gameservers = gameServers) + +@AdminRoute.route('/gameservers/', methods=['GET']) +def gameservers_view(serverid): + AdminPermissionRequired('GameServerManager') + + gameServer : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if gameServer is None: + return redirect("/admin/gameservers") + + return render_template('admin/gameservers/view.html', gameserver = gameServer) + +@AdminRoute.route('/gameservers//delete', methods=['GET']) +def gameservers_delete(serverid): + AdminPermissionRequired('GameServerManager') + + gameServer : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if gameServer is None: + return redirect("/admin/gameservers") + return render_template("/admin/gameservers/delete.html", gameserver = gameServer) + +@AdminRoute.route('/gameservers//delete', methods=['POST']) +def gameservers_delete_post(serverid): + AdminPermissionRequired('GameServerManager') + + gameServer : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if gameServer is None: + return redirect("/admin/gameservers") + + db.session.delete(gameServer) + db.session.commit() + + return redirect("/admin/gameservers") + +@AdminRoute.route('/gameservers//edit', methods=['POST']) +def gameservers_edit(serverid): + AdminPermissionRequired('GameServerManager') + gameServer : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if gameServer is None: + return redirect("/admin/gameservers") + if request.form['name'] == "" or request.form['serverip'] == "" or request.form['serverport'] == "" or request.form['accesskey'] == "": + flash("Please fill in all fields", "danger") + return redirect("/admin/gameservers/" + serverid) + + gameServer.serverName = request.form['name'] + gameServer.serverIP = request.form['serverip'] + gameServer.serverPort = request.form['serverport'] + gameServer.accessKey = request.form['accesskey'] + gameServer.allowThumbnailGen = True if 'isThumbnailer' in request.form else False + gameServer.allowGameServerHost = True if 'isGameHoster' in request.form else False + db.session.commit() + + flash("Game server updated", "success") + return redirect("/admin/gameservers/" + serverid) + +@AdminRoute.route("/gameservers//refresh-accesskey", methods=['GET', 'POST']) +def gameservers_refresh_accesskey(serverid): + AdminPermissionRequired('GameServerManager') + GameServerObj : GameServer = GameServer.query.filter_by(serverId=serverid).first() + if GameServerObj is None: + return abort(404) + + if request.method == "GET": + return render_template("admin/gameservers/refresh_accesskey.html", gameserver = GameServerObj) + else: + NewAccessKey = ''.join(random.choices(string.ascii_letters + string.digits, k=random.randint(60, 90))) + req_response = gameserver_comm.perform_post( + TargetGameserver = GameServerObj, + Endpoint = "ResetAccessKeyAndRestart", + JSONData = { + "NewAccessKey": NewAccessKey + }, + RequestTimeout = 30 + ) + + if req_response.status_code != 200: + flash("Failed to send request to game server", "danger") + return redirect(f"/admin/gameservers/{serverid}") + + GameServerObj.accessKey = NewAccessKey + db.session.commit() + + flash("Access key reset and game server restarted", "success") + return redirect(f"/admin/gameservers/{serverid}") + +@AdminRoute.route('/gameservers/create', methods=['GET']) +def gameservers_create(): + AdminPermissionRequired('GameServerManager') + + return render_template('admin/gameservers/create.html') + +@AdminRoute.route('/gameservers/create', methods=['POST']) +def gameservers_create_post(): + AdminPermissionRequired('GameServerManager') + if request.form['name'] == "" or request.form['serverip'] == "" or request.form['serverport'] == "" or request.form['accesskey'] == "": + flash("Please fill in all fields", "danger") + return redirect("/admin/gameservers/create") + newServerID = str(uuid.uuid4()) + gameServer = GameServer( + serverId = newServerID, + serverName= request.form['name'], + serverIP = request.form['serverip'], + serverPort = request.form['serverport'], + accessKey = request.form['accesskey'], + allowThumbnailGen = True if 'isThumbnailer' in request.form else False, + allowGameServerHost = True if 'isGameHoster' in request.form else False + ) + db.session.add(gameServer) + db.session.commit() + + return redirect("/admin/gameservers/" + newServerID) + +@AdminRoute.route('/websitemessage', methods=['GET']) +def websitemessage(): + AdminPermissionRequired('UpdateWebsiteMessage') + + return render_template('admin/websitewidemsg.html', message = redis_controller.get("website_wide_message") or "") + +@AdminRoute.route('/websitemessage', methods=['POST']) +def websitemessage_post(): + AdminPermissionRequired('UpdateWebsiteMessage') + + redis_controller.set("website_wide_message", request.form['message']) + return redirect("/admin/websitemessage") + +@AdminRoute.route('/fflags', methods=['GET']) +def fflags(): + AdminPermissionRequired('ManageFFlags') + + return render_template('admin/fflagsettings/index.html', groups = FflagGroup.query.all()) + +@AdminRoute.route('/fflags/', methods=['GET']) +def fflags_view(groupid : int): + AdminPermissionRequired('ManageFFlags') + + FFlagGroupObj : FflagGroup = FflagGroup.query.filter_by(group_id=groupid).first() + if FFlagGroupObj is None: + return redirect("/admin/fflags") + PageNumber = max( request.args.get('page', default=1, type=int), 1 ) + SearchQuery = request.args.get('search', default=None, type=str) + GroupFlagsPagination = FflagValue.query.filter_by(group_id=groupid) + + if SearchQuery is not None: + GroupFlagsPagination = GroupFlagsPagination.filter(FflagValue.name.ilike(f"%{SearchQuery}%")) + + GroupFlagsPagination = GroupFlagsPagination.paginate( + page = PageNumber, + per_page = 50, + error_out = False + ) + return render_template('admin/fflagsettings/view.html', group = FFlagGroupObj, FFlagsLookupResults = GroupFlagsPagination, flagcount = GroupFlagsPagination.total, search = SearchQuery) + +@AdminRoute.route('/fflags//import', methods=['POST']) +def fflags_import(groupid : int): + from app.routes.fflagssettings import ClearCache + AdminPermissionRequired('ManageFFlags') + + group : FflagGroup = FflagGroup.query.filter_by(group_id=groupid).first() + if group is None: + return redirect("/admin/fflags") + + + if 'file' not in request.files: + flash("No file uploaded", "danger") + return redirect("/admin/fflags/" + groupid) + file = request.files['file'] + + if file.filename == '': + flash("Filename empty", "danger") + return redirect("/admin/fflags/" + groupid) + + try: + json.loads(file.read()) + except: + flash("Invalid JSON file", "danger") + return redirect("/admin/fflags/" + groupid) + + FflagValue.query.filter_by(group_id=groupid).delete() + db.session.commit() + + file.seek(0) + data = json.loads(file.read()) + for flag in data: + FlagName = flag + FlagValue = data[flag] + + FlagType = 1 + try: + if FlagValue.lower() == "true": + FlagValue = True + elif FlagValue.lower() == "false": + FlagValue = False + else: + raise Exception() + except: + try: + FlagValue = int(FlagValue) + FlagType = 2 + except: + FlagType = 3 + newFlag = FflagValue( + group_id = groupid, + name = FlagName, + flag_type= FlagType, + flag_value = base64.b64encode(str(FlagValue).encode('utf-8')).decode('utf-8') + ) + db.session.add(newFlag) + group.updated_at = datetime.utcnow() + db.session.commit() + ClearCache( groupid ) + flash("Flags imported", "success") + return redirect("/admin/fflags/" + groupid) + +@AdminRoute.route("/asset-copier", methods=['GET']) +def asset_copier(): + AdminPermissionRequired('CopyAssets') + return render_template('admin/assetcopier.html') + +@AdminRoute.route("/asset-copier", methods=['POST']) +def asset_copier_post(): + AdminPermissionRequired('CopyAssets') + AssetURL = request.form.get('asseturl') + if AssetURL is None: + flash("No URL provided", "danger") + return redirect("/admin/asset-copier") + if AssetURL == "": + flash("URL is empty", "danger") + return redirect("/admin/asset-copier") + AssetRegex = re.compile(r".com\/catalog\/(\d+)\/") + AssetMatch = AssetRegex.search(request.form.get("asseturl")) + if AssetMatch is None: + flash("Invalid asset URL", "error") + return redirect("/admin/asset-copier") + AssetID = AssetMatch.group(1) + # Check if asset exists + AssetObj = Asset.query.filter_by(roblox_asset_id=int(AssetID)).first() + if AssetObj is not None: + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + AuthenticatedUser = auth.GetAuthenticatedUser(request.cookies.get(".ROBLOSECURITY")) + AssetMigrationCooldown = redis_controller.get(f"asset_migration_cooldown_{str(AuthenticatedUser.id)}") + if AssetMigrationCooldown is not None and AuthenticatedUser.id != 1: + flash(f"You are copying assets too fast!", "danger") + return redirect("/admin/asset-copier") + redis_controller.set(f"asset_migration_cooldown_{str(AuthenticatedUser.id)}", "1", 20) + + # Migrate asset + NewAsset : Asset = migrateAsset(int(AssetID), forceMigration=False, allowedTypes=[2, 8, 11, 12, 17, 18, 19, 41, 42, 43, 44, 45, 46, 47], creatorId=1, keepRobloxId=False, migrateInfo=True) + if NewAsset is None: + flash("Failed to migrate asset", "danger") + return redirect("/admin/asset-copier") + TakeThumbnail(NewAsset.id) + return redirect(f"/admin/manage-assets/{str(NewAsset.id)}") + +def IsItemInReleasePool( AssetId : int ) -> bool: + return redis_controller.lrange("ItemReleasePool:Items", 0, -1).count(str(AssetId)) > 0 +def GetNextItemDropDateTime() -> datetime: + LastItemDropTimestamp : str | None = redis_controller.get("ItemReleasePool:LastDropTimestamp") + if LastItemDropTimestamp is None: + LastItemDropTimestamp = round(time.time()) + else: + try: + LastItemDropTimestamp = int(LastItemDropTimestamp) + except Exception as e: + logging.warn(f"Admin > GetNextItemDropDateTime: Exception raised while trying to convert to integer, {str(e)}") + LastItemDropTimestamp = round(time.time()) + RandomSeed = f"{LastItemDropTimestamp}-{config.FLASK_SESSION_KEY}" + random.seed( RandomSeed ) + NextDropDatetime = datetime.utcfromtimestamp( LastItemDropTimestamp + random.randint( 60 * 60 * 6, 60 * 60 * 20 ) ) + return NextDropDatetime + +def InsertItemIntoItemReleasePool( AssetObj : Asset, Name : str, Description : str, RobuxPrice : int = 0, TicketsPrice : int = 0, IsLimited : bool = False, IsLimitedUnique : bool = False, SerialCount : int | None = None, OffsaleAfter : timedelta | None = None ): + if IsItemInReleasePool( AssetObj.id ): + raise Exception("InsertItemIntoItemReleasePool: Attempted to insert item which is already inside item release pool") + if RobuxPrice < 0 or TicketsPrice < 0: + raise Exception("InsertItemIntoItemReleasePool: RobuxPrice and TicketsPrice cannot be a negative integer") + if IsLimitedUnique: + IsLimited = True + + ItemReleaseMetaData = json.dumps({ + "Name" : Name, + "Description" : Description, + "RobuxPrice" : RobuxPrice, + "TicketsPrice" : TicketsPrice, + "IsLimited" : IsLimited, + "IsLimitedUnique" : IsLimitedUnique, + "SerialCount": SerialCount, + "OffsaleAfter" : None if OffsaleAfter is None else OffsaleAfter.total_seconds() + }) + + redis_controller.set(f"ItemReleasePool:Item_Metadata:{AssetObj.id}", ItemReleaseMetaData) + redis_controller.rpush("ItemReleasePool:Items", str(AssetObj.id)) + logging.info(f"Inserted Item {AssetObj.id} into Item Release Pool") + + AssetObj.name = "Asset" + AssetObj.description = "" + AssetObj.price_robux = 0 + AssetObj.price_tix = 0 + AssetObj.is_limited = False + AssetObj.is_limited_unique = False + AssetObj.moderation_status = 2 # Hides the asset from people scraping every asset + + db.session.commit() + +@AdminRoute.route("/manage-assets/", methods=['GET']) +@AdminRoute.route("/manage-assets", methods=['GET']) +def manage_assets(assetid = None): + AdminPermissionRequired('ManageAsset') + if assetid is not None: + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]:#[1,2,3,4,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + CanManageItemReleasePool = HasAdminPermission("ManageItemReleases") + IsItemEligibleForItemReleasePool = AssetObj.is_for_sale is False and AssetObj.is_limited is False and AssetObj.sale_count == 0 + return render_template('admin/manageassets.html', asset = AssetObj, CanManageItemReleasePool = CanManageItemReleasePool, IsItemEligibleForItemReleasePool = IsItemEligibleForItemReleasePool) + return render_template('admin/manageassets.html') + +@AdminRoute.route("/manage-assets//insert-item-pool", methods=['GET']) +def insert_item_into_pool( assetid : int ): + AdminPermissionRequired('ManageAsset') + AdminPermissionRequired('ManageItemReleases') + + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]:#[1,2,3,4,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + + if IsItemInReleasePool(AssetObj.id): + flash("Item is already inside the item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + IsItemEligibleForItemReleasePool = AssetObj.is_for_sale is False and AssetObj.is_limited is False and AssetObj.sale_count == 0 + if not IsItemEligibleForItemReleasePool: + flash("Item is not eligible for item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + return render_template('admin/insertitemrelasepool.html', asset = AssetObj) + +@AdminRoute.route("/manage-assets//insert-item-pool", methods=['POST']) +def insert_item_into_pool_post( assetid : int ): + AdminPermissionRequired('ManageAsset') + AdminPermissionRequired('ManageItemReleases') + + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]:#[1,2,3,4,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + + if IsItemInReleasePool(AssetObj.id): + flash("Item is already inside the item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + IsItemEligibleForItemReleasePool = AssetObj.is_for_sale is False and AssetObj.is_limited is False and AssetObj.sale_count == 0 + if not IsItemEligibleForItemReleasePool: + flash("Item is not eligible for item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + AssetName = request.form.get('assetname', default=AssetObj.name, type=str) + AssetDescription = request.form.get('assetdescription', default=AssetObj.description, type=str) + AssetPriceRobux = request.form.get('assetpricerobux', default = None, type=int) + AssetPriceTickets = request.form.get('assetpricetix', default = None, type=int) + AssetSerialAmount = request.form.get('assetserialamount', default = None, type=int) + isLimited = request.form.get('isLimited') == "on" + isLimitedUnique = request.form.get('isLimitedUnique') == "on" + + if AssetName is None or AssetName == "": + flash("Asset name is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetDescription is None: + flash("Asset description is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + + if isLimitedUnique: + isLimited = True + if not HasAdminPermission("ModifyLimitedAssets") and isLimited: + flash("You do not have permission to create Limiteds", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetSerialAmount < 0: + flash("Asset serial amount cannot be negative", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetPriceRobux < 0 or AssetPriceRobux > 1000000: + flash("Asset Robux price must be in range ( 0 - 1000000)", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetPriceTickets < 0 or AssetPriceTickets > 10000000: + flash("Asset Tix price must be in range ( 0 - 10000000)", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + if AssetSerialAmount > 0 and not isLimitedUnique: + flash("Asset serial cannot be greater than 0 if not a limited unique", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + + AssetOffsaleHours = request.form.get('offsale-at-hours', default=None, type=int) + AssetOffsaleMinutes = request.form.get('offsale-at-minutes', default=None, type=int) + AssetOffsaleSeconds = request.form.get('offsale-at-seconds', default=None, type=int) + if AssetOffsaleHours is not None or AssetOffsaleMinutes is not None or AssetOffsaleSeconds is not None: + AssetOffsaleHours = AssetOffsaleHours or 0 + AssetOffsaleMinutes = AssetOffsaleMinutes or 0 + AssetOffsaleSeconds = AssetOffsaleSeconds or 0 + + OffsaleDelta = timedelta( + hours = AssetOffsaleHours, + minutes = AssetOffsaleMinutes, + seconds = AssetOffsaleSeconds + ) + if timedelta(minutes = 5) > OffsaleDelta: + flash("Offsale Time cannot be lesser than 5 minutes", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + else: + OffsaleDelta = None + + if OffsaleDelta and isLimited: + flash("Limited unique assets cannot have a offsale date", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}/insert-item-pool") + + InsertItemIntoItemReleasePool( + AssetObj = AssetObj, + Name = AssetName, + Description = AssetDescription, + RobuxPrice = AssetPriceRobux, + TicketsPrice = AssetPriceTickets, + IsLimited = isLimited, + IsLimitedUnique = isLimitedUnique, + SerialCount = AssetSerialAmount + ) + + flash("Successfully inserted item into item release pool", "success") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + +@AdminRoute.route("/item-release-pool", methods=["GET"]) +def item_release_pool_view(): + AdminPermissionRequired('ManageItemReleases') + PlannedItems = [] + AllAssetIds = redis_controller.lrange("ItemReleasePool:Items", 0, -1) + for AssetId in AllAssetIds: + AssetMetadata = redis_controller.get(f"ItemReleasePool:Item_Metadata:{AssetId}") + if AssetMetadata is None: + logging.warn(f"item_release_pool_view failed to get asset metadata for {AssetId}, removing it from list") + redis_controller.lrem("ItemReleasePool:Items", 0, AssetId) + return + try: + AssetMetadata = json.loads(AssetMetadata) + except Exception as e: + logging.warn(f"item_release_pool_view failed to parse json from item metadata {AssetId}, {str(e)}") + redis_controller.lrem("ItemReleasePool:Items", 0, AssetId) + return + + PlannedItems.append({ + "id": int(AssetId), + "name": AssetMetadata["Name"], + "description": AssetMetadata["Description"], + "robux_price": AssetMetadata["RobuxPrice"], + "tickets_price": AssetMetadata["TicketsPrice"], + "is_limited": AssetMetadata["IsLimited"], + "is_limited_unique": AssetMetadata["IsLimitedUnique"], + "serial_count": AssetMetadata["SerialCount"], + "offsale_after": AssetMetadata["OffsaleAfter"] + }) + + if HasAdminPermission("ViewItemReleasePoolDrop"): + NextItemDropDatetime = f"{GetNextItemDropDateTime()} UTC" + else: + NextItemDropDatetime = "You do not have permission to view the next Drop Time" + + return render_template("admin/itemreleasepool.html", PlannedItems=PlannedItems, NextItemDropDatetime=NextItemDropDatetime) + + +@AdminRoute.route("/manage-assets", methods=['POST']) +def manage_assets_post(): + AdminPermissionRequired('ManageAsset') + AssetID = request.form.get('assetid') + if AssetID is None: + flash("No asset ID provided", "danger") + return redirect("/admin/manage-assets") + if AssetID == "": + flash("Asset ID is empty", "danger") + return redirect("/admin/manage-assets") + AssetObj : Asset = Asset.query.filter_by(id=int(AssetID)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + return redirect(f"/admin/manage-assets/{str(AssetID)}") + +from app.extensions import scheduler +def SetAssetOffsaleJob( assetId : int ): + with scheduler.app.app_context(): + AssetObj : Asset = Asset.query.filter_by(id=assetId).first() + if AssetObj is None: + return + if AssetObj.offsale_at is None: + return + if AssetObj.offsale_at > datetime.utcnow() + timedelta(minutes=5): + logging.warning(f"Asset {str(AssetObj.id)} has a offsale date in the future more than 5 minutes diff, skipping") + return + AssetObj.is_for_sale = False + AssetObj.offsale_at = None + db.session.commit() + logging.info(f"Asset {str(AssetObj.id)} has been set offsale at {str(datetime.utcnow())}") + redis_controller.delete(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}") + +@AdminRoute.route("/manage-assets/", methods=['POST']) +def manage_assets_post_update(assetid): + AdminPermissionRequired('ManageAsset') + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: # Only allows assets under ROBLOX and UGC accounts + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]: + flash("Asset type is not supported", "danger") + return redirect("/admin/manage-assets") + if AssetObj.is_limited or AssetObj.is_limited_unique: + if not HasAdminPermission("ModifyLimitedAssets"): + flash("You do not have permission to modify limited assets", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if IsItemInReleasePool(AssetObj.id): + flash("You cannot edit an item which is in the item release pool", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + # Validate form + AssetName = request.form.get('assetname') + AssetDescription = request.form.get('assetdescription') + AssetPriceRobux = request.form.get('assetpricerobux') + AssetPriceTickets = request.form.get('assetpricetix') + AssetSerialAmount = request.form.get('assetserialamount') + + AssetOffsaleAt = request.form.get('offsale-at', None) # Year-Month-DayTHour:Minute + OffsaleTimezone = request.form.get('offsale-timezone', 0, int) # 0, 1, 2, ... or -1, -2, ... + if AssetOffsaleAt is not None and AssetOffsaleAt != "": + try: + AssetOffsaleAt = datetime.strptime(AssetOffsaleAt, "%Y-%m-%dT%H:%M") + # We need to convert the time to UTC + AssetOffsaleAt = AssetOffsaleAt.replace(tzinfo=timezone(timedelta(hours=OffsaleTimezone))) + AssetOffsaleAt = AssetOffsaleAt.astimezone(timezone.utc) + AssetOffsaleAt = datetime( + AssetOffsaleAt.year, + AssetOffsaleAt.month, + AssetOffsaleAt.day, + AssetOffsaleAt.hour, + AssetOffsaleAt.minute, + AssetOffsaleAt.second, + AssetOffsaleAt.microsecond + ) + except: + flash("Invalid offsale date", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if datetime.utcnow() > AssetOffsaleAt: + flash("Offsale date cannot be in the past", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + else: + AssetOffsaleAt = None + + isForSale = request.form.get('isForsale') == "on" + isLimited = request.form.get('isLimited') == "on" + isLimitedUnique = request.form.get('isLimitedUnique') == "on" + + if AssetName is None or AssetName == "": + flash("Asset name is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetDescription is None: + flash("Asset description is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetPriceRobux is None or AssetPriceRobux == "": + flash("Asset price is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + else: + try: + AssetPriceRobux = int(AssetPriceRobux) + except: + flash("Asset price is not a number", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetPriceTickets is None or AssetPriceTickets == "": + flash("Asset price is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + else: + try: + AssetPriceTickets = int(AssetPriceTickets) + except: + flash("Asset price is not a number", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetSerialAmount is None or AssetSerialAmount == "": + flash("Asset serial amount is empty", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + else: + try: + AssetSerialAmount = int(AssetSerialAmount) + except: + flash("Asset serial amount is not a number", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetSerialAmount < 0: + flash("Asset serial amount cannot be negative", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetPriceRobux < 0 or AssetPriceRobux > 1000000: + flash("Asset Robux price must be in range ( 0 - 1000000)", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetPriceTickets < 0 or AssetPriceTickets > 10000000: + flash("Asset Tix price must be in range ( 0 - 10000000)", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetSerialAmount > 0 and not isLimitedUnique: + flash("Asset serial cannot be greater than 0 if not a limited unique", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + AuthenticatedUser : User = auth.GetCurrentUser() + # Check for cooldown + AdministratorCooldown = redis_controller.get(f"Asset_AdministratorCooldown:{str(AuthenticatedUser.id)}") + if AdministratorCooldown is not None and AuthenticatedUser.id != 1: + flash("You are updating assets too quickly!", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + redis_controller.set(f"Asset_AdministratorCooldown:{str(AuthenticatedUser.id)}", "1", ex=20) + + if isLimitedUnique: + isLimited = True + + if isLimited: + if not HasAdminPermission("ModifyLimitedAssets"): + flash("You do not have permission to modify limited assets", "danger") + return redirect("/admin/manage-assets") + + if isLimitedUnique and AssetOffsaleAt is not None: + flash("Limited unique assets cannot have a offsale date", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if not isForSale and AssetOffsaleAt is not None: + flash("Asset cannot have a offsale date if not for sale", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + if AssetOffsaleAt is not None and AssetOffsaleAt < datetime.utcnow() + timedelta( minutes = 5 ): + flash("Offsale time cannot be shorter than 5 minutes", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + + # Update asset + AssetObj.name = AssetName + AssetObj.description = AssetDescription + AssetObj.price_robux = AssetPriceRobux + AssetObj.price_tix = AssetPriceTickets + AssetObj.serial_count = AssetSerialAmount + AssetObj.is_for_sale = isForSale + AssetObj.is_limited = isLimited + AssetObj.is_limited_unique = isLimitedUnique + AssetObj.updated_at = datetime.utcnow() + + if AssetOffsaleAt is not None and AssetObj.offsale_at != AssetOffsaleAt: + AssetObj.offsale_at = AssetOffsaleAt + if redis_controller.exists(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}"): + try: + scheduler.remove_job(redis_controller.get(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}")) + except: + logging.warning(f"Failed to remove job {redis_controller.get(f'APSchedulerTaskJobUUID:{str(AssetObj.id)}')}") + + APSchedulerTaskJobUUID = str(uuid.uuid4()) + scheduler.add_job(id=APSchedulerTaskJobUUID, func=SetAssetOffsaleJob, trigger='date', run_date=AssetOffsaleAt, args=[AssetObj.id]) + redis_controller.set(f"APSchedulerTaskJobUUID:{str(AssetObj.id)}", APSchedulerTaskJobUUID) + logging.info(f"Asset {str(AssetObj.id)} has been set to go offsale at {str(AssetOffsaleAt)}, job UUID: {APSchedulerTaskJobUUID}") + if not isForSale: + AssetObj.offsale_at = None + + db.session.commit() + flash("Asset updated!", "success") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + +@AdminRoute.route("/manage-assets//rerender", methods=['POST']) +def ReRenderAsset(assetid): + AdminPermissionRequired('ManageAsset') + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/manage-assets") + if (AssetObj.creator_id != 1 and AssetObj.creator_id != 2) and AssetObj.creator_type != 0: + flash("Asset is not a offical asset", "danger") + return redirect("/admin/manage-assets") + # Check for cooldown + AuthenticatedUser : User = auth.GetAuthenticatedUser(request.cookies.get(".ROBLOSECURITY")) + AdministratorCooldown = redis_controller.get(f"AssetRerender_AdministratorCooldown:{str(AuthenticatedUser.id)}") + if AdministratorCooldown is not None and AuthenticatedUser.id != 1: + flash("You are rerendering assets too quickly!", "danger") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + redis_controller.set(f"AssetRerender_AdministratorCooldown:{str(AuthenticatedUser.id)}", "1", ex=5) + + TakeThumbnail(AssetObj.id, bypassCooldown=True, bypassCache=True) + flash("Asset queued for rerendering", "success") + return redirect(f"/admin/manage-assets/{str(AssetObj.id)}") + +@AdminRoute.route("/pending-assets", methods=['GET']) +def PendingAssets(): + AdminPermissionRequired('AssetModeration') + + PendingAssets = [] + # Only get assets that have their moderation_status set to 1 + AssetsPendingList : list[Asset] = Asset.query.filter_by(moderation_status=1).order_by(Asset.created_at.desc()).all() + for AssetObj in AssetsPendingList: + if AssetObj.asset_type not in [AssetType.Image, AssetType.Audio]: # Only get images and audio + continue + LatestAssetVersion : AssetVersion = assetversion.GetLatestAssetVersion(AssetObj) + if LatestAssetVersion is None: + continue + ParentAsset : Asset = None + if AssetObj.asset_type == AssetType.Image: + # Try to get the parent asset + ParentAssetLink : AssetModerationLink = AssetModerationLink.query.filter_by(ChildAssetId=AssetObj.id).first() + if ParentAssetLink is not None: + ParentAsset = Asset.query.filter_by(id=ParentAssetLink.ParentAssetId).first() + PendingAssets.append({ + "Asset": AssetObj, + "AssetVersion": LatestAssetVersion, + "ParentAsset": ParentAsset + }) + if len(PendingAssets) >= 15: + break + PlaceIconPendingList : list[PlaceIcon] = PlaceIcon.query.filter_by(moderation_status=1).order_by(PlaceIcon.updated_at.desc()).all() + for PlaceIconObj in PlaceIconPendingList: + AssetObj : Asset = Asset.query.filter_by(id=PlaceIconObj.placeid).first() + if AssetObj is None: + continue + PendingAssets.append({ + "Asset": AssetObj, + "AssetVersion": PlaceIconObj, + "ParentAsset": None, + "PlaceIcon": True, + "AssetThumbnail": False + }) + if len(PendingAssets) >= 15: + break + + AssetThumbnailPendingList : list[AssetThumbnail] = AssetThumbnail.query.filter_by(moderation_status=1).order_by(AssetThumbnail.updated_at.desc()).all() + for AssetThumbnailObj in AssetThumbnailPendingList: + AssetObj : Asset = Asset.query.filter_by(id=AssetThumbnailObj.asset_id).first() + if AssetObj is None: + continue + PendingAssets.append({ + "Asset": AssetObj, + "AssetVersion": AssetThumbnailObj, + "ParentAsset": None, + "PlaceIcon": False, + "AssetThumbnail": True + }) + + GroupIconPendingList : list[GroupIcon] = GroupIcon.query.filter_by(moderation_status=1).order_by(GroupIcon.created_at.desc()).all() + for GroupIconObj in GroupIconPendingList: + GroupObj : Group = GroupIconObj.group + if GroupObj is None: + continue + PendingAssets.append({ + "Group": GroupObj, + "Creator": GroupIconObj.creator, + "Icon": GroupIconObj, + "ParentAsset": None, + "PlaceIcon": False, + "AssetThumbnail": False + }) + + return render_template("admin/assetmoderation.html", PendingAssets=PendingAssets) + +def LogModerationAction( + Actor : User, + isApproved : bool = True, + relatedAssets : list = [] +): + """ + relatedAssets = [ + { + "mainId": 1, + "relatedId": 2, + "type": "Image", + "view_name": "Awesome Shirt", + "source": "https://cdn.syntax.eco/", + "page": "https://www.syntax.eco/catalog/1/", + "creator": User | Group + } + ] + """ + fields = [] + for asset in relatedAssets: + fields.append({ + "name": asset["view_name"], + "value": f"Type: **{asset['type']}** - { 'AssetId' if asset['type'] != 'GroupIcon' else 'GroupId' }: **{asset['mainId']}** - Creator: [{ asset['creator'].username if isinstance(asset['creator'], User) else asset['creator'].name }](https://www.syntax.eco/{ 'users/'+str(asset['creator'].id)+'/profile' if isinstance(asset['creator'], User) else 'groups/'+str(asset['creator'].id)+'/' }){ ' - Related AssetId: **' + str(asset['relatedId']) +'**' if asset['relatedId'] else ''} - [View]({asset['page']}){ ' - [Source](' + asset['source'] +')' if asset['source'] else ''}", + "inline": False + }) + + embed = { + "type": "rich", + "title": f"{'Approved' if isApproved else 'Denied'} {str(len(relatedAssets))} Asset{'s' if len(relatedAssets) > 1 else ''}", + "description": "", + "color": 0x26ff00 if isApproved else 0xef0000, + "fields": fields, + "author": { + "name": Actor.username, + "icon_url": f"https://www.syntax.eco/Thumbs/Head.ashx?x=48&y=48&userId={str(Actor.id)}" + }, + "footer": { + "text": f"Syntax Asset Moderation Log" + }, + "timestamp": datetime.utcnow().isoformat() + } + def thread_func(): + try: + requests.post( + url = config.DISCORD_ADMIN_LOGS_WEBHOOK, + json = { + "username": "Syntax Asset Moderation Log", + "embeds": [embed], + "avatar_url": f"https://www.syntax.eco/Thumbs/Head.ashx?x=48&y=48&userId={str(Actor.id)}" + } + ) + except Exception as e: + logging.warn(f"Admin > LogModerationAction: Exception raised when sending webhook - {str(e)}") + threading.Thread(target=thread_func).start() + +@AdminRoute.route("/pending-assets//approve-group-icon", methods=['POST']) +@csrf.exempt +def ApprovePendingGroupIcon( content_hash ): + AdminPermissionRequired('AssetModeration') + + GroupIconObj : list[GroupIcon] = GroupIcon.query.filter_by(content_hash=content_hash).all() + if len(GroupIconObj) == 0: + return redirect("/admin/pending-assets") + for iconObj in GroupIconObj: + if iconObj.moderation_status != 1: + continue + LogModerationAction(auth.GetCurrentUser(), isApproved=True, relatedAssets=[{ + "mainId": iconObj.group.id, + "relatedId": None, + "type": "GroupIcon", + "view_name": iconObj.group.name, + "source": f"{config.CDN_URL}/{iconObj.content_hash}", + "page": f"https://www.syntax.eco/groups/{str(iconObj.group.id)}/", + "creator": iconObj.creator + }]) + iconObj.moderation_status = 0 + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//deny-group-icon", methods=['POST']) +@csrf.exempt +def DenyPendingGroupIcon( content_hash ): + AdminPermissionRequired('AssetModeration') + + GroupIconObj : list[GroupIcon] = GroupIcon.query.filter_by(content_hash=content_hash).all() + if len(GroupIconObj) == 0: + return redirect("/admin/pending-assets") + for iconObj in GroupIconObj: + if iconObj.moderation_status != 1: + continue + LogModerationAction(auth.GetCurrentUser(), isApproved=False, relatedAssets=[{ + "mainId": iconObj.group.id, + "relatedId": None, + "type": "GroupIcon", + "view_name": iconObj.group.name, + "source": f"{config.CDN_URL}/{iconObj.content_hash}", + "page": f"https://www.syntax.eco/groups/{str(iconObj.group.id)}/", + "creator": iconObj.creator + }]) + iconObj.moderation_status = 2 + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//approve", methods=['POST']) +@csrf.exempt +def ApprovePendingAsset(assetid): + AdminPermissionRequired('AssetModeration') + + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/pending-assets") + if AssetObj.moderation_status != 1: + flash("Asset is not pending", "danger") + return redirect("/admin/pending-assets") + if AssetObj.asset_type not in [AssetType.Image, AssetType.Audio, AssetType.Place]: + flash("Asset type is not supported", "danger") + return redirect("/admin/pending-assets") + RelatedAssets = [] + AssetObj.moderation_status = 0 + RelatedAssets.append({ + "mainId": AssetObj.id, + "relatedId": None, + "type": "Asset", + "view_name": AssetObj.name, + "source": None, + "page": f"https://www.syntax.eco/catalog/{str(AssetObj.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + # Get the AssetThumbnail + AssetThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).first() + if AssetThumbnailObj is not None: + if AssetThumbnailObj.moderation_status == 1: + AssetThumbnailObj.moderation_status = 0 + RelatedAssets.append({ + "mainId": AssetObj.id, + "relatedId": None, + "type": "AssetThumbnail", + "view_name": AssetObj.name, + "source": f"{config.CDN_URL}/{AssetThumbnailObj.content_hash}", + "page": f"https://www.syntax.eco/catalog/{str(AssetObj.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + + # Get the parent asset + ParentAssetLink : AssetModerationLink = AssetModerationLink.query.filter_by(ChildAssetId=AssetObj.id).first() + if ParentAssetLink is not None: + ParentAsset : Asset = Asset.query.filter_by(id=ParentAssetLink.ParentAssetId).first() + if ParentAsset is not None: + if ParentAsset.moderation_status == 1: + ParentAsset.moderation_status = 0 + RelatedAssets.append({ + "mainId": ParentAsset.id, + "relatedId": AssetObj.id, + "type": AssetObj.asset_type.name, + "view_name": ParentAsset.name, + "source": None, + "page": f"https://www.syntax.eco/catalog/{str(ParentAsset.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + # Get the AssetThumbnail + ParentAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=ParentAsset.id).first() + if ParentAssetThumbnail is not None: + if ParentAssetThumbnail.moderation_status == 1: + ParentAssetThumbnail.moderation_status = 0 + RelatedAssets.append({ + "mainId": ParentAsset.id, + "relatedId": AssetObj.id, + "type": "AssetThumbnail", + "view_name": ParentAsset.name, + "source": f"{config.CDN_URL}/{ParentAssetThumbnail.content_hash}", + "page": f"https://www.syntax.eco/catalog/{str(ParentAsset.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + LogModerationAction(auth.GetCurrentUser(), isApproved=True, relatedAssets=RelatedAssets) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//decline", methods=['POST']) +@csrf.exempt +def DeclinePendingAsset(assetid): + AdminPermissionRequired('AssetModeration') + + AssetObj : Asset = Asset.query.filter_by(id=int(assetid)).first() + if AssetObj is None: + flash("Asset does not exist", "danger") + return redirect("/admin/pending-assets") + if AssetObj.moderation_status != 1: + flash("Asset is not pending", "danger") + return redirect("/admin/pending-assets") + if AssetObj.asset_type not in [AssetType.Image, AssetType.Audio, AssetType.Place]: + flash("Asset type is not supported", "danger") + return redirect("/admin/pending-assets") + RelatedAssets = [] + AssetObj.moderation_status = 2 + RelatedAssets.append({ + "mainId": AssetObj.id, + "relatedId": None, + "type": "Asset", + "view_name": AssetObj.name, + "source": None, + "page": f"https://www.syntax.eco/catalog/{str(AssetObj.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + # Get the AssetThumbnail + AssetThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).first() + if AssetThumbnailObj is not None: + if AssetThumbnailObj.moderation_status == 1: + AssetThumbnailObj.moderation_status = 2 + RelatedAssets.append({ + "mainId": AssetObj.id, + "relatedId": None, + "type": "AssetThumbnail", + "view_name": AssetObj.name, + "source": f"{config.CDN_URL}/{AssetThumbnailObj.content_hash}", + "page": f"https://www.syntax.eco/catalog/{str(AssetObj.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + + # Get the parent asset + ParentAssetLink : AssetModerationLink = AssetModerationLink.query.filter_by(ChildAssetId=AssetObj.id).first() + if ParentAssetLink is not None: + ParentAsset : Asset = Asset.query.filter_by(id=ParentAssetLink.ParentAssetId).first() + if ParentAsset is not None: + if ParentAsset.moderation_status == 1: + ParentAsset.moderation_status = 2 + RelatedAssets.append({ + "mainId": ParentAsset.id, + "relatedId": AssetObj.id, + "type": AssetObj.asset_type.name, + "view_name": ParentAsset.name, + "source": None, + "page": f"https://www.syntax.eco/catalog/{str(ParentAsset.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + # Get the AssetThumbnail + ParentAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=ParentAsset.id).first() + if ParentAssetThumbnail is not None: + ParentAssetThumbnail.moderation_status = 2 + RelatedAssets.append({ + "mainId": ParentAsset.id, + "relatedId": AssetObj.id, + "type": "AssetThumbnail", + "view_name": ParentAsset.name, + "source": f"{config.CDN_URL}/{ParentAssetThumbnail.content_hash}", + "page": f"https://www.syntax.eco/catalog/{str(ParentAsset.id)}/", + "creator": GetCreatorOfAsset(AssetObj) + }) + LogModerationAction(auth.GetCurrentUser(), isApproved=False, relatedAssets=RelatedAssets) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//approve-icon", methods=['POST']) +@csrf.exempt +def ApprovePendingIcon(assetid): + AdminPermissionRequired('AssetModeration') + + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=int(assetid)).first() + if PlaceIconObj is None: + flash("Icon does not exist", "danger") + return redirect("/admin/pending-assets") + if PlaceIconObj.moderation_status != 1: + flash("Icon is not pending", "danger") + return redirect("/admin/pending-assets") + PlaceAssetObj : Asset = Asset.query.filter_by(id=PlaceIconObj.placeid).first() + if PlaceAssetObj is None: + flash("Icon does not exist", "danger") + return redirect("/admin/pending-assets") + if PlaceAssetObj.moderation_status == 1: + PlaceAssetObj.moderation_status = 0 + PlaceIconObj.moderation_status = 0 + LogModerationAction(auth.GetCurrentUser(), isApproved=True, relatedAssets=[{ + "mainId": PlaceAssetObj.id, + "relatedId": None, + "type": "PlaceIcon", + "view_name": PlaceAssetObj.name, + "source": f"{config.CDN_URL}/{PlaceIconObj.contenthash}", + "page": f"https://www.syntax.eco/games/{str(PlaceAssetObj.id)}/", + "creator": GetCreatorOfAsset(PlaceAssetObj) + }]) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//decline-icon", methods=['POST']) +@csrf.exempt +def DeclinePendingIcon(assetid): + AdminPermissionRequired('AssetModeration') + + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=int(assetid)).first() + if PlaceIconObj is None: + flash("Icon does not exist", "danger") + return redirect("/admin/pending-assets") + if PlaceIconObj.moderation_status != 1: + flash("Icon is not pending", "danger") + return redirect("/admin/pending-assets") + PlaceIconObj.moderation_status = 2 + LogModerationAction(auth.GetCurrentUser(), isApproved=False, relatedAssets=[{ + "mainId": PlaceIconObj.placeid, + "relatedId": None, + "type": "PlaceIcon", + "view_name": PlaceIconObj.asset.name, + "source": f"{config.CDN_URL}/{PlaceIconObj.contenthash}", + "page": f"https://www.syntax.eco/games/{str(PlaceIconObj.placeid)}/", + "creator": GetCreatorOfAsset(PlaceIconObj.asset) + }]) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//approve-thumbnail", methods=['POST']) +@csrf.exempt +def ApprovePendingThumbnail(thumbnailid : int): + AdminPermissionRequired('AssetModeration') + + AssetThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(id=int(thumbnailid)).first() + if AssetThumbnailObj is None: + flash("Thumbnail does not exist", "danger") + return redirect("/admin/pending-assets") + if AssetThumbnailObj.moderation_status != 1: + flash("Thumbnail is not pending", "danger") + return redirect("/admin/pending-assets") + AssetThumbnailObj.moderation_status = 0 + LogModerationAction(auth.GetCurrentUser(), isApproved=True, relatedAssets=[{ + "mainId": AssetThumbnailObj.asset_id, + "relatedId": None, + "type": "AssetThumbnail", + "view_name": AssetThumbnailObj.asset.name, + "source": f"{config.CDN_URL}/{AssetThumbnailObj.content_hash}", + "page": f"https://www.syntax.eco/catalog/{str(AssetThumbnailObj.asset_id)}/", + "creator": GetCreatorOfAsset(AssetThumbnailObj.asset) + }]) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/pending-assets//decline-thumbnail", methods=['POST']) +@csrf.exempt +def DeclinePendingThumbnail(thumbnailid : int): + AdminPermissionRequired('AssetModeration') + + AssetThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(id=int(thumbnailid)).first() + if AssetThumbnailObj is None: + flash("Thumbnail does not exist", "danger") + return redirect("/admin/pending-assets") + if AssetThumbnailObj.moderation_status != 1: + flash("Thumbnail is not pending", "danger") + return redirect("/admin/pending-assets") + AssetThumbnailObj.moderation_status = 2 + LogModerationAction(auth.GetCurrentUser(), isApproved=False, relatedAssets=[{ + "mainId": AssetThumbnailObj.asset_id, + "relatedId": None, + "type": "AssetThumbnail", + "view_name": AssetThumbnailObj.asset.name, + "source": f"{config.CDN_URL}/{AssetThumbnailObj.content_hash}", + "page": f"https://www.syntax.eco/catalog/{str(AssetThumbnailObj.asset_id)}/", + "creator": GetCreatorOfAsset(AssetThumbnailObj.asset) + }]) + db.session.commit() + return redirect("/admin/pending-assets") + +@AdminRoute.route("/manage-users", methods=['GET']) +def ManageUsers(): + AdminPermissionRequired('ManageUsers') + + query = request.args.get(key = "query", default = None, type = str) + page = request.args.get(key = "page", default = 1, type = int) + searchType = request.args.get(key = "searchType", default = "userid", type = str) # userid, username + orderBy = request.args.get(key = "orderBy", default = "userid", type = str) # userid, creation, lastonline, robux, tix + orderType = request.args.get(key = "orderType", default = "asc", type = str) # asc, desc + + if searchType not in ["userid", "username", "discordid"]: + searchType = "userid" + if orderBy not in ["userid", "creation", "lastonline", "robux", "tix"]: + orderBy = "userid" + if orderType not in ["asc", "desc"]: + orderType = "desc" + + if type(query) is not str: + query = None + + + def CreateUserInfo( userObj : User ): + userEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=userObj.id).first() + if userEconomyObj is None: + userEconomyObj = UserEconomy(userid=userObj.id) + db.session.add(userEconomyObj) + db.session.commit() + return { + "id": userObj.id, + "username": userObj.username, + "creation": userObj.created, + "lastonline": userObj.lastonline, + "robux": userEconomyObj.robux, + "tix": userEconomyObj.tix, + "accountstatus": userObj.accountstatus + } + + returnList = [] + + if query is not None: + if searchType == "userid": + userObject : list[User] = [User.query.filter_by(id=int(query)).first()] + elif searchType == "username": + userObject : list[User] = User.query.filter(User.username.ilike(f"%{query}%")).offset((page-1)*15).limit(15).all() + elif searchType == "discordid": + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=int(query)).first() + if LinkedDiscordObj is not None: + userObject = [User.query.filter_by(id=LinkedDiscordObj.user_id).first()] + else: + userObject = [] + + for userObj in userObject: + if userObj is None: + continue + if len(returnList) >= 15: + break + returnList.append(CreateUserInfo(userObj)) + else: + UserQuery = None + if orderBy == "userid": + UserQuery = User.id + elif orderBy == "creation": + UserQuery = User.created + elif orderBy == "lastonline": + UserQuery = User.lastonline + elif orderBy == "robux": + UserQuery = UserEconomy.robux + elif orderBy == "tix": + UserQuery = UserEconomy.tix + + if orderType == "asc": + UserQuery = UserQuery.asc() + elif orderType == "desc": + UserQuery = UserQuery.desc() + + # If we are ordering by robux or tix, we need to join the UserEconomy table and only select the userEconomy column for that user by selecting its id + if orderBy in ["robux", "tix"]: + UserQuery = User.query.join(UserEconomy, User.id == UserEconomy.userid).order_by(UserQuery) + else: + UserQuery = User.query.order_by(UserQuery) + + UserQuery = UserQuery.paginate(page=page, per_page=15, error_out=False) + for userObj in UserQuery.items: + returnList.append(CreateUserInfo(userObj)) + + isThereNextPage = False + if len(returnList) == 15: + isThereNextPage = True + + return render_template("admin/usermanage/search.html", + query=query, + searchType=searchType, + orderBy=orderBy, + orderType=orderType, + returnList=returnList, + isThereNextPage=isThereNextPage, + page=page + ) + +@AdminRoute.route("/manage-users", methods=['POST']) +def ManageUserQuery(): + AdminPermissionRequired('ManageUsers') + + query = request.form.get(key = "user-search-input", default=None, type=str) + searchType = request.form.get(key = "user-search-type", default = "userid", type = str) # userid, username + orderBy = request.form.get(key = "user-order-by", default = "userid", type = str) # userid, creation, lastonline, robux, tix + orderType = request.form.get(key = "user-order-direction", default = "asc", type = str) # asc, desc + + if searchType not in ["userid", "username", "discordid"]: + searchType = "userid" + if orderBy not in ["userid", "creation", "lastonline", "robux", "tix"]: + orderBy = "userid" + if orderType not in ["asc", "desc"]: + orderType = "desc" + + if searchType == "userid" and query != "": + try: + query = int(query) + except: + searchType = "username" + if query == "": + query = None + + if query is None: + return redirect(f"/admin/manage-users?searchType={searchType}&orderBy={orderBy}&orderType={orderType}") + else: + return redirect(f"/admin/manage-users?query={query}&searchType={searchType}&orderBy={orderBy}&orderType={orderType}") + +@AdminRoute.route("/manage-users/", methods=['GET']) +def ManageUser(userid : int): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + isAdministrator = AdminPermissions.query.filter_by(userid=userid).first() is not None + TotalVisits = 0 + UniverseList : list[Universe] = Universe.query.filter_by( creator_id = userObj.id, creator_type = 0 ).all() + for UniverseObj in UniverseList: + TotalVisits += UniverseObj.visit_count + UserEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=userObj.id).first() + if UserEconomyObj is None: + UserEconomyObj = UserEconomy(userid=userObj.id) + db.session.add(UserEconomyObj) + db.session.commit() + DescriptionLines = userObj.description.split("\n") + if HasAdminPermission('ViewLoginHistoryDetailed'): + LastLogin : LoginRecord = LoginRecord.query.filter_by(userid=userObj.id).order_by(LoginRecord.timestamp.desc()).first() + else: + LastLogin = None + + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=userObj.id).first() + if LinkedDiscordObj is not None: + DiscordUserInfo : discord.DiscordUserInfo = discord.DiscordUserInfo( + UserId = LinkedDiscordObj.discord_id, + Username = LinkedDiscordObj.discord_username, + Discriminator = LinkedDiscordObj.discord_discriminator, + AvatarHash = LinkedDiscordObj.discord_avatar, + ) + else: + DiscordUserInfo = None + + InviteKeyUsed : InviteKey = InviteKey.query.filter_by(used_by=userObj.id).first() + LastestUserBanObj : UserBan = UserBan.query.filter_by(userid=userObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + + return render_template( + "admin/usermanage/view.html", + userObj=userObj, + isAdministrator=isAdministrator, + TotalVisits=TotalVisits, + UserEconomyObj=UserEconomyObj, + DescriptionLines=DescriptionLines, + LastLogin=LastLogin, + LinkedDiscordObj=LinkedDiscordObj, + DiscordUserInfo=DiscordUserInfo, + LastestUserBanObj=LastestUserBanObj, + InviteKeyUsed=InviteKeyUsed, + HasAdminPermission=HasAdminPermission + ) + +@AdminRoute.route("/manage-users//manage-admin-permissions", methods=["GET"]) +def ManageUserAdminPermissions( userid : int ): + AdminPermissionRequired('ManageAdminPermissions') + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + return render_template( + "admin/usermanage/manage-admin-perms.html", + userObj = userObj + ) + +@AdminRoute.route("/manage-users//manage-admin-permissions/api/fetch-permissions", methods=["GET"]) +def ManageUserAdminPermissionsFetchPermissions( userid : int ): + AdminPermissionRequired('ManageAdminPermissions') + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + PermissionsData : list[dict] = [] + + for permission in PermissionsDefinition: + permissionData = PermissionsDefinition[permission] + PermissionsData.append({ + "internal_name": permission, + "friendly_name": permissionData["Name"], + "description": permissionData["Description"], + "is_hidden": permissionData["Hidden"] if "Hidden" in permissionData else False, + "hasPermission": AdminPermissions.query.filter_by(userid=userObj.id, permission=permission).first() is not None, + "bi_icon": permissionData["icon"] if "icon" in permissionData else None + }) + + data_response = make_response(json.dumps(PermissionsData)) + data_response.headers['Content-Type'] = 'application/json' + data_response.headers['Cache-Control'] = 'no-cache' + return data_response + +@AdminRoute.route("/manage-users//manage-admin-permissions/api/set-permissions", methods=["POST"]) +@limiter.limit("30/minute") +def ManageUserAdminPermissionsSetPermission( userid : int ): + AdminPermissionRequired('ManageAdminPermissions') + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + UpdatedPermissionData = request.json + if "permissions" not in UpdatedPermissionData: + return jsonify({ + "success": False, + "reason": f"Bad Data" + }), 200 + if "2fa_code" not in UpdatedPermissionData: + return jsonify({ + "success": False, + "reason": f"Bad Data" + }), 200 + + if not auth.Validate2FACode( AuthenticatedUser.id, str( UpdatedPermissionData["2fa_code"] ) ): + return jsonify({ + "success": False, + "reason": f"Invalid 2FA Code" + }), 200 + + for permission in UpdatedPermissionData["permissions"]: + if permission not in PermissionsDefinition: + return jsonify({ + "success": False, + "reason": f"Unknown permission {permission}" + }), 200 + + AdminPermissions.query.filter_by(userid=userObj.id).delete() + db.session.commit() + + for permission in UpdatedPermissionData["permissions"]: + db.session.add(AdminPermissions(userid=userObj.id, permission=permission)) + db.session.commit() + + return jsonify({ + "success": True, + "reason": "" + }), 200 + +@AdminRoute.route("/manage-users//ban-history", methods=['GET']) +def ManageUserBanHistory( userid : int ): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + UserBanHistory : list[UserBan] = UserBan.query.filter_by(userid=userObj.id).order_by(UserBan.id.desc()).paginate(page=1, per_page=10, error_out=False) + def GetBanAuthorName( banObj : UserBan ): + Author : User = User.query.filter_by(id=banObj.author_userid).first() + if Author is None: + return "Unknown" + return Author.username + return render_template( + "admin/usermanage/banhistory.html", + userObj = userObj, + BanHistory = UserBanHistory, + GetBanAuthorName = GetBanAuthorName + ) + +@AdminRoute.route("/manage-users//invite-keys", methods=['GET']) +def ManageUserInviteKeysview(userid : int): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + PageNumber = request.args.get( key = "page", default = 1, type = int ) + if PageNumber < 1: + PageNumber = 1 + + UserInviteKeys = InviteKey.query.filter_by(created_by = userObj.id).order_by(InviteKey.created_at.desc()).paginate( page = PageNumber, per_page = 15, error_out = False ) + return render_template( + "admin/usermanage/invitekeys.html", + userObj = userObj, + InviteKeys = UserInviteKeys + ) + +def LogUserBanAction( BannedUser : User, Actor : User, BanObject : UserBan ): + BanEmbed = { + "type": "rich", + "title": f"{BannedUser.username} ({BannedUser.id}) Banned", + "description": "", + "color": 0xef0000, + "fields": [ + { + "name": "Ban Author", + "value": f"[{Actor.username}]({config.BaseURL}/admin/manage-users/{Actor.id}) ({Actor.id})", + "inline": False + }, + { + "name": "Banned User", + "value": f"[{BannedUser.username}]({config.BaseURL}/admin/manage-users/{BannedUser.id}) ({BannedUser.id})", + "inline": False + }, + { + "name": "Ban Type", + "value": f"{BanObject.ban_type.name}", + "inline": False + }, + { + "name": "Ban Reason", + "value": f"{BanObject.reason}", + "inline": False + }, + { + "name": "Internal Reason", + "value": f"{BanObject.moderator_note}", + "inline": False + }, + { + "name": "Expiration", + "value": f"{BanObject.expires_at}", + "inline": False + } + ], + "author": { + "name": BannedUser.username, + "icon_url": f"https://www.syntax.eco/Thumbs/Head.ashx?x=48&y=48&userId={str(BannedUser.id)}" + }, + "footer": { + "text": "Syntax Asset Moderation Log" + }, + "timestamp": datetime.utcnow().isoformat() + } + def thread_func(): + try: + requests.post( + url = config.DISCORD_ADMIN_LOGS_WEBHOOK, + json = { + "username": "Syntax Moderation Log", + "embeds": [BanEmbed], + "avatar_url": f"https://www.syntax.eco/Thumbs/Head.ashx?x=48&y=48&userId={str(BannedUser.id)}" + } + ) + except Exception as e: + logging.warn(f"Admin > LogUserBanAction: Exception raised when sending webhook - {str(e)}") + + threading.Thread(target=thread_func).start() + +def LogUserUnbanAction( TargetUser : User, Actor : User, BanObj : UserBan ): + Author : User = User.query.filter_by( id = BanObj.author_userid ).first() + BanEmbed = { + "type": "rich", + "title": f"{TargetUser.username} ({TargetUser.id}) Unbanned", + "description": "", + "color": 0xfcdb03, + "fields": [ + { + "name": "Ban Author", + "value": f"[{Author.username}]({config.BaseURL}/admin/manage-users/{Author.id}) ({Author.id})", + "inline": False + }, + { + "name": "Unbanned By", + "value": f"[{Actor.username}]({config.BaseURL}/admin/manage-users/{Actor.id}) ({Actor.id})", + "inline": False + }, + { + "name": "Banned User", + "value": f"[{TargetUser.username}]({config.BaseURL}/admin/manage-users/{TargetUser.id}) ({TargetUser.id})", + "inline": False + }, + { + "name": "Ban Type", + "value": f"{BanObj.ban_type.name}", + "inline": False + }, + { + "name": "Ban Reason", + "value": f"{BanObj.reason}", + "inline": False + }, + { + "name": "Internal Reason", + "value": f"{BanObj.moderator_note}", + "inline": False + }, + { + "name": "Expiration", + "value": f"{BanObj.expires_at}", + "inline": False + } + ], + "author": { + "name": TargetUser.username, + "icon_url": f"https://www.syntax.eco/Thumbs/Head.ashx?x=48&y=48&userId={str(TargetUser.id)}" + }, + "footer": { + "text": "Syntax Asset Moderation Log" + }, + "timestamp": datetime.utcnow().isoformat() + } + + def thread_func(): + try: + requests.post( + url = config.DISCORD_ADMIN_LOGS_WEBHOOK, + json = { + "username": "Syntax Moderation Log", + "embeds": [BanEmbed], + "avatar_url": f"https://www.syntax.eco/Thumbs/Head.ashx?x=48&y=48&userId={str(TargetUser.id)}" + } + ) + except Exception as e: + logging.warn(f"Admin > LogUserUnbanAction: Exception raised when sending webhook - {str(e)}") + + threading.Thread(target=thread_func).start() + +@AdminRoute.route("/manage-users//ban-user", methods=['GET']) +def BanUser(userid : int): + AdminPermissionRequired('ManageUsers') + AdminPermissionRequired('BanUser') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + isAdministrator = AdminPermissions.query.filter_by(userid=userid).first() is not None # Check if they have at least one admin permission + if isAdministrator: + flash("You cannot ban an administrator", "danger") + return redirect(f"/admin/manage-users/{str(userid)}") + + LastestUserBanObj : UserBan = UserBan.query.filter_by(userid=userObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + + return render_template("admin/usermanage/ban.html", userObj=userObj, LastestUserBanObj=LastestUserBanObj) + +@AdminRoute.route("/manage-users//ban-user", methods=['POST']) +def BanUserPost(userid : int): + AdminPermissionRequired('ManageUsers') + AdminPermissionRequired('BanUser') + AuthenticatedUser : User = auth.GetCurrentUser() + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + isAdministrator = AdminPermissions.query.filter_by(userid=userid).first() is not None # Check if they have at least one admin permission + if isAdministrator: + flash("You cannot ban an administrator", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + LastestUserBanObj : UserBan = UserBan.query.filter_by(userid=userObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + if LastestUserBanObj is not None: + flash("User is already banned", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + BanTypeInput : int = request.form.get( key='ban_type', default=None, type=int ) + BanReason = request.form.get( key='ban_reason', default=None, type=str ) + ModeratorNote : str = request.form.get( key='ban_notes', default=None, type=str ) + TOTPCode : str = request.form.get( key='totp_code', default=None, type=str ) + + if BanTypeInput is None or BanTypeInput not in [0,1,2,3,4,5,6] or BanReason is None or ModeratorNote is None or TOTPCode is None: + flash("Invalid request", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + isValidTOTPCode = auth.Validate2FACode(AuthenticatedUser.id, TOTPCode) + if not isValidTOTPCode: + flash("Invalid 2FA code", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + BanTypeInput : BanType = BanType(BanTypeInput) + if len(BanReason) > 512: + flash("Ban reason is too long", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + if len(ModeratorNote) > 512: + flash("Moderator note is too long", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + if len(BanReason) < 10: + flash("Ban reason is too short", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + if len(ModeratorNote) < 10: + flash("Moderator note is too short", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + if redis_controller.exists(f"admin_ban_cooldown:{AuthenticatedUser.id}"): + flash("You are banning users too fast!", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + BanTypeToTimeLength = { + BanType.Warning : timedelta(days=0), + BanType.Day1Ban : timedelta(days=1), + BanType.Day3Ban : timedelta(days=3), + BanType.Day7Ban : timedelta(days=7), + BanType.Day14Ban : timedelta(days=14), + BanType.Day30Ban : timedelta(days=30) + } + ExpirationDate = None + if BanTypeInput in BanTypeToTimeLength: + ExpirationDate = datetime.utcnow() + BanTypeToTimeLength[BanTypeInput] + + BanObj : UserBan = UserBan( + userid = userObj.id, + author_userid = AuthenticatedUser.id, + ban_type = BanTypeInput, + reason = BanReason, + moderator_note = ModeratorNote, + expires_at = ExpirationDate + ) + db.session.add(BanObj) + if BanTypeInput == BanType.Deleted: + userObj.accountstatus = 3 + else: + userObj.accountstatus = 2 + db.session.commit() + LogUserBanAction( userObj, AuthenticatedUser, BanObj ) + redis_controller.set(f"admin_ban_cooldown:{AuthenticatedUser.id}", "1", ex = 15) + flash("User banned", "success") + + PlaceserverPlayerObj : PlaceServerPlayer = PlaceServerPlayer.query.filter_by( userid = userObj.id ).first() + if PlaceserverPlayerObj is not None: + CurrentPlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = PlaceserverPlayerObj.serveruuid).first() + EvictPlayer(CurrentPlaceServerObj, userObj.id) + + return redirect(f"/admin/manage-users/{str(userid)}") + +@AdminRoute.route("/manage-users//ban-user/revoke-ban", methods=["POST"]) +def UnbanUserPost( userid : int): + AdminPermissionRequired('ManageUsers') + AdminPermissionRequired('BanUser') + AuthenticatedUser : User = auth.GetCurrentUser() + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + banid = request.args.get( key = "banid", default = None, type = int ) + if banid is None: + flash("Invalid BanID", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + if userObj.accountstatus == 1: + flash("User does not have an active ban", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + if userObj.accountstatus == 4: + flash("User is forgotten, cannot revoke any bans", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + TargetBanObj : UserBan = UserBan.query.filter_by( id = banid, userid = userid ).first() + if TargetBanObj is None: + flash("Invalid BanID", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + if TargetBanObj.acknowledged: + flash("Ban has already been acknowledged by user", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + if redis_controller.exists(f"admin_unban_user_cooldown:{AuthenticatedUser.id}"): + flash("You are unbanning users too quickly!", "danger") + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + + LogUserUnbanAction( userObj, AuthenticatedUser, TargetBanObj ) + + db.session.delete(TargetBanObj) + userObj.accountstatus = 1 + db.session.commit() + redis_controller.set(f"admin_unban_user_cooldown:{AuthenticatedUser.id}", "1", ex=30) + + return redirect(f"/admin/manage-users/{str(userid)}/ban-user") + +@AdminRoute.route("/manage-users//login-history", methods=['GET']) +def ViewUserLoginHistory( userid : int ): + AdminPermissionRequired('ManageUsers') + AdminPermissionRequired('ViewUserLoginHistory') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + PageNumber = request.args.get(key = "page", default = 1, type = int) + if PageNumber < 1: + PageNumber = 1 + LoginHistory : list[LoginRecord] = LoginRecord.query.filter_by(userid=userObj.id).order_by(LoginRecord.timestamp.desc()).paginate(page=PageNumber, per_page=15, error_out=False) + + AllUniqueLoginRecords : list[LoginRecord] = LoginRecord.query.filter_by( userid = userObj.id ).order_by(LoginRecord.ip, LoginRecord.session_token).distinct(LoginRecord.ip, LoginRecord.session_token).all() + AlreadySearchedIPs : list[str] = [] + AlreadySearchedSessionTokens : list[str] = [] + AlternateAccounts : list[User] = [] + + for LoginRecordObj in AllUniqueLoginRecords: + if LoginRecordObj.ip in AlreadySearchedIPs and LoginRecordObj.session_token in AlreadySearchedSessionTokens: + continue + + AlreadySearchedIPs.append(LoginRecordObj.ip) + AlreadySearchedSessionTokens.append(LoginRecordObj.session_token) + + MatchingLoginRecords : list[LoginRecord] = LoginRecord.query.filter( + and_( + or_( + LoginRecord.ip == LoginRecordObj.ip, + LoginRecord.session_token == LoginRecordObj.session_token + ), + LoginRecord.userid != userObj.id + ) + ).distinct(LoginRecord.userid).all() + + for MatchingLoginRecord in MatchingLoginRecords: + MatchingUserObj : User = User.query.filter_by(id=MatchingLoginRecord.userid).first() + if MatchingUserObj is not None and MatchingUserObj not in AlternateAccounts and MatchingLoginRecord.session_token is not None: + MatchingUserObj.flags = { + "ipmatch" : MatchingLoginRecord.ip == LoginRecordObj.ip, + "sessiontokenmatch" : MatchingLoginRecord.session_token == LoginRecordObj.session_token, + "useragentmatch" : MatchingLoginRecord.useragent == LoginRecordObj.useragent, + "hwidmatch" : False + } + AlternateAccounts.append(MatchingUserObj) + elif MatchingUserObj is not None and MatchingUserObj in AlternateAccounts and MatchingLoginRecord.session_token is not None: + MatchingUserIndex = AlternateAccounts.index(MatchingUserObj) + AlternateAccounts[MatchingUserIndex].flags = { + "ipmatch" : MatchingLoginRecord.ip == LoginRecordObj.ip or AlternateAccounts[MatchingUserIndex].flags["ipmatch"], + "sessiontokenmatch" : MatchingLoginRecord.session_token == LoginRecordObj.session_token or AlternateAccounts[MatchingUserIndex].flags["sessiontokenmatch"], + "useragentmatch" : MatchingLoginRecord.useragent == LoginRecordObj.useragent or AlternateAccounts[MatchingUserIndex].flags["useragentmatch"], + "hwidmatch" : False + } + + AllUniqueHWIDLogs : list[UserHWIDLog] = UserHWIDLog.query.filter_by( user_id = userObj.id ).order_by(UserHWIDLog.hwid).distinct(UserHWIDLog.hwid).all() + for HWIDLog in AllUniqueHWIDLogs: + MatchingHWIDLogs : list[UserHWIDLog] = UserHWIDLog.query.filter( + and_( + UserHWIDLog.hwid == HWIDLog.hwid, + UserHWIDLog.user_id != userObj.id + ) + ).distinct(UserHWIDLog.user_id).all() + for MatchingHWIDLog in MatchingHWIDLogs: + MatchingUserObj : User = User.query.filter_by(id=MatchingHWIDLog.user_id).first() + if MatchingUserObj is not None and MatchingUserObj not in AlternateAccounts: + MatchingUserObj.flags = { + "ipmatch" : False, + "sessiontokenmatch" : False, + "useragentmatch" : False, + "hwidmatch" : True + } + AlternateAccounts.append(MatchingUserObj) + elif MatchingUserObj is not None and MatchingUserObj in AlternateAccounts: + MatchingUserIndex = AlternateAccounts.index(MatchingUserObj) + AlternateAccounts[MatchingUserIndex].flags["hwidmatch"] = True + + canViewSensitiveInfo = HasAdminPermission('ViewLoginHistoryDetailed') + + return render_template("admin/usermanage/loginhistory.html", userObj=userObj, LoginHistory=LoginHistory, AlternateAccounts=AlternateAccounts, canViewSensitiveInfo=canViewSensitiveInfo) + +@AdminRoute.route("/manage-users//game-sessions", methods=['GET']) +def ViewUserGameSessions( userid : int ): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + PageNumber = request.args.get(key = "page", default = 1, type = int) + if PageNumber < 1: + PageNumber = 1 + SessionsLogs : list[GameSessionLog] = GameSessionLog.query.filter_by( user_id = userObj.id ).order_by(GameSessionLog.joined_at.desc()).paginate(page=PageNumber, per_page=15, error_out=False) + + def get_place_name( place_id : int ): + PlaceAssetObj : Asset = Asset.query.filter_by( id = place_id ).first() + if PlaceAssetObj is None: + return "Unknown Place" + return PlaceAssetObj.name + + return render_template("admin/usermanage/gamesessions.html", userObj=userObj, GameSessions=SessionsLogs, get_place_name=get_place_name) + +CategoryToEnum = { + "purchase": TransactionType.Purchase, + "sale": TransactionType.Sale, + "group-payout": TransactionType.GroupPayout, + "stipends": TransactionType.BuildersClubStipend, +} + +@AdminRoute.route("/manage-users//transactions", methods=['GET']) +def ViewUserTransactions( userid : int ): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + CategoryArg = request.args.get('category', default="purchase", type=str) + if CategoryArg not in CategoryToEnum: + Category : TransactionType = TransactionType.Purchase + else: + Category : TransactionType = CategoryToEnum[CategoryArg] + + PageNumber = request.args.get('page', default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + + TransactionQuery = UserTransaction.query.filter_by( transaction_type = Category) + CategoryQueryDict = { + TransactionType.Purchase: lambda queryObj: queryObj.filter_by( + sender_id = userObj.id, + sender_type = 0 + ), + TransactionType.Sale: lambda queryObj: queryObj.filter_by( + reciever_id = userObj.id, + reciever_type = 0 + ), + TransactionType.GroupPayout: lambda queryObj: queryObj.filter_by( + reciever_id = userObj.id, + reciever_type = 0 + ), + TransactionType.BuildersClubStipend: lambda queryObj: queryObj.filter_by( + reciever_id = userObj.id, + reciever_type = 0 + ), + } + TransactionQuery = CategoryQueryDict[Category](TransactionQuery) + TransactionQuery = TransactionQuery.order_by(UserTransaction.created_at.desc()) + TransactionQuery = TransactionQuery.paginate( page=PageNumber, per_page=15, error_out=False ) + + FormattedTransactions = [] + for Transaction in TransactionQuery.items: + Transaction : UserTransaction = Transaction + TransactionInfo = {} + #TransactionInfo["source"] = { + # "id": Transaction.sender_id if Transaction.sender_id != userObj.id else Transaction.reciever_id, + # "type": Transaction.sender_type if Transaction.sender_id != userObj.id else Transaction.reciever_type, # VV I know this is bad but im too lazy to think of another way to do it + # "name": ( User.query.filter_by(id = Transaction.sender_id).first().username if Transaction.sender_type != 1 else Group.query.filter_by( id = Transaction.sender_id ) ) if Transaction.sender_id != userObj.id else ( User.query.filter_by(id = Transaction.reciever_id).first().username if Transaction.reciever_type != 1 else Group.query.filter_by( id = Transaction.reciever_id ) ), + #} + TransactionInfo["source"] = { + "id": Transaction.sender_id if Transaction.sender_id != userObj.id or Transaction.sender_type != 0 else Transaction.reciever_id, + "type": Transaction.sender_type if Transaction.sender_id != userObj.id or Transaction.sender_type != 0 else Transaction.reciever_type, # VV I know this is bad but im too lazy to think of another way to do it + "name": ( User.query.filter_by(id = Transaction.sender_id).first().username if Transaction.sender_type != 1 else Group.query.filter_by( id = Transaction.sender_id ).first().name ) if Transaction.sender_id != userObj.id or Transaction.sender_type != 0 else ( User.query.filter_by(id = Transaction.reciever_id).first().username if Transaction.reciever_type != 1 else Group.query.filter_by( id = Transaction.reciever_id ).first().name ), + } + TransactionInfo["currency_amount"] = Transaction.currency_amount + TransactionInfo["currency_type"] = Transaction.currency_type + TransactionInfo["created_at"] = Transaction.created_at.strftime("%d/%m/%Y %H:%M:%S UTC") + TransactionInfo["custom_text"] = Transaction.custom_text + if Transaction.assetId: + TransactionInfo["asset"] = { + "id": Transaction.assetId, + "name": Asset.query.filter_by(id = Transaction.assetId).first().name, + } + else: + TransactionInfo["asset"] = None + FormattedTransactions.append(TransactionInfo) + + return render_template( + "admin/usermanage/transactions.html", + userObj = userObj, + PageCategory = CategoryArg, + TransactionInfo = FormattedTransactions, + Pagination = TransactionQuery + ) + +@AdminRoute.route("/manage-users//moderator-notes", methods=['GET']) +def ViewUserModeratorNotes( userid : int ): + AdminPermissionRequired('ManageUsers') + + userObj : User = User.query.filter_by(id=userid).first() + if userObj is None: + return abort(404) + + PageNumber = request.args.get('page', default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + UserModeratorNotes : list[ModeratorNote] = ModeratorNote.query.filter_by( user_id = userObj.id ).order_by(ModeratorNote.created_at.desc()).paginate(page=PageNumber, per_page=15, error_out=False) + + def GetUserName( TargetUserId : int ) -> str: + return User.query.filter_by( id = TargetUserId ).first().username + + return render_template( + "admin/usermanage/moderatornotes.html", + userObj = userObj, + UserModeratorNotes = UserModeratorNotes, + GetUserName = GetUserName + ) + +from app.pages.admin.websitefeaturesdefinition import WebsiteFeaturesDefinition +from app.util.websiteFeatures import GetWebsiteFeature, SetWebsiteFeature + +@AdminRoute.route("/manage-website-features", methods=['GET']) +def ManageWebsiteFeatures(): + AdminPermissionRequired('ManageWebsiteFeatures') + + SitesFeaturesStatus = [] + for feature in WebsiteFeaturesDefinition: + SitesFeaturesStatus.append( { + "name" : feature["name"], + "enabled" : GetWebsiteFeature(feature["name"]), + }) + + return render_template("admin/websitefeatures.html", SitesFeaturesStatus=SitesFeaturesStatus) + +@AdminRoute.route("/manage-website-features//disable", methods=['POST']) +def ManageWebsiteFeaturesDisable(featurename : str): + AdminPermissionRequired('ManageWebsiteFeatures') + SetWebsiteFeature(featurename, False) + return redirect("/admin/manage-website-features") + +@AdminRoute.route("/manage-website-features//enable", methods=['POST']) +def ManageWebsiteFeaturesEnable(featurename : str): + AdminPermissionRequired('ManageWebsiteFeatures') + SetWebsiteFeature(featurename, True) + return redirect("/admin/manage-website-features") + +@AdminRoute.route("/create-user", methods=['GET']) +def CreateUser(): + AdminPermissionRequired('CreateUser') + return render_template("admin/createuser.html") + +@AdminRoute.route("/create-user", methods=['POST']) +@limiter.limit("5/minute") +def CreateUserPost(): + AdminPermissionRequired('CreateUser') + + Username = request.form.get( key='username', default=None, type=str ) + Password = request.form.get( key='password', default=None, type=str ) + + if Username is None or Password is None: + flash("Invalid request", "error") + return redirect("/admin/create-user") + + from app.pages.signup.signup import isUsernameAllowed + from app.util.textfilter import FilterText, TextNotAllowedException + from app.models.user_avatar import UserAvatar + import hashlib + from sqlalchemy import func + + isAllowed, Reason = isUsernameAllowed(Username) + if not isAllowed: + flash(Reason, "error") + return redirect("/admin/create-user") + + if len(Password) < 8: + flash("Password must be at least 8 characters long") + return redirect("/signup") + + try: + FilterText( Text = Username, ThrowException = True) + except TextNotAllowedException: + flash("Username is not friendly for Syntax") + return redirect("/signup") + + UserSignupLock = redislock.acquire_lock("UserSignupLock", acquire_timeout = 20, lock_timeout=1) + if not UserSignupLock: + flash("Failed to acquire user signup lock, please contact administrator", "error") + return redirect("/admin/create-user") + + user = User.query.filter(func.lower(User.username) == func.lower(Username)).first() + if user is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Username already taken", "error") + return redirect("/admin/create-user") + + pastUsername = PastUsername.query.filter(func.lower(PastUsername.username) == func.lower(Username)).first() + if pastUsername is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Username already taken", "error") + return redirect("/admin/create-user") + + hashedPassword = hashlib.sha512(Password.encode("utf-8")).hexdigest() + user = User(username=Username, password=hashedPassword, created=datetime.utcnow(), lastonline=datetime.utcnow()) + db.session.add(user) + db.session.commit() + userEconomy = UserEconomy(userid=user.id, robux=0, tix=10) + db.session.add(userEconomy) + userAvatar = UserAvatar(user_id=user.id) + db.session.add(userAvatar) + db.session.commit() + redislock.release_lock("UserSignupLock", UserSignupLock) + TakeUserThumbnail(user.id) + + flash("User created", "success") + return redirect("/admin/create-user") + +@AdminRoute.route("/create-giftcard", methods=['GET']) +def CreateGiftcard(): + AdminPermissionRequired('CreateGiftcard') + return render_template("admin/creategiftcard.html") + +@AdminRoute.route("/create-giftcard", methods=['POST']) +def CreateGiftcardPost(): + AdminPermissionRequired('CreateGiftcard') + + GiftcardTypeInput = request.form.get( key='giftcard-type', default=None, type=int ) + CopiesAmount = request.form.get( key='copies', default=None, type=int ) + GiftcardValue = request.form.get( key='value', default=None, type=int ) + + if GiftcardTypeInput is None or CopiesAmount is None or GiftcardValue is None: + flash("Invalid request", "error") + return redirect("/admin/create-giftcard") + + if CopiesAmount < 1 or CopiesAmount > 15: + flash("Copies value must be between 1 and 15", "error") + return redirect("/admin/create-giftcard") + + if GiftcardTypeInput not in [0,1,2,3,4]: + flash("Invalid giftcard type", "error") + return redirect("/admin/create-giftcard") + + if GiftcardValue < 1: + flash("Giftcard value must be at least 1", "error") + return redirect("/admin/create-giftcard") + + GiftcardTypeInput : GiftcardType = GiftcardType(GiftcardTypeInput) + + if GiftcardTypeInput in [GiftcardType.RobuxCurrency, GiftcardType.TixCurrency]: + if GiftcardValue > 10000: + flash("Giftcard value must be at most 10000", "error") + return redirect("/admin/create-giftcard") + elif GiftcardTypeInput in [GiftcardType.Outrageous_BuildersClub, GiftcardType.Turbo_BuildersClub]: + if GiftcardValue > 12: + flash("Giftcard value must be at most 12", "error") + return redirect("/admin/create-giftcard") + elif GiftcardTypeInput == GiftcardType.Item: + AssetObj : Asset = Asset.query.filter_by(id=GiftcardValue).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/create-giftcard") + if AssetObj.is_limited: + flash("Cannot create giftcard for limited items", "error") + return redirect("/admin/create-giftcard") + else: + flash("Invalid giftcard type", "error") + return redirect("/admin/create-giftcard") + + AuthenticatedUser : User = auth.GetCurrentUser() + + if redis_controller.get(f"GiftcardCooldown_{AuthenticatedUser.id}") is not None: + flash("You are on cooldown", "error") + return redirect("/admin/create-giftcard") + redis_controller.set(f"GiftcardCooldown_{AuthenticatedUser.id}", "1", ex=60) + + def GenerateCode(): + Code = "" + for i in range(0, 5): + Chunk = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5)) + Code += Chunk + if i != 4: + Code += "-" + return Code + + AllCodes = [] + + for i in range(0, CopiesAmount): + Code = GenerateCode() + GiftcardObj : GiftcardKey = GiftcardKey(key=Code, value=GiftcardValue, type=GiftcardTypeInput) + db.session.add(GiftcardObj) + AllCodes.append(Code) + db.session.commit() + + flash(f"Created {CopiesAmount} giftcards", "success") + return render_template("admin/creategiftcard.html", codes=AllCodes) + +@AdminRoute.route("/update-asset-file", methods=['GET']) +def UpdateAssetFile(): + AdminPermissionRequired('UpdateAssetFile') + return render_template("admin/updateassetfile.html") +from app.util import s3helper +@AdminRoute.route("/update-asset-file", methods=['POST']) +def UpdateAssetFilePost(): + AdminPermissionRequired('UpdateAssetFile') + AuthenticatedUser : User = auth.GetCurrentUser() + AssetID = request.form.get( key='asset-id', default=None, type=int ) + if AssetID is None: + flash("Invalid request", "error") + return redirect("/admin/update-asset-file") + + AssetObj : Asset = Asset.query.filter_by(id=AssetID).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/update-asset-file") + if AssetObj.creator_id not in [1,2] or AssetObj.creator_type != 0: + flash("Asset is not owned by Syntax", "error") + return redirect("/admin/update-asset-file") + if AssetObj.asset_type not in [AssetType(1), AssetType(2), AssetType(3), AssetType(4), AssetType(8), AssetType(11), AssetType(12), AssetType(17), AssetType(18), AssetType(19), AssetType(24), AssetType(27), AssetType(28), AssetType(29), AssetType(30), AssetType(31), AssetType(32), AssetType(41), AssetType(42), AssetType(43), AssetType(44), AssetType(45), AssetType(46), AssetType(47), AssetType(57), AssetType(58)]: + if AuthenticatedUser.id != 1: + flash("You are not allowed to update this type of asset", "error") + return redirect("/admin/update-asset-file") + + if 'file' not in request.files: + flash("No file uploaded", "error") + return redirect("/admin/update-asset-file") + + AssetFile = request.files['file'] + if AssetFile.filename == '': + flash("No file uploaded", "error") + return redirect("/admin/update-asset-file") + + AssetFile.seek(0) + AssetFileContent = AssetFile.read() + AssetFileHash = hashlib.sha512(AssetFileContent).hexdigest() + + from app.util.assetvalidation import ValidateClothingImage, ValidatePlaceFile + + if AssetObj.asset_type == AssetType.Image: + isAllowed = ValidateClothingImage( AssetFile, verifyResolution=False) + if not isAllowed: + flash("Invalid image", "error") + return redirect("/admin/update-asset-file") + else: + isValidPlaceFile = ValidatePlaceFile( AssetFile) + if type(isValidPlaceFile) is str: + flash(f"Validation Failed: {isValidPlaceFile}", "error") + return redirect("/admin/update-asset-file") + + if not s3helper.DoesKeyExist(AssetFileHash): + s3helper.UploadBytesToS3(AssetFileContent, AssetFileHash) + + NewAssetVersion : AssetVersion = assetversion.CreateNewAssetVersion(AssetObj, AssetFileHash) + AssetObj.updated_at = datetime.utcnow() + db.session.commit() + + flash("Asset file updated", "success") + return redirect("/admin/update-asset-file") + +@AdminRoute.route("/copy-bundle", methods=['GET']) +def CopyBundle(): + AdminPermissionRequired('CopyBundle') + return render_template("admin/bundlecopier.html") + +@AdminRoute.route("/copy-bundle", methods=['POST']) +def CopyBundlePost(): + AdminPermissionRequired('CopyBundle') + + BundleID = request.form.get( key='bundle-id', default=None, type=int ) + if BundleID is None: + flash("Invalid request", "error") + return redirect("/admin/copy-bundle") + + from app.routes.asset import MigrateBundle, MigrateBundleException + try: + NewBundle : Asset = MigrateBundle(BundleID) + except MigrateBundleException as e: + flash(e.message, "error") + return redirect("/admin/copy-bundle") + except Exception as e: + flash(f"An error occured, {str(e)}", "error") + return redirect("/admin/copy-bundle") + + return redirect(f"/admin/manage-assets/{str(NewBundle.id)}") + +@AdminRoute.route("/create-asset", methods=['GET']) +def CreateAsset(): + AdminPermissionRequired('CreateAsset') + return render_template("admin/createasset.html") + +@AdminRoute.route("/create-asset", methods=['POST']) +def CreateAssetPost(): + AdminPermissionRequired('CreateAsset') + + AssetTypeInput = request.form.get( key='asset-type', default=None, type=int ) + AssetName = request.form.get( key='asset-name', default=None, type=str ) + AssetFile = request.files.get(key='file', default=None) + + if AssetTypeInput is None or AssetName is None or AssetFile is None: + flash("Invalid request", "error") + return redirect("/admin/create-asset") + + if AssetTypeInput not in [8,17,18,19,41,42,43,44,45,46,47,62]: + flash("Invalid asset type", "error") + return redirect("/admin/create-asset") + + if AssetName == "": + flash("Asset name cannot be empty", "error") + return redirect("/admin/create-asset") + if len(AssetName) > 64: + flash("Asset name is too long", "error") + return redirect("/admin/create-asset") + + if AssetFile.content_length > 1024*1024*5: + flash("File is too big", "error") + return redirect("/admin/create-asset") + + from app.util.assetvalidation import ValidatePlaceFile + if AssetTypeInput not in [62]: + isValidBinaryFile = ValidatePlaceFile( AssetFile ) + if isValidBinaryFile != True: + flash(f"Validation Failed: {isValidBinaryFile}", "error") + return redirect("/admin/create-asset") + + AssetTypeInput : AssetType = AssetType(AssetTypeInput) + + NewAssetObj : Asset = Asset( + name = AssetName, + creator_id = 1, + creator_type = 0, + asset_type = AssetTypeInput, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + description = "", + moderation_status = 0, + asset_genre = 1 + ) + db.session.add(NewAssetObj) + db.session.commit() + + AssetFile.seek(0) + AssetFileContent = AssetFile.read() + AssetFileHash = hashlib.sha512(AssetFileContent).hexdigest() + s3helper.UploadBytesToS3(AssetFileContent, AssetFileHash) + NewAssetVersion : AssetVersion = assetversion.CreateNewAssetVersion(NewAssetObj, AssetFileHash) + + return redirect(f"/admin/manage-assets/{str(NewAssetObj.id)}") + +@AdminRoute.route("/moderate-asset", methods=['GET']) +def ModerateAsset(): + AdminPermissionRequired('ModerateAsset') + return render_template("admin/moderateUGC.html") + +@AdminRoute.route("/moderate-asset/", methods=['GET']) +def ModerateAssetView( assetid : int ): + AdminPermissionRequired('ModerateAsset') + + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.creator_id in [1] and AssetObj.creator_type == 0: + if not HasAdminPermission("ManageAsset"): + flash("You are not allowed to manage a Admin owned asset", "error") + return redirect("/admin/moderate-asset") + + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=assetid).order_by(AssetThumbnail.id.desc()).all() + AllAssetVersions : list[AssetVersion] = AssetVersion.query.filter_by(asset_id=assetid).order_by(AssetVersion.id.desc()).all() + RelatedAssetsLink : list[AssetModerationLink] = AssetModerationLink.query.filter(or_(AssetModerationLink.ParentAssetId == AssetObj.id, AssetModerationLink.ChildAssetId == AssetObj.id)).all() + if AssetObj.creator_type == 0: + CreatorObj : User = User.query.filter_by(id=AssetObj.creator_id).first() + else: + CreatorObj : Group = Group.query.filter_by(id=AssetObj.creator_id).first() + + RelatedAssets : list[Asset] = [] + for assetlink in RelatedAssetsLink: + if assetlink.ParentAssetId == AssetObj.id: + RelatedAssets.append(assetlink.ChildAsset) + else: + RelatedAssets.append(assetlink.ParentAsset) + + return render_template( + "admin/moderateUGC.html", + AssetObj=AssetObj, + AllAssetThumbnails=AllAssetThumbnails, + AllAssetVersions=AllAssetVersions, + CreatorObj=CreatorObj, + RelatedAssets=RelatedAssets + ) +StatusToColor = { + 0 : { + "color" : 0x0ef05d, + "name" : "Approved" + }, + 1 : { + "color" : 0xffc107, + "name" : "Pending Review" + }, + 2 : { + "color" : 0xff0000, + "name" : "Deleted" + } +} + +def LogAssetModerationAction( Actor : User, AssetObj : Asset ): + def thread_func(): + EmbedObj = { + "type": "rich", + "title": "Asset Moderation", + "description": f"Asset [{AssetObj.id}](https://www.syntax.eco/admin/moderate-asset/{AssetObj.id}) moderation status has been updated by **{Actor.username}** ({Actor.id})", + "color": StatusToColor[AssetObj.moderation_status]["color"], + "fields": [ + { + "name": "Asset Type", + "value": AssetObj.asset_type.name, + "inline": False + }, + { + "name": "Asset Moderation Status", + "value": StatusToColor[AssetObj.moderation_status]["name"], + "inline": False + } + ], + "author": { + "name": Actor.username, + "icon_url": f"https://www.syntax.eco/Thumbs/Head.ashx?x=48&y=48&userId={str(Actor.id)}" + }, + "footer": { + "text": "Syntax Asset Moderation Log" + }, + "timestamp": datetime.utcnow().isoformat() + } + + try: + requests.post( + url = config.DISCORD_ADMIN_LOGS_WEBHOOK, + json = { + "username": "Syntax Asset Moderation Log", + "embeds" : [EmbedObj], + "avatar_url": f"https://www.syntax.eco/Thumbs/Head.ashx?x=48&y=48&userId={str(Actor.id)}" + } + ) + except Exception as e: + logging.warn(f"Admin > LogAssetModerationAction: Exception raised when sending webhook - {str(e)}") + threading.Thread(target=thread_func).start() + +@AdminRoute.route("/moderate-asset//quick-delete", methods=['POST']) +def ModerateAssetQuickDelete( assetid : int ): + AdminPermissionRequired('ModerateAsset') + + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.creator_id in [1] and AssetObj.creator_type == 0: + if not HasAdminPermission("ManageAsset"): + flash("You are not allowed to manage a Admin owned asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.moderation_status == 2: + flash("Asset is already deleted", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + AuthenticatedUser : User = auth.GetCurrentUser() + if redis_controller.exists(f"ModerateAssetCooldown_{AuthenticatedUser.id}") and AuthenticatedUser.id != 1: + flash("You are on cooldown", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + redis_controller.set(f"ModerateAssetCooldown_{AuthenticatedUser.id}", "1", ex=20) + + def ContentDeleteAssetObj( AssetObj : Asset ): + AssetObj.moderation_status = 2 # Deleted + AssetObj.name = f"[ Content Deleted {AssetObj.id} ]" + AssetObj.description = "" + AssetObj.updated_at = datetime.utcnow() + AssetObj.is_for_sale = False + + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).order_by(AssetThumbnail.id.desc()).all() + + for assetthumbnail in AllAssetThumbnails: + assetthumbnail.moderation_status = 2 + assetthumbnail.updated_at = datetime.utcnow() + + if AssetObj.asset_type == AssetType.Place: + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetObj.id).first() + if PlaceIconObj is not None: + PlaceIconObj.moderation_status = 2 + PlaceIconObj.updated_at = datetime.utcnow() + db.session.commit() + + ContentDeleteAssetObj(AssetObj) + RelatedAssetsLink : list[AssetModerationLink] = AssetModerationLink.query.filter(or_(AssetModerationLink.ParentAssetId == AssetObj.id, AssetModerationLink.ChildAssetId == AssetObj.id)).all() + for assetlink in RelatedAssetsLink: + if assetlink.ParentAssetId == AssetObj.id: + ContentDeleteAssetObj(assetlink.ChildAsset) + flash(f"Asset [{assetlink.ChildAssetId}] deleted as it was linked.", "success") + else: + ContentDeleteAssetObj(assetlink.ParentAsset) + flash(f"Asset [{assetlink.ParentAssetId}] deleted as it was linked.", "success") + + flash("Asset Content deleted", "success") + LogAssetModerationAction(AuthenticatedUser, AssetObj) + return redirect(f"/admin/moderate-asset/{str(assetid)}") + +@AdminRoute.route("/moderate-asset//quick-approve", methods=['POST']) +def ModerateAssetQuickApporve( assetid : int ): + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.creator_id in [1] and AssetObj.creator_type == 0: + if not HasAdminPermission("ManageAsset"): + flash("You are not allowed to manage a Admin owned asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.moderation_status == 0: + flash("Asset is already approved", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + + AuthenticatedUser : User = auth.GetCurrentUser() + if redis_controller.exists(f"ModerateAssetCooldown_{AuthenticatedUser.id}") and AuthenticatedUser.id != 1: + flash("You are on cooldown", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + redis_controller.set(f"ModerateAssetCooldown_{AuthenticatedUser.id}", "1", ex=20) + + def AllowContentAssetObj( AssetObj : Asset ): + AssetObj.moderation_status = 0 + AssetObj.updated_at = datetime.utcnow() + + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).order_by(AssetThumbnail.id.desc()).all() + for assetthumbnail in AllAssetThumbnails: + assetthumbnail.moderation_status = 0 + assetthumbnail.updated_at = datetime.utcnow() + + if AssetObj.asset_type == AssetType.Place: + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetObj.id).first() + if PlaceIconObj is not None: + PlaceIconObj.moderation_status = 0 + PlaceIconObj.updated_at = datetime.utcnow() + db.session.commit() + + AllowContentAssetObj(AssetObj) + RelatedAssetsLink : list[AssetModerationLink] = AssetModerationLink.query.filter(or_(AssetModerationLink.ParentAssetId == AssetObj.id, AssetModerationLink.ChildAssetId == AssetObj.id)).all() + for assetlink in RelatedAssetsLink: + if assetlink.ParentAssetId == AssetObj.id: + AllowContentAssetObj(assetlink.ChildAsset) + flash(f"Asset [{assetlink.ChildAssetId}] approved as it was linked.", "success") + else: + AllowContentAssetObj(assetlink.ParentAsset) + flash(f"Asset [{assetlink.ParentAssetId}] approved as it was linked.", "success") + + flash("Asset approved", "success") + LogAssetModerationAction(AuthenticatedUser, AssetObj) + return redirect(f"/admin/moderate-asset/{str(assetid)}") + +@AdminRoute.route("/moderate-asset//quick-pending", methods=['POST']) +def ModerateAssetQuickPending( assetid : int ): + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + flash("Invalid asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.creator_id in [1] and AssetObj.creator_type == 0: + if not HasAdminPermission("ManageAsset"): + flash("You are not allowed to manage a Admin owned asset", "error") + return redirect("/admin/moderate-asset") + if AssetObj.moderation_status == 1: + flash("Asset is already pending", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + AuthenticatedUser : User = auth.GetCurrentUser() + if redis_controller.exists(f"ModerateAssetCooldown_{AuthenticatedUser.id}") and AuthenticatedUser.id != 1: + flash("You are on cooldown", "error") + return redirect(f"/admin/moderate-asset/{str(assetid)}") + redis_controller.set(f"ModerateAssetCooldown_{AuthenticatedUser.id}", "1", ex=20) + + def PendingContentAssetObj( AssetObj : Asset ): + AssetObj.moderation_status = 1 + AssetObj.updated_at = datetime.utcnow() + + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=AssetObj.id).order_by(AssetThumbnail.id.desc()).all() + for assetthumbnail in AllAssetThumbnails: + assetthumbnail.moderation_status = 1 + assetthumbnail.updated_at = datetime.utcnow() + + if AssetObj.asset_type == AssetType.Place: + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetObj.id).first() + if PlaceIconObj is not None: + PlaceIconObj.moderation_status = 1 + PlaceIconObj.updated_at = datetime.utcnow() + db.session.commit() + + PendingContentAssetObj(AssetObj) + RelatedAssetsLink : list[AssetModerationLink] = AssetModerationLink.query.filter(or_(AssetModerationLink.ParentAssetId == AssetObj.id, AssetModerationLink.ChildAssetId == AssetObj.id)).all() + for assetlink in RelatedAssetsLink: + if assetlink.ParentAssetId == AssetObj.id: + PendingContentAssetObj(assetlink.ChildAsset) + flash(f"Asset [{assetlink.ChildAssetId}] pending as it was linked.", "success") + else: + PendingContentAssetObj(assetlink.ParentAsset) + flash(f"Asset [{assetlink.ParentAssetId}] pending as it was linked.", "success") + + flash("Asset set to pending", "success") + LogAssetModerationAction(AuthenticatedUser, AssetObj) + return redirect(f"/admin/moderate-asset/{str(assetid)}") + +@AdminRoute.route("/moderate-asset", methods=['POST']) +def ModerateAssetSearch(): + AdminPermissionRequired('ModerateAsset') + + AssetID = request.form.get( key='asset-id', default=None, type=int ) + if AssetID is None: + flash("Invalid request", "error") + return redirect("/admin/moderate-asset") + if AssetID < 0: + flash("Invalid request", "error") + return redirect("/admin/moderate-asset") + return redirect(f"/admin/moderate-asset/{str(AssetID)}") + +@AdminRoute.route("/lottery", methods=["GET"]) +def LotteryIndex(): + AdminPermissionRequired('Lottery') + + EligibleUsers = User.query.filter(or_( User.accountstatus == 3, User.accountstatus == 4, User.lastonline < datetime.utcnow() - timedelta( days = 31 ) )) + EligibleUsers = EligibleUsers.outerjoin( UserAsset, UserAsset.userid == User.id ).outerjoin( Asset, Asset.id == UserAsset.assetid ).filter( Asset.is_limited == True ).group_by( User.id ).all() + + def GetTotalLimiteds( UserObject : User ) -> int: + if redis_controller.exists(f"LotteryLimitedCountCache:{UserObject.id}"): + return int(redis_controller.get(f"LotteryLimitedCountCache:{UserObject.id}")) + TotalLimiteds : int = UserAsset.query.filter_by( userid = UserObject.id ).join( Asset, Asset.id == UserAsset.assetid ).filter( Asset.is_limited == True ).count() + redis_controller.set(f"LotteryLimitedCountCache:{UserObject.id}", str(TotalLimiteds), ex=120) + return TotalLimiteds + + return render_template("admin/lottery/index.html", EligibleUsers=EligibleUsers, GetTotalLimiteds=GetTotalLimiteds, InactiveTime = (datetime.utcnow() - timedelta( days = 31 )) ) + +@AdminRoute.route("/lottery", methods=["POST"]) +def LotteryPost(): + AdminPermissionRequired('Lottery') + + SelectedUser : int = request.form.get( key='selected-user', default=None, type=int ) + if SelectedUser is None: + flash("Invalid request", "error") + return redirect("/admin/lottery") + + UserObject : User = User.query.filter_by( id = SelectedUser ).first() + if UserObject is None: + flash("Invalid user", "error") + return redirect("/admin/lottery") + + if UserObject.accountstatus not in [3,4] and UserObject.lastonline > datetime.utcnow() - timedelta( days = 31 ): + flash("User is not eligible", "error") + return redirect("/admin/lottery") + + TotalUsersOnline : int = User.query.filter( User.lastonline > datetime.utcnow() - timedelta( minutes = 2 ) ).count() + if TotalUsersOnline < 10: + flash("Not enough users online", "error") + return redirect("/admin/lottery") + + EligibleLimiteds : list[UserAsset] = UserAsset.query.filter_by( userid = UserObject.id ).join( Asset, Asset.id == UserAsset.assetid ).filter( Asset.is_limited == True ).all() + if len(EligibleLimiteds) < 1: + flash("User does not have any limiteds", "error") + return redirect("/admin/lottery") + + AuthenticatedUser : User = auth.GetCurrentUser() + + PreviousWinner = None + for UserAssetObj in EligibleLimiteds: + RandomWinner : User = User.query.filter(and_( + User.id != UserObject.id, + User.id != AuthenticatedUser.id, + User.id != PreviousWinner, + User.lastonline > datetime.utcnow() - timedelta( minutes = 2 ) + )).order_by(func.random()).first() + + if RandomWinner is None: + flash("Not enough users online", "error") + return redirect("/admin/lottery") + + PreviousWinner = RandomWinner.id + UserAssetObj.userid = RandomWinner.id + UserAssetObj.updated = datetime.utcnow() + CreateSystemMessage( + f"You won a free limited!", + f"""You have been randomly selected to be given a free limited by Syntax. +You have won: {UserAssetObj.asset.name} ( {UserAssetObj.asset.id} ) [ UAID: {UserAssetObj.id} / Serial: { UserAssetObj.serial if UserAssetObj.serial is not None else 'None'} ] + +- Syntax Team +""", + RandomWinner.id + ) + CreateSystemMessage( + f"Limited Item removed", + f""""Your limited {UserAssetObj.asset.name} ( {UserAssetObj.asset.id} ) [ UAID: {UserAssetObj.id} / Serial: { UserAssetObj.serial if UserAssetObj.serial is not None else 'None'} ] has been removed from your account and was given to another SYNTAX User +This was because you are either: + - Inactive for over 31 days + - Terminated + +We apologize for any inconvenience this may have caused. + +- Syntax Team +""", + UserObject.id + ) + + TargetUserAvatarAsset : UserAvatarAsset = UserAvatarAsset.query.filter_by( user_id = UserObject.id, asset_id = UserAssetObj.asset.id ).first() + if TargetUserAvatarAsset is not None: + db.session.delete(TargetUserAvatarAsset) + + db.session.commit() + + try: + newLimitedTransfer = LimitedItemTransfer( + original_owner_id = UserObject.id, + new_owner_id = RandomWinner.id, + asset_id = UserAssetObj.assetid, + user_asset_id = UserAssetObj.id, + transfer_method = LimitedItemTransferMethod.WonByLottery, + purchased_price = None + ) + db.session.add(newLimitedTransfer) + db.session.commit() + except Exception as e: + flash(f"Failed to create LimitedItemTransfer: {str(e)}, but lottery items has still been given away", "error") + + TakeUserThumbnail( UserObject.id ) + flash("Lottery completed", "success") + return redirect("/admin/lottery") + \ No newline at end of file diff --git a/app/pages/admin/assetcopier.html b/app/pages/admin/assetcopier.html new file mode 100644 index 0000000..bd0738a --- /dev/null +++ b/app/pages/admin/assetcopier.html @@ -0,0 +1,39 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Asset Copier

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +

Do not abuse this tool, allowed assets: ( TShirt, Hat, Shirt, Pants, Head, Face, Gear, Accessories )

+

WARNING: When cloning accessories please be careful cloning 2016+ assets as some accessories attachments are too new for our client to handle

+
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/assetmoderation.html b/app/pages/admin/assetmoderation.html new file mode 100644 index 0000000..19e4748 --- /dev/null +++ b/app/pages/admin/assetmoderation.html @@ -0,0 +1,119 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Asset Moderation

+

Do not approve any controversial, NSFW, racist, anti semitism, furry content and aggressive swearing

+

For images every second any transparent part of the image will change colors this will help find any hidden content

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+ {% for pendingAsset in PendingAssets: %} +
+ {% if 'Asset' in pendingAsset %} +
{{pendingAsset.Asset.name}}
+
+

AssetId: {{pendingAsset.Asset.id}}

+

Created: {{pendingAsset.Asset.created_at}}

+

CreatorId: {{pendingAsset.Asset.creator_id}}

+

Creator Type: {% if pendingAsset.Asset.creator_type == 1%}Group{%else%}User{%endif%}

+

AssetType: {{pendingAsset.Asset.asset_type.name}}

+
+ {%endif%} + {% if 'Group' in pendingAsset %} +
{{pendingAsset.Group.name}}
+
+

GroupId: {{pendingAsset.Group.id}}

+

Created: {{pendingAsset.Icon.created_at}}

+

CreatorId: {{pendingAsset.Creator.id}}

+
+ {%endif%} + {% if pendingAsset.ParentAsset: %} +
+

Parent AssetId: {{pendingAsset.ParentAsset.id}}

+

Parent Name: {{pendingAsset.ParentAsset.name}}

+

Parent AssetType: {{pendingAsset.ParentAsset.asset_type.name}}

+
+ {% endif %} + {% if 'Asset' in pendingAsset %} + {% if pendingAsset.Asset.asset_type.value == 1 and not pendingAsset.AssetThumbnail: %} +
+ +
+ {%endif%} + {% if pendingAsset.Asset.asset_type.value == 9: %} + {% if pendingAsset.PlaceIcon: %} +
+ +
+ {%endif%} + {%endif%} + {% if pendingAsset.Asset.asset_type.value == 3 %} + + {%endif%} + {%endif%} + {% if pendingAsset.AssetThumbnail: %} +
+ +
+ {%endif%} + {% if 'Group' in pendingAsset %} + {% if pendingAsset.Icon: %} +
+ +
+ {%endif%} + {%endif%} + {% if 'Asset' in pendingAsset %} +
+
+
+
+
+
+
+
+ {%else%} +
+
+
+
+
+
+
+
+ {%endif%} +
+ {% endfor %} +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/bundlecopier.html b/app/pages/admin/bundlecopier.html new file mode 100644 index 0000000..6257d74 --- /dev/null +++ b/app/pages/admin/bundlecopier.html @@ -0,0 +1,39 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Bundle Copier

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +

Do not abuse this tool, some extra modifications may be needed when cloning a bundle as it is not always perfect once cloned. Also it might take awhile for it copy all assets, and we recommend to not use it when anyone is in game.

+

WARNING: PLEASE make sure the bundle you are copying has not already been uploaded

+
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/createasset.html b/app/pages/admin/createasset.html new file mode 100644 index 0000000..4dfea7c --- /dev/null +++ b/app/pages/admin/createasset.html @@ -0,0 +1,59 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Create Asset

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ + + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/creategiftcard.html b/app/pages/admin/creategiftcard.html new file mode 100644 index 0000000..055fa90 --- /dev/null +++ b/app/pages/admin/creategiftcard.html @@ -0,0 +1,67 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Create Giftcard

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+
+ + +
+

OBC GC Value = How many months

+

TBC GC Value = How many weeks

+

Robux and Tickets GC Value = How much currency

+

Item GC Value = Asset ID

+ + +
+ {% if codes: %} +
+

Giftcard Codes

+
+ {% for code in codes: %} + {{code}} +
+ {%endfor%} +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/createuser.html b/app/pages/admin/createuser.html new file mode 100644 index 0000000..50491e1 --- /dev/null +++ b/app/pages/admin/createuser.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Create User

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/fflagsettings/index.html b/app/pages/admin/fflagsettings/index.html new file mode 100644 index 0000000..dd37f1b --- /dev/null +++ b/app/pages/admin/fflagsettings/index.html @@ -0,0 +1,41 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/fflagsettings/view.html b/app/pages/admin/fflagsettings/view.html new file mode 100644 index 0000000..9936ba5 --- /dev/null +++ b/app/pages/admin/fflagsettings/view.html @@ -0,0 +1,84 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to FFlag GroupsDelete Group +

{{group.name}}

+

{{group.description}}

+
+
+
+

Created: {{group.created_at}}

+
+
+

Last Updated: {{group.updated_at}}

+
+
+

Enabled: {{ group.enabled }}

+
+
+
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +

Import from file

+

Note: This will remove all current flags and replace them with the file

+
+
+ +
+ + +
+
+

Flags ({{flagcount}})

+
+
+ + +
+
+ + + + + + + + + + {% for fflag in FFlagsLookupResults %} + + + + + + {% endfor %} + +
NameTypeValue
{{fflag.name}}{% if fflag.flag_type == 1: %}boolean{% endif %}{% if fflag.flag_type == 2: %}number{% endif %}{% if fflag.flag_type == 3: %}string{% endif %}{{ b64decode(fflag.flag_value).decode('utf-8') }}
+
+ Previous +

Page {{FFlagsLookupResults.page}} of {{FFlagsLookupResults.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/create.html b/app/pages/admin/gameservers/create.html new file mode 100644 index 0000000..96b9544 --- /dev/null +++ b/app/pages/admin/gameservers/create.html @@ -0,0 +1,64 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Game Server Manager +

Create Server

+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/delete.html b/app/pages/admin/gameservers/delete.html new file mode 100644 index 0000000..3a35706 --- /dev/null +++ b/app/pages/admin/gameservers/delete.html @@ -0,0 +1,24 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

Are you sure?

+

You are deleting {{gameserver.serverName}} ( {{gameserver.serverId}} )

+
+ + + + Back +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/index.html b/app/pages/admin/gameservers/index.html new file mode 100644 index 0000000..4f67c98 --- /dev/null +++ b/app/pages/admin/gameservers/index.html @@ -0,0 +1,47 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/refresh_accesskey.html b/app/pages/admin/gameservers/refresh_accesskey.html new file mode 100644 index 0000000..4885945 --- /dev/null +++ b/app/pages/admin/gameservers/refresh_accesskey.html @@ -0,0 +1,24 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

Are you sure?

+

Are you sure you want to refresh the AccessKey for {{gameserver.serverName}} ( {{gameserver.serverId}} )

+
+ + + + Back +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/gameservers/view.html b/app/pages/admin/gameservers/view.html new file mode 100644 index 0000000..5bb6ea1 --- /dev/null +++ b/app/pages/admin/gameservers/view.html @@ -0,0 +1,84 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ +

{{gameserver.serverName}}

+

{{gameserver.serverId}}

+
+
+
+

Last heartbeat: {{gameserver.lastHeartbeat}}

+
+
+

RCC Memory Usage: {{gameserver.RCCmemoryUsage}} MB

+
+
+

Response Time: {{ round(gameserver.heartbeatResponseTime,3) }} secs

+
+
+

Thumbnail Queue Size: {{gameserver.thumbnailQueueSize}}

+
+
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/index.html b/app/pages/admin/index.html new file mode 100644 index 0000000..333d3e1 --- /dev/null +++ b/app/pages/admin/index.html @@ -0,0 +1,41 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+
+
+ +
+

Welcome, {{user.username}}!

+

Server Time: {{stats.SystemTime}} UTC

+
+
+
+

Users Online: {{stats.UsersOnline}}

+

Users In-Game: {{stats.UsersPlaying}}

+

Active Servers: {{stats.PlaceServersCount}}

+

New users today: {{stats.UsersSignedUpToday}}

+

Pending Assets: {{stats.PendingAssets}}

+
+
+
+ {% for permission in permissions %} + {% if "Hidden" not in permission: %} + + {% endif %} + {% endfor %} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/insertitemrelasepool.html b/app/pages/admin/insertitemrelasepool.html new file mode 100644 index 0000000..b40e51e --- /dev/null +++ b/app/pages/admin/insertitemrelasepool.html @@ -0,0 +1,101 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Asset Manager +

Insert {{asset.name}} into Item Release Pool

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + {% if asset %} +
+ + + + +
+
+ + +
+
+ + +
+
+

note: if you want an item to be free both robux and tix prices have to be set to 0

+
+
+
Offsale After
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+

Amount of time item before the item goes offsale after it releases | Leave empty if you do not want an offsale time

+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+

Created: {{asset.created_at}}

+
+
+

Updated: {{asset.updated_at}}

+
+
+

Original Roblox AssetId: {{asset.roblox_asset_id}}

+
+
+

AssetType: {{asset.asset_type.name}}

+
+
+ + +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/itemreleasepool.html b/app/pages/admin/itemreleasepool.html new file mode 100644 index 0000000..854b634 --- /dev/null +++ b/app/pages/admin/itemreleasepool.html @@ -0,0 +1,59 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Item Release Pool

+

Next Drop Time: {{NextItemDropDatetime}}

+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ {% for Item in PlannedItems: %} +
+
Name: {{Item.name}}
+

Description: {{Item.description}}

+
+
+

AssetId: {{Item.id}}

+

Robux Price: {{Item.robux_price}}

+

Tickets Price: {{Item.tickets_price}}

+

IsLimited: {{Item.is_limited}}

+

IsLimitedUnique: {{Item.is_limited_unique}}

+

Serial Count: {{Item.serial_count}}

+

Offsale After: {{Item.offsale_after}}

+
+
+ {% endfor%} +
+ {% if len(PlannedItems) == 0 %} +

No planned items

+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/lottery/index.html b/app/pages/admin/lottery/index.html new file mode 100644 index 0000000..2546e5d --- /dev/null +++ b/app/pages/admin/lottery/index.html @@ -0,0 +1,64 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Lottery

+

Give away limiteds under accounts which is deleted or inactive for more than 31 days. There must be at least 10 users online to give away any limiteds

+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + +
+ {% for User in EligibleUsers: %} +
+ +
+
{{User.username}} {% if User.accountstatus != 1: %}Banned{% endif %}{% if User.lastonline < InactiveTime %}Inactive{% endif %}
+

Total Limiteds: {{ GetTotalLimiteds(User) }}

+
+ +
+ {% endfor %} +
+ +
+ {% if len(EligibleUsers) == 0: %} +

+ No eligible users found +

+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/manageassets.html b/app/pages/admin/manageassets.html new file mode 100644 index 0000000..f6d6e4b --- /dev/null +++ b/app/pages/admin/manageassets.html @@ -0,0 +1,142 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Asset Manager

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + + +
+ {% if asset %} +
+
+
+ < View asset on catalog + {% if IsItemEligibleForItemReleasePool and CanManageItemReleasePool: %} + Insert Item into Item Release Pool + {% endif %} +
+ + + + +
+
+ + +
+
+ + +
+
+

note: if you want an item to be free both robux and tix prices have to be set to 0

+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+

(UTC) Current offsale time: {{asset.offsale_at}} | Note: To remove a offsale date you need to set the item offsale manually

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+

Created: {{asset.created_at}}

+
+
+

Updated: {{asset.updated_at}}

+
+
+

Original Roblox AssetId: {{asset.roblox_asset_id}}

+
+
+

AssetType: {{asset.asset_type.name}}

+
+
+ + +
+
+ + +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/moderateUGC.html b/app/pages/admin/moderateUGC.html new file mode 100644 index 0000000..c020ee2 --- /dev/null +++ b/app/pages/admin/moderateUGC.html @@ -0,0 +1,112 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Asset Moderation

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + + +
+ {% if AssetObj %} +
+
+
+
+ +
+
+
+

{{AssetObj.name}}

+ View Asset Page +
+
+
Description
+

{{AssetObj.description}}

+
+
+

AssetID: {{AssetObj.id}}

+

Roblox AssetID: {{AssetObj.roblox_asset_id}}

+

Creator: {% if AssetObj.creator_type == 0 %}{{CreatorObj.username}} ( {{CreatorObj.id}} ){%endif%}

+

CreatorType: {% if AssetObj.creator_type == 0 %}User{%else%}Group{%endif%}

+

Created: {{AssetObj.created_at}}

+

Last Updated: {{AssetObj.updated_at}}

+

AssetType: {{AssetObj.asset_type.name}}

+

Moderation Status: {% if AssetObj.moderation_status == 0: %}Allowed{%elif AssetObj.moderation_status == 2: %}Deleted{%else%}Pending{%endif%}

+

IsForSale: {{AssetObj.is_for_sale}}

+

SaleCount: {{AssetObj.sale_count}}

+
+

Quick Moderation Actions

+
+ {% if AssetObj.moderation_status != 0 %} +
+ + +
+ {% endif %} + {% if AssetObj.moderation_status != 1 %} +
+ + +
+ {% endif %} + {% if AssetObj.moderation_status != 2 %} +
+ + +
+ {% endif %} +
+

Linked Assets

+
+ {% for asset in RelatedAssets: %} +
+
{{asset.name}}
+
+

AssetID: {{asset.id}}

+

AssetType: {{asset.asset_type.name}}

+

Creator: {% if asset.creator_type == 0 %}{{asset.creator_id}}{%endif%}

+

CreatorType: {% if asset.creator_type == 0 %}User{%else%}Group{%endif%}

+ View Asset +
+
+ {% endfor %} + {% if len(RelatedAssets) == 0: %} +

No Linked Assets

+ {% endif %} +
+
+
+
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/permissionsdefinition.py b/app/pages/admin/permissionsdefinition.py new file mode 100644 index 0000000..1d044e9 --- /dev/null +++ b/app/pages/admin/permissionsdefinition.py @@ -0,0 +1,129 @@ +PermissionsDefinition = { + 'GameServerManager' : { + 'Name' : 'Server Manager', + 'Description' : 'View gameserver information and manage them', + 'route': '/admin/gameservers', + 'icon': 'bi-database' + }, + 'UpdateWebsiteMessage' : { + 'Name' : 'Website Message', + 'Description' : 'Update website wide message', + 'route': '/admin/websitemessage', + 'icon': 'bi-chat-square-text' + }, + 'ManageFFlags' : { + 'Name' : 'Feature Flags', + 'Description' : 'Manage feature flags for RCC and Clients', + 'route': '/admin/fflags', + 'icon': 'bi-flag' + }, + 'CopyAssets' : { + 'Name' : 'Asset Copier', + 'Description' : 'Copy assets from the Roblox Catalog', + 'route': '/admin/asset-copier', + 'icon': 'bi-files' + }, + 'ManageAsset' : { + 'Name' : 'Manage Asset', + 'Description' : 'Manage assets under the ROBLOX account', + 'route': '/admin/manage-assets', + 'icon': 'bi-file-earmark' + }, + 'CreateAsset' : { + 'Name' : 'Create Asset', + 'Description' : 'Create assets under the ROBLOX account', + 'route': '/admin/create-asset', + 'icon': 'bi-file-earmark-plus' + }, + 'AssetModeration' : { + 'Name' : 'Pending Assets', + 'Description' : 'View and moderate pending assets', + 'route': '/admin/pending-assets', + 'icon': 'bi-hourglass-split' + }, + 'ManageUsers' : { + 'Name' : 'Manage Users', + 'Description' : 'Manage users and their permissions', + 'route': '/admin/manage-users', + 'icon': 'bi-people' + }, + 'ManageWebsiteFeatures' : { + 'Name' : 'Website Features', + 'Description' : 'Toggle certain features on the website', + 'route': '/admin/manage-website-features', + 'icon': 'bi-gear' + }, + 'CreateUser' : { + 'Name' : 'Create User', + 'Description' : 'Create a user on the website', + 'route': '/admin/create-user', + 'icon': 'bi-person-plus' + }, + 'CreateGiftcard' : { + 'Name' : 'Create Giftcard', + 'Description' : 'Create a giftcard on the website', + 'route': '/admin/create-giftcard', + 'icon': 'bi-gift' + }, + 'UpdateAssetFile' : { + 'Name' : 'Update RBXM', + 'Description' : 'Update the RBXM file of an asset', + 'route': '/admin/update-asset-file', + 'icon': 'bi-file-earmark-arrow-up' + }, + 'CopyBundle' : { + 'Name' : 'Copy Bundle', + 'Description' : 'Copy a bundle from the Roblox Catalog', + 'route': '/admin/copy-bundle', + 'icon': 'bi-collection' + }, + 'ModerateAsset' : { + 'Name' : 'Moderate Asset', + 'Description' : 'Change the status of a user generated asset', + 'route': '/admin/moderate-asset', + 'icon': 'bi-file-earmark-check' + }, + 'Lottery' : { + 'Name' : 'Lottery', + 'Description' : 'Give away limiteds under inactive accounts', + 'route': '/admin/lottery', + 'icon': 'bi-cash-stack' + }, + 'ManageItemReleases' : { + 'Name' : 'Item Release Pool', + 'Description' : 'Manage items in the item release pool', + 'route': '/admin/item-release-pool', + 'icon': 'bi-shuffle' + }, + + 'BanUser' : { + 'Name' : 'Ban User', + 'Description' : 'Ban a user from the website', + 'Hidden' : True + }, + 'ViewUserLoginHistory' : { + 'Name' : 'View User Login History', + 'Description' : 'View the login history of a user', + 'Hidden' : True + }, + 'ViewLoginHistoryDetailed' : { + 'Name' : 'View Sensitive Login History', + 'Description' : 'Extra permission to viewing sensitive info in login history like hashed IPs and Session Tokens', + 'Hidden' : True + }, + 'ModifyLimitedAssets' : { + 'Name' : 'Modify Limited Assets', + 'Description' : 'Modify limited assets', + 'Hidden' : True + }, + 'ViewItemReleasePoolDrop' : { + 'Name' : 'View Item Release Pool Drop Time', + 'Description' : 'Able to see the next item release drop', + 'Hidden' : True + }, + "ManageAdminPermissions" : { + 'Name' : 'Manage Admin Permissions', + 'Description' : 'Manage admin permissions', + 'Hidden' : True + } +} \ No newline at end of file diff --git a/app/pages/admin/updateassetfile.html b/app/pages/admin/updateassetfile.html new file mode 100644 index 0000000..7e419d7 --- /dev/null +++ b/app/pages/admin/updateassetfile.html @@ -0,0 +1,42 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Update RBXM

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+ + + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/ban.html b/app/pages/admin/usermanage/ban.html new file mode 100644 index 0000000..bfc7710 --- /dev/null +++ b/app/pages/admin/usermanage/ban.html @@ -0,0 +1,86 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

Ban {{userObj.username}}

+

UserId: {{userObj.id}}

+
+
+ {% if LastestUserBanObj != None: %} +
+ This user currently has a ongoing ban, please revoke the previous ban before banning again. +
+ {% endif %} + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+ + +
+
+ + +
+
+ + +
+

Please try to include links to evidence that lead to this ban

+
+ + +
+ +
+ {% if not LastestUserBanObj != None: %} + + {% else%} + + {% endif %} +
+ {% if LastestUserBanObj != None: %} +
+ + +
+ {%endif%} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/banhistory.html b/app/pages/admin/usermanage/banhistory.html new file mode 100644 index 0000000..c350cf4 --- /dev/null +++ b/app/pages/admin/usermanage/banhistory.html @@ -0,0 +1,69 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Ban History

+

UserId: {{userObj.id}}

+
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + +
+ {% for banRecord in BanHistory %} +
+

{{banRecord.ban_type.name}}

+

Reason: {{banRecord.reason}}

+

Moderator Note: {{banRecord.moderator_note}}

+

Ban Author: {{GetBanAuthorName(banRecord)}}

+
+
+

Banned At: {{banRecord.created_at}}

+

Expires At: {{banRecord.expires_at}}

+

Acknowledged: {{banRecord.acknowledged}}

+
+
+ {% endfor %} + {% if len(BanHistory.items) == 0 %} +

No previous bans

+ {% endif %} +
+
+ Previous +

Page {{BanHistory.page}} of {{BanHistory.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/gamesessions.html b/app/pages/admin/usermanage/gamesessions.html new file mode 100644 index 0000000..8c700a1 --- /dev/null +++ b/app/pages/admin/usermanage/gamesessions.html @@ -0,0 +1,65 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Game Sessions

+

UserId: {{userObj.id}}

+
+
+ + + + + + + + + + + + {% for session in GameSessions: %} + + + + + + + + {% endfor %} + +
IDJobIdJoined AtLeft AtPlace
{{session.id}}{{session.serveruuid}}{{session.joined_at}} UTC{{session.left_at}} UTC{{get_place_name(session.place_id)}} ({{session.place_id}})
+ {% if len(GameSessions.items) == 0: %} +
+

No Game Session Logs Found

+
+ {%endif%} +
+ Previous +

Page {{GameSessions.page}} of {{GameSessions.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/invitekeys.html b/app/pages/admin/usermanage/invitekeys.html new file mode 100644 index 0000000..772e40c --- /dev/null +++ b/app/pages/admin/usermanage/invitekeys.html @@ -0,0 +1,74 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Invite Keys

+

UserId: {{userObj.id}}

+
+
+ + + + + + + + + + + + {% for invite in InviteKeys: %} + + + + + + + + {% endfor %} + +
IDKeyCreatedUsed OnUsed By
{{invite.id}}{{invite.key}}{{invite.created_at}} UTC{% if invite.used_on != None: %}{{invite.used_on}} UTC{%else%}Unused{%endif%} + {% if invite.used_by != None: %} + + + {{invite.user.username}} + + {% else%} + Unused + {%endif%} +
+ {% if len(InviteKeys.items) == 0: %} +
+

No Invite Keys found

+
+ {%endif%} +
+ Previous +

Page {{InviteKeys.page}} of {{InviteKeys.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/loginhistory.html b/app/pages/admin/usermanage/loginhistory.html new file mode 100644 index 0000000..e592522 --- /dev/null +++ b/app/pages/admin/usermanage/loginhistory.html @@ -0,0 +1,105 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Login History

+

UserId: {{userObj.id}}

+
+
+ {% if len(AlternateAccounts) != 0 %} + + {% endif %} + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + {% if canViewSensitiveInfo %} +
+ {% for loginRecord in LoginHistory %} +
+
+
+
{{loginRecord.ip}}
+

Timestamp: {{loginRecord.timestamp}} UTC

+
+ +
+
+
+

Login Record ID: {{loginRecord.id}}

+
+

User Agent

+

{{loginRecord.useragent}}

+
+
+

Session Token

+

{{loginRecord.session_token}}

+
+
+
+
+ {% endfor %} +
+
+ Previous +

Page {{LoginHistory.page}} of {{LoginHistory.pages}}

+ Next +
+ {% endif %} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/manage-admin-perms.html b/app/pages/admin/usermanage/manage-admin-perms.html new file mode 100644 index 0000000..2f41818 --- /dev/null +++ b/app/pages/admin/usermanage/manage-admin-perms.html @@ -0,0 +1,208 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Admin Permissions

+

UserId: {{userObj.id}}

+
+
+
+ +
+ +
+
+ + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/moderatornotes.html b/app/pages/admin/usermanage/moderatornotes.html new file mode 100644 index 0000000..9258755 --- /dev/null +++ b/app/pages/admin/usermanage/moderatornotes.html @@ -0,0 +1,61 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Moderator Notes

+

UserId: {{userObj.id}}

+
+
+
+ {% for note in UserModeratorNotes.items %} +
+
+ +
+
{{ GetUserName(note.note_creator_id) }}
+

Created at {{note.created_at}} UTC

+
+
+
+ {% for note_line in note.note.split("\n") %} +

{{note_line}}

+ {% endfor %} +
+
+ {% endfor %} +
+ {% if len(UserModeratorNotes.items) == 0 %} +
+ This user currently has no moderator notes. +
+ {% endif %} +
+ Previous +

Page {{UserModeratorNotes.page}} of {{UserModeratorNotes.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/search.html b/app/pages/admin/usermanage/search.html new file mode 100644 index 0000000..7ab2cd0 --- /dev/null +++ b/app/pages/admin/usermanage/search.html @@ -0,0 +1,82 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

User Manager

+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + + + + + + + + + + + + {% for user in returnList: %} + + + + + + + + + + {%endfor%} + +
IDUsernameCreatedLast OnlineRobuxTicketsAction
{{user.id}}{{user.username}}{{user.creation}}{{user.lastonline}}{{user.robux}}{{user.tix}}View
+ {% if len(returnList) == 0: %} +

No results found

+ {%endif%} + +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/transactions.html b/app/pages/admin/usermanage/transactions.html new file mode 100644 index 0000000..bc3329c --- /dev/null +++ b/app/pages/admin/usermanage/transactions.html @@ -0,0 +1,116 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ < Return to User Page +
+ +
+

{{userObj.username}} Transactions

+

UserId: {{userObj.id}}

+
+
+
+ + +
+ + + + + + + + + + + {% for Transaction in TransactionInfo: %} + + + + + + + {% endfor %} + +
DateSourceDescriptionAmount
{{Transaction.created_at}} + {% if Transaction["source"]["type"] == 0: %} + + {{Transaction['source']['name']}} + {{Transaction["source"]["name"]}} + + {% else %} + + {{Transaction['source']['name']}} + {{Transaction["source"]["name"]}} + + {% endif %} + + {% if Transaction['custom_text'] != None %} + {{Transaction['custom_text']}} + {% else %} + {% if Transaction['asset'] != None: %} + + {{Transaction['asset']['name']}} + {{Transaction['asset']['name']}} + + {% else %} + Unknown + {%endif%} + {% endif %} + + {% if Transaction['currency_type'] == 0 %} + R$ {{Transaction['currency_amount']}} + {% else %} + T$ {{Transaction['currency_amount']}} + {% endif %} +
+ {% if len(TransactionInfo) == 0: %} +
+

No transactions found

+
+ {%endif%} + +
+ Previous +

Page {{Pagination.page}} of {{Pagination.pages}}

+ Next +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/usermanage/view.html b/app/pages/admin/usermanage/view.html new file mode 100644 index 0000000..8e1ac44 --- /dev/null +++ b/app/pages/admin/usermanage/view.html @@ -0,0 +1,191 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+
+
+ +
{{userObj.username}}
+
+
+ + {% if isAdministrator: %} +
+

Administrator

+
+ {% endif %} + {% if userObj.accountstatus == 2: %} +
+

This account is temporarily banned

+
+ {% endif %} + {% if userObj.accountstatus == 3: %} +
+

This account has been deleted

+
+ {% endif %} + {% if userObj.accountstatus == 4: %} +
+

This account is GDPR deleted

+
+ {% endif %} +
+ Created: {{userObj.created}} +
+ Last Online: {{userObj.lastonline}} +
+ 2FA Enabled: {{userObj.TOTPEnabled}} +
+ Place Visits: {{TotalVisits}} +
+
+
+
+
Economy
+
+
+ Robux: R${{UserEconomyObj.robux}} +
+ Tickets: T${{UserEconomyObj.tix}} +
+
+
+
+ {% if LastestUserBanObj != None: %} +
+
+
Ban Information
+
+
+ Ban Type: {{LastestUserBanObj.ban_type.name}} +
+ Banned On: {{LastestUserBanObj.created_at}} +
+ Expires On: {{LastestUserBanObj.expires_at}} +
+ Reason: {{LastestUserBanObj.reason}} +
+ Moderator Note: {{LastestUserBanObj.moderator_note}} +
+ Banned By: {{LastestUserBanObj.author_userid}} +
+
+ {%endif%} +
+
+
Description
+
+
+ {% for line in DescriptionLines %} +

{{line}}

+ {% endfor %} +
+
+ {% if LastLogin != None: %} +
+
+
Latest Login
+
+
+ User-Agent: {{LastLogin.useragent}} +
+ Login Timestamp: {{LastLogin.timestamp}} +
+
+ {%endif%} + {% if LinkedDiscordObj != None: %} +
+
+
Discord Account
+
+
+
+
+ Discord ID: {{DiscordUserInfo.UserId}} +
+ Username: {{DiscordUserInfo.Username}} +
+ Discriminator: {{DiscordUserInfo.Discriminator}} +
+ Linked On: {{LinkedDiscordObj.linked_on}} +
+ Last Refresh: {{LinkedDiscordObj.last_updated}} +
+
+ +
+
+
+
+ {%endif%} + {% if InviteKeyUsed != None: %} +
+
+
Invite Key Info
+
+
+ Invite Key: {{InviteKeyUsed.key}} +
+ Creator: {% if InviteKeyUsed.created_by != None: %}{{InviteKeyUsed.creator.username}}{%else%}Unknown{%endif%} +
+ Created At: {{InviteKeyUsed.created_at}} +
+
+ {%endif%} +
+
+
+
+
Actions
+
+ Ban User + {% if HasAdminPermission("ManageAdminPermissions") %} Manage Permissions{%endif%} +
+ +
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/websitefeatures.html b/app/pages/admin/websitefeatures.html new file mode 100644 index 0000000..34492fd --- /dev/null +++ b/app/pages/admin/websitefeatures.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Website Features

+

Only turn off certain features when its an emergency!

+
+ {% for feature in SitesFeaturesStatus: %} +
+
+
+
+

{{feature.name}}

+ {% if feature.enabled: %} +
+ + +
+ {% else %} +
+ + +
+ {% endif %} +
+
+
+ {% endfor %} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/admin/websitefeaturesdefinition.py b/app/pages/admin/websitefeaturesdefinition.py new file mode 100644 index 0000000..fd5e635 --- /dev/null +++ b/app/pages/admin/websitefeaturesdefinition.py @@ -0,0 +1,83 @@ +WebsiteFeaturesDefinition = [ + { + "name": "WebSignup" + }, + { + "name": "WebLogin" + }, + { + "name": "UsernameChange" + }, + { + "name": "PasswordChange" + }, + { + "name": "DiscordLinking" + }, + { + "name": "GameJoinAPI" + }, + { + "name": "ThumbnailRendering" + }, + { + "name": "GroupJoining" + }, + { + "name": "GroupLeaving" + }, + { + "name": "GroupWallPosting" + }, + { + "name": "GroupCreation" + }, + { + "name": "AssetCreation" + }, + { + "name": "AssetEditing" + }, + { + "name": "AssetValidationService" + }, + { + "name": "EconomyPurchase" + }, + { + "name": "MessageSending" + }, + { + "name": "ItemReselling" + }, + { + "name": "ItemTrading" + }, + { + "name": "AvatarUpdate" + }, + { + "name": "ClothingMigrator" + }, + { + "name": "SendFriendRequest" + }, + { + "name": "FollowingUsers" + }, + { + "name": "GiftcardRedeem" + }, + { + "name": "EmailChange" + }, + { + "name": "SendResetPassword" + }, + { + "name": "AudioMigrator" + }, + { + "name": "CurrencyExchange" + } +] \ No newline at end of file diff --git a/app/pages/admin/websitewidemsg.html b/app/pages/admin/websitewidemsg.html new file mode 100644 index 0000000..f6ae4ee --- /dev/null +++ b/app/pages/admin/websitewidemsg.html @@ -0,0 +1,20 @@ +{% extends '__layout__.html' %} +{% block title %}Admin{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ Back to Admin Panel +

Website wide message

+

plz do not put anything useless on here thxxx

+
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/audiomigrator/audiomigrator.py b/app/pages/audiomigrator/audiomigrator.py new file mode 100644 index 0000000..a7b1085 --- /dev/null +++ b/app/pages/audiomigrator/audiomigrator.py @@ -0,0 +1,104 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash +from app.routes.asset import GetOriginalAssetInfo, AddAudioAssetToAudioMigrationQueue +from app.models.asset import Asset +from app.models.user import User +from app.services import economy +from app.util import auth, websiteFeatures, turnstile, transactions +from app.extensions import db, redis_controller +from app.enums.TransactionType import TransactionType + +AudioMigratorRoute = Blueprint('assetmigrator', __name__, template_folder='pages') + +@AudioMigratorRoute.route('/audiomigrator', methods=['GET']) +@auth.authenticated_required +def audiomigrator(): + return render_template('audiomigrator/index.html') + +@AudioMigratorRoute.route('/audiomigrator', methods=['POST']) +@auth.authenticated_required +def audiomigrator_post(): + AuthenticatedUser : User = auth.GetCurrentUser() + if not websiteFeatures.GetWebsiteFeature("AudioMigrator"): + flash("Audio migration is temporarily disabled", "error") + return redirect("/audiomigrator") + + CFTurnstileResponse = request.form.get( key="cf-turnstile-response", default=None, type=str) + if CFTurnstileResponse is None: + flash("Invalid captcha", "error") + return redirect("/audiomigrator") + if not turnstile.VerifyToken(CFTurnstileResponse): + flash("Invalid captcha", "error") + return redirect("/audiomigrator") + + PlaceId = request.form.get( key = "placeid", default = None, type = int ) + if PlaceId is None: + flash("Invalid place ID", "error") + return redirect("/audiomigrator") + RequestedAudioIds = request.form.get( key = "audio-ids", default = None, type = str ) + if RequestedAudioIds is None: + flash("Invalid audio IDs", "error") + return redirect("/audiomigrator") + + RequestedAudioIds = RequestedAudioIds.split("\n") + for i in range(len(RequestedAudioIds)): + RequestedAudioIds[i] = RequestedAudioIds[i].strip() + if RequestedAudioIds[i].isdigit(): + RequestedAudioIds[i] = int(RequestedAudioIds[i]) + else: + RequestedAudioIds.remove(RequestedAudioIds[i]) + + if len(RequestedAudioIds) > 100: + flash("You can only migrate 100 audios at a time", "error") + return redirect("/audiomigrator") + if len(RequestedAudioIds) < 1: + flash("You must migrate at least 1 audio", "error") + return redirect("/audiomigrator") + + if PlaceId < 1: + flash("Invalid place ID", "error") + return redirect("/audiomigrator") + + RobuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + RequiredAmountRobux = 0 + AudioIdsToMigrate : list[int] = [] + for RequestedAudio in RequestedAudioIds: + if Asset.query.filter_by(id = RequestedAudio ).first(): + continue + if redis_controller.lrange("migrate_audio_assets_queue", 0, -1).count(str(RequestedAudio)) > 0: + continue + if RequestedAudio in AudioIdsToMigrate: + continue + AudioIdsToMigrate.append(RequestedAudio) + RequiredAmountRobux += 5 + + if len(AudioIdsToMigrate) == 0: + flash(f"Queued 0 / {len(RequestedAudioIds)} audios to be migrated", "success") + return redirect("/audiomigrator") + + if RobuxBalance < RequiredAmountRobux: + flash(f"You don't have enough robux to migrate these audios, Required R${RequiredAmountRobux}", "error") + return redirect("/audiomigrator") + + try: + economy.DecrementTargetBalance( AuthenticatedUser, Amount = RequiredAmountRobux, CurrencyType = 0 ) + except economy.InsufficientFundsException: + flash(f"You don't have enough robux to migrate these audios, Required R${RequiredAmountRobux}", "error") + return redirect("/audiomigrator") + except Exception as e: + flash(f"An error occured while deducting robux", "error") + return redirect("/audiomigrator") + + transactions.CreateTransaction( + Reciever = User.query.filter_by(id = 1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = RequiredAmountRobux, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + CustomText = f"Audio migration" + ) + + for AudioId in AudioIdsToMigrate: + AddAudioAssetToAudioMigrationQueue(AudioId, bypassQueueLimit = True ,placeId=PlaceId) + + flash(f"Queued {len(AudioIdsToMigrate)} / {len(RequestedAudioIds)} audios to be migrated", "success") + return redirect("/audiomigrator") \ No newline at end of file diff --git a/app/pages/audiomigrator/index.html b/app/pages/audiomigrator/index.html new file mode 100644 index 0000000..0e7bada --- /dev/null +++ b/app/pages/audiomigrator/index.html @@ -0,0 +1,54 @@ +{% extends '__layout__.html' %} +{% block title %}Audio Migrator{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+

Audio Migrator

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+
+

Note: As a processing fee, each Audio will cost R$5 even if audio migration fails, this is to prevent spam and abuse of our systems. It can take a few minutes for audios to be processed so please be patient, you will not be charged for any audios that already exist on SYNTAX.

+
+ +
+ +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/avatar/avatar.html b/app/pages/avatar/avatar.html new file mode 100644 index 0000000..3f7938b --- /dev/null +++ b/app/pages/avatar/avatar.html @@ -0,0 +1,125 @@ +{% extends '__layout__.html' %} +{% block title %}Avatar{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+

Avatar

+
+
+
+ Your Avatar + + + +
+ +
+

Avatar isn't loading correctly? Redraw

+
+
Body Colors
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+

Page 1

+
+
+
Currently Wearing
+
+
+
+ +
+
+
+
+{% endblock %} diff --git a/app/pages/avatar/avatar.py b/app/pages/avatar/avatar.py new file mode 100644 index 0000000..d0bd165 --- /dev/null +++ b/app/pages/avatar/avatar.py @@ -0,0 +1,239 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +import base64 +import json +from app.extensions import db, redis_controller, limiter, csrf +from app.util import auth, websiteFeatures +from app.enums.AssetType import AssetType + +from app.models.asset import Asset +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.user_avatar import UserAvatar +from app.models.userassets import UserAsset +from app.models.user_thumbnail import UserThumbnail +from app.models.user import User + +from app.routes.thumbnailer import TakeUserThumbnail +AllowedBodyColors = [361, 192, 217, 153, 359, 352, 5, 101, 1007, 1014, 38, 18, 125, 1030, 133, 106, 105, 1017, 24, 334, 226, 141, 1021, 28, 37, 310, 317, 119, 1011, 1012, 1010, 23, 305, 102, 45, 107, 1018, 1027, 1019, 1013, 11, 1024, 104, 1023, 321, 1015, 1031, 1006, 1026, 21, 1004, 1032, 1016, 330, 9, 1025, 364, 351, 1008, 29, 1022, 151, 135, 1020, 1028, 1009, 1029, 1003, 26, 199, 194, 1002, 208, 1, 1001] +ScalingLimits = { + "height": { + "min": 0.9, + "max": 1.05, + "increment": 0.01 + }, + "width": { + "min": 0.7, + "max": 1, + "increment": 0.01 + }, + "head": { + "min": 0.95, + "max": 1, + "increment": 0.01 + }, + "proportion": { + "min": 0, + "max": 1, + "increment": 0.01 + }, + "bodyType": { + "min": 0, + "max": 1, + "increment": 0.01 + } +} +AvatarRoute = Blueprint('avatar', __name__, template_folder='pages') + +@AvatarRoute.route('/avatar', methods=['GET']) +@auth.authenticated_required +def avatar(): + AuthenticatedUser : User = auth.GetCurrentUser() + return render_template('avatar/avatar.html', user=AuthenticatedUser) + +@AvatarRoute.route("/avatar/getassets", methods=["GET"]) +@auth.authenticated_required_api +def get_assets(): + ReqAssetType = request.args.get("type") + if ReqAssetType is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + try: + ReqAssetType = int(ReqAssetType) + except: + return jsonify({"success": False, "message": "Invalid request"}), 400 + if ReqAssetType not in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + return jsonify({"success": False, "message": "Invalid request"}), 400 + PageNumber = request.args.get("page") or 0 + try: + PageNumber = int(PageNumber) + except: + return jsonify({"success": False, "message": "Invalid request"}), 400 + PageNumber += 1 + + AuthenticatedUser : User = auth.GetCurrentUser() + AssetsList : list[UserAsset] = UserAsset.query.filter_by(userid=AuthenticatedUser.id).join(Asset, Asset.id == UserAsset.assetid).filter(Asset.asset_type == AssetType(ReqAssetType)).distinct(Asset.id).paginate( page=PageNumber, per_page=12, error_out=False) + AssetList = [] + for AssetObj in AssetsList.items: + AssetObj : Asset = Asset.query.filter_by(id=AssetObj.assetid).first() + if AssetObj is None: + continue + AssetList.append({ + "id": AssetObj.id, + "name": AssetObj.name, + "moderation_status": AssetObj.moderation_status + }) + + return jsonify({ + "success": True, + "assets": AssetList, + "lastPage": not AssetsList.has_next + }) + +@AvatarRoute.route('/avatar/getavatar', methods=['GET']) +@auth.authenticated_required_api +def get_avatar(): + AuthenticatedUser : User = auth.GetCurrentUser() + userCurrentlyWearing : list[UserAvatarAsset] = UserAvatarAsset.query.filter_by(user_id=AuthenticatedUser.id).all() + userCurrentlyWearingList : list[int] = [] + for asset in userCurrentlyWearing: + AssetObj : Asset = Asset.query.filter_by(id=asset.asset_id).first() + userCurrentlyWearingList.append({ + "id": AssetObj.id, + "name": AssetObj.name, + "type": AssetObj.asset_type.value, + "moderation_status": AssetObj.moderation_status + }) + avatar : UserAvatar = UserAvatar.query.filter_by(user_id=AuthenticatedUser.id).first() + return jsonify({ + "success": True, + "currentlyWearing": userCurrentlyWearingList, + "bodyColors": [ + avatar.head_color_id, + avatar.torso_color_id, + avatar.left_arm_color_id, + avatar.right_arm_color_id, + avatar.left_leg_color_id, + avatar.right_leg_color_id + ], + "rigType": "R15" if avatar.r15 else "R6", + "scales": { + "height": avatar.height_scale, + "width": avatar.width_scale, + "head": avatar.head_scale, + "proportion": avatar.proportion_scale, + "bodyType": avatar.body_type_scale + } + }) + +@AvatarRoute.route("/avatar/setavatar", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def set_wearing_assets(): + if not websiteFeatures.GetWebsiteFeature("AvatarUpdate"): + return jsonify({"success": False, "message": "Avatar updating is currently disabled."}), 400 + + newAvatarData = request.json + if "bodyColors" not in newAvatarData or "assets" not in newAvatarData or "rigType" not in newAvatarData: + return jsonify({"success": False, "message": "Invalid request"}), 400 + if len(newAvatarData["bodyColors"]) != 6: + return jsonify({"success": False, "message": "Invalid request"}), 400 + + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return redirect('/login') + if redis_controller.get(f"avatar:lock:{AuthenticatedUser.id}") is not None: + return jsonify({"success": False, "message": "You are changing your avatar too fast."}), 429 + redis_controller.set(f"avatar:lock:{AuthenticatedUser.id}", "1", ex=5) + avatar : UserAvatar = UserAvatar.query.filter_by(user_id=AuthenticatedUser.id).first() + + if len(newAvatarData["assets"]) > 32: + return jsonify({"success": False, "message": "Too many assets"}), 400 + AssetTypeCount = {} + for asset in newAvatarData["assets"]: + AssetObj : Asset = Asset.query.filter_by(id=asset).first() + if AssetObj is None: + return jsonify({"success": False, "message": "Invalid asset"}), 400 + if AssetObj.asset_type.value not in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + return jsonify({"success": False, "message": "Invalid asset"}), 400 + if AssetTypeCount.get(AssetObj.asset_type.value) is None: + AssetTypeCount[AssetObj.asset_type.value] = 1 + else: + AssetTypeCount[AssetObj.asset_type.value] += 1 + if AssetTypeCount[AssetObj.asset_type.value] > 1 and AssetObj.asset_type != AssetType.Hat and AssetObj.asset_type != AssetType.HairAccessory and AssetObj.asset_type != AssetType.FaceAccessory: + return jsonify({"success": False, "message": "Invalid configuration"}), 400 + elif AssetTypeCount[AssetObj.asset_type.value] > 5 and AssetObj.asset_type == AssetType.Hat: + return jsonify({"success": False, "message": "Invalid configuration"}), 400 + + if AssetObj.moderation_status != 0: + newAvatarData["assets"].remove(asset) + + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=asset).first() + if UserAssetObj is None: + return jsonify({"success": False, "message": "Invalid asset"}), 400 + for Color in newAvatarData["bodyColors"]: + if Color not in AllowedBodyColors: + return jsonify({"success": False, "message": "Invalid body color"}), 400 + + UserAvatarAsset.query.filter_by(user_id=AuthenticatedUser.id).delete() + db.session.commit() + for asset in newAvatarData["assets"]: + UserAvatarAssetObj = UserAvatarAsset( + user_id=AuthenticatedUser.id, + asset_id=asset + ) + db.session.add(UserAvatarAssetObj) + avatar.head_color_id = newAvatarData["bodyColors"][0] + avatar.torso_color_id = newAvatarData["bodyColors"][1] + avatar.left_arm_color_id = newAvatarData["bodyColors"][2] + avatar.right_arm_color_id = newAvatarData["bodyColors"][3] + avatar.left_leg_color_id = newAvatarData["bodyColors"][4] + avatar.right_leg_color_id = newAvatarData["bodyColors"][5] + avatar.r15 = newAvatarData["rigType"] == "R15" + + if "scales" in newAvatarData: + if "height" not in newAvatarData["scales"] or "width" not in newAvatarData["scales"] or "head" not in newAvatarData["scales"] or "proportion" not in newAvatarData["scales"]: + return jsonify({"success": False, "message": "Invalid request"}), 400 + if newAvatarData["scales"]["height"] < ScalingLimits["height"]["min"] or newAvatarData["scales"]["height"] > ScalingLimits["height"]["max"]: + return jsonify({"success": False, "message": "Invalid height scale"}), 400 + if newAvatarData["scales"]["width"] < ScalingLimits["width"]["min"] or newAvatarData["scales"]["width"] > ScalingLimits["width"]["max"]: + return jsonify({"success": False, "message": "Invalid width scale"}), 400 + if newAvatarData["scales"]["head"] < ScalingLimits["head"]["min"] or newAvatarData["scales"]["head"] > ScalingLimits["head"]["max"]: + return jsonify({"success": False, "message": "Invalid head scale"}), 400 + if newAvatarData["scales"]["proportion"] < ScalingLimits["proportion"]["min"] or newAvatarData["scales"]["proportion"] > ScalingLimits["proportion"]["max"]: + return jsonify({"success": False, "message": "Invalid proportion scale"}), 400 + + avatar.height_scale = round(newAvatarData["scales"]["height"], 2) + avatar.width_scale = round(newAvatarData["scales"]["width"], 2) + avatar.head_scale = round(newAvatarData["scales"]["head"], 2) + avatar.proportion_scale = round(newAvatarData["scales"]["proportion"], 2) + + db.session.commit() + + UserThumbnail.query.filter_by(userid=AuthenticatedUser.id).delete() + db.session.commit() + TakeUserThumbnail(AuthenticatedUser.id, True, False) + return jsonify({"success": True}), 200 + +@AvatarRoute.route("/avatar/forceredraw", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def force_redraw(): + AuthenticatedUser : User = auth.GetCurrentUser() + if redis_controller.get(f"avatar:lock:{AuthenticatedUser.id}") is not None: + return jsonify({"success": False, "message": "A redraw has recently been started please try again later."}), 429 + redis_controller.set(f"avatar:lock:{AuthenticatedUser.id}", "1", ex=5) + UserThumbnail.query.filter_by(userid=AuthenticatedUser.id).delete() + db.session.commit() + TakeUserThumbnail(AuthenticatedUser.id, True, True) + return jsonify({"success": True}), 200 + +@AvatarRoute.route("/avatar/isthumbnailready", methods=["GET"]) +@auth.authenticated_required_api +@csrf.exempt +def is_thumbnail_ready(): + AuthenticateUser : User = auth.GetCurrentUser() + UserThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=AuthenticateUser.id).first() + if UserThumbnailObj is None: + return jsonify({"success": True, "ready": False}), 200 + else: + if UserThumbnailObj.full_contenthash is None: + return jsonify({"success": True, "ready": False}), 200 + return jsonify({"success": True, "ready": True}), 200 \ No newline at end of file diff --git a/app/pages/catalog/asset.html b/app/pages/catalog/asset.html new file mode 100644 index 0000000..0117b0b --- /dev/null +++ b/app/pages/catalog/asset.html @@ -0,0 +1,184 @@ +{% extends '__layout__.html' %} +{% block title %}{{asset.name}}{% endblock %} +{% block head %} + + + +
+ +{% endblock %} +{% block content %} +
+
+ < Return to Catalog +

{{asset.name}}

+
+
+
+ {{asset.name}} + {% if asset.is_limited: %}

LIMITED {%if asset.is_limited_unique: %}U{%else%}{%endif%}

{% endif %} +
+
+
+
+ {% if asset.creator_type == 0 :%} + {{creator.username}} +
+

Creator: {{creator.username}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% else %} + {{creator.name}} +
+

Creator: {{creator.name}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% endif %} +
+
+

+ {{asset.description}} +

+
+
+ {% if OffsaleAt: %} +

Offsale in: 00:00:00

+ {% endif %} +
+ {% if asset.is_for_sale: %} + {% if asset.price_robux == 0 and asset.price_tix == 0: %} +

Price: FREE

+ Take One + {% endif %} + {% if asset.price_robux > 0: %} +

Price: {{asset.price_robux}} Robux

+ Buy with Robux + {% endif %} + {% if asset.price_robux > 0 and asset.price_tix > 0: %} +
+
+

OR

+
+
+ {% endif %} + {% if asset.price_tix > 0: %} +

Price: {{asset.price_tix}} Tickets

+ Buy with Tickets + {% endif %} + {% else: %} + {% if asset.is_limited: %} + {% if BestPrice != "None": %} +

Best Price: R$ {{BestPrice}}

+ {% if BestPriceResult.userid != currentuser.id %} + Buy Now + {%else%} + Buy with Robux + {%endif%} + {%else%} + No Resellers Available + {%endif%} + {% if userOwnAmountCount > 0: %} +

( {{userOwnAmountCount}} owned )

+ {%endif%} + {%else%} +

Price: Offsale

+ Buy with Robux + {%endif%} + {% endif %} +

( {{asset.sale_count}} sold )

+
+ {% if asset.is_limited and userOwnAmountCount > 0 and not asset.is_for_sale: %} + + {%endif%} +
+
+ {% if asset.is_limited and not asset.is_for_sale: %} +
+
+
+
Private Sales
+ {% for sale in PrivateSales: %} +
+ {{sale.seller}} +
+ {{sale.seller}} +

R$ {{sale.price}}

+

Serial: {%if asset.is_limited_unique: %}{{sale.serial}}{%else%}N/A{%endif%}

+
+
+ {% if sale.sellerid != currentuser.id: %} + + {%else%} + + {%endif%} +
+
+ {%endfor%} +
+ {% if PreviousPage > 0: %} + Previous + {%else%} + Previous + {% endif %} +

{{PageNumber}}

+ {% if NextPage > 0: %} + Next + {%else%} + Next + {% endif %} +
+
+
+

Recent Average Price: R${{AssetRap}}

+
+
+ {%endif%} +
+
+ +{% endblock %} diff --git a/app/pages/catalog/badges.html b/app/pages/catalog/badges.html new file mode 100644 index 0000000..87b8d39 --- /dev/null +++ b/app/pages/catalog/badges.html @@ -0,0 +1,53 @@ +{% extends '__layout__.html' %} +{% block title %}{{badge.name}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

{{badge.name}}

+
+
+
+ {{badge.name}} +
+ {% if AssociatedPlaceAssetObj != None: %} +
+

Earn this Badge in: {{AssociatedPlaceAssetObj.name}}

+ +
+ {% endif %} +
+
+
+ {% if AssociatedPlaceAssetObj.creator_type == 0 :%} + {{creator.username}} +
+

Creator: {{creator.username}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% else %} + {{creator.name}} +
+

Creator: {{creator.name}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% endif %} +
+
+

+ {{badge.description}} +

+
+
+
+
+{% endblock %} diff --git a/app/pages/catalog/catalog.py b/app/pages/catalog/catalog.py new file mode 100644 index 0000000..99dc014 --- /dev/null +++ b/app/pages/catalog/catalog.py @@ -0,0 +1,824 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.util import auth, turnstile, websiteFeatures +from app.routes.thumbnailer import TakeUserThumbnail +from app.util.redislock import acquire_lock, release_lock +from app.extensions import db, csrf, limiter, redis_controller, user_limiter +from app.models.asset import Asset +from app.models.usereconomy import UserEconomy +from app.models.userassets import UserAsset +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.user import User +from app.models.package_asset import PackageAsset +from app.models.gamepass_link import GamepassLink +from app.models.asset_rap import AssetRap +from app.models.groups import Group +from app.models.place_badge import PlaceBadge, UserBadge +from app.models.universe import Universe +from app.models.limited_item_transfers import LimitedItemTransfer +from app.routes.badgesapi import CalculateBadgeRarity, GetBadgeAwardedPastDay +from app.pages.catalog.catalogtypes import CatalogTypes +from app.pages.messages.messages import CreateSystemMessage +from slugify import slugify +from datetime import datetime +from sqlalchemy import text, and_, or_ +import math +from app.enums.AssetType import AssetType +from app.util.transactions import CreateTransactionForSale +import logging +import calendar +import time +import redis_lock +from app.util.membership import GetUserMembership +from app.enums.MembershipType import MembershipType +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod +from app.services.economy import IncrementTargetBalance, AdjustAssetRap, GetAssetRap, TaxCurrencyAmount, GetUserBalance, GetGroupBalance, DecrementTargetBalance,EconomyLockAcquireException, InsufficientFundsException +from app.services.groups import GetUserFromId, GetGroupFromId + +CatalogRoute = Blueprint('catalog', __name__, template_folder="pages", url_prefix="/catalog") +LibraryRoute = Blueprint('library', __name__, template_folder="pages", url_prefix="/library") +BadgesPageRoute = Blueprint('badges_page', __name__, template_folder="pages", url_prefix="/badges") + +def IncrementAssetCreator( AssetObject : Asset, AmountGiven : int, CurrencyType : int): + """ Increments the robux of the asset creator""" + CurrencyToGive = math.floor(AmountGiven * 0.7) + if CurrencyToGive <= 0: + return True + + if AssetObject.creator_type == 0: + # User + IncrementTargetBalance(GetUserFromId(AssetObject.creator_id), CurrencyToGive, CurrencyType) + return True + + elif AssetObject.creator_type == 1: + # Group + IncrementTargetBalance(GetGroupFromId(AssetObject.creator_id), CurrencyToGive, CurrencyType) + return True + +def ConvertQueryToAsset( queryResult ): + """Converts a query result to a dict with the same keys as the Asset model""" + return { + "id": queryResult[0], + "roblox_asset_id": queryResult[1], + "name": queryResult[2], + "description": queryResult[3], + "created_at": queryResult[4], + "updated_at": queryResult[5], + "asset_type": queryResult[6], + "asset_genre": queryResult[7], + "creator_type": queryResult[8], + "creator_id": queryResult[9], + "moderation_status": queryResult[10], + "is_for_sale": queryResult[11], + "price_robux": queryResult[12], + "price_tix": queryResult[13], + "is_limited": queryResult[14], + "is_limited_unique": queryResult[15], + "serial_count": queryResult[16], + "sale_count": queryResult[17], + "offsale_at": queryResult[18] + } + +OrderTypes = { + 0: "created_at DESC", # Default + 1: "price_robux ASC", # Lowest to Highest + 2: "price_robux DESC", # Highest to Lowest + 3: "updated_at DESC", # Recently Updated + 4: "sale_count DESC" # Best Selling +} + +import urllib.parse + +@CatalogRoute.route("/", methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +def catalog_search(): + CategoryType = int(request.args.get(key="category", default=0, type=int)) + OrderBy = request.form.get(key="order-by", default=0, type=int) + if OrderBy not in OrderTypes: + OrderBy = 0 + SearchQuery = request.form.get(key="search-input", default="", type=str) + if len(SearchQuery) < 3: + SearchQuery = "" + if SearchQuery == "": + return redirect(f"/catalog/?sort={OrderBy}&category={str(CategoryType)}") + # Make sure the query is url safe + SearchQuery = urllib.parse.quote(SearchQuery) + + return redirect(f"/catalog/?q={SearchQuery}&sort={OrderBy}&category={str(CategoryType)}") + +@CatalogRoute.route("/", methods=["GET"]) +@auth.authenticated_required +def catalog_page(): + CatalogType = int(request.args.get("category", 0)) + if CatalogType not in CatalogTypes: + return redirect("/catalog/") + if request.args.get("page") is None: + Page = 1 + else: + try: + Page = int(request.args.get("page")) + except: + Page = 1 + SearchInput = request.args.get("q", "", type=str) + """ + Types of sorting: + 0 - Relevance (Default) [ Just sort by created_at ] + 1 - Price (Lowest to Highest) + 2 - Price (Highest to Lowest) + 3 - Recently Updated + 4 - Best Selling + """ + if request.args.get("sort") is None: + SortType = 0 + else: + try: + SortType = int(request.args.get("sort")) + except: + SortType = 0 + if SortType > 4 or SortType < 0: + SortType = 0 + SearchQuery = Asset.query + CatalogTypesDict = { + 0: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.TShirt, + AssetType.Shirt, + AssetType.Pants, + AssetType.Gear, + AssetType.Face, + AssetType.Head, + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + AssetType.Package + ))).filter(and_(Asset.creator_id == 1, Asset.creator_type == 0)).filter(or_( + Asset.is_for_sale == True, Asset.is_limited == True + )), + 1: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + ))).filter(and_(Asset.creator_id == 1, Asset.creator_type == 0)).filter(or_( + Asset.is_for_sale == True, Asset.is_limited == True + )), + 2: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Gear).filter(and_(Asset.creator_id == 1, Asset.creator_type == 0, Asset.is_for_sale == True)), + 3: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Face).filter(and_(Asset.creator_id == 1, Asset.creator_type == 0, Asset.is_for_sale == True)), + 4: lambda queryObj: queryObj.filter_by(is_limited = True), + 5: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + ))).filter_by(is_limited = True), + 6: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Gear).filter_by(is_limited = True), + 7: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Face).filter_by(is_limited = True), + 8: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.TShirt, + AssetType.Shirt, + AssetType.Pants, + AssetType.Package, + ))).filter_by(is_for_sale = True), + 9: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Hat, + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + ))).filter_by(is_for_sale = True), + 10: lambda queryObj: queryObj.filter_by(asset_type = AssetType.Shirt).filter_by(is_for_sale = True), + 11: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.TShirt).filter_by(is_for_sale = True), + 12: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Pants).filter_by(is_for_sale = True), + 13: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Package).filter_by(is_for_sale = True), + 14: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.Head, + AssetType.Face, + AssetType.Package + ))).filter_by(is_for_sale = True), + 15: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Head).filter_by(is_for_sale = True), + 16: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.Face).filter_by(is_for_sale = True), + 41: lambda queryObj: queryObj.filter(Asset.asset_type == AssetType.HairAccessory).filter_by(is_for_sale = True), + } + if CatalogType > 41 or CatalogType < 0: + CatalogType = 0 + SearchQuery = CatalogTypesDict[CatalogType](SearchQuery) + if SearchInput != "" and len(SearchInput) > 3: + SearchQuery = SearchQuery.filter( Asset.name.ilike(f"%{SearchInput}%") ) + else: + SearchInput = "" + if SortType == 0: + SearchQuery = SearchQuery.order_by(Asset.created_at.desc()) + elif SortType == 1: + SearchQuery = SearchQuery.order_by(Asset.price_robux.asc()) + elif SortType == 2: + SearchQuery = SearchQuery.order_by(Asset.price_robux.desc()) + elif SortType == 3: + SearchQuery = SearchQuery.order_by(Asset.updated_at.desc()) + elif SortType == 4: + SearchQuery = SearchQuery.order_by(Asset.sale_count.desc()) + else: + SearchQuery = SearchQuery.order_by(Asset.created_at.desc()) + SearchQuery = SearchQuery.paginate( + page=Page, + per_page=24, + error_out=False + ) + for AssetObj in SearchQuery.items: + if AssetObj.is_limited and not AssetObj.is_for_sale: + BestPriceResult : UserAsset = UserAsset.query.filter_by(assetid=AssetObj.id, is_for_sale=True).order_by(UserAsset.price.asc()).first() + if BestPriceResult is not None: + AssetObj.best_price = str(BestPriceResult.price) + else: + AssetObj.best_price = "--" + if Page == 1: + PreviousPage = -1 + else: + PreviousPage = Page -1 + if SearchQuery.has_next: + NextPage = Page + 1 + else: + NextPage = -1 + + return render_template("catalog/index.html", + categoryname=CatalogTypes[CatalogType]["name"], + queryResults = SearchQuery.items, + categoryid=CatalogType, + PreviousPage=PreviousPage, + NextPage=NextPage, + PageNumber=Page, + CatalogType=CatalogType, + SortType=SortType, + query=SearchInput, + totalPages = SearchQuery.pages, + totalResults = SearchQuery.total) + +@CatalogRoute.route("//", methods=["GET"]) +@CatalogRoute.route("//", methods=["GET"]) +@auth.authenticated_required +def asset_page(assetid, assetname=None): + AssetObject : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObject is None: + return redirect("/catalog") + SlugName = slugify(AssetObject.name, lowercase=False) + if SlugName is None or SlugName == "": + SlugName = "unnamed" + if assetname is None: + if request.args.get("page") is None: + return redirect(f"/catalog/{assetid}/{SlugName}") + else: + return redirect(f"/catalog/{assetid}/{SlugName}?page={request.args.get('page')}") + if assetname != SlugName: + if request.args.get("page") is None: + return redirect(f"/catalog/{assetid}/{SlugName}") + else: + return redirect(f"/catalog/{assetid}/{SlugName}?page={request.args.get('page')}") + if AssetObject.asset_type.value not in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + if AssetObject.asset_type.value == 9: + return redirect(f"/games/{assetid}/") + if AssetObject.asset_type.value in [1,3,4,5,10,13,24,34,38,40]: + return redirect(f"/library/{assetid}/") + return redirect("/catalog/") + + CreatorObj : User | Group = User.query.filter_by(id=AssetObject.creator_id).first() if AssetObject.creator_type == 0 else Group.query.filter_by(id=AssetObject.creator_id).first() + Created = AssetObject.created_at.strftime("%d/%m/%Y") + Updated = AssetObject.updated_at.strftime("%d/%m/%Y") + AuthenticatedUser : User = auth.GetCurrentUser() + doesUserOwnAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).first() is not None + BestPriceResult : UserAsset = UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).first() + BestPrice = "None" + if BestPriceResult is not None: + BestPrice = str(BestPriceResult.price) + UserOwns = 0 + PrivateSaleList = [] + NextPage = 0 + PreviousPage = 0 + PageNumber = 0 + AssetRap = 0 + if AssetObject.is_limited and not AssetObject.is_for_sale: + AssetRap = GetAssetRap(assetid) + UserOwns = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).count() + Page = 1 + if request.args.get("page"): + try: + Page = int(request.args.get("page")) + except: + pass + PrivateSales = UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).paginate(page=Page, per_page=5) + for sale in PrivateSales.items: + SellerUser : User = User.query.filter_by(id=sale.userid).first() + PrivateSaleList.append({ + "price": sale.price, + "seller": SellerUser.username, + "sellerid": SellerUser.id, + "serial": sale.serial, + "uaid": sale.id + }) + if PrivateSales.has_next: + NextPage = Page + 1 + else: + NextPage = -1 + if Page > 1: + PreviousPage = Page - 1 + else: + PreviousPage = -1 + PageNumber = Page + OffsaleAt = None + if AssetObject.offsale_at is not None: + if datetime.utcnow() > AssetObject.offsale_at: + AssetObject.is_for_sale = False + AssetObject.offsale_at = None + db.session.commit() + else: + OffsaleAt = int(calendar.timegm(AssetObject.offsale_at.timetuple())) + return render_template("catalog/asset.html", asset=AssetObject, creator=CreatorObj, createddate=Created, + updateddate=Updated, doesUserOwnAsset=doesUserOwnAsset, BestPrice=BestPrice, + BestPriceResult=BestPriceResult, userOwnAmountCount=UserOwns, PrivateSales=PrivateSaleList, + NextPage=NextPage, PreviousPage=PreviousPage, PageNumber=PageNumber, AssetRap=AssetRap, + OffsaleAt=OffsaleAt) + +@CatalogRoute.route("/resell/", methods=["GET"]) +@auth.authenticated_required +def resell_page(assetid): + AssetObject : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObject is None: + return redirect("/catalog") + if not AssetObject.is_limited: + return redirect(f"/catalog/{str(AssetObject.id)}/") + if AssetObject.is_for_sale: + return redirect(f"/catalog/{str(AssetObject.id)}/") # Users cant resell items when it is still for sale + AuthenticatedUser : User = auth.GetCurrentUser() + UserOwns = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).count() + if UserOwns == 0: + return redirect(f"/catalog/{str(AssetObject.id)}/") + AllUserAssets = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).all() + UserAssetCurrentlyForSale = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid, is_for_sale=True).count() + UserAssetNotForSale = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid, is_for_sale=False).count() + return render_template("catalog/resell.html", asset=AssetObject, userassets=AllUserAssets, userassetforsalecount=UserAssetCurrentlyForSale, userassetnotforsalecount=UserAssetNotForSale, isOTPRequired = AuthenticatedUser.TOTPEnabled) + +@CatalogRoute.route("/resell/", methods=["POST"]) +@auth.authenticated_required +@user_limiter.limit("1/second") +def resell_page_post(assetid): + AssetObject : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObject is None: + return redirect("/catalog") + if not AssetObject.is_limited: + return redirect(f"/catalog/{str(AssetObject.id)}/") + if AssetObject.is_for_sale: + return redirect(f"/catalog/{str(AssetObject.id)}/") + AuthenticatedUser : User = auth.GetCurrentUser() + if "uaid" not in request.form or "itemprice" not in request.form: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + try: + ItemPrice = int(request.form["itemprice"]) + UAID = int(request.form["uaid"]) + except: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=UAID).first() + if UserAssetObj is None: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if UserAssetObj.userid != AuthenticatedUser.id: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if UserAssetObj.assetid != AssetObject.id: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + + if not websiteFeatures.GetWebsiteFeature("ItemReselling"): + flash("Item reselling is currently disabled", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + + if AuthenticatedUser.TOTPEnabled: + if "2fa-code" not in request.form: + flash("Invalid request", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + TOTPCode = request.form["2fa-code"] + if len(TOTPCode) != 6: + flash("Invalid 2FA code", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if not auth.Validate2FACode(AuthenticatedUser.id, TOTPCode): + flash("Invalid 2FA code", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if ItemPrice < 1 or ItemPrice > 999999999: + flash("Invalid price ( 1 - 999999999 )", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + if UserAssetObj.is_for_sale: + flash("This asset is already for sale", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub: + flash("You must be a Builders Club member to sell items", "error") + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + UserAssetObj.is_for_sale = True + UserAssetObj.price = ItemPrice + db.session.commit() + return redirect(f"/catalog/resell/{str(AssetObject.id)}") + +@CatalogRoute.route("/resell//takeoff", methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +def resell_takeoff(uaid): + AuthenticatedUser : User = auth.GetCurrentUser() + UserAssetObject : UserAsset = UserAsset.query.filter_by(id=uaid).first() + if UserAssetObject is None: + flash("Invalid asset", "error") + return redirect("/catalog") + if UserAssetObject.userid != AuthenticatedUser.id: + flash("Invalid asset", "error") + return redirect("/catalog") + if not UserAssetObject.is_for_sale: + flash("This asset is not for sale", "error") + return redirect(f"/catalog/resell/{str(UserAssetObject.assetid)}") + UserAssetObject.is_for_sale = False + UserAssetObject.price = 0 + db.session.commit() + return redirect(f"/catalog/resell/{str(UserAssetObject.assetid)}") + +@CatalogRoute.route("/api/purchase", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("1/second") +@user_limiter.limit("1/second") +def api_purchase(): + JSONData = request.json + if "assetId" not in JSONData or "expectedPrice" not in JSONData or "currencyType" not in JSONData: + return jsonify({"success": False, "message": "Invalid request"}),400 + + if not websiteFeatures.GetWebsiteFeature("EconomyPurchase"): + return jsonify({"success": False, "message": "Purchasing is temporarily disabled"}),400 + + try: + JSONData["assetId"] = int(JSONData["assetId"]) + JSONData["expectedPrice"] = int(JSONData["expectedPrice"]) + JSONData["currencyType"] = int(JSONData["currencyType"]) + except: + return jsonify({"success": False, "message": "Invalid request"}),400 + + AssetObject : Asset = Asset.query.filter_by(id=JSONData["assetId"]).first() + if AssetObject is None: + return jsonify({"success": False, "message": "Invalid asset"}),400 + + AuthenticatedUser : User = auth.GetCurrentUser() + + try: + with redis_lock.Lock(redis_client = redis_controller, name=f"asset:{str(AssetObject.id)}", expire=15, auto_renewal=True, strict=True) as lock: + if AssetObject.offsale_at is not None: + if datetime.utcnow() > AssetObject.offsale_at: + AssetObject.is_for_sale = False + AssetObject.offsale_at = None + db.session.commit() + if AssetObject.is_for_sale == False: + return jsonify({"success": False, "message": "Asset is not for sale"}),400 + if JSONData["currencyType"] == 0: + if JSONData["expectedPrice"] != AssetObject.price_robux: + return jsonify({"success": False, "message": "Expected Price is different from current price"}),400 + elif JSONData["currencyType"] == 1: + if JSONData["expectedPrice"] != AssetObject.price_tix: + return jsonify({"success": False, "message": "Expected Price is different from current price"}),400 + else: + return jsonify({"success": False, "message": "Invalid currency type"}),400 + + if AssetObject.price_robux == 0 and AssetObject.price_tix != 0 and JSONData["currencyType"] == 0: + return jsonify({"success": False, "message": "Asset is not being sold in this currency"}),400 + if AssetObject.price_tix == 0 and AssetObject.price_robux != 0 and JSONData["currencyType"] == 1: + return jsonify({"success": False, "message": "Asset is not being sold in this currency"}),400 + + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=AssetObject.id).first() + if UserAssetObj is not None: + return jsonify({"success": False, "message": "User already owns asset"}),400 + PurchaserRobuxBal, PurchaserTicketsBal = GetUserBalance(AuthenticatedUser) + if JSONData["currencyType"] == 0: + if PurchaserRobuxBal < AssetObject.price_robux: + return jsonify({"success": False, "message": "Insufficient funds"}),400 + try: + DecrementTargetBalance( + Target = AuthenticatedUser, + Amount = AssetObject.price_robux, + CurrencyType = 0 + ) + except InsufficientFundsException: + return jsonify({"success": False, "message": "Insufficient funds"}),400 + except EconomyLockAcquireException: + return jsonify({"success": False, "message": "Failed to acquire lock"}),400 + except Exception as e: + logging.error(f"/api/purchase : Failed to decrement balance for user {str(AuthenticatedUser.id)}, message: {str(e)}") + return jsonify({"success": False, "message": "Failed to decrement balance"}),400 + + IncrementAssetCreator( + AssetObject = AssetObject, + AmountGiven = AssetObject.price_robux, + CurrencyType = 0 + ) + elif JSONData["currencyType"] == 1: + if PurchaserTicketsBal < AssetObject.price_tix: + return jsonify({"success": False, "message": "Insufficient funds"}),400 + + try: + DecrementTargetBalance( + Target = AuthenticatedUser, + Amount = AssetObject.price_tix, + CurrencyType = 1 + ) + except InsufficientFundsException: + return jsonify({"success": False, "message": "Insufficient funds"}),400 + except EconomyLockAcquireException: + return jsonify({"success": False, "message": "Failed to acquire lock"}),400 + except Exception as e: + logging.error(f"/api/purchase : Failed to decrement balance for user {str(AuthenticatedUser.id)}, message: {str(e)}") + return jsonify({"success": False, "message": "Failed to decrement balance"}),400 + + IncrementAssetCreator( + AssetObject = AssetObject, + AmountGiven = AssetObject.price_tix, + CurrencyType = 1 + ) + else: + return jsonify({"success": False, "message": "Invalid currency type"}),400 + + if AssetObject.is_limited_unique: + ItemSerial = AssetObject.sale_count + 1 + if AssetObject.sale_count + 1 >= AssetObject.serial_count: + AssetObject.is_for_sale = False + if AssetObject.is_limited_unique: + UserAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=AssetObject.id, serial=ItemSerial) + else: + UserAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=AssetObject.id) + + if AssetObject.asset_type == AssetType.Package: + PackageAssets = PackageAsset.query.filter_by(package_asset_id=AssetObject.id).all() + for PackageAssetObj in PackageAssets: + NewPackageAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=PackageAssetObj.asset_id) + db.session.add(NewPackageAssetObj) + + AssetObject.sale_count += 1 + db.session.add(UserAssetObj) + db.session.commit() + + try: + if AssetObject.creator_type == 0: + SellerUserObj : User = User.query.filter_by(id=AssetObject.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObject, + PurchasePrice = JSONData["expectedPrice"], + PurchaseCurrencyType = JSONData["currencyType"], + Seller = SellerUserObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + else: + GroupObj : Group = Group.query.filter_by(id=AssetObject.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObject, + PurchasePrice = JSONData["expectedPrice"], + PurchaseCurrencyType = JSONData["currencyType"], + Seller = GroupObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + except Exception as e: + logging.warn(f"Failed to create transaction log for sale of asset {str(AssetObject.id)}, message: {str(e)}") + pass + + return jsonify({"success": True, "message": "Asset purchased successfully"}),200 + except AssertionError as e: + return jsonify({"success": False, "message": "Failed to acquire lock"}),400 + +@CatalogRoute.route("/api/purchase-limited", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("1/second") +@user_limiter.limit("1/second") +def api_purchase_limited(): + JSONData = request.json + if "assetId" not in JSONData or "expectedPrice" not in JSONData or "expectedOwner" not in JSONData or "itemOwnershipId" not in JSONData: + return jsonify({"success": False, "message": "Invalid request"}),400 + # Expected Types: assetId (int), expectedPrice (int), expectedOwner (int), itemOwnershipId (int) + if type(JSONData["assetId"]) != int or type(JSONData["expectedPrice"]) != int or type(JSONData["expectedOwner"]) != int or type(JSONData["itemOwnershipId"]) != int: + return jsonify({"success": False, "message": "Invalid request"}),400 + AuthenticatedUser : User = auth.GetAuthenticatedUser(request.cookies.get(".ROBLOSECURITY")) + EconomyLock = acquire_lock(f"economy:{str(AuthenticatedUser.id)}", acquire_timeout=5, lock_timeout=1) + if EconomyLock is False: + return jsonify({"success": False, "message": "Failed to acquire lock"}),400 + AssetObject : Asset = Asset.query.filter_by(id=JSONData["assetId"]).first() + if AssetObject is None: + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "Invalid asset"}),400 + if AssetObject.is_limited == False: + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "Asset is not limited"}),400 + LimitedAsset : UserAsset = UserAsset.query.filter_by(assetid=AssetObject.id, id=JSONData["itemOwnershipId"]).first() + if LimitedAsset is None: + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "Invalid asset info"}),400 + ItemLock = acquire_lock(f"item:{str(LimitedAsset.id)}", acquire_timeout=5, lock_timeout=1) + if ItemLock is False: + return jsonify({"success": False, "message": "Failed to acquire lock ( This is usually caused by too many people purchasing this item at the same time. )"}),400 + if LimitedAsset.is_for_sale == False: + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "Item is not for sale"}),400 + if JSONData["expectedOwner"] != LimitedAsset.userid: + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": f"Expected Owner ({str(JSONData['expectedOwner'])}) does not match current item owner({str(LimitedAsset.userid)})"}),400 + if JSONData["expectedPrice"] != LimitedAsset.price: + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": f"Expected Price ({str(JSONData['expectedPrice'])}) does not match current item price ({str(LimitedAsset.price)})"}),400 + if AuthenticatedUser.id == LimitedAsset.userid: + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + return jsonify({"success": False, "message": "You cannot purchase your own item"}),400 + + UserEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=AuthenticatedUser.id).first() + if UserEconomyObj.robux < LimitedAsset.price: + redis_controller.delete(f"economy:{str(AuthenticatedUser.id)}") + return jsonify({"success": False, "message": "Insufficient funds"}),400 + + UserEconomyObj.robux -= LimitedAsset.price + OriginalPrice : int = LimitedAsset.price + db.session.commit() + IncrementTargetBalance(GetUserFromId(LimitedAsset.userid), TaxCurrencyAmount(LimitedAsset.price), 0) + AdjustAssetRap(LimitedAsset.assetid, LimitedAsset.price) + LimitedAsset.userid = AuthenticatedUser.id + LimitedAsset.is_for_sale = False + LimitedAsset.price = 0 + LimitedAsset.updated = datetime.utcnow() + db.session.commit() + # We release the locks first as taking a thumbnail can take a while + release_lock(f"economy:{str(AuthenticatedUser.id)}", EconomyLock) + release_lock(f"item:{str(LimitedAsset.id)}", ItemLock) + PreviousOwnerId : int = JSONData["expectedOwner"] + # Check how many items the previous owner had of the same asset + PreviousOwnerItems = UserAsset.query.filter_by(userid=PreviousOwnerId, assetid=AssetObject.id).count() + if PreviousOwnerItems == 0: + # Remove the asset from the previous owner avatar if there is any + AvatarAsset = UserAvatarAsset.query.filter_by(user_id=PreviousOwnerId, asset_id=AssetObject.id).first() + if AvatarAsset is not None: + db.session.delete(AvatarAsset) + db.session.commit() + TakeUserThumbnail(PreviousOwnerId, True, False) + CreateSystemMessage( + f"Your {AssetObject.name} has been sold!", + f"Your item {AssetObject.name} ( UAID: {str(LimitedAsset.id)} / Serial: {str(LimitedAsset.serial)} ) has been sold for R$ {str(OriginalPrice)} to {AuthenticatedUser.username} ( {str(AuthenticatedUser.id)} ).", + PreviousOwnerId + ) + SellerUserObj : User = User.query.filter_by(id=PreviousOwnerId).first() + + try: + CreateTransactionForSale( + AssetObj = AssetObject, + PurchasePrice = OriginalPrice, + PurchaseCurrencyType = 0, + Seller = SellerUserObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + except Exception as e: + logging.warn(f"Failed to create transaction log for sale of asset {str(AssetObject.id)}, message: {str(e)}") + pass + + try: + newLimitedTransfer = LimitedItemTransfer( + original_owner_id = SellerUserObj.id, + new_owner_id = AuthenticatedUser.id, + asset_id = AssetObject.id, + user_asset_id = LimitedAsset.id, + transfer_method = LimitedItemTransferMethod.Purchase, + purchased_price = OriginalPrice + ) + db.session.add(newLimitedTransfer) + db.session.commit() + except Exception as e: + logging.warn(f"Failed to create limited item transfer log for asset {str(AssetObject.id)}, message: {str(e)}") + pass + + return jsonify({"success": True, "message": "Item purchased successfully"}),200 + + +@LibraryRoute.route("//", methods=["GET"]) +@LibraryRoute.route("//", methods=["GET"]) +@auth.authenticated_required +def asset_page(assetid, assetname=None): + AssetObject : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObject is None: + return redirect("/library") + SlugName = slugify(AssetObject.name, lowercase=False) + if SlugName is None or SlugName == "": + SlugName = "unnamed" + if assetname is None: + if request.args.get("page") is None: + return redirect(f"/library/{assetid}/{SlugName}") + else: + return redirect(f"/library/{assetid}/{SlugName}?page={request.args.get('page')}") + if assetname != SlugName: + if request.args.get("page") is None: + return redirect(f"/library/{assetid}/{SlugName}") + else: + return redirect(f"/library/{assetid}/{SlugName}?page={request.args.get('page')}") + if AssetObject.asset_type.value in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + return redirect(f"/catalog/{str(AssetObject.id)}/") + if AssetObject.asset_type.value == 9: + return redirect(f"/games/{assetid}/") + CreatorObj : User | Group = User.query.filter_by(id=AssetObject.creator_id).first() if AssetObject.creator_type == 0 else Group.query.filter_by(id=AssetObject.creator_id).first() + Created = AssetObject.created_at.strftime("%d/%m/%Y") + Updated = AssetObject.updated_at.strftime("%d/%m/%Y") + AuthenticatedUser : User = auth.GetCurrentUser() + doesUserOwnAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).first() is not None + BestPriceResult : UserAsset = UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).first() + BestPrice = "None" + if BestPriceResult is not None: + BestPrice = str(BestPriceResult.price) + UserOwns = 0 + PrivateSaleList = [] + NextPage = 0 + PreviousPage = 0 + PageNumber = 0 + AssetRap = 0 + if AssetObject.is_limited and not AssetObject.is_for_sale: + AssetRap = GetAssetRap(assetid) + UserOwns = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=assetid).count() + Page = 1 + if request.args.get("page"): + try: + Page = int(request.args.get("page")) + except: + pass + PrivateSales = UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).paginate(page=Page, per_page=5).items + for sale in PrivateSales: + SellerUser : User = User.query.filter_by(id=sale.userid).first() + PrivateSaleList.append({ + "price": sale.price, + "seller": SellerUser.username, + "sellerid": SellerUser.id, + "serial": sale.serial, + "uaid": sale.id + }) + if len(UserAsset.query.filter_by(assetid=assetid, is_for_sale=True).order_by(UserAsset.price.asc()).paginate(page=Page+1, per_page=5, error_out=False).items) > 0: + NextPage = Page + 1 + else: + NextPage = -1 + if Page > 1: + PreviousPage = Page - 1 + else: + PreviousPage = -1 + PageNumber = Page + + GamepassLinkObj = None + GamepassRootPlaceAsset = None + if AssetObject.asset_type == AssetType.GamePass: + GamepassLinkObj : GamepassLink = GamepassLink.query.filter_by(gamepass_id=AssetObject.id).first() + GamepassUniverse : Universe = Universe.query.filter_by(id=GamepassLinkObj.universe_id).first() + GamepassRootPlaceAsset : Asset = Asset.query.filter_by( id = GamepassUniverse.root_place_id ).first() + return render_template("catalog/library.html", asset=AssetObject, creator=CreatorObj, createddate=Created, + updateddate=Updated, doesUserOwnAsset=doesUserOwnAsset, BestPrice=BestPrice, + BestPriceResult=BestPriceResult, userOwnAmountCount=UserOwns, PrivateSales=PrivateSaleList, + NextPage=NextPage, PreviousPage=PreviousPage, PageNumber=PageNumber, AssetRap=AssetRap, + GamepassLinkObj=GamepassLinkObj, GamepassRootPlaceAsset=GamepassRootPlaceAsset) + +@BadgesPageRoute.route("//", methods=["GET"]) +@BadgesPageRoute.route("//", methods=["GET"]) +@auth.authenticated_required +def badge_page( badgeid : int, badgename : str = None ): + BadgeObject : PlaceBadge = PlaceBadge.query.filter_by(id=badgeid).first() + if BadgeObject is None: + return abort(404) + + if badgename is None: + return redirect(f"/badges/{badgeid}/{slugify(BadgeObject.name, lowercase=False)}") + elif badgename != slugify(BadgeObject.name, lowercase=False): + return redirect(f"/badges/{badgeid}/{slugify(BadgeObject.name, lowercase=False)}") + + AuthenticatedUser : User = auth.GetCurrentUser() + UserBadgeObj : UserBadge = UserBadge.query.filter_by(user_id=AuthenticatedUser.id, badge_id=badgeid).first() + AssociatedPlaceAssetObj : Asset = Asset.query.filter_by(id=BadgeObject.associated_place_id).first() + CreatorObj : User | Group = User.query.filter_by(id=AssociatedPlaceAssetObj.creator_id).first() if AssociatedPlaceAssetObj.creator_type == 0 else Group.query.filter_by(id=AssociatedPlaceAssetObj.creator_id).first() + Created = BadgeObject.created_at.strftime("%d/%m/%Y") + Updated = BadgeObject.updated_at.strftime("%d/%m/%Y") + + return render_template( + "catalog/badges.html", + badge = BadgeObject, + userbadge = UserBadgeObj, + AssociatedPlaceAssetObj = AssociatedPlaceAssetObj, + creator = CreatorObj, + createddate = Created, + updateddate = Updated + ) diff --git a/app/pages/catalog/catalogtypes.py b/app/pages/catalog/catalogtypes.py new file mode 100644 index 0000000..dab4ae5 --- /dev/null +++ b/app/pages/catalog/catalogtypes.py @@ -0,0 +1,76 @@ +from app.models.asset import Asset + +CatalogTypes = { + 0 : { + "name": "Featured Items", + "query": "SELECT * FROM asset WHERE asset_type IN ('TShirt','Hat','Shirt','Pants','Decal','Head','Face','Gear','Package','HairAccessory','FaceAccessory','NeckAccessory','ShoulderAccessory','FrontAccessory','FrontAccessory','BackAccessory','WaistAccessory') AND creator_id = 1 AND creator_type = 0 AND (is_for_sale = true OR is_limited = true)" + }, + 1 : { + "name": "Featured Hats", + "query": "SELECT * FROM asset WHERE asset_type IN ('Hat','HairAccessory','FaceAccessory','NeckAccessory','ShoulderAccessory','FrontAccessory','FrontAccessory','BackAccessory','WaistAccessory') AND creator_id = 1 AND creator_type = 0 AND (is_for_sale = true OR is_limited = true)" + }, + 2 : { + "name": "Featured Gears", + "query": "SELECT * FROM asset WHERE asset_type IN ('Gear') AND creator_id = 1 AND creator_type = 0 AND (is_for_sale = true OR is_limited = true)" + }, + 3 : { + "name": "Featured Faces", + "query": "SELECT * FROM asset WHERE asset_type IN ('Face') AND creator_id = 1 AND creator_type = 0 AND (is_for_sale = true OR is_limited = true)" + }, + 4 : { + "name": "Collectible Items", + "query": "SELECT * FROM asset WHERE is_limited = true" + }, + 5 : { + "name": "Collectible Hats", + "query": "SELECT * FROM asset WHERE asset_type IN ('Hat','HairAccessory','FaceAccessory','NeckAccessory','ShoulderAccessory','FrontAccessory','FrontAccessory','BackAccessory','WaistAccessory') AND is_limited = true" + }, + 6 : { + "name": "Collectible Gears", + "query": "SELECT * FROM asset WHERE asset_type IN ('Gear') AND is_limited = true" + }, + 7 : { + "name": "Collectible Faces", + "query": "SELECT * FROM asset WHERE asset_type IN ('Face') AND is_limited = true" + }, + 8 : { + "name": "All Clothing", + "query": "SELECT * FROM asset WHERE asset_type IN ('TShirt','Hat','Shirt','Pants','Package') AND is_for_sale = true" + }, + 9 : { + "name": "Hats", + "query": "SELECT * FROM asset WHERE asset_type IN ('Hat','HairAccessory','FaceAccessory','NeckAccessory','ShoulderAccessory','FrontAccessory','FrontAccessory','BackAccessory','WaistAccessory') AND is_for_sale = true" + }, + 10 : { + "name": "Shirts", + "query": "SELECT * FROM asset WHERE asset_type IN ('Shirt') AND is_for_sale = true" + }, + 11 : { + "name": "T-Shirts", + "query": "SELECT * FROM asset WHERE asset_type IN ('TShirt') AND is_for_sale = true" + }, + 12 : { + "name": "Pants", + "query": "SELECT * FROM asset WHERE asset_type IN ('Pants') AND is_for_sale = true" + }, + 13 : { + "name": "Packages", + "query": "SELECT * FROM asset WHERE asset_type in ('Package') AND is_for_sale = true" + }, + 14 : { + "name": "Body Parts", + "query": "SELECT * FROM asset WHERE asset_type IN ('Head','Face') AND is_for_sale = true" + }, + 15 : { + "name": "Heads", + "query": "SELECT * FROM asset WHERE asset_type IN ('Head') AND is_for_sale = true" + }, + 16 : { + "name": "Faces", + "query": "SELECT * FROM asset WHERE asset_type IN ('Face') AND is_for_sale = true" + }, + 41 : { + "name": "Hairs", + "query": "SELECT * FROM asset WHERE asset_type IN ('HairAccessory') AND (is_for_sale = true OR is_limited = true)" + }, +} diff --git a/app/pages/catalog/index.html b/app/pages/catalog/index.html new file mode 100644 index 0000000..9150638 --- /dev/null +++ b/app/pages/catalog/index.html @@ -0,0 +1,185 @@ +{% extends '__layout__.html' %} +{% block title %}Catalog{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+
+

Catalog

+
+
+
+
+ + +
+
+ + +
+ +
+
+
+
+
+ + +
+
+
+{% endblock %} diff --git a/app/pages/catalog/library.html b/app/pages/catalog/library.html new file mode 100644 index 0000000..6ecabe8 --- /dev/null +++ b/app/pages/catalog/library.html @@ -0,0 +1,186 @@ +{% extends '__layout__.html' %} +{% block title %}{{asset.name}}{% endblock %} +{% block head %} + + + +
+ +{% endblock %} +{% block content %} +
+
+

{{asset.name}}

+
+
+
+ {{asset.name}} + {% if asset.is_limited: %}

LIMITED {%if asset.is_limited_unique: %}U{%else%}{%endif%}

{% endif %} +
+ {% if GamepassLinkObj != None: %} +
+

Use this Gamepass in: {{GamepassRootPlaceAsset.name}}

+ +
+ {% endif %} +
+
+
+ {% if asset.creator_type == 0 :%} + {{creator.username}} +
+

Creator: {{creator.username}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% else %} + {{creator.name}} +
+

Creator: {{creator.name}}

+

Created: {{createddate}}

+

Updated: {{updateddate}}

+
+ {% endif %} +
+
+

+ {{asset.description}} +

+
+
+
+ {% if asset.is_for_sale: %} + {% if asset.price_robux == 0 and asset.price_tix == 0: %} +

Price: FREE

+ Take One + {% endif %} + {% if asset.price_robux > 0: %} +

Price: {{asset.price_robux}} Robux

+ Buy with Robux + {% endif %} + {% if asset.price_robux > 0 and asset.price_tix > 0: %} +
+
+

OR

+
+
+ {% endif %} + {% if asset.price_tix > 0: %} +

Price: {{asset.price_tix}} Tickets

+ Buy with Tickets + {% endif %} + {% else: %} + {% if asset.is_limited: %} + {% if BestPrice != "None": %} +

Best Price: R$ {{BestPrice}}

+ {% if BestPriceResult.userid != currentuser.id %} + Buy Now + {%else%} + Buy with Robux + {%endif%} + {%else%} + No Resellers Available + {%endif%} + {% if userOwnAmountCount > 0: %} +

( {{userOwnAmountCount}} owned )

+ {%endif%} + {%else%} +

Price: Offsale

+ Buy with Robux + {%endif%} + {% endif %} +

( {{asset.sale_count}} sold )

+
+ {% if asset.is_limited and userOwnAmountCount > 0 and not asset.is_for_sale: %} + + {%endif%} +
+
+ {% if asset.is_limited and not asset.is_for_sale: %} +
+
+
+
Private Sales
+ {% for sale in PrivateSales: %} +
+ {{sale.seller}} +
+ {{sale.seller}} +

R$ {{sale.price}}

+

Serial: {%if asset.is_limited_unique: %}{{sale.serial}}{%else%}N/A{%endif%}

+
+
+ {% if sale.sellerid != currentuser.id: %} + + {%else%} + + {%endif%} +
+
+ {%endfor%} +
+ {% if PreviousPage > 0: %} + Previous + {%else%} + Previous + {% endif %} +

{{PageNumber}}

+ {% if NextPage > 0: %} + Next + {%else%} + Next + {% endif %} +
+
+
+

Recent Average Price: R${{AssetRap}}

+
+
+ {%endif%} +
+
+ +{% endblock %} diff --git a/app/pages/catalog/resell.html b/app/pages/catalog/resell.html new file mode 100644 index 0000000..456ba6d --- /dev/null +++ b/app/pages/catalog/resell.html @@ -0,0 +1,65 @@ +{% extends '__layout__.html' %} +{% block title %}{{asset.name}}{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ < Return to Item Page +

{{asset.name}}

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} + {% if userassetnotforsalecount > 0: %} +
+
+ + +

Note: Once sold you will only recieve 70% of the actual price it was sold for.

+ {%if isOTPRequired: %} + +

As you have 2FA Enabled it is required to authorise any sale of your items

+ {%endif%} + + +
+ {%endif%} + {% if userassetforsalecount > 0: %} +
+
Manage onsale items
+ {% for userasset in userassets %} + {% if userasset.is_for_sale: %} +
+
+
+
UAID: {{userasset.id}} | Serial: {% if asset.is_limited_unique: %}{{userasset.serial}}{%else%}N/A{%endif%}
+

Price: {{userasset.price}}

+
+
+
+ +
+
+
+
+ {%endif%} + {%endfor%} + {%endif%} +
+
+{% endblock %} diff --git a/app/pages/clientpages/clientpages.py b/app/pages/clientpages/clientpages.py new file mode 100644 index 0000000..606e200 --- /dev/null +++ b/app/pages/clientpages/clientpages.py @@ -0,0 +1,11 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify + +ClientPages = Blueprint('clientpages', __name__, template_folder="pages") + +@ClientPages.route("/UploadMedia/PostImage.aspx", methods=["GET"]) +def UploadMediaPostImage(): + seostr = request.args.get("seostr") + filename = request.args.get("filename") + if seostr is None or filename is None: + return "Invalid request" + return render_template("clientpages/screenshot.html", seostr=seostr, filename=filename) \ No newline at end of file diff --git a/app/pages/clientpages/screenshot.html b/app/pages/clientpages/screenshot.html new file mode 100644 index 0000000..2907474 --- /dev/null +++ b/app/pages/clientpages/screenshot.html @@ -0,0 +1,17 @@ + + + + Screenshot + + + +

Syntax Screenshot

+

Hey, you just took a screenshot in Syntax! You could:

+
    +
  • Go to My Pictures folder to check it out!
  • +
  • Paste it to your favorite painting software
  • +
+
+ Not interested, don't bother me again + + \ No newline at end of file diff --git a/app/pages/clothingmigrator/index.html b/app/pages/clothingmigrator/index.html new file mode 100644 index 0000000..1715d15 --- /dev/null +++ b/app/pages/clothingmigrator/index.html @@ -0,0 +1,41 @@ +{% extends '__layout__.html' %} +{% block title %}Clothing Migrator{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +

Clothing Migrator

+

This will take a clothing from the Roblox website and will be sold for 5 robux. ( Allowed assets: TShirt, Shirt, Pants )

+
+
+ +
+
+ +
+ +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/clothingmigrator/migrator.py b/app/pages/clothingmigrator/migrator.py new file mode 100644 index 0000000..b5e75ed --- /dev/null +++ b/app/pages/clothingmigrator/migrator.py @@ -0,0 +1,61 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash +from app.extensions import db, redis_controller, limiter +from app.util import auth, turnstile, websiteFeatures +from app.models.asset import Asset +from app.models.asset_version import AssetVersion +from app.routes.asset import migrateAsset +from datetime import datetime +import re + +ClothingMigratorRoute = Blueprint('clothingmigrator', __name__, template_folder='pages') + +@ClothingMigratorRoute.route('/clothing-migrator', methods=['GET']) +@auth.authenticated_required +def clothing_migrator(): + return render_template('clothingmigrator/index.html') + +@ClothingMigratorRoute.route('/clothing-migrator', methods=['POST']) +@auth.authenticated_required +@limiter.limit("1/second") +def clothing_migrator_post(): + if not websiteFeatures.GetWebsiteFeature("ClothingMigrator"): + flash("Clothing migration is temporarily disabled", "error") + return redirect("/clothing-migrator") + + if "asseturl" not in request.form or "cf-turnstile-response" not in request.form: + flash("Please fill in all the fields", "error") + return redirect("/clothing-migrator") + AssetRegex = re.compile(r".com\/catalog\/(\d+)\/") + AssetMatch = AssetRegex.search(request.form.get("asseturl")) + if AssetMatch is None: + flash("Invalid asset URL", "error") + return redirect("/clothing-migrator") + AssetID = AssetMatch.group(1) + if not turnstile.VerifyToken(request.form.get("cf-turnstile-response")): + flash("Invalid captcha", "error") + return redirect("/clothing-migrator") + AssetObject : Asset = Asset.query.filter_by(roblox_asset_id=AssetID).first() + if AssetObject is not None: + return redirect(f"/catalog/{AssetID}/") + AuthenticatedUser = auth.GetCurrentUser() + DayOfYear = datetime.utcnow().timetuple().tm_yday + RedisResult = redis_controller.get(f"clothingmigrator:{str(AuthenticatedUser.id)}:{str(DayOfYear)}") + if RedisResult is None: + redis_controller.setex(f"clothingmigrator:{str(AuthenticatedUser.id)}:{str(DayOfYear)}", 86400, "1") + else: + Count = int(RedisResult) + if Count >= 5: + flash("You have reached the daily limit of 5 per day, please try again tommorow.", "error") + return redirect("/clothing-migrator") + redis_controller.setex(f"clothingmigrator:{str(AuthenticatedUser.id)}:{str(DayOfYear)}", 86400, str(Count + 1)) + MigratedAsset : Asset = migrateAsset(AssetID, forceMigration=False, allowedTypes=[2, 11, 12], creatorId=2, keepRobloxId=False, migrateInfo=True) + if MigratedAsset is None: + flash("Unable to migrate asset", "error") + return redirect("/clothing-migrator") + if MigratedAsset.creator_id == 2 and MigratedAsset.creator_type == 0: + if (datetime.utcnow() - MigratedAsset.created_at).total_seconds() < 2: + MigratedAsset.is_for_sale = True + MigratedAsset.price_robux = 5 + MigratedAsset.description = f"This item was taken from the Roblox Catalog using the Clothing Migrator. This item was requested by {AuthenticatedUser.username} ({AuthenticatedUser.id})." + db.session.commit() + return redirect(f"/catalog/{str(MigratedAsset.id)}/") diff --git a/app/pages/cryptomus/dashboard.html b/app/pages/cryptomus/dashboard.html new file mode 100644 index 0000000..54743f3 --- /dev/null +++ b/app/pages/cryptomus/dashboard.html @@ -0,0 +1,74 @@ +{% extends '__layout__.html' %} +{% block title %}Cryptomus Dashboard{% endblock %} +{% block head %} +{% endblock %} +{% block content %} +
+ Return to payment methods +
+

Pay with Cryptomus

+ +
+
+
+
+ {% if len(UserInvoices.items) == 0 %} +

No past payments

+ {% else %} + {% for invoice in UserInvoices.items %} +
+
+
{{invoice.cryptomus_invoice_id}}
+
+

{{invoice.created_at.strftime("%d/%m/%Y %H:%M:%S UTC")}}

+

| {{invoice.status.name}}

+
+
+ View Payment +
+ {% endfor %} + {% endif %} +
+
+ Previous +

Page {{UserInvoices.page}} of {{UserInvoices.pages}}

+ Next +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/cryptomus/view_payment.html b/app/pages/cryptomus/view_payment.html new file mode 100644 index 0000000..b9ce9d9 --- /dev/null +++ b/app/pages/cryptomus/view_payment.html @@ -0,0 +1,63 @@ +{% extends '__layout__.html' %} +{% block title %}View Payment{% endblock %} +{% block head %} +{% endblock %} +{% block content %} +
+ Return to payment dashboard +
+
+
+

Invoice

+

ID: {{InvoiceObj.cryptomus_invoice_id}}

+
+ +
+
+
+
+
+

Invoice Details

+
+

Created at: {{InvoiceObj.created_at.strftime("%d/%m/%Y %H:%M:%S UTC")}}

+

Expires at: {{InvoiceObj.expires_at.strftime("%d/%m/%Y %H:%M:%S UTC")}}

+

Last Status Update: {{InvoiceObj.updated_at.strftime("%d/%m/%Y %H:%M:%S UTC")}}

+

Invoice Status: {{InvoiceObj.status.name}}

+

Is Finalised: {% if InvoiceObj.is_final %}Yes{% else %}No{% endif %}

+
+
+
+

Payment Details

+
+

Required Amount: {{ round( InvoiceObj.required_amount, 2 )}} {{InvoiceObj.currency}}

+

USD received: {{ round( InvoiceObj.paid_amount_usd, 2 )}} USD

+
+
+
+
+
+

Additional Details

+
+ {% if InvoiceObj.assigned_key == None %} +

No additional details

+ {% else %} +
+

Outrageous Builders Club 1 Month

+
+ + +
+

Redeem this key at www.syntax.eco/giftcard-redeem or give it to a friend

+
+ {% endif %} +
+
+
+
+
+

If you have any issues with paying, viewing or receving your item please open a billing ticket in our Discord Server

+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/currencyexchange/controller.py b/app/pages/currencyexchange/controller.py new file mode 100644 index 0000000..85703d0 --- /dev/null +++ b/app/pages/currencyexchange/controller.py @@ -0,0 +1,378 @@ +from app.services.economy import GetUserBalance, DecrementTargetBalance, IncrementTargetBalance +from app.enums.TransactionType import TransactionType +from app.models.exchange_offer import ExchangeOffer +from app.models.user import User +from app.util import auth, transactions, redislock, websiteFeatures +from app.extensions import db, limiter, redis_controller +from datetime import datetime, timedelta +from app.pages.messages.messages import CreateSystemMessage +from sqlalchemy import case +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, flash, abort + +import redis_lock +CurrencyExchangeRoute = Blueprint("currencyexchange", __name__, url_prefix="/currency-exchange") + +@CurrencyExchangeRoute.errorhandler(429) +def ratelimit_handler(e): + flash("You are being ratelimited.", "danger") + return redirect(request.referrer) + +@CurrencyExchangeRoute.route("/", methods=["GET"]) +@auth.authenticated_required +def index(): + CategoryType : str = request.args.get( + key = "category", + default = "all", + type = str + ) + SortType : str = request.args.get( + key = "sort", + default = "best", + type = str + ) + PageNumber : int = request.args.get( + key = "page", + default = 1, + type = int + ) + + if CategoryType not in ["tr", "rt", "all"]: + CategoryType = "all" + if SortType not in ["best", "worst", "created"]: + SortType = "best" + if PageNumber < 1: + PageNumber = 1 + + QueryObj = ExchangeOffer.query + QueryObj = QueryObj.filter_by( + reciever_id = None + ) + if CategoryType == "tr": + QueryObj = QueryObj.filter_by( + offer_currency_type = 1 + ) + elif CategoryType == "rt": + QueryObj = QueryObj.filter_by( + offer_currency_type = 0 + ) + + if SortType == "best": + if CategoryType == "rt": + QueryObj = QueryObj.order_by( + ExchangeOffer.ratio.asc() + ) + elif CategoryType == "tr": + QueryObj = QueryObj.order_by( + ExchangeOffer.ratio.desc() + ) + else: + QueryObj = QueryObj.order_by( + ExchangeOffer.worth.desc() + ) + elif SortType == "worst": + if CategoryType == "rt": + QueryObj = QueryObj.order_by( + ExchangeOffer.ratio.desc() + ) + elif CategoryType == "tr": + QueryObj = QueryObj.order_by( + ExchangeOffer.ratio.asc() + ) + else: + QueryObj = QueryObj.order_by( + ExchangeOffer.worth.asc() + ) + else: + QueryObj = QueryObj.order_by( + ExchangeOffer.created_at.desc() + ) + + QueryObj = QueryObj.paginate( + page = PageNumber, + per_page = 15, + error_out = False + ) + + for Offer in QueryObj.items: + Offer : ExchangeOffer + if Offer.expires_at < datetime.utcnow(): + IncrementTargetBalance(Offer.creator, Offer.offer_value, Offer.offer_currency_type) + transactions.CreateTransaction( + Reciever = Offer.creator, + Sender = User.query.filter_by(id = 1).first(), + CurrencyAmount = Offer.offer_value, + CurrencyType = Offer.offer_currency_type, + TransactionType = TransactionType.Sale, + AssetId = None, + CustomText = "Offer expired." + ) + + db.session.delete(Offer) + db.session.commit() + continue + + return render_template( + "currencyexchange/index.html", + offers = QueryObj.items, + hasNextPage = QueryObj.has_next, + hasPrevPage = QueryObj.has_prev, + PageCategory = CategoryType, + SortType = SortType, + PageNumber = PageNumber + ) + +@CurrencyExchangeRoute.route("/view/", methods=["GET"]) +@auth.authenticated_required +def viewOffer(OfferId : int): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + if OfferObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + return render_template( + "currencyexchange/view.html", + offer = OfferObj, + AuthenticatedUser = AuthenticatedUser + ) + +@CurrencyExchangeRoute.route("/delete/", methods=["POST"]) +@auth.authenticated_required +def deleteOffer(OfferId : int): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + if OfferObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if OfferObj.creator_id != AuthenticatedUser.id: + return abort(403) + + if websiteFeatures.GetWebsiteFeature("CurrencyExchange") is False: + flash("Currency exchange is currently disabled.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"currency_exchange_order:{OfferId}", expire = 15, auto_renewal = True ): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + if OfferObj.reciever_id is not None: + return abort(403) + + IncrementTargetBalance(OfferObj.creator, OfferObj.offer_value, OfferObj.offer_currency_type) + transactions.CreateTransaction( + Reciever = OfferObj.creator, + Sender = User.query.filter_by(id = 1).first(), + CurrencyAmount = OfferObj.offer_value, + CurrencyType = OfferObj.offer_currency_type, + TransactionType = TransactionType.Sale, + AssetId = None, + CustomText = "Offer cancelled." + ) + + db.session.delete(OfferObj) + db.session.commit() + + flash("Offer successfully deleted.", "success") + return redirect("/currency-exchange/") + except AssertionError: + flash("Failed to delete offer, try again later.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + +@CurrencyExchangeRoute.route("/fill/", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("40/minute") +def fillOffer(OfferId : int): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + if OfferObj is None: + return abort(404) + + if websiteFeatures.GetWebsiteFeature("CurrencyExchange") is False: + flash("Currency exchange is currently disabled.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + + LockName = f"currency_exchange_order:{str(OfferId)}" + try: + with redis_lock.Lock( redis_client = redis_controller, name = LockName, expire = 15, auto_renewal = True ): + OfferObj : ExchangeOffer = ExchangeOffer.query.filter_by( + id = OfferId + ).first() + + AuthenticatedUser : User = auth.GetCurrentUser() + if OfferObj.creator_id == AuthenticatedUser.id: + return abort(403) + if OfferObj.reciever_id is not None: + return abort(403) + + if OfferObj.expires_at < datetime.utcnow(): + return abort(403) + + SendingCurrencyType : int = 0 if OfferObj.offer_currency_type == 1 else 1 + UserRobuxBal, UserTicketsBal = GetUserBalance(AuthenticatedUser) + if SendingCurrencyType == 0: + if UserRobuxBal < OfferObj.receive_value: + flash("You do not have enough Robux to fill this offer.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + else: + if UserTicketsBal < OfferObj.receive_value: + flash("You do not have enough Tickets to fill this offer.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + + transactions.CreateTransaction( + Reciever = OfferObj.creator, + Sender = User.query.filter_by(id = 1).first(), # Remain anonymous + CurrencyAmount = OfferObj.receive_value, + CurrencyType = SendingCurrencyType, + TransactionType = TransactionType.Sale, + AssetId = None, + CustomText = f"Currency Exchange Order ({OfferId}) Filled" + ) + transactions.CreateTransaction( + Reciever = AuthenticatedUser, + Sender = User.query.filter_by(id = 1).first(), # Remain anonymous + CurrencyAmount = OfferObj.offer_value, + CurrencyType = OfferObj.offer_currency_type, + TransactionType = TransactionType.Sale, + AssetId = None, + CustomText = f"Currency Exchange Order ({OfferId}) Filled" + ) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id = 1).first(), # Remain anonymous + Sender = AuthenticatedUser, + CurrencyAmount = OfferObj.receive_value, + CurrencyType = SendingCurrencyType, + TransactionType = TransactionType.Purchase, + AssetId = None, + CustomText = f"Currency Exchange Order ({OfferId}) Filled" + ) + DecrementTargetBalance(AuthenticatedUser, OfferObj.receive_value, SendingCurrencyType) + IncrementTargetBalance(AuthenticatedUser, OfferObj.offer_value, OfferObj.offer_currency_type) + IncrementTargetBalance(OfferObj.creator, OfferObj.receive_value, SendingCurrencyType) + + OfferObj.reciever_id = AuthenticatedUser.id + db.session.commit() + + CreateSystemMessage( + subject = "Offer Filled", + message = f"Your currency exchange offer ({OfferId}) has been filled, you have received {OfferObj.receive_value} {'Robux' if OfferObj.offer_currency_type == 1 else 'Tickets'} in exchange for {OfferObj.offer_value} {'Robux' if OfferObj.offer_currency_type == 0 else 'Tickets'}.", + userid = OfferObj.creator_id + ) + + flash("Offer successfully filled.", "success") + return redirect(f"/currency-exchange/view/{OfferId}") + except AssertionError: + flash("Failed to fill offer, try again later.", "error") + return redirect(f"/currency-exchange/view/{OfferId}") + +@CurrencyExchangeRoute.route("/create", methods=["GET"]) +@auth.authenticated_required +def createOfferPage(): + return render_template("currencyexchange/create.html") + +@CurrencyExchangeRoute.route("/create", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("40/minute") +def createOffer(): + AuthenticatedUser : User = auth.GetCurrentUser() + + OfferCurrencyType : int = request.form.get( + key = "offer-currency-type", + default = None, + type = int + ) + OfferValue : int = request.form.get( + key = "offer-currency-amount", + default = None, + type = int + ) + ReceiveValue : int = request.form.get( + key = "exchange-currency-amount", + default = None, + type = int + ) + if OfferCurrencyType is None or OfferValue is None or ReceiveValue is None: + flash("Invalid request", "error") + return redirect("/currency-exchange/create") + + if OfferValue <= 0 or ReceiveValue <= 0: + flash("Invalid request", "error") + return redirect("/currency-exchange/create") + + if websiteFeatures.GetWebsiteFeature("CurrencyExchange") is False: + flash("Currency exchange is currently disabled.", "error") + return redirect(f"/currency-exchange/create") + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"currency_exchange_create_offer:{AuthenticatedUser.id}", expire = 15, auto_renewal = True ): + ActiveOffers : int = ExchangeOffer.query.filter_by( + creator_id = AuthenticatedUser.id, + reciever_id = None + ).filter( + ExchangeOffer.expires_at > datetime.utcnow() + ).count() + + if ActiveOffers >= 25: + flash("You have too many active offers, please cancel them to create a new offer.", "error") + return redirect("/currency-exchange/create") + + if OfferCurrencyType == 0: + if OfferValue < 5: + flash("You can only create offers of 5 Robux or more.", "error") + return redirect("/currency-exchange/create") + if OfferValue > 10000: + flash("You can only create offers up to 10,000 Robux.", "error") + return redirect("/currency-exchange/create") + Ratio = ReceiveValue / OfferValue + else: + if OfferValue < 10: + flash("You can only create offers of 10 Tickets or more.", "error") + return redirect("/currency-exchange/create") + if OfferValue > 100000: + flash("You can only create offers up to 100,000 Tickets.", "error") + return redirect("/currency-exchange/create") + Ratio = OfferValue / ReceiveValue + + if Ratio < 2 or Ratio > 20: + flash("Bad exchange ratio", "error") + return redirect("/currency-exchange/create") + + UserRobuxBal, UserTicketsBal = GetUserBalance(AuthenticatedUser) + if OfferCurrencyType == 0 and UserRobuxBal < OfferValue: + flash("You do not have enough Robux to create this offer.", "error") + return redirect("/currency-exchange/create") + elif OfferCurrencyType == 1 and UserTicketsBal < OfferValue: + flash("You do not have enough Tickets to create this offer.", "error") + return redirect("/currency-exchange/create") + + DecrementTargetBalance(AuthenticatedUser, OfferValue, OfferCurrencyType) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id=1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = OfferValue, + CurrencyType = OfferCurrencyType, + TransactionType = TransactionType.Purchase, + CustomText = "Created Exchange Order" + ) + + NewOffer : ExchangeOffer = ExchangeOffer( + creator_id = AuthenticatedUser.id, + offer_value = OfferValue, + receive_value = ReceiveValue, + offer_currency_type = OfferCurrencyType, + created_at = datetime.utcnow(), + expires_at = datetime.utcnow() + timedelta(days=31), + ratio = Ratio, + worth = abs( 20 - Ratio ) if OfferCurrencyType == 0 else ( 20 - abs( Ratio - 20 ) ) + ) + db.session.add(NewOffer) + db.session.commit() + + flash("Offer created successfully", "success") + return redirect("/currency-exchange/") + except AssertionError: + flash("Failed to create offer, try again later.", "error") + return redirect("/currency-exchange/create") \ No newline at end of file diff --git a/app/pages/currencyexchange/create.html b/app/pages/currencyexchange/create.html new file mode 100644 index 0000000..9eb92c3 --- /dev/null +++ b/app/pages/currencyexchange/create.html @@ -0,0 +1,168 @@ +{% extends '__layout__.html' %} +{% block title %}Create Offer{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+
+
+
You are offering
+
+
+
+
+ + +
+
+ + +
+
+
+
+
In exchange for
+
+
+
+
+ + +
+
+ + +
+
+

Robux to Tix Ratio: 0:0

+ + +
+
+
+ Return to Currency Exchange +

New Exchange Offer

+

You can create an offer to be placed onto the currency exchange system, this will allow other users to trade for example Robux to Tickets or vice versa.

+ +

Note: The minimum for Robux to Tix is 1:2 while the maximum is 1:20

+
+
+
+ + +{% endblock %} \ No newline at end of file diff --git a/app/pages/currencyexchange/index.html b/app/pages/currencyexchange/index.html new file mode 100644 index 0000000..0285a47 --- /dev/null +++ b/app/pages/currencyexchange/index.html @@ -0,0 +1,114 @@ +{% extends '__layout__.html' %} +{% block title %}Currency Exchange{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+

Currency Exchange

+ +
+
+ + +
+
+ + +
+
+ + + + + + + + + + + + + {% for OfferObj in offers: %} + + + + + + + + + {% endfor %} + +
DateExpiresOfferingRequestingR:T RatioAction
{{ OfferObj.created_at.strftime("%d/%m/%Y") }}{{ OfferObj.expires_at.strftime("%d/%m/%Y") }} + {% if OfferObj.offer_currency_type == 0 %} + R$ {{OfferObj.offer_value}} + {% else %} + T$ {{OfferObj.offer_value}} + {% endif %} + + {% if OfferObj.offer_currency_type == 1 %} + R$ {{OfferObj.receive_value}} + {% else %} + T$ {{OfferObj.receive_value}} + {% endif %} + + 1:{{round(OfferObj.ratio, 3)}} + View
+ {% if len(offers) == 0: %} +
+

No offers found

+
+ {%endif%} +
+ Previous +

Page {{PageNumber}}

+ Next +
+
+ + +{% endblock %} \ No newline at end of file diff --git a/app/pages/currencyexchange/view.html b/app/pages/currencyexchange/view.html new file mode 100644 index 0000000..83c6ded --- /dev/null +++ b/app/pages/currencyexchange/view.html @@ -0,0 +1,78 @@ +{% extends '__layout__.html' %} +{% block title %}View Offer{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + + Return to Currency Exchange +

Viewing Offer

+ {% if offer.creator_id == AuthenticatedUser.id: %} +

This offer was created by you

+ {% endif %} +
+
+
Offering
+

{% if offer.offer_currency_type == 0: %}R${%else%}T${%endif%}{{offer.offer_value}}

+
+
+
R:T Ratio
+

1:{{round(offer.ratio,3)}}

+
+
+
Requesting
+

{% if offer.offer_currency_type == 1: %}R${%else%}T${%endif%}{{offer.receive_value}}

+
+
+
+

Created: {{offer.created_at.strftime("%b %d, %Y %I:%M %p")}} UTC

+

Expires: {{offer.expires_at.strftime("%b %d, %Y %I:%M %p")}} UTC

+ {% if offer.reciever_id != None: %} +

This order has already been filled

+ {% else: %} + {% if offer.creator_id == AuthenticatedUser.id: %} +
+ + +
+ {%else%} +
+ + +
+ {%endif%} + {%endif%} +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/develop.py b/app/pages/develop/develop.py new file mode 100644 index 0000000..02607bc --- /dev/null +++ b/app/pages/develop/develop.py @@ -0,0 +1,2002 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, abort, after_this_request, Response +from app.util import auth, redislock, websiteFeatures, s3helper, transactions +from app.util.assetvalidation import ValidateClothingImage, ValidatePlaceFile, ValidateMP3File, ValidateMP3AndConvertToOGG +from app.routes.thumbnailer import TakeThumbnail +from app.models.userassets import UserAsset +from app.util.assetversion import CreateNewAssetVersion, GetLatestAssetVersion +from app.util.textfilter import FilterText +from app.util.membership import GetUserMembership +from app.util.placeinfo import ClearUniversePlayingCountCache, ClearPlayingCountCache +from app.enums.MembershipType import MembershipType +from app.enums.ChatStyle import ChatStyle +from app.models.place import Place +from app.models.asset_version import AssetVersion +from app.models.asset import Asset +from app.models.user import User +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.gameservers import GameServer +from app.models.asset_moderation_link import AssetModerationLink +from app.extensions import db, limiter, csrf, user_limiter +from app.models.place_icon import PlaceIcon +from app.models.asset_thumbnail import AssetThumbnail +from app.models.gamepass_link import GamepassLink +from app.models.place_developer_product import DeveloperProduct +from app.models.product_receipt import ProductReceipt +from app.models.groups import Group, GroupRole, GroupRolePermission, GroupMember +from app.models.place_badge import PlaceBadge, UserBadge +from app.models.universe import Universe +from app.enums.AssetType import AssetType +from app.enums.TransactionType import TransactionType +from app.enums.PlaceYear import PlaceYear +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.services import economy, groups +from datetime import datetime, timedelta +from io import BytesIO +from config import Config +import requests +import logging +import hashlib +import os +import random +import time +import math + +config = Config() + +DevelopPagesRoute = Blueprint('DevelopPagesRoute', __name__, template_folder='pages') + +def CountAlphanumericCharacters( string : str ): + count = 0 + for char in string: + if char.isalnum(): + count += 1 + return count + +@DevelopPagesRoute.errorhandler( 429 ) +def handle_ratelimit_reached(e): + flash("You are being rate limited, please try again later", "error") + return redirect(request.referrer) + +@DevelopPagesRoute.route('/develop') +@auth.authenticated_required +def develop(): + PageType = request.args.get('type', default = 9, type = int) + PageNumber = request.args.get('page', default = 1, type = int) + GroupIdContext = request.args.get('groupId', default = None, type = int) + + AuthenticatedUser : User = auth.GetCurrentUser() + + CreatorId : int = AuthenticatedUser.id + CreatorType : int = 0 + + if GroupIdContext is not None and GroupIdContext > 0: + GroupContext : Group = Group.query.filter_by(id=GroupIdContext).first() + if GroupContext is None: + return abort(404) + ViewerGroupRole : GroupRole | None = groups.GetUserRolesetInGroup( AuthenticatedUser, GroupContext ) + if ViewerGroupRole is None: + return abort(403) + ViewerRolePermissions : GroupRolePermission = groups.GetRolesetPermission( ViewerGroupRole ) + if not ViewerRolePermissions.manage_items: + return abort(403) + + CreatorId = GroupContext.id + CreatorType = 1 + else: + GroupIdContext = None + + UserGroups : list[Group] = Group.query.join(GroupMember, GroupMember.group_id == Group.id).filter(GroupMember.user_id == AuthenticatedUser.id).join(GroupRolePermission, GroupRolePermission.group_role_id == GroupMember.group_role_id).filter(GroupRolePermission.manage_items == True).all() + + PreviousPage = -1 + if PageNumber > 1: + PreviousPage = PageNumber - 1 + NextPage = -1 + if PageType == 9: + # Get all the places + UserPlaces : list[Asset] = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Place ).join( Universe, Universe.root_place_id == Asset.id ).filter( Universe.id != None ).order_by( Universe.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserPlaces.has_next: + NextPage = PageNumber + 1 + def GetPlaceUniverse( AssetObj : Asset ): + return Universe.query.filter_by( root_place_id = AssetObj.id ).first() + return render_template('develop/subpages/games.html', PageType=PageType, UserPlaces=UserPlaces.items, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups, GetPlaceUniverse = GetPlaceUniverse) + elif PageType == 11: + # Get all the clothing + UserClothing : list[Asset] = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Shirt ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserClothing.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/shirts.html', PageType=PageType, UserClothing=UserClothing.items, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 12: + UserClothing : list[Asset] = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Pants ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserClothing.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/pants.html', PageType=PageType, UserClothing=UserClothing.items, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 2: + UserClothing = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.TShirt ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserClothing.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/tshirt.html', PageType=PageType, UserClothing=UserClothing, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 3: + UserSounds = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Audio ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserSounds.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/sound.html', PageType=PageType, UserSounds=UserSounds, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + elif PageType == 1: + UserImages = Asset.query.filter_by( creator_id=CreatorId, creator_type = CreatorType, asset_type=AssetType.Image ).order_by( Asset.updated_at.desc() ).paginate(page = PageNumber, per_page = 10, error_out = False) + if UserImages.has_next: + NextPage = PageNumber + 1 + return render_template('develop/subpages/image.html', PageType=PageType, UserImages=UserImages, PreviousPage=PreviousPage, NextPage=NextPage, PageNumber= PageNumber, GroupIdContext = GroupIdContext, UserGroups = UserGroups) + else: + return redirect(url_for("DevelopPagesRoute.develop")) + +@DevelopPagesRoute.route("/develop/create/", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("15/minute") +@user_limiter.limit("15/minute") +def create(ReqAssetType): + if ReqAssetType not in [9, 11, 12, 2, 3, 1]: + flash("Invalid asset type", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + if not websiteFeatures.GetWebsiteFeature("AssetCreation"): + flash("Asset creation is temporarily disabled", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + AuthenticatedUser : User = auth.GetCurrentUser() + TargetCreatorObj : User | Group = AuthenticatedUser + CreatorType = 0 + + groupIdContext = request.form.get(key = "groupIdContext", default = None, type = int) + if groupIdContext is not None and groupIdContext > 0: + GroupContext : Group = Group.query.filter_by(id=groupIdContext).first() + if GroupContext is None: + return abort(404) + ViewerGroupRole : GroupRole | None = groups.GetUserRolesetInGroup( AuthenticatedUser, GroupContext ) + if ViewerGroupRole is None: + return abort(403) + ViewerRolePermissions : GroupRolePermission = groups.GetRolesetPermission( ViewerGroupRole ) + if not ViewerRolePermissions.manage_items: + return abort(403) + if not ViewerRolePermissions.create_items: + flash("You do not have permission to create assets in this group", "error") + return redirect(url_for("DevelopPagesRoute.develop", groupId=groupIdContext, type=ReqAssetType)) + if ReqAssetType == 9 and not ViewerRolePermissions.manage_group_games: + flash("You do not have permission to create places in this group", "error") + return redirect(url_for("DevelopPagesRoute.develop", groupId=groupIdContext, type=ReqAssetType)) + + TargetCreatorObj = GroupContext + CreatorType = 1 + + CreateLockName = f"createasset_{TargetCreatorObj.id}" + CreateLock = redislock.acquire_lock(CreateLockName, acquire_timeout=10, lock_timeout=1) + if CreateLock is None: + flash("You are creating too many assets at once", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + @after_this_request + def handle_group_context( response : Response ): + if groupIdContext is not None and groupIdContext > 0: + response = redirect(url_for("DevelopPagesRoute.develop", groupId=groupIdContext, type=ReqAssetType)) + return response + + if ReqAssetType == 9: + # Check for the amount of places the user has + AmountOfPlaces = Universe.query.filter_by( creator_id = TargetCreatorObj.id, creator_type = CreatorType ).count() + MaxPlaces = 2 + if CreatorType == 0: + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.BuildersClub: + MaxPlaces = 6 + elif UserCurrentMembership == MembershipType.TurboBuildersClub: + MaxPlaces = 12 + elif UserCurrentMembership == MembershipType.OutrageousBuildersClub: + MaxPlaces = 32 + else: + MaxPlaces = 10 + + if AmountOfPlaces >= MaxPlaces: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"You can only have {str(MaxPlaces)} places max", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + HasCreatedPlaceRecently : bool = Universe.query.filter_by( creator_id = TargetCreatorObj.id, creator_type = CreatorType ).filter(Universe.created_at > datetime.utcnow() - timedelta( hours = 1 )).first() is not None + if HasCreatedPlaceRecently: + redislock.release_lock(CreateLockName, CreateLock) + flash("You can only create one place every hour", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + NewAsset : Asset = Asset( + name = f"Untitled Place", + description = "Check out my new place!", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Place, + moderation_status=0, + created_at=datetime.utcnow() + ) + db.session.add(NewAsset) + db.session.commit() + + NewPlace : Place = Place( + placeid = NewAsset.id, + ) + db.session.add(NewPlace) + db.session.commit() + + DefaultPlaceFile = open("./app/files/Baseplate.rbxlx", "rb") + PlaceFileContent = DefaultPlaceFile.read() + DefaultPlaceFile.close() + DefaultPlaceFileHash = hashlib.sha512(PlaceFileContent).hexdigest() + if not s3helper.DoesKeyExist(DefaultPlaceFileHash): + s3helper.UploadBytesToS3(PlaceFileContent, DefaultPlaceFileHash) + + NewAssetVersion : AssetVersion = CreateNewAssetVersion( NewAsset, DefaultPlaceFileHash, UploadedBy = AuthenticatedUser) + if NewAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewAsset) + db.session.delete(NewPlace) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop")) + + TakeThumbnail( AssetId=NewAsset.id, isIcon=False ) + TakeThumbnail( AssetId=NewAsset.id, isIcon=True ) + + NewUniverse : Universe = Universe( + root_place_id = NewAsset.id, + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + place_rig_choice = PlaceRigChoice.UserChoice, + place_year = PlaceYear.Sixteen + ) + db.session.add(NewUniverse) + db.session.commit() + + NewPlace.parent_universe_id = NewUniverse.id + db.session.commit() + + return redirect(url_for("DevelopPagesRoute.develop")) + + if ReqAssetType == 1: #Image + ImageName = request.form.get("name", default = "Image", type = str) + if ImageName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + if ImageName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + if len(ImageName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + ImageName = FilterText(ImageName) + ImageFile = request.files.get("file", default = None) + ImageObj = ValidateClothingImage( ImageFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if ImageObj == False: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid image file, Please make sure it is a PNG file and lesser than 3MB", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + if ImageFile.content_length > 1024 * 1024 * 3: + redislock.release_lock(CreateLockName, CreateLock) + flash("Image file is too large, max: 3MB", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + if ImageObj.size[0] > 2048 or ImageObj.size[1] > 2048: + redislock.release_lock(CreateLockName, CreateLock) + flash("Image resolution is too large, max: 2048 x 2048", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + + NewImageAsset : Asset = Asset( + name = ImageName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Image, + created_at=datetime.utcnow() + ) + db.session.add(NewImageAsset) + db.session.commit() + + ImageFile = BytesIO() + ImageObj.save(ImageFile, format="PNG") + + ImageFile.seek(0) + ImageFileContent = ImageFile.read() + ImageFileHash = hashlib.sha512(ImageFileContent).hexdigest() + if not s3helper.DoesKeyExist(ImageFileHash): + s3helper.UploadBytesToS3(ImageFileContent, ImageFileHash, contentType="image/png") + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAsset, ImageFileHash, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewImageAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + + TakeThumbnail( AssetId=NewImageAsset.id, isIcon=False ) + + return redirect(url_for("DevelopPagesRoute.develop", type=1)) + + if ReqAssetType == 11: #shirt + ShirtName = request.form.get("name", default = "Shirt", type = str) + if ShirtName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + if ShirtName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + if len(ShirtName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + ShirtName = FilterText(ShirtName) + + ShirtFile = request.files.get("file", default = None) + isValidClothingFile = ValidateClothingImage( ShirtFile, returnImage = True ) + if not isValidClothingFile: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid shirt file, Please make sure it is a PNG file 585 x 559 and lesser than 1mb", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + + NewImageAsset : Asset = Asset( + name = "Image", + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Image, + created_at=datetime.utcnow() + ) + db.session.add(NewImageAsset) + db.session.commit() + + ShirtFile = BytesIO() + isValidClothingFile.save(ShirtFile, format="PNG") + + ShirtFile.seek(0) + ImageFileContent = ShirtFile.read() + ShirtFileHash = hashlib.sha512(ImageFileContent).hexdigest() + if not s3helper.DoesKeyExist(ShirtFileHash): + s3helper.UploadBytesToS3(ImageFileContent, ShirtFileHash, contentType="image/png") + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAsset, ShirtFileHash, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewImageAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + + TakeThumbnail( AssetId=NewImageAsset.id, isIcon=False ) + + ShirtTemplateFile = open("./app/files/Shirt.rbxmx", "r") + ShirtTemplateFileContent = ShirtTemplateFile.read() + ShirtTemplateFile.close() + ShirtTemplateFileContent = ShirtTemplateFileContent.format(ShirtImageId = str(NewImageAsset.id)) + ShirtTemplateFileHash = hashlib.sha512(ShirtTemplateFileContent.encode()).hexdigest() + if not s3helper.DoesKeyExist(ShirtTemplateFileHash): + s3helper.UploadBytesToS3(ShirtTemplateFileContent, ShirtTemplateFileHash) + + NewShirtAsset : Asset = Asset( + name = ShirtName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Shirt, + created_at=datetime.utcnow() + ) + db.session.add(NewShirtAsset) + db.session.commit() + + NewShirtAssetVersion : AssetVersion = CreateNewAssetVersion( NewShirtAsset, ShirtTemplateFileHash, UploadedBy = AuthenticatedUser) + if NewShirtAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewShirtAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + + NewAssetModerationLink : AssetModerationLink = AssetModerationLink( + ParentAssetId = NewShirtAsset.id, + ChildAssetId = NewImageAsset.id + ) + db.session.add(NewAssetModerationLink) + + NewUserAsset : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = NewShirtAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + TakeThumbnail( AssetId=NewShirtAsset.id ) + return redirect(url_for("DevelopPagesRoute.develop", type=11)) + + if ReqAssetType == 12: #pants + PantsName = request.form.get("name", default = "Pants", type = str) + if PantsName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + if PantsName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + if len(PantsName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + PantsName = FilterText(PantsName) + + PantsFile = request.files.get("file", default = None) + isValidClothingFile = ValidateClothingImage( PantsFile, returnImage = True ) + if not isValidClothingFile: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid pants file, Please make sure it is a PNG file 585 x 559 and lesser than 1mb", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + NewImageAsset : Asset = Asset( + name = "Image", + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Image, + created_at=datetime.utcnow() + ) + db.session.add(NewImageAsset) + db.session.commit() + + PantsFile = BytesIO() + isValidClothingFile.save(PantsFile, format="PNG") + + PantsFile.seek(0) + ImageFileContent = PantsFile.read() + PantsFileHash = hashlib.sha512(ImageFileContent).hexdigest() + if not s3helper.DoesKeyExist(PantsFileHash): + s3helper.UploadBytesToS3(ImageFileContent, PantsFileHash, contentType="image/png") + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAsset, PantsFileHash, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewImageAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + TakeThumbnail( AssetId=NewImageAsset.id, isIcon=False ) + + PantsTemplateFile = open("./app/files/Pants.rbxmx", "r") + PantsTemplateFileContent = PantsTemplateFile.read() + PantsTemplateFile.close() + PantsTemplateFileContent = PantsTemplateFileContent.format(PantsImageId = str(NewImageAsset.id)) + PantsTemplateFileHash = hashlib.sha512(PantsTemplateFileContent.encode()).hexdigest() + if not s3helper.DoesKeyExist(PantsTemplateFileHash): + s3helper.UploadBytesToS3(PantsTemplateFileContent, PantsTemplateFileHash) + + NewPantsAsset : Asset = Asset( + name = PantsName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Pants, + created_at=datetime.utcnow() + ) + db.session.add(NewPantsAsset) + db.session.commit() + + NewPantsAssetVersion : AssetVersion = CreateNewAssetVersion( NewPantsAsset, PantsTemplateFileHash, UploadedBy = AuthenticatedUser) + if NewPantsAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewPantsAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + NewAssetModerationLink : AssetModerationLink = AssetModerationLink( + ParentAssetId = NewPantsAsset.id, + ChildAssetId = NewImageAsset.id + ) + db.session.add(NewAssetModerationLink) + + NewUserAsset : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = NewPantsAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + TakeThumbnail( AssetId=NewPantsAsset.id ) + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + if ReqAssetType == 2: #tshirt + TShirtName = request.form.get("name", default = "T-Shirt", type = str) + if TShirtName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + if TShirtName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + if len(TShirtName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + TShirtName = FilterText(TShirtName) + + TShirtFile = request.files.get("file", default = None) + isValidClothingFile = ValidateClothingImage( TShirtFile, verifyResolution = False, returnImage = True ) + if not isValidClothingFile: + redislock.release_lock(CreateLockName, CreateLock) + flash("Invalid TShirt file, Please make sure it is a PNG file and lesser than 1mb", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + + NewImageAsset : Asset = Asset( + name = "Image", + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Image, + created_at=datetime.utcnow() + ) + db.session.add(NewImageAsset) + db.session.commit() + + TShirtFile = BytesIO() + isValidClothingFile.save(TShirtFile, format="PNG") + + TShirtFile.seek(0) + ImageFileContent = TShirtFile.read() + TShirtFileHash = hashlib.sha512(ImageFileContent).hexdigest() + if not s3helper.DoesKeyExist(TShirtFileHash): + s3helper.UploadBytesToS3(ImageFileContent, TShirtFileHash, contentType="image/png") + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAsset, TShirtFileHash, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewImageAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=12)) + + TakeThumbnail( AssetId=NewImageAsset.id, isIcon=False ) + + TShirtTemplateFile = open("./app/files/TShirt.rbxmx", "r") + TShirtTemplateFileContent = TShirtTemplateFile.read() + TShirtTemplateFile.close() + TShirtTemplateFileContent = TShirtTemplateFileContent.format(TShirtImageId = str(NewImageAsset.id)) + TShirtTemplateFileHash = hashlib.sha512(TShirtTemplateFileContent.encode()).hexdigest() + if not s3helper.DoesKeyExist(TShirtTemplateFileHash): + s3helper.UploadBytesToS3(TShirtTemplateFileContent, TShirtTemplateFileHash) + + NewTShirtAsset : Asset = Asset( + name = TShirtName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.TShirt, + created_at=datetime.utcnow() + ) + db.session.add(NewTShirtAsset) + db.session.commit() + + NewTShirtAssetVersion : AssetVersion = CreateNewAssetVersion( NewTShirtAsset, TShirtTemplateFileHash, UploadedBy = AuthenticatedUser) + if NewTShirtAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewTShirtAsset) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + + NewAssetModerationLink : AssetModerationLink = AssetModerationLink( + ParentAssetId = NewTShirtAsset.id, + ChildAssetId = NewImageAsset.id + ) + db.session.add(NewAssetModerationLink) + + NewUserAsset : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = NewTShirtAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + TakeThumbnail( AssetId=NewTShirtAsset.id ) + return redirect(url_for("DevelopPagesRoute.develop", type=2)) + + + if ReqAssetType == 3: #sound + SoundName = request.form.get("name", default = "Sound", type = str) + if SoundName is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + if SoundName == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No name was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + if len(SoundName) > 50: + redislock.release_lock(CreateLockName, CreateLock) + flash("Name is too long, max: 50 characters", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + SoundName = FilterText(SoundName) + + SoundFile = request.files.get("file", default = None) + if SoundFile is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("No file was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + if SoundFile.filename == "": + redislock.release_lock(CreateLockName, CreateLock) + flash("No file was provided", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + # soundDuration = ValidateMP3File( SoundFile ) + # if soundDuration is None: + # redislock.release_lock(CreateLockName, CreateLock) + # flash("Invalid sound file, Please make sure it is a MP3 file and lesser than 4mb", "error") + # return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + + if SoundFile.content_length > 1024 * 1024 * 8: + redislock.release_lock(CreateLockName, CreateLock) + flash("Sound file is too large, max: 8MB", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + try: + ConvertedSoundData, soundDuration = ValidateMP3AndConvertToOGG( SoundFile ) + except Exception as e: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"Failed to validate file: {str(e)}", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + if soundDuration > 60 * 8: + redislock.release_lock(CreateLockName, CreateLock) + flash("Sound is too long, max: 8 minutes", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + soundDurationHalfed = soundDuration + if soundDuration > 20: + soundDurationHalfed = 20 + ((soundDuration - 20) * 0.5) + + + + creationCost = math.floor(max(20, soundDurationHalfed)) + robuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if robuxBalance < creationCost: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"You do not have enough robux to create this sound, Required: R${str(creationCost)}", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + try: + economy.DecrementTargetBalance(AuthenticatedUser, creationCost, 0) + except economy.EconomyLockAcquireException: + redislock.release_lock(CreateLockName, CreateLock) + flash("Failed to create sound, Please try again later", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + except economy.InsufficientFundsException: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"You do not have enough robux to create this sound, Required: R${str(creationCost)}", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + except Exception as e: + redislock.release_lock(CreateLockName, CreateLock) + logging.error(f"Failed to create sound, {str(e)}") + flash("Failed to create sound, Please try again later", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + #transactions.CreateTransaction(User.query.filter_by(id=1).first(), AuthenticatedUser, creationCost, 0, TransactionType.Purchase, None, "Created Sound") + transactions.CreateTransaction( + Sender = AuthenticatedUser, + CurrencyAmount = creationCost, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + CustomText = "Created Sound" + ) + + #SoundFile.seek(0) + SoundFileContent = ConvertedSoundData + SoundFileHash = hashlib.sha512(SoundFileContent).hexdigest() + + if not s3helper.DoesKeyExist(SoundFileHash): + s3helper.UploadBytesToS3(SoundFileContent, SoundFileHash, contentType="audio/ogg") + + NewSoundAsset : Asset = Asset( + name = SoundName, + description = "", + creator_id = TargetCreatorObj.id, + creator_type = CreatorType, + asset_type = AssetType.Audio, + created_at=datetime.utcnow() + ) + db.session.add(NewSoundAsset) + db.session.commit() + + NewSoundAssetVersion : AssetVersion = CreateNewAssetVersion( NewSoundAsset, SoundFileHash, UploadedBy = AuthenticatedUser) + if NewSoundAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + db.session.delete(NewSoundAsset) + db.session.commit() + flash("Failed to create a new asset version, please report this error to our discord server", "error") + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + + NewUserAsset : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = NewSoundAsset.id + ) + db.session.add(NewUserAsset) + db.session.commit() + TakeThumbnail( AssetId=NewSoundAsset.id ) + return redirect(url_for("DevelopPagesRoute.develop", type=3)) + +def isUserAllowedtoViewPage( ViewerUser : User, RelatedObj : Asset | Universe, abortOnFail : bool = True, isGameContext : bool = True ): + if RelatedObj is None: + if abortOnFail: + abort(404) + else: + return False + if RelatedObj.creator_id != ViewerUser.id and RelatedObj.creator_type == 0: + if abortOnFail: + abort(404) + else: + return False + elif RelatedObj.creator_type == 1: + ViewerGroupRole : GroupRole | None = groups.GetUserRolesetInGroup( ViewerUser, RelatedObj.creator_id ) + if ViewerGroupRole is None: + if abortOnFail: + abort(404) + else: + return False + ViewerRolePermissions : GroupRolePermission = groups.GetRolesetPermission( ViewerGroupRole ) + if not ViewerRolePermissions.manage_items: + if abortOnFail: + abort(404) + else: + return False + if not ViewerRolePermissions.manage_group_games: + if abortOnFail: + abort(404) + else: + return False + if type(RelatedObj) != Universe: + if RelatedObj.asset_type != AssetType.Place and isGameContext: + if abortOnFail: + abort(404) + else: + return False + if RelatedObj.moderation_status != 0: + if abortOnFail: + abort(403) + else: + return False + + return True + +@DevelopPagesRoute.route("/develop/universes//manage", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniversePage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/manage.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + PlaceName : str = request.form.get("name", default="", type=str) + PlaceDescription : str = request.form.get("description", default="", type=str) + try: + AssetYear : PlaceYear = PlaceYear(request.form.get("place_year", default=2016, type=int)) + except ValueError: + flash("Invalid year", "error") + return redirect(f"/develop/universes/{universeid}/manage") + if AssetYear not in [ PlaceYear.Sixteen, PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.Fourteen, PlaceYear.TwentyOne ]: + flash("Invalid year", "error") + return redirect(f"/develop/universes/{universeid}/manage") + + if len(PlaceName) < 3 or len(PlaceName) > 50: + flash("Place name has to be between 3 to 50 characters long", "error") + return redirect(f"/develop/universes/{universeid}/manage") + if len(PlaceDescription) < 3 or len(PlaceDescription) > 700: + flash("Place description has to be between 3 to 700 characters long", "error") + return redirect(f"/develop/universes/{universeid}/manage") + + if PlaceDescription.count("\n") > 10: + flash("Place description can only have 10 or less newlines", "error") + return redirect(f"/develop/universes/{universeid}/manage") + + if UniverseObj.place_year != AssetYear: + TotalServersActive : int = PlaceServer.query.join(Place, Place.placeid == PlaceServer.serverPlaceId).join( Universe, Place.parent_universe_id == Universe.id ).filter( Universe.id == universeid ).count() + if TotalServersActive > 0: + flash("You cannot change the place year of the universe while there are active servers", "error") + return redirect(f"/develop/universes/{universeid}/manage") + UniverseObj.place_year = AssetYear + flash("Successfully updated place year", "success") + + PlaceName = FilterText(PlaceName) + PlaceDescription = FilterText(PlaceDescription) + + RootPlaceAssetObj.name = PlaceName + RootPlaceAssetObj.description = PlaceDescription + RootPlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + + db.session.commit() + + flash("Successfully updated place", "success") + return redirect(f"/develop/universes/{universeid}/manage") + +@DevelopPagesRoute.route("/develop/universes//access", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniverseAccessPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/access.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + MinimumAccountAge : int = request.form.get("minaccountage", default=0, type=int) + if MinimumAccountAge < 0 or MinimumAccountAge > 365: + flash("Minimum account age has to be between 0 to 365", "error") + return redirect(f"/develop/universes/{universeid}/access") + isPublic : bool = request.form.get("ispublic") == "on" + BuildersClubRequired : bool = request.form.get("bcrequired") == "on" + + UniverseObj.minimum_account_age = MinimumAccountAge + UniverseObj.is_public = isPublic + UniverseObj.bc_required = BuildersClubRequired + UniverseObj.updated_at = datetime.utcnow() + db.session.commit() + + flash("Successfully updated place access", "success") + return redirect(f"/develop/universes/{universeid}/access") + +@DevelopPagesRoute.route("/develop/universes//places", methods=["GET"]) +@auth.authenticated_required +def ManageUniversePlacesPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + TotalAmountPlacesCreated : int = Place.query.filter_by(parent_universe_id = universeid).count() + + universePlaces : list[Place] = Place.query.filter_by(parent_universe_id = universeid).order_by(Place.placeid.asc()).all() + + return render_template("develop/universes/places.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, universePlaces=universePlaces, TotalAmountPlacesCreated=TotalAmountPlacesCreated) + +@DevelopPagesRoute.route("/develop/universes//create-place", methods=["GET", "POST"]) +@auth.authenticated_required +def CreateUniversePlacePage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + TotalAmountPlacesCreated : int = Place.query.filter_by(parent_universe_id = universeid).count() + + if request.method == "GET": + return render_template("develop/universes/create-place.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, TotalAmountPlacesCreated=TotalAmountPlacesCreated) + else: + if TotalAmountPlacesCreated >= 10: + flash("You can only have 10 places in a universe", "error") + return redirect(f"/develop/universes/{universeid}/places") + + place_creation_lock_name = f"place_creation_lock_{universeid}" + place_creation_lock = redislock.acquire_lock( lock_name = place_creation_lock_name, acquire_timeout = 5, lock_timeout = 3 ) + if place_creation_lock is None: + flash("Failed to create place, please try again later", "error") + return redirect(f"/develop/universes/{universeid}/places") + + NewPlaceAsset : Asset = Asset( + name = f"Untitled Place", + description = "Check out my new place!", + creator_id = UniverseObj.creator_id, + creator_type = UniverseObj.creator_type, + asset_type = AssetType.Place, + moderation_status = 0, + created_at=datetime.utcnow(), + updated_at=datetime.utcnow() + ) + + db.session.add(NewPlaceAsset) + db.session.commit() + + NewPlace : Place = Place( + placeid = NewPlaceAsset.id, + parent_universe_id = universeid + ) + db.session.add(NewPlace) + db.session.commit() + + DefaultPlaceFile = open("./app/files/Baseplate.rbxlx", "rb") + PlaceFileContent = DefaultPlaceFile.read() + DefaultPlaceFile.close() + DefaultPlaceFileHash = hashlib.sha512(PlaceFileContent).hexdigest() + if not s3helper.DoesKeyExist(DefaultPlaceFileHash): + s3helper.UploadBytesToS3(PlaceFileContent, DefaultPlaceFileHash) + + redislock.release_lock(place_creation_lock_name, place_creation_lock) + + NewAssetVersion : AssetVersion = CreateNewAssetVersion( NewPlaceAsset, DefaultPlaceFileHash, UploadedBy = AuthenticatedUser) + if NewAssetVersion is None: + db.session.delete(NewPlaceAsset) + db.session.delete(NewPlace) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(f"/develop/universes/{universeid}/places") + + TakeThumbnail( AssetId=NewPlaceAsset.id, isIcon=False ) + TakeThumbnail( AssetId=NewPlaceAsset.id, isIcon=True ) + + flash("Successfully created a new place", "success") + + return redirect(f"/develop/universes/{universeid}/places") + +@DevelopPagesRoute.route("/develop/universes//gamepasses", methods=["GET"]) +@auth.authenticated_required +def ManageUniverseGamepassesPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + Gamepasses : list[GamepassLink] = GamepassLink.query.filter_by(universe_id = UniverseObj.id).all() + + return render_template("develop/universes/gamepasses.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, Gamepasses=Gamepasses) + +@DevelopPagesRoute.route("/develop/universes//gamepass/", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniverseGamepassPage( universeid : int, gamepassid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + GamepassObj : GamepassLink = GamepassLink.query.filter_by( gamepass_id = gamepassid, universe_id = UniverseObj.id ).first() + if GamepassObj is None: + abort(404) + + if request.method == "GET": + return render_template("develop/universes/edit-gamepass.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, GamepassObj=GamepassObj) + else: + AssetName = request.form.get("pass-name", default = "", type = str) + AssetDescription = request.form.get("pass-description", default = "", type = str) + isForSale = request.form.get("is-for-sale", default = "off") == "on" + AssetRobuxPrice = request.form.get("robux-cost", default = 0, type = int) + + if AssetName == "": + flash("Name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if len(AssetName) > 35: + flash("Name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if CountAlphanumericCharacters(AssetName) < 3: + flash("Name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + + if AssetDescription == "": + flash("Description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if len(AssetDescription) > 200: + flash("Description cannot be longer than 200 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + + if (AssetRobuxPrice < 1 or AssetRobuxPrice > 1000000 ): + flash("Robux price has to be between 1 to 1,000,000", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub and isForSale: + flash("You must be Builders Club to sell items", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + + AssetName = FilterText(AssetName) + AssetDescription = FilterText(AssetDescription) + + NewIconFile = request.files.get("icon-file", default = None) + if NewIconFile is not None: + if NewIconFile.filename != "": + if NewIconFile.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + IconImage = ValidateClothingImage( NewIconFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if IconImage is False or IconImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if IconImage.width != IconImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + if IconImage.width < 128 or IconImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + NewIconFile = BytesIO() + IconImage.save(NewIconFile, format="PNG") + + NewIconFile.seek(0) + IconImageHash = hashlib.sha512(NewIconFile.read()).hexdigest() + if not s3helper.DoesKeyExist(IconImageHash): + NewIconFile.seek(0) + s3helper.UploadBytesToS3(NewIconFile.read(), IconImageHash, contentType="image/png") + LatestAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=GamepassObj.gamepass_id).order_by(AssetThumbnail.asset_version_id.desc()).first() + if LatestAssetThumbnail is None: + flash("Failed to get latest asset thumbnail", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + LatestAssetThumbnail.content_hash = IconImageHash + LatestAssetThumbnail.created_at = datetime.utcnow() + LatestAssetThumbnail.moderation_status = 1 + db.session.commit() + flash("Successfully updated gamepass icon", "success") + + GamepassObj.gamepass.name = AssetName + GamepassObj.gamepass.description = AssetDescription + GamepassObj.gamepass.is_for_sale = isForSale + GamepassObj.gamepass.price_robux = AssetRobuxPrice + GamepassObj.gamepass.updated_at = datetime.utcnow() + db.session.commit() + flash("Successfully updated gamepass settings", "success") + + return redirect(f"/develop/universes/{UniverseObj.id}/gamepass/{GamepassObj.gamepass_id}") + +@DevelopPagesRoute.route("/develop/universes//create-gamepass", methods=["GET", "POST"]) +@auth.authenticated_required +def CreateUniverseGamepassPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/create-gamepass.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + gamepassName = request.form.get("name", default="", type=str) + gamepassDescription = request.form.get("description", default="", type=str) + file = request.files.get("file", default=None) + + if gamepassName == "": + flash("Name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if len(gamepassName) > 35: + flash("Name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if CountAlphanumericCharacters(gamepassName) < 3: + flash("Name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + if gamepassDescription == "": + flash("Description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if len(gamepassDescription) > 200: + flash("Description cannot be longer than 200 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + if file is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if file.filename == "": + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + GamepassCount : int = GamepassLink.query.filter_by(universe_id = UniverseObj.id).count() + if GamepassCount >= 15: + flash("You cannot create more than 15 gamepasses for a place", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + gamepassName = FilterText(gamepassName) + gamepassDescription = FilterText(gamepassDescription) + + file = BytesIO() + FileImage.save(file, format="png") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewGamepassObj : Asset = Asset( + name = gamepassName, + description = gamepassDescription, + creator_id = UniverseObj.creator_id, + creator_type = UniverseObj.creator_type, + asset_type = AssetType.GamePass, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 0 + ) + db.session.add(NewGamepassObj) + db.session.commit() + + NewGamepassLink : GamepassLink = GamepassLink( + place_id = UniverseObj.root_place_id, + universe_id = UniverseObj.id, + gamepass_id = NewGamepassObj.id, + creator_id = AuthenticatedUser.id + ) + db.session.add(NewGamepassLink) + db.session.commit() + + EmptyHash = hashlib.sha512(b"").hexdigest() + NewGamepassVersion : AssetVersion = CreateNewAssetVersion( NewGamepassObj, EmptyHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewGamepassVersion is None: + db.session.delete(NewGamepassObj) + db.session.delete(NewGamepassLink) + db.session.commit() + flash("Failed to create a new asset version", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-gamepass") + + NewGamepassThumbnail : AssetThumbnail = AssetThumbnail( + asset_id = NewGamepassObj.id, + asset_version_id = NewGamepassVersion.version, + content_hash = FileImageHash, + created_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewGamepassThumbnail) + db.session.commit() + + flash("Successfully created gamepass", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/gamepasses") + +@DevelopPagesRoute.route("/develop/universes//developer-products", methods=["GET"]) +@auth.authenticated_required +def ManageUniverseDeveloperProductsPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + DeveloperProducts : list[DeveloperProduct] = DeveloperProduct.query.filter_by(universe_id = UniverseObj.id).all() + + return render_template("develop/universes/developerproducts.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, DeveloperProducts=DeveloperProducts) + +@DevelopPagesRoute.route("/develop/universes//create-product", methods=["GET", "POST"]) +@auth.authenticated_required +def CreateUniveseDeveloperProductPage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/create-product.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + productName = request.form.get("name", default="", type=str) + productDescription = request.form.get("description", default="", type=str) + file = request.files.get("file", default=None) + + if productName == "": + flash("Name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if len(productName) > 35: + flash("Name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if CountAlphanumericCharacters(productName) < 3: + flash("Name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + if productDescription == "": + flash("Description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if len(productDescription) > 200: + flash("Description cannot be longer than 200 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + if file is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if file.filename == "": + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + productName = FilterText(productName) + productDescription = FilterText(productDescription) + + file = BytesIO() + FileImage.save(file, format="png") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewImageAssetObj : Asset = Asset( + name = "DeveloperProductImage", + description = "DeveloperProduct icon", + creator_id = AuthenticatedUser.id, + creator_type = 0, + asset_type = AssetType.Image, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewImageAssetObj) + db.session.commit() + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAssetObj, FileImageHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + db.session.delete(NewImageAssetObj) + db.session.commit() + flash("Failed to create a new asset version, please contact support", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-product") + + NewDeveloperProductObj : DeveloperProduct = DeveloperProduct( + placeid = UniverseObj.root_place_id, + name = productName, + description = productDescription, + iconimage_assetid = NewImageAssetObj.id, + creator_id = AuthenticatedUser.id, + universe_id = UniverseObj.id + ) + TakeThumbnail( AssetId=NewImageAssetObj.id, isIcon=False ) + + db.session.add(NewDeveloperProductObj) + db.session.commit() + + flash("Successfully created developer product", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products") + +@DevelopPagesRoute.route("/develop/universes//developer-products/", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniverseDeveloperProductPage( universeid : int, productid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + DeveloperProductObj : DeveloperProduct = DeveloperProduct.query.filter_by(universe_id = UniverseObj.id, productid = productid).first() + if DeveloperProductObj is None: + abort(404) + + if request.method == "GET": + return render_template("develop/universes/edit-product.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, ProductObj=DeveloperProductObj) + else: + productName = request.form.get("product-name", default="", type=str) + productDescription = request.form.get("product-description", default="", type=str) + file = request.files.get("icon-file", default=None) + is_for_sale = request.form.get("is-for-sale", default="off") == "on" + robux_price = request.form.get("robux-cost", default=0, type=int) + + if productName == "": + flash("Name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if len(productName) > 35: + flash("Name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if CountAlphanumericCharacters(productName) < 3: + flash("Name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + + if productDescription == "": + flash("Description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if len(productDescription) > 200: + flash("Description cannot be longer than 200 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + + if (robux_price < 1 or robux_price > 1000000 ): + flash("Robux price has to be between 1 to 1,000,000", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub and is_for_sale: + flash("You must be a Builders Club member to sell items", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + + productName = FilterText(productName) + productDescription = FilterText(productDescription) + + if file is not None: + if file.filename != "": + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + file = BytesIO() + FileImage.save(file, format="PNG") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewImageAssetObj : Asset = Asset( + name = "DeveloperProductImage", + description = "DeveloperProduct icon", + creator_id = AuthenticatedUser.id, + creator_type = 0, + asset_type = AssetType.Image, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewImageAssetObj) + db.session.commit() + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAssetObj, FileImageHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + db.session.delete(NewImageAssetObj) + db.session.commit() + flash("Failed to create a new asset version, please contact support", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + + TakeThumbnail( AssetId = NewImageAssetObj.id, isIcon=False ) + DeveloperProductObj.iconimage_assetid = NewImageAssetObj.id + + flash("Successfully updated developer product icon", "success") + + DeveloperProductObj.name = productName + DeveloperProductObj.description = productDescription + DeveloperProductObj.is_for_sale = is_for_sale + DeveloperProductObj.robux_price = robux_price + DeveloperProductObj.updated_at = datetime.utcnow() + db.session.commit() + flash("Successfully updated developer product settings", "success") + + return redirect(f"/develop/universes/{UniverseObj.id}/developer-products/{DeveloperProductObj.productid}") + +@DevelopPagesRoute.route("/develop/universes//badges", methods=["GET"]) +@auth.authenticated_required +def ManageUniverseBadgesPage( universeid : int ): + from app.pages.games.games import GetTotalBadgeAwardedCount, GetBadgeAwardedPastDay # Avoid circular import + + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + Badges : list[PlaceBadge] = PlaceBadge.query.filter_by(universe_id = UniverseObj.id).all() + + return render_template("develop/universes/badges.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, Badges=Badges, GetTotalBadgeAwardedCount=GetTotalBadgeAwardedCount, GetBadgeAwardedPastDay=GetBadgeAwardedPastDay) + +@DevelopPagesRoute.route("/develop/universes//create-badge", methods=["GET", "POST"]) +@auth.authenticated_required +def CreateUniverseBadgePage( universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + if request.method == "GET": + return render_template("develop/universes/create-badge.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj) + else: + BadgeName = request.form.get("name", default = "", type = str) + BadgeDescription = request.form.get("description", default = "", type = str) + file = request.files.get("icon-file", default=None) + + if BadgeName == "": + flash("Badge name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if len(BadgeName) > 35: + flash("Badge name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if CountAlphanumericCharacters(BadgeName) < 3: + flash("Badge name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + + if BadgeDescription == "": + flash("Badge description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if len(BadgeDescription) > 128: + flash("Badge description cannot be longer than 128 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if CountAlphanumericCharacters(BadgeDescription) < 3: + flash("Badge description must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + + BadgeName = FilterText(BadgeName) + BadgeDescription = FilterText(BadgeDescription) + + TotalBadgeCount : int = PlaceBadge.query.filter_by(universe_id = UniverseObj.id).count() + if TotalBadgeCount >= 25: + flash("You cannot create more than 25 badges for a place", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + + if file is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if file.filename == "": + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + file = BytesIO() + FileImage.save(file, format="PNG") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewImageAssetObj : Asset = Asset( + name = "BadgeImage", + description = "Badge icon", + creator_id = AuthenticatedUser.id, + creator_type = 0, + asset_type = AssetType.Image, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewImageAssetObj) + db.session.commit() + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAssetObj, FileImageHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + + if NewImageAssetVersion is None: + db.session.delete(NewImageAssetObj) + db.session.commit() + flash("Failed to create a new asset version, please contact support", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/create-badge") + + TakeThumbnail( AssetId = NewImageAssetObj.id, isIcon=False ) + NewBadgeObj : PlaceBadge = PlaceBadge( + associated_place_id = UniverseObj.root_place_id, + name = BadgeName, + description = BadgeDescription, + icon_image_id = NewImageAssetObj.id, + universe_id = UniverseObj.id + ) + db.session.add(NewBadgeObj) + db.session.commit() + + flash("Successfully created badge", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/badges") + +@DevelopPagesRoute.route("/develop/universes//badges/", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniverseBadgePage( universeid : int, badgeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( universe_id = UniverseObj.id, id = badgeid ).first() + if BadgeObj is None: + abort(404) + + if request.method == "GET": + return render_template("develop/universes/edit-badge.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, BadgeObj=BadgeObj) + else: + BadgeName = request.form.get("badge-name", default = "", type = str) + BadgeDescription = request.form.get("badge-description", default = "", type = str) + + if BadgeName == "": + flash("Badge name cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if len(BadgeName) > 35: + flash("Badge name cannot be longer than 35 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if CountAlphanumericCharacters(BadgeName) < 3: + flash("Badge name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + + if BadgeDescription == "": + flash("Badge description cannot be empty", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if len(BadgeDescription) > 128: + flash("Badge description cannot be longer than 128 characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if CountAlphanumericCharacters(BadgeDescription) < 3: + flash("Badge description must contain at least 3 alphanumeric characters", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + + BadgeName = FilterText(BadgeName) + BadgeDescription = FilterText(BadgeDescription) + file = request.files.get("icon-file", default=None) + + if file is not None: + if file.filename != "": + if file.content_length > 1024 * 1024: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + FileImage = ValidateClothingImage(file, verifyResolution=False, validateFileSize=False, returnImage=True) + if FileImage is False or FileImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if FileImage.width != FileImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + if FileImage.width < 128 or FileImage.width > 1024: + flash("Image is not between 128x128 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + file = BytesIO() + FileImage.save(file, format="PNG") + + file.seek(0) + FileImageHash = hashlib.sha512(file.read()).hexdigest() + if not s3helper.DoesKeyExist(FileImageHash): + file.seek(0) + s3helper.UploadBytesToS3(file.read(), FileImageHash, contentType="image/png") + + NewImageAssetObj : Asset = Asset( + name = "BadgeImage", + description = "Badge icon", + creator_id = AuthenticatedUser.id, + creator_type = 0, + asset_type = AssetType.Image, + created_at = datetime.utcnow(), + updated_at = datetime.utcnow(), + moderation_status = 1 + ) + db.session.add(NewImageAssetObj) + db.session.commit() + + NewImageAssetVersion : AssetVersion = CreateNewAssetVersion( NewImageAssetObj, FileImageHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewImageAssetVersion is None: + db.session.delete(NewImageAssetObj) + db.session.commit() + flash("Failed to create a new asset version, please contact support", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + + TakeThumbnail( AssetId = NewImageAssetObj.id, isIcon=False ) + BadgeObj.icon_image_id = NewImageAssetObj.id + + flash("Successfully updated developer product icon", "success") + + BadgeObj.name = BadgeName + BadgeObj.description = BadgeDescription + BadgeObj.updated_at = datetime.utcnow() + + db.session.commit() + flash("Successfully updated badge", "success") + + return redirect(f"/develop/universes/{UniverseObj.id}/badges/{BadgeObj.id}") + +@DevelopPagesRoute.route("/develop/universes//place//manage", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniversePlacePage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/manage.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj) + else: + PlaceName : str = request.form.get("name", default="", type=str) + PlaceDescription : str = request.form.get("description", default="", type=str) + try: + ChatStyleType : ChatStyle = ChatStyle(request.form.get("chat-style-type", default = 2, type = int)) + except ValueError: + flash("Invalid chat style", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + + if UniverseObj.place_year in [ PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.TwentyOne ]: + try: + AvatarRigType : PlaceRigChoice = PlaceRigChoice(request.form.get("avatar-rig-type", default=0, type=int)) + except ValueError: + flash("Invalid avatar rig type", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + + if len(PlaceName) < 3 or len(PlaceName) > 50: + flash("Place name has to be between 3 to 50 characters long", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + if len(PlaceDescription) < 3 or len(PlaceDescription) > 700: + flash("Place description has to be between 3 to 700 characters long", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + if PlaceDescription.count("\n") > 10: + flash("Place description can only have 10 or less newlines", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + + PlaceName : str = FilterText(PlaceName) + PlaceDescription : str = FilterText(PlaceDescription) + PlaceAssetObj.name = PlaceName + PlaceAssetObj.description = PlaceDescription + PlaceObj.chat_style = ChatStyleType + if UniverseObj.place_year in [ PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.TwentyOne ]: + PlaceObj.rig_choice = AvatarRigType + + PlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + + db.session.commit() + flash("Successfully updated place settings", "success") + + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/manage") + +@DevelopPagesRoute.route("/develop/universes//place//access", methods=["GET", "POST"]) +@auth.authenticated_required +def ManageUniversePlaceAccessPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/access.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj) + else: + MaxPlayers : int = request.form.get("maxplayers", default=10, type=int) + if MaxPlayers < 2 or MaxPlayers > 50: + flash("Max players has to be between 2 to 50", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/access") + PlaceObj.maxplayers = MaxPlayers + db.session.commit() + + flash("Successfully updated place access settings", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/access") + +@DevelopPagesRoute.route("/develop/universes//place//upload-version", methods=["GET", "POST"]) +@auth.authenticated_required +def UploadUniversePlaceVersionPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/upload-version.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj) + else: + with limiter.limit("5/minute"): + AssetFile = request.files.get("file", default = None) + if AssetFile is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + CreateLockName = f"UploadAssetVersion:{str(PlaceAssetObj.id)}" + CreateLock = redislock.acquire_lock(CreateLockName, acquire_timeout=20, lock_timeout=5) + + AssetFile.seek(0) + AssetFileContent = AssetFile.read() + AssetFileHash = hashlib.sha512(AssetFileContent).hexdigest() + + CurrentAssetVersion : AssetVersion = GetLatestAssetVersion( PlaceAssetObj ) + if CurrentAssetVersion is not None: + if CurrentAssetVersion.content_hash == AssetFileHash: + redislock.release_lock(CreateLockName, CreateLock) + flash("File is the same as the current version", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + + PlaceObj : Place = Place.query.filter_by(placeid=PlaceAssetObj.id).first() + + isValidPlaceFile = ValidatePlaceFile( AssetFile, keepFileWhenInvalid=False, TestPlaceYear = PlaceObj.placeyear ) # if it returns a bool its valid, if it returns a string its invalid and the string is the error + if type(isValidPlaceFile) == str: + redislock.release_lock(CreateLockName, CreateLock) + flash(f"Validation Failed: {isValidPlaceFile}", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + + if not s3helper.DoesKeyExist(AssetFileHash): + s3helper.UploadBytesToS3(AssetFileContent, AssetFileHash) + + NewAssetVersion : AssetVersion = CreateNewAssetVersion( PlaceAssetObj, AssetFileHash, ForceNewVersion = True, UploadedBy = AuthenticatedUser) + if NewAssetVersion is None: + redislock.release_lock(CreateLockName, CreateLock) + flash("Failed to create a new asset version", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + PlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + db.session.commit() + + redislock.release_lock(CreateLockName, CreateLock) + flash("Successfully updated place file", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/upload-version") + +@DevelopPagesRoute.route("/develop/universes//place//placeicon", methods=["GET","POST"]) +@auth.authenticated_required +def ManageUniversePlaceIconPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/upload-icon.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj, RandomNumber=random.randint(0, 10000000)) + else: + with limiter.limit("5/minute"): + useGenerated = request.form.get("usegenerated") == "on" + if useGenerated: + PlaceAssetObj.updated_at = datetime.utcnow() + CurrentPlaceIcon : PlaceIcon = PlaceIcon.query.filter_by(placeid=PlaceAssetObj.id).first() + if CurrentPlaceIcon is not None: + db.session.delete(CurrentPlaceIcon) + db.session.commit() + TakeThumbnail( AssetId=PlaceAssetObj.id, isIcon=True ) + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + + AssetFile = request.files.get("file", default = None) + if AssetFile is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + if AssetFile.content_length > 2097152: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + IconImage = ValidateClothingImage( AssetFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if IconImage is False or IconImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + if IconImage.width != IconImage.height: + flash("Image is not square", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + if IconImage.width < 256 or IconImage.width > 1024: + flash("Image is not between 256x256 and 1024x1024", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + + AssetFile = BytesIO() + IconImage.save(AssetFile, format="PNG") + + AssetFile.seek(0) + IconImageHash = hashlib.sha512(AssetFile.read()).hexdigest() + if not s3helper.DoesKeyExist(IconImageHash): + AssetFile.seek(0) + s3helper.UploadBytesToS3(AssetFile.read(), IconImageHash, contentType="image/png") + + CurrentPlaceIcon : PlaceIcon = PlaceIcon.query.filter_by(placeid=PlaceAssetObj.id).first() + if CurrentPlaceIcon is None: + CurrentPlaceIcon = PlaceIcon(placeid=PlaceAssetObj.id, contenthash=IconImageHash, updated_at=datetime.utcnow(), moderation_status=1) + db.session.add(CurrentPlaceIcon) + else: + CurrentPlaceIcon.contenthash = IconImageHash + CurrentPlaceIcon.updated_at = datetime.utcnow() + CurrentPlaceIcon.moderation_status = 1 + PlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + db.session.commit() + + flash("Successfully updated place icon", "success") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/placeicon") + +@DevelopPagesRoute.route("/develop/universes//place//thumbnails", methods=["GET","POST"]) +@auth.authenticated_required +def ManageUniversePlaceThumbnailsPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + if request.method == "GET": + return render_template("develop/games/upload-thumbnail.html", UniverseObj=UniverseObj, RootPlaceAssetObj=RootPlaceAssetObj, PlaceObj=PlaceObj, PlaceAssetObj=PlaceAssetObj, RandomNumber=random.randint(0, 10000000)) + else: + with limiter.limit("5/minute"): + useGenerated = request.form.get("usegenerated") == "on" + if useGenerated: + PlaceAssetObj.updated_at = datetime.utcnow() + CurrentAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=PlaceAssetObj.id).order_by(AssetThumbnail.asset_version_id.desc()).first() + if CurrentAssetThumbnail is not None: + db.session.delete(CurrentAssetThumbnail) + db.session.commit() + TakeThumbnail( AssetId=PlaceAssetObj.id, isIcon=False ) + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + AssetFile = request.files.get("file", default = None) + if AssetFile is None: + flash("No file was provided", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + if AssetFile.content_length > 2097152: + flash("File size is too big", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + ThumbnailImage = ValidateClothingImage( AssetFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if ThumbnailImage is False or ThumbnailImage is None: + flash("Invalid image", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + if ThumbnailImage.width / ThumbnailImage.height != 16 / 9: + flash("Image is not 16:9 aspect ratio", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + if ThumbnailImage.width < 640 or ThumbnailImage.width > 1920: + flash("Image is not between 640x360 and 1920x1080", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + if ThumbnailImage.height < 360 or ThumbnailImage.height > 1080: + flash("Image is not between 640x360 and 1920x1080", "error") + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + + AssetFile = BytesIO() + ThumbnailImage.save(AssetFile, format="PNG") + + AssetFile.seek(0) + ThumbnailImageHash = hashlib.sha512(AssetFile.read()).hexdigest() + if not s3helper.DoesKeyExist(ThumbnailImageHash): + AssetFile.seek(0) + s3helper.UploadBytesToS3(AssetFile.read(), ThumbnailImageHash, contentType="image/png") + + CurrentAssetThumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=PlaceAssetObj.id).order_by(AssetThumbnail.asset_version_id.desc()).first() + LatestAssetVersion : AssetVersion = GetLatestAssetVersion(PlaceAssetObj) + if LatestAssetVersion is None: + flash("No asset version found", "error") + return redirect(f"/develop/{str(PlaceAssetObj.id)}/thumbnails") + if CurrentAssetThumbnail is None: + CurrentAssetThumbnail = AssetThumbnail(asset_id=PlaceAssetObj.id, asset_version_id=LatestAssetVersion.version, content_hash=ThumbnailImageHash, created_at=datetime.utcnow(), moderation_status=1) + db.session.add(CurrentAssetThumbnail) + else: + CurrentAssetThumbnail.content_hash = ThumbnailImageHash + CurrentAssetThumbnail.created_at = datetime.utcnow() + CurrentAssetThumbnail.moderation_status = 1 + CurrentAssetThumbnail.asset_version_id = LatestAssetVersion.version + PlaceAssetObj.updated_at = datetime.utcnow() + UniverseObj.updated_at = datetime.utcnow() + db.session.commit() + return redirect(f"/develop/universes/{UniverseObj.id}/place/{PlaceObj.placeid}/thumbnails") + +@DevelopPagesRoute.route("/develop/universes//place//version-history", methods=["GET"]) +@auth.authenticated_required +def ManageUniversePlaceVersionHistoryPage( universeid : int, placeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UniverseObj : Universe = Universe.query.filter_by(id=universeid).first() + isUserAllowedtoViewPage(AuthenticatedUser, UniverseObj, abortOnFail=True) + RootPlaceAssetObj : Asset = Asset.query.filter_by(id = UniverseObj.root_place_id).first() + PlaceObj : Place = Place.query.filter_by(placeid = placeid, parent_universe_id = UniverseObj.id ).first() + if PlaceObj is None: + abort(404) + PlaceAssetObj : Asset = Asset.query.filter_by(id = PlaceObj.placeid).first() if placeid != UniverseObj.root_place_id else RootPlaceAssetObj + + PageNumber : int = max( 1, request.args.get("page", default = 1, type = int) ) + AssetVersions : list[AssetVersion] = AssetVersion.query.filter_by(asset_id=PlaceAssetObj.id).order_by(AssetVersion.version.desc()).paginate( page = PageNumber, per_page = 10, error_out = False ) + return render_template( + "/develop/games/version-history.html", + UniverseObj = UniverseObj, + PlaceAssetObj = PlaceAssetObj, + AssetVersions = AssetVersions, + CDN_URL = config.CDN_URL + ) + +@DevelopPagesRoute.route("/develop//edit", methods=["GET"]) +@auth.authenticated_required +def EditItemPage( assetid : int ): + AuthenticatedUser = auth.GetCurrentUser() + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + abort(404) + if AssetObj.asset_type not in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Audio, AssetType.Image]: + abort(404) + isUserAllowedtoViewPage(AuthenticatedUser, AssetObj, abortOnFail=True, isGameContext=False) + return render_template("develop/edit.html", AssetObj=AssetObj) + +@DevelopPagesRoute.route("/develop//edit", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("5/minute") +def EditItem( assetid : int ): + AuthenticatedUser = auth.GetCurrentUser() + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + abort(404) + if AssetObj.asset_type not in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Audio, AssetType.Image]: + abort(404) + isUserAllowedtoViewPage(AuthenticatedUser, AssetObj, abortOnFail=True, isGameContext=False) + + if not websiteFeatures.GetWebsiteFeature("AssetEditing"): + flash("Asset editing is currently disabled", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + + AssetName = request.form.get("item-name", default = "", type = str) + AssetDescription = request.form.get("item-description", default = "", type = str) + isForSale = request.form.get("is-for-sale", default = "off") == "on" + AssetRobuxPrice = request.form.get("robux-cost", default = 0, type = int) + AssetTixPrice = request.form.get("tix-cost", default = 0, type = int) + + if AssetName == "": + flash("Item name cannot be empty", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if len(AssetName) > 35: + flash("Item name cannot be longer than 35 characters", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if len(AssetDescription) > 200: + flash("Item description cannot be longer than 200 characters", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if AssetRobuxPrice < 0 or AssetRobuxPrice > 1000000: + flash("Robux price must be between 0 and 1,000,000", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if AssetTixPrice < 0 or AssetTixPrice > 10000000: + flash("Tix price must be between 0 and 10,000,000", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if isForSale and AssetObj.moderation_status != 0: + flash("You cannot sell an item that is not approved yet", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + if isForSale and (AssetObj.asset_type == AssetType.Audio or AssetObj.asset_type == AssetType.Image): + flash("You cannot sell this type of asset", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub and isForSale: + flash("You must be Builders Club to sell items", "error") + return redirect(f"/develop/{str(AssetObj.id)}/edit") + + AssetName = FilterText(AssetName) + AssetDescription = FilterText(AssetDescription) + + AssetObj.name = AssetName + AssetObj.description = AssetDescription + AssetObj.is_for_sale = isForSale + AssetObj.price_robux = AssetRobuxPrice + AssetObj.price_tix = AssetTixPrice + AssetObj.updated_at = datetime.utcnow() + db.session.commit() + return redirect(f"/develop/{str(AssetObj.id)}/edit") + +def ShutdownServer(JobId): + from app.routes.jobreporthandler import HandleUserTimePlayed + from app.services.gameserver_comm import perform_post + TargetPlaceServer : PlaceServer | None = PlaceServer.query.filter_by(serveruuid=JobId).first() + if TargetPlaceServer is None: + return + MasterServer : GameServer | None = GameServer.query.filter_by(serverId=TargetPlaceServer.originServerId).first() + if MasterServer is None: + return + PlaceObj : Place = Place.query.filter_by(placeid=TargetPlaceServer.serverPlaceId).first() + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + logging.info(f"CloseJob : ShutdownServer func : Closing job {str(JobId)} for place {str(PlaceObj.placeid)}") + try: + CloseJobRequest = perform_post( + TargetGameserver = MasterServer, + Endpoint = "CloseJob", + JSONData = { + "jobid": str(JobId) + } + ) + PlaceServerPlayersList : list[PlaceServerPlayer] = PlaceServerPlayer.query.filter_by(serveruuid=JobId).all() + for player in PlaceServerPlayersList: + TotalTimePlayed = (datetime.utcnow() - player.joinTime).total_seconds() + HandleUserTimePlayed(player.user, TotalTimePlayed, serverUUID=str(JobId), placeId=PlaceObj.placeid) + db.session.delete(player) + db.session.delete(TargetPlaceServer) + db.session.commit() + + ClearPlayingCountCache( PlaceObj = PlaceObj ) + ClearUniversePlayingCountCache( UniverseObj = UniverseObj ) + except Exception as e: + logging.error(f"CloseJob : ShutdownServer func : Failed to close job {str(JobId)} for place {str(PlaceObj.placeid)} : {str(e)}") + + return diff --git a/app/pages/develop/edit.html b/app/pages/develop/edit.html new file mode 100644 index 0000000..088ab08 --- /dev/null +++ b/app/pages/develop/edit.html @@ -0,0 +1,79 @@ +{% extends '__layout__.html' %} +{% block title %}Edit Item{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ < Return to develop page +

Edit Item

+
+ {% if AssetObj.asset_type.value != 3 and AssetObj.asset_type.value != 1: %} + View on Catalog + {%else%} + View on Library + {%endif%} +
+
+
+
+ +
+
+
+
+ + +
+
+ + +
+ {% if AssetObj.asset_type.value != 3 and AssetObj.asset_type.value != 1: %} +
+ + +
+
+
+
+ R$ + +
+
+
+
+ T$ + +
+
+
+

* Syntax will take a 30% fee from the sale

+
+
+ {%endif%} + + + +
+
+
+
+
+{% endblock %} diff --git a/app/pages/develop/games/access.html b/app/pages/develop/games/access.html new file mode 100644 index 0000000..c1ac30b --- /dev/null +++ b/app/pages/develop/games/access.html @@ -0,0 +1,12 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +

Access

+
+ + + +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/manage-template.html b/app/pages/develop/games/manage-template.html new file mode 100644 index 0000000..f2e6ebb --- /dev/null +++ b/app/pages/develop/games/manage-template.html @@ -0,0 +1,66 @@ +{% extends '__layout__.html' %} +{% block title %}Manage Place{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+

{{PlaceAssetObj.name}}

+ Return to Manage Universe +
+
+
+ +
+ {% block subcontent %}{% endblock %} +
+
+
+
+{% endblock %} diff --git a/app/pages/develop/games/manage.html b/app/pages/develop/games/manage.html new file mode 100644 index 0000000..7f90ff5 --- /dev/null +++ b/app/pages/develop/games/manage.html @@ -0,0 +1,52 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +

Basic Settings

+
+ + +
Chat Style
+
+ + +
+
+ + +
+
+ + +
+ {% if UniverseObj.place_year.value == 2018 or UniverseObj.place_year.value == 2020 or UniverseObj.place_year.value == 2021 %} +
Avatar Rig Type
+
+ + +
+
+ + +
+
+ + +
+ {% endif %} + +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/upload-icon.html b/app/pages/develop/games/upload-icon.html new file mode 100644 index 0000000..9d9a882 --- /dev/null +++ b/app/pages/develop/games/upload-icon.html @@ -0,0 +1,25 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +
+
+ +

Note: Image may be cached so you may see the previous image after uploading

+
+
+

Upload Place Icon

+

Must have a 1:1 Aspect Ratio, Lesser than 2mb and be at max 1024 x 1024

+
+
+ +
+ + +
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/upload-thumbnail.html b/app/pages/develop/games/upload-thumbnail.html new file mode 100644 index 0000000..d444830 --- /dev/null +++ b/app/pages/develop/games/upload-thumbnail.html @@ -0,0 +1,25 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +
+
+ +

Note: Image may be cached so you may see the previous image after uploading

+
+
+

Upload Thumbnail

+

Must have a 16:9 Aspect Ratio, Lesser than 2mb and be at max 1920x1080

+
+
+ +
+ + +
+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/upload-version.html b/app/pages/develop/games/upload-version.html new file mode 100644 index 0000000..74b3705 --- /dev/null +++ b/app/pages/develop/games/upload-version.html @@ -0,0 +1,12 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +

Upload Place File

+

Supported file types: .rbxl and .rbxlx Max File Size: 30mb

+
+
+ +
+ + +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/games/version-history.html b/app/pages/develop/games/version-history.html new file mode 100644 index 0000000..decbf2d --- /dev/null +++ b/app/pages/develop/games/version-history.html @@ -0,0 +1,25 @@ +{% extends 'develop/games/manage-template.html' %} +{% block subcontent %} +

Version History

+
+
+ {% for AssetVer in AssetVersions.items: %} +
+
+
+
Version {{AssetVer.version}}
+

Created on {{AssetVer.created_at.strftime("%d/%m/%Y at %H:%M:%S UTC")}} | ID: {{AssetVer.id}}

+
+ + + +
+
+ {% endfor %} +
+
+ Previous +

Page {{AssetVersions.page}} of {{AssetVersions.pages}}

+ Next +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/games.html b/app/pages/develop/subpages/games.html new file mode 100644 index 0000000..218db2a --- /dev/null +++ b/app/pages/develop/subpages/games.html @@ -0,0 +1,25 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for place in UserPlaces: %} +
+ +
+
{{place.name}}
+

Visits: {{place.place.visitcount}}

+
+
+ Manage +
+
+ {%endfor%} + {% if len(UserPlaces) == 0 %} +

No games found

+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/image.html b/app/pages/develop/subpages/image.html new file mode 100644 index 0000000..84ecdfc --- /dev/null +++ b/app/pages/develop/subpages/image.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+
+ +
+

Image has to be smaller than 3MB

+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for image in UserImages.items: %} +
+ +
+
{{image.name}}
+

Sales: {{image.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserImages.items) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/pants.html b/app/pages/develop/subpages/pants.html new file mode 100644 index 0000000..ee419a1 --- /dev/null +++ b/app/pages/develop/subpages/pants.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +

Want to create Pants? Download the template

+
+
+ +
+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for pants in UserClothing: %} +
+ +
+
{{pants.name}}
+

Sales: {{pants.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserClothing) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/shirts.html b/app/pages/develop/subpages/shirts.html new file mode 100644 index 0000000..f8de792 --- /dev/null +++ b/app/pages/develop/subpages/shirts.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +

Want to create Shirts? Download the template

+
+
+ +
+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for shirt in UserClothing: %} +
+ +
+
{{shirt.name}}
+

Sales: {{shirt.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserClothing) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/subpages/sound.html b/app/pages/develop/subpages/sound.html new file mode 100644 index 0000000..26ba79e --- /dev/null +++ b/app/pages/develop/subpages/sound.html @@ -0,0 +1,32 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+
+ +
+

Sound has to be a MP3 File, Lesser than 8MB and shorter than 8 minutes. Minimum: 20 Robux, every second of audio costs 0.5 robux, will round down if total is decimal point.

+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for sound in UserSounds.items: %} +
+ +
+
{{sound.name}}
+

Sales: {{sound.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserSounds.items) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} diff --git a/app/pages/develop/subpages/tshirt.html b/app/pages/develop/subpages/tshirt.html new file mode 100644 index 0000000..53ced9f --- /dev/null +++ b/app/pages/develop/subpages/tshirt.html @@ -0,0 +1,31 @@ +{% extends 'develop/template.html' %} +{% block subcontent %} +
+
+ +
+
+ +
+ + {% if GroupIdContext != None %}{%endif%} + +
+
+ {% for tshirt in UserClothing: %} +
+ +
+
{{tshirt.name}}
+

Sales: {{tshirt.sale_count}}

+
+
+ Edit +
+
+ {%endfor%} + {% if len(UserClothing.items) == 0: %} +
No items found
+ {%endif%} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/template.html b/app/pages/develop/template.html new file mode 100644 index 0000000..db94fbf --- /dev/null +++ b/app/pages/develop/template.html @@ -0,0 +1,54 @@ +{% extends '__layout__.html' %} +{% block title %}Develop{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Develop

+ + + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+ {% block subcontent %}{% endblock %} +
+ {% if PreviousPage > 0: %} + Previous + {%else%} + Previous + {% endif %} +

{{PageNumber}}

+ {% if NextPage > 0: %} + Next + {%else%} + Next + {% endif %} +
+
+
+ + +{% endblock %} diff --git a/app/pages/develop/universes/access.html b/app/pages/develop/universes/access.html new file mode 100644 index 0000000..1ac987d --- /dev/null +++ b/app/pages/develop/universes/access.html @@ -0,0 +1,24 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +

Access

+
+ + +
+ + +
+
+ + +
+ +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/badges.html b/app/pages/develop/universes/badges.html new file mode 100644 index 0000000..cfd3ffb --- /dev/null +++ b/app/pages/develop/universes/badges.html @@ -0,0 +1,30 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Badges

+ +
+
+ {% for badgeObj in Badges: %} +
+
+ +
+
{{badgeObj.name}}
+

Badge ID: {{badgeObj.id}}

+

Awarded Yesterday: {{GetBadgeAwardedPastDay(badgeObj.id)}}

+

Total Awarded: {{GetTotalBadgeAwardedCount(badgeObj.id)}}

+
+ +
+
+ {% endfor %} + {% if len(Badges) == 0: %} +

No Badges found, create one by clicking the button above

+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/create-badge.html b/app/pages/develop/universes/create-badge.html new file mode 100644 index 0000000..14c904c --- /dev/null +++ b/app/pages/develop/universes/create-badge.html @@ -0,0 +1,27 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Create Badge

+ +
+
+
+
+ + +
+
+ + +
+
+
Badge Icon
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/create-gamepass.html b/app/pages/develop/universes/create-gamepass.html new file mode 100644 index 0000000..ee3c80c --- /dev/null +++ b/app/pages/develop/universes/create-gamepass.html @@ -0,0 +1,27 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Create Gamepass

+ +
+
+
+
+ + +
+
+ + +
+
+
Gamepass Icon
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/create-place.html b/app/pages/develop/universes/create-place.html new file mode 100644 index 0000000..41ab16f --- /dev/null +++ b/app/pages/develop/universes/create-place.html @@ -0,0 +1,15 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Create new place

+

{{TotalAmountPlacesCreated}} / 10 Places used

+
+
+
+

Are you sure you want to create a new place under {{RootPlaceAssetObj.name}}?

+ + + +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/create-product.html b/app/pages/develop/universes/create-product.html new file mode 100644 index 0000000..23f3fd5 --- /dev/null +++ b/app/pages/develop/universes/create-product.html @@ -0,0 +1,27 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Create Developer Product

+ +
+
+
+
+ + +
+
+ + +
+
+
Product Icon
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+ + +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/developerproducts.html b/app/pages/develop/universes/developerproducts.html new file mode 100644 index 0000000..508882e --- /dev/null +++ b/app/pages/develop/universes/developerproducts.html @@ -0,0 +1,29 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Developer Products

+ +
+
+ {% for product in DeveloperProducts: %} +
+
+ +
+
{{product.name}}
+

Product ID: {{product.productid}}

+

Total sold: {{product.sales_count}}

+
+ +
+
+ {% endfor %} + {% if len(DeveloperProducts) == 0: %} +

No Developer Products found, create one by clicking the button above

+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/edit-badge.html b/app/pages/develop/universes/edit-badge.html new file mode 100644 index 0000000..56750c7 --- /dev/null +++ b/app/pages/develop/universes/edit-badge.html @@ -0,0 +1,35 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Edit Badge

+ +
+
+
+
+
+ +
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+
+
+ +
+ + +
+
+ + +
+ + + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/edit-gamepass.html b/app/pages/develop/universes/edit-gamepass.html new file mode 100644 index 0000000..245ead1 --- /dev/null +++ b/app/pages/develop/universes/edit-gamepass.html @@ -0,0 +1,53 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Edit Gamepass

+ +
+
+
+
+
+ +
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+ R$ + +
+
+
+

* Syntax will take a 30% fee from the sale

+
+
+ + + + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/edit-product.html b/app/pages/develop/universes/edit-product.html new file mode 100644 index 0000000..edc7497 --- /dev/null +++ b/app/pages/develop/universes/edit-product.html @@ -0,0 +1,53 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Edit Developer Product

+ +
+
+
+
+
+ +
+ +

Must be a PNG, minimum 128x128 and maximum 1024x1024, less than 1mb

+
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+ R$ + +
+
+
+

* Syntax will take a 30% fee from the sale

+
+
+ + + + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/gamepasses.html b/app/pages/develop/universes/gamepasses.html new file mode 100644 index 0000000..44ea129 --- /dev/null +++ b/app/pages/develop/universes/gamepasses.html @@ -0,0 +1,29 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+

Gamepasses

+ +
+
+ {% for gamepassobj in Gamepasses: %} +
+
+ +
+
{{gamepassobj.gamepass.name}}
+

Gamepass ID: {{gamepassobj.gamepass_id}}

+

Total sold: {{gamepassobj.gamepass.sale_count}}

+
+ +
+
+ {% endfor %} + {% if len(Gamepasses) == 0: %} +

No gamepasses found, create one by clicking the button above

+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/manage-template.html b/app/pages/develop/universes/manage-template.html new file mode 100644 index 0000000..dc3f8dd --- /dev/null +++ b/app/pages/develop/universes/manage-template.html @@ -0,0 +1,64 @@ +{% extends '__layout__.html' %} +{% block title %}Manage Universe{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +

{{RootPlaceAssetObj.name}}

+

Universe ID: {{UniverseObj.id}} Starting Place ID: {{RootPlaceAssetObj.id}}

+
+
+ +
+ {% block subcontent %}{% endblock %} +
+
+
+
+{% endblock %} diff --git a/app/pages/develop/universes/manage.html b/app/pages/develop/universes/manage.html new file mode 100644 index 0000000..c4494e0 --- /dev/null +++ b/app/pages/develop/universes/manage.html @@ -0,0 +1,21 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +

Basic Settings

+
+ + +

Updating name and description will update the Starting Place name and description

+
Place Year
+ + +
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/develop/universes/places.html b/app/pages/develop/universes/places.html new file mode 100644 index 0000000..e28a8a8 --- /dev/null +++ b/app/pages/develop/universes/places.html @@ -0,0 +1,27 @@ +{% extends 'develop/universes/manage-template.html' %} +{% block subcontent %} +
+
+

Places

+

{{TotalAmountPlacesCreated}} / 10 Places used

+
+ +
+
+ {% for placeObj in universePlaces: %} +
+ +
+
{{placeObj.assetObj.name}}
+ {% if UniverseObj.root_place_id == placeObj.placeid %}

Start Place

{% endif %} +

Place ID: {{placeObj.placeid}}

+
+ +
+ {% endfor %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/discourse/leaving-syntax.html b/app/pages/discourse/leaving-syntax.html new file mode 100644 index 0000000..bb5c8da --- /dev/null +++ b/app/pages/discourse/leaving-syntax.html @@ -0,0 +1,24 @@ +{% extends '__layout__.html' %} +{% block title %}Leaving SYNTAX{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+

You are leaving SYNTAX

+

+ SYNTAX Forums is an official forum hosted by syntax.eco +

+ Take me there +

You will be redirected to {{baseurl}}

+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/discourse/sso-confirm.html b/app/pages/discourse/sso-confirm.html new file mode 100644 index 0000000..bb06049 --- /dev/null +++ b/app/pages/discourse/sso-confirm.html @@ -0,0 +1,35 @@ +{% extends '__layout__.html' %} +{% block title %}SSO Login{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ +

Logged in as {{currentuser.username}}

+
+
+

Authorise SYNTAX Forums

+

+ SYNTAX Forums is a official website hosted by syntax.eco, authorising will allow SYNTAX Forums to access the following information: +

+
    +
  • Username
  • +
  • User ID
  • +
+
+ + +
+

You will be redirected to {{baseurl}}/session/sso_login

+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/downloads.html b/app/pages/downloads.html new file mode 100644 index 0000000..4264e21 --- /dev/null +++ b/app/pages/downloads.html @@ -0,0 +1,66 @@ +{% extends '__layout__.html' %} +{% block title %}Downloads{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Downloads

+ +
+
+
+

Windows Client Bootstrapper

+

MD5: ec3104998c809682c74c8dca5476b91d

+
+ Bootstrapper VirusTotal +

+ | Windows 10 or newer required | +

+ Mirror Download +
+
+
+ Download +
+
+
+
+

Linux Client Bootstrapper

+

MD5: 895ea276c3ffcd82cbac7f56856cf734

+
+ Bootstrapper VirusTotal +

+ | Wine is required, run chmod +x ./SyntaxPlayerLinuxLauncher && ./SyntaxPlayerLinuxLauncher | +

+ Mirror Download +
+
+
+ Download +
+
+
+
+

Android 2020 ( BETA )

+

MD5: c1261b01020efbffb7a2ad1cd955353d

+
+

+ Note: This will overwrite the original Roblox app if you have it installed! And is still very buggy | +

+ Mirror Download +
+
+
+ Download +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/drivers.html b/app/pages/drivers.html new file mode 100644 index 0000000..91ceda4 --- /dev/null +++ b/app/pages/drivers.html @@ -0,0 +1,17 @@ +{% extends '__layout__.html' %} +{% block title %}Drivers{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Drivers

+
+

If you have issues with SYNTAX not starting because of graphics issues you should seriously consider buying a new computer or graphics card

+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/games/games.py b/app/pages/games/games.py new file mode 100644 index 0000000..e4d688d --- /dev/null +++ b/app/pages/games/games.py @@ -0,0 +1,296 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort, flash +from app.util import auth, placeinfo +from app.models.asset import Asset +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.gameservers import GameServer +from app.models.place import Place +from app.models.gamepass_link import GamepassLink +from app.models.userassets import UserAsset +from app.models.groups import Group, GroupRole, GroupRolePermission +from app.models.place_badge import PlaceBadge, UserBadge +from app.models.universe import Universe +from slugify import slugify +from app.pages.develop.develop import ShutdownServer +from app.enums.AssetType import AssetType +from app.models.user import User +from app.util.membership import GetUserMembership +from app.enums.MembershipType import MembershipType +from app.routes.rate import GetAssetLikesAndDislikes, GetUserVoteStatus, GetAssetVotePercentage, GetAssetFavoriteCount, GetUserFavoriteStatus +from app.routes.badgesapi import CalculateBadgeRarity, GetBadgeAwardedPastDay +from app.services import groups +from sqlalchemy import and_, func +from datetime import datetime, timedelta +import logging + +GamePagesRoute = Blueprint("games", __name__, template_folder="pages") + +def DoesUserownGamepass( gamepass_id, userid ): + GamepassObj : Asset = Asset.query.filter_by(id=gamepass_id, asset_type = AssetType.GamePass).first() + if GamepassObj is None: + return False + UserGamepass : UserAsset = UserAsset.query.filter_by(userid=userid, assetid=GamepassObj.id).first() + if UserGamepass is None: + return False + return True +def DoesUserOwnBadge( badge_id, userid ): + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by(id=badge_id).first() + if BadgeObj is None: + return False + UserBadgeObj : UserBadge = UserBadge.query.filter_by(badge_id=badge_id, user_id=userid).first() + if UserBadgeObj is None: + return False + return True + +def GetTotalBadgeAwardedCount( badge_id ) -> int: + return UserBadge.query.filter_by( badge_id = badge_id ).count() + +@GamePagesRoute.route("/games//", methods=["GET"]) +@GamePagesRoute.route("/games//", methods=["GET"]) +@auth.authenticated_required +def game_page(placeid : int, slug=None): + AssetObject : Asset = Asset.query.filter_by(id=placeid).first() + if AssetObject is None: + return abort(404) + if AssetObject.asset_type != AssetType.Place: + # Let catalog handle the redirect + return redirect(f"/catalog/{str(placeid)}/") + SlugName = slugify(AssetObject.name, lowercase=False) + if SlugName is None or SlugName == "": + SlugName = "unnamed" + if slug is None: + return redirect(f"/games/{str(placeid)}/{SlugName}") + if slug != SlugName: + return redirect(f"/games/{str(placeid)}/{SlugName}") + if AssetObject.creator_type == 0: + CreatorObject : User = User.query.filter_by(id=AssetObject.creator_id).first() + else: + CreatorObject : Group = Group.query.filter_by(id=AssetObject.creator_id).first() + PlaceObj : Place = Place.query.filter_by(placeid=placeid).first() + if PlaceObj is None: + return abort(404) + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + ActualRootPlace : Asset = Asset.query.filter_by(id=UniverseObj.root_place_id).first() + + try: + SplittedDescription = AssetObject.description.split("\n") + LikeCount, DislikeCount = GetAssetLikesAndDislikes(AssetObject.id) + AuthenticatedUser : User = auth.GetCurrentUser() + + PlaceServerObjs : list[PlaceServer] = PlaceServer.query.filter_by(serverPlaceId=placeid).all() + ActiveServers = [] + for PlaceServerObj in PlaceServerObjs: + PlayersInServer : list[PlaceServerPlayer] = PlaceServerPlayer.query.filter_by(serveruuid=PlaceServerObj.serveruuid).all() + GameServerObj : GameServer = GameServer.query.filter_by(serverId=PlaceServerObj.originServerId).first() + if GameServerObj is None: + continue + ActiveServers.append({ + "id": PlaceServerObj.serveruuid, + "playercount": PlaceServerObj.playerCount, + "maxplayercount": PlaceServerObj.maxPlayerCount, + "players": PlayersInServer, + "host": GameServerObj.serverName, + "is_reserved_server": PlaceServerObj.reservedServerAccessCode is not None + }) + + Gamepasses : list[GamepassLink] = GamepassLink.query.filter_by(universe_id = PlaceObj.parent_universe_id).all() + UserDoesNotHaveBC : bool = UniverseObj.bc_required and GetUserMembership(AuthenticatedUser) == MembershipType.NonBuildersClub + CanShutdownServer = False if AuthenticatedUser.id != 1 else True + if AssetObject.creator_type == 0: + if AuthenticatedUser.id == AssetObject.creator_id: + CanShutdownServer = True + else: + GroupObj : Group = groups.GetGroupFromId( AssetObject.creator_id ) + UserGroupRole : GroupRole = groups.GetUserRolesetInGroup( AuthenticatedUser, GroupObj ) + if UserGroupRole is None: + CanShutdownServer = False + UserGroupRolePermission : GroupRolePermission = groups.GetRolesetPermission( UserGroupRole ) + if UserGroupRolePermission.manage_group_games: + CanShutdownServer = True + + GameBadges : list[PlaceBadge] = PlaceBadge.query.filter_by( universe_id = PlaceObj.parent_universe_id ).all() + + return render_template("games/view.html", PlaceAssetObj=AssetObject, + CreatorObj=CreatorObject, + PlaceObj=PlaceObj, + SplittedDescription=SplittedDescription, + PlayerCount=placeinfo.GetPlayingCount(PlaceObj), + LikeCount=LikeCount, + DislikeCount=DislikeCount, + UserVoteStatus=GetUserVoteStatus(AssetObject.id, AuthenticatedUser.id), + UserFavoriteStatus=GetUserFavoriteStatus(AssetObject.id, AuthenticatedUser.id), + FavoriteCount=GetAssetFavoriteCount(AssetObject.id), + ActiveServers=ActiveServers, + ActiveServerCount=len(ActiveServers), + Gamepasses=Gamepasses, + DoesUserownGamepass=DoesUserownGamepass, + UserDoesNotHaveBC=UserDoesNotHaveBC, + IsTooYoung = (datetime.utcnow() - AuthenticatedUser.created).days < UniverseObj.minimum_account_age, + MinAccountAge = UniverseObj.minimum_account_age, + CanShutdownServer = CanShutdownServer, + GameBadges = GameBadges, + CalculateBadgeRarity = CalculateBadgeRarity, + DoesUserOwnBadge = DoesUserOwnBadge, + GetTotalBadgeAwardedCount = GetTotalBadgeAwardedCount, + GetBadgeAwardedPastDay = GetBadgeAwardedPastDay, + UniverseObj = UniverseObj, + UniverseRootPlace = ActualRootPlace + ) + + except Exception as e: + logging.error(f"Error during rendering game page [{placeid}]: {str(e)}") + return redirect(f"/games/{str(placeid)}/{SlugName}") + +@GamePagesRoute.route("/games//shutdown-server/", methods=["POST"]) +@auth.authenticated_required +def game_shutdown_server(placeid : int, jobid : str): + AuthenticatedUser : User = auth.GetCurrentUser() + AssetObject : Asset = Asset.query.filter_by(id=placeid).first() + if AssetObject is None: + return abort(404) + if AssetObject.asset_type != AssetType.Place: + return abort(404) + TargetPlaceServer : PlaceServer = PlaceServer.query.filter_by(serveruuid=jobid).first() + if TargetPlaceServer is None: + return abort(404) + if (AssetObject.creator_id != AuthenticatedUser.id and AssetObject.creator_type != 1) and AuthenticatedUser.id != 1: + return abort(403) + if AssetObject.creator_type == 1: + GroupObj : Group = groups.GetGroupFromId( AssetObject.creator_id ) + UserGroupRole : GroupRole = groups.GetUserRolesetInGroup( AuthenticatedUser, GroupObj ) + if UserGroupRole is None: + return abort(403) + UserGroupRolePermission : GroupRolePermission = groups.GetRolesetPermission( UserGroupRole ) + if not UserGroupRolePermission.manage_group_games: + return abort(403) + ShutdownServer(TargetPlaceServer.serveruuid) + flash("Requested server shutdown", "success") + return redirect(f"/games/{str(placeid)}/") + +@GamePagesRoute.route("/games", methods=["GET"]) +@auth.authenticated_required +def games_page(): + TopPlacesInfo = [] + PageNumber = max( request.args.get('page', default = 1, type = int ), 1 ) + SearchQuery = request.args.get('q', default = None, type = str) + GameLookupResultsBackendResult = None + GameLookupResults = [] + if SearchQuery: + SearchQuery = SearchQuery.strip().replace('%', '') + if len(SearchQuery) > 0 and len(SearchQuery) <= 32: + GameLookupResultsBackendResult = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join( Asset, Asset.id == Place.placeid ).filter( Asset.name.ilike(f"%{SearchQuery}%") ).filter_by( moderation_status = 0 ).order_by( Universe.visit_count.desc() ).paginate(page=PageNumber, per_page=36, error_out=False) + else: + flash('Invalid search query.', 'danger') + + if GameLookupResultsBackendResult: + for UniverseObj in GameLookupResultsBackendResult: + UniverseObj : Universe + AssetObj : Asset = Asset.query.filter_by(id=UniverseObj.root_place_id).first() + if AssetObj is None: + continue + + PlaceObjData = { + "id": UniverseObj.root_place_id, + "name": AssetObj.name, + "playingcount": placeinfo.GetUniversePlayingCount(UniverseObj), + "slug": slugify(AssetObj.name, lowercase=False) if AssetObj.name is not None else "", + "likePercentage": GetAssetVotePercentage(AssetObj.id), + "placeyear": UniverseObj.place_year + } + GameLookupResults.append(PlaceObjData) + + PopularGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join( Asset, Asset.id == Place.placeid ).filter_by( moderation_status = 0 ).outerjoin( PlaceServer, PlaceServer.serverPlaceId == Place.placeid ).group_by( Universe.id ) + PopularGames = PopularGames.order_by( func.coalesce( func.sum( PlaceServer.playerCount ), 0 ).desc() ).order_by( Universe.visit_count.desc() ) + + UniverseObjsList = PopularGames.limit(24).all() + for UniverseObj in UniverseObjsList: + UniverseObj : Universe + AssetObj : Asset = Asset.query.filter_by(id=UniverseObj.root_place_id).first() + if AssetObj is None: + continue + PlaceObjData = { + "id": UniverseObj.root_place_id, + "name": AssetObj.name, + "playingcount": placeinfo.GetUniversePlayingCount( UniverseObj ), + "slug": slugify(AssetObj.name, lowercase=False) if AssetObj.name is not None else "", + "likePercentage": GetAssetVotePercentage(UniverseObj.root_place_id), + "placeyear": UniverseObj.place_year + } + TopPlacesInfo.append(PlaceObjData) + + RecentlyUpdatedUniverses : list[Universe] = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).join( Asset, Asset.id == Universe.root_place_id ).filter_by( moderation_status = 0 ).order_by(Universe.updated_at.desc()).limit(24).all() + RecentlyUpdatedUniversesInfo = [] + for UniverseObj in RecentlyUpdatedUniverses: + PlaceObj : Place = Place.query.filter_by(placeid=UniverseObj.root_place_id).first() + if PlaceObj is None: + continue + AssetObj : Asset = Asset.query.filter_by(id=PlaceObj.placeid).first() + if len(RecentlyUpdatedUniversesInfo) >= 24: + break + PlaceObjData = { + "id": AssetObj.id, + "name": AssetObj.name, + "playingcount": placeinfo.GetUniversePlayingCount( UniverseObj ), + "slug": slugify(AssetObj.name, lowercase=False) if AssetObj.name is not None else "", + "likePercentage": GetAssetVotePercentage(AssetObj.id), + "placeyear": UniverseObj.place_year + } + RecentlyUpdatedUniversesInfo.append(PlaceObjData) + + FeaturedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0, Universe.is_featured == True ) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join( Asset, Asset.id == Place.placeid ).filter_by( moderation_status = 0 ).outerjoin( PlaceServer, PlaceServer.serverPlaceId == Place.placeid ).group_by( Universe.id ) + FeaturedGames = FeaturedGames.order_by( func.coalesce( func.sum( PlaceServer.playerCount ), 0 ).desc() ).order_by( Universe.visit_count.desc() ) + FeaturedPlaceObjs = FeaturedGames.limit(24).all() + FeaturedPlacesInfo = [] + for UniverseObj in FeaturedPlaceObjs: + UniverseObj : Universe + AssetObj : Asset = Asset.query.filter_by(id=UniverseObj.root_place_id).first() + if AssetObj is None: + continue + PlaceObjData = { + "id": UniverseObj.root_place_id, + "name": AssetObj.name, + "playingcount": placeinfo.GetUniversePlayingCount( UniverseObj ), + "slug": slugify(AssetObj.name, lowercase=False) if AssetObj.name is not None else "", + "likePercentage": GetAssetVotePercentage(AssetObj.id), + "placeyear": UniverseObj.place_year + } + FeaturedPlacesInfo.append(PlaceObjData) + + return render_template("games/index.html", PopularPlaces=TopPlacesInfo, RecentlyUpdatedPlaces=RecentlyUpdatedUniversesInfo, FeaturedPlacesInfo=FeaturedPlacesInfo, GameLookupResults = GameLookupResults, PageNumber=PageNumber, SearchQuery = SearchQuery, GameLookupResultsBackendResult = GameLookupResultsBackendResult) + +from sqlalchemy import func +@GamePagesRoute.route("/games//view", methods=["GET"]) +@auth.authenticated_required +def games_genre_page(genre : str): + pageNumber = max( request.args.get("page", default=1, type=int), 1 ) + if genre == "popular": + PopularGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join(Asset, Asset.id == Place.placeid).outerjoin(PlaceServer, PlaceServer.serverPlaceId == Place.placeid).group_by(Universe.id) + PopularGames = PopularGames.filter( Asset.moderation_status == 0).order_by(func.coalesce(func.sum(PlaceServer.playerCount), 0).desc()).order_by( Universe.visit_count.desc() ) + PopularGames = PopularGames.paginate(page=pageNumber, per_page=30, error_out=False) + ViewerFacingGenre = "Popular Games" + pageResults = PopularGames + elif genre == "updated": + UpdatedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0) ).join( Asset, Asset.id == Universe.root_place_id ).filter( Asset.moderation_status == 0 ).order_by(Universe.updated_at.desc()) + UpdatedGames = UpdatedGames.paginate(page=pageNumber, per_page=30, error_out=False) + ViewerFacingGenre = "Recently Updated" + pageResults = UpdatedGames + elif genre == "featured": + FeaturedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.moderation_status == 0, Universe.is_featured == True ) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).join(Asset, Asset.id == Place.placeid).outerjoin(PlaceServer, PlaceServer.serverPlaceId == Place.placeid).group_by(Universe.id) + FeaturedGames = FeaturedGames.filter( Asset.moderation_status == 0).order_by(func.coalesce(func.sum(PlaceServer.playerCount), 0).desc()).order_by( Universe.visit_count.desc() ) + FeaturedGames = FeaturedGames.paginate(page=pageNumber, per_page=30, error_out=False) + ViewerFacingGenre = "Featured Games" + pageResults = FeaturedGames + else: + return abort(404) + + if pageResults is None: + return abort(404) + + def getRootPlace( UniverseObj : Universe ) -> Place : + try: + return UniverseObj.root_place_obj + except: + UniverseObj.root_place_obj = Place.query.filter_by(placeid=UniverseObj.root_place_id).first() + return UniverseObj.root_place_obj + + return render_template("games/genre.html", Games=pageResults, Genre=genre, getPlayerCount = placeinfo.GetUniversePlayingCount, getAssetVotePercentage = GetAssetVotePercentage, ViewerFacingGenre=ViewerFacingGenre, getRootPlace=getRootPlace) \ No newline at end of file diff --git a/app/pages/games/genre.html b/app/pages/games/genre.html new file mode 100644 index 0000000..f0a7b24 --- /dev/null +++ b/app/pages/games/genre.html @@ -0,0 +1,47 @@ +{% extends '__layout__.html' %} +{% block title %}Games{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} + +{% endblock %} \ No newline at end of file diff --git a/app/pages/games/index.html b/app/pages/games/index.html new file mode 100644 index 0000000..9d6a3a7 --- /dev/null +++ b/app/pages/games/index.html @@ -0,0 +1,203 @@ +{% extends '__layout__.html' %} +{% block title %}Games{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ {% if GameLookupResults %} +
+
+
+ + +
+ + +
+
+ +
+ {% if GameLookupResultsBackendResult.has_prev: %} + Previous + {%else%} + Previous + {% endif %} +

Page {{GameLookupResultsBackendResult.page}} of {{GameLookupResultsBackendResult.pages}}

+ {% if GameLookupResultsBackendResult.has_next: %} + Next + {%else%} + Next + {% endif %} +
+ {% elif not GameLookupResults and SearchQuery %} +
+
+
+ + +
+ + +
+
+
+

No results found for "{{SearchQuery}}"

+
+ {% else %} +
+
+

Popular

+ View All +
+
+
+
+ + +
+ + +
+
+
+ +
+

Featured

+ View All +
+ +
+

Recently Updated

+ View All +
+ + {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/games/view.html b/app/pages/games/view.html new file mode 100644 index 0000000..97514d1 --- /dev/null +++ b/app/pages/games/view.html @@ -0,0 +1,380 @@ +{% extends '__layout__.html' %} +{% block title %}{{PlaceAssetObj.name}}{% endblock %} +{% block head %} + + + + +
+
+ +{% endblock %} +{% block content %} +
+
+ {% if UniverseObj.root_place_id != PlaceObj.placeid %} +
+

This game is part of {{UniverseRootPlace.name}}'s universe

+
+ {% endif %} +
+ {{PlaceAssetObj.name}} Thumbnail +
+
+

{{PlaceAssetObj.name}}

+ {% if PlaceAssetObj.creator_type == 0 %} +

By {{CreatorObj.username}}

+ {% else %} +

By {{CreatorObj.name}}

+ {% endif %} +
+ {% if UniverseObj.is_public: %} + {% if UserDoesNotHaveBC == False %} + {% if PlaceAssetObj.moderation_status != 2 or UniverseObj.moderation_status != 2 %} + {% if IsTooYoung: %} + +

Your account must be at least {{MinAccountAge}} days old to play this game

+ {% else %} + + {% endif %} + {% else %} + +

This place is currently under review

+ {% endif %} + {% else %} + +

A Builders Club membership is required to join this game

+ {% endif %} + {%else%} + +

This place has been set to private by its creator

+ {%endif%} +
+
+
+ {{FavoriteCount}} +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5 +
+
+ 5 +
+
+
+
+ +
+ +
+
+
+
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + + +
+ + + +{% endblock %} \ No newline at end of file diff --git a/app/pages/giftcardredeem/index.html b/app/pages/giftcardredeem/index.html new file mode 100644 index 0000000..e28ef7d --- /dev/null +++ b/app/pages/giftcardredeem/index.html @@ -0,0 +1,47 @@ +{% extends '__layout__.html' %} +{% block title %}Redeem{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+

Giftcard Redeem

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ +
+

Note: If you are redeeming a higher membership than your current one, your expiration date will not be brought over and will be resetted

+
+ +
+ +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/giftcardredeem/redeem.py b/app/pages/giftcardredeem/redeem.py new file mode 100644 index 0000000..45cd2c5 --- /dev/null +++ b/app/pages/giftcardredeem/redeem.py @@ -0,0 +1,139 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash +from app.models.giftcard_key import GiftcardKey +from app.enums.GiftcardType import GiftcardType +from app.extensions import db, redis_controller, limiter +from app.util import auth, websiteFeatures, turnstile, redislock, membership +from datetime import datetime, timedelta +from app.models.user import User +from app.enums.MembershipType import MembershipType +from app.services import economy + +GiftcardRedeemRoute = Blueprint('giftcardredeem', __name__, template_folder='pages') + +@GiftcardRedeemRoute.errorhandler(429) +def ratelimit_handler(e): + flash("Please slow down", "error") + return redirect("/giftcard-redeem") + +@GiftcardRedeemRoute.route('/giftcard-redeem', methods=['GET']) +@auth.authenticated_required +def giftcard_redeem(): + return render_template('giftcardredeem/index.html') + +@GiftcardRedeemRoute.route('/giftcard-redeem', methods=['POST']) +@auth.authenticated_required +@limiter.limit("10/minute") +def giftcard_post(): + if not websiteFeatures.GetWebsiteFeature("GiftcardRedeem"): + flash("Redeeming giftcards is temporarily disabled", "error") + return redirect("/giftcard-redeem") + GiftcardInput = request.form.get( key="giftcard-key", default=None, type=str) + CFTurnstileResponse = request.form.get( key="cf-turnstile-response", default=None, type=str) + if GiftcardInput is None or CFTurnstileResponse is None: + flash("Please fill in all the fields", "error") + return redirect("/giftcard-redeem") + if not turnstile.VerifyToken(CFTurnstileResponse): + flash("Invalid captcha", "error") + return redirect("/giftcard-redeem") + + RedeemLock = redislock.acquire_lock( f"Giftcard_Redeem:{GiftcardInput}", acquire_timeout=20, lock_timeout=1) + + GiftcardKeyObject : GiftcardKey = GiftcardKey.query.filter_by(key=GiftcardInput).first() + if GiftcardKeyObject is None: + flash("Invalid giftcard key", "error") + return redirect("/giftcard-redeem") + if GiftcardKeyObject.redeemed_by is not None: + flash("This giftcard has already been redeemed", "error") + return redirect("/giftcard-redeem") + AuthenticatedUser : User = auth.GetCurrentUser() + + if GiftcardKeyObject.type == GiftcardType.Outrageous_BuildersClub: + UserCurrentMembership : MembershipType = membership.GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.OutrageousBuildersClub: + membership.IncrementExpirationLength( + AuthenticatedUser, + timedelta(days=(31 * GiftcardKeyObject.value)) + ) + flash(f"Your OBC membership has been extended by {GiftcardKeyObject.value} months", "success") + else: + membership.GiveUserMembership( + TargetUser = AuthenticatedUser, + Membership = MembershipType.OutrageousBuildersClub, + expiration = timedelta(days=(31 * GiftcardKeyObject.value)) + ) + flash(f"You have been given OBC membership for {GiftcardKeyObject.value} months", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + elif GiftcardKeyObject.type == GiftcardType.Turbo_BuildersClub: + UserCurrentMembership : MembershipType = membership.GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.OutrageousBuildersClub: + flash("You cannot downgrade your membership", "error") + return redirect("/giftcard-redeem") + elif UserCurrentMembership == MembershipType.TurboBuildersClub: + membership.IncrementExpirationLength( + AuthenticatedUser, + timedelta(days=(7 * GiftcardKeyObject.value)) + ) + flash(f"Your TBC membership has been extended by {GiftcardKeyObject.value} weeks", "success") + else: + membership.GiveUserMembership( + TargetUser = AuthenticatedUser, + Membership = MembershipType.TurboBuildersClub, + expiration = timedelta(days=(7 * GiftcardKeyObject.value)) + ) + flash(f"You have been given TBC membership for {GiftcardKeyObject.value} weeks", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + elif GiftcardKeyObject.type == GiftcardType.RobuxCurrency: + economy.IncrementTargetBalance(AuthenticatedUser, GiftcardKeyObject.value, 0) + flash(f"You have been given {GiftcardKeyObject.value} robux", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + elif GiftcardKeyObject.type == GiftcardType.TixCurrency: + economy.IncrementTargetBalance(AuthenticatedUser, GiftcardKeyObject.value, 1) + flash(f"You have been given {GiftcardKeyObject.value} tickets", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + elif GiftcardKeyObject.type == GiftcardType.Item: + from app.models.userassets import UserAsset + from app.models.asset import Asset + + AssetObject : Asset = Asset.query.filter_by(id=GiftcardKeyObject.value).first() + if AssetObject is None: + flash("An issue occured when redeeming this giftcard, please contact support", "error") + return redirect("/giftcard-redeem") + if AssetObject.is_limited: + flash("An issue occured when redeeming this giftcard, please contact support", "error") + return redirect("/giftcard-redeem") + UserAssetObject : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=AssetObject.id).first() + if UserAssetObject is not None: + flash("You already own this item", "error") + return redirect("/giftcard-redeem") + UserAssetObject : UserAsset = UserAsset( + userid = AuthenticatedUser.id, + assetid = AssetObject.id + ) + db.session.add(UserAssetObject) + db.session.commit() + flash(f"You have been given the item {AssetObject.name}", "success") + GiftcardKeyObject.redeemed_by = AuthenticatedUser.id + GiftcardKeyObject.redeemed_at = datetime.utcnow() + db.session.commit() + redislock.release_lock(f"Giftcard_Redeem:{GiftcardInput}", RedeemLock) + return redirect("/giftcard-redeem") + else: + flash("An issue occured when redeeming this giftcard, please contact support", "error") + return redirect("/giftcard-redeem") + \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/create_role.html b/app/pages/groups/admin_subpage/create_role.html new file mode 100644 index 0000000..6c9a00d --- /dev/null +++ b/app/pages/groups/admin_subpage/create_role.html @@ -0,0 +1,29 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} + +

Create Role

+
+
+
Role Name
+ +
+
+
Role Description
+ +
+
+
Rank ( 1 - 254 )
+ +
+ + +
+ +
+
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/groupinfo.html b/app/pages/groups/admin_subpage/groupinfo.html new file mode 100644 index 0000000..22f5d7e --- /dev/null +++ b/app/pages/groups/admin_subpage/groupinfo.html @@ -0,0 +1,42 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} +

+ Group Information +

+ +
+
+
+ +
+ +
+
+
+
+ + +
+
+
+ +
+ +
+
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/join_requests.html b/app/pages/groups/admin_subpage/join_requests.html new file mode 100644 index 0000000..8f8a672 --- /dev/null +++ b/app/pages/groups/admin_subpage/join_requests.html @@ -0,0 +1,52 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} + +
+

Join Requests

+
+
+ + +
+
+
+
+ {% for request in JoinRequests.items %} +
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ {% endfor %} +
+{% if len(JoinRequests.items) == 0 %} +

No Results Found

+{%endif%} +
+ Previous +

Page {{JoinRequests.page}} of {{JoinRequests.pages}}

+ Next +
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/members.html b/app/pages/groups/admin_subpage/members.html new file mode 100644 index 0000000..a8647a7 --- /dev/null +++ b/app/pages/groups/admin_subpage/members.html @@ -0,0 +1,116 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} +
+

+ Members +

+ {% if group.settings.approval_required and permissions.invite_members %} + View Join Requests {{JoinRequestCount}} + {% endif %} +
+
+
+
+ + +
+
+ + +
+ +
+
+
+ {% for groupMember in Members %} +
+
+ + {% if permissions.remove_members and groupMember.group_role.rank < role.rank %} + + {%endif%} +
+ {% if permissions.change_rank and groupMember.group_role.rank < role.rank: %} + + {%else%} +

{{groupMember.group_role.name}}

+ {%endif%} + {{groupMember.user.username}} +
+ {%endfor%} +
+{% if len(Members.items) == 0 %} +

No Results Found

+{%endif%} +
+ Previous +

Page {{pageNumber}} of {{Members.pages}}

+ Next +
+ +{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/payout.html b/app/pages/groups/admin_subpage/payout.html new file mode 100644 index 0000000..e864f70 --- /dev/null +++ b/app/pages/groups/admin_subpage/payout.html @@ -0,0 +1,42 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} + +
+

One-time Payout

+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+

Enter the username of the recipient you want to pay! This is CaSe SeNsItIvE and please double check before clicking payout, all payments are final and cannot be reversed

+
+ +
+ +
+
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/roles.html b/app/pages/groups/admin_subpage/roles.html new file mode 100644 index 0000000..c65a1fe --- /dev/null +++ b/app/pages/groups/admin_subpage/roles.html @@ -0,0 +1,198 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} + +
+
+
+
Roles
+
+ {% for role in roles %} + {{role.name}} + {% endfor %} +
+ Create Role +
+
+
+
+
+
Name
+ +
+
+
Description
+ +
+
+
Rank ( 0-255 )
+ +
+ +
+
Posts
+
+
+

View group wall

+
+ +
+
+
+

Post on group wall

+
+ +
+
+
+

Delete group wall posts

+
+ +
+
+
+

View group shout

+
+ +
+
+
+

Post group shout

+
+ +
+
+
+
Members
+
+
+

Manage lower-ranked member ranks

+
+ +
+
+
+

Accept join requests

+
+ +
+
+
+

Kick lower-ranked members

+
+ +
+
+
+
Assets
+
+
+

Create Assets

+
+ +
+
+
+

Manage Assets

+
+ +
+
+
+

Manage Group Games

+
+ +
+
+
+
Miscellaneous
+
+
+

Manage allies and enemies

+
+ +
+
+
+

View audit log

+
+ +
+
+
+
+
+ +
+
+
+
+{% if selectedrole.rank == 255 or group.owner_id != currentuser.id %} + +{%endif%} +{% if group.owner_id != currentuser.id %} + +{%endif%} +{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_subpage/settings.html b/app/pages/groups/admin_subpage/settings.html new file mode 100644 index 0000000..b270215 --- /dev/null +++ b/app/pages/groups/admin_subpage/settings.html @@ -0,0 +1,60 @@ +{% extends 'groups/admin_template.html' %} +{% block page_content%} +

+ Settings +

+
+
+
Requires Approval
+
+ + +
+
+ + +
+
+
+
Entry Qualifications
+
+ + +
+
+
+
Miscellaneous
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + {%if group.owner_id != user.id %} +

Only the owner of the group can modify the group settings

+ {%endif%} +
+
+{%endblock%} \ No newline at end of file diff --git a/app/pages/groups/admin_template.html b/app/pages/groups/admin_template.html new file mode 100644 index 0000000..6346dbf --- /dev/null +++ b/app/pages/groups/admin_template.html @@ -0,0 +1,125 @@ +{% extends '__layout__.html' %} +{% block title %}Group Admin{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

{{group.name}}

+
+

Owned By {% if group.owner_id != None: %}{{group.owner.username}}{%else%}No One!{%endif%}

+ {% if permissions.spend_group_funds: %} +

Group Funds R${{group.economy.robux_balance}}T${{group.economy.tix_balance}}

+ {%endif%} + Return to group page +
+
+
+
+
+ + Group Info + + + Members + + + Settings + + {%if permissions.manage_relationships: %} + + Relationships + + {%endif%} + + Roles + + + Revenue + + {%if permissions.spend_group_funds: %} + + Payouts + + {%endif%} + {% if permissions.view_audit_logs: %} + + Audit Log + + {%endif%} +
+
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + {% block page_content%}{%endblock%} +
+
+
+
+ +{% endblock %} diff --git a/app/pages/groups/create.html b/app/pages/groups/create.html new file mode 100644 index 0000000..bc6eafb --- /dev/null +++ b/app/pages/groups/create.html @@ -0,0 +1,62 @@ +{% extends '__layout__.html' %} +{% block title %}Create Group{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Create Group

+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
Group Name
+ +
+
+
Group Description
+ +
+
+
Group Icon
+ +

File must be less than 2MB, Has to be a PNG, Must have a 1:1 ratio and be between 128x128 to 1024x1024

+
+ +
+ +
+
+
+{% endblock %} diff --git a/app/pages/groups/groupspage.py b/app/pages/groups/groupspage.py new file mode 100644 index 0000000..bfce960 --- /dev/null +++ b/app/pages/groups/groupspage.py @@ -0,0 +1,1268 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, abort, jsonify, make_response +from app.services import groups, economy +from app.models.user import User +from app.models.groups import Group, GroupMember, GroupJoinRequest, GroupRole, GroupRolePermission, GroupWallPost, GroupEconomy, GroupIcon, GroupSettings, GroupStatus +from app.util import auth, websiteFeatures, textfilter, s3helper, membership, transactions +from app.extensions import db, limiter, csrf +from slugify import slugify +from functools import wraps +from app.util.assetvalidation import ValidateClothingImage +from app.enums.MembershipType import MembershipType +from app.enums.TransactionType import TransactionType +import hashlib +import logging +from io import BytesIO +import string + +allowedCharacters = string.ascii_letters + string.digits + string.punctuation + " " + "™®" + +groups_page = Blueprint('groups_page', __name__, template_folder='templates') + +def CountAlnumericCharacters( string : str ): + count = 0 + for char in string: + if char.isalnum(): + count += 1 + return count + +def GetUserGroups( user : User ) -> list[GroupMember]: + return GroupMember.query.filter_by(user_id=user.id).all() + +def AdminPermissionRequired( GroupObj : Group | int, TargetUser : User | int ): + GroupObj : Group = groups.GetGroupFromId(GroupObj) + TargetUser : User = groups.GetUserFromId(TargetUser) + if GroupObj is None or TargetUser is None: + return abort(403) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(TargetUser, GroupObj) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + isGroupAdmin = UserPermissions.change_rank or \ + UserPermissions.manage_clan or \ + UserPermissions.manage_relationships or \ + UserPermissions.remove_members or \ + UserPermissions.spend_group_funds + + if not isGroupAdmin: + return abort(403) + +@groups_page.route('/groups/admin/', methods=['GET']) +@auth.authenticated_required +def groupadmin(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + + return redirect(f"/groups/admin/{groupid}/info") + +@groups_page.route("/groups/admin//kick/", methods=['DELETE']) +@auth.authenticated_required +@limiter.limit("25/minute") +def groupadmin_kickmember(groupid, userid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + if not UserPermissions.remove_members: + flash("You do not have permission to kick a user.", "error") + return jsonify({"success": False}),403 + + try: + TargetUser : User = groups.GetUserFromId(userid) + except groups.GroupExceptions.UserDoesNotExist: + flash("The user you are trying to kick does not exist.", "error") + return jsonify({"success": False}),404 + + if TargetUser == AuthenticatedUser: + flash("You cannot kick yourself.", "error") + return jsonify({"success": False}),403 + + TargetUserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(TargetUser, groupObject) + if TargetUserCurrentRole.rank == 0: + flash("This user is not a member of this group.", "error") + return jsonify({"success": False}),400 + + if TargetUserCurrentRole.rank >= UserCurrentRole.rank: + flash("You cannot kick a user with the same or higher rank than you.", "error") + return jsonify({"success": False}),403 + + groups.RemoveUserFromGroup(TargetUser, groupObject) + flash(f"You have kicked {TargetUser.username} from this group.", "success") + return jsonify({"success": True}),200 + +@groups_page.route("/groups/admin//members", methods=['GET']) +@auth.authenticated_required +def groupadmin_members(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + searchByUsername = request.args.get("search", None, str) + searchByRole = request.args.get("role", None, int) # Role Id + pageNumber = request.args.get("page", 1, int) + + if searchByUsername is not None: + if CountAlnumericCharacters(searchByUsername) < 3: + searchByUsername = None + if searchByRole is not None: + try: + searchByRole : GroupRole = groups.GetRolesetFromId(searchByRole) + if searchByRole.group_id != groupObject.id: + searchByRole = None + except groups.GroupExceptions.RolesetDoesNotExist: + searchByRole = None + if pageNumber < 1: + pageNumber = 1 + + if searchByUsername is None and searchByRole is None: + Members : list[GroupMember] = GroupMember.query.filter_by(group_id=groupObject.id) + elif searchByUsername is None and searchByRole is not None: + Members : list[GroupMember] = GroupMember.query.filter_by(group_id=groupObject.id, group_role_id=searchByRole.id) + elif searchByUsername is not None and searchByRole is None: + Members : list[GroupMember] = GroupMember.query.filter_by(group_id=groupObject.id).join(User).filter(User.username.ilike(f"%{searchByUsername}%")) + else: + Members : list[GroupMember] = GroupMember.query.filter_by(group_id=groupObject.id, group_role_id=searchByRole.id).join(User).filter(User.username.ilike(f"%{searchByUsername}%")) + + Members = Members.order_by(GroupMember.created_at.desc()).paginate(page = pageNumber, per_page = 12, error_out = False) + SortedRoles = groupObject.roles + SortedRoles.sort(key=lambda x: x.rank, reverse=False) + + JoinRequestCount = GroupJoinRequest.query.filter_by(group_id=groupObject.id).count() + + return render_template( + "groups/admin_subpage/members.html", + group=groupObject, + user=AuthenticatedUser, + role=UserCurrentRole, + permissions=UserPermissions, + page="members", + searchByUsername=searchByUsername, + searchByRole=searchByRole, + pageNumber=pageNumber, + Members=Members, + SortedRoles = SortedRoles, + JoinRequestCount=JoinRequestCount + ) + +@groups_page.route("/groups/admin//change_role//", methods=['POST']) +@auth.authenticated_required +@limiter.limit("15/minute") +def groupadmin_members_change_role(groupid, userid, roleid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not UserPermissions.change_rank: + flash("You do not have permission to change a user's role.", "error") + return jsonify({"success": False}),403 + if userid == AuthenticatedUser.id: + flash("You cannot change your own role.", "error") + return jsonify({"success": False}),400 + + try: + TargetRole : GroupRole = groups.GetRolesetFromId(roleid) + if TargetRole.group_id != groupObject.id: + TargetRole = None + except groups.GroupExceptions.RolesetDoesNotExist: + TargetRole = None + if TargetRole is None or TargetRole.rank == 0: + flash("The role you are trying to set is invalid.", "error") + return jsonify({"success": False}),400 + if TargetRole.rank > UserCurrentRole.rank: + flash("You cannot set a user's role to a role higher than your own.", "error") + return jsonify({"success": False}),400 + + try: + TargetUser : User = groups.GetUserFromId(userid) + except groups.GroupExceptions.UserDoesNotExist: + flash("The user you are trying to set a role for does not exist.", "error") + return jsonify({"success": False}),400 + + TargetUserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(TargetUser, groupObject) + if TargetUserCurrentRole.rank > UserCurrentRole.rank: + flash("You cannot set a higher ranking user's role.", "error") + return jsonify({"success": False}),400 + if TargetUserCurrentRole.rank == 0: # Not in group + flash("The user you are trying to set a role for is not in the group.", "error") + return jsonify({"success": False}),400 + if TargetUserCurrentRole == TargetRole: + flash("The user you are trying to set a role for already has that role.", "error") + return jsonify({"success": True}),200 + + groups.ChangeUserRole(TargetUser, TargetRole) + flash(f"Successfully changed {TargetUser.username}'s role to {TargetRole.name}.", "success") + return jsonify({"success": True}),200 + +@groups_page.route("/groups/admin//members", methods=['POST']) +@auth.authenticated_required +@csrf.exempt +def groupadmin_members_search(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + searchInput = request.form.get("search-input", "", str) + searchByRole = request.form.get("search-by", 0, int) + + if searchByRole == 0: + searchByRole = None + if searchInput == "": + searchInput = None + + if searchInput is None and searchByRole is None: + return redirect(f"/groups/admin/{groupid}/members") + elif searchInput is None and searchByRole is not None: + return redirect(f"/groups/admin/{groupid}/members?role={searchByRole}") + elif searchInput is not None and searchByRole is None: + return redirect(f"/groups/admin/{groupid}/members?search={searchInput}") + else: + return redirect(f"/groups/admin/{groupid}/members?search={searchInput}&role={searchByRole}") + +@groups_page.route("/groups/admin//members/requests", methods=['GET']) +@auth.authenticated_required +def groupadmin_members_requests(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not groupObject.settings.approval_required or not UserPermissions.invite_members: + return abort(404) + PageNumber = request.args.get( key = "page", default=1, type=int) + JoinRequests : list[GroupJoinRequest] = GroupJoinRequest.query.filter_by(group_id=groupObject.id).order_by(GroupJoinRequest.created_at.desc()).paginate( page=PageNumber, per_page=12, error_out=False) + return render_template("groups/admin_subpage/join_requests.html", group=groupObject, user=AuthenticatedUser, role=UserCurrentRole, permissions=UserPermissions, page="members", JoinRequests=JoinRequests) + +@groups_page.route("/groups/admin//members/requests/deny/", methods=['GET']) +@auth.authenticated_required +def groupadmin_members_requests_deny(groupid, userid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not groupObject.settings.approval_required or not UserPermissions.invite_members: + return abort(404) + + UserJoinRequest : GroupJoinRequest = GroupJoinRequest.query.filter_by(group_id=groupObject.id, user_id=userid).first() + if UserJoinRequest is None: + flash("Join request does not exist.", "error") + return redirect(f"/groups/admin/{groupid}/members/requests") + db.session.delete(UserJoinRequest) + db.session.commit() + return redirect(f"/groups/admin/{groupid}/members/requests") + +@groups_page.route("/groups/admin//members/requests/accept/", methods=['GET']) +@auth.authenticated_required +def groupadmin_members_requests_accept(groupid, userid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not groupObject.settings.approval_required or not UserPermissions.invite_members: + return abort(404) + + UserJoinRequest : GroupJoinRequest = GroupJoinRequest.query.filter_by(group_id=groupObject.id, user_id=userid).first() + if UserJoinRequest is None: + flash("Join request does not exist.", "error") + return redirect(f"/groups/admin/{groupid}/members/requests") + UserGroupCount = groups.GetUserGroupCount(userid) + UserMembership : MembershipType = membership.GetUserMembership(userid) + GroupLimit = { + MembershipType.NonBuildersClub: 5, + MembershipType.BuildersClub: 10, + MembershipType.TurboBuildersClub: 20, + MembershipType.OutrageousBuildersClub: 100 + } + if UserGroupCount >= GroupLimit[UserMembership]: + flash("This user has reached the maximum number of groups they can join.", "error") + return redirect(f"/groups/admin/{groupid}/members/requests") + db.session.delete(UserJoinRequest) + db.session.commit() + groups.AddUserToGroup(userid, groupObject, ForceJoin=True) + + return redirect(f"/groups/admin/{groupid}/members/requests") + +@groups_page.route("/groups/admin//members/requests/deny_all", methods=['POST']) +@auth.authenticated_required +def groupadmin_members_requests_deny_all(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + if not groupObject.settings.approval_required or not UserPermissions.invite_members: + return abort(404) + + AllJoinRequests : list[GroupJoinRequest] = GroupJoinRequest.query.filter_by(group_id=groupObject.id).all() + for joinRequest in AllJoinRequests: + db.session.delete(joinRequest) + db.session.commit() + return redirect(f"/groups/admin/{groupid}/members/requests") + +@groups_page.route("/groups/admin//info", methods=['GET']) +@auth.authenticated_required +def groupadmin_info(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + return render_template("groups/admin_subpage/groupinfo.html", group=groupObject, user=AuthenticatedUser, role=UserCurrentRole, permissions=UserPermissions, page="info") + +@groups_page.route("/groups/admin//info", methods=['POST']) +@auth.authenticated_required +@limiter.limit("10/minute") +def groupadmin_info_post(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + AdminPermissionRequired(groupObject, AuthenticatedUser) + + ImageFile = request.files.get("file") + NewDescription = request.form.get("description") + + if ImageFile is not None and ImageFile.filename != "": + if ImageFile.content_length > 1024 * 1024 * 2: # 2MB + flash("Icon is too large, must be less than 2MB", "error") + return redirect(f"/groups/admin/{groupid}/info") + if ImageFile.content_type not in ["image/png", "image/jpeg"]: + flash("Icon must be a PNG or JPEG image", "error") + return redirect(f"/groups/admin/{groupid}/info") + # Validate icon + NewIcon = ValidateClothingImage( ImageFile, verifyResolution=False, validateFileSize=False, returnImage=True ) + if NewIcon is False or NewIcon is None: + flash("Icon is invalid", "error") + return redirect(f"/groups/admin/{groupid}/info") + if NewIcon.width != NewIcon.height: + flash("Icon must be a square", "error") + return redirect(f"/groups/admin/{groupid}/info") + if NewIcon.width > 1024 or NewIcon.height > 1024: + flash("Icon must be less than 1024x1024", "error") + return redirect(f"/groups/admin/{groupid}/info") + if NewIcon.width < 128 or NewIcon.height < 128: + flash("Icon must be at least 128x128", "error") + return redirect(f"/groups/admin/{groupid}/info") + + ImageFile = BytesIO() + NewIcon.save(ImageFile, format="PNG") + + ImageFile.seek(0) + IconImageHash = hashlib.sha512(ImageFile.read()).hexdigest() + if not s3helper.DoesKeyExist(IconImageHash): + ImageFile.seek(0) + s3helper.UploadBytesToS3(ImageFile.read(), IconImageHash, contentType="image/png") + + groups.SetNewGroupIcon(groupObject, IconImageHash, AuthenticatedUser) + flash("Group icon updated", "success") + + if NewDescription != groupObject.description: + if len(NewDescription) > 1024: + flash("Description must be less than 1024 characters", "error") + return redirect(f"/groups/admin/{groupid}/info") + if CountAlnumericCharacters(NewDescription) < 10: + flash("Description must contain at least 10 alphanumeric characters", "error") + return redirect(f"/groups/admin/{groupid}/info") + NewLineCount = NewDescription.count("\n") + if NewLineCount > 15: + flash("Description must contain less than 15 newlines", "error") + return redirect(f"/groups/admin/{groupid}/info") + + NewDescription = textfilter.FilterText(NewDescription) + groupObject.description = NewDescription + db.session.commit() + flash("Group description updated", "success") + + return redirect(f"/groups/admin/{groupid}/info") + +@groups_page.route("/groups/admin//settings", methods=['GET']) +@auth.authenticated_required +def groupadmin_settings(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + AdminPermissionRequired(groupObject, AuthenticatedUser) + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + return render_template("groups/admin_subpage/settings.html", group=groupObject, user=AuthenticatedUser, role=UserCurrentRole, permissions=UserPermissions, page="settings") + +@groups_page.route("/groups/admin//settings", methods=['POST']) +@auth.authenticated_required +@limiter.limit("15/minute") +def groupadmin_settings_post(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + if groupObject is None: + return abort(404) + if groupObject.owner_id != AuthenticatedUser.id: + return abort(403) + + approval_required = request.form.get("approval-required", "off", str) == "on" + membership_required = request.form.get("membership-required", "off", str) == "on" + enemy_declarations_allowed = request.form.get("declarations-allowed", "off", str) == "on" + funds_visible = request.form.get("funds-visible", "off", str) == "on" + games_visible = request.form.get("games-visible", "off", str) == "on" + + groupSettings : GroupSettings = groupObject.settings + groupSettings.approval_required = approval_required + groupSettings.membership_required = membership_required + groupSettings.enemies_allowed = enemy_declarations_allowed + groupSettings.funds_visible = funds_visible + groupSettings.games_visible = games_visible + if not approval_required: + AllJoinRequests : list[GroupJoinRequest] = GroupJoinRequest.query.filter_by(group_id=groupObject.id).all() + for joinRequest in AllJoinRequests: + db.session.delete(joinRequest) + db.session.commit() + + flash("Group settings updated", "success") + return redirect(f"/groups/admin/{groupid}/settings") + +@groups_page.route('/groups/admin//roles', methods=["GET"]) +@auth.authenticated_required +def groupadmin_roles(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + AdminPermissionRequired(groupObject, AuthenticatedUser) + + # Redirect to the top role + TopRole : GroupRole = GroupRole.query.filter_by(group_id=groupObject.id).order_by(GroupRole.rank.desc()).first() + return redirect(f"/groups/admin/{groupid}/roles/{TopRole.id}/view") + +@groups_page.route('/groups/admin//roles//view', methods=["GET"]) +@auth.authenticated_required +def groupadmin_role_view(groupid, roleid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + AdminPermissionRequired(groupObject, AuthenticatedUser) + + try: + roleObject : GroupRole = groups.GetRolesetFromId(roleid) + except groups.GroupExceptions.RolesetDoesNotExist: + return abort(404) + if roleObject.group_id != groupObject.id: + return abort(404) + + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + AllGroupRoles : list[GroupRole] = GroupRole.query.filter_by(group_id=groupObject.id).order_by(GroupRole.rank.desc()).all() + return render_template("groups/admin_subpage/roles.html", group=groupObject, user=AuthenticatedUser, roles=AllGroupRoles, page="roles", role=UserCurrentRole, permissions=UserPermissions, selectedrole = roleObject) + +@groups_page.route('/groups/admin//roles//update', methods=["POST"]) +@auth.authenticated_required +@limiter.limit("10/minute") +def groupadmin_role_update(groupid, roleid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + try: + TargetRole : GroupRole = groups.GetRolesetFromId(roleid) + except groups.GroupExceptions.RolesetDoesNotExist: + return abort(404) + if TargetRole.group_id != groupObject.id: + return abort(404) + + RoleName = request.form.get("role-name", TargetRole.name, str) + RoleDescription = request.form.get("role-description", TargetRole.description, str) + RoleRank = request.form.get("role-rank", TargetRole.rank, int) + + ViewWallPermission = request.form.get("view_wall", "off", str) == "on" + PostWallPermission = request.form.get("post_to_wall", "off", str) == "on" + DeleteWallPermission = request.form.get("delete_from_wall", "off", str) == "on" + ViewGroupShoutPermission = request.form.get("view_status", "off", str) == "on" + PostGroupShoutPermission = request.form.get("post_to_status", "off", str) == "on" + + ManageMembersPermission = request.form.get("change_rank", "off", str) == "on" + AcceptJoinsPermission = request.form.get("invite_members", "off", str) == "on" + RemoveMembersPermission = request.form.get("remove_members", "off", str) == "on" + + CreateItemsPermission = request.form.get("create_items", "off", str) == "on" + ManageItemsPermission = request.form.get("manage_items", "off", str) == "on" + ManageGroupGamesPermission = request.form.get("manage_group_games", "off", str) == "on" + + ManageRelationshipsPermission = request.form.get("manage_relationships", "off", str) == "on" + ViewAuditLogsPermission = request.form.get("view_audit_logs", "off", str) == "on" + + if TargetRole.rank == 0: + if RoleName != TargetRole.name or RoleDescription != TargetRole.description or RoleRank != TargetRole.rank: + return abort(400) + if CreateItemsPermission or ManageItemsPermission or ManageGroupGamesPermission: + flash("You cannot give the guest role Asset permissions.", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + + FilteredRoleName = textfilter.FilterText(RoleName) + FilteredRoleDescription = textfilter.FilterText(RoleDescription) + if len(FilteredRoleName) > 32: + flash("Role name must be less than 32 characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + if len(FilteredRoleDescription) > 256: + flash("Role description must be less than 256 characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + if CountAlnumericCharacters(FilteredRoleName) < 3: + flash("Role name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + + if RoleRank < 1 or RoleRank > 254: + if TargetRole.rank not in [0, 255]: + flash("Role rank must be between 1 and 254. 0 and 255 are reserved for guests and the owner.", "error") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + + if TargetRole.rank != 0: + TargetRole.name = FilteredRoleName + TargetRole.description = FilteredRoleDescription + + if TargetRole.rank not in [0,255]: + TargetRole.rank = RoleRank + + if TargetRole.rank != 255: + groups.ModifyRolesetPermission( + TargetRole, + ViewWall=ViewWallPermission, + PostToWall=PostWallPermission, + DeleteFromWall=DeleteWallPermission, + ViewStatus=ViewGroupShoutPermission, + PostToStatus=PostGroupShoutPermission, + + ChangeRank=ManageMembersPermission, + InviteMembers=AcceptJoinsPermission, + RemoveMembers=RemoveMembersPermission, + + CreateItems=CreateItemsPermission, + ManageItems=ManageItemsPermission, + ManageGroupGames=ManageGroupGamesPermission, + + ManageRelationships=ManageRelationshipsPermission, + ViewAuditLogs=ViewAuditLogsPermission + ) + + db.session.commit() + flash("Role updated", "success") + return redirect(f"/groups/admin/{groupid}/roles/{roleid}/view") + +@groups_page.route('/groups/admin//roles/create', methods=["GET"]) +@auth.authenticated_required +def groupadmin_role_create(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + return render_template("groups/admin_subpage/create_role.html", group=groupObject, user=AuthenticatedUser, page="roles", role=UserCurrentRole, permissions=UserPermissions) + +@groups_page.route('/groups/admin//roles/create', methods=["POST"]) +@auth.authenticated_required +@limiter.limit("10/minute") +def groupadmin_role_create_post(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + + RoleName = request.form.get("name", None, str) + RoleDescription = request.form.get("description", None, str) + RoleRank = request.form.get("rank", None, int) + + if RoleName is None or RoleDescription is None or RoleRank is None: + return abort(400) + if RoleRank < 1 or RoleRank > 254: + flash("Role rank must be between 1 and 254. 0 and 255 are reserved for guests and the owner.", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + if len(RoleName) > 32: + flash("Role name must be less than 32 characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + if len(RoleDescription) > 256: + flash("Role description must be less than 256 characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + if CountAlnumericCharacters(RoleName) < 3: + flash("Role name must contain at least 3 alphanumeric characters", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + + GroupRoleCount = GroupRole.query.filter_by(group_id=groupObject.id).count() + if GroupRoleCount >= 255: + flash("You cannot create more than 255 roles. ( Why do you even need that many!? )", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + + RobuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if RobuxBalance < 25: + flash("You do not have enough robux to create a new role.", "error") + return redirect(f"/groups/admin/{groupid}/roles/create") + economy.DecrementTargetBalance(AuthenticatedUser, 25, 0) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id=1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = 25, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + AssetId = None, + CustomText = "Created Group Role" + ) + + FilteredRoleName = textfilter.FilterText(RoleName) + FilteredRoleDescription = textfilter.FilterText(RoleDescription) + + NewRole : GroupRole = groups.CreateGroupRoleset(groupObject, FilteredRoleName, FilteredRoleDescription, RoleRank) + groups.ModifyRolesetPermission( + NewRole, + ViewWall=True, + PostToWall=True, + ViewStatus=True + ) + return redirect(f"/groups/admin/{groupid}/roles/{NewRole.id}/view") + +@groups_page.route('/groups/admin//payouts', methods=["GET"]) +@auth.authenticated_required +def groupadmin_payout_user(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + return render_template("groups/admin_subpage/payout.html", group=groupObject, user=AuthenticatedUser, page="payouts", role=UserCurrentRole, permissions=UserPermissions) + +@groups_page.route('/groups/admin//payouts/one-time', methods=["POST"]) +@auth.authenticated_required +@limiter.limit("15/minute") +def groupadmin_payout_onetime_user_post( groupid : int ): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != groupObject.owner_id: + return abort(403) + + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + + payoutCurrency : str = request.form.get( key = "payout-currency", default = None, type = str ) + payoutAmount : int = request.form.get( key = "payout-amount", default = None, type = int ) + payoutRecipientUsername : str = request.form.get( key = "payout-recipient", default = None, type = str ) + + if payoutCurrency is None or payoutAmount is None or payoutRecipientUsername is None: + return abort(400) + + if payoutCurrency not in ["robux", "tickets"]: + return abort(400) + + if payoutAmount < 1: + flash("Payout amount must be greater than 0", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + if len(payoutRecipientUsername) > 128: + flash("User does not exist or username is not correct", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + + payoutRecipient : User = User.query.filter_by(username=payoutRecipientUsername).first() + if payoutRecipient is None: + flash("User does not exist or username is not correct", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + if payoutRecipient.accountstatus != 1: + flash("User has a active ban", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + if groups.GetUserRankInGroup(payoutRecipient, groupObject) == 0: + flash("User is not in the group", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + + robuxBalance, ticketsBalance = economy.GetGroupBalance( groupObject ) + if payoutCurrency == "robux": + if robuxBalance < payoutAmount: + flash("Group does not have enough robux to payout", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + elif payoutCurrency == "tickets": + if ticketsBalance < payoutAmount: + flash("Group does not have enough tickets to payout", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + + try: + economy.TransferFunds( + Source = groupObject, + Target = payoutRecipient, + Amount = payoutAmount, + CurrencyType = 0 if payoutCurrency == "robux" else 1, + ApplyTax = False + ) + except economy.InsufficientFundsException: + flash("Group does not have enough funds to payout", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + except Exception as e: + logging.error(f"groupadmin_payout_onetime_user_post : An error occured while trying to payout: {e}") + flash("An error occured while trying to payout, please contact support", "error") + return redirect(f"/groups/admin/{groupid}/payouts") + + try: + transactions.CreateTransaction( + Reciever = payoutRecipient, + Sender = groupObject, + CurrencyAmount = payoutAmount, + CurrencyType = 0 if payoutCurrency == "robux" else 1, + TransactionType = TransactionType.GroupPayout, + AssetId = None, + CustomText = f"Group Payout from {AuthenticatedUser.username}" + ) + except Exception as e: + logging.error(f"groupadmin_payout_onetime_user_post : An error occured while trying to create a transaction: {e}") + + flash(f"Successfully paid {payoutRecipient.username} {payoutAmount} {payoutCurrency}", "success") + return redirect(f"/groups/admin/{groupid}/payouts") + +@groups_page.route('/groups//') +@groups_page.route('/groups//') +@auth.authenticated_required +def groupview(groupid, slug=""): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + SlugName = slugify(groupObject.name, lowercase=False) + if SlugName is None or SlugName == "": + SlugName = "unnamed" + + if slug != SlugName: + PageNumber = request.args.get( key = "page", default=None, type=int) + if PageNumber is None: + return redirect(f"/groups/{groupid}/{SlugName}") + else: + return redirect(f"/groups/{groupid}/{SlugName}?page={PageNumber}") + + AuthenticatedUser : User = auth.GetCurrentUser() + UserCurrentRole : GroupRole = groups.GetUserRolesetInGroup(AuthenticatedUser, groupObject) + + GroupWall = [] + if UserCurrentRole.permissions.view_wall: + PageNumber : int = request.args.get( key = "page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + GroupWall = GroupWallPost.query.filter_by(group_id=groupObject.id).order_by(GroupWallPost.created_at.desc()).paginate( page=PageNumber, per_page=10, error_out=False) + + GroupRoles : list[GroupRole] = groupObject.roles + GroupRoles.sort(key=lambda x: x.rank, reverse=False) + + UserPermissions : GroupRolePermission = UserCurrentRole.permissions + isGroupAdmin = UserPermissions.change_rank or \ + UserPermissions.manage_clan or \ + UserPermissions.manage_relationships or \ + UserPermissions.remove_members or \ + UserPermissions.spend_group_funds + CurrentJoinRequest : GroupJoinRequest | None = groups.GetJoinRequest(AuthenticatedUser, groupObject) + + return render_template( + 'groups/view.html', + groupObj=groupObject, + groupservice = groups, + UserCurrentRole=UserCurrentRole, + UserGroups=GetUserGroups(AuthenticatedUser), + GroupWall=GroupWall, + GroupRoles=GroupRoles, + GroupStatus=groups.GetLatestGroupStatus(groupObject), + PageNumber=PageNumber, + isThereNextPage=GroupWall.has_next, + isTherePreviousPage=GroupWall.has_prev, + slug=SlugName, + isGroupAdmin=isGroupAdmin, + CurrentJoinRequest=CurrentJoinRequest) + +@groups_page.errorhandler(429) +def RateLimitReached(e): + if request.headers.get("Accept", default="text/html") == "application/json": + return jsonify({ + "error": "You are being rate limited. Please try again later.", + "success": False + }), 429 + + flash("You are being rate limited. Please try again later.", "error") + return make_response(redirect(request.referrer), 429) + +@groups_page.route('/groups/join/', methods=["POST"]) +@limiter.limit("5/minute", on_breach=RateLimitReached) +@auth.authenticated_required +def groupjoin(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + if not websiteFeatures.GetWebsiteFeature("GroupJoining"): + flash("Group joining is temporarily disabled!", "error") + return redirect(f"/groups/{groupid}/") + + if groupObject.locked: + flash("This group is locked!", "error") + return redirect(f"/groups/{groupid}/") + + AuthenticatedUser : User = auth.GetCurrentUser() + if groups.GetUserRankInGroup(AuthenticatedUser, groupObject) != 0: + flash("You are already in this group!", "error") + return redirect(f"/groups/{groupid}/") + ExisitingJoinRequest : GroupJoinRequest = groups.GetJoinRequest(AuthenticatedUser, groupObject) + if ExisitingJoinRequest is not None: + flash("You have already requested to join this group!", "error") + return redirect(f"/groups/{groupid}/") + + UserMembership : MembershipType = membership.GetUserMembership(AuthenticatedUser) + if groupObject.settings.membership_required: + if UserMembership == MembershipType.NonBuildersClub: + flash("You need to have a Builders Club membership to join this group!", "error") + return redirect(f"/groups/{groupid}/") + + UserGroupCount = groups.GetUserGroupCount(AuthenticatedUser) + GroupLimit = { + MembershipType.NonBuildersClub: 5, + MembershipType.BuildersClub: 10, + MembershipType.TurboBuildersClub: 20, + MembershipType.OutrageousBuildersClub: 100 + } + if UserGroupCount >= GroupLimit[UserMembership]: + flash("You have reached the maximum number of groups you can join!", "error") + return redirect(f"/groups/{groupid}/") + + JoinResponse : GroupMember | GroupJoinRequest | None = groups.AddUserToGroup( TargetUser=AuthenticatedUser, TargetGroup=groupObject, ForceJoin=False) + if JoinResponse is None: + flash("An error occured while trying to join this group!", "error") + return redirect(f"/groups/{groupid}/") + if isinstance(JoinResponse, GroupJoinRequest): + flash("Your join request has been sent!", "success") + return redirect(f"/groups/{groupid}/") + + flash("Joined group successfully!", "success") + return redirect(f"/groups/{groupid}/") + +@groups_page.route('/groups/leave/', methods=["POST"]) +@auth.authenticated_required +def groupleave(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + if not websiteFeatures.GetWebsiteFeature("GroupLeaving"): + flash("Group leaving is temporarily disabled!", "error") + return redirect(f"/groups/{groupid}/") + + AuthenticatedUser : User = auth.GetCurrentUser() + if groups.GetUserRankInGroup(AuthenticatedUser, groupObject) == 0: + CurrentJoinRequest : GroupJoinRequest | None = groups.GetJoinRequest(AuthenticatedUser, groupObject) + if CurrentJoinRequest is not None: + db.session.delete(CurrentJoinRequest) + db.session.commit() + flash("Your join request has been cancelled!", "success") + return redirect(f"/groups/{groupid}/") + flash("You are not in this group!", "error") + return redirect(f"/groups/{groupid}/") + if groupObject.owner_id == AuthenticatedUser.id: + flash("Owners cannot leave their group for now", "error") + return redirect(f"/groups/{groupid}/") + + LeaveResponse : bool = groups.RemoveUserFromGroup( TargetUser=AuthenticatedUser, TargetGroup=groupObject) + if not LeaveResponse: + flash("An error occured while trying to leave this group!", "error") + return redirect(f"/groups/{groupid}/") + + flash("Left group successfully!", "success") + return redirect(f"/groups/{groupid}/") + +@groups_page.route('/groups/members_json/', methods=["GET"]) +@groups_page.route('/groups//members_json', methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("5/second") +def groupmembers_json(groupid): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + RolesetId : int = request.args.get( key ="role", default=None, type=int) + PageNumber : int = request.args.get( key = "page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + + try: + RolesetObject : GroupRole = groups.GetRolesetFromId(RolesetId) + except groups.GroupExceptions.RolesetDoesNotExist: + return abort(404) + + if RolesetObject.group_id != groupObject.id: + return abort(404) + + Members : list[GroupMember] = GroupMember.query.filter_by( + group_id=groupObject.id, + group_role_id=RolesetObject.id + ).order_by(GroupMember.created_at.desc()).paginate( page=PageNumber, per_page=10, error_out=False) + + MembersList = [] + for Member in Members.items: + MembersList.append({ + "userId": Member.user_id, + "username": Member.user.username, + }) + + return jsonify({ + "users": MembersList, + "nextpage": Members.has_next + }) + +@groups_page.route('/groups/wall_post/', methods=["POST"]) +@auth.authenticated_required +@limiter.limit("5/minute", on_breach=RateLimitReached) +def PostToGroupWall( groupid : int ): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + + try: + groups.AssertUserHasPermission(AuthenticatedUser, groupObject, GroupRolePermission.post_to_wall) + except groups.GroupExceptions.InsufficientPermssions: + flash("You do not have permission to post to this group's wall!", "error") + return redirect(f"/groups/{groupid}/") + + if not websiteFeatures.GetWebsiteFeature("GroupWallPosting"): + flash("Group Wall Posting is temporarily disabled!", "error") + return redirect(f"/groups/{groupid}/") + + PostContent : str = request.form.get("post_content", default=None, type=str) + if PostContent is None or PostContent == "": + flash("Please fill in all fields", "error") + return redirect(f"/groups/{groupid}/") + + if len(PostContent) > 512: + flash("Your post cannot be longer than 512 characters!", "error") + return redirect(f"/groups/{groupid}/") + + if CountAlnumericCharacters(PostContent) < 3: + flash("Your post must contain at least 3 alphanumeric characters!", "error") + return redirect(f"/groups/{groupid}/") + + if len(PostContent.split("\n")) > 10: + flash("Your post cannot contain more than 10 lines!", "error") + return redirect(f"/groups/{groupid}/") + + PostResponse : GroupWallPost | None = groups.PostToGroupWall(AuthenticatedUser, groupObject, PostContent) + if PostResponse is None: + flash("An error occured while trying to post to this group's wall!", "error") + return redirect(f"/groups/{groupid}/") + + return redirect(f"/groups/{groupid}/") + +@groups_page.route('/groups//delete_post/', methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +@limiter.limit("10/minute", on_breach=RateLimitReached) +def DeleteGroupWallPost( groupid : int, postid : int ): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + + PostObject : GroupWallPost = GroupWallPost.query.filter_by(id=postid, group_id=groupObject.id).first() + if PostObject is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + + try: + groups.AssertUserHasPermission(AuthenticatedUser, groupObject, GroupRolePermission.delete_from_wall) + except groups.GroupExceptions.InsufficientPermssions: + if PostObject.poster_id != AuthenticatedUser.id: + flash("You do not have permission to delete this post!", "error") + return redirect(f"/groups/{groupid}/") + + groups.DeleteGroupWallPost(PostObject, AuthenticatedUser, ForceDelete=True) + + flash("Deleted post successfully!", "success") + return redirect(f"/groups/{groupid}/") + +@groups_page.route("/groups/update_status/", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("5/minute", on_breach=RateLimitReached) +def UpdateGroupStatus( groupid : int ): + try: + groupObject : Group = groups.GetGroupFromId(groupid) + except groups.GroupExceptions.GroupDoesNotExist: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + try: + groups.AssertUserHasPermission(AuthenticatedUser, groupObject, GroupRolePermission.post_to_status) + except groups.GroupExceptions.InsufficientPermssions: + flash("You do not have permission to update this group's status!", "error") + return redirect(f"/groups/{groupid}/") + + OriginalStatus : str = request.form.get( + key="status", + default=None, + type=str + ) + if OriginalStatus is None: + flash("Please fill in all fields!", "error") + return redirect(f"/groups/{groupid}/") + + if len(OriginalStatus) > 255: + flash("Your status cannot be longer than 255 characters!", "error") + return redirect(f"/groups/{groupid}/") + + if CountAlnumericCharacters(OriginalStatus) < 3 and OriginalStatus != "": + flash("Your status must contain at least 3 alphanumeric characters!", "error") + return redirect(f"/groups/{groupid}/") + + FilteredStatus : str = textfilter.FilterText(OriginalStatus) + + groups.PostToGroupStatus( + AuthenticatedUser, + groupObject, + FilteredStatus + ) + + flash("Updated group status successfully!", "success") + return redirect(f"/groups/{groupid}/") + +@groups_page.route("/groups/create", methods=["GET"]) +@auth.authenticated_required +def CreateGroupPage(): + if not websiteFeatures.GetWebsiteFeature("GroupCreation"): + flash("Group creation is temporarily disabled!", "error") + return render_template("groups/create.html") + return render_template("groups/create.html") + +@groups_page.route("/groups/create", methods=["POST"]) +@auth.authenticated_required +def CreateGroupPage_post(): + AuthenticatedUser : User = auth.GetCurrentUser() + if not websiteFeatures.GetWebsiteFeature("GroupCreation"): + flash("Group creation is temporarily disabled!", "error") + return redirect("/groups/create") + + GroupName : str = request.form.get("name", default=None, type=str) + GroupDescription : str = request.form.get("description", default=None, type=str) + IconImage = request.files.get("icon", default=None) + if GroupName is None or GroupDescription is None or IconImage is None: + flash("Please fill in all fields!", "error") + return redirect("/groups/create") + GroupName = GroupName.strip() + + if len(GroupName) > 30: + flash("Group name cannot be longer than 30 characters!", "error") + return redirect("/groups/create") + if len(GroupDescription) > 1024: + flash("Group description cannot be longer than 1024 characters!", "error") + return redirect("/groups/create") + if CountAlnumericCharacters(GroupName) < 3: + flash("Group name must contain at least 3 alphanumeric characters!", "error") + return redirect("/groups/create") + if CountAlnumericCharacters(GroupDescription) < 10: + flash("Group description must contain at least 10 alphanumeric characters!", "error") + return redirect("/groups/create") + if len(GroupDescription.split("\n")) > 15: + flash("Group description cannot contain more than 15 lines!", "error") + return redirect("/groups/create") + + if not GroupName[0].isalnum(): + flash("Group name must start with a alphanumeric character!", "error") + return redirect("/groups/create") + + for char in GroupName: + if char not in allowedCharacters: + flash("Group name contains invalid characters!", "error") + return redirect("/groups/create") + if char == " " and GroupName[GroupName.index(char) + 1] == " ": + flash("Group name cannot contain two or more consecutive spaces!", "error") + return redirect("/groups/create") + + if IconImage.filename == "": + flash("Please upload an icon!", "error") + return redirect("/groups/create") + + if IconImage.content_length > 1024 * 1024 * 2: + flash("Icon cannot be larger than 2MB!", "error") + return redirect("/groups/create") + if IconImage.content_type not in ["image/png", "image/jpeg"]: + flash("Icon must be a PNG or JPEG image", "error") + return redirect("/groups/create") + + NewIcon = ValidateClothingImage( IconImage, verifyResolution=False, validateFileSize=False, returnImage=True ) + if NewIcon is False or NewIcon is None: + flash("Icon is invalid", "error") + return redirect("/groups/create") + if NewIcon.width != NewIcon.height: + flash("Icon must be a square", "error") + return redirect("/groups/create") + if NewIcon.width > 1024 or NewIcon.height > 1024: + flash("Icon must be less than 1024x1024", "error") + return redirect("/groups/create") + if NewIcon.width < 128 or NewIcon.height < 128: + flash("Icon must be at least 128x128", "error") + return redirect("/groups/create") + + UserMembership : MembershipType = membership.GetUserMembership(AuthenticatedUser) + UserGroupCount = groups.GetUserGroupCount(AuthenticatedUser) + GroupLimit = { + MembershipType.NonBuildersClub: 5, + MembershipType.BuildersClub: 10, + MembershipType.TurboBuildersClub: 20, + MembershipType.OutrageousBuildersClub: 100 + } + if UserGroupCount >= GroupLimit[UserMembership]: + flash("You have reached the maximum number of groups you can join!", "error") + return redirect("/groups/create") + try: + textfilter.FilterText(GroupName, ThrowException=True) + except textfilter.TextNotAllowedException: + flash("Group name is not safe for SYNTAX!", "error") + return redirect("/groups/create") + ExistingGroup : Group = groups.SearchGroupByName(GroupName) + if ExistingGroup is not None: + flash("Group name is already taken!", "error") + return redirect("/groups/create") + FilteredGroupDescription : str = textfilter.FilterText(GroupDescription) + + RobuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if RobuxBalance < 100: + flash("You do not have enough robux to create a group.", "error") + return redirect("/groups/create") + economy.DecrementTargetBalance(AuthenticatedUser, 100, 0) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id=1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = 100, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + AssetId = None, + CustomText = "Created Group" + ) + IconImage = BytesIO() + NewIcon.save(IconImage, format="PNG") + + IconImage.seek(0) + IconImageHash = hashlib.sha512(IconImage.read()).hexdigest() + if not s3helper.DoesKeyExist(IconImageHash): + IconImage.seek(0) + s3helper.UploadBytesToS3(IconImage.read(), IconImageHash, contentType="image/png") + + NewGroup : Group = groups.CreateGroup(GroupName, FilteredGroupDescription, AuthenticatedUser, IconImageHash) + return redirect(f"/groups/{NewGroup.id}/") +from sqlalchemy import func + +@groups_page.route("/groups/search", methods=["GET"]) +@auth.authenticated_required +def SearchGroupsPage(): + PageNumber : int = request.args.get( key = "page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + Query : str = request.args.get( key = "query", default="", type=str) + if len(Query) > 32: + Query = Query[:32] + if len(Query) < 3: + Query = "" + + GroupQuery = Group.query + if Query != "": + GroupQuery = GroupQuery.filter(Group.name.ilike(f"%{Query}%")) + GroupQuery = GroupQuery.outerjoin(GroupRole, GroupRole.group_id == Group.id ).group_by(Group.id).order_by(func.coalesce(func.sum(GroupRole.member_count), 0).desc()).order_by(Group.created_at.desc()) + GroupQuery = GroupQuery.paginate( page=PageNumber, per_page=12, error_out=False) + + return render_template("groups/search.html", query=Query, groups=GroupQuery, groupservice=groups) + +@groups_page.route("/groups/search", methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +def SearchGroupsPage_post(): + Query : str = request.form.get("query", default="", type=str) + if len(Query) > 32: + Query = Query[:32] + if len(Query) < 3: + Query = "" + + if Query == "": + return redirect("/groups/search") + return redirect(f"/groups/search?query={Query}") + +@groups_page.route("/groups", methods=["GET"]) +@auth.authenticated_required +def GroupsPage(): + AuthenticatedUser : User = auth.GetCurrentUser() + FirstGroup : GroupMember = GroupMember.query.filter_by(user_id=AuthenticatedUser.id).order_by(GroupMember.created_at.asc()).first() + if FirstGroup is None: + return redirect("/groups/search") + return redirect(f"/groups/{FirstGroup.group_id}/") \ No newline at end of file diff --git a/app/pages/groups/search.html b/app/pages/groups/search.html new file mode 100644 index 0000000..51a5286 --- /dev/null +++ b/app/pages/groups/search.html @@ -0,0 +1,61 @@ +{% extends '__layout__.html' %} +{% block title %}Search Groups{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Search Groups

+
+
+
+ + +
+ +
+
+ + {% if len(groups.items) == 0 %} +

No Results Found

+ {%endif%} +
+ Previous +

Page {{groups.page}} of {{groups.pages}}

+ Next +
+
+{% endblock %} diff --git a/app/pages/groups/view.html b/app/pages/groups/view.html new file mode 100644 index 0000000..77d30da --- /dev/null +++ b/app/pages/groups/view.html @@ -0,0 +1,207 @@ +{% extends '__layout__.html' %} +{% block title %}{{groupObj.name}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ Create Group + Search Groups +
+ {% for userMember in UserGroups: %} + + +

{{userMember.group.name}}

+
+ {% endfor %} +
+
+
+
+
+ +
+

{{groupObj.name}}

+

Owned By {% if groupObj.owner_id != None: %}{{groupObj.owner.username}}{%else%}No One!{%endif%}

+
+

{{groupservice.GetGroupMemberCount(groupObj)}} Members

+ {% if UserCurrentRole.rank != 0: %} +

{{UserCurrentRole.name}} Rank

+ {% endif %} +
+
+
+ + {% if UserCurrentRole.rank == 0 and CurrentJoinRequest == None: %} +
+ + +
+ {% endif %} + {% if CurrentJoinRequest != None %} +
+ + +
+ {%endif%} +
+
+
+
+

Description

+
+ {% for line in groupObj.description.split('\n'): %} + {% if line.strip() != '' %} +

{{line}}

+ {%else%} +
+ {%endif%} + {% endfor %} +
+
+ {% if UserCurrentRole.permissions.view_status: %} + {% if GroupStatus != None: %} +
+
+ +
+

{{GroupStatus.content}}

+

{{GroupStatus.poster.username}} Posted at {{GroupStatus.created_at.strftime("%b %d, %Y %I:%M %p")}} UTC

+
+
+
+ {%endif%} + {% endif %} + {% if UserCurrentRole.permissions.post_to_status: %} +
+
+ +
+ + +
+
+
+ {%endif%} +
+
+

Members

+
+ +
+
+
+
+
+

Page 1

+
+
+ {% if UserCurrentRole.permissions.view_wall: %} +
+
Group Wall
+ {% if UserCurrentRole.permissions.post_to_wall: %} +
+
+ + +
+
+ + +
+
+ {% endif %} +
+ {% for WallPost in GroupWall.items %} +
+
+ +
+ {{WallPost.poster.username}} +
+ {% for ContentLine in WallPost.content.split('\n'): %} +

{{ContentLine}}

+ {% endfor %} +
+

Posted at {{WallPost.created_at.strftime("%b %d, %Y %I:%M %p")}} UTC

+ {% if WallPost.poster.id == currentuser.id or UserCurrentRole.permissions.delete_from_wall: %} + + {% endif %} +
+
+
+ {% endfor %} +
+
+ Previous +

Page {{PageNumber}}

+ Next +
+
+ {% endif %} +
+
+
+
+ +{% endblock %} diff --git a/app/pages/home/home.html b/app/pages/home/home.html new file mode 100644 index 0000000..313aa77 --- /dev/null +++ b/app/pages/home/home.html @@ -0,0 +1,96 @@ +{% extends '__layout__.html' %} +{% block title %}Home{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+ {% if not isEmailVerified: %} +
+ +
+ Verify your email to secure your account and get a free item! +
+ +
+ {%endif%} + {% if not isDiscordLinked: %} +
+ +
+ Link your Discord Account and you will get a lifetime builders club membership for free +
+ +
+ {%endif%} +
+ +
+

+ Hello, {{currentuser.username}}! +

+ {% if membershipValue == 1: %} + + {%endif%} + {% if membershipValue == 2: %} + + {%endif%} + {% if membershipValue == 3: %} + + {%endif%} +
+
+

Friends ( {{friendcount}} )

+
+ {% for friend in friends %} + +
+
+ + {% if friend.isonline: %}
{% endif %} +
+

{{friend.username}}

+
+
+ {% endfor %} + {% if friendcount == 0: %} +

You have no friends

+ {% endif %} +
+

Recently Played

+
+ {% for place in recentlyplayed %} + +
+
+ +
+
{{place.placeyear.value}}
+
+
+
+
{{place.name}}
+
+

{{place.playercount}} Playing

+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% endfor %} + {% if recentlyplayedcount == 0: %} +

Looks like you havent played any games yet, maybe you should go play one right now!

+ {% endif %} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/home/home.py b/app/pages/home/home.py new file mode 100644 index 0000000..d862a29 --- /dev/null +++ b/app/pages/home/home.py @@ -0,0 +1,92 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response +from app.extensions import db +from app.util import auth, friends, placeinfo, membership +from app.models.user import User +from app.models.asset import Asset +from app.models.place import Place +from app.models.previously_played import PreviouslyPlayed +from app.models.placeserver_players import PlaceServerPlayer +from app.models.linked_discord import LinkedDiscord +from app.models.user_email import UserEmail +from datetime import datetime +from app.routes.rate import GetAssetVotePercentage + +home = Blueprint("home", __name__, template_folder="pages") + +def InsertRecentlyPlayed( UserObj : User, PlaceId : int ): + """ + Updates the recently played table for the user + """ + # Check if the user has played this place before + PreviouslyPlayedObj : PreviouslyPlayed = PreviouslyPlayed.query.filter_by(userid=UserObj.id, placeid=PlaceId).first() + if PreviouslyPlayedObj is None: + # User has not played this place before + PreviouslyPlayedObj = PreviouslyPlayed(UserObj.id, PlaceId) + db.session.add(PreviouslyPlayedObj) + db.session.commit() + + # If the user has more than 25 recently played places, remove the oldest one + PreviouslyPlayedObjs : list[PreviouslyPlayed] = PreviouslyPlayed.query.filter_by(userid=UserObj.id).all() + if len(PreviouslyPlayedObjs) > 25: + PreviouslyPlayedObjs.sort(key=lambda x: x.lastplayed) + db.session.delete(PreviouslyPlayedObjs[0]) + db.session.commit() + + return + # User has played this place before, update the lastplayed timestamp + PreviouslyPlayedObj.lastplayed = datetime.utcnow() + db.session.commit() + +@home.route("/home", methods=["GET"]) +@auth.authenticated_required +def home_page(): + Authuser : User = auth.GetCurrentUser() + Friends = friends.GetFriends(Authuser.id) + FriendCount = len(Friends) + FriendsData = [] + for friend in Friends: + # Get the friend's thumbnail + friendObjData = { + "id": friend.id, + "username": friend.username, + "isonline": True if (datetime.utcnow() - friend.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=friend.id).first() is not None else False + } + FriendsData.append(friendObjData) + # Sort the friends by online status + FriendsData.sort(key=lambda x: x["isonline"], reverse=True) + # Sort the friends by ingame status + FriendsData.sort(key=lambda x: x["ingame"], reverse=True) + # Limit the friends to 12 + FriendsData = FriendsData[:12] + + RecentlyPlayedData = [] + RecentlyPlayedObjs : list[PreviouslyPlayed] = PreviouslyPlayed.query.filter_by(userid=Authuser.id).order_by(PreviouslyPlayed.lastplayed.desc()).limit(12).all() + for RecentlyPlayedObj in RecentlyPlayedObjs: + PlaceAssetObj : Asset = Asset.query.filter_by(id=RecentlyPlayedObj.placeid).first() + if PlaceAssetObj is None: + continue + PlaceObj : Place = Place.query.filter_by(placeid=PlaceAssetObj.id).first() + if PlaceObj is None: + continue + RecentlyPlayedData.append({ + "id": PlaceObj.placeid, + "name": PlaceAssetObj.name, + "playercount": placeinfo.GetPlayingCount(PlaceObj), + "likePercentage": GetAssetVotePercentage(PlaceObj.placeid), + "placeyear": PlaceObj.placeyear + }) + membershipValue : int = membership.GetUserMembership(Authuser).value + isDiscordLinked : bool = LinkedDiscord.query.filter_by(user_id=Authuser.id).first() is not None + isEmailVerified : bool = UserEmail.query.filter_by(user_id=Authuser.id).first() is not None + + return render_template( + "home/home.html", + friends=FriendsData, + friendcount=FriendCount, + recentlyplayed=RecentlyPlayedData, + recentlyplayedcount=len(RecentlyPlayedData), + membershipValue=membershipValue, + isDiscordLinked=isDiscordLinked, + isEmailVerified=isEmailVerified + ) \ No newline at end of file diff --git a/app/pages/invitekeys/handler.py b/app/pages/invitekeys/handler.py new file mode 100644 index 0000000..e3e8d7c --- /dev/null +++ b/app/pages/invitekeys/handler.py @@ -0,0 +1,68 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, flash +from app.models.user import User +from app.models.invite_key import InviteKey +from app.util import auth, transactions +from app.services import invitekeys, economy +from app.extensions import db, limiter, csrf +from datetime import datetime, timedelta + +inviteKeyRoute = Blueprint("invitekey", __name__, url_prefix="/") + +@inviteKeyRoute.route("/invite-keys", methods=["GET"]) +@auth.authenticated_required +def inviteKeysPage(): + AuthenticatedUser : User = auth.GetCurrentUser() + pageNumber = request.args.get("page", 1, int) + if pageNumber < 1: + pageNumber = 1 + createdKeys = InviteKey.query.filter_by(created_by=AuthenticatedUser.id).order_by(InviteKey.created_at.desc()).paginate( page = pageNumber, per_page = 10, error_out=False ) + + return render_template("invitekeys/index.html", createdKeys=createdKeys) + +@inviteKeyRoute.route("/invite-keys/create", methods=["POST"]) +@auth.authenticated_required +@csrf.exempt +def createInviteKey(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + robuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if robuxBalance < 20: + flash("You do not have enough robux to create an invite key.", "error") + return redirect("/invite-keys") + + activeKeys = InviteKey.query.filter_by(created_by=AuthenticatedUser.id, used_by=None).count() + if activeKeys >= 3 and AuthenticatedUser.id != 1: + flash("You have reached the maximum amount of active invite keys, please wait until one of your invite keys are used.", "error") + return redirect("/invite-keys") + + keysCreatedPast24Hours = InviteKey.query.filter(InviteKey.created_at > datetime.utcnow() - timedelta(hours=24)).filter_by(created_by=AuthenticatedUser.id).count() + if keysCreatedPast24Hours >= 3 and AuthenticatedUser.id != 1: + flash("You have reached the maximum amount of invite keys you can create in 24 hours.", "error") + return redirect("/invite-keys") + + if AuthenticatedUser.created > datetime.utcnow() - timedelta(days=3): + flash("Your account must be more than 3 days old to create a invite key.", "error") + return redirect("/invite-keys") + + try: + economy.DecrementTargetBalance(AuthenticatedUser, 20, 0) + except economy.InsufficientFundsException: + flash("You do not have enough robux to create an invite key.", "error") + return redirect("/invite-keys") + except economy.EconomyLockAcquireException: + flash("There was an error creating your invite key, please try again later.", "error") + return redirect("/invite-keys") + + newInviteKey : InviteKey = invitekeys.CreateInviteKey(AuthenticatedUser) + transactions.CreateTransaction( + Reciever = User.query.filter_by(id=1).first(), + Sender = AuthenticatedUser, + CurrencyAmount = 20, + CurrencyType = 0, + CustomText = "Created Invite Key" + ) + + flash("Invite key created successfully.", "success") + return redirect("/invite-keys") diff --git a/app/pages/invitekeys/index.html b/app/pages/invitekeys/index.html new file mode 100644 index 0000000..a228b99 --- /dev/null +++ b/app/pages/invitekeys/index.html @@ -0,0 +1,80 @@ +{% extends '__layout__.html' %} +{% block title %}Invite Keys{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Invite Keys

+
+ + +
+
+

Note: It is not recommended to give away your invite key to strangers as you may be responsible for their actions.

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} + + + + + + + + + + + {% for key in createdKeys.items %} + + + + + + + {%endfor%} + +
CreatedKeyUsed ByUsed On
{{key.created_at.strftime("%d/%m/%Y")}}{{key.key}} + {% if key.used_by %} + + {{key.user.username}} + {{key.user.username}} + + {% endif %} + {% if key.used_on %}{{key.used_on.strftime("%d/%m/%Y")}}{%else%}None{%endif%}
+ {% if len(createdKeys.items) == 0 %} +

No results found

+ {%endif%} +
+ Previous +

Page {{createdKeys.page}} of {{createdKeys.pages}}

+ Next +
+ +
+{%endblock%} \ No newline at end of file diff --git a/app/pages/login/login.html b/app/pages/login/login.html new file mode 100644 index 0000000..b1c4fc6 --- /dev/null +++ b/app/pages/login/login.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Login{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/login/login.py b/app/pages/login/login.py new file mode 100644 index 0000000..61d3771 --- /dev/null +++ b/app/pages/login/login.py @@ -0,0 +1,477 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response, abort, Response +from app.models.user import User +from app.models.usereconomy import UserEconomy +from app.models.login_records import LoginRecord +from app.extensions import db, limiter, csrf, get_remote_address, redis_controller +import hashlib +from datetime import datetime, timedelta +from app.util import websiteFeatures, auth, turnstile +import time +import re +import random +import string +import uuid +from app.models.user_email import UserEmail +import requests +from requests.auth import HTTPBasicAuth +import json +from config import Config +import pyotp +from sqlalchemy import func + +config = Config() + +login = Blueprint("login", __name__, template_folder="pages") + +def CreateLoginRecord( UserId : int, TokenOverwrite : str = None): + """ + Logs the current user login to the database + Please only call this function in a flask context + """ + SessionToken = request.cookies.get(key="t", default=None, type=str) + if SessionToken is None and TokenOverwrite is None: + abort(400) + if TokenOverwrite is not None: + SessionToken = TokenOverwrite + + userIPHash = hashlib.sha512( + string = f"{get_remote_address()}:SYNTAX:{config.FLASK_SESSION_KEY}".encode("utf-8") + ).hexdigest() + + newLoginRecord : LoginRecord = LoginRecord( + userid = UserId, + ip = userIPHash, + useragent = request.headers.get("User-Agent", default="Unknown")[:200], + timestamp = datetime.utcnow(), + session_token = SessionToken + ) + db.session.add(newLoginRecord) + db.session.commit() + + +@login.route("/login", methods=["GET"]) +@limiter.exempt() +def login_page(): + if auth.isAuthenticated(): + return redirect("/home") + + loginEnabled = websiteFeatures.GetWebsiteFeature("WebLogin") + if not loginEnabled: + flash("Logins are temporarily disabled", "error") + + login_page_response = make_response(render_template("login/login.html", loginEnabled=loginEnabled)) + if request.cookies.get( key = ".ROBLOSECURITY", default = None, type = str ) is not None: + login_page_response.set_cookie( + key = ".ROBLOSECURITY", + value = "", + expires = 0, + domain = f".{config.BaseDomain}" + ) + return login_page_response + +@login.errorhandler(429) +def ratelimit_handler(e): + flash("You are being ratelimited.", "error") + return redirect(request.referrer) + +@login.route("/login", methods=["POST"]) +@limiter.limit("10/minute") +def handle_login_post(): + if auth.isAuthenticated(): + return redirect("/home") + + requestUsername = request.form.get( + key = "username", + default = None, + type = str + ) + requestPassword = request.form.get( + key = "password", + default = None, + type = str + ) + isRequestStudio = request.args.get( key = "studio", default = 0, type = int ) == 1 + + def handle_redirect() -> Response: + if isRequestStudio: + return redirect("/ide/welcome") + else: + return redirect(url_for("login.login_page")) + + if requestUsername is None or requestPassword is None: + flash("Please fill in all fields", "error") + return handle_redirect() + + loginEnabled = websiteFeatures.GetWebsiteFeature("WebLogin") + if not loginEnabled: + flash("Logins are temporarily disabled", "error") + return handle_redirect() + + userObject : User = User.query.filter(func.lower(User.username) == func.lower(requestUsername)).first() + if userObject is None: + flash("Incorrect username or password", "error") + return handle_redirect() + if userObject.accountstatus == 4: + flash("Invalid username or password", "error") + return handle_redirect() + + if not auth.VerifyPassword( UserObj = userObject, password = requestPassword ): + flash("Incorrect username or password", "error") + return handle_redirect() + + if userObject.TOTPEnabled and not isRequestStudio: + session["totpvalidatesession"] = { + "userid": userObject.id, + "startTime": time.time() + } + return redirect("/login/totpvalidate") + elif userObject.TOTPEnabled and isRequestStudio: + TOTPCode = request.form.get( key = "2fa", default = None, type = str ) + if TOTPCode is None: + flash("Please fill in all fields", "error") + return handle_redirect() + + if len(TOTPCode) != 6: + flash("Invalid 2FA Code", "error") + return handle_redirect() + + isValidCode = auth.Validate2FACode( userid = userObject.id, code = TOTPCode ) + if not isValidCode: + flash("Invalid 2FA Code", "error") + return handle_redirect() + + if userObject.accountstatus != 1: + session["not-approved-viewer"] = userObject.id + return redirect("/not-approved") + + newAuthToken : str = auth.CreateToken( userid = userObject.id, ip = get_remote_address() ) + authenticatedResponse : Response = make_response( redirect("/home") ) + authenticatedResponse.set_cookie( + key = ".ROBLOSECURITY", + value = newAuthToken, + expires = datetime.utcnow() + timedelta( days = 31 ), + domain = f".{config.BaseDomain}" + ) + + if request.cookies.get( key = "t", default = None, type = str ) is None: + newToken : str = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) + authenticatedResponse.set_cookie( + key = "t", + value = newToken, + expires = datetime.utcnow() + timedelta( days = 365 ), + domain = f".{config.BaseDomain}" + ) + CreateLoginRecord( UserId = userObject.id, TokenOverwrite = newToken ) + else: + CreateLoginRecord( UserId = userObject.id ) + + return authenticatedResponse + +# @login.route("/login", methods=["POST"]) +# @limiter.limit("10/minute") +# def login_post(): +# if auth.isAuthenticated(): +# return redirect("/home") +# username = request.form.get("username") +# password = request.form.get("password") +# isstudio = request.args.get("studio", default=0, type=int) +# csrf.protect() + +# loginEnabled = websiteFeatures.GetWebsiteFeature("WebLogin") +# if not loginEnabled: +# flash("Logins are temporarily disabled", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) +# else: +# return redirect("/ide/welcome") + +# if username is None or password is None: +# flash("Please fill in all fields", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) +# else: +# return redirect("/ide/welcome") + +# user : User = User.query.filter_by(username=username).first() +# if user is None: +# flash("Incorrect username or password", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) +# else: +# return redirect("/ide/welcome") + +# if user.accountstatus == 4: # GDPR Deletion +# flash("Invalid username or password", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) + +# if not auth.VerifyPassword( UserObj = user, password = password ): +# flash("Incorrect username or password", "error") +# if isstudio == 0: +# return redirect(url_for("login.login_page")) +# else: +# return redirect("/ide/welcome") + +# # check if user has 2fa enabled +# if user.TOTPEnabled: +# if isstudio == 0: +# session["totpvalidatesession"] = { +# "userid": user.id, +# "startTime": time.time() +# } +# return redirect("/login/totpvalidate") +# else: +# TOTPCode = request.form.get("2fa") +# if TOTPCode is None: +# flash("Please fill in all fields", "error") +# return redirect("/ide/welcome") +# if len(TOTPCode) != 6: +# flash("Invalid 2FA Code") +# return redirect("/ide/welcome", "error") +# isValidCode = auth.Validate2FACode(user.id, TOTPCode) +# if not isValidCode: +# flash("Invalid 2FA Code") +# return redirect("/ide/welcome", "error") + +# if user.accountstatus != 1: +# session["not-approved-viewer"] = user.id +# return redirect("/not-approved") + +# # Create new session token +# sessionToken = auth.CreateToken(userid=user.id, ip=get_remote_address()) +# if isstudio == 0: +# resp = make_response(redirect("/home")) +# else: +# resp = make_response(redirect("/ide/welcome")) +# resp.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365)) +# if request.cookies.get("t", default=None, type=str) is not None: +# NewToken = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) +# resp.set_cookie("t", NewToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") +# CreateLoginRecord( user.id, NewToken ) +# else: +# CreateLoginRecord( user.id ) +# return resp + +@login.route("/login/totpvalidate", methods=["GET"]) +def totp_validate(): + if "totpvalidatesession" not in session: + return redirect("/login") + if time.time() - session["totpvalidatesession"]["startTime"] > 180: + del session["totpvalidatesession"] + flash("Session expired", "error") + return redirect("/login") + return render_template("login/totpvalidate.html") + +@login.route("/login/totpvalidate", methods=["POST"]) +def totp_validate_post(): + from app.pages.settings.settings import generate_secret_key_from_string + if "totpvalidatesession" not in session: + return redirect("/login") + if time.time() - session["totpvalidatesession"]["startTime"] > 180: + del session["totpvalidatesession"] + flash("Session expired", "error") + return redirect("/login") + csrf.protect() + totpCode = request.form.get("totpCode") + if totpCode is None: + flash("Please fill in all fields") + return redirect("/login/totpvalidate") + if len(totpCode) != 6: + flash("Invalid TOTP Code") + return redirect("/login/totpvalidate") + user : User = User.query.filter_by(id=session["totpvalidatesession"]["userid"]).first() + if user is None: + flash("User not found") + return redirect("/login/totpvalidate") + totp = pyotp.TOTP(generate_secret_key_from_string(str(user.id) + config.FLASK_SESSION_KEY)) + if not totp.verify(totpCode): + flash("Invalid TOTP Code") + return redirect("/login/totpvalidate") + if user.accountstatus != 1: + session["not-approved-viewer"] = user.id + return redirect("/not-approved") + + sessionToken = auth.CreateToken(userid=user.id, ip=get_remote_address()) + resp = make_response(redirect("/home")) + resp.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + del session["totpvalidatesession"] + if request.cookies.get("t", default=None, type=str) is not None: + NewToken = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) + resp.set_cookie("t", NewToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + CreateLoginRecord( user.id, NewToken ) + else: + CreateLoginRecord( user.id ) + return resp + + +@login.route("/logout", methods=["POST"]) +def logout(): + if not auth.isAuthenticated(): + return redirect("/login") + + auth.invalidateToken(request.cookies.get(".ROBLOSECURITY")) + resp = make_response(redirect("/login")) + resp.set_cookie(".ROBLOSECURITY", "", expires=0) + + if "not-approved-viewer" in session: + del session["not-approved-viewer"] + return resp + +@login.route("/reset-password", methods=["GET"]) +def reset_password(): + if auth.isAuthenticated(): + return redirect("/home") + return render_template("login/send_reset.html") + +EmailRegex = r"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$" # RFC 5322 Compliant, because some fucker is gonna complain that he cant verify his email from his self-hosted shit + +@login.route("/reset-password", methods=["POST"]) +@limiter.limit("10/minute") +def reset_password_post(): + if auth.isAuthenticated(): + return redirect("/home") + if not websiteFeatures.GetWebsiteFeature("SendResetPassword"): + flash("Resetting Passwords is temporarily disabled, please try again later", "error") + return redirect("/reset-password") + user_email = request.form.get( key = "email", default = None, type = str ) + if user_email is None: + flash("Please fill in all fields", "error") + return redirect("/reset-password") + user_email = user_email.strip().lower() + + if not re.match( EmailRegex, user_email ): + flash("Invalid Email", "error") + return redirect("/reset-password") + + RequesterAddress = get_remote_address() + if redis_controller.exists(f"reset_password_cooldown_v1:{RequesterAddress}"): + flash("You sent a reset request too recently please wait and try again later", "error") + return redirect("/reset-password") + if redis_controller.exists(f"reset_password_email_cooldown_v1:{user_email}"): + flash("This email has recently been sent a reset request, please wait and try again later", "error") + return redirect("/reset-password") + CloudflareTurnstileKey = request.form.get( key = "cf-turnstile-response", default = None, type=str ) + if CloudflareTurnstileKey is None or CloudflareTurnstileKey == '': + flash("Please complete the captcha", "error") + return redirect("/reset-password") + if not turnstile.VerifyToken( CloudflareTurnstileKey ): + flash("Invalid captcha answer", "error") + return redirect("/reset-password") + + UserEmailObj : UserEmail = UserEmail.query.filter_by(email = user_email, verified=True).first() + if UserEmailObj: + ResetPasswordUUID = str(uuid.uuid4()) + redis_controller.set(f"reset_password_v1:{ResetPasswordUUID}", UserEmailObj.email, ex=60 * 60 * 2) + emailHash = hashlib.sha1(f"{user_email}:{config.FLASK_SESSION_KEY}".encode("utf-8")).hexdigest() + resetLink = f"{config.BaseURL}/reset-password/confirm?uuid={ResetPasswordUUID}&confirm={emailHash}" + + EmailData = { + "Messages": [ + { + "From": { + "Email": Config.MAILJET_NOREPLY_SENDER, + "Name": "syntax.eco" + }, + "To": [ + { + "Email": user_email, + "Name": "SYNTAX User" + } + ], + "TemplateID": Config.MAILJET_PASSWORDRESET_TEMPLATE_ID, + "TemplateLanguage": True, + "Subject": f"SYNTAX - Reset Password", + "Variables": { + "verificationlink": resetLink + } + } + ] + } + + try: + EmailResponse = requests.post( + url="https://api.mailjet.com/v3.1/send", + data=json.dumps(EmailData), + headers={ + "Content-Type": "application/json" + }, + auth = HTTPBasicAuth( + Config.MAILJET_APIKEY, + Config.MAILJET_SECRETKEY + ) + ) + if EmailResponse.status_code != 200: + flash("An error occured while sending the email, please try again later", "error") + redis_controller.delete(f"reset_password_v1:{ResetPasswordUUID}") + return redirect("/reset-password") + except Exception as e: + flash("An error occured while sending the email, please try again later", "error") + redis_controller.delete(f"reset_password_v1:{ResetPasswordUUID}") + return redirect("/reset-password") + + redis_controller.set(f"reset_password_cooldown_v1:{RequesterAddress}", 1, ex=60 * 60) + redis_controller.set(f"reset_password_email_cooldown_v1:{user_email}", 1, ex=60 * 60) + + flash("A reset password email has been sent if the email is linked to a SYNTAX account", "success") + return redirect("/reset-password") + +@login.route("/reset-password/confirm", methods=["GET"]) +def reset_password_confirm(): + uuid = request.args.get("uuid", default=None, type=str) + confirm = request.args.get("confirm", default=None, type=str) + if uuid is None or confirm is None: + flash("Invalid reset link", "error") + return redirect("/reset-password") + if not redis_controller.exists(f"reset_password_v1:{uuid}"): + flash("Invalid reset link", "error") + return redirect("/reset-password") + email = redis_controller.get(f"reset_password_v1:{uuid}") + emailHash = hashlib.sha1(f"{email}:{config.FLASK_SESSION_KEY}".encode("utf-8")).hexdigest() + if emailHash != confirm: + flash("Invalid reset link", "error") + return redirect("/reset-password") + + AllLinkedEmails : list[UserEmail] = UserEmail.query.filter_by(email = email).all() + if len(AllLinkedEmails) == 0: + flash("Invalid reset link", "error") + return redirect("/reset-password") + + return render_template("login/reset_password.html", AllLinkedEmails=AllLinkedEmails) + +@login.route("/reset-password/confirm", methods=["POST"]) +def reset_password_confirm_post(): + uuid = request.args.get("uuid", default=None, type=str) + confirm = request.args.get("confirm", default=None, type=str) + if uuid is None or confirm is None: + flash("Invalid reset link", "error") + return redirect("/reset-password") + if not redis_controller.exists(f"reset_password_v1:{uuid}"): + flash("Invalid reset link", "error") + return redirect("/reset-password") + email = redis_controller.get(f"reset_password_v1:{uuid}") + emailHash = hashlib.sha1(f"{email}:{config.FLASK_SESSION_KEY}".encode("utf-8")).hexdigest() + if emailHash != confirm: + flash("Invalid reset link", "error") + return redirect("/reset-password") + + reset_user_id = request.form.get("reset_user_id", default=None, type=int) + reset_password = request.form.get("reset_password", default=None, type=str) + if reset_user_id is None or reset_password is None: + flash("Please fill in all fields", "error") + return redirect(f"/reset-password/confirm?uuid={uuid}&confirm={confirm}") + + UserEmailObj : UserEmail = UserEmail.query.filter_by(email = email, user_id = reset_user_id, verified=True).first() + if UserEmailObj is None: + flash("Invalid User Choice", "error") + return redirect(f"/reset-password/confirm?uuid={uuid}&confirm={confirm}") + + UserObj : User = UserEmailObj.user + if len(reset_password) < 8: + flash("Password must be at least 8 characters long", "error") + return redirect(f"/reset-password/confirm?uuid={uuid}&confirm={confirm}") + + auth.SetPassword(UserObj, reset_password) + redis_controller.delete(f"reset_password_v1:{uuid}") + + flash("Password reset successfully", "success") + return redirect("/login") diff --git a/app/pages/login/reset_password.html b/app/pages/login/reset_password.html new file mode 100644 index 0000000..59b4393 --- /dev/null +++ b/app/pages/login/reset_password.html @@ -0,0 +1,57 @@ +{% extends '__layout__.html' %} +{% block title %}Email Verified{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+

Reset account password

+

Please choose an account to reset from the list below and enter a new password

+
+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ + +
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/login/send_reset.html b/app/pages/login/send_reset.html new file mode 100644 index 0000000..0f11508 --- /dev/null +++ b/app/pages/login/send_reset.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Reset Password{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/login/totpvalidate.html b/app/pages/login/totpvalidate.html new file mode 100644 index 0000000..9f06f37 --- /dev/null +++ b/app/pages/login/totpvalidate.html @@ -0,0 +1,32 @@ +{% extends '__layout__.html' %} +{% block title %}Login{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/membership/index.html b/app/pages/membership/index.html new file mode 100644 index 0000000..96ecd5b --- /dev/null +++ b/app/pages/membership/index.html @@ -0,0 +1,80 @@ +{% extends '__layout__.html' %} +{% block title %}Membership{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Free

Classic

Turbo

OBC

Daily Robux

None

R$ 10

R$ 45

R$ 80

Active Places

2

6

12

32

Groups Limit

5

10

20

100

Sell Items

No

Yes

Yes

Yes

Trade Items

No

Yes

Yes

Yes

Link DiscordBoost DiscordDonate $5
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/membership/membership.py b/app/pages/membership/membership.py new file mode 100644 index 0000000..2f311f3 --- /dev/null +++ b/app/pages/membership/membership.py @@ -0,0 +1,17 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response + +from app.extensions import db, redis_controller +from app.models.user import User +from app.util import auth + +MembershipPages = Blueprint("membership", __name__, template_folder="pages") + +@MembershipPages.route("/membership", methods=["GET"]) +@auth.authenticated_required +def membership_page(): + return render_template("membership/index.html") + +@MembershipPages.route("/membership/payment_methods", methods=["GET"]) +@auth.authenticated_required +def payment_methods_page(): + return render_template("membership/payment_methods.html") \ No newline at end of file diff --git a/app/pages/membership/payment_methods.html b/app/pages/membership/payment_methods.html new file mode 100644 index 0000000..542e2f1 --- /dev/null +++ b/app/pages/membership/payment_methods.html @@ -0,0 +1,160 @@ +{% extends '__layout__.html' %} +{% block title %}Cryptomus Dashboard{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+
+

Donation methods

+ + + Ko-fi donations + Ko-fi + + + + + + + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/messages/index.html b/app/pages/messages/index.html new file mode 100644 index 0000000..4ac0615 --- /dev/null +++ b/app/pages/messages/index.html @@ -0,0 +1,54 @@ +{% extends '__layout__.html' %} +{% block title %}Messages{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

{%if isOutgoing:%}Outgoing {%endif%}Messages

+ {% if not isOutgoing: %} + Click here to see your outgoing messages + {%else%} + Click here to see your incoming messages + {%endif%} +

Do not send any personal or sensitive information about yourself! A staff member will never ask for your password or email.

+
+ +
+
+ Previous +

Page {{UserMessages.page}} of {{UserMessages.pages}}

+ Next +
+
+
+{% endblock %} diff --git a/app/pages/messages/messages.py b/app/pages/messages/messages.py new file mode 100644 index 0000000..2ce8b69 --- /dev/null +++ b/app/pages/messages/messages.py @@ -0,0 +1,148 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.models.messages import Message +from app.util import auth, turnstile, websiteFeatures +from app.extensions import db, csrf, limiter, redis_controller +from app.models.user import User +from app.util.textfilter import FilterText +from sqlalchemy import or_ + +MessageRoute = Blueprint('message', __name__, template_folder="pages") + +def CreateSystemMessage( subject : str, message : str, userid : int ): + """ + Creates a system message from the system user to the specified user + """ + TargetUser = User.query.filter_by(id=userid).first() + if TargetUser is None: + return False + NewMessage : Message = Message( + subject=subject, + content=message, + sender_id=1, + recipient_id=userid + ) + db.session.add(NewMessage) + db.session.commit() + return True + +@MessageRoute.route("/my/messages", methods=["GET"]) +@auth.authenticated_required +def my_messages(): + return redirect("/messages") + +@MessageRoute.route("/new/", methods=["GET"]) +@auth.authenticated_required +def new_message(userid): + TargetUser = User.query.filter_by(id=userid).first() + if TargetUser is None: + return "User not found",404 + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + abort(404) + + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id == TargetUser.id: + return "You cannot message yourself",400 + + MessageReplyContext = request.args.get("reply", default=None, type=int) + if MessageReplyContext is not None: + ReplyMessage = Message.query.filter_by( id = MessageReplyContext ).filter( or_( Message.sender_id == AuthenticatedUser.id, Message.recipient_id == AuthenticatedUser.id ) ).first() + else: + ReplyMessage = None + + return render_template("messages/new.html", targetuser=TargetUser, replymessage=ReplyMessage) + +@MessageRoute.route("/new/", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("10/minute") +def send_message(userid): + if 'cf-turnstile-response' not in request.form or request.form.get('cf-turnstile-response') == '': + flash("Please complete the captcha", "error") + return redirect(f"/messages/new/{userid}") + if 'message' not in request.form or request.form.get('message') == '': + flash("Please enter a message", "error") + return redirect(f"/messages/new/{userid}") + if 'subject' not in request.form or request.form.get('subject') == '': + flash("Please enter a subject", "error") + return redirect(f"/messages/new/{userid}") + if not websiteFeatures.GetWebsiteFeature("MessageSending"): + flash("Message sending is temporarily disabled", "error") + return redirect(f"/messages/new/{userid}") + TargetUser : User | None = User.query.filter_by(id=userid).first() + if TargetUser is None: + abort(404) + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + abort(404) + + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id == TargetUser.id: + abort(400) + + if len(request.form.get("message")) > 1024: + flash("Your message is too long", "error") + return redirect(f"/messages/new/{TargetUser.id}") + if len(request.form.get('subject')) > 64: + flash("Your subject is too long", "error") + return redirect(f"/messages/new/{TargetUser.id}") + + if not turnstile.VerifyToken(request.form.get('cf-turnstile-response')): + flash("Invalid captcha", "error") + return redirect(f"/messages/new/{TargetUser.id}") + if redis_controller.get(f"message:{TargetUser.id}:{AuthenticatedUser.id}") is not None: + flash("You are sending messages too quickly", "error") + return redirect(f"/messages/new/{TargetUser.id}") + NewLineCount = request.form.get('message').count("\n") + if NewLineCount > 10: + flash("Your message has too many newlines", "error") + return redirect(f"/messages/new/{TargetUser.id}") + redis_controller.set(f"message:{TargetUser.id}:{AuthenticatedUser.id}", "1", ex=60) + + FilteredSubject = FilterText(request.form.get('subject')) + FilteredMessage = FilterText(request.form.get('message')) + + NewMessage = Message( + sender_id=AuthenticatedUser.id, + recipient_id=TargetUser.id, + subject=FilteredSubject, + content=FilteredMessage + ) + db.session.add(NewMessage) + db.session.commit() + + return redirect(f"/messages/view/{NewMessage.id}") + +@MessageRoute.route("/view/", methods=["GET"]) +@auth.authenticated_required +def view_message(messageid): + MessageObj : Message = Message.query.filter_by(id=messageid).first() + if MessageObj is None: + abort(404) + AuthenicatatedUser = auth.GetCurrentUser() + if AuthenicatatedUser.id != MessageObj.sender_id and AuthenicatatedUser.id != MessageObj.recipient_id: + abort(404) + if AuthenicatatedUser.id == MessageObj.recipient_id: + MessageObj.read = True + db.session.commit() + SenderObj = User.query.filter_by(id=MessageObj.sender_id).first() + RecieverObj = User.query.filter_by(id=MessageObj.recipient_id).first() + MessageCreated = MessageObj.created.strftime("%b %d, %Y %I:%M %p") + + messagelines = MessageObj.content.split("\n") + return render_template("messages/view.html", message=MessageObj, created=MessageCreated,sender=SenderObj, reciever=RecieverObj, messagelines=messagelines) + +@MessageRoute.route("/", methods=['GET']) +@auth.authenticated_required +def messages(): + AuthenticatedUser : User = auth.GetCurrentUser() + PageNumber = max( request.args.get('page', default=1, type=int), 1 ) + UserMessagesList = Message.query.filter_by(recipient_id = AuthenticatedUser.id).order_by(Message.created.desc()).paginate(page = PageNumber, per_page = 10, error_out = False) + + return render_template("messages/index.html", UserMessages=UserMessagesList, isOutgoing=False) + +@MessageRoute.route("/outgoing", methods=['GET']) +@auth.authenticated_required +def outgoing_messages(): + AuthenticatedUser : User = auth.GetCurrentUser() + PageNumber = max( request.args.get('page', default=1, type=int), 1 ) + UserMessagesList = Message.query.filter_by(sender_id = AuthenticatedUser.id).order_by(Message.created.desc()).paginate(page = PageNumber, per_page = 10, error_out = False) + + return render_template("messages/index.html", UserMessages=UserMessagesList, isOutgoing=True) \ No newline at end of file diff --git a/app/pages/messages/new.html b/app/pages/messages/new.html new file mode 100644 index 0000000..3b7a68f --- /dev/null +++ b/app/pages/messages/new.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}New Message{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +

New Message

+
+ Recipient + +
+
+
+ Subject + +
+ +

Do not send any personal or sensitive information about yourself! A staff member will never ask for your password or email.

+
+
+ +
+ +
+
+
+
+
+{% endblock %} diff --git a/app/pages/messages/view.html b/app/pages/messages/view.html new file mode 100644 index 0000000..2e464e5 --- /dev/null +++ b/app/pages/messages/view.html @@ -0,0 +1,42 @@ +{% extends '__layout__.html' %} +{% block title %}{{message.subject}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+

{{message.subject}}

+

To: {{reciever.username}}

+
+ +
+ {{sender.username}} +
+ {{sender.username}} +

{{created}} UTC

+
+
+
+ {% for line in messagelines: %} + {% if line.strip() != '' %} +

{{line}}

+ {%else%} +
+ {%endif%} + {% endfor %} +
+
+ Back to messages + {% if sender.id != currentuser.id %} + Reply + {% endif %} +
+
+
+{% endblock %} diff --git a/app/pages/notapproved/banpage.html b/app/pages/notapproved/banpage.html new file mode 100644 index 0000000..2ce593c --- /dev/null +++ b/app/pages/notapproved/banpage.html @@ -0,0 +1,36 @@ +{% extends '__layout__.html' %} +{% block title %}Banned{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

{{banText}}

+
+

Banned On: {{userban.created_at}} UTC

+

Expires On: {% if userban.expires_at != None%}{{userban.expires_at}} UTC{%else%}Never{%endif%}

+
+
+

Reason: {{userban.reason}}

+
+
+ {% if not hasBanExpired: %} +

If you wish to appeal this ban you can open a ticket on our Discord Server

+
+ {%else%} +

By clicking Re-activate you agree to our Terms Of Service

+
+ + +
+
+ {%endif%} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/notapproved/notapproved.py b/app/pages/notapproved/notapproved.py new file mode 100644 index 0000000..d52d53b --- /dev/null +++ b/app/pages/notapproved/notapproved.py @@ -0,0 +1,88 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort +from app.models.user_ban import UserBan +from app.extensions import db, csrf, limiter, redis_controller +from app.models.user import User +from app.enums.BanType import BanType +from app.util import auth +from datetime import datetime, timedelta + +NotApprovedRoute = Blueprint('notapproved', __name__, template_folder="pages") + +BanTypeToText = { + BanType.Warning: "Warning", + BanType.Day1Ban: "Banned for 1 day", + BanType.Day3Ban: "Banned for 3 days", + BanType.Day7Ban: "Banned for 7 days", + BanType.Day14Ban: "Banned for 14 days", + BanType.Day30Ban: "Banned for 30 days", + BanType.Deleted: "Account Deleted", +} + +@NotApprovedRoute.route("/not-approved", methods=["GET"]) +def not_approved(): + CurrentUser : User = auth.GetCurrentUser() + if CurrentUser is not None: + return redirect("/") + + if "not-approved-viewer" not in session: + abort(404) + + UserObj : User = User.query.filter_by(id=session["not-approved-viewer"]).first() + if UserObj is None: + del session["not-approved-viewer"] + abort(404) + + if UserObj.accountstatus == 4: + del session["not-approved-viewer"] + return redirect("/") + + if UserObj.accountstatus == 1: + del session["not-approved-viewer"] + return redirect("/") + + LatestUserBanObj : UserBan = UserBan.query.filter_by(userid=UserObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + if LatestUserBanObj is None: + del session["not-approved-viewer"] + UserObj.accountstatus = 1 + db.session.commit() + return redirect("/") + hasBanExpired = False + if LatestUserBanObj.expires_at is not None: + if LatestUserBanObj.expires_at < datetime.utcnow(): + hasBanExpired = True + + return render_template("notapproved/banpage.html", user=UserObj, + userban=LatestUserBanObj, + banText=BanTypeToText[LatestUserBanObj.ban_type], + hasBanExpired=hasBanExpired) + +@NotApprovedRoute.route("/not-approved", methods=["POST"]) +def not_approved_post(): + CurrentUser : User = auth.GetCurrentUser() + if CurrentUser is not None: + return redirect("/") + if "not-approved-viewer" not in session: + abort(404) + + UserObj : User = User.query.filter_by(id=session["not-approved-viewer"]).first() + if UserObj is None: + del session["not-approved-viewer"] + abort(404) + + if UserObj.accountstatus == 1: + del session["not-approved-viewer"] + return redirect("/") + + LatestUserBanObj : UserBan = UserBan.query.filter_by(userid=UserObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + if LatestUserBanObj is None: + del session["not-approved-viewer"] + UserObj.accountstatus = 1 + db.session.commit() + return redirect("/") + + LatestUserBanObj.acknowledged = True + UserObj.accountstatus = 1 + db.session.commit() + del session["not-approved-viewer"] + flash("Your account has been reactivated", "success") + return redirect("/login") \ No newline at end of file diff --git a/app/pages/privacy.html b/app/pages/privacy.html new file mode 100644 index 0000000..7a824f8 --- /dev/null +++ b/app/pages/privacy.html @@ -0,0 +1,43 @@ +{% extends '__layout__.html' %} +{% block title %}Privacy Policy{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Privacy Policy

+

Last amended: 22/10/2023

+
+

This Privacy Policy ("Policy") describes how Syntax ("we," "us," or "our") collects, uses, and protects the personal information you provide when accessing or using the Syntax website (the "Website").

+

1. Information Collection and Use

+

1.1. We may collect and store your IP address when you access or use the Website. This information is collected to prevent any misuse of our systems and ensure the security and integrity of the Website.

+

1.2. In order to prevent malicious activities and protect the Website, we may also collect and store hardware information about your machine, such as device type, operating system, and browser version.

+ +

2. Information Sharing and Disclosure

+

2.1. We do not sell, trade, or otherwise transfer your personal information to third parties for marketing or advertising purposes.

+

2.2. We may share your personal information with trusted third-party service providers who assist us in operating the Website, conducting our business, or servicing you, as long as they agree to keep this information confidential.

+

2.3. We may disclose your personal information if required by law or if we believe that such action is necessary to comply with legal obligations, protect our rights and property, or ensure the safety of our users or the public.

+ +

3. Cookies and Tracking Technologies

+

3.1. We use cookies and similar tracking technologies to enhance your experience on the Website. Cookies are small files stored on your device that allow us to recognize and remember your preferences.

+

3.2. We also use third-party services, such as Cloudflare, Google Analytics and Hcaptcha, which may use cookies and other tracking technologies. Please review their privacy policies for more information on how they handle your data.

+ +

4. Data Security

+

4.1. We implement reasonable security measures to protect your personal information against unauthorized access, alteration, disclosure, or destruction.

+

4.2. However, please note that no method of transmission over the Internet or electronic storage is 100% secure. Therefore, while we strive to protect your personal information, we cannot guarantee its absolute security.

+ +

5. Children's Privacy

+

5.1. The Website is not intended for use by individuals under the age of 13. We do not knowingly collect personal information from children. If we become aware that we have collected personal information from a child without parental consent, we will take steps to remove that information from our servers.

+ +

6. Links to Third-Party Websites

+

6.1. The Website may contain links to third-party websites or services. We are not responsible for the privacy practices or the content of those third-party websites. We encourage you to review the privacy policies of those websites before providing any personal information.

+ +

7. Changes to the Privacy Policy

+

7.1. We reserve the right to update or modify this Privacy Policy at any time. Any changes will be effective immediately upon posting the updated Policy on the Website. Your continued use of the Website after any such changes constitutes your acceptance of the modified Privacy Policy.

+ +

8. Contact Us

+

8.1. If you have any questions or concerns about this Privacy Policy or our privacy practices, please contact us on our discord server.

+ +

By accessing or using the Syntax Website, you acknowledge that you have read, understood, and agreed to the terms and conditions of this Privacy Policy.

+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/followers.html b/app/pages/profiles/followers.html new file mode 100644 index 0000000..d0533da --- /dev/null +++ b/app/pages/profiles/followers.html @@ -0,0 +1,64 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

{{profile.username}}'s Followers

+
+ +
+

Followers ( {{FollowCount}} )

+
+ {% for following in FollowUsers: %} + + {%endfor%} +
+ {% if len(FollowUsers) <= 0: %} +

No results found

+ {% endif %} +
+
+ Previous +

Page {{PageNumber}} of {{TotalPages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/following.html b/app/pages/profiles/following.html new file mode 100644 index 0000000..d704f20 --- /dev/null +++ b/app/pages/profiles/following.html @@ -0,0 +1,64 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

{{profile.username}}'s Following

+
+ +
+

Following ( {{FollowCount}} )

+
+ {% for following in FollowUsers: %} + + {%endfor%} +
+ {% if len(FollowUsers) <= 0: %} +

No results found

+ {% endif %} +
+
+ Previous +

Page {{PageNumber}} of {{TotalPages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/friends.html b/app/pages/profiles/friends.html new file mode 100644 index 0000000..d5fd1cf --- /dev/null +++ b/app/pages/profiles/friends.html @@ -0,0 +1,74 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

{{profile.username}}'s Friends

+
+ +
+

Friends ( {{FriendCount}} )

+
+ {% for friend in FriendUsers: %} +
+
+ + {{friend.username}} + + {{friend.username}} + {% if currentuser.id == profile.id %} + + {%endif%} +
+
+ {%endfor%} +
+ {% if len(FriendUsers) <= 0: %} +

No results found

+ {% endif %} +
+
+ Previous +

Page {{PageNumber}} of {{TotalPages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/inventory.html b/app/pages/profiles/inventory.html new file mode 100644 index 0000000..6b22b10 --- /dev/null +++ b/app/pages/profiles/inventory.html @@ -0,0 +1,183 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}} - Inventory{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

{{profile.username}}'s Inventory

+
+
+ +
+

{{CategoryName}}

+ + {% if len(SearchQuery.items) == 0: %} +

No items found

+ {% endif %} +
+ Previous +

Page {{SearchQuery.page}} of {{SearchQuery.pages}}

+ Next +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/profile.html b/app/pages/profiles/profile.html new file mode 100644 index 0000000..c485f7a --- /dev/null +++ b/app/pages/profiles/profile.html @@ -0,0 +1,254 @@ +{% extends '__layout__.html' %} +{% block title %}{{profile.username}}{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+ {{profile.username}} + {% if profile.isonline: %}
{% endif %} +
+
+
+

{{profile.username}}

+ {% if profile.membershipValue == 1: %} + + {%endif%} + {% if profile.membershipValue == 2: %} + + {%endif%} + {% if profile.membershipValue == 3: %} + + {%endif%} +
+ {% if profile.id != currentuser.id : %} + {% if profile.doestargetuserfollowviewer: %} +

This user is currently following you

+ {%endif%} + {%endif%} +
+
+

Friends

+ {{profile.friendcount}} +
+
+

Followers

+ {{profile.FollowerCount}} +
+
+

Following

+ {{profile.FollowingCount}} +
+
+

User RAP

+

{{profile.UserRAP}}

+
+
+
+
+
+
+ + {% if profile.id != currentuser.id : %} +
+ + {% if profile.isfriends: %} +
+ + +
+ {% else: %} + {% if profile.friendrequestpending: %} + + {% else: %} + {% if profile.friendrequesttoauthenticateduser: %} +
+ + +
+ {% else: %} +
+ + +
+ {% endif %} + {% endif %} + {% endif %} +
+ {% endif %} +
+
+
+ + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/profiles/profile.py b/app/pages/profiles/profile.py new file mode 100644 index 0000000..f6aec3d --- /dev/null +++ b/app/pages/profiles/profile.py @@ -0,0 +1,536 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, flash, abort +from app.util import auth, friends, membership, websiteFeatures, placeinfo +from app.extensions import db, limiter, csrf, user_limiter +from app.models.user import User +from app.models.friend_request import FriendRequest +from app.models.friend_relationship import FriendRelationship +from datetime import datetime +from app.models.asset import Asset +from app.models.place import Place +from app.models.placeserver_players import PlaceServerPlayer +from app.models.follow_relationship import FollowRelationship +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.userassets import UserAsset +from app.models.universe import Universe +from app.models.place_badge import PlaceBadge, UserBadge +from app.enums.AssetType import AssetType +from sqlalchemy import or_ +from app.enums.MembershipType import MembershipType +from slugify import slugify +from app.routes.rate import GetAssetLikesAndDislikes, GetUserVoteStatus, GetAssetVotePercentage, GetAssetFavoriteCount, GetUserFavoriteStatus +from app.services import economy + +from app.services.user_relationships import followings + +Profile = Blueprint("profile", __name__, template_folder="pages") + +@Profile.route("/users//profile", methods=["GET"]) +@auth.authenticated_required +def profile_page(userid): + user : User = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + + Friends = friends.GetFriends(user.id) + FriendCount = len(Friends) + DescriptionLines = user.description.split("\n") + FriendsData = [] + for friend in Friends: + friendObjData = {} + friendObjData = { + "id": friend.id, + "username": friend.username, + "isonline": True if (datetime.utcnow() - friend.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=friend.id).first() is not None else False + } + FriendsData.append(friendObjData) + FriendsData.sort(key=lambda x: x["isonline"], reverse=True) + FriendsData.sort(key=lambda x: x["ingame"], reverse=True) + FriendsData = FriendsData[:8] + + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id != user.id: + isFriends = friends.IsFriends(AuthenticatedUser.id, user.id) + FriendRequestPending = FriendRequest.query.filter_by(requester_id=AuthenticatedUser.id, requestee_id=user.id).first() is not None + FriendRequestToAuthenticatedUser = FriendRequest.query.filter_by(requester_id=user.id, requestee_id=AuthenticatedUser.id).first() is not None + isViewerFollowing = FollowRelationship.query.filter_by(followerUserId=AuthenticatedUser.id, followeeUserId=user.id).first() is not None + doesTargetUserFollowViewer = FollowRelationship.query.filter_by(followerUserId=user.id, followeeUserId=AuthenticatedUser.id).first() is not None + else: + isFriends = False + FriendRequestPending = False + FriendRequestToAuthenticatedUser = False + isViewerFollowing = False + doesTargetUserFollowViewer = False + joindate = user.created.strftime("%d/%m/%Y") + TotalVisits = 0 + UniverseList : list[Universe] = Universe.query.filter_by( creator_id = user.id, creator_type = 0 ).all() + for UniverseObj in UniverseList: + TotalVisits += UniverseObj.visit_count + + FollowerCount = followings.get_follower_count( user ) + FollowingCount = followings.get_following_count( user ) + WearingAssets = UserAvatarAsset.query.filter_by(user_id=user.id).all() + membershipValue : int = membership.GetUserMembership(user.id).value + + UserGames : list[Asset] = Asset.query.filter_by(creator_id = user.id, creator_type = 0, asset_type = AssetType.Place).all() + UserGamesInfo : list[dict] = [] + for UserGame in UserGames: + PlaceObj : Place = Place.query.filter_by(placeid=UserGame.id).first() + if PlaceObj is None: + continue + if PlaceObj.is_public == False: + continue + + PlaceObjData = { + "id": UserGame.id, + "name": UserGame.name, + "playingcount": placeinfo.GetPlayingCount( PlaceObj ), + "slug": slugify(UserGame.name, lowercase=False) if UserGame.name is not None else "", + "likePercentage": GetAssetVotePercentage(UserGame.id), + "placeyear": PlaceObj.placeyear + } + UserGamesInfo.append(PlaceObjData) + + ProfileData = { + "username": user.username, + "id": user.id, + "friendcount": FriendCount, + "isonline": True if (datetime.utcnow() - user.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=user.id).first() is not None else False, + "isfriends": isFriends, + "friendrequestpending": FriendRequestPending, + "friendrequesttoauthenticateduser": FriendRequestToAuthenticatedUser, + "friendsdata": FriendsData, + "joindate": joindate, + "TotalVisits": TotalVisits, + "FollowerCount": FollowerCount, + "FollowingCount": FollowingCount, + "wearing": WearingAssets, + "isviewerfollowing": isViewerFollowing, + "doestargetuserfollowviewer": doesTargetUserFollowViewer, + "membershipValue": membershipValue, + "UserGames": UserGamesInfo, + "UserRAP": economy.CalculateUserRAP( user ) + } + + return render_template("profiles/profile.html", profile=ProfileData, descriptionlines=DescriptionLines) + +@Profile.route("/users//addfriend", methods=["POST"]) +@limiter.limit("5/minute") +@auth.authenticated_required +@user_limiter.limit("5/minute") +def add_friend(userid): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + if not websiteFeatures.GetWebsiteFeature("SendFriendRequest"): + flash("Adding friends is temporarily disabled.", "error") + return redirect(f"/users/{user.id}/profile") + AuthenticatedUser = auth.GetCurrentUser() + + if userid == AuthenticatedUser.id: + flash("You cannot add yourself as a friend.", "error") + return redirect(f"/users/{user.id}/profile") + + if FriendRequest.query.filter_by(requester_id=AuthenticatedUser.id, requestee_id=user.id).first() is not None: + flash("You have already sent a friend request to this user.", "error") + return redirect(f"/users/{user.id}/profile") + + if friends.IsFriends(AuthenticatedUser.id, user.id): + flash("You are already friends with this user.", "error") + return redirect(f"/users/{user.id}/profile") + + friendRequest = FriendRequest(requester_id=AuthenticatedUser.id, requestee_id=user.id) + db.session.add(friendRequest) + db.session.commit() + + return redirect(f"/users/{user.id}/profile") + +@Profile.route("/users//unfriend", methods=["POST"]) +@limiter.limit("5/minute") +@auth.authenticated_required +@user_limiter.limit("5/minute") +def unfriend(userid): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + AuthenticatedUser = auth.GetCurrentUser() + + if not friends.IsFriends(AuthenticatedUser.id, user.id): + flash("You are not friends with this user.", "error") + return handle_redirect(user) + + Friendrelationship : FriendRelationship = friends.GetFriendRelationship(AuthenticatedUser.id, user.id) + db.session.delete(Friendrelationship) + db.session.commit() + + return handle_redirect(user) + +def handle_redirect(user): + wantRedirect = request.args.get("redirect", type=int, default=1) + if wantRedirect == 1: + return redirect(f"/users/{user.id}/profile") + else: + return redirect(request.referrer) + + +@Profile.route("/users//acceptfriend", methods=["POST"]) +@limiter.limit("30/minute") +@auth.authenticated_required +@user_limiter.limit("30/minute") +def accept_friend(userid): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + if not websiteFeatures.GetWebsiteFeature("SendFriendRequest"): + flash("Adding friends is temporarily disabled.", "error") + return handle_redirect(user) + AuthenticatedUser = auth.GetCurrentUser() + if userid == AuthenticatedUser.id: + flash("You cannot add yourself as a friend.", "error") + return handle_redirect(user) + + friendRequest = FriendRequest.query.filter_by(requester_id=user.id, requestee_id=AuthenticatedUser.id).first() + if friendRequest is None: + flash("Friend request not found.", "error") + return handle_redirect(user) + + FriendCount = len(friends.GetFriends(user.id)) + if FriendCount >= 200: + flash("This user has reached their friend limit.", "error") + return handle_redirect(user) + + AuthenticatedUserFriendCount = len(friends.GetFriends(AuthenticatedUser.id)) + if AuthenticatedUserFriendCount >= 200: + flash("You have reached your friend limit.", "error") + return handle_redirect(user) + + Friendrelationship = FriendRelationship(user_id=user.id, friend_id=AuthenticatedUser.id) + db.session.add(Friendrelationship) + db.session.delete(friendRequest) + db.session.commit() + + return handle_redirect(user) + +@Profile.route("/users//declinefriend", methods=["POST"]) +@limiter.limit("30/minute") +@auth.authenticated_required +@user_limiter.limit("30/minute") +def decline_friend(userid): + TargetUser = User.query.filter_by(id=userid).first() + if TargetUser is None: + abort(404) + + if not websiteFeatures.GetWebsiteFeature("SendFriendRequest"): + flash("Declining friend requests is temporarily disabled.", "error") + return handle_redirect(TargetUser) + AuthenticatedUser = auth.GetCurrentUser() + if userid == AuthenticatedUser.id: + abort(404) + friendRequest = FriendRequest.query.filter_by(requester_id=TargetUser.id, requestee_id=AuthenticatedUser.id).first() + if friendRequest is None: + return handle_redirect(TargetUser) + db.session.delete(friendRequest) + db.session.commit() + return handle_redirect(TargetUser) + + +@Profile.route("/users//unfollowuser", methods=["POST"]) +@limiter.limit("5/minute") +@auth.authenticated_required +def unfollow_user(userid): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + try: + followings.unfollow_user( + current_follower = AuthenticatedUser, followed_user = UserObj + ) + except followings.FollowingExceptions.UserNotFollowing: + flash("You are not following this user.", "error") + return redirect(f"/users/{UserObj.id}/profile") + except followings.FollowingExceptions.UserRateLimited: + flash("You are being rate limited from unfollowing users, please slow down.", "error") + return redirect(f"/users/{UserObj.id}/profile") + + return redirect(f"/users/{UserObj.id}/profile") + +@Profile.route("/users//followuser", methods=["POST"]) +@limiter.limit("5/minute") +@auth.authenticated_required +def follow_user(userid): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None: + abort(404) + if UserObj.accountstatus == 4 or UserObj.accountstatus == 3: + abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + try: + followings.follow_user( + follower_user = AuthenticatedUser, followed_user = UserObj + ) + except followings.FollowingExceptions.AlreadyFollowing: + flash("You are already following this user.", "error") + return redirect(f"/users/{UserObj.id}/profile") + except followings.FollowingExceptions.UserRateLimited: + flash("You are being rate limited from following users, please slow down.", "error") + return redirect(f"/users/{UserObj.id}/profile") + except followings.FollowingExceptions.CannotFollowSelf: + flash("You cannot follow yourself.", "error") + return redirect(f"/users/{UserObj.id}/profile") + except followings.FollowingExceptions.FollowingIsDisabled: + flash("Following users is disabled.", "error") + return redirect(f"/users/{UserObj.id}/profile") + + return redirect(f"/users/{UserObj.id}/profile") + +@Profile.route("/users//friends", methods=["GET"]) +@auth.authenticated_required +def FriendsPage( userid : int ): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + PageNumber = request.args.get("page", 1, type=int) + + from app.models.friend_relationship import FriendRelationship + FriendRelationships : list[FriendRelationship] = FriendRelationship.query.filter( + or_( + FriendRelationship.user_id == user.id, + FriendRelationship.friend_id == user.id + ) + ).join( + User, + or_( + FriendRelationship.user_id == User.id, + FriendRelationship.friend_id == User.id + ) + ).filter( + User.id != user.id + ).order_by( + User.username + ).paginate( + page=PageNumber, + per_page=18, + error_out=False + ) + FriendUsers : list[User] = [] + for FriendRelationshipObj in FriendRelationships: + if FriendRelationshipObj.user_id == user.id: + TargetUserId : int = FriendRelationshipObj.friend_id + else: + TargetUserId : int = FriendRelationshipObj.user_id + FriendUser : User = User.query.filter_by(id=TargetUserId).first() + if FriendUser is not None: + FriendUsers.append({ + "id": FriendUser.id, + "username": FriendUser.username, + "isonline": True if (datetime.utcnow() - FriendUser.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=FriendUser.id).first() is not None else False + }) + FriendCount = FriendRelationship.query.filter((FriendRelationship.user_id == user.id) | (FriendRelationship.friend_id == user.id)).count() + if FriendRelationships.pages < PageNumber: + redirect(f"/users/{user.id}/friends") + + return render_template("profiles/friends.html", + profile=user, + FriendUsers=FriendUsers, + PageNumber=PageNumber, + isThereNextPage=FriendRelationships.has_next, + isTherePreviousPage=FriendRelationships.has_prev, + FriendCount=FriendCount, + TotalPages=FriendRelationships.pages) + +@Profile.route("/users//following", methods=["GET"]) +@auth.authenticated_required +def FollowingPage( userid : int ): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + PageNumber = request.args.get("page", 1, type=int) + + from app.models.follow_relationship import FollowRelationship + FollowRelationships : list[FollowRelationship] = FollowRelationship.query.filter_by(followerUserId=user.id).join( + User, + FollowRelationship.followeeUserId == User.id + ).order_by( + User.username + ).paginate( + page=PageNumber, + per_page=18, + error_out=False + ) + FollowUsers : list[User] = [] + for FollowRelationship in FollowRelationships: + FollowUser : User = User.query.filter_by(id=FollowRelationship.followeeUserId).first() + if FollowUser is not None: + FollowUsers.append({ + "id": FollowUser.id, + "username": FollowUser.username, + "isonline": True if (datetime.utcnow() - FollowUser.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=FollowUser.id).first() is not None else False + }) + FollowCount = FollowRelationship.query.filter_by(followerUserId=user.id).count() + if FollowRelationships.pages < PageNumber: + redirect(f"/users/{user.id}/following") + + return render_template("profiles/following.html", + profile=user, + FollowUsers=FollowUsers, + PageNumber=PageNumber, + isThereNextPage=FollowRelationships.has_next, + isTherePreviousPage=FollowRelationships.has_prev, + FollowCount=FollowCount, + TotalPages=FollowRelationships.pages) + +@Profile.route("/users//followers", methods=["GET"]) +@auth.authenticated_required +def FollowersPage( userid : int ): + user = User.query.filter_by(id=userid).first() + if user is None: + abort(404) + if user.accountstatus == 4 or user.accountstatus == 3: + abort(404) + PageNumber = request.args.get("page", 1, type=int) + + from app.models.follow_relationship import FollowRelationship + FollowRelationships : list[FollowRelationship] = FollowRelationship.query.filter_by(followeeUserId=user.id).join( + User, + FollowRelationship.followerUserId == User.id + ).order_by( + User.username + ).paginate( + page=PageNumber, + per_page=18, + error_out=False + ) + FollowUsers : list[User] = [] + for FollowRelationship in FollowRelationships: + FollowUser : User = User.query.filter_by(id=FollowRelationship.followerUserId).first() + if FollowUser is not None: + FollowUsers.append({ + "id": FollowUser.id, + "username": FollowUser.username, + "isonline": True if (datetime.utcnow() - FollowUser.lastonline).total_seconds() < 60 else False, + "ingame": True if PlaceServerPlayer.query.filter_by(userid=FollowUser.id).first() is not None else False + }) + FollowCount = FollowRelationship.query.filter_by(followeeUserId=user.id).count() + if FollowRelationships.pages < PageNumber: + redirect(f"/users/{user.id}/followers") + + return render_template("profiles/followers.html", + profile=user, + FollowUsers=FollowUsers, + PageNumber=PageNumber, + isThereNextPage=FollowRelationships.has_next, + isTherePreviousPage=FollowRelationships.has_prev, + FollowCount=FollowCount, + TotalPages=FollowRelationships.pages) + +@Profile.route("/users//requests", methods=["GET"]) +@auth.authenticated_required +def FriendRequestsPage( userid : int ): + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id != userid: + abort(404) + PageNumber = request.args.get("page", 1, type=int) + FriendRequests : list[FriendRequest] = FriendRequest.query.filter_by(requestee_id=userid).order_by(FriendRequest.created_at.desc()).paginate(page=PageNumber, per_page=18, error_out=False) + return render_template("profiles/requests.html", + profile=AuthenticatedUser, + FriendRequests=FriendRequests) + +@Profile.route("/users//requests/clear", methods=["POST"]) +@auth.authenticated_required +def ClearFriendRequests(userid : int): + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser.id != userid: + abort(404) + FriendRequests : list[FriendRequest] = FriendRequest.query.filter_by(requestee_id=userid).all() + for FriendRequestObj in FriendRequests: + db.session.delete(FriendRequestObj) + db.session.commit() + return redirect(f"/users/{userid}/requests") + +@Profile.route("/users//inventory", methods=["GET"]) +@auth.authenticated_required +def UserInventoryPage( userid : int ): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None: + return abort(404) + + InventoryTypesDict = { + 0: lambda queryObj: queryObj.filter(Asset.asset_type.in_(( + AssetType.HairAccessory, + AssetType.FaceAccessory, + AssetType.NeckAccessory, + AssetType.ShoulderAccessory, + AssetType.FrontAccessory, + AssetType.BackAccessory, + AssetType.WaistAccessory, + ))), + 1: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Audio ), + 2: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Package ), + 3: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Face ), + 4: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Head ), + 5: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Hat ), + 6: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.GamePass ), + 7: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.TShirt ), + 8: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Shirt ), + 9: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Pants ), + 10: lambda queryObj: queryObj.filter( Asset.asset_type == AssetType.Gear ) + } + InventoryTypeToFriendlyName = { + 0: "Accessories", + 1: "Audio", + 2: "Packages", + 3: "Faces", + 4: "Heads", + 5: "Hats", + 6: "Passes", + 7: "T-Shirts", + 8: "Shirts", + 9: "Pants", + 10: "Gears", + 11: "Badges" + } + + CategoryType = request.args.get( key = "category", default = 0, type = int ) + if CategoryType not in InventoryTypeToFriendlyName: + return redirect(f"/users/{userid}/inventory") + PageNumber = request.args.get( key = "page", default = 1, type = int ) + if PageNumber < 1: + PageNumber = 1 + + if CategoryType not in [11]: + SearchQuery = UserAsset.query.filter_by( userid = userid ).outerjoin( Asset, Asset.id == UserAsset.assetid ) + SearchQuery = InventoryTypesDict[CategoryType](SearchQuery).order_by( UserAsset.updated.desc() ).paginate( page = PageNumber, per_page = 24, error_out = False ) + + for UserAssetObj in SearchQuery.items: + if UserAssetObj.asset.is_limited and not UserAssetObj.asset.is_for_sale: + BestPriceResult : UserAsset = UserAsset.query.filter_by(assetid=UserAssetObj.assetid, is_for_sale=True).order_by(UserAsset.price.asc()).first() + if BestPriceResult is not None: + UserAssetObj.best_price = str(BestPriceResult.price) + else: + UserAssetObj.best_price = "--" + elif CategoryType == 11: + SearchQuery = UserBadge.query.filter_by( user_id = userid ).order_by( UserBadge.awarded_at.desc() ).paginate( page = PageNumber, per_page = 24, error_out = False ) + + return render_template( + "profiles/inventory.html", + profile = UserObj, + SearchQuery = SearchQuery, + CategoryName = InventoryTypeToFriendlyName[CategoryType], + CategoryIndex = CategoryType + ) \ No newline at end of file diff --git a/app/pages/profiles/requests.html b/app/pages/profiles/requests.html new file mode 100644 index 0000000..08f6e96 --- /dev/null +++ b/app/pages/profiles/requests.html @@ -0,0 +1,82 @@ +{% extends '__layout__.html' %} +{% block title %}Friend Requests{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+
+ + + +

Friend Requests

+
+ +
+
+

Requests ( {{FriendRequests.total}} )

+
+ + +
+
+
+ {% for request in FriendRequests: %} +
+
+ + {{request.requester.username}} + +
+ {{request.requester.username}} +
+
+ + +
+
+ + +
+
+
+
+
+ {%endfor%} +
+ {% if FriendRequests.total <= 0: %} +

No results found

+ {% endif %} +
+
+ Previous +

Page {{FriendRequests.page}} of {{FriendRequests.pages}}

+ Next +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/changeemail.html b/app/pages/settings/changeemail.html new file mode 100644 index 0000000..ca7fbc9 --- /dev/null +++ b/app/pages/settings/changeemail.html @@ -0,0 +1,56 @@ +{% extends '__layout__.html' %} +{% block title %}Change Email{% endblock %} +{% block head %} + + + +{% endblock %} +{% block content %} +
+
+

Change Email

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} + {% if category == 'error': %} +
+ {{ message }} +
+ {% endif %} + {% if category == 'success': %} +
+ {{ message }} +
+ {% endif %} + {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ +
+
+
+

+ Please complete the captcha to change your email. +

+ +
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/changepassword.html b/app/pages/settings/changepassword.html new file mode 100644 index 0000000..d8a5c68 --- /dev/null +++ b/app/pages/settings/changepassword.html @@ -0,0 +1,52 @@ +{% extends '__layout__.html' %} +{% block title %}Change Password{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Change Password

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+
+
+ + +
+
+ {% if is2FAEnabled: %} +
+
+ + +
+
+ {% endif %} +
+
+ + +
+

Make sure to choose a strong password and always use a unique password for every site.

+
+ + +
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/changeusername.html b/app/pages/settings/changeusername.html new file mode 100644 index 0000000..301418f --- /dev/null +++ b/app/pages/settings/changeusername.html @@ -0,0 +1,35 @@ +{% extends '__layout__.html' %} +{% block title %}Change Username{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Change Username

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ + +
+
+ + +
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/emailverify_success.html b/app/pages/settings/emailverify_success.html new file mode 100644 index 0000000..0e71dd3 --- /dev/null +++ b/app/pages/settings/emailverify_success.html @@ -0,0 +1,21 @@ +{% extends '__layout__.html' %} +{% block title %}Email Verified{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+
+ +
+

Email Verified!

+

Thank you for verifying your email!{%if RewardObj: %} As a reward you have been given a special item{%endif%}

+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/enableTOTP.html b/app/pages/settings/enableTOTP.html new file mode 100644 index 0000000..63d98da --- /dev/null +++ b/app/pages/settings/enableTOTP.html @@ -0,0 +1,34 @@ +{% extends '__layout__.html' %} +{% block title %}Enable TOTP{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Enable TOTP

+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +

Scan the QR code below using a authenticator app (eg. Google Authenticator, Authy)

+
+ QR Code +
+

Note: Once this is enabled, you CANNOT disable it ever.

+
+ + + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/settings.html b/app/pages/settings/settings.html new file mode 100644 index 0000000..2cf4721 --- /dev/null +++ b/app/pages/settings/settings.html @@ -0,0 +1,52 @@ +{% extends '__layout__.html' %} +{% block title %}Settings{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Account Settings

+
+ {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+

Username: {{currentuser.username}}

+ Edit Username +
+
+

Password: ************

+ Edit Password +
+
+

Email: {% if LinkedEmailObj %}{{HiddenEmail}}{%if LinkedEmailObj.verified %} Verified{%else%} Unverified{%endif%}{%else%}No Email Linked{%endif%}

+ {% if LinkedEmailObj %}Edit Email{%else%}Add email{%endif%} +
+
+

Authenticator App Authentication: {% if TOTPenabled: %}Enabled{% else %}Disabled{% endif %}

+ {% if not TOTPenabled: %}{% endif %} +
+
+

Discord Account: {% if DiscordUserInfoObj != None: %}{{DiscordUserInfoObj.Username}}#{{DiscordUserInfoObj.Discriminator}} ({{DiscordUserInfoObj.UserId}}){%else%}Not Linked{%endif%}

+ {% if DiscordUserInfoObj == None: %}{%else%}
{% endif %} +
+
Description
+
+ + +
+ +
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/settings/settings.py b/app/pages/settings/settings.py new file mode 100644 index 0000000..25e3c74 --- /dev/null +++ b/app/pages/settings/settings.py @@ -0,0 +1,556 @@ +import base64 +import hashlib +import pyotp +import random +import re +import logging +import requests +import uuid +import json + +from app.util.discord import DiscordUserInfo, ExchangeCodeForToken, UnexpectedStatusCode, MissingScope, GetUserInfoFromToken, GenerateAuthorizationURL +from app.models.linked_discord import LinkedDiscord +from app.models.user_email import UserEmail +from app.pages.signup.signup import isUsernameAllowed +from app.models.past_usernames import PastUsername +from app.util.redislock import acquire_lock, release_lock +from app.models.usereconomy import UserEconomy +from datetime import datetime, timedelta +from app.pages.messages.messages import CreateSystemMessage +from app.util.membership import GetUserMembership, GiveUserMembership, UserHasHigherMembershipException, UserDoesNotExistException, RemoveUserMembership +from app.enums.MembershipType import MembershipType +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response, abort +from app.util import auth, websiteFeatures, textfilter, turnstile, transactions +from app.extensions import db, limiter, redis_controller +from app.models.user import User +from requests.auth import HTTPBasicAuth +from config import Config +from app.models.asset import Asset +from app.models.userassets import UserAsset +from sqlalchemy import func +from app.services import economy +from app.enums.TransactionType import TransactionType + +config = Config() + +def generate_secret_key_from_string(secret_string): + secret_bytes = secret_string.encode('utf-8') + char_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" + random.seed(secret_bytes) + secret_key = ''.join([random.choice(char_list) for _ in range(32)]) + return secret_key + +settings = Blueprint("settings", __name__, template_folder="pages") + +@settings.route("/settings", methods=["GET"]) +@auth.authenticated_required +def settings_page(): + user : User = auth.GetCurrentUser() + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=user.id).first() + if LinkedDiscordObj is not None: + DiscordUserInfoObj : DiscordUserInfo = DiscordUserInfo(LinkedDiscordObj.discord_id, LinkedDiscordObj.discord_username, LinkedDiscordObj.discord_avatar, GlobalName = None, Discriminator = LinkedDiscordObj.discord_discriminator) + else: + DiscordUserInfoObj = None + LinkedEmailObj : UserEmail = UserEmail.query.filter_by(user_id=user.id).first() + HiddenEmail = None + if LinkedEmailObj: + emailParts = LinkedEmailObj.email.split("@") + FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1) + SecondPart = emailParts[1] + HiddenEmail = FirstPart + "@" + SecondPart + return render_template("settings/settings.html", TOTPenabled = user.TOTPEnabled, description=user.description, DiscordUserInfoObj=DiscordUserInfoObj, LinkedEmailObj=LinkedEmailObj, HiddenEmail=HiddenEmail) + +@settings.route("/settings/description", methods=["POST"]) +@auth.authenticated_required +def settings_description(): + description = request.form.get("description") + if description is None: + return redirect("/settings") + if len(description) > 256: + flash("Description is too long") + return redirect("/settings") + + newlineCount = description.count("\n") + if newlineCount > 5: + flash("Description can only have 5 lines") + return redirect("/settings") + user : User = auth.GetCurrentUser() + user.description = textfilter.FilterText(description) + db.session.commit() + return redirect("/settings") + + +@settings.route("/settings/enableTOTP", methods=["GET"]) +@auth.authenticated_required +def settings_enableTOTP(): + return render_template("settings/enableTOTP.html") + +@settings.route("/settings/enableTOTP", methods=["POST"]) +@auth.authenticated_required +def settings_enableTOTP_post(): + if "code" not in request.form: + flash("Please fill in all fields") + return redirect("/settings/enableTOTP") + code = request.form.get("code") + user : User = auth.GetCurrentUser() + if user.TOTPEnabled: + return redirect("/settings") + + secret_key = generate_secret_key_from_string(str(user.id) + config.FLASK_SESSION_KEY) + totp = pyotp.TOTP(secret_key) + if not totp.verify(code): + flash("Invalid code") + return redirect("/settings/enableTOTP") + + user.TOTPEnabled = True + db.session.commit() + return redirect("/settings") + +@settings.route("/settings/TOTP/image", methods=["GET"]) +@auth.authenticated_required +def settings_TOTP_image(): + user : User = auth.GetCurrentUser() + if user.TOTPEnabled: + return redirect("/settings") + secret_key = generate_secret_key_from_string(str(user.id) + config.FLASK_SESSION_KEY) + import pyqrcode + totp = pyotp.TOTP(secret_key) + + url = pyqrcode.create(totp.provisioning_uri(user.username, issuer_name="Syntax")) + resp = make_response(base64.b64decode(url.png_as_base64_str(scale=5))) + resp.headers['Content-Type'] = 'image/png' + return resp + +import hashlib + +def GenerateStateHash( Cookie : str ) -> str: + """ + GenerateStateHash generates a state hash for discord oauth2. + """ + salted_cookie = Cookie + config.FLASK_SESSION_KEY + return hashlib.md5(salted_cookie.encode('utf-8')).hexdigest() + +@settings.route("/settings/unlink_discord", methods=["POST"]) +@auth.authenticated_required +def settings_unlink_discord(): + AuthenticatedUser : User = auth.GetCurrentUser() + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=AuthenticatedUser.id).first() + if LinkedDiscordObj is None: + flash("You do not have a linked discord account") + return redirect("/settings") + + if LinkedDiscordObj.linked_on + timedelta(hours=24) > datetime.utcnow(): + flash("You cannot unlink your discord account until 24 hours after linking") + return redirect("/settings") + db.session.delete(LinkedDiscordObj) + db.session.commit() + + UserMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserMembership == MembershipType.BuildersClub: + RemoveUserMembership(AuthenticatedUser) + + flash("Discord account unlinked") + return redirect("/settings") + +@settings.route("/settings/discord_link", methods=["GET"]) +@auth.authenticated_required +def settings_discord_link(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Discord Linking is temporarily disabled") + return redirect("/settings") + + UserObj : User = auth.GetCurrentUser() + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=UserObj.id).first() + if LinkedDiscordObj is not None: + return redirect("/settings") + state = GenerateStateHash(request.cookies[".ROBLOSECURITY"]) + AuthorizationURL = GenerateAuthorizationURL(state) + return redirect(AuthorizationURL) + +@settings.route("/settings/discord_handler", methods=["GET"]) +@auth.authenticated_required +def settings_discord_handler(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Discord Linking is temporarily disabled") + return redirect("/settings") + UserObj : User = auth.GetCurrentUser() + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(user_id=UserObj.id).first() + if LinkedDiscordObj is not None: + flash("You already have a linked discord account") + return redirect("/settings") + expectedState = GenerateStateHash(request.cookies[".ROBLOSECURITY"]) + givenState = request.args.get(key="state", default=None, type=str) + if givenState is None: + flash("Invalid state") + return redirect("/settings") + if givenState != expectedState: + flash("Invalid state") + return redirect("/settings") + givenCode = request.args.get(key="code", default=None, type=str) + if givenCode is None: + flash("Invalid code") + return redirect("/settings") + try: + DiscordOAuth2TokenExchangeResponseJSON = ExchangeCodeForToken(givenCode) + except UnexpectedStatusCode as e: + flash(f"UnexpectedStatusCodeException: {str(e)}") + return redirect("/settings") + except MissingScope as e: + flash(f"MissingScopeException: {str(e)}") + return redirect("/settings") + try: + DiscordUserInfoObj : DiscordUserInfo = GetUserInfoFromToken(DiscordOAuth2TokenExchangeResponseJSON["access_token"]) + except UnexpectedStatusCode as e: + flash(f"UnexpectedStatusCodeException: {str(e)}") + return redirect("/settings") + + DiscordAccountCreationDatetime = datetime.utcfromtimestamp( ( (int(DiscordUserInfoObj.UserId) >> 22) + 1420070400000) / 1000 ) + if DiscordAccountCreationDatetime + timedelta(days=7) > datetime.utcnow(): + flash("Discord account must be at least 7 days old") + return redirect("/settings") + + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=DiscordUserInfoObj.UserId).first() + if LinkedDiscordObj is not None: + if LinkedDiscordObj.linked_on + timedelta(hours=24) > datetime.utcnow(): + flash("This discord account has recently been linked to another account, please try again later") + return redirect("/settings") + try: + CreateSystemMessage( + subject = "Discord Account unlinked", + message = f"Your discord account was unlinked from your account because \"Account linked to another user\", if you currently have a Builders Club membership it will be automatically removed from your account until you link your discord account again.", + userid = LinkedDiscordObj.user_id + ) + OldUserMembership : MembershipType = GetUserMembership(LinkedDiscordObj.user_id) + if OldUserMembership == MembershipType.BuildersClub: + RemoveUserMembership(LinkedDiscordObj.user_id) + except: + pass + db.session.delete(LinkedDiscordObj) + db.session.commit() + NewLinkedDiscordObj = LinkedDiscord( + user_id=UserObj.id, + discord_id=DiscordUserInfoObj.UserId, + discord_username=DiscordUserInfoObj.Username, + discord_discriminator=DiscordUserInfoObj.Discriminator, + discord_avatar=DiscordUserInfoObj.AvatarHash, + discord_access_token=DiscordOAuth2TokenExchangeResponseJSON["access_token"], + discord_refresh_token=DiscordOAuth2TokenExchangeResponseJSON["refresh_token"], + discord_expiry=datetime.utcnow() + timedelta(seconds=DiscordOAuth2TokenExchangeResponseJSON["expires_in"]) + ) + db.session.add(NewLinkedDiscordObj) + db.session.commit() + + CurrentUserMembership : MembershipType = GetUserMembership(UserObj) + if CurrentUserMembership == MembershipType.NonBuildersClub: + try: + GiveUserMembership(UserObj, MembershipType.BuildersClub, expiration=timedelta(days=31)) + except Exception as e: + logging.error(f"Failed to give user builders club membership: {str(e)}") + return redirect("/settings") + + return redirect("/settings") + +@settings.route("/settings/update-password", methods=["GET"]) +@auth.authenticated_required +def settings_update_password(): + if not websiteFeatures.GetWebsiteFeature("PasswordChange"): + flash("Password changing is temporarily disabled") + return redirect("/settings") + + AuthenticatedUser : User = auth.GetCurrentUser() + return render_template("settings/changepassword.html", is2FAEnabled = AuthenticatedUser.TOTPEnabled) + +@settings.route("/settings/update-password", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("20/minute") +def settings_update_password_post(): + if not websiteFeatures.GetWebsiteFeature("PasswordChange"): + flash("Password changing is temporarily disabled") + return redirect("/settings") + + AuthenticatedUser : User = auth.GetCurrentUser() + + CurrentPassword = request.form.get( key = "current-password", default = "", type = str ) + NewPassword = request.form.get( key = "new-password", default = "", type = str ) + NewPasswordConfirm = request.form.get( key = "confirm-password", default = "", type = str ) + + OTPCode = request.form.get( key = "2fa-code", default = None, type = str ) + + if AuthenticatedUser.TOTPEnabled: + if OTPCode is None: + flash("Please fill in all fields") + return redirect("/settings/update-password") + isValidCode = auth.Validate2FACode(AuthenticatedUser.id, OTPCode) + if not isValidCode: + flash("Invalid 2FA code") + return redirect("/settings/update-password") + + if not auth.VerifyPassword(AuthenticatedUser, CurrentPassword): + flash("Invalid current password") + return redirect("/settings/update-password") + + if NewPassword != NewPasswordConfirm: + flash("Passwords do not match") + return redirect("/settings/update-password") + + if len(NewPassword) < 8: + flash("Password must be at least 8 characters") + return redirect("/settings/update-password") + + if len(NewPassword) > 256: + flash("Password cannot be longer than 256 characters") + return redirect("/settings/update-password") + + auth.SetPassword(AuthenticatedUser, NewPassword) + + flash("Password updated") + return redirect("/settings") + +@settings.route("/settings/update-username", methods=["GET"]) +@auth.authenticated_required +def settings_update_username(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Username changing is temporarily disabled") + return redirect("/settings") + return render_template("settings/changeusername.html") + +@settings.route("/settings/update-username", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("20/minute") +def settings_update_username_post(): + if not websiteFeatures.GetWebsiteFeature("UsernameChange"): + flash("Username changing is temporarily disabled") + return redirect("/settings") + AuthenticatedUser : User = auth.GetCurrentUser() + + NewUsername = request.form.get( key = "new-username", default = "", type = str ) + Password = request.form.get( key = "password", default = "", type = str ) + + if not auth.VerifyPassword(AuthenticatedUser, Password): + flash("Incorrect password") + return redirect("/settings/update-password") + + isValidUsername , Reason = isUsernameAllowed(NewUsername) + if not isValidUsername: + flash(Reason) + return redirect("/settings/update-username") + + try: + textfilter.FilterText(NewUsername, ThrowException=True, UseExtendedBadWords=True) + except Exception as e: + flash("Username contains inappropriate words") + return redirect("/settings/update-username") + + if NewUsername == AuthenticatedUser.username: + flash("Username cannot be the same as your current username") + return redirect("/settings/update-username") + + UsernameTaken = User.query.filter(func.lower(User.username) == func.lower(NewUsername)).first() + if UsernameTaken is not None: + flash("Username is taken") + return redirect("/settings/update-username") + + PastUsernameObj : PastUsername = PastUsername.query.filter(func.lower(PastUsername.username) == func.lower(NewUsername)).first() + if PastUsernameObj is not None: + if PastUsernameObj.user_id != AuthenticatedUser.id: + flash("Username is taken") + return redirect("/settings/update-username") + + UserRobuxBalance, _ = economy.GetUserBalance( TargetUser = AuthenticatedUser ) + if UserRobuxBalance < 1000: + flash("You need at least 1000 robux to change your username") + return redirect("/settings/update-username") + + try: + economy.DecrementTargetBalance( + Target = AuthenticatedUser, + Amount = 1000, + CurrencyType = 0 + ) + except economy.InsufficientFundsException: + flash("You need at least 1000 robux to change your username") + return redirect("/settings/update-username") + except economy.EconomyLockAcquireException: + flash("Failed to change username, please try again later no robux was deducted") + return redirect("/settings/update-username") + except Exception as e: + flash("Failed to change username, please try again later") + return redirect("/settings/update-username") + + try: + NewPastUsernameObj = PastUsername( + user_id=AuthenticatedUser.id, + username=AuthenticatedUser.username + ) + db.session.add(NewPastUsernameObj) + + AuthenticatedUser.username = NewUsername + db.session.commit() + except Exception as e: + flash("Failed to change username, please try again later") + return redirect("/settings/update-username") + + try: + transactions.CreateTransaction( + CurrencyAmount = 1000, + CurrencyType = 0, + TransactionType = TransactionType.Purchase, + AssetId = None, + CustomText = None, + Sender = AuthenticatedUser + ) + except: + pass + + flash("Username updated") + return redirect("/settings") + +@settings.route("/settings/update-email", methods=["GET"]) +@auth.authenticated_required +def settings_update_email(): + if not websiteFeatures.GetWebsiteFeature("EmailChange"): + flash("Email changing is temporarily disabled") + return redirect("/settings") + return render_template("settings/changeemail.html") + +EmailRegex = r"^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$" # RFC 5322 Compliant, because some fucker is gonna complain that he cant verify his email from his self-hosted shit + +@settings.route("/settings/update-email", methods=["POST"]) +@auth.authenticated_required +@limiter.limit("20/minute") +def settings_update_email_post(): + AuthenticatedUser : User = auth.GetCurrentUser() + + # We've been breached. Allow people to change their emails without cooldown + #if redis_controller.exists(f"update_email_v1_cooldown:{AuthenticatedUser.id}"): + #flash("Please wait 12 hours before updating your email again", "error") + #return redirect("/settings/update-email") + + NewEmail = request.form.get( key = "new-email", default = "", type = str ).strip().lower() + Password = request.form.get( key = "password", default = "", type = str ) + CloudflareTurnstileKey = request.form.get( key = "cf-turnstile-response", default = None, type=str ) + + if CloudflareTurnstileKey is None or CloudflareTurnstileKey == '': + flash("Please complete the captcha", "error") + return redirect("/settings/update-password") + if not turnstile.VerifyToken( CloudflareTurnstileKey ): + flash("Invalid captcha answer", "error") + return redirect("/settings/update-password") + + if not auth.VerifyPassword(AuthenticatedUser, Password): + flash("Incorrect password", "error") + return redirect("/settings/update-password") + + if not re.match( EmailRegex, NewEmail ): + flash("Invalid Email, Not RFC 5322 compliant", "error") + return redirect("/settings/update-password") + + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id = AuthenticatedUser.id ).first() + if UserEmailObj: + if UserEmailObj.email == NewEmail and UserEmailObj.verified: + flash("Email is already verified to this account", "error") + return redirect("/settings/update-email") + UserEmailObj.email = NewEmail + UserEmailObj.verified = False + UserEmailObj.updated_at = datetime.utcnow() + else: + NewUserEmailObj = UserEmail( + user_id = AuthenticatedUser.id, + email = NewEmail, + verified = False + ) + db.session.add(NewUserEmailObj) + db.session.commit() + + VerificationUUID = str(uuid.uuid4()) + VerificationURL = f"{config.BaseURL}/settings/update-email/verify?id={VerificationUUID}&user={AuthenticatedUser.id}" + + redis_controller.set(f"update_email_v1:{VerificationUUID}", AuthenticatedUser.id, ex=60 * 60 * 2) + redis_controller.set(f"update_email_v1_cooldown:{AuthenticatedUser.id}", "1", ex=60 * 60 * 12) + + # Send verification email + EmailData = { + "Messages": [ + { + "From": { + "Email": Config.MAILJET_NOREPLY_SENDER, + "Name": "syntax.eco" + }, + "To": [ + { + "Email": NewEmail, + "Name": AuthenticatedUser.username + } + ], + "TemplateID": Config.MAILJET_EMAILVERIFY_TEMPLATE_ID, + "TemplateLanguage": True, + "Subject": f"Verify your email on Syntax! - {AuthenticatedUser.username}", + "Variables": { + "username": AuthenticatedUser.username, + "verificationlink": VerificationURL + } + } + ] + } + + try: + EmailResponse = requests.post( + url="https://api.mailjet.com/v3.1/send", + data=json.dumps(EmailData), + headers={ + "Content-Type": "application/json" + }, + auth = HTTPBasicAuth( + Config.MAILJET_APIKEY, + Config.MAILJET_SECRETKEY + ) + ) + if EmailResponse.status_code != 200: + flash("Failed to send verification email", "error") + redis_controller.delete(f"update_email_v1:{VerificationUUID}") + redis_controller.delete(f"update_email_v1_cooldown:{AuthenticatedUser.id}") + return redirect("/settings/update-email") + except Exception as e: + flash("Failed to send verification email", "error") + redis_controller.delete(f"update_email_v1:{VerificationUUID}") + redis_controller.delete(f"update_email_v1_cooldown:{AuthenticatedUser.id}") + return redirect("/settings/update-email") + + flash("Verification email sent", "success") + return redirect("/settings/update-email") + +@settings.route("/settings/update-email/verify", methods=["GET"]) +def VerifyEmailGet(): + EmailVerificationUUID : str = request.args.get( key = "id", default = "", type = str ) + ExpectedUserId : int = request.args.get( key = "user", default = None, type = int ) + + if EmailVerificationUUID == "" or ExpectedUserId is None: + return abort(404) + + UserId = redis_controller.get(f"update_email_v1:{EmailVerificationUUID}") + if UserId is None: + return abort(404) + if int(UserId) != ExpectedUserId: + return abort(404) + + UserObj : User = User.query.filter_by(id=UserId).first() + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id=UserObj.id).first() + + if UserEmailObj is None: + return abort(404) + UserEmailObj.verified = True + UserEmailObj.updated_at = datetime.utcnow() + db.session.commit() + + RewardObj = None + if config.VERIFIED_EMAIL_REWARD_ASSET > 0: + if not UserAsset.query.filter_by(userid=UserObj.id, assetid=config.VERIFIED_EMAIL_REWARD_ASSET).first(): + NewUserAssetObj : UserAsset = UserAsset( + userid=UserObj.id, + assetid=config.VERIFIED_EMAIL_REWARD_ASSET + ) + db.session.add(NewUserAssetObj) + db.session.commit() + RewardObj = Asset.query.filter_by(id=config.VERIFIED_EMAIL_REWARD_ASSET).first() + + return render_template("settings/emailverify_success.html", UserObj = UserObj, RewardObj = RewardObj) \ No newline at end of file diff --git a/app/pages/signup/signup.html b/app/pages/signup/signup.html new file mode 100644 index 0000000..dfe8796 --- /dev/null +++ b/app/pages/signup/signup.html @@ -0,0 +1,45 @@ +{% extends '__layout__.html' %} +{% block title %}Signup{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} +
+ +
+{% endblock %} \ No newline at end of file diff --git a/app/pages/signup/signup.py b/app/pages/signup/signup.py new file mode 100644 index 0000000..0f4faa6 --- /dev/null +++ b/app/pages/signup/signup.py @@ -0,0 +1,263 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response, abort +from app.models.user import User +from app.models.invite_key import InviteKey +from app.models.usereconomy import UserEconomy +from app.models.user_avatar import UserAvatar +from app.models.login_records import LoginRecord +from app.util.textfilter import FilterText, TextNotAllowedException +from app.models.past_usernames import PastUsername +from app.pages.login.login import CreateLoginRecord +from app.extensions import db, limiter, csrf, redis_controller, get_remote_address +from app.pages.avatar.avatar import AllowedBodyColors +from app.routes.thumbnailer import TakeUserThumbnail +import logging +import hashlib +from datetime import datetime +from app.util import websiteFeatures, auth, turnstile, redislock +from app.services import invitekeys, proxydetection +from sqlalchemy import func +import random +from datetime import datetime, timedelta +from config import Config +import string + +config = Config() +signup = Blueprint("signup", __name__, template_folder="pages") + +@signup.route("/signup", methods=["GET"]) +@limiter.exempt() +def signup_page(): + if auth.isAuthenticated(): + return redirect("/home") + SignupEnabled = True + if not websiteFeatures.GetWebsiteFeature("WebSignup"): + flash("Signups are temporarily disabled") + SignupEnabled = False + return render_template("signup/signup.html", SignupEnabled=SignupEnabled) + +def RateLimitReached(e): + flash("You are being rate limited. Please try again later.") + return redirect("/signup") + +def isUsernameAllowed( username : str ): + if len(username) < 3 or len(username) > 20: + return False, "Usernames must be between 3 and 20 characters long" + + if username[0] == "_" or username[-1] == "_": + return False, "Usernames must not start or end with an underscore" + + if username.count("_") > 1: + return False, "Usernames must not contain more than one underscore" + + if username.count(" ") > 0: + return False, "Usernames must not contain spaces" + + allowedCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_" + hasLetter = False + for char in username: + if char not in allowedCharacters: + return False, "Usernames must only contain letters, numbers and underscores" + if char in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ": + hasLetter = True + + if not hasLetter: + return False, "Usernames must contain at least one letter" + + return True, "Allowed" + +@signup.route("/signup", methods=["POST"]) +@limiter.limit("10/minute", on_breach=RateLimitReached) +def signup_post(): + if auth.isAuthenticated(): + return redirect("/home") + username = request.form.get("username", default=None, type=str) + password = request.form.get("password", default=None, type=str) + agreedtoTerms = request.form.get("agreetoTermsandPrivacy", default="off", type=str) == "on" + #invitekey = request.form.get("invite-key", default=None, type=str) + + if not websiteFeatures.GetWebsiteFeature("WebSignup"): + flash("Signups are temporarily disabled") + return redirect("/signup") + if 'cf-turnstile-response' not in request.form or request.form.get('cf-turnstile-response') == '': + flash("Please complete the captcha", "error") + return redirect("/signup") + + if username is None or password is None: #or invitekey is None: + flash("Please fill in all fields") + return redirect("/signup") + + if not agreedtoTerms: + flash("You must agree to the Terms of service and privacy policy") + return redirect("/signup") + + allowed, reason = isUsernameAllowed(username) + if not allowed: + flash(reason) + return redirect("/signup") + + if len(password) < 8: + flash("Password must be at least 8 characters long") + return redirect("/signup") + + try: + FilterText( Text = username, ThrowException = True, UseExtendedBadWords=True) + except TextNotAllowedException: + flash("Username is not friendly for Syntax") + return redirect("/signup") + + RequestAddressRisk : int = proxydetection.fetch_address_risk( get_remote_address() ) + if RequestAddressRisk == 1: + flash("Please disable your VPN or proxy and try again") + return redirect("/signup") + + if RequestAddressRisk == 3: + flash("Error 255, please report in our discord.") # We want to be as vague as possible + return redirect("/signup") + redisResultIP = redis_controller.get("signupcooldown:" + get_remote_address()) + redisResultToken = None + if request.cookies.get("t", default=None, type=str) is not None: + redisResultToken = redis_controller.get("signupcooldown:token:" + str(request.cookies.get(key="t", default=None, type=str))) + + if redisResultIP is not None or redisResultToken is not None: + if redisResultIP is None: + redis_controller.set("signupcooldown:" + get_remote_address(), "1", ex=60*60*24*7) + if redisResultToken is None and request.cookies.get("t", default=None, type=str) is not None: + redis_controller.set("signupcooldown:token:" + str(request.cookies.get(key="t", default=None, type=str)), "1", ex=60*60*24*7) + + flash("You have recently made an account in the past 7 days.") + return redirect("/signup") + + SessionToken = request.cookies.get(key="t", default=None, type=str) + if SessionToken is None: + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + if len(SessionToken) != 128: + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + for char in SessionToken: + if char not in (string.ascii_letters + string.digits): + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + + UserIPHash = hashlib.md5(get_remote_address().encode("utf-8")).hexdigest() + LoginRecords : list[LoginRecord] = LoginRecord.query.filter(LoginRecord.ip == UserIPHash).distinct(LoginRecord.userid).all() + for record in LoginRecords: + if record.User.accountstatus != 1: + if record.session_token != SessionToken: + NewLoginRecord = LoginRecord( + userid = record.userid, + ip = UserIPHash, + session_token = SessionToken, + useragent = request.headers.get("User-Agent"), + timestamp = datetime.utcnow() + ) + db.session.add(NewLoginRecord) + db.session.commit() + + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + LoginRecords : list[LoginRecord] = LoginRecord.query.filter(LoginRecord.session_token == SessionToken).distinct(LoginRecord.userid).all() + for record in LoginRecords: + if record.User.accountstatus != 1: + NewLoginRecord = LoginRecord( + userid = record.userid, + ip = UserIPHash, + session_token = SessionToken, + useragent = request.headers.get("User-Agent"), + timestamp = datetime.utcnow() + ) + db.session.add(NewLoginRecord) + db.session.commit() + + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + + UserSignupLock = redislock.acquire_lock("UserSignupLock", acquire_timeout = 20, lock_timeout=1) + if not UserSignupLock: + flash("An issue occured while creating your account. Please try again later.") + return redirect("/signup") + + user = User.query.filter(func.lower(User.username) == func.lower(username)).first() + if user is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Username already taken") + return redirect("/signup") + + pastUsername = PastUsername.query.filter(func.lower(PastUsername.username) == func.lower(username)).first() + if pastUsername is not None: + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Username already taken") + return redirect("/signup") + + # try: + # inviteKey : InviteKey = invitekeys.GetInviteKey(invitekey) + # except invitekeys.InviteExceptions.InvalidInviteKey: + # redislock.release_lock("UserSignupLock", UserSignupLock) + # flash("Invalid invite key") + # return redirect("/signup") + # if inviteKey.used_by is not None: + # redislock.release_lock("UserSignupLock", UserSignupLock) + # flash("Invite key already used") + # return redirect("/signup") + # InviteKeyCreator : User = User.query.filter_by(id=inviteKey.created_by).first() + # if InviteKeyCreator is not None: + # if InviteKeyCreator.accountstatus != 1: + # redislock.release_lock("UserSignupLock", UserSignupLock) + # flash("Invite key creator's account is banned") + # return redirect("/signup") + + if not turnstile.VerifyToken(request.form.get('cf-turnstile-response')): + redislock.release_lock("UserSignupLock", UserSignupLock) + flash("Invalid captcha", "error") + + if request.cookies.get(key="t", default=None, type=str) is None: + abort(400) + + redis_controller.set("signupcooldown:" + get_remote_address(), "1", ex=60*60*24*7) + if request.cookies.get("t", default=None, type=str) is not None: + redis_controller.set("signupcooldown:token:" + str(request.cookies.get(key="t", default=None, type=str)), "1", ex=60*60*24*7) + + NewRegisteredUser : User = User( + username = username, + password = "", + created = datetime.utcnow(), + lastonline = datetime.utcnow(), + ) + + db.session.add(NewRegisteredUser) + db.session.commit() + + auth.SetPassword(NewRegisteredUser, password) + + userEconomy = UserEconomy( + userid = NewRegisteredUser.id, + robux = 0, + tix = 0 + ) + db.session.add(userEconomy) + + userAvatar : UserAvatar = UserAvatar( + user_id=NewRegisteredUser.id + ) + userAvatar.torso_color_id = random.choice(AllowedBodyColors) + db.session.add(userAvatar) + + #invitekeys.UseInviteKey(invitekey, NewRegisteredUser) + + db.session.commit() + redislock.release_lock("UserSignupLock", UserSignupLock) + logging.info(f"New user registered: {NewRegisteredUser.username} ({NewRegisteredUser.id})") + + TakeUserThumbnail(NewRegisteredUser.id) + sessionToken = auth.CreateToken(userid=NewRegisteredUser.id, ip=get_remote_address()) + resp = make_response(redirect("/home")) + resp.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + + if request.cookies.get("t", default=None, type=str) is not None: + NewToken = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(128)) + resp.set_cookie("t", NewToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + CreateLoginRecord( NewRegisteredUser.id, NewToken ) + else: + CreateLoginRecord( NewRegisteredUser.id ) + + return resp \ No newline at end of file diff --git a/app/pages/static.py b/app/pages/static.py new file mode 100644 index 0000000..d878aae --- /dev/null +++ b/app/pages/static.py @@ -0,0 +1,28 @@ +# Pages which has no function but to display static content +from flask import Blueprint, render_template, redirect +from app.util import auth + +static = Blueprint("static", __name__, template_folder="pages") + +@static.route("/terms") +def terms(): + return render_template("terms.html") + +@static.route("/privacy") +def privacy(): + return render_template("privacy.html") + +@static.route("/download") +@auth.authenticated_required +def download(): + return render_template("downloads.html") + +@static.route("/Games.aspx") +@auth.authenticated_required +def gamesaspx(): + return redirect("/games") + +@static.route("/drivers") +@auth.authenticated_required +def drivers(): + return render_template("drivers.html") diff --git a/app/pages/studio/myPlaces.html b/app/pages/studio/myPlaces.html new file mode 100644 index 0000000..fa9ecda --- /dev/null +++ b/app/pages/studio/myPlaces.html @@ -0,0 +1,94 @@ + + + + + SYNTAX + + + + + + {% if not currentuser: %} +
+
+ +
+
+ {%else%} +

Logged in

+ {%endif%} + + \ No newline at end of file diff --git a/app/pages/studio/studiopages.py b/app/pages/studio/studiopages.py new file mode 100644 index 0000000..ec27af4 --- /dev/null +++ b/app/pages/studio/studiopages.py @@ -0,0 +1,15 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort + +StudioPagesRoute = Blueprint('studiopages', __name__, url_prefix='/') + +@StudioPagesRoute.before_request +def before_request(): + BrowserUserAgent = request.headers.get('User-Agent') + if BrowserUserAgent is None: + return abort(404) + if "RobloxStudio" not in BrowserUserAgent: + return abort(404) + +@StudioPagesRoute.route("/ide/welcome", methods=['GET']) +def myPlaces(): + return render_template("studio/myPlaces.html") \ No newline at end of file diff --git a/app/pages/swaggerdocs.html b/app/pages/swaggerdocs.html new file mode 100644 index 0000000..2695da9 --- /dev/null +++ b/app/pages/swaggerdocs.html @@ -0,0 +1,19 @@ + + + + + + Swagger UI + + + + + + + +
+ + + + + diff --git a/app/pages/terms.html b/app/pages/terms.html new file mode 100644 index 0000000..ba486db --- /dev/null +++ b/app/pages/terms.html @@ -0,0 +1,52 @@ +{% extends '__layout__.html' %} +{% block title %}Terms of Service{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Terms of Service

+

Last amended: 30/5/2023

+
+

Please read these Terms of Service ("Terms") carefully before using the Syntax website (the "Website") operated by Syntax ("we," "us," or "our").

+

By accessing or using the Website, you agree to be bound by these Terms. If you disagree with any part of the Terms, please do not access or use the Website.

+ +

1. Acceptance of Terms

+

1.1. By accessing or using the Website, you acknowledge that you have read, understood, and agree to be bound by these Terms, as well as any additional guidelines, rules, or terms of service that may be provided by us.

+

1.2. These Terms constitute a legally binding agreement between you and Syntax regarding your use of the Website.

+ +

2. Website Usage Restrictions

+

2.1. You agree to use the Website only for lawful purposes and in a manner consistent with all applicable laws and regulations.

+

2.2. You agree not to post, upload, transmit, distribute, or otherwise publish through the Website any content that violates or infringes upon the rights of others, including but not limited to NSFW (Not Safe for Work) content, racist content, or content that promotes hatred or discrimination.

+

2.3. You agree not to engage in any activities that may disrupt or interfere with the proper functioning of the Website, including but not limited to exploiting game servers, misusing web APIs, scamming, or impersonating others.

+

2.4. Users under the age of 13 are prohibited from accessing the Website, and their access will be terminated if discovered.

+ +

3. Intellectual Property Rights

+

3.1. The Website and its original content, features, and functionality are owned by Syntax and are protected by international copyright, trademark, patent, trade secret, and other intellectual property or proprietary rights laws.

+

3.2. You may not copy, reproduce, modify, distribute, transmit, display, perform, or create derivative works from or exploit in any way the Website or any of its content without the prior written consent of Syntax.

+ +

4. Privacy

+

4.1. We respect your privacy and handle your personal information in accordance with our Privacy Policy. By using the Website, you consent to the collection, use, and disclosure of your information as described in the Privacy Policy.

+ +

5. Limitation of Liability

+

5.1. You agree that Syntax shall not be liable for any direct, indirect, incidental, special, consequential, or exemplary damages, including but not limited to damages for loss of profits, goodwill, use, data, or other intangible losses, resulting from your use or inability to use the Website.

+ +

6. Indemnification

+

6.1. You agree to indemnify and hold Syntax harmless from any claim or demand, including reasonable attorneys' fees, made by any third party due to or arising out of your breach of these Terms or your violation of any law or the rights of a third party.

+ +

7. Modifications to Terms of Service

+

7.1. Syntax reserves the right to modify or replace these Terms at any time. Any changes will be effective immediately upon posting the updated Terms on the Website. Your continued use of the Website after any such changes constitutes your acceptance of the modified Terms.

+ +

8. Termination

+

8.1. We may terminate or suspend your access to the Website, without prior notice or liability, for any reason whatsoever, including but not limited to a breach of these Terms.

+

8.2. All provisions of these Terms, which by their nature should survive termination, shall survive termination, including but not limited to intellectual property rights, limitation of liability, and indemnification.

+ +

9. Governing Law

+

9.1. These Terms shall be governed and construed in accordance with the laws of Singapore. Any dispute arising out of or relating to these Terms or the Website shall be exclusively resolved in the courts located in Singapore.

+ +

10. Contact Us

+

10.1. If you have any questions or concerns regarding these Terms, please contact us on our discord server.

+ +

By accessing or using the Syntax Website, you acknowledge that you have read, understood, and agreed to these Terms of Service.

+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/trades/create.html b/app/pages/trades/create.html new file mode 100644 index 0000000..beec637 --- /dev/null +++ b/app/pages/trades/create.html @@ -0,0 +1,133 @@ +{% extends '__layout__.html' %} +{% block title %}New Trade{% endblock %} +{% block head %} + + +{% endblock %} +{% block content %} + +
+
+ +
+
+
+
+
+

Your Offer

+
+

Value: R$ 0

+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+

*Plus R$

+ +
+
+
+
+
+

Your Request

+
+

Value: R$ 0

+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+

*Plus R$

+ +
+
+
+ + + +
+

* Syntax will take a 30% fee from the amount

+
+
+
+
My Inventory
+
+
+
+

Page 1

+
+
+
+
+
{{TargetUser.username}}'s Inventory
+
+
+
+

Page 1

+
+
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/app/pages/trades/index.html b/app/pages/trades/index.html new file mode 100644 index 0000000..cdf384e --- /dev/null +++ b/app/pages/trades/index.html @@ -0,0 +1,65 @@ +{% extends '__layout__.html' %} +{% block title %}Trades{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+

Trades

+
+ +
+
+ + + + + + + + + + + + + + {% for TradeObj in TradeInfo: %} + + + + + + + + + {% endfor %} + +
IDDateExpiresTrade PartnerStatusAction
{{TradeObj.TradeID}}{{TradeObj.Created}}{{TradeObj.Expiration}} + + {{TradeObj.OppositeUser.username}} + {{TradeObj.OppositeUser.username}} + + {{TradeObj.TradeStatus.name}}View
+ {% if len(TradeInfo) == 0: %} +
+

No trades found

+
+ {%endif%} +
+ Previous +

Page {{TradeListObj.page}} of {{TradeListObj.pages}}

+ Next +
+
+ +{%endblock%} \ No newline at end of file diff --git a/app/pages/trades/trades.py b/app/pages/trades/trades.py new file mode 100644 index 0000000..cd1c4ee --- /dev/null +++ b/app/pages/trades/trades.py @@ -0,0 +1,550 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.util import auth, redislock, websiteFeatures +from app.extensions import limiter, db, csrf, user_limiter +from app.models.user_trade_items import UserTradeItem +from app.models.user_trades import UserTrade +from app.models.user import User +from app.models.asset import Asset +from app.models.userassets import UserAsset +from app.models.usereconomy import UserEconomy +from app.models.asset_rap import AssetRap +from app.models.limited_item_transfers import LimitedItemTransfer +from app.util.membership import GetUserMembership +from app.enums.MembershipType import MembershipType +from app.enums.TradeStatus import TradeStatus +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod +from datetime import datetime, timedelta +import math + +TradesPageRoute = Blueprint('trades', __name__, template_folder="pages") + +@TradesPageRoute.route("/trade", methods=['GET']) +@auth.authenticated_required +def trades(): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeInfo = [] + + PageCategory = request.args.get("category", default="inbound", type=str) + PageCategory = PageCategory.lower() + PageNumber = request.args.get("page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + + if PageCategory == "inbound": + TradeListObj : list[UserTrade] = UserTrade.query.filter_by(recipient_userid=AuthenticatedUser.id, status=TradeStatus.Pending).order_by(UserTrade.updated_at.desc()).paginate( per_page=15, page=PageNumber, error_out=False ) + for TradeObj in TradeListObj: + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + if OppositeUser is None: + continue + TradeInfo.append({ + "TradeID": TradeObj.id, + "TradeStatus": TradeObj.status, + "Created": datetime.strftime(TradeObj.created_at, "%d/%m/%Y %H:%M:%S UTC"), + "Expiration": datetime.strftime(TradeObj.expires_at, "%d/%m/%Y %H:%M:%S UTC"), + "OppositeUser": OppositeUser + }) + elif PageCategory == "outbound": + TradeListObj : list[UserTrade] = UserTrade.query.filter_by(sender_userid=AuthenticatedUser.id, status=TradeStatus.Pending).order_by(UserTrade.updated_at.desc()).paginate( per_page=15, page=PageNumber, error_out=False ) + for TradeObj in TradeListObj: + OppositeUser : User = User.query.filter_by(id=TradeObj.recipient_userid).first() + if OppositeUser is None: + continue + TradeInfo.append({ + "TradeID": TradeObj.id, + "TradeStatus": TradeObj.status, + "Created": datetime.strftime(TradeObj.created_at, "%d/%m/%Y %H:%M:%S UTC"), + "Expiration": datetime.strftime(TradeObj.expires_at, "%d/%m/%Y %H:%M:%S UTC"), + "OppositeUser": OppositeUser + }) + elif PageCategory == "completed": + TradeListObj : list[UserTrade] = UserTrade.query.filter((UserTrade.recipient_userid == AuthenticatedUser.id) | (UserTrade.sender_userid == AuthenticatedUser.id)).filter_by(status=TradeStatus.Accepted).order_by(UserTrade.updated_at.desc()).paginate( per_page=15, page=PageNumber, error_out=False ) + for TradeObj in TradeListObj: + if TradeObj.recipient_userid == AuthenticatedUser.id: + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + else: + OppositeUser : User = User.query.filter_by(id=TradeObj.recipient_userid).first() + if OppositeUser is None: + continue + TradeInfo.append({ + "TradeID": TradeObj.id, + "TradeStatus": TradeObj.status, + "Created": datetime.strftime(TradeObj.created_at, "%d/%m/%Y %H:%M:%S UTC"), + "Expiration": datetime.strftime(TradeObj.expires_at, "%d/%m/%Y %H:%M:%S UTC"), + "OppositeUser": OppositeUser + }) + elif PageCategory == "inactive": # inactive trades + TradeListObj : list[UserTrade] = UserTrade.query.filter((UserTrade.recipient_userid == AuthenticatedUser.id) | (UserTrade.sender_userid == AuthenticatedUser.id)).filter( (UserTrade.status == TradeStatus.Declined) | (UserTrade.status == TradeStatus.Expired) | (UserTrade.status == TradeStatus.Cancelled)).order_by(UserTrade.updated_at.desc()).paginate( per_page=15, page=PageNumber, error_out=False ) + for TradeObj in TradeListObj: + if TradeObj.recipient_userid == AuthenticatedUser.id: + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + else: + OppositeUser : User = User.query.filter_by(id=TradeObj.recipient_userid).first() + if OppositeUser is None: + continue + TradeInfo.append({ + "TradeID": TradeObj.id, + "TradeStatus": TradeObj.status, + "Created": datetime.strftime(TradeObj.created_at, "%d/%m/%Y %H:%M:%S UTC"), + "Expiration": datetime.strftime(TradeObj.expires_at, "%d/%m/%Y %H:%M:%S UTC"), + "OppositeUser": OppositeUser + }) + else: + return abort(404) + + return render_template("trades/index.html", TradeInfo=TradeInfo, PageCategory=PageCategory, TradeListObj=TradeListObj) + +@TradesPageRoute.route("/trade//create", methods=['GET']) +@auth.authenticated_required +def createTrade(userid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id == userid: + return abort(400) + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub: + return redirect("/membership") + TargetUser : User = User.query.filter_by(id=userid).first() + if TargetUser is None: + return abort(404) + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + return abort(404) + return render_template("trades/create.html", TargetUser=TargetUser, AuthenticatedUser=AuthenticatedUser) + +@TradesPageRoute.route("/trade//create", methods=['POST']) +@auth.authenticated_required +@limiter.limit("5/second") +@user_limiter.limit("5/second") +def createTradePost(userid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id == userid: + return jsonify({"success": False, "message": "You cannot trade with yourself."}),400 + + if not websiteFeatures.GetWebsiteFeature("ItemTrading"): + return jsonify({"success": False, "message": "Item trading is temporarily disabled."}),403 + + TargetUser : User = User.query.filter_by(id=userid).first() + if TargetUser is None: + return jsonify({"success": False, "message": "User not found."}),404 + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + return jsonify({"success": False, "message": "User not found."}),404 + TradeRequestData : dict = request.json + if TradeRequestData is None: + return jsonify({"success": False, "message": "Invalid request data."}),400 + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser) + if UserCurrentMembership == MembershipType.NonBuildersClub: + return jsonify({"success": False, "message": "You must be a Builders Club member to send trades."}),403 + OppositeUserCurrentMembership : MembershipType = GetUserMembership(TargetUser) + if OppositeUserCurrentMembership == MembershipType.NonBuildersClub: + return jsonify({"success": False, "message": "The opposite user must be a Builders Club member to accept trades."}),403 + """ + Expected JSON: + "RequesterOfferRobux": RequesterOfferRobux, # int must be >= 0 <= 100000 + "TargetOfferRobux": TargetOfferRobux, # int must be >= 0 and <= 100000 + "RequesterOfferUAIDs": RequesterOfferUAIDs, # list of int + "TargetOfferUAIDs": TargetOfferUAIDs, # list of int + "TOTPCode": isTOTPEnabled ? TOTPInputElement.value : null # int or null + """ + + # RequesterOfferRobux : int = TradeRequestData.get("RequesterOfferRobux", 0) + # TargetOfferRobux : int = TradeRequestData.get("TargetOfferRobux", 0) + # RequesterOfferUAIDs : list = TradeRequestData.get("RequesterOfferUAIDs", []) + # TargetOfferUAIDs : list = TradeRequestData.get("TargetOfferUAIDs", []) + # TOTPCode : int | None = TradeRequestData.get("TOTPCode", None, type=int) + + # if not all(key in TradeRequestData for key in ("RequesterOfferRobux", "TargetOfferRobux", "RequesterOfferUAIDs", "TargetOfferUAIDs", "TOTPCode")): + # return jsonify({"success": False, "message": "Invalid request data."}),400 + # if not isinstance(TradeRequestData["RequesterOfferRobux"], int) or not isinstance(TradeRequestData["TargetOfferRobux"], int): + # return jsonify({"success": False, "message": "Invalid request data, Robux Offer must be an integer."}),400 + # if not isinstance(TradeRequestData["RequesterOfferUAIDs"], list) or not isinstance(TradeRequestData["TargetOfferUAIDs"], list): + # return jsonify({"success": False, "message": "Invalid request data, Offered UAIDs must be a list."}),400 + # if not isinstance(TradeRequestData["TOTPCode"], int) and TradeRequestData["TOTPCode"] is not None: + # return jsonify({"success": False, "message": "Invalid request data, TOTP code must be an integer."}),400 + + try: + assert "RequesterOfferRobux" in TradeRequestData, "Missing parameter RequesterOfferRobux" + assert "TargetOfferRobux" in TradeRequestData, "Missing parameter TargetOfferRobux" + assert "RequesterOfferUAIDs" in TradeRequestData, "Missing parameter RequesterOfferUAIDs" + assert "TargetOfferUAIDs" in TradeRequestData, "Missing parameter TargetOfferUAIDs" + assert "TOTPCode" in TradeRequestData, "Missing parameter TOTPCode" + assert isinstance(TradeRequestData["RequesterOfferRobux"], int), "Invalid request data, Robux Offer must be an integer." + assert isinstance(TradeRequestData["TargetOfferRobux"], int), "Invalid request data, Target Robux Offer must be an integer." + assert isinstance(TradeRequestData["RequesterOfferUAIDs"], list), "Invalid request data, Offered UAIDs must be a list." + assert isinstance(TradeRequestData["TargetOfferUAIDs"], list), "Invalid request data, Offered UAIDs must be a list." + assert isinstance(TradeRequestData["TOTPCode"], int) or TradeRequestData["TOTPCode"] is None, "Invalid request data, TOTP code must be an integer or null." + except Exception as e: + return jsonify({"success": False, "message": f"Payload Validation failed, {str(e)}"}), 400 + + TotalTradesActive : int = UserTrade.query.filter_by(sender_userid=AuthenticatedUser.id, status=TradeStatus.Pending).count() + if TotalTradesActive >= 25: + return jsonify({"success": False, "message": "You cannot have more than 25 active trades at once."}),400 + ActiveTradesWithTarget : int = UserTrade.query.filter_by(sender_userid=AuthenticatedUser.id, recipient_userid=TargetUser.id, status=TradeStatus.Pending).count() + if ActiveTradesWithTarget >= 2: + return jsonify({"success": False, "message": "You cannot have more than 2 active trades with the same user at once."}),400 + + RequesterOfferRobux : int = TradeRequestData["RequesterOfferRobux"] + TargetOfferRobux : int = TradeRequestData["TargetOfferRobux"] + RequesterOfferUAIDs : list = TradeRequestData["RequesterOfferUAIDs"] + TargetOfferUAIDs : list = TradeRequestData["TargetOfferUAIDs"] + TOTPCode : int | None = TradeRequestData["TOTPCode"] + + if (RequesterOfferRobux < 0 or TargetOfferRobux < 0) or (RequesterOfferRobux > 100000 or TargetOfferRobux > 100000): + return jsonify({"success": False, "message": "Invalid request data, Robux Offer must be between 0 - 100000"}),400 + + if len(RequesterOfferUAIDs) > 4 or len(TargetOfferUAIDs) > 4: + return jsonify({"success": False, "message": "Invalid request data, cannot trade more than 4 items at once."}),400 + + if len(RequesterOfferUAIDs) <= 0 or len(TargetOfferUAIDs) <= 0: + return jsonify({"success": False, "message": "Invalid request data, both request and offer must contain at least one item"}),400 + + if AuthenticatedUser.TOTPEnabled: + if TOTPCode is None: + return jsonify({"success": False, "message": "Invalid request data, TOTP code is required."}),400 + if not auth.Validate2FACode(AuthenticatedUser.id, int(TOTPCode)): + return jsonify({"success": False, "message": "Invalid request data, TOTP code is invalid."}),400 + + for UAID in RequesterOfferUAIDs: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=UAID).first() + if UserAssetObj is None: + return jsonify({"success": False, "message": "Invalid request data, one of the items is invalid."}),400 + if UserAssetObj.userid != AuthenticatedUser.id: + return jsonify({"success": False, "message": f"Invalid request data, you do not own UAID {str(UAID)}"}),400 + AssetObj : Asset = Asset.query.filter_by(id=UserAssetObj.assetid).first() + if not AssetObj.is_limited or AssetObj.is_for_sale: + return jsonify({"success": False, "message": f"Invalid request data, you cannot trade UAID {str(UAID)}"}),400 + + for UAID in TargetOfferUAIDs: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=UAID).first() + if UserAssetObj is None: + return jsonify({"success": False, "message": "Invalid request data, one of the items is invalid."}),400 + if UserAssetObj.userid != TargetUser.id: + return jsonify({"success": False, "message": f"Invalid request data, user does not own UAID {str(UAID)}"}),400 + AssetObj : Asset = Asset.query.filter_by(id=UserAssetObj.assetid).first() + if not AssetObj.is_limited or AssetObj.is_for_sale: + return jsonify({"success": False, "message": f"Invalid request data, you cannot trade UAID {str(UAID)}"}),400 + + NewUserTrade : UserTrade = UserTrade( + sender_userid = AuthenticatedUser.id, + recipient_userid = TargetUser.id, + sender_userid_robux = RequesterOfferRobux, + recipient_userid_robux = TargetOfferRobux, + status = TradeStatus.Pending, + expires_at = datetime.utcnow() + timedelta(days=7) + ) + try: + db.session.add(NewUserTrade) + db.session.commit() + + for UAID in RequesterOfferUAIDs: + NewTradeAsset : UserTradeItem = UserTradeItem( + tradeid = NewUserTrade.id, + userid = AuthenticatedUser.id, + user_asset_id = UAID + ) + db.session.add(NewTradeAsset) + + for UAID in TargetOfferUAIDs: + NewTradeAsset : UserTradeItem = UserTradeItem( + tradeid = NewUserTrade.id, + userid = TargetUser.id, + user_asset_id = UAID + ) + db.session.add(NewTradeAsset) + + db.session.commit() + except: + db.session.delete(NewUserTrade) + return jsonify({"success": False, "message": "Internal server error"}),500 + return jsonify({"success": True, "message": "Trade request sent.", "tradeId": NewUserTrade.id}),200 + +@TradesPageRoute.route("/trade/view/", methods=['GET']) +@auth.authenticated_required_api +def viewTrade(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return abort(404) + if TradeObj.sender_userid != AuthenticatedUser.id and TradeObj.recipient_userid != AuthenticatedUser.id: + return abort(403) + + if TradeObj.expires_at < datetime.utcnow() and TradeObj.status == TradeStatus.Pending: + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + TradeItems : list[UserTradeItem] = UserTradeItem.query.filter_by(tradeid=TradeObj.id).all() + SenderUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + RecipientUser : User = User.query.filter_by(id=TradeObj.recipient_userid).first() + + SenderItems = [] + RecipientItems = [] + + AssetRAPCache = {} + def GetAssetRAP( AssetID : int ): + if AssetID in AssetRAPCache: + return AssetRAPCache[AssetID] + AssetRAPObj : AssetRap | None = AssetRap.query.filter_by(assetid=AssetID).first() + if AssetRAPObj is None: + return 0 + AssetRAPCache[AssetID] = AssetRAPObj.rap + return AssetRAPCache[AssetID] + SenderOfferValue = 0 + RecipientOfferValue = 0 + + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + AssetObj : Asset = Asset.query.filter_by(id=UserAssetObj.assetid).first() + if TradeItem.userid == SenderUser.id: + SenderItems.append({ + "UAID": UserAssetObj.id, + "Name": AssetObj.name, + "AssetId": AssetObj.id, + "RAP": GetAssetRAP(AssetObj.id), + "serial": UserAssetObj.serial + }) + SenderOfferValue += GetAssetRAP(AssetObj.id) + else: + RecipientItems.append({ + "UAID": UserAssetObj.id, + "Name": AssetObj.name, + "AssetId": AssetObj.id, + "RAP": GetAssetRAP(AssetObj.id), + "serial": UserAssetObj.serial + }) + RecipientOfferValue += GetAssetRAP(AssetObj.id) + + SenderOfferValue += TradeObj.sender_userid_robux + RecipientOfferValue += TradeObj.recipient_userid_robux + OppositeUser = SenderUser if AuthenticatedUser.id == RecipientUser.id else RecipientUser + + return render_template("trades/view.html", + TradeObj = TradeObj, + SenderUser = SenderUser, + RecipientUser = RecipientUser, + AuthenticatedUser = AuthenticatedUser, + SenderItems = SenderItems, + RecipientItems = RecipientItems, + SenderOfferValue = SenderOfferValue, + RecipientOfferValue = RecipientOfferValue, + OppositeUser = OppositeUser) + +@TradesPageRoute.route("/trade//accept", methods=['POST']) +@auth.authenticated_required +def acceptTrade(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return abort(404) + if TradeObj.recipient_userid != AuthenticatedUser.id: + return abort(403) + if TradeObj.status != TradeStatus.Pending: + return abort(403) + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser.id) + if UserCurrentMembership == MembershipType.NonBuildersClub: + flash("You must be a Builders Club member to accept trades.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + if OppositeUser is None: + flash("An error occured while trying to complete this trade. Please try again later.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + OppositeUserCurrentMembership : MembershipType = GetUserMembership(OppositeUser) + if OppositeUserCurrentMembership == MembershipType.NonBuildersClub: + flash("The opposite user must be a Builders Club member to accept trades.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if AuthenticatedUser.TOTPEnabled: + TOTPCode : str = request.form.get("totpcode", default=None, type=str) + if TOTPCode is None: + flash("Invalid TOTP code", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if not auth.Validate2FACode(AuthenticatedUser.id, TOTPCode): + flash("Invalid TOTP code", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + if TradeObj.expires_at < datetime.utcnow(): + flash("This trade has expired.", "error") + TradeObj.status = TradeStatus.Expired + db.session.commit() + return redirect(f"/trade/view/{str(tradeid)}") + + TradeItems : list[UserTradeItem] = UserTradeItem.query.filter_by(tradeid=TradeObj.id).all() + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + if UserAssetObj is None: + flash("One of the items no longer exists and this trade cannot be completed.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if UserAssetObj.userid != TradeItem.userid: + flash("One of the items no longer belongs to its original owner and this trade cannot be completed.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + SenderEconomyLock = redislock.acquire_lock(f"economy:{str(TradeObj.sender_userid)}", acquire_timeout=5, lock_timeout=3) + RecipientEconomyLock = redislock.acquire_lock(f"economy:{str(TradeObj.recipient_userid)}", acquire_timeout=5, lock_timeout=3) + if not SenderEconomyLock or not RecipientEconomyLock: + if SenderEconomyLock: + redislock.release_lock(f"economy:{str(TradeObj.sender_userid)}", SenderEconomyLock) + flash("An error occured while trying to complete this trade. Please try again later.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + SenderEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=TradeObj.sender_userid).first() + RecipientEconomyObj : UserEconomy = UserEconomy.query.filter_by(userid=TradeObj.recipient_userid).first() + + if SenderEconomyObj.robux < TradeObj.sender_userid_robux: + flash("The sender does not have enough robux to complete this trade.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if RecipientEconomyObj.robux < TradeObj.recipient_userid_robux: + flash("The recipient does not have enough robux to complete this trade.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + ItemLocks = [] + for TradeItem in TradeItems: + TradeItemLock = redislock.acquire_lock(f"item:{str(TradeItem.user_asset_id)}", acquire_timeout=20, lock_timeout=5) + if not TradeItemLock: + redislock.release_lock(f"economy:{str(TradeObj.sender_userid)}", SenderEconomyLock) + redislock.release_lock(f"economy:{str(TradeObj.recipient_userid)}", RecipientEconomyLock) + for ItemLock in ItemLocks: + redislock.release_lock(f"item:{str(ItemLock[1])}", ItemLock[0]) + + flash("An error occured while trying to complete this trade. Please try again later.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + ItemLocks.append([TradeItemLock, TradeItem.user_asset_id]) + + def ReleaseAllLocks(): + redislock.release_lock(f"economy:{str(TradeObj.sender_userid)}", SenderEconomyLock) + redislock.release_lock(f"economy:{str(TradeObj.recipient_userid)}", RecipientEconomyLock) + for ItemLock in ItemLocks: + redislock.release_lock(f"item:{str(ItemLock[1])}", ItemLock[0]) + + SenderEconomyObj.robux -= TradeObj.sender_userid_robux + RecipientEconomyObj.robux -= TradeObj.recipient_userid_robux + + if TradeObj.sender_userid_robux > 0: + FinalAdded = math.floor(TradeObj.sender_userid_robux * 0.7) + RecipientEconomyObj.robux += FinalAdded + if TradeObj.recipient_userid_robux > 0: + FinalAdded = math.floor(TradeObj.recipient_userid_robux * 0.7) + SenderEconomyObj.robux += FinalAdded + + def CreateItemTransferLog( original_owner_id : int, new_owner_id : int, asset_id : int, user_asset_id : int ): + NewTransferLog = LimitedItemTransfer( + original_owner_id = original_owner_id, + new_owner_id = new_owner_id, + asset_id = asset_id, + user_asset_id = user_asset_id, + transfer_method = LimitedItemTransferMethod.Trade, + associated_trade_id = TradeObj.id + ) + db.session.add(NewTransferLog) + + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + if UserAssetObj is None: + ReleaseAllLocks() + flash("One of the items no longer exists and this trade cannot be completed.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + if UserAssetObj.userid == TradeObj.sender_userid: + CreateItemTransferLog( original_owner_id = TradeObj.sender_userid, new_owner_id = TradeObj.recipient_userid, asset_id = UserAssetObj.assetid, user_asset_id = UserAssetObj.id ) + UserAssetObj.userid = TradeObj.recipient_userid + else: + CreateItemTransferLog( original_owner_id = TradeObj.sender_userid, new_owner_id = TradeObj.recipient_userid, asset_id = UserAssetObj.assetid, user_asset_id = UserAssetObj.id ) + UserAssetObj.userid = TradeObj.sender_userid + UserAssetObj.is_for_sale = False + UserAssetObj.price = 0 + UserAssetObj.updated = datetime.utcnow() + db.session.commit() + ReleaseAllLocks() + + TradeObj.status = TradeStatus.Accepted + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return redirect(f"/trade/view/{str(tradeid)}") + +@TradesPageRoute.route("/trade//cancel", methods=['POST']) +@auth.authenticated_required +def cancelTrade(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return abort(404) + if TradeObj.sender_userid != AuthenticatedUser.id: + return abort(403) + if TradeObj.status != TradeStatus.Pending: + return abort(403) + + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + flash("This trade has expired.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + TradeObj.status = TradeStatus.Cancelled + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return redirect(f"/trade/view/{str(tradeid)}") + +@TradesPageRoute.route("/trade//decline", methods=['POST']) +@auth.authenticated_required +@csrf.exempt +def declineTrade(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return abort(404) + if TradeObj.recipient_userid != AuthenticatedUser.id: + return abort(403) + if TradeObj.status != TradeStatus.Pending: + return abort(403) + + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + flash("This trade has expired.", "error") + return redirect(f"/trade/view/{str(tradeid)}") + + TradeObj.status = TradeStatus.Declined + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return redirect(f"/trade/view/{str(tradeid)}") + +@TradesPageRoute.route("/trade//inventory", methods=['GET']) +@auth.authenticated_required_api +def getInventory(userid : int): + pageNumber = request.args.get("page", default=1, type=int) + + TargetUser : User = User.query.filter_by(id=userid).first() + if TargetUser is None: + return abort(404) + if TargetUser.accountstatus == 4 or TargetUser.accountstatus == 3: + return abort(404) + + UserAssets : list[UserAsset] = UserAsset.query.join(Asset, UserAsset.assetid == Asset.id).filter(UserAsset.userid == TargetUser.id, Asset.is_limited == True, Asset.is_for_sale == False).paginate(page=pageNumber, error_out=False, max_per_page=12).items + ReturnInfoData = [] + + AssetRAPCache = {} + def GetAssetRAP( AssetID : int ): + if AssetID in AssetRAPCache: + return AssetRAPCache[AssetID] + AssetRAPObj : AssetRap | None = AssetRap.query.filter_by(assetid=AssetID).first() + if AssetRAPObj is None: + return 0 + AssetRAPCache[AssetID] = AssetRAPObj.rap + return AssetRAPCache[AssetID] + + for UserAssetObj in UserAssets: + AssetObj : Asset = Asset.query.filter_by(id=UserAssetObj.assetid).first() + if AssetObj is None: + continue + ReturnInfoData.append({ + "id": AssetObj.id, + "name": AssetObj.name, + "serialNumber": UserAssetObj.serial, + "uaid": UserAssetObj.id, + "rap": GetAssetRAP(AssetObj.id), + }) + isThereNextPage = len(UserAssets) == 12 + return jsonify({ + "data": ReturnInfoData, + "nextPage": isThereNextPage + }) + diff --git a/app/pages/trades/view.html b/app/pages/trades/view.html new file mode 100644 index 0000000..4eba4aa --- /dev/null +++ b/app/pages/trades/view.html @@ -0,0 +1,134 @@ +{% extends '__layout__.html' %} +{% block title %}View Trade{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+ < Return to trades + {% with messages = get_flashed_messages() %} + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ {% endif %} + {% endwith %} +
+
+ {{OppositeUser.username}} +

Your trade with {{OppositeUser.username}} is {{TradeObj.status.name}}

+
+ {% if TradeObj.status.value == 0: %} + {% if SenderUser.id == currentuser.id: %} +
+ + +
+ {%endif%} + {% if RecipientUser.id == currentuser.id: %} +
+ {% if AuthenticatedUser.TOTPEnabled: %} + + {%endif%} + + +
+
+ +
+ {%endif%} + {%endif%} +
+
+
+
+ {% if SenderUser.id != currentuser.id: %} +
Items you will receive
+ {%else%} +
Items you will send
+ {% endif %} +

Value: R$ {{SenderOfferValue}}

+
+
+ {% for i in range(4): %} + {% if (len(SenderItems) - 1 - i) >= 0: %} +
+
+ {{SenderItems[i].Name}} + {% if SenderItems[i].serial != None: %} +

#{{SenderItems[i].serial}}

+ {%endif%} +
+ {{SenderItems[i].Name}} +
+ {%else%} +
+
+
+
+ {%endif%} + {%endfor%} +
+
+ {%if TradeObj.sender_userid_robux > 0 %}
{{TradeObj.sender_userid_robux}} ROBUX
{%endif%} +
+
+
+
+
+ {% if SenderUser.id == currentuser.id: %} +
Items you will receive
+ {%else%} +
Items you will send
+ {% endif %} +

Value: R$ {{RecipientOfferValue}}

+
+
+ {% for i in range(4): %} + {% if (len(RecipientItems) - 1 - i) >= 0: %} +
+
+ {{RecipientItems[i].Name}} + {% if RecipientItems[i].serial != None: %} +

#{{RecipientItems[i].serial}}

+ {%endif%} +
+ {{RecipientItems[i].Name}} +
+ {%else%} +
+
+
+
+ {%endif%} + {%endfor%} +
+
+ {%if TradeObj.recipient_userid_robux > 0 %}
{{TradeObj.recipient_userid_robux}} ROBUX
{%endif%} +
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/app/pages/transactions/transactions.html b/app/pages/transactions/transactions.html new file mode 100644 index 0000000..e337ea8 --- /dev/null +++ b/app/pages/transactions/transactions.html @@ -0,0 +1,102 @@ +{% extends '__layout__.html' %} +{% block title %}Transactions{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+
+
+

Transactions

+ Currency Exchange +
+
+
+ + +
+
+
+ + + + + + + + + + + + {% for Transaction in TransactionInfo: %} + + + + + + + {% endfor %} + +
DateSourceDescriptionAmount
{{Transaction.created_at}} + {% if Transaction["source"]["type"] == 0: %} + + {{Transaction['source']['name']}} + {{Transaction["source"]["name"]}} + + {% else %} + + {{Transaction['source']['name']}} + {{Transaction["source"]["name"]}} + + {% endif %} + + {% if Transaction['custom_text'] != None %} + {{Transaction['custom_text']}} + {% else %} + {% if Transaction['asset'] != None: %} + + {{Transaction['asset']['name']}} + {{Transaction['asset']['name']}} + + {% else %} + Unknown + {%endif%} + {% endif %} + + {% if Transaction['currency_type'] == 0 %} + R$ {{Transaction['currency_amount']}} + {% else %} + T$ {{Transaction['currency_amount']}} + {% endif %} +
+ {% if len(TransactionInfo) == 0: %} +
+

No transactions found

+
+ {%endif%} + +
+ Previous +

Page {{Pagination.page}} of {{Pagination.pages}}

+ Next +
+
+ +{%endblock%} \ No newline at end of file diff --git a/app/pages/transactions/transactions.py b/app/pages/transactions/transactions.py new file mode 100644 index 0000000..a29f1a5 --- /dev/null +++ b/app/pages/transactions/transactions.py @@ -0,0 +1,86 @@ +from flask import Blueprint, render_template, request, redirect, url_for, session, flash, redirect, make_response, abort +from datetime import datetime, timedelta + +from app.models.user_transactions import UserTransaction +from app.util import auth +from app.extensions import db +from app.models.user import User +from app.models.groups import Group +from app.models.asset import Asset +from app.enums.TransactionType import TransactionType + +TransactionsRoute = Blueprint('transactions', __name__, url_prefix='/transactions') + +CategoryToEnum = { + "purchase": TransactionType.Purchase, + "sale": TransactionType.Sale, + "group-payout": TransactionType.GroupPayout, + "stipends": TransactionType.BuildersClubStipend, +} + +@TransactionsRoute.route("/", methods=["GET"]) +@auth.authenticated_required +def TransactionsPage(): + AuthenticatedUser : User = auth.GetCurrentUser() + + CategoryArg = request.args.get('category', default="purchase", type=str) + if CategoryArg not in CategoryToEnum: + Category : TransactionType = TransactionType.Purchase + else: + Category : TransactionType = CategoryToEnum[CategoryArg] + + PageNumber = request.args.get('page', default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + + TransactionQuery = UserTransaction.query.filter_by( transaction_type = Category) + CategoryQueryDict = { + TransactionType.Purchase: lambda queryObj: queryObj.filter_by( + sender_id = AuthenticatedUser.id, + sender_type = 0 + ), + TransactionType.Sale: lambda queryObj: queryObj.filter_by( + reciever_id = AuthenticatedUser.id, + reciever_type = 0 + ), + TransactionType.GroupPayout: lambda queryObj: queryObj.filter_by( + reciever_id = AuthenticatedUser.id, + reciever_type = 0 + ), + TransactionType.BuildersClubStipend: lambda queryObj: queryObj.filter_by( + reciever_id = AuthenticatedUser.id, + reciever_type = 0 + ), + } + TransactionQuery = CategoryQueryDict[Category](TransactionQuery) + TransactionQuery = TransactionQuery.order_by(UserTransaction.created_at.desc()) + TransactionQuery = TransactionQuery.paginate( page=PageNumber, per_page=15, error_out=False ) + + FormattedTransactions = [] + for Transaction in TransactionQuery.items: + Transaction : UserTransaction = Transaction + TransactionInfo = {} + TransactionInfo["source"] = { + "id": Transaction.sender_id if Transaction.sender_id != AuthenticatedUser.id or Transaction.sender_type != 0 else Transaction.reciever_id, + "type": Transaction.sender_type if Transaction.sender_id != AuthenticatedUser.id or Transaction.sender_type != 0 else Transaction.reciever_type, # VV I know this is bad but im too lazy to think of another way to do it + "name": ( User.query.filter_by(id = Transaction.sender_id).first().username if Transaction.sender_type != 1 else Group.query.filter_by( id = Transaction.sender_id ).first().name ) if Transaction.sender_id != AuthenticatedUser.id or Transaction.sender_type != 0 else ( User.query.filter_by(id = Transaction.reciever_id).first().username if Transaction.reciever_type != 1 else Group.query.filter_by( id = Transaction.reciever_id ).first().name ), + } + TransactionInfo["currency_amount"] = Transaction.currency_amount + TransactionInfo["currency_type"] = Transaction.currency_type + TransactionInfo["created_at"] = Transaction.created_at.strftime("%d/%m/%Y %H:%M:%S UTC") + TransactionInfo["custom_text"] = Transaction.custom_text + if Transaction.assetId: + TransactionInfo["asset"] = { + "id": Transaction.assetId, + "name": Asset.query.filter_by(id = Transaction.assetId).first().name, + } + else: + TransactionInfo["asset"] = None + FormattedTransactions.append(TransactionInfo) + + return render_template( + "transactions/transactions.html", + PageCategory = CategoryArg, + TransactionInfo = FormattedTransactions, + Pagination = TransactionQuery + ) \ No newline at end of file diff --git a/app/pages/users/index.html b/app/pages/users/index.html new file mode 100644 index 0000000..a7228df --- /dev/null +++ b/app/pages/users/index.html @@ -0,0 +1,70 @@ +{% extends '__layout__.html' %} +{% block title %}Search Users{% endblock %} +{% block head %} + +{% endblock %} +{% block content %} +
+

Users

+
+
+
+ + + +
+ +
+
+ + {% if len(UserLookupResults.items) == 0 %} +

No Results Found

+ {%endif%} +
+ Previous +

Page {{UserLookupResults.page}} of {{UserLookupResults.pages}}

+ Next +
+
+{% endblock %} diff --git a/app/pages/users/users_page.py b/app/pages/users/users_page.py new file mode 100644 index 0000000..7d19685 --- /dev/null +++ b/app/pages/users/users_page.py @@ -0,0 +1,37 @@ +import timeago +from flask import Blueprint, render_template, request, redirect, url_for, flash +from app.util import auth +from app.models.user import User +from datetime import datetime, timedelta +from app.models.placeserver_players import PlaceServerPlayer + +users_page = Blueprint('users_page', __name__, template_folder='templates') + +@users_page.route('/users', methods=['GET']) +@auth.authenticated_required +def index_page(): + PageNumber = max( request.args.get('page', default = 1, type = int ), 1 ) + SearchQuery = request.args.get('q', default = None, type = str) + UserLookupResults = None + if SearchQuery is not None and SearchQuery != '': + SearchQuery = SearchQuery.strip().replace( '%', '' ) + if len(SearchQuery) > 0 and len(SearchQuery) <= 32: + UserLookupResults = User.query.filter( User.username.ilike( '%' + SearchQuery + '%' ) ).filter_by( accountstatus = 1 ).order_by( User.lastonline.desc() ).paginate( page = PageNumber, per_page = 15, error_out = False ) + else: + flash('Invalid search query.', 'danger') + + if UserLookupResults is None: + UserLookupResults = User.query.filter_by( accountstatus = 1 ).order_by( User.lastonline.desc() ).paginate( page = PageNumber, per_page = 15, error_out = False ) + SearchQuery = None + + def _get_timeago_time( userObj : User ) -> str: + return timeago.format( userObj.lastonline, datetime.utcnow() ) + def _is_in_game( userObj : User ) -> bool: + return PlaceServerPlayer.query.filter_by( userid = userObj.id ).first() is not None + + return render_template('users/index.html', UserLookupResults = UserLookupResults, SearchQuery = SearchQuery, MinOnlineTime = datetime.utcnow() - timedelta( minutes = 1 ), GetTimeAgoTime = _get_timeago_time, IsInGame = _is_in_game) + +@users_page.route('/users', methods=['POST']) +@auth.authenticated_required +def index_page_post(): + return redirect( url_for( 'users_page.index_page', q = request.form.get('q', default = None, type = str) ) ) \ No newline at end of file diff --git a/app/routes/accountsettingsapi.py b/app/routes/accountsettingsapi.py new file mode 100644 index 0000000..6868c3c --- /dev/null +++ b/app/routes/accountsettingsapi.py @@ -0,0 +1,70 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from app.util import auth +from app.extensions import db, csrf, limiter +from flask_wtf.csrf import CSRFError, generate_csrf + +from app.models.user_email import UserEmail +from app.models.user import User + +AccountSettingsAPIRoute = Blueprint('accountsettingsapi', __name__, url_prefix='/') + +csrf.exempt(AccountSettingsAPIRoute) +@AccountSettingsAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@AccountSettingsAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@AccountSettingsAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@AccountSettingsAPIRoute.route("/v1/email", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_email_status(): + AuthenticatedUser : User = auth.GetCurrentUser() + UserEmailObject : UserEmail = UserEmail.query.filter_by(user_id=AuthenticatedUser.id).first() + + HiddenEmail = None + if UserEmailObject: + emailParts = UserEmailObject.email.split("@") + FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1) + SecondPart = emailParts[1] + HiddenEmail = FirstPart + "@" + SecondPart + + return jsonify({ + "emailAddress": HiddenEmail, + "verified": UserEmailObject.verified if UserEmailObject else False, + "canBypassPasswordForEmailUpdate": True + }) + +@AccountSettingsAPIRoute.route("/v1/themes//", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_consumer_theme( consumerType : str, consumerId : int ): + return jsonify({ + "themeType": "Dark" + }) + diff --git a/app/routes/asset.py b/app/routes/asset.py new file mode 100644 index 0000000..11d8ce5 --- /dev/null +++ b/app/routes/asset.py @@ -0,0 +1,1147 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from config import Config +import requests +import hashlib +import os +import random +import logging +import json +import time +from datetime import datetime +from app.util import auth, websiteFeatures, assetversion, redislock, s3helper, RBXMesh +from app.enums.AssetType import AssetType +from app.extensions import db, redis_controller, get_remote_address, csrf + +from app.models.asset import Asset +from app.models.asset_version import AssetVersion + +from app.models.user import User +from app.models.user_avatar import UserAvatar +from app.models.place import Place +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.models.user_avatar_asset import UserAvatarAsset +from app.routes.thumbnailer import TakeThumbnail +from app.models.gameservers import GameServer +from app.models.package_asset import PackageAsset + +config = Config() +AssetRoute = Blueprint('asset', __name__, url_prefix='/') + +if config.USE_LOCAL_STORAGE: + if not os.path.exists(config.AWS_S3_DOWNLOAD_CACHE_DIR): + os.makedirs(config.AWS_S3_DOWNLOAD_CACHE_DIR) + @AssetRoute.route("/cdn_local/", methods=["GET"]) + def LocalCDN(filehash): + if not os.path.exists(config.AWS_S3_DOWNLOAD_CACHE_DIR + "/" + filehash): + return abort(404) + with open(config.AWS_S3_DOWNLOAD_CACHE_DIR + "/" + filehash, "rb") as f: + FileContents = f.read() + resp = make_response(FileContents,200) + resp.headers['Content-Type'] = 'application/octet-stream' + return resp + +# Special Route used for rendering clothing +@AssetRoute.route('/Asset/SpecialCharacterFetch', methods=['GET']) +def specialCharacterFetch(): + assetId = request.args.get('assetId') + if assetId is None: + return 'Invalid request',400 + assetObj : Asset = Asset.query.filter_by(id=assetId).first() + if assetObj is None: + return 'Invalid request',400 + if assetObj.asset_type == AssetType.Package: + # Get the package assets + packageAssets : list[PackageAsset] = PackageAsset.query.filter_by(package_asset_id=assetObj.id).all() + FinalAvatarData = f"{config.BaseURL}/Asset/BodyColors.ashx?userId=0;" + for packageAsset in packageAssets: + FinalAvatarData += f"{config.BaseURL}/Asset/?id={str(packageAsset.asset_id)};" + return FinalAvatarData,200 + + return f"{config.BaseURL}/Asset/BodyColors.ashx?userId=0;{config.BaseURL}/Asset/?id={str(assetId)}",200 + +@AssetRoute.route('/Asset/CharacterFetch.ashx', methods=['GET']) +def characterFetch(): + userId = request.args.get('userId', default=5973, type=int) + if userId is None: + userId = 5973 + isLegacy = request.args.get('legacy', default=None, type=int) == 1 + + user = User.query.filter_by(id=userId).first() + if user is None: + return 'https://www.syntax.eco/Asset/BodyColors.ashx?userId=5973;https://www.syntax.eco/Asset/?id=23882;https://www.syntax.eco/Asset/?id=28253;',200 + serverPlaceId = request.args.get('serverplaceid', default=None, type=int) + + avatar = UserAvatar.query.filter_by(user_id=userId).first() + if avatar is None: + avatar = UserAvatar(user_id=userId) + db.session.add(avatar) + db.session.commit() + + avatarAssets = UserAvatarAsset.query.filter_by(user_id=userId).all() + + FinalAvatarData = f"{config.BaseURL}/Asset/BodyColors.ashx?userId={str(userId)};" + for avatarAsset in avatarAssets: + asset : Asset = Asset.query.filter_by(id=avatarAsset.asset_id).first() + if asset is None: + continue + if asset.moderation_status != 0: + continue + if asset.asset_type == AssetType.Gear and (serverPlaceId is not None or isLegacy): + continue # Gears are not allowed in games for now + + if not isLegacy or asset.asset_type not in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Head, AssetType.Hat, AssetType.HairAccessory, AssetType.FaceAccessory, AssetType.NeckAccessory, AssetType.ShoulderAccessory, AssetType.FrontAccessory, AssetType.BackAccessory, AssetType.WaistAccessory, AssetType.Gear, AssetType.Face]: + FinalAvatarData += f"{config.BaseURL}/Asset/?id={str(asset.id)};" + else: + FinalAvatarData += f"{config.BaseURL}/Asset/legacy/?id={str(asset.id)};" + + return FinalAvatarData,200 + +@AssetRoute.route('/Asset/BodyColors.ashx', methods=['GET']) +def bodyColors(): + userId = request.args.get('userId') + if userId is None: + return 'Invalid request',400 + + user = User.query.filter_by(id=userId).first() + if user is None: + if userId == '0': + resp = make_response(f""" + null + nil + + + 1001 + 1001 + 1001 + Body Colors + 1001 + 1001 + 1001 + true + + + + """,200) + resp.headers['Content-Type'] = 'text/xml' + return resp + return 'Invalid request',400 + + avatar : UserAvatar = UserAvatar.query.filter_by(user_id=userId).first() + if avatar is None: + return 'Invalid request',400 + + resp = make_response(f""" + null + nil + + + {str(avatar.head_color_id)} + {str(avatar.left_arm_color_id)} + {str(avatar.left_leg_color_id)} + Body Colors + {str(avatar.right_arm_color_id)} + {str(avatar.right_leg_color_id)} + {str(avatar.torso_color_id)} + true + + + +""",200) + resp.headers['Content-Type'] = 'text/xml' + return resp + +@AssetRoute.route('/v1.1/avatar-fetch/custom', methods=['GET']) +def AvatarFetchCustom(): + assetId = request.args.get('assetId') + if assetId is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + assetObj : Asset = Asset.query.filter_by(id=assetId).first() + if assetObj is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + AvatarAssetsList = [] + if assetObj.asset_type == AssetType.Package: + # Get the package assets + packageAssets : list[PackageAsset] = PackageAsset.query.filter_by(package_asset_id=assetObj.id).all() + for packageAsset in packageAssets: + AvatarAssetsList.append(packageAsset.asset_id) + else: + AvatarAssetsList.append(assetObj.id) + return jsonify({ + "resolvedAvatarType": "R6", + "accessoryVersionIds": AvatarAssetsList, + "equippedGearVersionIds": [], + "backpackGearVersionIds": [], + "bodyColors": { + "HeadColor": 1001, + "LeftArmColor": 1001, + "LeftLegColor": 1001, + "RightArmColor": 1001, + "RightLegColor": 1001, + "TorsoColor": 1001 + }, + "animations": {}, + "scales": { + "height": 1, + "width": 1, + "head": 1, + "depth": 1, + "proportion": 0, + "bodyType": 0 + } + }) +@AssetRoute.route('/v1/avatar-fetch/', methods=["GET"]) +def AvatarFetchV1(): + UserId = request.args.get('userId', None, int) + PlaceId = request.args.get('placeId', None, int) + if UserId is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + if PlaceId is not None and PlaceId <= 0: + PlaceId = None + + UserObj : User = User.query.filter_by(id=UserId).first() + if UserObj is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + PlayerAvatar : UserAvatar = UserAvatar.query.filter_by(user_id=UserId).first() + AvatarAssets : list[UserAvatarAsset] = UserAvatarAsset.query.filter_by(user_id=UserId).all() + assetAndAssetTypeIds : list = [] + equippedGearVersionIds : list = [] + AvatarAssetsList : list = [] + + for AvatarAsset in AvatarAssets: + if AvatarAsset.asset.asset_type == AssetType.Gear and PlaceId is not None: + continue + if AvatarAsset.asset.moderation_status != 0: + continue + if AvatarAsset.asset.asset_type == AssetType.Gear: + equippedGearVersionIds.append(AvatarAsset.asset_id) + continue + AvatarAssetsList.append(AvatarAsset.asset_id) + assetAndAssetTypeIds.append({ + "assetId": AvatarAsset.asset_id, + "assetTypeId": AvatarAsset.asset.asset_type.value + }) + resolvedAvatarType = "R6" if not PlayerAvatar.r15 else "R15" + if PlaceId is not None: + PlaceObj : Place = Place.query.filter_by(placeid = PlaceId).first() + if PlaceObj is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + if PlaceObj.rig_choice == PlaceRigChoice.ForceR6: + resolvedAvatarType = "R6" + elif PlaceObj.rig_choice == PlaceRigChoice.ForceR15: + resolvedAvatarType = "R15" + + return jsonify({ + "resolvedAvatarType": resolvedAvatarType, + "equippedGearVersionIds": equippedGearVersionIds, + "backpackGearVersionIds": equippedGearVersionIds, + "accessoryVersionIds": AvatarAssetsList, + "assetAndAssetTypeIds": assetAndAssetTypeIds, + "bodyColors": { + "headColorId": PlayerAvatar.head_color_id, + "leftArmColorId": PlayerAvatar.left_arm_color_id, + "leftLegColorId": PlayerAvatar.left_leg_color_id, + "rightArmColorId": PlayerAvatar.right_arm_color_id, + "rightLegColorId": PlayerAvatar.right_leg_color_id, + "torsoColorId": PlayerAvatar.torso_color_id, + + "HeadColor": PlayerAvatar.head_color_id, + "LeftArmColor": PlayerAvatar.left_arm_color_id, + "LeftLegColor": PlayerAvatar.left_leg_color_id, + "RightArmColor": PlayerAvatar.right_arm_color_id, + "RightLegColor": PlayerAvatar.right_leg_color_id, + "TorsoColor": PlayerAvatar.torso_color_id + }, + "animationAssetIds": {}, + "scales": { + "height": PlayerAvatar.height_scale, + "width": PlayerAvatar.width_scale, + "head": PlayerAvatar.head_scale, + "depth": 1, + "proportion": PlayerAvatar.proportion_scale, + "bodyType": PlayerAvatar.body_type_scale, + + "Height": PlayerAvatar.height_scale, + "Width": PlayerAvatar.width_scale, + "Head": PlayerAvatar.head_scale, + "Depth": 1, + "Proportion": PlayerAvatar.proportion_scale, + "BodyType": PlayerAvatar.body_type_scale + }, + "emotes": [] + }) + + +@AssetRoute.route('/v1.1/avatar-fetch/', methods=["GET"]) +def AvatarFetch(): + UserId = request.args.get('userId', None, int) + PlaceId = request.args.get('placeId', None, int) + if UserId is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + if PlaceId is not None and PlaceId <= 0: + PlaceId = None + + UserObj : User = User.query.filter_by(id=UserId).first() + if UserObj is None: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + PlayerAvatar : UserAvatar = UserAvatar.query.filter_by(user_id=UserId).first() + AvatarAssets : list[UserAvatarAsset] = UserAvatarAsset.query.filter_by(user_id=UserId).all() + AvatarAssetsList : list = [] + AvatarGearsList : list = [] + assetAndAssetTypeIds : list = [] + for AvatarAsset in AvatarAssets: + if AvatarAsset.asset.asset_type == AssetType.Gear and PlaceId is not None: + continue + if AvatarAsset.asset.moderation_status != 0: + continue + if AvatarAsset.asset.asset_type == AssetType.Gear: + AvatarGearsList.append(AvatarAsset.asset_id) + continue + AvatarAssetsList.append(AvatarAsset.asset_id) + assetAndAssetTypeIds.append({ + "assetId": AvatarAsset.asset_id, + "assetTypeId": AvatarAsset.asset.asset_type.value + }) + + avatarTypeOverwrite = None + if PlaceId is not None: + PlaceObj : Place = Place.query.filter_by(placeid = PlaceId).first() + if PlaceObj is not None: + if PlaceObj.rig_choice == PlaceRigChoice.ForceR6: + avatarTypeOverwrite = "R6" + elif PlaceObj.rig_choice == PlaceRigChoice.ForceR15: + avatarTypeOverwrite = "R15" + + return jsonify({ + "resolvedAvatarType": avatarTypeOverwrite if avatarTypeOverwrite is not None else ( "R6" if not PlayerAvatar.r15 else "R15" ), + "accessoryVersionIds": AvatarAssetsList, + "equippedGearVersionIds": AvatarGearsList, + "backpackGearVersionIds": AvatarGearsList, + "assetAndAssetTypeIds": assetAndAssetTypeIds, + "bodyColors": { + "HeadColor": PlayerAvatar.head_color_id, + "LeftArmColor": PlayerAvatar.left_arm_color_id, + "LeftLegColor": PlayerAvatar.left_leg_color_id, + "RightArmColor": PlayerAvatar.right_arm_color_id, + "RightLegColor": PlayerAvatar.right_leg_color_id, + "TorsoColor": PlayerAvatar.torso_color_id, + + "headColorId": PlayerAvatar.head_color_id, + "leftArmColorId": PlayerAvatar.left_arm_color_id, + "leftLegColorId": PlayerAvatar.left_leg_color_id, + "rightArmColorId": PlayerAvatar.right_arm_color_id, + "rightLegColorId": PlayerAvatar.right_leg_color_id, + "torsoColorId": PlayerAvatar.torso_color_id + }, + "animations": {}, + "scales": { + "Height": PlayerAvatar.height_scale, + "Width": PlayerAvatar.width_scale, + "Head": PlayerAvatar.head_scale, + "Depth": 1, + "Proportion": PlayerAvatar.proportion_scale, + "BodyType": PlayerAvatar.body_type_scale + }, + "bodyColorsUrl": f"{config.BaseURL}/Asset/BodyColors.ashx?userId={str(UserId)}", + "emotes": [] + }) + +class InvalidAssetHashException(Exception): + """Raised when the asset hash is invalid""" + pass + +def CreateFakeAsset( AssetName = "Temporary Asset", Expiration = 600, AssetFileHash = "" ) -> int: + """ + Creates a fake asset in redis and returns a temporary asset id + """ + if AssetFileHash == "": + raise InvalidAssetHashException("AssetFileHash cannot be empty") + TemporaryAssetId : int = random.randint(1000000000,9999999999) + redis_controller.set(f"temp_asset:{str(TemporaryAssetId)}", json.dumps({ + "name": AssetName, + "hash": AssetFileHash + }), ex=Expiration) + return TemporaryAssetId + +class RatelimittedReachedException(Exception): + """Raised when the ratelimit has been reached from the roblox api""" + pass +class AssetNotFoundException(Exception): + """Raised when the asset has not been found""" + pass +class AssetNotAllowedException(Exception): + """Raised when the asset is not allowed to be migrated""" + pass + +def GetRandomProxy(): + """ + Gets a random proxy from the proxy set in redis + """ + ProxyList = list(redis_controller.smembers("assetmigrator_proxies")) + if len(ProxyList) == 0: + return None + return f"http://{random.choice(ProxyList)}" + +def GetOriginalAssetInfo(assetId, throwException = False, attempt = 0): + """ + Gets the original asset info from the roblox api + """ + try: + if redis_controller.get(f"FetchAssetInfo_v2:EconomyAPI:{str(assetId)}:Blocked") is not None: + if throwException: + raise AssetNotAllowedException("The asset is not allowed to be migrated") + return None + if redis_controller.get(f"FetchAssetInfo:EconomyAPI:{str(assetId)}") is not None: + return json.loads(redis_controller.get(f"FetchAssetInfo:EconomyAPI:{str(assetId)}")) + if config.ASSETMIGRATOR_USE_PROXIES: + assignedProxy = GetRandomProxy() + if assignedProxy is not None: + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details", + proxies = { + "http": assignedProxy, + "https": assignedProxy + } + ) + else: + logging.warning("No proxies available, using default ip") + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details" + ) + else: + assetInfoReq = requests.get( + f"https://economy.roblox.com/v2/assets/{str(assetId)}/details" + ) + if assetInfoReq.status_code != 200: + if assetInfoReq.status_code == 429: + if attempt < 2: + time.sleep(1) + return GetOriginalAssetInfo(assetId, attempt=attempt+1, throwException=throwException) + else: + if throwException: + raise RatelimittedReachedException("The ratelimit has been reached") + else: + return None + elif assetInfoReq.status_code == 400: + redis_controller.set(f"FetchAssetInfo_v2:EconomyAPI:{str(assetId)}:Blocked", "true", ex=60 * 60 * 24 * 7) + if throwException: + raise AssetNotFoundException("The asset has not been found") + return None + except: + return None + assetInfo = assetInfoReq.json() + redis_controller.set(f"FetchAssetInfo:EconomyAPI:{str(assetId)}", json.dumps(assetInfo), ex=60 * 60 * 24 * 7) # Cache this information for 7 days since it's most likely not going to change + return assetInfo + +class NoPermissionException(Exception): + """Raised when Roblox does not allow us to download the asset""" + pass +class AssetDeliveryAPIFailedException(Exception): + """Raised when the asset delivery api fails""" + pass +class AssetOnCooldownException(Exception): + """Raised when the asset was recently attempted to be migrated but failed""" + pass +class EconomyAPIFailedException(Exception): + """Raised when the economy api fails""" + pass +class CatalogAPIFailedException(Exception): + """Raised when the catalog api fails""" + pass + +def GetBundleInformation( bundleId : int ) -> dict: + """ + Gets the bundle information from the catalog api + """ + if redis_controller.get(f"FetchBundleInfo_v2:CatalogAPI:{str(bundleId)}") is not None: + return json.loads(redis_controller.get(f"FetchBundleInfo_v2:CatalogAPI:{str(bundleId)}")) + bundleInfoReq = requests.get(f"https://catalog.roblox.com/v1/bundles/{str(bundleId)}/details") + if bundleInfoReq.status_code != 200: + if bundleInfoReq.status_code == 429: + raise RatelimittedReachedException("The ratelimit has been reached") + elif bundleInfoReq.status_code == 400: + raise AssetNotFoundException("The asset has not been found") + raise CatalogAPIFailedException(f"The catalog api failed with status code {str(bundleInfoReq.status_code)}") + bundleInfo = bundleInfoReq.json() + redis_controller.set(f"FetchBundleInfo_v2:CatalogAPI:{str(bundleId)}", json.dumps(bundleInfo), ex=60 * 60 * 24 * 7) # Cache this information for 7 days since it's most likely not going to change + return bundleInfo + +class MigrateBundleException(Exception): + """Raised when the bundle migration fails""" + pass +class PackageLinkAlreadyExistsException(Exception): + """Raised when the package link already exists""" + pass + +def MigrateBundle( bundleId : int ) -> Asset: + """ + Migrates a bundle from Roblox + """ + bundleInfo : dict = GetBundleInformation(bundleId) + + AllAssets : list[int] = [] + for item in bundleInfo["items"]: + if item["type"] != "Asset": + continue + AllAssets.append(item["id"]) + + MigratedAssets : list[Asset] = [] + # Migrate all the assets first before we create the package asset + for assetId in AllAssets: + try: + assetObj : Asset = migrateAsset( + assetid = assetId, + forceMigration = True, + keepRobloxId = False, + throwException = True, + assetVersionId=1, + creatorId=1 + ) + MigratedAssets.append(assetObj) + # Check if the package link already exists + if PackageAsset.query.filter_by(asset_id=assetObj.id).first() is not None: + raise PackageLinkAlreadyExistsException("The package link already exists") + + except RatelimittedReachedException: + # We should try again + time.sleep(1) + return MigrateBundle(bundleId) + except AssetNotFoundException: + # This shouldnt happen + pass + except AssetNotAllowedException: + # This shouldnt happen + pass + except NoPermissionException: + # This shouldnt happen + pass + except AssetDeliveryAPIFailedException: + # We should try again + time.sleep(1) + return MigrateBundle(bundleId) + except Exception as e: + logging.error(f"Failed to migrate asset {str(assetId)}, error: {str(e)}") + raise MigrateBundleException(f"Failed to migrate asset {str(assetId)}, error: {str(e)}") + + # Create the package asset + NewPackageAsset : Asset = Asset( + name = bundleInfo["name"], + description = bundleInfo["description"], + asset_type = AssetType.Package, + moderation_status = 0, + creator_id = 1, + ) + db.session.add(NewPackageAsset) + db.session.commit() + + # Get the sha512 of the package assets ids and create a new asset version + Content = "" + for asset in MigratedAssets: + Content += str(asset.id) + Content += str(NewPackageAsset.id) + + NewPackageAssetHash = hashlib.sha512(Content.encode("utf-8")).hexdigest() + assetversion.CreateNewAssetVersion(NewPackageAsset, NewPackageAssetHash) + + # Create the package link + for asset in MigratedAssets: + PackageLink = PackageAsset( + asset_id = asset.id, + package_asset_id = NewPackageAsset.id + ) + db.session.add(PackageLink) + db.session.commit() + TakeThumbnail(NewPackageAsset.id) + + return NewPackageAsset + + +def AddAssetToMigrationQueue( assetId : int, bypassQueueLimit : bool = False ) -> bool: + """ + Adds an asset to the migration queue so it can be migrated later + """ + if redis_controller.get(f"asset_migrate_v2:{str(assetId)}:blocked") is not None: + return False + if not bypassQueueLimit: + if redis_controller.llen("migrate_assets_queue") >= 900: + return False + # Make sure the asset is not already in the queue + if redis_controller.lrange("migrate_assets_queue", 0, -1).count(str(assetId)) > 0: + return False + + redis_controller.rpush("migrate_assets_queue", str(assetId)) + return True + +def AddAudioAssetToAudioMigrationQueue( assetId : int, bypassQueueLimit : bool = False, placeId : int = -1 ) -> bool: + """ + Adds an audio asset to the migration queue so it can be migrated later + """ + if placeId < 0: + raise Exception("Invalid place id") + + if not bypassQueueLimit: + if redis_controller.llen("migrate_audio_assets_queue") >= 900: + return False + # Make sure the asset is not already in the queue + if redis_controller.lrange("migrate_audio_assets_queue", 0, -1).count(str(assetId)) > 0: + return False + + redis_controller.rpush("migrate_audio_assets_queue", str(assetId)) + redis_controller.set(f"audio_asset:{str(assetId)}:placeid", str(placeId), ex=60 * 60 * 24 * 7) + + return True + + +def getAudioData_V2( assetId : int, placeId : int = None ) -> bytes: + if placeId is None: + placeId = 1818 + + RequestSession : requests.Session = requests.Session() + RequestSession.headers.update({ + "User-Agent": "Roblox/WinInet", + "Accept": "*/*", + "Roblox-Browser-Asset-Request": "false", + "Roblox-Place-Id": str(placeId) + }) + RequestSession.cookies.update({ + ".ROBLOSECURITY": config.ASSETMIGRATOR_ROBLOSECURITY + }) + + try: + AssetFetchReq : requests.Response = RequestSession.get( + url = f"https://assetdelivery.roblox.com/v1/asset/?id={str(assetId)}" + ) + except Exception as e: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, error: {str(e)}") + + if AssetFetchReq.status_code != 200: + if AssetFetchReq.status_code == 429: + raise RatelimittedReachedException("The ratelimit has been reached") + if AssetFetchReq.status_code == 403: + raise NoPermissionException(f"Forbidden from downloading asset {str(assetId)}, status code: {str(AssetFetchReq.status_code)}") + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, status code: {str(AssetFetchReq.status_code)}") + + return AssetFetchReq.content + +def getAudioData( assetId : int, placeid : int = None ) -> bytes: + """ + [ DEPRECATED ] ( Please use getAudioData_V2 ) + Downloads the sound data from roblox assetdelivery api + """ + + if placeid is None: + placeid = findPlaceId(assetId) + + RequestSession : requests.Session = requests.Session() + RequestSession.headers.update({ + "User-Agent": "Roblox/WinInet", + "Accept": "*/*", + "Roblox-Browser-Asset-Request": "false", + "Roblox-Place-Id": str(placeid) + }) + RequestSession.cookies.update({ + ".ROBLOSECURITY": config.ASSETMIGRATOR_ROBLOSECURITY + }) + + JSONPayload = [{ + "assetId": assetId, + "assetType": "Audio", + "requestId": "0" + }] + + try: + AssetFetchReq : requests.Response = RequestSession.post( + f"https://assetdelivery.roblox.com/v2/assets/batch", + json = JSONPayload # We can't use proxies on this since Roblox deletes cookies when using a different continent + ) + except Exception as e: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, error: {str(e)}") + if AssetFetchReq.status_code != 200: + if AssetFetchReq.status_code == 429: + raise RatelimittedReachedException("The ratelimit has been reached") + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, status code: {str(AssetFetchReq.status_code)}") + AssetLocations = AssetFetchReq.json() + if not AssetLocations or len(AssetLocations) == 0: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, no locations found") + RequestObj : dict = AssetLocations[0] + if RequestObj.get("locations") and RequestObj["locations"][0].get("location"): + AudioURL = RequestObj["locations"][0]["location"] + else: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, no locations found") + + try: + AssetCDNFetchReq : requests.Response = RequestSession.get(AudioURL) + except Exception as e: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, error: {str(e)}") + if AssetCDNFetchReq.status_code != 200: + raise AssetDeliveryAPIFailedException(f"Failed to fetch asset {str(assetId)}, status code: {str(AssetCDNFetchReq.status_code)}") + + return AssetCDNFetchReq.content + +def findPlaceId( assetId : int ) -> int: + """ + Finds a place which belongs to the asset creator so we can download the asset + """ + assetInfo = GetOriginalAssetInfo(assetId, throwException=True) + CreatorId = assetInfo["Creator"]["Id"] + CreatorType = assetInfo["Creator"]["CreatorType"] + if CreatorType == "User": + # Find a place which belongs to the user + PlaceInfo = requests.get(f"https://games.roblox.com/v2/users/{str(CreatorId)}/games") + if PlaceInfo.status_code != 200: + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator, status code: {str(PlaceInfo.status_code)}") + PlaceInfo = PlaceInfo.json() + for Place in PlaceInfo["data"]: + return Place["rootPlace"]["id"] + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator") + elif CreatorType == "Group": + # Find a place which belongs to the group + PlaceInfo = requests.get(f"https://games.roblox.com/v2/groups/{str(CreatorId)}/gamesV2") + if PlaceInfo.status_code != 200: + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator, status code: {str(PlaceInfo.status_code)}") + PlaceInfo = PlaceInfo.json() + for Place in PlaceInfo["data"]: + return Place["rootPlace"]["id"] + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator") + else: + raise AssetNotFoundException(f"Failed to find a place which belongs to the asset creator") + +def migrateAsset( assetid : int, forceMigration : bool = False, allowedTypes = [1,3,4,5,10,13,24,39,40,50,51,52,53,54,55,56], creatorId : int = 2, keepRobloxId : bool = True, migrateInfo : bool = True, attempt : int = 0, throwException : bool = False, allowBackgroundMigration : bool = False, assetVersionId : int = None, bypassCooldown : bool = False, attemptSoundWithPlaceId : int = -1 ) -> Asset: + asset = Asset.query.filter_by(id=assetid).first() + if asset is not None: + return asset + if redis_controller.get(f"asset_migrate_v2:{str(assetid)}:blocked") is not None and not bypassCooldown: + if throwException: + raise AssetOnCooldownException("Asset is on cooldown") + return None + + try: + assetInfo = GetOriginalAssetInfo(assetid, throwException=True) + except RatelimittedReachedException: + if allowBackgroundMigration: + AddAssetToMigrationQueue(assetid) + if throwException: + raise RatelimittedReachedException("The ratelimit has been reached") + return None + except AssetNotFoundException: + if throwException: + raise AssetNotFoundException("The asset has not been found") + return None + except AssetNotAllowedException: + if throwException: + raise AssetNotAllowedException("The asset is not allowed to be migrated") + return None + if assetInfo is None: + if allowBackgroundMigration: + AddAssetToMigrationQueue(assetid) + if throwException: + raise EconomyAPIFailedException("Failed to get asset information") + return None + + if assetInfo['AssetTypeId'] not in allowedTypes and not forceMigration: + if throwException: + raise AssetNotAllowedException("Asset is not allowed to be migrated") + return None + + if assetInfo['AssetTypeId'] == 3: + if attemptSoundWithPlaceId == -1: + try: + robloxAsset = requests.get(f"https://api.hyra.io/audio/{str(assetid)}") + except: + if throwException: + raise AssetDeliveryAPIFailedException("Failed to get asset from hyra") + return None + if robloxAsset.status_code != 200: + if robloxAsset.status_code != 429: + redis_controller.setex(f"asset_migrate_v2:{str(assetid)}:blocked", 60 * 60 * 24, "true") + if throwException: + raise NoPermissionException("Roblox does not allow us to download this asset") + return None + #logging.error(f"Failed to download asset {assetid}") + if allowBackgroundMigration: + AddAssetToMigrationQueue(assetid) + if throwException: + raise RatelimittedReachedException("Rate limit reached") + return None + else: + # We got the asset from hyra, it should return a mp3 file in bytes + robloxAssetContent = robloxAsset.content + asset = Asset(roblox_asset_id=assetid, force_asset_id=assetid, creator_id=creatorId,asset_type=AssetType.Audio, name=f"Asset {assetid}", description="Migrated from Roblox", asset_genre=1, moderation_status=0, created_at=datetime.utcnow(), updated_at=datetime.utcnow()) + db.session.add(asset) + try: + db.session.commit() + except: + # Race condition, lets try again + return migrateAsset(assetid, forceMigration, allowedTypes, creatorId, keepRobloxId, migrateInfo, attempt+1, throwException, allowBackgroundMigration, assetVersionId) + + ContentHash = hashlib.sha512(robloxAssetContent).hexdigest() + s3helper.UploadBytesToS3(robloxAssetContent, ContentHash) + assetVersion = assetversion.CreateNewAssetVersion(asset, ContentHash) + TakeThumbnail(asset.id) + return asset + else: + try: + robloxAssetContent = getAudioData_V2(assetid, attemptSoundWithPlaceId) + except RatelimittedReachedException: + if throwException: + raise RatelimittedReachedException("The ratelimit has been reached") + return None + except Exception as e: + if throwException: + raise e + return None + + asset = Asset(roblox_asset_id=assetid, force_asset_id=assetid, creator_id=creatorId,asset_type=AssetType.Audio, name=f"Asset {assetid}", description="Migrated from Roblox", asset_genre=1, moderation_status=0, created_at=datetime.utcnow(), updated_at=datetime.utcnow()) + db.session.add(asset) + try: + db.session.commit() + except: + return migrateAsset(assetid, forceMigration, allowedTypes, creatorId, keepRobloxId, migrateInfo, attempt+1, throwException, allowBackgroundMigration, assetVersionId, bypassCooldown, attemptSoundWithPlaceId) + + ContentHash = hashlib.sha512(robloxAssetContent).hexdigest() + s3helper.UploadBytesToS3(robloxAssetContent, ContentHash) + assetVersion = assetversion.CreateNewAssetVersion(asset, ContentHash) + TakeThumbnail(asset.id) + + return asset + + try: + if assetVersionId != None: + robloxAssetContent = requests.get(f"https://assetdelivery.roblox.com/v1/asset/?id={str(assetid)}&version={str(assetVersionId)}", timeout=5) + else: + robloxAssetContent = requests.get(f"https://assetdelivery.roblox.com/v1/asset/?id={str(assetid)}", timeout=5) + if robloxAssetContent.status_code != 200: + if robloxAssetContent.status_code == 409: + redis_controller.set(f"asset_migrate_v2:{str(assetid)}:blocked", "true", ex=3600 * 7) + if throwException: + raise NoPermissionException("Roblox does not allow us to download this asset") + return None + elif robloxAssetContent.status_code == 429: + if allowBackgroundMigration: + AddAssetToMigrationQueue(assetid) + logging.error(f"Failed to download asset {assetid} after 2 attempts for rate limiting") + if throwException: + raise RatelimittedReachedException("Rate limit reached") + return None + #logging.error(f"Failed to download asset {assetid}") + return None + except: + # rbxcdn is prob down + #logging.error(f"Failed to download asset {assetid}") + if throwException: + raise AssetDeliveryAPIFailedException("Asset delivery api failed") + return None + + try: + robloxAssetContent = robloxAssetContent.content + robloxAssetContent = robloxAssetContent.replace("roblox.com".encode("utf-8"), config.BaseDomain.encode("utf-8")) + except: + # Means that the file is not an rbxmx or rbxm file + robloxAssetContent = robloxAssetContent.content + + if assetInfo['AssetTypeId'] == 4: + originalAssetContent = robloxAssetContent + try: + if RBXMesh.get_mesh_version(robloxAssetContent) not in [2.0]: + meshData : RBXMesh.FileMeshData = RBXMesh.read_mesh_data(robloxAssetContent) + robloxAssetContent = RBXMesh.export_mesh_v2(meshData) + except Exception as e: + logging.warning(f"Failed to downgrade mesh {str(assetid)}, error: {str(e)}") + robloxAssetContent = originalAssetContent + + AssetName = "Asset " + str(assetid) + AssetDescription = "Migrated from Roblox" + if migrateInfo: + if assetInfo is not None: + AssetName = assetInfo['Name'] + AssetDescription = assetInfo['Description'] + else: + logging.warning(f"Failed to get asset info for {assetid}") + if keepRobloxId: + asset = Asset(roblox_asset_id=assetid, force_asset_id=assetid, asset_type=AssetType(assetInfo['AssetTypeId']), name=AssetName, description=AssetDescription, asset_genre=1, moderation_status=0, created_at=datetime.utcnow(), updated_at=datetime.utcnow(), creator_id=creatorId) + else: + asset = Asset(roblox_asset_id=assetid, asset_type=AssetType(assetInfo['AssetTypeId']), name=AssetName, description=AssetDescription, asset_genre=1, moderation_status=0, created_at=datetime.utcnow(), updated_at=datetime.utcnow(), creator_id=creatorId) + db.session.add(asset) + try: + db.session.commit() + except: + # Race condition, lets try again + return migrateAsset(assetid, forceMigration) + + + ContentHash = hashlib.sha512(robloxAssetContent).hexdigest() + s3helper.UploadBytesToS3(robloxAssetContent, ContentHash) + + assetVersion = AssetVersion(asset_id=asset.id, content_hash=ContentHash, created_at=datetime.utcnow(), version=1) + db.session.add(assetVersion) + db.session.commit() + return asset +import uuid + +def GenerateTempAuthToken( AssetId : int, Expiration : int = 600, CreatorIP : str = None ) -> str: + """ + Generates a temporary auth token for downloading places from RCC + + :param AssetId: The asset id + :param Expiration: The expiration in seconds + :param CreatorIP: The ip of the creator + + :return: The auth token + """ + AuthToken = str(uuid.uuid4()) + redis_controller.setex(f"AssetTempAuthToken:{AuthToken}:{str(AssetId)}", time = Expiration, value = json.dumps({ + "CreatorIP" : CreatorIP + })) + return AuthToken + +def VerifyTempAuthToken( AuthToken : str, AssetId : int, RequesterIP : str = None ) -> bool: + """ + Verifies a temporary auth token for downloading places from RCC + + :param AuthToken: The auth token + :param AssetId: The asset id + :param RequesterIP: The ip of the requester + + :return: True if the auth token is valid, False if not + """ + + AuthTokenData = redis_controller.get(f"AssetTempAuthToken:{AuthToken}:{str(AssetId)}") + if AuthTokenData is None: + return False + AuthTokenData = json.loads(AuthTokenData) + if AuthTokenData['CreatorIP'] is not None: + if AuthTokenData['CreatorIP'] != RequesterIP: + return False + + redis_controller.delete(f"AssetTempAuthToken:{AuthToken}:{str(AssetId)}") + return True + +@AssetRoute.route("/v1/asset/", methods=["GET"]) +@AssetRoute.route("/v1/asset", methods=["GET"]) +@AssetRoute.route('/Asset', methods=['GET']) +@AssetRoute.route('/Asset/', methods=['GET']) +@AssetRoute.route('/asset/', methods=['GET']) +@AssetRoute.route('/asset', methods=['GET']) +def AssetHandler(): + id = request.args.get('id', type=int) or request.args.get("assetversionid", type=int, default=None) + if id is None: + return jsonify({'error':'Invalid request'}),400 + serverplaceid = request.args.get('serverplaceid', type=int, default=0) + isScriptInsert = request.args.get('scriptinsert', type=int, default=0) == 1 + isClientInsert = request.args.get('clientinsert', type=int, default=0) == 1 + + asset : Asset = Asset.query.filter_by(id=id).first() + if asset is None: + if id >= 1000000000 and id <= 9999999999: + # Could be a temporary asset + AssetInfo : str = redis_controller.get(f"temp_asset:{str(id)}") + if AssetInfo is not None: + AssetInfo = json.loads(AssetInfo) + return redirect(f"{config.CDN_URL}/{AssetInfo['hash']}") + + if redis_controller.get(f"asset_migrate_v2:{str(id)}:blocked") is not None: + return jsonify({'error':'Invalid request'}),400 + + MigrateAssetLockName = f"asset_migrate_v2:{str(id)}:lock" + MigrateLock = redislock.acquire_lock( lock_name = MigrateAssetLockName, acquire_timeout = 50, lock_timeout = 2 ) # Prevents multiple migrations at once which can happen when server and client loads assets at the same time + if MigrateLock is None: + return redirect(f"/asset/?id={str(id)}", code=301) + + if redis_controller.lrange("migrate_assets_queue", 0, -1).count(str(id)) > 0: + return jsonify({'error': 'Server is handling too many asset migrations at this time, try again later.'}),500 + + asset : Asset = Asset.query.filter_by(id=id).first() + if asset is None: + try: + asset = migrateAsset( + assetid = id, + forceMigration = False, + throwException = True, + allowBackgroundMigration = True + ) + except AssetDeliveryAPIFailedException: + return jsonify({'error': 'Failed to migrate asset from roblox'}),500 + except RatelimittedReachedException: + return jsonify({'error': 'Server is handling too many asset migrations at this time, try again later.'}),500 + except AssetNotAllowedException: + return jsonify({'error': 'This asset is not allowed to be migrated at this time'}),403 + except NoPermissionException: + return jsonify({'error': 'This asset is either a private or archived asset on Roblox and cannot be migrated'}),400 + except EconomyAPIFailedException: + return jsonify({'error': 'Failed to get information about this asset from Roblox'}),500 + except AssetOnCooldownException: + return jsonify({'error': 'This asset is either a private or archived asset on Roblox and cannot be migrated'}),400 + except AssetNotFoundException: + return jsonify({'error': 'This asset does not exist on Roblox'}),400 + except: + return jsonify({'error': 'Failed to migrate asset from roblox'}),500 + redislock.release_lock(MigrateAssetLockName, MigrateLock) + if asset is None: + return jsonify({'error':'Something went wrong!'}),500 + redislock.release_lock(MigrateAssetLockName, MigrateLock) + CacheNotAllowed = False + if asset.asset_type == AssetType.Place: + CacheNotAllowed = True + if isScriptInsert or isClientInsert: + return jsonify({'error':'You do not have permission to access this asset'}),403 + authToken = request.args.get('access', type=str, default=None) or request.cookies.get('Temp-Place-Access-Key', default="", type=str) + isValidToken = VerifyTempAuthToken(authToken, asset.id, get_remote_address()) or GameServer.query.filter_by(serverIP=get_remote_address(), accessKey=authToken).first() is not None + if not isValidToken: + AccessKey = request.headers.get("AccessKey", type=str, default="") + if AccessKey == "": + return jsonify({'error':'You do not have permission to access this asset'}),403 + if request.headers.get("User-Agent") != "Roblox/WinInet": + return jsonify({'error':'You do not have permission to access this asset'}),403 + ServerAddress = get_remote_address() + GameServerObj : GameServer = GameServer.query.filter_by(serverIP=ServerAddress).first() + if GameServerObj is None: + return jsonify({'error':'You do not have permission to access this asset'}),403 + if GameServerObj.accessKey != AccessKey: + return jsonify({'error':'You do not have permission to access this asset'}),403 + + if "UserRequest" in request.headers.get( key = "accesskey", default = "" ): + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + if asset.asset_type == AssetType.Gear and serverplaceid > 0: + return jsonify({'error':'Invalid request, Gears are not allowed in games'}),400 + + # Return the place + + if asset.moderation_status != 0: + CacheNotAllowed = True + # Request must be coming from a RCCService Server and not from client + # This allows for renders to still work but not for unmoderated content to be downloaded from the client + if request.headers.get("Requester") != "Server": + return jsonify({'error':'Invalid request'}),400 + + assetVersion : AssetVersion = AssetVersion.query.filter_by(asset_id=asset.id).order_by(AssetVersion.version.desc()).first() + if assetVersion is None: + return jsonify({'error':'Invalid request'}),400 + + Response = make_response(redirect(f"{config.CDN_URL}/{assetVersion.content_hash}")) + if CacheNotAllowed: + Response.headers['Cache-Control'] = 'no-store' + else: + Response.headers['Cache-Control'] = 'public, max-age=3600' + Response.status_code = 301 + return Response + +@AssetRoute.route("/v1/assets/batch/", methods=["POST"]) +@AssetRoute.route("/asset/batch/", methods=["POST"]) +@csrf.exempt +def AssetBatchRequest(): + RequestData = request.json + + if type(RequestData) is not list: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + if len(RequestData) > 100: + return jsonify({ + "success": False, + "error": "Invalid request" + }),400 + + AssetReturnInfo : list[dict] = [] + for RequestObj in RequestData: + if "assetId" not in RequestObj or "assetType" not in RequestObj or "requestId" not in RequestObj: + continue + AssetId = RequestObj["assetId"] + ExpectedAssetType = str(RequestObj["assetType"]) + + AssetObj : Asset = Asset.query.filter_by( id = AssetId ).first() + if AssetObj is None: + continue + if AssetObj.asset_type.name.lower() != ExpectedAssetType.lower(): + continue + if AssetObj.asset_type == AssetType.Place or AssetObj.moderation_status != 0: + continue + LatestAssetVersion : AssetVersion = assetversion.GetLatestAssetVersion( AssetObj ) + if LatestAssetVersion is None: + continue + AssetReturnInfo.append({ + "Location": f"{config.CDN_URL}/{LatestAssetVersion.content_hash}", + "RequestId": RequestObj["requestId"] + }) + + return jsonify(AssetReturnInfo), 200 + +@AssetRoute.route("/Asset/legacy/", methods=["GET"]) +def LegacyAssetSupport(): + AssetId = request.args.get('id', type=int, default=None) + if AssetId is None: + return jsonify({'error':'Invalid request'}),400 + AssetObj : Asset = Asset.query.filter_by(id=AssetId).first() + if AssetObj is None: + return jsonify({'error':'Invalid request'}),400 + + if AssetObj.asset_type not in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Head, AssetType.Hat, AssetType.HairAccessory, AssetType.FaceAccessory, AssetType.NeckAccessory, AssetType.ShoulderAccessory, AssetType.FrontAccessory, AssetType.BackAccessory, AssetType.WaistAccessory, AssetType.Gear, AssetType.Face]: + return redirect(f"/asset/?id={str(AssetId)}", code=301) + + if AssetObj.moderation_status != 0: + return jsonify({'error':'Invalid request'}),400 + + LatestAssetVersion : AssetVersion = assetversion.GetLatestAssetVersion( AssetObj ) + if LatestAssetVersion is None: + return jsonify({'error':'Invalid request'}),400 + + if redis_controller.exists(f"legacy_asset_migration_v3:{LatestAssetVersion.content_hash}"): + ConvertedContentHash = redis_controller.get(f"legacy_asset_migration_v3:{LatestAssetVersion.content_hash}") + return redirect(f"{config.CDN_URL}/{ConvertedContentHash}") + + AssetVersonContent : bytes = s3helper.GetFileFromS3( + LatestAssetVersion.content_hash, + skipDownloadCache = False + ) + + try: + AssetVersonContent.decode("utf-8") + except: + # Asset is not supported and could possibly crash 2014 + redis_controller.set(f"legacy_asset_migration_v3:{LatestAssetVersion.content_hash}", LatestAssetVersion.content_hash, ex=60 * 60 * 24 * 3) + return redirect(f"{config.CDN_URL}/{LatestAssetVersion.content_hash}") + + try: + AssetVersonContent = AssetVersonContent.replace("roblox.com".encode("utf-8"), config.BaseDomain.encode("utf-8")) + except: + pass + + if AssetObj.asset_type in [AssetType.Shirt, AssetType.TShirt, AssetType.Pants]: # Fix a mistake I made awhile ago with Shirts, TShirts and Pants where the asset content URL was https://syntax.eco/asset/?id= instead of http://www.syntax.eco/asset/?id= + AssetVersonContent = AssetVersonContent.replace("https://syntax.eco/asset/?id=".encode("utf-8"), "http://www.syntax.eco/asset/?id=".encode("utf-8")) + + if AssetObj.asset_type in [AssetType.Hat, AssetType.HairAccessory, AssetType.FaceAccessory, AssetType.NeckAccessory, AssetType.ShoulderAccessory, AssetType.FrontAccessory, AssetType.BackAccessory, AssetType.WaistAccessory]: + AssetVersonContent = AssetVersonContent.replace("Accessory".encode("utf-8"), "Hat".encode("utf-8")) # Shitty hack but I can't think of a better way to do it + + NewAssetHash = hashlib.sha512(AssetVersonContent).hexdigest() + s3helper.UploadBytesToS3(AssetVersonContent, NewAssetHash) + + redis_controller.set(f"legacy_asset_migration_v3:{LatestAssetVersion.content_hash}", NewAssetHash, ex=60 * 60 * 24 * 14) + return redirect(f"{config.CDN_URL}/{NewAssetHash}") diff --git a/app/routes/authentication.py b/app/routes/authentication.py new file mode 100644 index 0000000..157978d --- /dev/null +++ b/app/routes/authentication.py @@ -0,0 +1,216 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from config import Config +from app.models.user import User +from app.extensions import redis_controller, get_remote_address, csrf, limiter +from app.util import auth, websiteFeatures +import string +from datetime import datetime, timedelta +import random +import logging +from sqlalchemy import func +from app.pages.login.login import CreateLoginRecord + +config = Config() +AuthenticationRoute = Blueprint('authentication', __name__, url_prefix='/') + +@AuthenticationRoute.route('/Login/Negotiate.ashx', methods=['GET']) +def loginNegotiate(): + AuthenticationTicket = request.args.get( + key = 'suggest', + default = None, + type = str + ) + if AuthenticationTicket is None: + return 'Invalid request',400 + + authticketInfo = redis_controller.get(f"authticket:{AuthenticationTicket}") + if authticketInfo is None: + return 'Invalid request',400 + redis_controller.delete(f"authticket:{AuthenticationTicket}") + + userId = int(authticketInfo) + newAuthToken = auth.CreateToken(userId, get_remote_address()) + resp = make_response(newAuthToken, 200) + resp.headers["Content-Type"] = "text/plain" + resp.set_cookie(".ROBLOSECURITY", newAuthToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + + return resp + +@AuthenticationRoute.route('/v2/twostepverification/verify', methods=['POST']) +@limiter.limit("12/minute") +@csrf.exempt +def verifyTwoStep(): + if not request.is_json: + return jsonify( { "errors": [ { "code": 1, "message": "Invalid request." } ] } ), 400 + + try: + assert "username" in request.json, "Missing parameter: username" + assert "code" in request.json, "Missing parameter: code" + assert "ticket" in request.json, "Missing parameter: ticket" + assert isinstance(request.json["username"], str), "Invalid parameter type: username, expected string" + assert isinstance(request.json["code"], int), "Invalid parameter type: code, expected integer" + assert isinstance(request.json["ticket"], str), "Invalid parameter type: ticket, expected string" + except Exception as e: + return jsonify( { "errors": [ { "code": 1, "message": f"Validation failed, {str(e)}" } ] } ), 400 + + GivenUsername : str = request.json["username"] + GivenTwoStepCode : int = request.json["code"] + GivenTicket : str = request.json["ticket"] + + if redis_controller.exists(f"twofactorticket:{GivenTicket}") == 0: + return jsonify( { "errors": [ { "code": 5, "message": "Invalid two step verification ticket." } ] } ), 400 + TwoFactorSessionTicketInfo = redis_controller.get(f"twofactorticket:{GivenTicket}") + if TwoFactorSessionTicketInfo is None: + return jsonify( { "errors": [ { "code": 5, "message": "Invalid two step verification ticket." } ] } ), 400 + redis_controller.delete(f"twofactorticket:{GivenTicket}") + + UserId = int(TwoFactorSessionTicketInfo) + + Validated2FA = auth.Validate2FACode(UserId, GivenTwoStepCode) + if not Validated2FA: + return jsonify( { "errors": [ { "code": 6, "message": "The code is invalid." } ] } ), 400 + + if Validated2FA: + Response = make_response(jsonify({})) + sessionToken = auth.CreateToken(userid=UserId, ip=get_remote_address()) + Response.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + return Response + + +@AuthenticationRoute.route('/Login/NewAuthTicket', methods=['POST']) +@csrf.exempt +@auth.authenticated_required_api +def loginNewAuthTicket(): + userId = auth.GetCurrentUser().id + + authticket = ''.join(random.choices(string.ascii_uppercase + string.digits, k=256)) + redis_controller.set(f"authticket:{authticket}", userId, 60*10) + return authticket,200 + +@AuthenticationRoute.route('/game/GetCurrentUser.ashx', methods=['GET']) +def gameGetCurrentUser(): + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser is None: + return "Bad Request", 200 + return str(AuthenticatedUser.id), 200 + +@AuthenticationRoute.route('/login/RequestAuth.ashx', methods=['GET']) +@limiter.limit("6/minute") +def loginRequestAuth(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return "User is not authorized.", 401 + NewAuthTicket = ''.join(random.choices(string.ascii_uppercase + string.digits, k=256)) + redis_controller.set(f"authticket:{NewAuthTicket}", AuthenticatedUser.id, 60*10) + + resp = make_response( + f"{config.BaseURL}/Login/Negotiate.ashx?suggest={NewAuthTicket}", + 200 + ) + resp.headers["Content-Type"] = "text/plain" + return resp + +@AuthenticationRoute.route('/game/logout.aspx') +@auth.authenticated_required +def gameLogout(): + auth.invalidateToken(request.cookies.get(".ROBLOSECURITY")) + resp = make_response(redirect("/login")) + resp.set_cookie(".ROBLOSECURITY", "", expires=0) + return resp + +@AuthenticationRoute.route('/v2/login', methods=['POST']) +@limiter.limit("12/minute") +@csrf.exempt +def LoginRoute(): + loginEnabled = websiteFeatures.GetWebsiteFeature("WebLogin") + if not loginEnabled: + return jsonify( { "errors": [ { "code": 11, "message": "Service unavailable. Please try again." } ] } ), 503 + + if not request.is_json: + return abort(400) + + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser and request.user_agent.string != "RobloxStudio/WinInet RobloxApp/0.450.0.411923 (GlobalDist; RobloxDirectDownload)": + return redirect("/home") + + if AuthenticatedUser and request.user_agent.string == "RobloxStudio/WinInet RobloxApp/0.450.0.411923 (GlobalDist; RobloxDirectDownload)": + Response = make_response(jsonify({ + "username": AuthenticatedUser.username, + "isUnder13": False, + "userId": AuthenticatedUser.id, + "countryCode": "US", + "membershipType": 4, + "displayName": AuthenticatedUser.username + })) + return Response + + if ( "username" not in request.json and "cvalue" not in request.json ) or "password" not in request.json: + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + if "username" in request.json: + Username = str(request.json["username"]) + else: + Username = str(request.json["cvalue"]) + Password = str(request.json["password"]) + + UserObject : User = User.query.filter(func.lower(User.username) == func.lower(Username)).first() + if not UserObject: + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + + if UserObject.accountstatus != 1: + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + + ActualPassword = Password + if UserObject.TOTPEnabled: + if request.user_agent.string == "RobloxStudio/WinInet RobloxApp/0.450.0.411923 (GlobalDist; RobloxDirectDownload)": + if not auth.VerifyPassword(UserObject, ActualPassword): + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + twofactorticket = ''.join(random.choices(string.ascii_uppercase + string.digits, k=60)) + redis_controller.set(f"twofactorticket:{twofactorticket}", UserObject.id, 60*10) + return jsonify({"user": { + "id": UserObject.id, + "name": UserObject.username, + "displayName": UserObject.username + }, "twoStepVerificationData": { + "mediaType": "Email", + "ticket": twofactorticket + }, "identityVerificationLoginTicket": twofactorticket }) + if ";" not in Password: + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + ActualPassword = Password.split(";")[0] + TOTPCode = Password.split(";")[1] + + if not auth.Validate2FACode(UserObject.id, TOTPCode): + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + + if not auth.VerifyPassword(UserObject, ActualPassword): + return jsonify( { "errors": [ { "code": 1, "message": "Incorrect username or password. Please try again." } ] } ), 403 + + sessionToken = auth.CreateToken(userid=UserObject.id, ip=get_remote_address()) + Response = make_response(jsonify({ + "username": UserObject.username, + "isUnder13": False, + "userId": UserObject.id, + "countryCode": "US", + "membershipType": 4, + "displayName": UserObject.username + })) + Response.set_cookie(".ROBLOSECURITY", sessionToken, expires=datetime.utcnow() + timedelta(days=365), domain=f".{config.BaseDomain}") + CreateLoginRecord( UserObject.id ) + #logging.info(f"/v2/login - {UserObject.username} ({UserObject.id}) [{request.user_agent}] logged in successfully") + + return Response + +@AuthenticationRoute.route("/v1/logout", methods=["POST"]) +@AuthenticationRoute.route("/v2/logout", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def LogoutRoute(): + auth.invalidateToken(request.cookies.get(".ROBLOSECURITY")) + resp = make_response(jsonify({})) + resp.set_cookie(".ROBLOSECURITY", "", expires=0) + return resp + +@AuthenticationRoute.route("/v2/passwords/current-status", methods=["GET"]) +@auth.authenticated_required_api +def PasswordsCurrentStatusRoute(): + return jsonify({"valid": True}) \ No newline at end of file diff --git a/app/routes/avatarapi.py b/app/routes/avatarapi.py new file mode 100644 index 0000000..a9d5121 --- /dev/null +++ b/app/routes/avatarapi.py @@ -0,0 +1,317 @@ +# avatar.roblox.com +import logging +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from app.util import auth +from app.extensions import db, csrf, limiter, user_limiter +from flask_wtf.csrf import CSRFError, generate_csrf + +from app.routes.thumbnailer import TakeUserThumbnail + +from app.models.user_avatar import UserAvatar +from app.models.user_avatar_asset import UserAvatarAsset +from app.models.user import User +from app.models.asset import Asset +from app.models.userassets import UserAsset + +from app.enums.AssetType import AssetType + +AvatarAPIRoute = Blueprint('avatarapi', __name__, url_prefix='/') + +csrf.exempt(AvatarAPIRoute) +@AvatarAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@AvatarAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@AvatarAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@AvatarAPIRoute.route("/v1/avatar", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_authenticated_user_avatar(): + AuthenticatedUser : User = auth.GetCurrentUser() + + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id = AuthenticatedUser.id).first() + if UserAvatarObject is None: + UserAvatarObject = UserAvatar(AuthenticatedUser.id) + db.session.add(UserAvatarObject) + db.session.commit() + + UserAvatarAssetObject : list[UserAvatarAsset] = UserAvatarAsset.query.filter_by(user_id = AuthenticatedUser.id).all() + WearingAssets : list[dict] = [] + + for AvatarAsset in UserAvatarAssetObject: + AssetObject : Asset = AvatarAsset.asset + WearingAssets.append({ + "id": AvatarAsset.asset_id, + "name": AssetObject.name, + "assetType": { + "id": AssetObject.asset_type.value, + "name": AssetObject.asset_type.name + }, + "currentVersionId": AssetObject.id + }) + + return jsonify({ + "scales": { + "height": UserAvatarObject.height_scale, + "width": UserAvatarObject.width_scale, + "head": UserAvatarObject.head_scale, + "depth": 1, + "proportion": UserAvatarObject.proportion_scale, + "bodyType": UserAvatarObject.body_type_scale + }, + "playerAvatarType": "R6" if not UserAvatarObject.r15 else "R15", + "bodyColors": { + "headColorId": UserAvatarObject.head_color_id, + "torsoColorId": UserAvatarObject.torso_color_id, + "rightArmColorId": UserAvatarObject.right_arm_color_id, + "leftArmColorId": UserAvatarObject.left_arm_color_id, + "rightLegColorId": UserAvatarObject.right_leg_color_id, + "leftLegColorId": UserAvatarObject.left_leg_color_id + }, + "assets": WearingAssets, + "defaultShirtApplied": False, + "defaultPantsApplied": False, + "emotes": [] + }) + +@AvatarAPIRoute.route("/v1/avatar/metadata", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_avatar_editor_metadata(): + return jsonify({ + "enableDefaultClothingMessage": False, + "isAvatarScaleEmbeddedInTab": True, + "isBodyTypeScaleOutOfTab": True, + "scaleHeightIncrement": 0.05, + "scaleWidthIncrement": 0.05, + "scaleHeadIncrement": 0.05, + "scaleProportionIncrement": 0.05, + "scaleBodyTypeIncrement": 0.05, + "supportProportionAndBodyType": True, + "showDefaultClothingMessageOnPageLoad": False, + "areThreeDeeThumbsEnabled": False, + "isAvatarWearingApiCallsLockingOnFrontendEnabled": True, + "isOutfitHandlingOnFrontendEnabled": True, + "isJustinUiChangesEnabled": True, + "isCategoryReorgEnabled": True, + "LCEnabledInEditorAndCatalog": True, + "isLCCompletelyEnabled": True + }) + +@AvatarAPIRoute.route("/v1/avatar-rules", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def get_avatar_editor_rules(): + return jsonify({"playerAvatarTypes":["R6","R15"],"scales":{"height":{"min":0.9,"max":1.05,"increment":0.01},"width":{"min":0.7,"max":1,"increment":0.01},"head":{"min":0.95,"max":1,"increment":0.01},"proportion":{"min":0,"max":1,"increment":0.01},"bodyType":{"min":0,"max":1,"increment":0.01}},"wearableAssetTypes":[{"maxNumber":1,"id":18,"name":"Face"},{"maxNumber":1,"id":19,"name":"Gear"},{"maxNumber":1,"id":17,"name":"Head"},{"maxNumber":1,"id":29,"name":"Left Arm"},{"maxNumber":1,"id":30,"name":"Left Leg"},{"maxNumber":1,"id":12,"name":"Pants"},{"maxNumber":1,"id":28,"name":"Right Arm"},{"maxNumber":1,"id":31,"name":"Right Leg"},{"maxNumber":1,"id":11,"name":"Shirt"},{"maxNumber":1,"id":2,"name":"T-Shirt"},{"maxNumber":1,"id":27,"name":"Torso"},{"maxNumber":1,"id":48,"name":"Climb Animation"},{"maxNumber":1,"id":49,"name":"Death Animation"},{"maxNumber":1,"id":50,"name":"Fall Animation"},{"maxNumber":1,"id":51,"name":"Idle Animation"},{"maxNumber":1,"id":52,"name":"Jump Animation"},{"maxNumber":1,"id":53,"name":"Run Animation"},{"maxNumber":1,"id":54,"name":"Swim Animation"},{"maxNumber":1,"id":55,"name":"Walk Animation"},{"maxNumber":1,"id":56,"name":"Pose Animation"},{"maxNumber":0,"id":61,"name":"Emote Animation"},{"maxNumber":3,"id":8,"name":"Hat"},{"maxNumber":5,"id":41,"name":"Hair Accessory"},{"maxNumber":5,"id":42,"name":"Face Accessory"},{"maxNumber":1,"id":43,"name":"Neck Accessory"},{"maxNumber":1,"id":44,"name":"Shoulder Accessory"},{"maxNumber":1,"id":45,"name":"Front Accessory"},{"maxNumber":1,"id":46,"name":"Back Accessory"},{"maxNumber":1,"id":47,"name":"Waist Accessory"},{"maxNumber":1,"id":72,"name":"Dress Skirt Accessory"},{"maxNumber":1,"id":67,"name":"Jacket Accessory"},{"maxNumber":1,"id":70,"name":"Left Shoe Accessory"},{"maxNumber":1,"id":71,"name":"Right Shoe Accessory"},{"maxNumber":1,"id":66,"name":"Pants Accessory"},{"maxNumber":1,"id":65,"name":"Shirt Accessory"},{"maxNumber":1,"id":69,"name":"Shorts Accessory"},{"maxNumber":1,"id":68,"name":"Sweater Accessory"},{"maxNumber":1,"id":64,"name":"T-Shirt Accessory"},{"maxNumber":1,"id":76,"name":"Eyebrow Accessory"},{"maxNumber":1,"id":77,"name":"Eyelash Accessory"},{"maxNumber":1,"id":78,"name":"Mood Animation"},{"maxNumber":1,"id":79,"name":"Dynamic Head"}],"bodyColorsPalette":[{"brickColorId":361,"hexColor":"#564236","name":"Dirt brown"},{"brickColorId":192,"hexColor":"#694028","name":"Reddish brown"},{"brickColorId":217,"hexColor":"#7C5C46","name":"Brown"},{"brickColorId":153,"hexColor":"#957977","name":"Sand red"},{"brickColorId":359,"hexColor":"#AF9483","name":"Linen"},{"brickColorId":352,"hexColor":"#C7AC78","name":"Burlap"},{"brickColorId":5,"hexColor":"#D7C59A","name":"Brick yellow"},{"brickColorId":101,"hexColor":"#DA867A","name":"Medium red"},{"brickColorId":1007,"hexColor":"#A34B4B","name":"Dusty Rose"},{"brickColorId":1014,"hexColor":"#AA5500","name":"CGA brown"},{"brickColorId":38,"hexColor":"#A05F35","name":"Dark orange"},{"brickColorId":18,"hexColor":"#CC8E69","name":"Nougat"},{"brickColorId":125,"hexColor":"#EAB892","name":"Light orange"},{"brickColorId":1030,"hexColor":"#FFCC99","name":"Pastel brown"},{"brickColorId":133,"hexColor":"#D5733D","name":"Neon orange"},{"brickColorId":106,"hexColor":"#DA8541","name":"Bright orange"},{"brickColorId":105,"hexColor":"#E29B40","name":"Br. yellowish orange"},{"brickColorId":1017,"hexColor":"#FFAF00","name":"Deep orange"},{"brickColorId":24,"hexColor":"#F5CD30","name":"Bright yellow"},{"brickColorId":334,"hexColor":"#F8D96D","name":"Daisy orange"},{"brickColorId":226,"hexColor":"#FDEA8D","name":"Cool yellow"},{"brickColorId":141,"hexColor":"#27462D","name":"Earth green"},{"brickColorId":1021,"hexColor":"#3A7D15","name":"Camo"},{"brickColorId":28,"hexColor":"#287F47","name":"Dark green"},{"brickColorId":37,"hexColor":"#4B974B","name":"Bright green"},{"brickColorId":310,"hexColor":"#5B9A4C","name":"Shamrock"},{"brickColorId":317,"hexColor":"#7C9C6B","name":"Moss"},{"brickColorId":119,"hexColor":"#A4BD47","name":"Br. yellowish green"},{"brickColorId":1011,"hexColor":"#002060","name":"Navy blue"},{"brickColorId":1012,"hexColor":"#2154B9","name":"Deep blue"},{"brickColorId":1010,"hexColor":"#0000FF","name":"Really blue"},{"brickColorId":23,"hexColor":"#0D69AC","name":"Bright blue"},{"brickColorId":305,"hexColor":"#527CAE","name":"Steel blue"},{"brickColorId":102,"hexColor":"#6E99CA","name":"Medium blue"},{"brickColorId":45,"hexColor":"#B4D2E4","name":"Light blue"},{"brickColorId":107,"hexColor":"#008F9C","name":"Bright bluish green"},{"brickColorId":1018,"hexColor":"#12EED4","name":"Teal"},{"brickColorId":1027,"hexColor":"#9FF3E9","name":"Pastel blue-green"},{"brickColorId":1019,"hexColor":"#00FFFF","name":"Toothpaste"},{"brickColorId":1013,"hexColor":"#04AFEC","name":"Cyan"},{"brickColorId":11,"hexColor":"#80BBDC","name":"Pastel Blue"},{"brickColorId":1024,"hexColor":"#AFDDFF","name":"Pastel light blue"},{"brickColorId":104,"hexColor":"#6B327C","name":"Bright violet"},{"brickColorId":1023,"hexColor":"#8C5B9F","name":"Lavender"},{"brickColorId":321,"hexColor":"#A75E9B","name":"Lilac"},{"brickColorId":1015,"hexColor":"#AA00AA","name":"Magenta"},{"brickColorId":1031,"hexColor":"#6225D1","name":"Royal purple"},{"brickColorId":1006,"hexColor":"#B480FF","name":"Alder"},{"brickColorId":1026,"hexColor":"#B1A7FF","name":"Pastel violet"},{"brickColorId":21,"hexColor":"#C4281C","name":"Bright red"},{"brickColorId":1004,"hexColor":"#FF0000","name":"Really red"},{"brickColorId":1032,"hexColor":"#FF00BF","name":"Hot pink"},{"brickColorId":1016,"hexColor":"#FF66CC","name":"Pink"},{"brickColorId":330,"hexColor":"#FF98DC","name":"Carnation pink"},{"brickColorId":9,"hexColor":"#E8BAC8","name":"Light reddish violet"},{"brickColorId":1025,"hexColor":"#FFC9C9","name":"Pastel orange"},{"brickColorId":364,"hexColor":"#5A4C42","name":"Dark taupe"},{"brickColorId":351,"hexColor":"#BC9B5D","name":"Cork"},{"brickColorId":1008,"hexColor":"#C1BE42","name":"Olive"},{"brickColorId":29,"hexColor":"#A1C48C","name":"Medium green"},{"brickColorId":1022,"hexColor":"#7F8E64","name":"Grime"},{"brickColorId":151,"hexColor":"#789082","name":"Sand green"},{"brickColorId":135,"hexColor":"#74869D","name":"Sand blue"},{"brickColorId":1020,"hexColor":"#00FF00","name":"Lime green"},{"brickColorId":1028,"hexColor":"#CCFFCC","name":"Pastel green"},{"brickColorId":1009,"hexColor":"#FFFF00","name":"New Yeller"},{"brickColorId":1029,"hexColor":"#FFFFCC","name":"Pastel yellow"},{"brickColorId":1003,"hexColor":"#111111","name":"Really black"},{"brickColorId":26,"hexColor":"#1B2A35","name":"Black"},{"brickColorId":199,"hexColor":"#635F62","name":"Dark stone grey"},{"brickColorId":194,"hexColor":"#A3A2A5","name":"Medium stone grey"},{"brickColorId":1002,"hexColor":"#CDCDCD","name":"Mid gray"},{"brickColorId":208,"hexColor":"#E5E4DF","name":"Light stone grey"},{"brickColorId":1,"hexColor":"#F2F3F3","name":"White"},{"brickColorId":1001,"hexColor":"#F8F8F8","name":"Institutional white"}],"basicBodyColorsPalette":[{"brickColorId":364,"hexColor":"#5A4C42","name":"Dark taupe"},{"brickColorId":217,"hexColor":"#7C5C46","name":"Brown"},{"brickColorId":359,"hexColor":"#AF9483","name":"Linen"},{"brickColorId":18,"hexColor":"#CC8E69","name":"Nougat"},{"brickColorId":125,"hexColor":"#EAB892","name":"Light orange"},{"brickColorId":361,"hexColor":"#564236","name":"Dirt brown"},{"brickColorId":192,"hexColor":"#694028","name":"Reddish brown"},{"brickColorId":351,"hexColor":"#BC9B5D","name":"Cork"},{"brickColorId":352,"hexColor":"#C7AC78","name":"Burlap"},{"brickColorId":5,"hexColor":"#D7C59A","name":"Brick yellow"},{"brickColorId":153,"hexColor":"#957977","name":"Sand red"},{"brickColorId":1007,"hexColor":"#A34B4B","name":"Dusty Rose"},{"brickColorId":101,"hexColor":"#DA867A","name":"Medium red"},{"brickColorId":1025,"hexColor":"#FFC9C9","name":"Pastel orange"},{"brickColorId":330,"hexColor":"#FF98DC","name":"Carnation pink"},{"brickColorId":135,"hexColor":"#74869D","name":"Sand blue"},{"brickColorId":305,"hexColor":"#527CAE","name":"Steel blue"},{"brickColorId":11,"hexColor":"#80BBDC","name":"Pastel Blue"},{"brickColorId":1026,"hexColor":"#B1A7FF","name":"Pastel violet"},{"brickColorId":321,"hexColor":"#A75E9B","name":"Lilac"},{"brickColorId":107,"hexColor":"#008F9C","name":"Bright bluish green"},{"brickColorId":310,"hexColor":"#5B9A4C","name":"Shamrock"},{"brickColorId":317,"hexColor":"#7C9C6B","name":"Moss"},{"brickColorId":29,"hexColor":"#A1C48C","name":"Medium green"},{"brickColorId":105,"hexColor":"#E29B40","name":"Br. yellowish orange"},{"brickColorId":24,"hexColor":"#F5CD30","name":"Bright yellow"},{"brickColorId":334,"hexColor":"#F8D96D","name":"Daisy orange"},{"brickColorId":199,"hexColor":"#635F62","name":"Dark stone grey"},{"brickColorId":1002,"hexColor":"#CDCDCD","name":"Mid gray"},{"brickColorId":1001,"hexColor":"#F8F8F8","name":"Institutional white"}],"minimumDeltaEBodyColorDifference":11.4,"proportionsAndBodyTypeEnabledForUser":True,"defaultClothingAssetLists":{"defaultShirtAssetIds":[855776103,855760101,855766176,855777286,855768342,855779323,855773575,855778084],"defaultPantAssetIds":[855783877,855780360,855781078,855782781,855781508,855785499,855782253,855784936]},"bundlesEnabledForUser":False,"emotesEnabledForUser":False}) + +@AvatarAPIRoute.route("/v1/avatar/set-player-avatar-type", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +@user_limiter.limit("30/minute") +def set_player_avatar_type(): + AuthenticatedUser : User = auth.GetCurrentUser() + + if not request.is_json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if "playerAvatarType" not in request.json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if request.json["playerAvatarType"] not in ["R6", "R15"]: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id = AuthenticatedUser.id).first() + if UserAvatarObject is None: + UserAvatarObject = UserAvatar(AuthenticatedUser.id) + db.session.add(UserAvatarObject) + db.session.commit() + + UserAvatarObject.r15 = True if request.json["playerAvatarType"] == "R15" else False + db.session.commit() + + TakeUserThumbnail(AuthenticatedUser.id) + + return jsonify({ + "success": True + }) + +@AvatarAPIRoute.route("/v1/avatar/set-scales", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +@user_limiter.limit("30/minute") +def set_player_avatar_scale(): + AuthenticatedUser : User = auth.GetCurrentUser() + + if not request.is_json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if "height" not in request.json or "width" not in request.json or "head" not in request.json or "proportion" not in request.json or "bodyType" not in request.json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + AvatarScales = {} + + try: + AvatarScales["height"] = float(request.json["height"]) + AvatarScales["width"] = float(request.json["width"]) + AvatarScales["head"] = float(request.json["head"]) + AvatarScales["proportion"] = float(request.json["proportion"]) + AvatarScales["bodyType"] = float(request.json["bodyType"]) + except ValueError: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if AvatarScales["height"] < 0.9 or AvatarScales["height"] > 1.05 or AvatarScales["width"] < 0.7 or AvatarScales["width"] > 1 or AvatarScales["head"] < 0.95 or AvatarScales["head"] > 1 or AvatarScales["proportion"] < 0 or AvatarScales["proportion"] > 1 or AvatarScales["bodyType"] < 0 or AvatarScales["bodyType"] > 1: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id = AuthenticatedUser.id).first() + if UserAvatarObject is None: + UserAvatarObject = UserAvatar(AuthenticatedUser.id) + db.session.add(UserAvatarObject) + db.session.commit() + + UserAvatarObject.height_scale = AvatarScales["height"] + UserAvatarObject.width_scale = AvatarScales["width"] + UserAvatarObject.head_scale = AvatarScales["head"] + UserAvatarObject.proportion_scale = AvatarScales["proportion"] + UserAvatarObject.body_type_scale = AvatarScales["bodyType"] + db.session.commit() + + TakeUserThumbnail(AuthenticatedUser.id) + return jsonify({ + "success": True + }) + +AllowedBodyColors = [361, 192, 217, 153, 359, 352, 5, 101, 1007, 1014, 38, 18, 125, 1030, 133, 106, 105, 1017, 24, 334, 226, 141, 1021, 28, 37, 310, 317, 119, 1011, 1012, 1010, 23, 305, 102, 45, 107, 1018, 1027, 1019, 1013, 11, 1024, 104, 1023, 321, 1015, 1031, 1006, 1026, 21, 1004, 1032, 1016, 330, 9, 1025, 364, 351, 1008, 29, 1022, 151, 135, 1020, 1028, 1009, 1029, 1003, 26, 199, 194, 1002, 208, 1, 1001] + +@AvatarAPIRoute.route("/v1/avatar/set-body-colors", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +@user_limiter.limit("30/minute") +def set_player_avatar_body_colors(): + AuthenticatedUser : User = auth.GetCurrentUser() + + if not request.is_json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if "headColorId" not in request.json or "torsoColorId" not in request.json or "rightArmColorId" not in request.json or "leftArmColorId" not in request.json or "rightLegColorId" not in request.json or "leftLegColorId" not in request.json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if not isinstance(request.json["headColorId"], int) or not isinstance(request.json["torsoColorId"], int) or not isinstance(request.json["rightArmColorId"], int) or not isinstance(request.json["leftArmColorId"], int) or not isinstance(request.json["rightLegColorId"], int) or not isinstance(request.json["leftLegColorId"], int): + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if request.json["headColorId"] not in AllowedBodyColors or request.json["torsoColorId"] not in AllowedBodyColors or request.json["rightArmColorId"] not in AllowedBodyColors or request.json["leftArmColorId"] not in AllowedBodyColors or request.json["rightLegColorId"] not in AllowedBodyColors or request.json["leftLegColorId"] not in AllowedBodyColors: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id = AuthenticatedUser.id).first() + if UserAvatarObject is None: + UserAvatarObject = UserAvatar(AuthenticatedUser.id) + db.session.add(UserAvatarObject) + db.session.commit() + + UserAvatarObject.head_color_id = request.json["headColorId"] + UserAvatarObject.torso_color_id = request.json["torsoColorId"] + UserAvatarObject.right_arm_color_id = request.json["rightArmColorId"] + UserAvatarObject.left_arm_color_id = request.json["leftArmColorId"] + UserAvatarObject.right_leg_color_id = request.json["rightLegColorId"] + UserAvatarObject.left_leg_color_id = request.json["leftLegColorId"] + + db.session.commit() + TakeUserThumbnail(AuthenticatedUser.id) + + return jsonify({ + "success": True + }) + +@AvatarAPIRoute.route("/v1/avatar/set-wearing-assets", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +@user_limiter.limit("30/minute") +def set_player_avatar_wearing_assets(): + AuthenticatedUser : User = auth.GetCurrentUser() + + if not request.is_json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if "assetIds" not in request.json: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if not isinstance(request.json["assetIds"], list): + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + InvalidAssetIds : list[int] = [] + AssetTypeCounter : dict[int, int] = {} + AllowedAssetIds : list[int] = [] + + for AssetId in request.json["assetIds"]: + try: + AssetId = int(AssetId) + except ValueError: + return jsonify({"errors": [{"code": 0, "message": "Invalid JSON"}]}), 400 + + if AssetId in InvalidAssetIds or AssetId in AllowedAssetIds: + continue + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid = AuthenticatedUser.id, assetid = AssetId).first() + + if UserAssetObj is None: + InvalidAssetIds.append(AssetId) + continue + + AssetObj : Asset = UserAssetObj.asset + + if AssetObj.moderation_status != 0: + InvalidAssetIds.append(AssetId) + continue + if AssetObj.asset_type.value not in [2,8,11,12,17,18,19,27,28,29,30,31,32,41,42,43,44,45,46,47,57,58]: + return jsonify({"errors": [{"code": 3, "message": "Invalid AssetId"}]}), 400 + + if AssetObj.asset_type.value not in AssetTypeCounter: + AssetTypeCounter[AssetObj.asset_type.value] = 0 + + if AssetTypeCounter[AssetObj.asset_type.value] >= 1 and AssetObj.asset_type != AssetType.Hat: + return jsonify({"errors": [{"code": 3, "message": "Invalid AssetId"}]}), 400 + if AssetTypeCounter[AssetObj.asset_type.value] >= 3 and AssetObj.asset_type == AssetType.Hat: + return jsonify({"errors": [{"code": 3, "message": "Invalid AssetId"}]}), 400 + + AssetTypeCounter[AssetObj.asset_type.value] += 1 + AllowedAssetIds.append(AssetId) + + UserAvatarAsset.query.filter_by(user_id = AuthenticatedUser.id).delete() + db.session.commit() + + for AssetId in AllowedAssetIds: + NewAvatarAssetObj : UserAvatarAsset = UserAvatarAsset( user_id = AuthenticatedUser.id, asset_id = AssetId ) + db.session.add(NewAvatarAssetObj) + + db.session.commit() + TakeUserThumbnail(AuthenticatedUser.id) + + return jsonify({ + "invalidAssetIds": InvalidAssetIds, + "success": True + }) + diff --git a/app/routes/badgesapi.py b/app/routes/badgesapi.py new file mode 100644 index 0000000..3a93bba --- /dev/null +++ b/app/routes/badgesapi.py @@ -0,0 +1,343 @@ +#badges.roblox.com +import logging +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response, after_this_request, Response +from app.util import auth +from app.extensions import db, csrf, limiter, redis_controller +from flask_wtf.csrf import CSRFError, generate_csrf + +from app.models.user import User +from app.models.groups import Group +from app.models.place import Place +from app.models.userassets import UserAsset +from app.models.place_badge import PlaceBadge, UserBadge +from app.models.asset import Asset +from app.models.game_session_log import GameSessionLog +from app.models.placeserver_players import PlaceServerPlayer +from app.models.placeservers import PlaceServer +from app.models.universe import Universe + +from datetime import datetime, timedelta +from sqlalchemy import and_ + +BadgesAPIRoute = Blueprint( 'BadgesAPIRoute', __name__, url_prefix='/') + +def CalculateBadgeRarity( badge_id : int, bypass_cache : bool = False ) -> float: + """ + Badges have a rarity value that is influenced by the ratio of the number of users in the past 24 hours + to achieve the badge to the total number of players that have joined the experience within the same timespan; + for example, if 99,900 of 100,000 daily visitors receive a badge, its difficulty will likely be Freebie (99.9%), + while if only 100 players get a badge in the same experience, its difficulty will appear as Impossible (0.1%). + + https://roblox.fandom.com/wiki/Player_badge + """ + + def _calculate_rarity() -> float: + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = badge_id ).first() + if BadgeObj is None: + return 0.0 + PlaceObj : Place = Place.query.filter_by( placeid = BadgeObj.associated_place_id ).first() + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + AwardedRecentlyCount : int = UserBadge.query.filter_by( badge_id = badge_id ).filter( UserBadge.awarded_at > datetime.utcnow() - timedelta( hours = 24 ) ).count() + TotalPlayedRecentlyCount : int = GameSessionLog.query.filter_by( place_id = UniverseObj.root_place_id ).filter( GameSessionLog.joined_at > datetime.utcnow() - timedelta( hours = 24 ) ).distinct( GameSessionLog.user_id ).count() + + if TotalPlayedRecentlyCount == 0 or AwardedRecentlyCount == 0: + return 0.0 + + return round( AwardedRecentlyCount / TotalPlayedRecentlyCount, 3 ) + + CacheRedisKey = f"badge_rarity_{badge_id}" + + if not bypass_cache: + CachedValue = redis_controller.get( CacheRedisKey ) + if CachedValue is not None: + return float( CachedValue ) + + RarityValue = _calculate_rarity() + redis_controller.set( CacheRedisKey, str(RarityValue), ex = 60 ) + + return RarityValue + +def GetBadgeAwardedPastDay( badge_id ) -> int: + timenow = datetime.utcnow() + start_of_yesterday = datetime(timenow.year, timenow.month, timenow.day) - timedelta(days=1) + end_of_yesterday = datetime(timenow.year, timenow.month, timenow.day) - timedelta(seconds=1) + return UserBadge.query.filter_by( badge_id = badge_id ).filter( and_( UserBadge.awarded_at > start_of_yesterday, UserBadge.awarded_at < end_of_yesterday ) ).count() + +class UserAlreadyHasBadgeException( Exception ): + pass + +def AwardBadgeToUser( badge_id : int, user_obj : User ) -> UserBadge: + """ Award a badge to a user. """ + BadgeObj : PlaceBadge | None = PlaceBadge.query.filter_by( id = badge_id ).first() + if BadgeObj is None: + raise ValueError("Badge does not exist.") + + if UserBadge.query.filter_by( badge_id = badge_id, user_id = user_obj.id ).first() is not None: + raise UserAlreadyHasBadgeException("User already has badge.") + + BadgeAwarded = UserBadge( badge_id = badge_id, user_id = user_obj.id ) + db.session.add( BadgeAwarded ) + + try: + if BadgeObj.asset_reward is not None: + UserAssetObj : UserAsset | None = UserAsset.query.filter_by( userid = user_obj.id, assetid = BadgeObj.asset_reward ).first() + if UserAssetObj is None: + AssetObj : Asset | None = Asset.query.filter_by( id = BadgeObj.asset_reward ).first() + if AssetObj is None: + raise ValueError(f"Asset [{BadgeObj.asset_reward}] does not exist for badge {BadgeObj.id}") + + UserAssetObj = UserAsset( userid = user_obj.id, assetid = BadgeObj.asset_reward ) + db.session.add( UserAssetObj ) + except Exception as e: + logging.error(f"Error attempting to give user [{user_obj.id}] badge award [{badge_id}]: {e}") + + db.session.commit() + + return BadgeAwarded + +def GetAssetCreator( asset_obj : Asset ) -> User | Group | None: + if asset_obj.creator_type == 0: + return User.query.filter_by( id = asset_obj.creator_id ).first() + elif asset_obj.creator_type == 1: + return Group.query.filter_by( id = asset_obj.creator_id ).first() + + return None + +csrf.exempt(BadgesAPIRoute) +@BadgesAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@BadgesAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({"errors": [{"code": 9,"message": "The flood limit has been exceeded."}]}), 429 +@BadgesAPIRoute.errorhandler(405) +def handle_method_not_allowed(e): + return jsonify({"errors": [{"code": 0,"message": "MethodNotAllowed"}]}), 405 + +@BadgesAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@BadgesAPIRoute.route('/v1/badges/', methods=['GET']) +@limiter.limit("60/minute") +def get_badge_info( badge_id : int ): + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = badge_id ).first() + if BadgeObj is None: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + + UniverseObj : Universe = Universe.query.filter_by( id = BadgeObj.universe_id ).first() + + BadgeAwardedCount : int = UserBadge.query.filter_by( badge_id = badge_id ).count() + PastAwardedCount : int = UserBadge.query.filter_by( badge_id = badge_id ).filter( UserBadge.awarded_at > datetime.utcnow() - timedelta( hours = 24 ) ).count() + AssociatedPlaceAsset : Asset = Asset.query.filter_by( id = UniverseObj.root_place_id ).first() + BadgeWinRatePercentage : float = CalculateBadgeRarity( badge_id = badge_id ) + + return jsonify({ + "id": BadgeObj.id, + "name": BadgeObj.name, + "description": BadgeObj.description, + "displayName": BadgeObj.name, + "displayDescription": BadgeObj.description, + "enabled": BadgeObj.enabled, + "iconImageId": BadgeObj.icon_image_id, + "displayIconImageId": BadgeObj.icon_image_id, + "created": BadgeObj.created_at.isoformat(), + "updated": BadgeObj.updated_at.isoformat(), + "statistics": { + "pastAwardCount": PastAwardedCount, + "awardCount": BadgeAwardedCount, + "winRatePercentage": BadgeWinRatePercentage + }, + "awardingUniverse": { + "id": UniverseObj.id, + "name": AssociatedPlaceAsset.name, + "rootPlaceId": UniverseObj.root_place_id + } + }) + +# This endpoint should only be used by 2020 games, which should always have "AccessKey" in the request headers unlike 2014 +@BadgesAPIRoute.route('/v1/users//badges//award-badge', methods=["POST"]) +@auth.gameserver_accesskey_required +def server_award_badge_route( user_id : int, badge_id : int ): + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = badge_id ).first() + if BadgeObj is None: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + + UserObj : User | None = User.query.filter_by( id = user_id ).first() + if UserObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is invalid or does not exist."}]}), 404 + + PlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by( userid = user_id ).first() + if PlaceServerPlayerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = PlaceServerPlayerObj.serveruuid ).first() + # This should never happen, but just in case + if PlaceServerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + ServerPlaceObj : Place = Place.query.filter_by( placeid = PlaceServerObj.serverPlaceId ).first() + if ServerPlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + RequestPlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + if RequestPlaceId is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + PlaceObj : Place = Place.query.filter_by( placeid = RequestPlaceId ).first() + if PlaceObj is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + if PlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + + try: + AwardBadgeToUser( badge_id = badge_id, user_obj = UserObj ) + except UserAlreadyHasBadgeException: + return jsonify({"errors": [{"code": 1,"message": "User already has badge."}]}), 400 + except ValueError: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + except Exception as e: + logging.error(f"Error awarding badge to user: {e}") + return jsonify({"errors": [{"code": 1,"message": "Internal Server error."}]}), 500 + + return jsonify({ "success": True }) + +# 2018 RCC +@BadgesAPIRoute.route('/assets/award-badge', methods=["POST"]) +@auth.gameserver_accesskey_required +def server_award_badge_route_legacy(): + reqUserId = request.args.get("userId", type=int, default=None) + reqBadgeId = request.args.get("badgeId", type=int, default=None) + reqPlaceId = request.args.get("placeId", type=int, default=None) + + if reqUserId is None or reqBadgeId is None or reqPlaceId is None: + return jsonify({"errors": [{"code": 1,"message": "Invalid request."}]}), 400 + + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = reqBadgeId ).first() + if BadgeObj is None: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + + UserObj : User | None = User.query.filter_by( id = reqUserId ).first() + if UserObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is invalid or does not exist."}]}), 404 + + PlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by( userid = reqUserId ).first() + if PlaceServerPlayerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = PlaceServerPlayerObj.serveruuid ).first() + # This should never happen, but just in case + if PlaceServerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + ServerPlaceObj : Place = Place.query.filter_by( placeid = PlaceServerObj.serverPlaceId ).first() + if ServerPlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + RequestPlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + if RequestPlaceId is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + if RequestPlaceId != reqPlaceId: + return jsonify({"errors": [{"code": 1,"message": f"Roblox-Place-Id [{RequestPlaceId}] Header does not match placeId argument [{reqPlaceId}]"}]}), 400 + PlaceObj : Place = Place.query.filter_by( placeid = RequestPlaceId ).first() + if PlaceObj is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + if PlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + + try: + AwardBadgeToUser( badge_id = reqBadgeId, user_obj = UserObj ) + except UserAlreadyHasBadgeException: + return jsonify({"errors": [{"code": 1,"message": "User already has badge."}]}), 400 + except ValueError: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + except Exception as e: + logging.error(f"Error awarding badge to user: {e}") + return jsonify({"errors": [{"code": 1,"message": "Internal Server error."}]}), 500 + PlaceAssetObj : Asset = Asset.query.filter_by( id = PlaceObj.placeid ).first() + PlaceCreator : User | Group = GetAssetCreator( PlaceAssetObj ) + + return f"{UserObj.username} won {PlaceCreator.username if PlaceAssetObj.creator_type == 0 else PlaceCreator.name}'s \"{BadgeObj.name}\" award!" # This message is sent to client to be shown as a badge awarded notification + +@BadgesAPIRoute.route("/Game/Badge/HasBadge.ashx", methods=["GET"]) +@auth.gameserver_authenticated_required # Only IP address is checked +def query_user_has_badge(): + reqUserId = request.args.get("UserID", type=int, default=None) + reqBadgeId = request.args.get("BadgeID", type=int, default=None) + + if reqUserId is None or reqBadgeId is None: + return "0" + + BadgeObj : PlaceBadge | None = PlaceBadge.query.filter_by( id = reqBadgeId ).first() + if BadgeObj is None: + return "0" + + UserObj : User | None = User.query.filter_by( id = reqUserId ).first() + if UserObj is None: + return "0" + + if UserBadge.query.filter_by( badge_id = reqBadgeId, user_id = reqUserId ).first() is None: + return "0" + + return "1" + +@BadgesAPIRoute.route("/Game/Badge/AwardBadge.ashx", methods=["POST"]) +@auth.gameserver_authenticated_required +def award_badge_to_user(): + reqUserId = request.args.get("UserID", type=int, default=None) + reqBadgeId = request.args.get("BadgeID", type=int, default=None) + reqPlaceId = request.args.get("PlaceID", type=int, default=None) + + if reqUserId is None or reqBadgeId is None or reqPlaceId is None: + return jsonify({"errors": [{"code": 1,"message": "Invalid request."}]}), 400 + + BadgeObj : PlaceBadge = PlaceBadge.query.filter_by( id = reqBadgeId ).first() + if BadgeObj is None: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + + UserObj : User | None = User.query.filter_by( id = reqUserId ).first() + if UserObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is invalid or does not exist."}]}), 404 + + PlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by( userid = reqUserId ).first() + if PlaceServerPlayerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = PlaceServerPlayerObj.serveruuid ).first() + # This should never happen, but just in case + if PlaceServerObj is None: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + ServerPlaceObj : Place = Place.query.filter_by( placeid = PlaceServerObj.serverPlaceId ).first() + if ServerPlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "User is not in the game."}]}), 400 + + PlaceObj : Place = Place.query.filter_by( placeid = reqPlaceId ).first() + if PlaceObj is None: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + if PlaceObj.parent_universe_id != BadgeObj.universe_id: + return jsonify({"errors": [{"code": 1,"message": "Place ID is invalid or does not exist."}]}), 404 + + try: + AwardBadgeToUser( badge_id = reqBadgeId, user_obj = UserObj ) + except UserAlreadyHasBadgeException: + return jsonify({"errors": [{"code": 1,"message": "User already has badge."}]}), 400 + except ValueError: + return jsonify({"errors": [{"code": 1,"message": "Badge is invalid or does not exist."}]}), 404 + except Exception as e: + logging.error(f"Error awarding badge to user: {e}") + return jsonify({"errors": [{"code": 1,"message": "Internal Server error."}]}), 500 + PlaceAssetObj : Asset = Asset.query.filter_by( id = PlaceObj.placeid ).first() + PlaceCreator : User | Group = GetAssetCreator( PlaceAssetObj ) + + return f"{UserObj.username} won {PlaceCreator.username if PlaceAssetObj.creator_type == 0 else PlaceCreator.name}'s \"{BadgeObj.name}\" award!" # This message is sent to client to be shown as a badge awarded notification + diff --git a/app/routes/bootstrapper.py b/app/routes/bootstrapper.py new file mode 100644 index 0000000..e3ffc04 --- /dev/null +++ b/app/routes/bootstrapper.py @@ -0,0 +1,7 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash + +BootstrapperRoute = Blueprint('BootstrapperRoute', __name__, template_folder='pages') + +@BootstrapperRoute.route("/install/GetInstallerCdns.ashx", methods=["GET"]) +def getinstallercdns(): + return "https://setup.syntax.eco/" diff --git a/app/routes/clientinfo.py b/app/routes/clientinfo.py new file mode 100644 index 0000000..1c35163 --- /dev/null +++ b/app/routes/clientinfo.py @@ -0,0 +1,654 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.extensions import csrf, redis_controller, get_remote_address +from app.models.user import User +from app.models.place import Place +from app.models.asset import Asset +from app.models.asset_version import AssetVersion +from app.models.gameservers import GameServer +from app.models.universe import Universe +from app.models.groups import Group, GroupRole, GroupRolePermission +from app.enums.PlaceRigChoice import PlaceRigChoice +from app.enums.PlaceYear import PlaceYear +from app.util.assetversion import GetLatestAssetVersion +from app.util.textfilter import FilterText +from app.util import auth +from app.services import economy, groups +from app.routes.asset import GenerateTempAuthToken +from config import Config +import logging +import datetime + +config = Config() + +ClientInfo = Blueprint('clientinfo', __name__, url_prefix='/') + +@ClientInfo.route('/GetAllowedSecurityVersions/', methods=['GET']) +def GetAllowedSecurityVersions(): + return jsonify({ + "data": ["0.360.0pcplayer", "0.450.0pcplayer", "0.463.0pcplayer", "0.0.0.1", "PRAFBERQ", "39f6144dd9288912aea2df1a5a6b7b4d405d8316"] + }) + +@ClientInfo.route("/GetAllowedMD5Hashes/", methods=['GET']) +def GetAllowedMD5Hashes(): + apiKey = request.args.get("apiKey", default=None, type=str) + if apiKey == "dac86da7-a4bc-4bff-8ca4-8b54e1ac925b": # 2021 + return jsonify({ + "data": [ + "a384c8a1fa1f02b7bd4c60313d034cc1",# 2020 + "69957b53e003c89f7a24debab0b50a3a" # 2021 + ] + }), 200 + + return jsonify({ + "data": [ + # 2016 + "3dacdae5eebddad646e5c79378313984", + # 2018, + "2e9d56a875ae66f899bd18e4ef660592" + ] + }) + +@ClientInfo.route('/game/players//', methods=['GET']) +def GetPlayerInfo(userid): + return jsonify({ + "ChatFilter": "whitelist" + }) +@ClientInfo.route("/Game/ChatFilter.ashx", methods=["POST"]) +@csrf.exempt +def ChatFilterAshx(): + try: + RequestedFilterText = request.data.decode("utf-8") + except: + RequestedFilterText = str(request.data) + + try: + FilterText( + Text = RequestedFilterText, + ReplaceWith = "#", + ThrowException = True + ) + return "True" + except: + return "False" + + +@ClientInfo.route("/moderation/filtertext/", methods=['POST']) +@csrf.exempt +def FilterTextAPI(): + RequestedFilterText = request.form.get("text", default="", type=str) + + FilteredText = FilterText( + Text = RequestedFilterText, + ReplaceWith = "#", + ThrowException = False + ) + + return jsonify({ + "data": { + "white": FilteredText, + "black": "" + } + }) + +@ClientInfo.route("/v2/moderation/textfilter", methods=['POST']) +@ClientInfo.route("/moderation/v2/filtertext", methods=['POST']) +@ClientInfo.route("/moderation/v2/filtertext/", methods=['POST']) +@csrf.exempt +def FilterTextV2API(): + RequestedFilterText = request.form.get("text", default="", type=str) + + FilteredText = FilterText( + Text = RequestedFilterText, + ReplaceWith = "#", + ThrowException = False + ) + + return jsonify({ + "success": True, + "message": "", + "data": { + "AgeUnder13": FilteredText, + "Age13OrOver": FilteredText + } + }) + +@ClientInfo.route("/users//canmanage/", methods=['GET']) +def CanManage(userid, placeid): + AssetObj : Asset = Asset.query.filter_by(id=placeid).first() + if AssetObj is None: + return jsonify({ + "CanManage": False, + "Success": True + }) + if AssetObj.creator_type == 0 and AssetObj.creator_id == int(userid): + return jsonify({ + "CanManage": True, + "Success": True + }) + elif AssetObj.creator_type == 1: + GroupObj : Group = Group.query.filter_by(id=AssetObj.creator_id).first() + UserGroupRole : GroupRole = groups.GetUserRolesetInGroup(userid, GroupObj) + if UserGroupRole is not None: + UserRolePermissions : GroupRolePermission = groups.GetRolesetPermission( UserGroupRole ) + if UserRolePermissions.manage_group_games: + return jsonify({ + "CanManage": True, + "Success": True + }) + return jsonify({ + "CanManage": False, + "Success": True + }) + +@ClientInfo.route('/game/report-stats', methods=['POST']) +@csrf.exempt +def reportgamestats(): + # TODO: Implement this + return jsonify({"status": "success"}),200 + +@ClientInfo.route("/userblock/getblockedusers", methods=['GET']) +def GetBlockedUsers(): + # TODO: Implement this + return jsonify({ + "success": True, + "userList": [], + "total": 0 + }) + +@ClientInfo.route("/user/multi-following-exists", methods=['POST']) +@csrf.exempt +def MultiFollowingExists(): + # TODO: Implement this + return jsonify({ + "followings": [], + }) + +from app.util.signscript import signUTF8 +@ClientInfo.route("/game/visit.ashx", methods=['GET']) +def Visit(): + IsPlaySolo = request.args.get('IsPlaySolo', default=1, type=int) + UserID = request.args.get('UserID', default=5973, type=int) # default == guest + PlaceID = request.args.get('PlaceID', default=0, type=int) + UniverseId = request.args.get('UniverseId', default=0, type=int) + + with open("./app/files/Visit.lua", "r") as f: + VisitLua = f.read() + VisitLua = VisitLua.format( + PlaceId = str(PlaceID), + UniverseId = str(UniverseId), + UserId = str(UserID) + ) + VisitLua = signUTF8(VisitLua) + Resposne = make_response(VisitLua) + Resposne.headers['Content-Type'] = 'text/plain' + return Resposne + +@ClientInfo.route("/Error/Dmp.ashx", methods=['POST']) +@csrf.exempt +def DmpAshx(): + return "" +@ClientInfo.route("/Error/Grid.ashx", methods=['POST']) +@csrf.exempt +def ErrorGrid(): + return "OK" + +@ClientInfo.route("/game/load-place-info", methods=['GET', 'POST']) +@csrf.exempt +def load_place_info(): + placeId = request.headers.get("Roblox-Place-Id", default=1, type=int) + AssetObj : Asset = Asset.query.filter_by(id=placeId).first() + if AssetObj is None: + return jsonify({ + "success": False, + "message": "Place not found", + }), 404 + if AssetObj.asset_type.value != 9: + return jsonify({ + "success": False, + "message": "Place not found", + }), 404 + LatestAssetVersion : AssetVersion = GetLatestAssetVersion(AssetObj) + return jsonify({ + "CreatorId": AssetObj.creator_id, + "CreatorType": "User" if AssetObj.creator_type == 0 else "Group", + "PlaceVersion": LatestAssetVersion.version, + "GameId": placeId, + "IsRobloxPlace": True if AssetObj.creator_id == 1 and AssetObj.creator_type == 0 else False + }) + +@ClientInfo.route("/v1/player-policies-client", methods=["POST", "GET"]) +def playerpolicies(): + return jsonify({ + "isSubjectToChinaPolicies":False, + "arePaidRandomItemsRestricted":False, + "isPaidItemTradingAllowed":True, + "allowedExternalLinkReferences":[ + "Discord", + "YouTube", + "Twitch", + "Facebook" + ] + }) + +EnumTogameAvatarType = { + PlaceRigChoice.UserChoice: "PlayerChoice", + PlaceRigChoice.ForceR6: "MorphToR6", + PlaceRigChoice.ForceR15: "MorphToR15" +} + +@ClientInfo.route("/v1.1/game-start-info/") +def game_start_info(): + universeId = request.args.get("universeId", default=None, type=int) + if universeId is None: + return jsonify({ + "message": "Invalid request", + "success": False + }), 400 + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if UniverseObj is None: + return jsonify({ + "message": "Place not found", + "success": False + }), 404 + + return jsonify({ + "gameAvatarType": "PlayerChoice", #EnumTogameAvatarType[UniverseObj.place_rig_choice], We let avatar-fetch handle this since we allow for place specific avatar types + "allowCustomAnimations":"True", + "universeAvatarCollisionType":"OuterBox", + "universeAvatarBodyType":"Standard", + "jointPositioningType":"ArtistIntent", + "message":"", + "universeAvatarMinScales":{ + "height":0.9, + "width":0.7, + "head":0.95, + "depth":0.0, + "proportion":0.0, + "bodyType":0.0 + }, + "universeAvatarMaxScales":{ + "height":1.05, + "width":1.0, + "head":1.0, + "depth":0.0, + "proportion":1.0, + "bodyType":1.0 + }, + "universeAvatarAssetOverrides":[], + "moderationStatus":None + }) + +@ClientInfo.route("/v1/name-description/games/", methods=["GET"]) +def name_description(placeid): + PlaceObj : Place = Place.query.filter_by(placeid=placeid).first() + if PlaceObj is None: + return jsonify({ + "message": "Place not found", + "success": False + }), 404 + AssetObj : Asset = PlaceObj.assetObj + return jsonify({ + "data":[ + { + "name":AssetObj.name, + "description":AssetObj.description, + "languageCode":"en" + } + ] + }) + +@ClientInfo.route("/v1/locales", methods=["GET"]) +def client_locales(): + return jsonify({"data":[{"locale":{"id":1,"locale":"en_us","name":"English(US)","nativeName":"English","language":{"id":41,"name":"English","nativeName":"English","languageCode":"en"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":2,"locale":"es_es","name":"Spanish(Spain)","nativeName":"Español","language":{"id":148,"name":"Spanish","nativeName":"Español","languageCode":"es"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":3,"locale":"fr_fr","name":"French","nativeName":"Français","language":{"id":48,"name":"French","nativeName":"Français","languageCode":"fr"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":4,"locale":"id_id","name":"Indonesian","nativeName":"Bahasa Indonesia","language":{"id":64,"name":"Indonesian","nativeName":"Bahasa Indonesia","languageCode":"id"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":5,"locale":"it_it","name":"Italian","nativeName":"Italiano","language":{"id":71,"name":"Italian","nativeName":"Italiano","languageCode":"it"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":6,"locale":"ja_jp","name":"Japanese","nativeName":"日本語","language":{"id":73,"name":"Japanese","nativeName":"日本語 (にほんご),","languageCode":"ja"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":7,"locale":"ko_kr","name":"Korean","nativeName":"한국어","language":{"id":86,"name":"Korean","nativeName":"한국어","languageCode":"ko"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":8,"locale":"ru_ru","name":"Russian","nativeName":"Русский","language":{"id":133,"name":"Russian","nativeName":"Русский","languageCode":"ru"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":9,"locale":"th_th","name":"Thai","nativeName":"ภาษาไทย","language":{"id":156,"name":"Thai","nativeName":"ไทย","languageCode":"th"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":10,"locale":"tr_tr","name":"Turkish","nativeName":"Türkçe","language":{"id":163,"name":"Turkish","nativeName":"Türkçe","languageCode":"tr"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":11,"locale":"vi_vn","name":"Vietnamese","nativeName":"Tiếng Việt","language":{"id":173,"name":"Vietnamese","nativeName":"Tiếng Việt","languageCode":"vi"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":12,"locale":"pt_br","name":"Portuguese (Brazil)","nativeName":"Português (Brasil)","language":{"id":128,"name":"Portuguese","nativeName":"Português","languageCode":"pt"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":13,"locale":"de_de","name":"German","nativeName":"Deutsch","language":{"id":52,"name":"German","nativeName":"Deutsch","languageCode":"de"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":14,"locale":"zh_cn","name":"Chinese (Simplified)","nativeName":"中文(简体)","language":{"id":30,"name":"Chinese (Simplified)","nativeName":"简体中文","languageCode":"zh-hans"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":15,"locale":"zh_tw","name":"Chinese (Traditional)","nativeName":"中文(繁體)","language":{"id":189,"name":"Chinese (Traditional)","nativeName":"繁體中文","languageCode":"zh-hant"}},"isEnabledForFullExperience":True,"isEnabledForSignupAndLogin":True,"isEnabledForInGameUgc":True},{"locale":{"id":16,"locale":"bg_bg","name":"Bulgarian","nativeName":"Български","language":{"id":24,"name":"Bulgarian","nativeName":"български език","languageCode":"bg"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":17,"locale":"bn_bd","name":"Bengali","nativeName":"বাংলা","language":{"id":19,"name":"Bengali","nativeName":"বাংলা","languageCode":"bn"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":18,"locale":"cs_cz","name":"Czech","nativeName":"Čeština","language":{"id":36,"name":"Czech","nativeName":"čeština","languageCode":"cs"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":19,"locale":"da_dk","name":"Danish","nativeName":"Dansk","language":{"id":37,"name":"Danish","nativeName":"dansk","languageCode":"da"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":20,"locale":"el_gr","name":"Greek","nativeName":"Ελληνικά","language":{"id":53,"name":"Greek","nativeName":"ελληνικά","languageCode":"el"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":21,"locale":"et_ee","name":"Estonian","nativeName":"Eesti","language":{"id":43,"name":"Estonian","nativeName":"eesti, eesti keel","languageCode":"et"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":22,"locale":"fi_fi","name":"Finnish","nativeName":"Suomi","language":{"id":47,"name":"Finnish","nativeName":"suomi","languageCode":"fi"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":23,"locale":"hi_in","name":"Hindi","nativeName":"हिन्दी","language":{"id":60,"name":"Hindi","nativeName":"हिन्दी, हिंदी","languageCode":"hi"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":24,"locale":"hr_hr","name":"Croatian","nativeName":"Hrvatski","language":{"id":35,"name":"Croatian","nativeName":"hrvatski jezik","languageCode":"hr"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":25,"locale":"hu_hu","name":"Hungarian","nativeName":"Magyar","language":{"id":62,"name":"Hungarian","nativeName":"magyar","languageCode":"hu"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":26,"locale":"ka_ge","name":"Georgian","nativeName":"ქართული","language":{"id":51,"name":"Georgian","nativeName":"ქართული","languageCode":"ka"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":27,"locale":"kk_kz","name":"Kazakh","nativeName":"Қазақ Тілі","language":{"id":79,"name":"Kazakh","nativeName":"қазақ тілі","languageCode":"kk"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":28,"locale":"km_kh","name":"Khmer","nativeName":"ភាសាខ្មែរ","language":{"id":188,"name":"Khmer","nativeName":"ភាសាខ្មែរ","languageCode":"km"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":29,"locale":"lt_lt","name":"Lithuanian","nativeName":"Lietuvių","language":{"id":95,"name":"Lithuanian","nativeName":"lietuvių kalba","languageCode":"lt"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":30,"locale":"lv_lv","name":"Latvian","nativeName":"Latviešu","language":{"id":97,"name":"Latvian","nativeName":"Latviešu Valoda","languageCode":"lv"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":31,"locale":"ms_my","name":"Malay","nativeName":"Bahasa Melayu","language":{"id":101,"name":"Malay","nativeName":"بهاس ملايو‎","languageCode":"ms"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":32,"locale":"my_mm","name":"Burmese","nativeName":"ဗမာစာ","language":{"id":25,"name":"Burmese","nativeName":"ဗမာစာ","languageCode":"my"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":33,"locale":"nb_no","name":"Bokmal","nativeName":"Bokmål","language":{"id":113,"name":"Bokmal","nativeName":"Norsk Bokmål","languageCode":"nb"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":34,"locale":"nl_nl","name":"Dutch","nativeName":"Nederlands","language":{"id":39,"name":"Dutch","nativeName":"Nederlands","languageCode":"nl"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":35,"locale":"fil_ph","name":"Filipino","nativeName":"Filipino","language":{"id":190,"name":"Filipino","nativeName":"Filipino","languageCode":"fil"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":36,"locale":"pl_pl","name":"Polish","nativeName":"Polski","language":{"id":126,"name":"Polish","nativeName":"Język Polski","languageCode":"pl"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":37,"locale":"ro_ro","name":"Romanian","nativeName":"Română","language":{"id":132,"name":"Romanian","nativeName":"Română","languageCode":"ro"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":38,"locale":"uk_ua","name":"Ukrainian","nativeName":"Yкраїньска","language":{"id":169,"name":"Ukrainian","nativeName":"Українська","languageCode":"uk"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":39,"locale":"si_lk","name":"Sinhala","nativeName":"සිංහල","language":{"id":143,"name":"Sinhala","nativeName":"සිංහල","languageCode":"si"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":40,"locale":"sk_sk","name":"Slovak","nativeName":"Slovenčina","language":{"id":144,"name":"Slovak","nativeName":"Slovenčina","languageCode":"sk"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":41,"locale":"sl_sl","name":"Slovenian","nativeName":"Slovenski","language":{"id":145,"name":"Slovenian","nativeName":"Slovenščina","languageCode":"sl"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":42,"locale":"sq_al","name":"Albanian","nativeName":"Shqipe","language":{"id":5,"name":"Albanian","nativeName":"Shqip","languageCode":"sq"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":43,"locale":"bs_ba","name":"Bosnian","nativeName":"Босански","language":{"id":22,"name":"Bosnian","nativeName":"bosanski jezik","languageCode":"bs"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":44,"locale":"sr_rs","name":"Serbian","nativeName":"Cрпски","language":{"id":140,"name":"Serbian","nativeName":"српски језик","languageCode":"sr"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True},{"locale":{"id":45,"locale":"sv_se","name":"Swedish","nativeName":"Svenska","language":{"id":152,"name":"Swedish","nativeName":"Svenska","languageCode":"sv"}},"isEnabledForFullExperience":False,"isEnabledForSignupAndLogin":False,"isEnabledForInGameUgc":True}]}) + +@ClientInfo.route("/v2/universes//configuration", methods=["GET"]) +def GetUniverseConfig( universeid : int ): + return jsonify({ + "allowPrivateServers": False, + "privateServerPrice": 0, + "id": universeid, + "name": "MrGrey", + "universeAvatarType": "PlayerChoice", + "universeScaleType": "AllScales", + "universeAnimationType": "PlayerChoice", + "universeCollisionType": "OuterBox", + "universeBodyType": "Standard", + "universeJointPositioningType": "ArtistIntent", + "isArchived": False, + "isFriendsOnly": False, + "genre": "All", + "playableDevices": [ + "Computer", + "Phone", + "Tablet" + ], + "permissions": { + "IsThirdPartyTeleportAllowed": True, + "IsThirdPartyAssetAllowed": True, + "IsThirdPartyPurchaseAllowed": True + }, + "isForSale": False, + "price": 0, + "isStudioAccessToApisAllowed": True, + "privacyType": "Private" + }) + +@ClientInfo.route("/universal-app-configuration/v1/behaviors/app-patch/content", methods=["GET"]) +def GetAppConfigContent(): + return jsonify({ + "SchemaVersion": "1", + "CanaryUserIds": [], + "CanaryPercentage": 0 + }) + +@ClientInfo.route("/debu-client/im-person-ate", methods=["POST"]) +@csrf.exempt +def im_person_ate(): + try: + if not config.DEBUG_MODE: + return abort(404) + except: + pass + + if not request.is_json: + return abort(404) + data = request.json + + try: + assert "userId" in data, "userId not found" + assert isinstance(data["userId"], int), "userId is not an integer" + except AssertionError as e: + return f"Validation failed: {str(e)}", 400 + + req_response = make_response("OK", 200) + req_response.headers["ImpData"] = auth.CreateToken( userid = data["userId"], expireIn = 60 * 60 * 24 * 365 ) + return req_response + + +@ClientInfo.route("/universal-app-configuration/v1/behaviors/app-policy/content", methods=["GET"]) +def GetAppPolicyContent(): + return jsonify({ + "ChatConversationHeaderGroupDetails": True, + "ChatHeaderSearch": True, + "ChatHeaderCreateChatGroup": True, + "ChatHeaderHomeButton": False, + "ChatHeaderNotifications": True, + "ChatPlayTogether": True, + "ChatShareGameToChatFromChat": True, + "ChatTapConversationThumbnail": True, + "ChatViewProfileOption": True, + "GamesDropDownList": True, + "UseNewDropDown": False, + "GameDetailsMorePage": True, + "GameDetailsShowGlobalCounters": True, + "GameDetailsPlayWithFriends": True, + "GameDetailsSubtitle": True, + "GameInfoList": True, + "GameInfoListDeveloper": True, + "GamePlaysAndRatings": True, + "GameInfoShowBadges": True, + "GameInfoShowCreated": True, + "GameInfoShowGamepasses": True, + "GameInfoShowGenre": True, + "GameInfoShowMaxPlayers": True, + "GameInfoShowServers": True, + "GameInfoShowUpdated": True, + "GameReportingDisabled": False, + "GamePlayerCounts": True, + "GiftCardsEnabled": False, + "Notifications": True, + "OfficialStoreEnabled": False, + "RecommendedGames": True, + "SearchBar": True, + "MorePageType": "More", + "AboutPageType": "About", + "FriendFinder": True, + "SocialLinks": True, + "SocialGroupLinks": True, + "EnableShareCaptureCTA": True, + "SiteMessageBanner": True, + "UseWidthBasedFormFactorRule": False, + "UseHomePageWithAvatarAndPanel": False, + "UseBottomBar": True, + "AvatarHeaderIcon": "LuaApp/icons/ic-back", + "AvatarEditorShowBuyRobuxOnTopBar": True, + "HomeIcon": "LuaApp/icons/ic-roblox-close", + "ShowYouTubeAgeAlert": False, + "GameDetailsShareButton": True, + "CatalogShareButton": True, + "AccountProviderName": "", + "InviteFromAccountProvider": False, + "ShareToAccountProvider": False, + "ShareToAccountProviderTimeout": 8, + "ShowDisplayName": True, + "GamesPageCreationCenterTitle": False, + "ShowShareTargetGameCreator": True, + "SearchAutoComplete": True, + "CatalogShow3dView": True, + "CatalogReportingDisabled": False, + "CatalogCommunityCreations": True, + "CatalogPremiumCategory": True, + "CatalogPremiumContent": True, + "ItemDetailsFullView": True, + "UseAvatarExperienceLandingPage": True, + "HomePageFriendSection": True, + "HomePageProfileLink": True, + "PurchasePromptIncludingWarning": False, + "ShowVideoThumbnails": True, + "VideoSharingTestContent": [], + "SystemBarPlacement": "Bottom", + "EnableInGameHomeIcon": False, + "UseExternalBrowserForDisclaimerLinks": False, + "ShowExitFullscreenToast": True, + "ExitFullscreenToastEnabled": False, + "UseLuobuAuthentication": False, + "CheckUserAgreementsUpdatedOnLogin": True, + "AddUserAgreementIdsToSignupRequest": True, + "UseOmniRecommendation": True, + "ShowAgeVerificationOverlayEnabled": False, + "ShouldShowGroupsTile": True, + "ShowVoiceUpsell": False, + "ProfileShareEnabled": True, + "ContactImporterEnabled": True, + "FriendCodeQrCodeScannerEnabled": False, + "RealNamesInDisplayNamesEnabled": False, + "CsatSurveyRestrictTextInput": False, + "RobloxCreatedItemsCreatedByLuobu": False, + "GameInfoShowChatFeatures": True, + "PlatformGroup": "Unknown", + "UsePhoneSearchDiscoverEntry": False, + "HomeLocalFeedItems": { + "UserInfo": 1, + "FriendCarousel": 2 + }, + "Routes": { + "auth": { + "connect": "v2/login", + "login": "v2/login", + "signup": "v2/signup" + } + }, + "PromotionalEmailsCheckboxEnabled": True, + "PromotionalEmailsOptInByDefault": False, + "EnablePremiumUserFeatures": True, + "CanShowUnifiedChatUpsell": True, + "RequireExplicitVoiceConsent": True, + "RequireExplicitAvatarVideoConsent": True, + "EnableVoiceReportAbuseMenu": True + }) + +@ClientInfo.route("/game/studio.ashx", methods=['GET']) +def studio(): + StudioLua = open("./app/files/Studio.lua", "r").read() + SignedStudioLua = signUTF8(StudioLua) + Response = make_response(SignedStudioLua) + Response.headers['Content-Type'] = 'text/plain' + return Response + +@ClientInfo.route("/game/gameserver2014.lua", methods=['GET']) +def gameserver_2014(): + RemoteAddress = get_remote_address() + GameserverObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameserverObj is None: + return jsonify({ + "success": False, + "message": "Unauthorized" + }), 401 + + PlaceId = request.args.get( key = "placeId", default = None, type = int ) + NetworkPort = request.args.get( key = "networkPort", default = None, type = int ) + CreatorId = request.args.get( key = "creatorId", default = None, type = int ) + CreatorType = request.args.get( key = "creatorType", default = None, type = int ) + JobId = request.args.get( key = "jobId", default = None, type = str ) + + if "UserRequest" in request.headers.get( key = "accesskey", default = "" ): + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + if PlaceId is None or NetworkPort is None or CreatorId is None or CreatorType is None or JobId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + PlaceObj : Place = Place.query.filter_by(placeid=PlaceId).first() + if PlaceObj is None: + return jsonify({ + "success": False, + "message": "Place not found" + }), 404 + + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({ + "success": False, + "message": "Universe not found" + }), 404 + + if UniverseObj.place_year != PlaceYear.Fourteen: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + #if not redis_controller.exists(f"gameserver2014lua:{PlaceId}:{JobId}"): + # return jsonify({ + # "success": False, + # "message": "Invalid request" + # }), 400 + #redis_controller.delete(f"gameserver2014lua:{PlaceId}:{JobId}") + + TempPlaceAccessKey = GenerateTempAuthToken( + AssetId = PlaceId, + Expiration = 180, + CreatorIP = get_remote_address() + ) + GameserverLua = open("./app/files/2014Gameserver.lua", "r").read() + GameserverLua = GameserverLua.format( + PlaceId = PlaceId, + NetworkPort = NetworkPort, + CreatorId = CreatorId, + CreatorType = CreatorType, + JobId = JobId, + AuthToken = GameserverObj.accessKey, + TempPlaceAccessKey = TempPlaceAccessKey + ) + + SignedGameserverLua = signUTF8(GameserverLua) + Response = make_response(SignedGameserverLua) + Response.headers['Content-Type'] = 'text/plain' + Response.set_cookie( + key = "Roblox-Place-Id", + value = str(PlaceId), + expires = 60 * 60 * 24, + domain = f".{config.BaseDomain}" + ) + Response.set_cookie( + key = "Temp-Place-Access-Key", + value = TempPlaceAccessKey, + expires = 180, + domain = f".{config.BaseDomain}" + ) + + logging.info("2014Gameserver.lua request from %s for place %d", RemoteAddress, PlaceId) + + return Response + +@ClientInfo.route("/game/gameserver2016.lua", methods=['GET']) +def gameserver_2016(): + RemoteAddress = get_remote_address() + GameserverObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameserverObj is None: + return jsonify({ + "success": False, + "message": "Unauthorized" + }), 401 + + GameserverLua = open("./app/files/2016Gameserver.lua", "r").read() + GameserverLua = f"-- Syntax 2016 Gameserver.lua | Signed on {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n" + GameserverLua + + SignedGameserverLua = signUTF8(GameserverLua) + Response = make_response(SignedGameserverLua) + Response.headers['Content-Type'] = 'text/plain' + + logging.info("2016Gameserver.lua request from %s", RemoteAddress) + + return Response + +@ClientInfo.route("/game/2014Join.lua", methods=['GET']) +def join_2014(): + placeId = request.args.get("placeId", default=None, type=int) + if placeId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + JoinLua = open("./app/files/2014Join.lua", "r").read() + JoinLua = JoinLua.format( + PlaceId = str(placeId) + ) + SignedJoinLua = signUTF8(JoinLua) + Response = make_response(SignedJoinLua) + Response.headers['Content-Type'] = 'text/plain' + return Response + +@ClientInfo.route("/v1/users//currency", methods=["GET"]) +@auth.authenticated_required_api +def get_user_currency( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != userId: + return jsonify({"success": False, "message": "Unauthorized"}),401 + UserRobuxBalance, UserTixBalance = economy.GetUserBalance(AuthenticatedUser) + return jsonify({ + "robux": UserRobuxBalance, + "tickets": UserTixBalance + }),200 + +#followings.roblox.com/v1/users//universes//status +@ClientInfo.route("/v1/users//universes//status", methods=["GET"]) +@auth.authenticated_required_api +def get_user_following_universe_status( userid : int, universeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id != userid: + return jsonify({"success": False, "message": "Unauthorized"}),401 + return jsonify({ + "UniverseId": universeid, + "UserId": userid, + "CanFollow": False, + "IsFollowing": False, + "FollowingCountByType": 0, + "FollowingLimitByType": 200 + }),200 + +#badges.roblox.com/v1/universes//badges +@ClientInfo.route("/v1/universes//badges", methods=["GET"]) +@auth.authenticated_required_api +def get_universe_badges( universeid : int ): + return jsonify({ + "data": [], + "previousPageCursor": None, + "nextPageCursor": None + }),200 diff --git a/app/routes/cryptomus_handler.py b/app/routes/cryptomus_handler.py new file mode 100644 index 0000000..44f97bc --- /dev/null +++ b/app/routes/cryptomus_handler.py @@ -0,0 +1,383 @@ +import base64 +import hashlib +import requests +import json +import string +import random +import logging +import redis_lock + +from flask import request, Blueprint, jsonify, make_response, abort, redirect, render_template +from functools import wraps +from datetime import datetime, timedelta +from flask_wtf.csrf import CSRFError +from config import Config + +from app.models.cryptomus_invoice import CryptomusInvoice +from app.models.user import User +from app.models.giftcard_key import GiftcardKey +from app.enums.GiftcardType import GiftcardType +from app.enums.CryptomusPaymentStatus import CryptomusPaymentStatus + +from app.util import auth +from app.extensions import get_remote_address, db, csrf, user_limiter, redis_controller, limiter + +config = Config() + +CryptomusHandler = Blueprint('CryptomusHandler', __name__, url_prefix='/cryptomus_service') + +StatusStringToEnum = { + "paid": CryptomusPaymentStatus.Paid, + "paid_over": CryptomusPaymentStatus.PaidOver, + "wrong_amount": CryptomusPaymentStatus.WrongAmount, + "process": CryptomusPaymentStatus.Process, + "confirm_check": CryptomusPaymentStatus.ConfirmCheck, + "wrong_amount_waiting": CryptomusPaymentStatus.WrongAmountWaiting, + "check": CryptomusPaymentStatus.Check, + "fail": CryptomusPaymentStatus.Fail, + "cancel": CryptomusPaymentStatus.Cancel, + "system_fail": CryptomusPaymentStatus.SystemFail, + "refund_process": CryptomusPaymentStatus.RefundProcess, + "refund_fail": CryptomusPaymentStatus.RefundFail, + "refund_paid": CryptomusPaymentStatus.RefundPaid, + "locked": CryptomusPaymentStatus.Locked +} + +def GenerateSignature( PayloadData : str = "" ) -> str: + """ + Generates a signature for the given payload data + + :param PayloadData: The payload data to sign + + :returns: str + """ + assert isinstance( PayloadData, str ), "PayloadData must be a string" + + return hashlib.md5( + ( + base64.b64encode( PayloadData.encode( "utf-8" ) ).decode( "utf-8" ) + config.CRYPTOMUS_API_KEY + ).encode( "utf-8" ) + ).hexdigest() + +def VerifySignature( PayloadData : str, Signature : str ) -> bool: + """ + Verifies the signature of the given payload data + + :param PayloadData: The payload data to verify + :param Signature: The signature to verify + + :returns: bool + """ + assert isinstance( PayloadData, str ), "PayloadData must be a string" + assert isinstance( Signature, str ), "Signature must be a string" + + return GenerateSignature( PayloadData ) == Signature + +def PerformRequest( Endpoint : str = "/", RequestMethod : str = "GET", PayloadData : dict | list | None = None, RequestTimeout : int = 20 ) -> requests.Response: + """ + Performs a request to the Cryptomus API + + :param Endpoint: The endpoint to send the request to + :param RequestMethod: The request method to use + :param PayloadData: The payload data to send with the request on POST requests + :param RequestTimeout: The amount of time before the request times out + + :returns: requests.Response + """ + + assert isinstance( Endpoint, str ), "Endpoint must be a string" + assert isinstance( RequestMethod, str ), "RequestMethod must be a string" + assert RequestMethod in ["GET", "POST"], "RequestMethod must be either GET or POST" + assert isinstance( PayloadData, (dict, list, type(None)) ), "PayloadData must be a dictionary, list or None" + assert isinstance( RequestTimeout, int ), "RequestTimeout must be an integer" + + headers = { + "Content-Type": "application/json", + "merchant": config.CRYPTOMUS_MERCHANT_ID, + } + + if RequestMethod == "GET": + headers.update({ + "sign": GenerateSignature() + }) + return requests.get( + url = f"{config.CRYPTOMUS_API_BASEURL}{Endpoint}", + headers = headers, + timeout = RequestTimeout + ) + else: + headers.update({ + "sign": GenerateSignature( json.dumps( PayloadData ) ) + }) + return requests.post( + url = f"{config.CRYPTOMUS_API_BASEURL}{Endpoint}", + headers = headers, + data = json.dumps( PayloadData ), + timeout = RequestTimeout + ) + +def CryptomusSignatureRequired(f): + """ + Decorator to require a valid Cryptomus signature for a request + """ + @wraps(f) + def decorated_function(*args, **kwargs): + if get_remote_address() != "91.227.144.54": + logging.warning(f"cryptomus_handler > CryptomusSignatureRequired > Invalid remote address: {get_remote_address()}") + abort(404) + + if not request.is_json: + logging.warning(f"cryptomus_handler > CryptomusSignatureRequired > Request is not JSON") + abort(400) + PayloadData = request.get_json() + if "sign" not in PayloadData: + logging.warning(f"cryptomus_handler > CryptomusSignatureRequired > sign not found in payload") + abort(400) + # PayloadSignature = PayloadData["sign"] + # del PayloadData["sign"] + # if not VerifySignature( json.dumps( PayloadData ), PayloadSignature ): + # logging.warning(f"cryptomus_handler > CryptomusSignatureRequired > Invalid signature") + # abort(400) + + return f(*args, **kwargs) + return decorated_function + +def GenerateInvoiceID(): + """ + Generates a new invoice ID + + :returns: str + """ + + NewInvoiceID = ''.join(random.choices(string.ascii_uppercase + string.digits, k=64)) + + if CryptomusInvoice.query.filter_by( id = NewInvoiceID ).first() is not None: + # This will never happen, but we are handling money here so we need to be sure + return GenerateInvoiceID() + + return NewInvoiceID + +def ConvertStringStatusToEnum( Status : str ) -> CryptomusPaymentStatus: + """ + Converts a string status to a CryptomusPaymentStatus enum + + :param Status: The status to convert + + :returns: CryptomusPaymentStatus + """ + + assert Status in StatusStringToEnum, "Invalid status" + return StatusStringToEnum[Status] + +@CryptomusHandler.errorhandler( 429 ) +def RateLimitExceeded( e ): + """ + Rate limit exceeded error handler + """ + return jsonify({ "status": "error", "message": "Rate limit exceeded" }), 429 + +@CryptomusHandler.errorhandler( CSRFError ) +def CSRFError( e ): + """ + CSRF error handler + """ + return jsonify({ "status": "error", "message": "Invalid CSRF Token" }), 400 + +@CryptomusHandler.route("/invoice_status_callback/", methods=["POST"]) +@CryptomusSignatureRequired +@csrf.exempt +def InvoiceStatusCallback( invoice_id : str ): + """ + Callback for invoice status updates + + :param invoice_id: The invoice ID to update the status for + """ + + CryptomusInvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if CryptomusInvoiceObj is None: + logging.warning(f"cryptomus_handler > InvoiceStatusCallback > Invoice not found: {invoice_id}") + return jsonify({ "status": "error", "message": "Invoice not found" }), 404 + PayloadData = request.get_json() + + try: + assert isinstance( PayloadData, dict ), "PayloadData must be a dictionary" + assert "status" in PayloadData, "Status not found in payload" + assert "payment_amount_usd" in PayloadData, "payment_amount_usd not found in payload" + assert "is_final" in PayloadData, "is_final not found in payload" + assert isinstance( PayloadData["payment_amount_usd"], str ), "payment_amount_usd must be a string" + assert isinstance( PayloadData["is_final"], bool ), "is_final must be a boolean" + assert PayloadData["status"] in StatusStringToEnum, "Invalid status" + except Exception as e: + logging.error(f"cryptomus_handler > InvoiceStatusCallback > Validation failed: {e}") + return jsonify({ "status": "error", "message": f"Validation failed: {e}" }), 500 + + CryptomusInvoiceObj.status = StatusStringToEnum[PayloadData["status"]] + CryptomusInvoiceObj.paid_amount_usd = float(PayloadData["payment_amount_usd"]) + CryptomusInvoiceObj.is_final = PayloadData["is_final"] + CryptomusInvoiceObj.updated_at = datetime.utcnow() + db.session.commit() + + def GenerateCode(): + Code = "" + for i in range(0, 5): + Chunk = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5)) + Code += Chunk + if i != 4: + Code += "-" + return Code + + if CryptomusInvoiceObj.status in [ CryptomusPaymentStatus.Paid, CryptomusPaymentStatus.PaidOver ] and CryptomusInvoiceObj.assigned_key is None and CryptomusInvoiceObj.extra_data == "membership": + NewGiftcardCode : str = GenerateCode() + NewGiftcardObj : GiftcardKey = GiftcardKey( + key = NewGiftcardCode, + type = GiftcardType.Outrageous_BuildersClub, + value = 1 + ) + db.session.add(NewGiftcardObj) + db.session.commit() + + CryptomusInvoiceObj.assigned_key = NewGiftcardObj.key + db.session.commit() + + return jsonify({ "status": "success" }), 200 + +@CryptomusHandler.route("/payment_cancelled/", methods=["GET"]) +@auth.authenticated_required +def PaymentCancelled( invoice_id : str ): + InvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if InvoiceObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if InvoiceObj.initiator_id != AuthenticatedUser.id: + return abort(404) + + return redirect(f"/cryptomus_service/view_payment/{invoice_id}") + +@CryptomusHandler.route("/payment_success/", methods=["GET"]) +@auth.authenticated_required +def PaymentSuccess( invoice_id : str ): + InvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if InvoiceObj is None: + return abort(404) + AuthenticatedUser : User = auth.GetCurrentUser() + if InvoiceObj.initiator_id != AuthenticatedUser.id: + return abort(404) + + return redirect(f"/cryptomus_service/view_payment/{invoice_id}") + +@CryptomusHandler.route("/create_payment/membership", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +@user_limiter.limit("5/minute") +def user_create_payment(): + AuthenticatedUser : User = auth.GetCurrentUser() + + try: + with redis_lock.Lock( + redis_client = redis_controller, + name = f"cryptomus_handler:user_create_payment:{AuthenticatedUser.id}", + expire = 30, + auto_renewal = True + ) as lock: + ActiveUserInvoices : int = CryptomusInvoice.query.filter_by( initiator_id = AuthenticatedUser.id ).filter( + CryptomusInvoice.created_at > datetime.now() - timedelta( minutes = 30 ) + ).count( + ) + if ActiveUserInvoices >= 10: + return jsonify({ "status": "error", "message": "You have created too many payments recently" }), 403 + + InvoiceOrderID = GenerateInvoiceID() + + try: + InvoiceCreateRequest = PerformRequest( + Endpoint = "/v1/payment", + RequestMethod = "POST", + PayloadData = { + "amount": "5", + "currency": "USD", + "order_id": InvoiceOrderID, + "url_return": f"{config.BaseURL}/cryptomus_service/payment_cancelled/{InvoiceOrderID}", + "url_callback": f"{config.BaseURL}/cryptomus_service/invoice_status_callback/{InvoiceOrderID}", + "url_success": f"{config.BaseURL}/cryptomus_service/payment_success/{InvoiceOrderID}", + "is_payment_multiple": True, + "lifetime": 60 * 60 * 12, # 12 hours + "additional_data": "membership" + } + ) + except requests.exceptions.RequestException as e: + logging.error(f"cryptomus_handler > user_create_payment > Request failed: {e}") + return jsonify({ "status": "error", "message": "Request failed" }), 500 + except Exception as e: + logging.error(f"cryptomus_handler > user_create_payment > Unknown error: {e}") + return jsonify({ "status": "error", "message": "Unknown error" }), 500 + + if InvoiceCreateRequest.status_code != 200: + logging.error(f"cryptomus_handler > user_create_payment > Request failed: {InvoiceCreateRequest.status_code}, {InvoiceCreateRequest.text}") + return jsonify({ "status": "error", "message": "Request failed" }), 500 + + InvoiceCreateResponse = InvoiceCreateRequest.json() + try: + assert "state" in InvoiceCreateResponse, "state not found in response" + assert isinstance( InvoiceCreateResponse["state"], int ), "state must be a integer" + assert "result" in InvoiceCreateResponse, "result not found in response" + assert isinstance( InvoiceCreateResponse["result"], dict ), "result must be a dictionary" + except AssertionError as e: + logging.error(f"cryptomus_handler > user_create_payment > Validation failed: {e}") + return jsonify({ "status": "error", "message": f"Request failed" }), 500 + + if InvoiceCreateResponse["state"] != 0: + logging.error(f"cryptomus_handler > user_create_payment > Request failed: {InvoiceCreateResponse['result']}") + return jsonify({ "status": "error", "message": "Request failed" }), 500 + + InvoiceResult : dict = InvoiceCreateResponse["result"] + NewCryptomusInvoice = CryptomusInvoice( + id = InvoiceOrderID, + cryptomus_invoice_id = InvoiceResult["uuid"], + initiator_id = AuthenticatedUser.id, + required_amount = 5, + currency = "USD", + status = ConvertStringStatusToEnum( InvoiceResult["status"] ), + expires_at = datetime.utcnow() + timedelta( hours = 12 ), + extra_data = "membership" + ) + db.session.add(NewCryptomusInvoice) + db.session.commit() + + return jsonify({ "status": "success", "invoice_id": InvoiceOrderID, "cryptomus_invoice_id": InvoiceResult["uuid"], "payment_url": InvoiceResult["url"] }), 200 + except AssertionError: + abort( 429 ) + +@CryptomusHandler.route("/pay_invoice/", methods=["GET"]) +@auth.authenticated_required +def pay_invoice( invoice_id : str ): + AuthenticatedUser : User = auth.GetCurrentUser() + InvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if InvoiceObj is None: + return abort(404) + if InvoiceObj.initiator_id != AuthenticatedUser.id: + return abort(404) + + return redirect( f"https://pay.cryptomus.com/pay/{InvoiceObj.cryptomus_invoice_id}" ) + +@CryptomusHandler.route("/view_payment/", methods=["GET"]) +@auth.authenticated_required +def view_payment( invoice_id : str ): + AuthenticatedUser : User = auth.GetCurrentUser() + InvoiceObj : CryptomusInvoice = CryptomusInvoice.query.filter_by( id = invoice_id ).first() + if InvoiceObj is None: + return abort(404) + if InvoiceObj.initiator_id != AuthenticatedUser.id: + return abort(404) + + return render_template("cryptomus/view_payment.html", InvoiceObj = InvoiceObj) + +@CryptomusHandler.route("/dashboard", methods=["GET"]) +@auth.authenticated_required +def dashboard(): + AuthenticatedUser : User = auth.GetCurrentUser() + PageNumber = max(request.args.get('page', default=1, type=int) , 1) + UserInvoices = CryptomusInvoice.query.filter_by( initiator_id = AuthenticatedUser.id ).order_by( CryptomusInvoice.created_at.desc() ).paginate( + page=PageNumber, per_page=15, error_out=False + ) + return render_template("cryptomus/dashboard.html", UserInvoices = UserInvoices) + diff --git a/app/routes/datastoreservice.py b/app/routes/datastoreservice.py new file mode 100644 index 0000000..b49d06b --- /dev/null +++ b/app/routes/datastoreservice.py @@ -0,0 +1,277 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +from app.models.gameservers import GameServer +from app.models.place_ordered_datastore import PlaceOrderedDatastore +from app.models.place_datastore import PlaceDatastore +from app.models.asset import Asset +from app.models.universe import Universe +from app.models.place import Place +from app.enums.AssetType import AssetType +from app.extensions import get_remote_address, db, redis_controller, csrf +from functools import wraps + +DataStoreRoute = Blueprint('datastore', __name__) + +def GameServerRequired(f): + @wraps(f) + def decorated_function(*args, **kwargs): + RequestIP = get_remote_address() + if RequestIP is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + server : GameServer = GameServer.query.filter_by(serverIP=RequestIP).first() + if server is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + ServerAccessKey = request.headers.get("AccessKey", default = None, type = str) + if ServerAccessKey is None or ServerAccessKey != server.accessKey: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + return f(*args, **kwargs) + return decorated_function + +@DataStoreRoute.route("/persistence/getSortedValues", methods=["POST"]) +@csrf.exempt +@GameServerRequired +def getSortedValues(): + placeId : int = request.args.get("placeId", default=None, type=int) + dataType : str = request.args.get("type", default=None, type=str) + scope : str = request.args.get("scope", default="global", type=str) + pageSize : int = request.args.get("pageSize", default=50, type=int) + exclusiveStartKey : str = request.args.get("exclusiveStartKey", default=None, type=int) # I have no idea how Roblox uses this, but I am going to use it as a page number with pagination + key : str = request.args.get("key", default=None, type=str) + ascending : bool = request.args.get("ascending", default="False", type=str) == "True" + inclusiveMinValue : int = request.args.get("inclusiveMinValue", default=None, type=int) + exclusiveMaxValue : int = request.args.get("inclusiveMaxValue", default=None, type=int) + + PlaceObj : Place = Place.query.filter_by(placeid = placeId).first() + if PlaceObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + UniverseObj : Universe = Universe.query.filter_by(id = PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + + if pageSize == 0 or pageSize > 100: + return jsonify({"data":[], "message": "Page size is too large"}), 200 + if dataType != "sorted": + return jsonify({"data":[], "message": "Invalid data type"}), 200 + + if exclusiveStartKey is None: + exclusiveStartKey = 1 + else: + if exclusiveStartKey < 1: + return jsonify({"data":[], "message": "Invalid exclusive start key"}), 200 + + DataStoreObj = PlaceOrderedDatastore.query.filter_by( + universe_id = UniverseObj.id, + scope = scope, + key = key + ) + if inclusiveMinValue is not None: + DataStoreObj = DataStoreObj.filter(PlaceOrderedDatastore.value >= inclusiveMinValue) + if exclusiveMaxValue is not None: + DataStoreObj = DataStoreObj.filter(PlaceOrderedDatastore.value < exclusiveMaxValue) + DataStoreObj : list[PlaceOrderedDatastore] = DataStoreObj.order_by(PlaceOrderedDatastore.value.asc() if ascending else PlaceOrderedDatastore.value.desc()).paginate( page=exclusiveStartKey, per_page=pageSize, error_out=False ) + if DataStoreObj is None: + return jsonify({"Entries": [], "ExclusiveStartKey": None}), 200 + + AllEntries = [] + for entry in DataStoreObj.items: + AllEntries.append({ + "Target": entry.name, + "Value": entry.value + }) + + return jsonify({"data":{ + "Entries": AllEntries, + "ExclusiveStartKey": str(DataStoreObj.next_num) if DataStoreObj.has_next else None + }}) # TODO: Implement + +@DataStoreRoute.route("/persistence/set", methods=["POST"]) +@csrf.exempt +@GameServerRequired +def setKey(): + placeId : int = request.args.get("placeId", default=None, type=int) + dataType : str = request.args.get("type", default=None, type=str) + scope : str = request.args.get("scope", default="global", type=str) + key : str = request.args.get("key", default=None, type=str) + target : str = request.args.get("target", default=None, type=str) + valueLength : int = request.args.get("valueLength", default=None, type=int) + + value : str = request.form.get("value", default=None, type=str) + + if valueLength is not None and not valueLength < 1024 * 1024 * 1: # 1MB + return jsonify({"success": False, "message": "Value too large"}),400 + + PlaceObj : Place = Place.query.filter_by(placeid = placeId).first() + if PlaceObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + UniverseObj : Universe = Universe.query.filter_by(id = PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + + if dataType == "standard": + DataStoreObj : PlaceDatastore = PlaceDatastore.query.filter_by( + universe_id = UniverseObj.id, + scope = scope, + key = key, + name = target + ).order_by(PlaceDatastore.updated_at.desc()).first() + if DataStoreObj is None: + DataStoreObj : PlaceDatastore = PlaceDatastore( + placeid = placeId, + universe_id = UniverseObj.id, + scope=scope, + key=key, + name=target, + value=value + ) + db.session.add(DataStoreObj) + else: + DataStoreObj.value = value + db.session.commit() + elif dataType == "sorted": + try: + value : int = int(value) + except: + return jsonify({"success": False, "message": "Value is not an integer"}), 400 + + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore.query.filter_by( + universe_id = UniverseObj.id, + scope=scope, + key=key, + name=target + ).order_by(PlaceOrderedDatastore.updated_at.desc()).first() + if DataStoreObj is None: + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore( + placeid = placeId, + universe_id = UniverseObj.id, + scope=scope, + key=key, + name=target, + value=value + ) + db.session.add(DataStoreObj) + else: + DataStoreObj.value = value + db.session.commit() + + return jsonify({"data":value}) # TODO: Implement + +@DataStoreRoute.route("/persistence/getV2", methods=["POST"]) +@DataStoreRoute.route("/persistence/getv2", methods=["POST"]) +@csrf.exempt +@GameServerRequired +def getv2(): + placeId : int = request.args.get("placeId", default=None, type=int) + dataType : str = request.args.get("type", default=None, type=str) + scope : str = request.args.get("scope", default="global", type=str) + + PlaceObj : Place = Place.query.filter_by(placeid = placeId).first() + if PlaceObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + UniverseObj : Universe = Universe.query.filter_by(id = PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + + dataBeingRequested = [] + + StartingCount = 0 + while True: + ReqScope : str = request.form.get(f"qkeys[{str(StartingCount)}].scope", default=None, type=str) + if ReqScope is None: + break + Target : str = request.form.get(f"qkeys[{str(StartingCount)}].target", default=None, type=str) + DataStoreName : str = request.form.get(f"qkeys[{str(StartingCount)}].key", default=None, type=str) + if DataStoreName is None or Target is None or ReqScope is None: + break + dataBeingRequested.append({"Scope": ReqScope, "Target": Target, "Key": DataStoreName}) + StartingCount += 1 + if len(dataBeingRequested) == 0: + return jsonify({"data":[], "message": "No data being requested"}), 200 + + ReturnData = [] + if dataType == 'standard': + for targetReq in dataBeingRequested: + DataStoreObj : PlaceDatastore = PlaceDatastore.query.filter_by(universe_id = UniverseObj.id, scope=targetReq["Scope"], key=targetReq["Key"], name=targetReq["Target"]).order_by(PlaceDatastore.updated_at.desc()).first() + if DataStoreObj is not None: + ReturnData.append({ + "Value": DataStoreObj.value, + "Scope": DataStoreObj.scope, + "Key": DataStoreObj.key, + "Target": DataStoreObj.name + }) + elif dataType == 'sorted': + for targetReq in dataBeingRequested: + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore.query.filter_by(universe_id = UniverseObj.id, scope=targetReq["Scope"], key=targetReq["Key"], name=targetReq["Target"]).order_by(PlaceOrderedDatastore.updated_at.desc()).first() + if DataStoreObj is not None: + ReturnData.append({ + "Value": str(DataStoreObj.value), + "Scope": DataStoreObj.scope, + "Key": DataStoreObj.key, + "Target": DataStoreObj.name + }) + + return jsonify({"data":ReturnData}) + +@DataStoreRoute.route("/persistence/increment", methods=["POST"]) +@csrf.exempt +@GameServerRequired +def increment(): + placeId : int = request.args.get("placeId", default=None, type=int) + key : str = request.args.get("key", default=None, type=str) + dataType : str = request.args.get("type", default=None, type=str) + scope : str = request.args.get("scope", default="global", type=str) + target : str = request.args.get("target", default=None, type=str) + value : int = request.args.get("value", default=None, type=int) + + PlaceObj : Place = Place.query.filter_by(placeid = placeId).first() + if PlaceObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + UniverseObj : Universe = Universe.query.filter_by(id = PlaceObj.parent_universe_id).first() + if UniverseObj is None: + return jsonify({"data":[], "message": "Place does not exist"}), 200 + + if dataType == "standard": + DataStoreObj : PlaceDatastore = PlaceDatastore.query.filter_by( + universe_id=UniverseObj.id, + scope=scope, + key=key, + name=target + ).order_by(PlaceDatastore.updated_at.desc()).first() + if DataStoreObj is None: + DataStoreObj : PlaceDatastore = PlaceDatastore( + placeid = placeId, + universe_id=UniverseObj.id, + scope=scope, + key=key, + name=target, + value=str(value) + ) + db.session.add(DataStoreObj) + else: + try: + DataStoreObj.value = str(int(DataStoreObj.value) + value) + except: + return jsonify({"data":[], "message": "Value is not an integer"}), 200 + db.session.commit() + elif dataType == "sorted": + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore.query.filter_by( + universe_id=UniverseObj.id, + scope=scope, + key=key, + name=target + ).order_by(PlaceOrderedDatastore.updated_at.desc()).first() + if DataStoreObj is None: + DataStoreObj : PlaceOrderedDatastore = PlaceOrderedDatastore( + placeid = placeId, + universe_id=UniverseObj.id, + scope=scope, + key=key, + name=target, + value=value + ) + db.session.add(DataStoreObj) + else: + DataStoreObj.value += value # PlaceOrderedDatastore values should always be integers + + return jsonify({"data":value}) \ No newline at end of file diff --git a/app/routes/discord_internal.py b/app/routes/discord_internal.py new file mode 100644 index 0000000..0e2f2a0 --- /dev/null +++ b/app/routes/discord_internal.py @@ -0,0 +1,294 @@ +""" + All routes inside here is used to communicate internally with our Discord Bot. +""" + +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.extensions import csrf, redis_controller, get_remote_address +from sqlalchemy import func +from config import Config +from app.models.user import User +from app.models.asset import Asset +from app.models.linked_discord import LinkedDiscord +from app.models.asset_rap import AssetRap +from app.models.placeserver_players import PlaceServerPlayer +from app.enums.MembershipType import MembershipType +from app.services.economy import GetAssetRap +from app.util.membership import GetUserMembership, GiveUserMembership +import datetime +import time +import logging + +DiscordInternal = Blueprint('discord_internal', __name__, url_prefix='/internal/discord_bot') + +@DiscordInternal.before_request +def before_request(): + AuthorizationToken = request.headers.get("InternalAuthorizationKey", default=None, type=str) + if AuthorizationToken != Config.DISCORD_BOT_AUTHTOKEN: + logging.warning(f"Discord Bot Internal API: Unauthorized request from {get_remote_address()}, invalid auth token") + return abort(404) + UserAgent = request.headers.get("User-Agent", default=None, type=str) + if UserAgent != "SyntaxBot/1.0": + logging.warning(f"Discord Bot Internal API: Unauthorized request from {get_remote_address()}, invalid user agent") + return abort(404) + RequesterAddress = get_remote_address() + if RequesterAddress not in Config.DISCORD_BOT_AUTHORISED_IPS: + logging.warning(f"Discord Bot Internal API: Unauthorized request from {RequesterAddress}, not in authorised IP list") + return abort(404) + +def GetUserFromId( UserObj : User | int ) -> User | None: + """ + Returns a User object from a User ID. + """ + if isinstance(UserObj, User): + return UserObj + else: + TargetUser : User | None = User.query.filter_by(id=UserObj).first() + if TargetUser is None: + raise Exception("User does not exist.") + return TargetUser + +def ReturnUserObject( UserObj : User ) -> dict: + return { + "id": UserObj.id, + "username": UserObj.username, + "last_online": time.mktime(UserObj.lastonline.timetuple()), + "created_at": time.mktime(UserObj.created.timetuple()), + "description": UserObj.description, + "membership": GetUserMembership(UserObj, changeToString=True) + } + +def ReturnItemObject( AssetObj : Asset ) -> dict: + return { + "id": AssetObj.id, + "name": AssetObj.name, + "description": AssetObj.description, + "asset_type": AssetObj.asset_type.name, + "creator": ReturnUserObject(GetUserFromId(AssetObj.creator_id)) if AssetObj.creator_type == 0 else None, + "creator_type": AssetObj.creator_type, + "created_at": time.mktime(AssetObj.created_at.timetuple()), + "updated_at": time.mktime(AssetObj.updated_at.timetuple()), + "is_limited": AssetObj.is_limited, + "is_limited_unique": AssetObj.is_limited_unique, + "is_for_sale": AssetObj.is_for_sale, + "asset_rap": GetAssetRap(AssetObj.id) if AssetObj.is_limited and not AssetObj.is_for_sale else None, + "price_robux": AssetObj.price_robux, + "price_tickets": AssetObj.price_tix, + "sales": AssetObj.sale_count + } + +@DiscordInternal.route("/UsernameLookup", methods=['GET']) +def UsernameLookup(): + Username = request.args.get("username", default=None, type=str) + if Username is None: + return jsonify({ + "success": False, + "message": "Invalid username" + }) + UserObject : User = User.query.filter(func.lower(User.username) == func.lower(Username)).first() + if UserObject is None: + return jsonify({ + "success": False, + "message": "User not found" + }) + if UserObject.accountstatus in [3,4]: + return jsonify({ + "success": False, + "message": "User not found" + }) + + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObject) + }) + +@DiscordInternal.route("/UseridLookup", methods=['GET']) +def UseridLookup(): + Userid = request.args.get("userid", default=None, type=int) + if Userid is None: + return jsonify({ + "success": False, + "message": "Invalid userid" + }) + UserObject : User = User.query.filter_by(id=Userid).first() + if UserObject is None: + return jsonify({ + "success": False, + "message": "User not found" + }) + if UserObject.accountstatus in [3,4]: + return jsonify({ + "success": False, + "message": "User not found" + }) + + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObject) + }) + +@DiscordInternal.route("/ItemLookup", methods=['GET']) +def ItemLookup(): + AssetId = request.args.get("itemid", default=None, type=int) + if AssetId is None: + return jsonify({ + "success": False, + "message": "Invalid itemid" + }) + AssetObject : Asset = Asset.query.filter_by(id=AssetId).first() + if AssetObject is None: + return jsonify({ + "success": False, + "message": "Item not found" + }) + if AssetObject.asset_type.value not in [2, 8, 11, 12, 17, 18, 19, 27, 28, 29, 30, 31, 32, 41, 42, 43, 44, 45, 46, 47]: + return jsonify({ + "success": False, + "message": "Item not found" + }) + return jsonify({ + "success": True, + "message": "", + "data": ReturnItemObject(AssetObject) + }) + +@DiscordInternal.route("/UserLookupByDiscordId", methods=['GET']) +def UserLookupByDiscordId(): + DiscordId = request.args.get("discordid", default=None, type=int) + if DiscordId is None: + return jsonify({ + "success": False, + "message": "Invalid discordid" + }) + LinkedDiscordObject : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=DiscordId).first() + if LinkedDiscordObject is None: + return jsonify({ + "success": False, + "message": "User does not have an account linked to their discord account" + }) + UserObject : User = User.query.filter_by(id=LinkedDiscordObject.user_id).first() + if UserObject is None: + return jsonify({ + "success": False, + "message": "User not found" + }) + if UserObject.accountstatus in [3,4]: + return jsonify({ + "success": False, + "message": "User not found" + }) + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObject) + }) + +@DiscordInternal.route("/AwardUserTurbo", methods=['POST']) +@csrf.exempt +def AwardUserTurbo(): + DiscordId = request.args.get("discordid", default=None, type=int) + if DiscordId is None: + return jsonify({ + "success": False, + "message": "Invalid discordid" + }) + LinkedDiscordObject : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=DiscordId).first() + if LinkedDiscordObject is None: + return jsonify({ + "success": False, + "message": "User does not have an account linked to their discord account" + }) + UserObject : User = User.query.filter_by(id=LinkedDiscordObject.user_id).first() + if UserObject is None: + return jsonify({ + "success": False, + "message": "User not found" + }) + if UserObject.accountstatus in [3,4]: + return jsonify({ + "success": False, + "message": "User is currently moderated" + }) + UserMembershipStatus : MembershipType = GetUserMembership(UserObject) + if UserMembershipStatus == MembershipType.TurboBuildersClub: + return jsonify({ + "success": False, + "message": "User already has Turbo Builders Club" + }) + if UserMembershipStatus == MembershipType.OutrageousBuildersClub: + return jsonify({ + "success": False, + "message": "User has Outrageous Builders Club" + }) + + if redis_controller.get(f"discord_bot_award_turbo_{UserObject.id}") is not None: + return jsonify({ + "success": False, + "message": "Discord user has recenetly been awarded Turbo Builders Club" + }) + GiveUserMembership(UserObject, MembershipType.TurboBuildersClub, expiration=datetime.timedelta(days=14)) + redis_controller.set(f"discord_bot_award_turbo_{UserObject.id}", "1", ex=60*60*24*14) + return jsonify({ + "success": True, + "message": "" + }) + +@DiscordInternal.route("/Ping", methods=['GET']) +def Ping(): + return jsonify({ + "success": True, + "message": "Pong!" + }) + +@DiscordInternal.route("/VerifyOBCUsers", methods=["POST"]) +@csrf.exempt +def VerifyOBCUsers(): + JSONPayload = request.get_json() + if JSONPayload is None: + return jsonify({ + "success": False, + "message": "Invalid JSON payload" + }) + if "users" not in JSONPayload: + return jsonify({ + "success": False, + "message": "Invalid JSON payload" + }) + + BadUsersIds : list[int] = [] + for UserId in JSONPayload["users"]: + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by(discord_id=UserId).first() + if LinkedDiscordObj is None: + BadUsersIds.append(UserId) + continue + + UserObj : User = User.query.filter_by(id=LinkedDiscordObj.user_id).first() + if UserObj is None: + BadUsersIds.append(UserId) + continue + + UserMembershipType : MembershipType = GetUserMembership(UserObj) + if UserMembershipType != MembershipType.OutrageousBuildersClub: + BadUsersIds.append(UserId) + continue + + return jsonify({ + "success": True, + "message": "", + "bad_users": BadUsersIds + }) + +@DiscordInternal.route("/GetSiteStats", methods=["GET"]) +def SiteStats(): + UsersOnline = User.query.filter(User.lastonline > (datetime.datetime.utcnow() - datetime.timedelta(minutes=1))).count() + UsersIngame = PlaceServerPlayer.query.count() + + return jsonify({ + "success": True, + "message": "", + "data": { + "users_online": UsersOnline, + "users_ingame": UsersIngame + } + }) \ No newline at end of file diff --git a/app/routes/discourse_sso.py b/app/routes/discourse_sso.py new file mode 100644 index 0000000..3282c4e --- /dev/null +++ b/app/routes/discourse_sso.py @@ -0,0 +1,96 @@ +from flask import Blueprint, render_template, redirect, url_for, request, flash, jsonify, session, abort +from config import Config +from app.extensions import db +from app.util import auth +from app.models.user import User +from app.models.user_email import UserEmail + +import hashlib +import hmac +import base64 +import urllib.parse +import time +import logging + +config = Config() +discourse_sso = Blueprint("discourse_sso", __name__, url_prefix="/discourse") + +@discourse_sso.before_request +def VerifyUserAgent(): + if not config.DISCOURSE_SSO_ENABLED: + return abort(404) + +def VerifyPayloadSignature( Payload : str, Signature : str ) -> bool: + """ + Verifies the payload signature + """ + return hmac.compare_digest( + Signature, + hmac.new( + key = config.DISCOURSE_SECRET_KEY.encode("utf-8"), + msg = Payload.encode("utf-8"), + digestmod = hashlib.sha256 + ).hexdigest() + ) + +def SignPayload( Payload : str ) -> str: + """ + Signs the payload and returns the signature + """ + return hmac.new( + key = config.DISCOURSE_SECRET_KEY.encode("utf-8"), + msg = Payload.encode("utf-8"), + digestmod = hashlib.sha256 + ).hexdigest() + +@discourse_sso.route("/", methods=["GET"]) +@auth.authenticated_required +def DiscourseSSOIndex(): + return render_template("discourse/leaving-syntax.html", baseurl=config.DISCOURSE_FORUM_BASEURL) + +@discourse_sso.route("/sso", methods=["GET", "POST"]) +@auth.authenticated_required +def DiscourseSSO(): + SSOPayload : str = request.args.get("sso", default=None, type=str) + PayloadSignature : str = request.args.get("sig", default=None, type=str) + + if SSOPayload is None or PayloadSignature is None: + return abort(404) + isValidSignature = VerifyPayloadSignature(SSOPayload, PayloadSignature) + if not isValidSignature: + return abort(404) + Payload = urllib.parse.parse_qs(base64.b64decode(SSOPayload).decode("utf-8")) + if "nonce" not in Payload: + return abort(404) + nonce = Payload["nonce"][0] + if nonce is None: + return abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id=AuthenticatedUser.id, verified=True).first() + if UserEmailObj is None: + flash("You must have a verified email address to access the forums", "error") + return redirect(url_for("settings.settings_update_email")) + + if request.method == "GET": + return render_template("discourse/sso-confirm.html", baseurl=config.DISCOURSE_FORUM_BASEURL) + elif request.method == "POST": + payload = { + "nonce": nonce, + "email": f"SyntaxUser{AuthenticatedUser.id}@forum.syntax.eco", + "external_id": AuthenticatedUser.id, + "username": AuthenticatedUser.username, + "name": AuthenticatedUser.username, + "avatar_url": f"{config.BaseURL}/Thumbs/Head.ashx?x=420&y=420&userId={AuthenticatedUser.id}&rnd={time.time()}", + "avatar_force_update": "true", + "require_activation": "false", + "suppress_welcome_message": "true" + } + + payload = urllib.parse.urlencode(payload) + payload = base64.b64encode(payload.encode("utf-8")).decode("utf-8") + payloadSignature = SignPayload(payload) + + return redirect(f"{config.DISCOURSE_FORUM_BASEURL}/session/sso_login?sso={payload}&sig={payloadSignature}") + else: + return abort(404) \ No newline at end of file diff --git a/app/routes/fflagssettings.py b/app/routes/fflagssettings.py new file mode 100644 index 0000000..ad7ab2c --- /dev/null +++ b/app/routes/fflagssettings.py @@ -0,0 +1,68 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response +from app.models.fflag_group import FflagGroup +from app.models.fflag_value import FflagValue +from app.models.gameservers import GameServer +from app.extensions import redis_controller, get_remote_address +import json +import base64 + +FFlagRoute = Blueprint("fflag", __name__, url_prefix="/") + +def ClearCache( GroupId : int ): + redis_controller.delete("fflags_" + str(GroupId)) + GenerateFFlags(GroupId, True) + +def GenerateFFlags( GroupId : int, BypassCache : bool = False ) -> dict: + if not BypassCache: + CachedFFlags = redis_controller.get("fflags_" + str(GroupId)) + if CachedFFlags is not None: + return json.loads(CachedFFlags) + + FFlagValues = FflagValue.query.filter_by(group_id=GroupId).all() + if FFlagValues is None: + return jsonify({}),200 + + FinalData = {} + for FFlagValue in FFlagValues: + FinalData[FFlagValue.name] = str(base64.b64decode(FFlagValue.flag_value).decode('utf-8')) + + redis_controller.set("fflags_" + str(GroupId), json.dumps(FinalData), ex = 60 * 60) + return FinalData + +@FFlagRoute.route("/Setting/QuietGet/", methods=["GET"]) +@FFlagRoute.route("/Setting/QuietGet//", methods=["GET"]) +@FFlagRoute.route("/Setting/Get//", methods=["GET"]) +def get_fflag(group): + FFlagGroupObj : FflagGroup = FflagGroup.query.filter_by(name=group).first() + if FFlagGroupObj is None: + return 'Invalid request',400 + + if FFlagGroupObj.gameserver_only: + RequestingRemoteAddress = get_remote_address() + GameServerObj = GameServer.query.filter_by( serverIP = RequestingRemoteAddress ).first() + if GameServerObj is None: + return 'Invalid request',400 + + return jsonify(GenerateFFlags(FFlagGroupObj.group_id)),200 + +@FFlagRoute.route("/v1/settings/application", methods=["GET"]) +def fflag_application(): + applicationName : str = request.args.get(key="applicationName", default=None, type=str) + if applicationName is None: + return 'Invalid request',400 + applicationName = "application_" + applicationName + + FFlagGroupObj : FflagGroup = FflagGroup.query.filter_by(name=applicationName).first() + if FFlagGroupObj is None: + return 'Invalid request',400 + + if FFlagGroupObj.gameserver_only: + RequestingRemoteAddress = get_remote_address() + GameServerObj = GameServer.query.filter_by( serverIP = RequestingRemoteAddress ).first() + if GameServerObj is None: + return 'Invalid request',400 + + return jsonify({ + "applicationSettings": GenerateFFlags(FFlagGroupObj.group_id) + }),200 + diff --git a/app/routes/friendapi.py b/app/routes/friendapi.py new file mode 100644 index 0000000..16a2baf --- /dev/null +++ b/app/routes/friendapi.py @@ -0,0 +1,311 @@ +# friends.roblox.com + +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from app.util import auth, websiteFeatures, friends +from app.models.user import User +from app.models.friend_relationship import FriendRelationship +from app.models.friend_request import FriendRequest +from app.models.follow_relationship import FollowRelationship +from app.extensions import limiter, db, redis_controller, get_remote_address, csrf, user_limiter +from flask_wtf.csrf import CSRFError, generate_csrf +from sqlalchemy import or_ +from datetime import datetime, timedelta + +from app.services.user_relationships import followings + +FriendsAPIRoute = Blueprint('friendsapi', __name__, url_prefix="/") +csrf.exempt(FriendsAPIRoute) +@FriendsAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@FriendsAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@FriendsAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@FriendsAPIRoute.route('/v1/my/friends/count', methods=['GET']) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def GetFriendCount(): + AuthenticatedUser : User = auth.GetCurrentUser() + return jsonify( { "count": friends.GetFriendCount( AuthenticatedUser.id ) } ), 200 + +@FriendsAPIRoute.route('/v1/users//friends/count', methods=['GET']) +@limiter.limit("60/minute") +def GetFriendCountByUserId( userId : int ): + UserObj : User = User.query.filter_by( id = userId ).first() + if UserObj is None: + return jsonify( { "errors": [ { "code": 1, "message": "User not found" } ] } ), 404 + return jsonify( { "count": friends.GetFriendCount( userId ) } ), 200 + +@FriendsAPIRoute.route("/v1/user/friend-requests/count", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def GetMyFriendRequestsCount(): + AuthenticatedUser : User = auth.GetCurrentUser() + FriendRequestCount : int = max(FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id ).count(), 500) + return jsonify( { "count": FriendRequestCount } ), 200 + +@FriendsAPIRoute.route("/v1/users//friends", methods=["GET"]) +@limiter.limit("60/minute") +def get_user_friends( userid : int ): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRelationshipList : list[FriendRelationship] = FriendRelationship.query.filter(or_(FriendRelationship.user_id == userid, FriendRelationship.friend_id == userid)).all() + FriendList = [] + for FriendRelationshipObj in FriendRelationshipList: + FriendObj : User = User.query.filter_by(id=FriendRelationshipObj.user_id if FriendRelationshipObj.user_id != userid else FriendRelationshipObj.friend_id).first() + if FriendObj is None: + continue + FriendList.append({ + "isOnline": FriendObj.lastonline > datetime.utcnow() - timedelta(minutes=1), + "isDeleted": False, + "friendFrequentScore": 0, + "friendFrequentRank": 1, + "hasVerifiedBadge": False, + "description": FriendObj.description, + "created": FriendObj.created.isoformat(), + "isBanned": False, + "externalAppDisplayName": None, + "id": FriendObj.id, + "name": FriendObj.username, + "displayName": FriendObj.username + }) + + return jsonify({ + "data": FriendList + }) + +@FriendsAPIRoute.route("/v1/user/friend-requests/decline-all", methods=["POST"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def decline_all_friend_requests(): + AuthenticatedUser : User = auth.GetCurrentUser() + FriendRequestList : list[FriendRequest] = FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id ).all() + for FriendRequestObj in FriendRequestList: + db.session.delete( FriendRequestObj ) + db.session.commit() + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//unfriend", methods=["POST"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +@user_limiter.limit("60/minute") +def unfriend_user( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship( AuthenticatedUser.id, UserObj.id ) + if FriendRelationshipObj is not None: + db.session.delete( FriendRelationshipObj ) + db.session.commit() + + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//request-friendship", methods=["POST"]) +@limiter.limit("15/minute") +@auth.authenticated_required_api +@user_limiter.limit("15/minute") +def request_friendship( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + if userId == AuthenticatedUser.id: + return jsonify({ "errors": [{ "code": 7, "message": "The user cannot be friends with itself."}] }), 400 + if friends.GetFriendCount( AuthenticatedUser.id ) >= 200: + return jsonify({ "errors": [{ "code": 31, "message": "User with max friends sent friend request."}] }), 400 + if friends.IsFriends( AuthenticatedUser.id, UserObj.id ): + return jsonify({ "errors": [{ "code": 5, "message": "The target user is already a friend."}] }), 400 + + OtherFriendRequestObj : FriendRequest = FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id, requester_id = UserObj.id ).first() + if OtherFriendRequestObj is not None: + if friends.GetFriendCount( UserObj.id ) >= 200: + return jsonify({ "errors": [{ "code": 12, "message": "The target users friends limit has been exceeded."}] }), 400 + + db.session.delete( OtherFriendRequestObj ) + NewFriendRelationshipObj : FriendRelationship = FriendRelationship( user_id = AuthenticatedUser.id, friend_id = UserObj.id ) + db.session.add( NewFriendRelationshipObj ) + db.session.commit() + + return jsonify({ "success": True }), 200 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by( requestee_id = UserObj.id, requester_id = AuthenticatedUser.id ).first() + if FriendRequestObj is None: + FriendRequestObj = FriendRequest( requestee_id = UserObj.id, requester_id = AuthenticatedUser.id ) + db.session.add( FriendRequestObj ) + db.session.commit() + + return jsonify({ "success": True }), 200 + +@FriendsAPIRoute.route("/v1/users//accept-friend-request", methods=["POST"]) +@limiter.limit("30/minute") +@auth.authenticated_required_api +@user_limiter.limit("30/minute") +def accept_friend_request( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id, requester_id = UserObj.id ).first() + if FriendRequestObj is None: + return jsonify({ "errors": [{ "code": 10, "message": "The friend request does not exist."}] }), 400 + + if friends.GetFriendCount( AuthenticatedUser.id ) >= 200: + return jsonify({ "errors": [{ "code": 11, "message": "The current users friends limit has been exceeded."}] }), 400 + if friends.GetFriendCount( UserObj.id ) >= 200: + return jsonify({ "errors": [{ "code": 12, "message": "The target users friends limit has been exceeded."}] }), 400 + + db.session.delete( FriendRequestObj ) + NewFriendRelationshipObj : FriendRelationship = FriendRelationship( user_id = AuthenticatedUser.id, friend_id = UserObj.id ) + db.session.add( NewFriendRelationshipObj ) + db.session.commit() + + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//decline-friend-request", methods=["POST"]) +@limiter.limit("30/minute") +@auth.authenticated_required_api +@user_limiter.limit("30/minute") +def decline_friend_request( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by( requestee_id = AuthenticatedUser.id, requester_id = UserObj.id ).first() + if FriendRequestObj is None: + return jsonify({ "errors": [{ "code": 10, "message": "The friend request does not exist."}] }), 400 + + db.session.delete( FriendRequestObj ) + db.session.commit() + + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//followers/count", methods=["GET"]) +@limiter.limit("60/minute") +def get_user_followers_count( userId : int ): + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + return jsonify( { "count": followings.get_follower_count( requested_user = UserObj ) } ), 200 + +@FriendsAPIRoute.route("/v1/users//followings/count", methods=["GET"]) +@limiter.limit("60/minute") +def get_user_followings_count( userId : int ): + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + return jsonify( { "count": followings.get_following_count( requested_user = UserObj ) } ), 200 + +@FriendsAPIRoute.route("/v1/user/following-exists", methods=["POST"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def following_exists(): + AuthenticatedUser : User = auth.GetCurrentUser() + if not request.is_json: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + if "targetUserIds" not in request.json: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + + TargetUserIds : list[int] = request.json["targetUserIds"] + ResponseList = [] + + if len(TargetUserIds) > 100: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + + for TargetUserId in TargetUserIds: + if TargetUserId < 1: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + TargetUser : User = User.query.filter_by( id = TargetUserId ).first() + if TargetUser is None: + return jsonify({ "errors": [{ "code": 0, "message": "An invalid userId was passed in."}] }), 400 + + ResponseList.append({ + "isFollowing": followings.is_following( follower_user = AuthenticatedUser, followed_user = TargetUser ), + "isFollowed": followings.is_following( follower_user = TargetUser, followed_user = AuthenticatedUser ), + "userId": TargetUserId + }) + + return jsonify({ + "followings": ResponseList + }), 200 + +@FriendsAPIRoute.route("/v1/users//unfollow", methods=["POST"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +@user_limiter.limit("60/minute") +def unfollow_user( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + + try: + followings.unfollow_user( + current_follower = AuthenticatedUser, + followed_user = UserObj + ) + except followings.FollowingExceptions.UserNotFollowing: + return jsonify({}), 200 + except followings.FollowingExceptions.UserRateLimited: + return jsonify({ "errors": [{ "code": 9, "message": "The flood limit has been exceeded."}] }), 429 + except followings.FollowingExceptions.FollowingIsDisabled: + return jsonify({ "errors": [{ "code": 0, "message": "Following is disabled."}] }), 500 + + return jsonify({}), 200 + +@FriendsAPIRoute.route("/v1/users//follow", methods=["POST"]) +@limiter.limit("10/minute") +@auth.authenticated_required_api +@user_limiter.limit("10/minute") +def follow_user( userId : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({ "errors": [{ "code": 1, "message": "The target user is invalid or does not exist"}] }), 400 + if userId == AuthenticatedUser.id: + return jsonify({ "errors": [{ "code": 8, "message": "The user cannot follow itself."}] }), 400 + + try: + followings.follow_user( + follow_user = AuthenticatedUser, + followed_user = UserObj + ) + except followings.FollowingExceptions.AlreadyFollowing: + return jsonify({ "success": True }), 200 + except followings.FollowingExceptions.UserRateLimited: + return jsonify({ "errors": [{ "code": 9, "message": "The flood limit has been exceeded."}] }), 429 + except followings.FollowingExceptions.FollowingIsDisabled: + return jsonify({ "errors": [{ "code": 0, "message": "Following is disabled."}] }), 500 + + return jsonify({ "success": True }), 200 diff --git a/app/routes/gamejoin.py b/app/routes/gamejoin.py new file mode 100644 index 0000000..e08cabc --- /dev/null +++ b/app/routes/gamejoin.py @@ -0,0 +1,714 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, after_this_request, Response +from app.util import auth, websiteFeatures +from app.extensions import db, redis_controller, csrf, get_remote_address +import uuid +import requests +import time +from config import Config +import json +from datetime import datetime, timedelta +import random +import string +import logging +import base64 +import hashlib + +from app.models.user import User +from app.models.gameservers import GameServer +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.place import Place +from app.models.asset import Asset +from app.models.login_records import LoginRecord +from app.models.user_hwid_log import UserHWIDLog +from app.models.universe import Universe +from app.models.asset_version import AssetVersion +from app.enums.AssetType import AssetType +from app.enums.MembershipType import MembershipType +from app.enums.PlaceYear import PlaceYear +from app.services.gameserver_comm import perform_post +from app.util.membership import GetUserMembership +from app.util.signscript import signUTF8 +from app.util.assetversion import GetLatestAssetVersion +from app.routes.jobreporthandler import EvictPlayer +from app.routes.asset import GenerateTempAuthToken + +config = Config() + +class PlaceServerCooldownStart( Exception ): + pass +class NoAvailableGameServers( Exception ): + pass +class MissingData( Exception ): + pass +class UnsupportedPlaceYear( Exception ): + pass +class UnexpectedStatusCode( Exception ): + pass +class BadResponseData( Exception ): + pass +def CreateNewPlaceServer( placeId : int, reserved_server_access_code : str = None ) -> PlaceServer: + """ + Starts a new PlaceServer for the given placeId, raises appropriate exceptions if it fails + + :param placeId: The placeId to start a new PlaceServer for + :reserved_server_access_code: The reserved server access code to use, if None it will be a public server + + :return: PlaceServer object if successful + """ + CooldownKeyName : str = f"create_new_place_server:{placeId}:{reserved_server_access_code}" + if redis_controller.get(CooldownKeyName) is not None: + logging.debug(f"CreateNewPlaceServer -> Place {placeId} recently requested to create a new place server, skipping") + raise PlaceServerCooldownStart("") + redis_controller.setex(CooldownKeyName, 40, "1") + + SelectedGameServerObj : GameServer = GameServer.query.filter_by( + allowGameServerHost = True + ).filter( + GameServer.lastHeartbeat > datetime.utcnow() - timedelta(seconds=30) + ).order_by( + GameServer.RCCmemoryUsage.asc() + ).first() + + if SelectedGameServerObj is None: + logging.error(f"CreateNewPlaceServer -> Failed to find a available Gameserver to host Place {placeId}") + raise NoAvailableGameServers("") + + PlaceObj : Place = Place.query.filter_by( placeid = placeId ).first() + AssetObj : Asset = Asset.query.filter_by( id = placeId ).first() + + if PlaceObj is None or AssetObj is None: + logging.error(f"CreateNewPlaceServer -> Failed to find Place / Asset {placeId} in database") + raise MissingData("") + + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + if UniverseObj is None: + logging.error(f"CreateNewPlaceServer -> Failed to find Universe {PlaceObj.parent_universe_id} in database for Place {placeId}") + raise MissingData("") + + logging.info(f"CreateNewPlaceServer -> Attempting to start new place server for Place {PlaceObj.placeid}, Universe {UniverseObj.id} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), reserved_server_access_code: {reserved_server_access_code}") + + RequestSession = requests.Session() + RequestSession.headers.update({ + "Authorization": SelectedGameServerObj.accessKey + }) + + JSONOpenPayload = {} + GameOpenRoute = "Game" + JobId : str = str( uuid.uuid4() ) + CommApiKey : str = str( uuid.uuid4() ) + + LatestPlaceVersion : AssetVersion = GetLatestAssetVersion( AssetObj ) + + if UniverseObj.place_year == PlaceYear.Sixteen: + TempPlaceAuthorizationToken : str = GenerateTempAuthToken( placeId, Expiration = 200, CreatorIP = None ) + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": AssetObj.creator_type, + "SpecialAccessToken": TempPlaceAuthorizationToken, + "useNewLoadFile": False, + "loadfile_location": f"{config.BaseURL}/game/gameserver2016.lua", + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + elif UniverseObj.place_year == PlaceYear.Eighteen: + GameOpenRoute = "Game2018" + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": "User" if AssetObj.creator_type == 0 else "Group", + "jobid": JobId, + "apikey": CommApiKey, + "maxplayers": PlaceObj.maxplayers, + "address": SelectedGameServerObj.serverIP, + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + elif UniverseObj.place_year == PlaceYear.Twenty: + GameOpenRoute = "Game2020" + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": "User" if AssetObj.creator_type == 0 else "Group", + "jobid": JobId, + "apikey": CommApiKey, + "maxplayers": PlaceObj.maxplayers, + "address": SelectedGameServerObj.serverIP, + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + elif UniverseObj.place_year == PlaceYear.Fourteen: + GameOpenRoute = "Game2014" + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": AssetObj.creator_type, + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + elif UniverseObj.place_year == PlaceYear.TwentyOne: + GameOpenRoute = "Game2021" + JSONOpenPayload = { + "placeid": placeId, + "creatorId": AssetObj.creator_id, + "creatorType": "User" if AssetObj.creator_type == 0 else "Group", + "jobid": JobId, + "apikey": CommApiKey, + "maxplayers": PlaceObj.maxplayers, + "address": SelectedGameServerObj.serverIP, + "universeid": UniverseObj.id, + "place_version": LatestPlaceVersion.version + } + else: + logging.error(f"CreateNewPlaceServer -> Failed to start new place server for Place {placeId}, unsupported place year got {UniverseObj.place_year.name}") + raise UnsupportedPlaceYear(f"Year {UniverseObj.place_year.name} is not supported") + + if UniverseObj.place_year in [ PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.TwentyOne ]: + redis_controller.set(f"GameServerAccessKey:{CommApiKey}:{JobId}", "1", ex=60*60*24*2) + if UniverseObj.place_year in [ PlaceYear.Fourteen ]: + redis_controller.set(f"gameserver2014lua:{PlaceObj.placeid}:{JobId}", "1", ex=120) + + try: + OpenJobReq = perform_post( + TargetGameserver = SelectedGameServerObj, + Endpoint = GameOpenRoute, + JSONData = JSONOpenPayload, + RequestTimeout = 35 + ) + except requests.exceptions.Timeout: + logging.error(f"CreateNewPlaceServer -> Failed to start new place server for Place {placeId} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), open request timed out") + raise NoAvailableGameServers(f"Request timed out") + + if OpenJobReq.status_code != 200: + logging.error(f"CreateNewPlaceServer -> Failed to start new place server for Place {placeId} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), response: {OpenJobReq.content}") + raise UnexpectedStatusCode(f"Got status code {OpenJobReq.status_code} from Gameserver") + + OpenJobReqJSON = OpenJobReq.json() + if "jobid" not in OpenJobReqJSON or "port" not in OpenJobReqJSON: + logging.error(f"CreateNewPlaceServer -> Failed to start new place server for Place {placeId} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), missing 'port' or 'jobid' in JSON,response: {OpenJobReqJSON}") + raise BadResponseData(f"Missing 'port' or 'jobid' in JSON response") + redis_controller.set(f"place:{OpenJobReqJSON['jobid']}:origin", str(SelectedGameServerObj.serverId), ex=60*60*24*2) + PlaceServerObject = PlaceServer( + serveruuid = OpenJobReqJSON["jobid"], + originServerId = SelectedGameServerObj.serverId, + serverIP = SelectedGameServerObj.serverIP, + serverPort = OpenJobReqJSON["port"], + serverPlaceId = placeId, + maxPlayerCount = PlaceObj.maxplayers, + reservedServerAccessCode = reserved_server_access_code + ) + + db.session.add(PlaceServerObject) + db.session.commit() + logging.info(f"CreateNewPlaceServer -> Started new place server for Place {placeId}, Universe {UniverseObj.id} on Gameserver {SelectedGameServerObj.serverName} ({SelectedGameServerObj.serverId}), is_reserved: {reserved_server_access_code is not None}") + + return PlaceServerObject + +def GetSuitablePlaceServer( placeId : int ) -> PlaceServer | bool: + """ + Returns a suitable PlaceServer for the given placeId + + :param placeId: The placeId to find a suitable PlaceServer for + + :return: PlaceServer object if successful, returns False if no PlaceServer is found + """ + PlaceObj : Place = Place.query.filter_by( placeid = placeId ).first() + if PlaceObj is None: + logging.error(f"GetSuitablePlaceServer -> Failed to find Place {placeId} in database") + raise MissingData("") + + HasFoundSuitablePlaceServer : bool = False + + PlaceServers = PlaceServer.query.filter_by( serverPlaceId = placeId, reservedServerAccessCode = None ).all() + if PlaceServers is None or ( type(PlaceServers) == list and len(PlaceServers) == 0 ): + HasFoundSuitablePlaceServer = False + + if not HasFoundSuitablePlaceServer: + for PlaceServerObject in PlaceServers: + PlaceServerObject : PlaceServer + if PlaceServerObject.maxPlayerCount <= PlaceServerObject.playerCount: + continue + if PlaceServerObject.serverRunningTime == 0: + continue + return PlaceServerObject + + if HasFoundSuitablePlaceServer is False: + logging.info(f"GetSuitablePlaceServer -> Place {placeId} has no PlaceServers, attempting to start one") + try: + NewPlaceServerObj = CreateNewPlaceServer( placeId = placeId, reserved_server_access_code = None ) + except: + return False + + return False + +GameJoinRoute = Blueprint('gamejoin', __name__, url_prefix='/') + +@GameJoinRoute.route('/universes/validate-place-join', methods=['GET']) +def validateplacejoin(): + return "true" + +@GameJoinRoute.route('/Game/Join2012.ashx', methods=['GET']) +def Join2012(): + SignedFirstTicketRaw : str = signUTF8("print('hello')", formatAutomatically=True, addNewLine=True, twelveclient=True) + Resposne = make_response(SignedFirstTicketRaw) + + return Resposne + +@GameJoinRoute.route('/game/validate-machine', methods=['POST']) +@csrf.exempt +def validate_machine(): + try: + if request.cookies.get("t") is None: + raise Exception("Request has no 't' cookie") + + macAddressesList = request.form.getlist('macAddresses') + if len(macAddressesList) > 0: + combinedAddress = "" + for macAddress in macAddressesList: + combinedAddress += macAddress + UserHWIDHash = hashlib.sha256(combinedAddress.encode("utf-8")).hexdigest() + tracking_cookie = request.cookies.get("t") + redis_controller.setex(f"hwid:{str(tracking_cookie)}", 60, UserHWIDHash) + except Exception as e: + logging.error(f"Failed during /game/validate-machine: {e}") + return jsonify({ + "success": True, + "message": "" + }) + +@GameJoinRoute.route('/Game/MachineConfiguration.ashx', methods=['POST', 'GET']) +@csrf.exempt +def machine_configuration(): + return "" + +def ReturnPlaceLauncher( message : str, status : int, authenticated_userid : int = None) -> Response: + response = make_response( + jsonify({ + "jobId": None, + "status": status, + "joinScriptUrl": None, + "authenticationUrl": config.BaseURL + "/Login/Negotiate.ashx", + "authenticationTicket": None, + "message": message, + "rand": random.randint(0, 100000000000) + }) + ) + + if authenticated_userid is not None and request.cookies.get(".ROBLOSECURITY") is None: + response.set_cookie( + key = ".ROBLOSECURITY", + value = auth.CreateToken( userid = authenticated_userid, expireIn = 60 * 60 * 24 * 3, ip = get_remote_address() ), + expires = datetime.utcnow() + timedelta(days=3), + domain = f".{config.BaseDomain}" + ) + response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" + return response + +@GameJoinRoute.route('/game/PlaceLauncher.ashx', methods=['GET', 'POST']) +@GameJoinRoute.route('/Game/PlaceLauncher.ashx', methods=['GET', 'POST']) +@GameJoinRoute.route('/game/placelauncher.ashx', methods=['GET', 'POST']) +@GameJoinRoute.route('/Game/placelauncher.ashx', methods=['GET', 'POST']) +@csrf.exempt +def placelauncher(): + if not websiteFeatures.GetWebsiteFeature("GameJoinAPI"): + return ReturnPlaceLauncher("GameJoinAPI is disabled", 12) + + AuthenticatdUser = None + placeid = request.args.get( key = 'placeId', default = None, type = int) or request.args.get( key = 'placeid', default = None, type = int) + ticket = request.args.get( key = 't', default = None, type = str) + if ticket is None: + AuthenticatdUser : User | None = auth.GetCurrentUser() + if AuthenticatdUser is None: + return ReturnPlaceLauncher("Invalid request", 12) + if placeid is None: + return ReturnPlaceLauncher("Invalid request", 12) + + requestedJobId = request.args.get( key = 'jobId', default = None, type = str) or request.args.get( key = 'jobid', default = None, type = str) + isTeleport = request.args.get( key = 'isTeleport', default = None, type = str ) == "true" + requestType = request.args.get( key = 'request', default = "RequestGame", type = str ) + + if request.user_agent != "Roblox/WinInet": + isTeleport = False + + authticketInfo = redis_controller.get(f"authticket:{ticket}") + if authticketInfo is None and AuthenticatdUser is None: + return ReturnPlaceLauncher("Invalid authentication ticket", 12) + + #UserIPHash = hashlib.md5(get_remote_address().encode("utf-8")).hexdigest() + #LoginRecords : list[LoginRecord] = LoginRecord.query.filter(LoginRecord.ip == UserIPHash).distinct(LoginRecord.userid).all() + #for record in LoginRecords: + # if record.User.accountstatus != 1: + # return ReturnPlaceLauncher("Invalid authentication ticket", 12) + + userId = int(authticketInfo) if authticketInfo is not None else AuthenticatdUser.id + if PlaceServerPlayer.query.filter_by(userid=userId).first() is not None and not isTeleport: + CurrentPlaceServerPlayerObj : PlaceServerPlayer = PlaceServerPlayer.query.filter_by(userid=userId).first() + CurrentPlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=CurrentPlaceServerPlayerObj.serveruuid).first() + try: + EvictPlayer(CurrentPlaceServerObj, userId) + except: + return ReturnPlaceLauncher("Invalid request", 12) + + AssetObj : Asset = Asset.query.filter_by(id=placeid).first() + if AssetObj is None: + return ReturnPlaceLauncher("Invalid place", 14) + if AssetObj.asset_type != AssetType.Place or AssetObj.moderation_status == 2: + return ReturnPlaceLauncher("Invalid place", 14) + PlaceObj : Place = Place.query.filter_by(placeid=placeid).first() + if PlaceObj is None: + return ReturnPlaceLauncher("Invalid place", 14) + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + if UniverseObj.is_public == False and userId != 1: + return ReturnPlaceLauncher("Invalid place", 14) + + UserObj : User = User.query.filter_by(id=userId).first() + + if request.cookies.get("t") is not None: + Tracking_Cookie = request.cookies.get("t") + UserHWIDHash = redis_controller.get(f"hwid:{str(Tracking_Cookie)}") + if UserHWIDHash is not None: + UserHWIDLogObject = UserHWIDLog( + user_id = UserObj.id, + hwid = UserHWIDHash + ) + db.session.add(UserHWIDLogObject) + db.session.commit() + + redis_controller.delete(f"hwid:{str(Tracking_Cookie)}") + + UserMembershipStatus : MembershipType = GetUserMembership(UserObj) + if UniverseObj.bc_required and UserMembershipStatus == MembershipType.NonBuildersClub: + return ReturnPlaceLauncher("Builders Club required", 12) + if UniverseObj.minimum_account_age > (datetime.utcnow() - UserObj.created).days: + return ReturnPlaceLauncher("Account is too new to join this place", 12) + + if requestedJobId is not None: + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by( serveruuid = requestedJobId, serverPlaceId = placeid, reservedServerAccessCode = None ).first() + if PlaceServerObj is None: + return ReturnPlaceLauncher("Invalid request", 12) + if PlaceServerObj.maxPlayerCount <= PlaceServerObj.playerCount: + return ReturnPlaceLauncher("Server is full", 6, authenticated_userid=userId) + elif requestType == "RequestPrivateGame": + server_accessCode = request.args.get( key = 'accessCode', default = None, type = str) + if server_accessCode is None: + return ReturnPlaceLauncher("Invalid request", 12) + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serverPlaceId = placeid, reservedServerAccessCode = server_accessCode ).first() + if PlaceServerObj is None: + return ReturnPlaceLauncher("Invalid request", 12) + if redis_controller.exists(f"reservedserveraccesscode:{str(PlaceServerObj.serveruuid)}:{UserObj.id}") is False: + return ReturnPlaceLauncher("Invalid request", 12) + if PlaceServerObj.maxPlayerCount <= PlaceServerObj.playerCount: + return ReturnPlaceLauncher("Server is full", 6, authenticated_userid=userId) + + redis_controller.delete(f"reservedserveraccesscode:{str(PlaceServerObj.serveruuid)}:{UserObj.id}") + else: + PlaceServerObj : PlaceServer | bool = GetSuitablePlaceServer( placeId = placeid ) + + if PlaceServerObj is False: + logging.info(f"Placelauncher.ashx : {str(placeid)} : {UserObj.username} [{UserObj.id}] : No available place servers found yet") + return ReturnPlaceLauncher(None, 1, authenticated_userid=userId) + redis_controller.delete(f"authticket:{ticket}") + authenticatedTicketUUID = str(uuid.uuid4()) + redis_controller.setex(f"place:{placeid}:ticket:{authenticatedTicketUUID}", 60, json.dumps({"id": userId, "jobid": str(PlaceServerObj.serveruuid)})) + + authticket = ''.join(random.choices(string.ascii_uppercase + string.digits, k=256)) + redis_controller.set(f"authticket:{authticket}", userId, 60*10) + resp = make_response(jsonify({ + "jobId": PlaceServerObj.serveruuid, + "status": 2, + "joinScriptUrl": config.BaseURL + "/Game/Join.ashx?placeId=" + str(placeid) + "&jobId=" + str(PlaceServerObj.serveruuid) + "&ticket=" + authenticatedTicketUUID, + "authenticationUrl": config.BaseURL + "/Login/Negotiate.ashx", + "authenticationTicket": authticket, + "message": None, + "rand": random.randint(0, 100000000000) + })) + resp.set_cookie("ticket", authenticatedTicketUUID) + if request.cookies.get(".ROBLOSECURITY") is None: + resp.set_cookie( + key = ".ROBLOSECURITY", + value = auth.CreateToken( userid = userId, expireIn = 60 * 60 * 24 * 3, ip = get_remote_address() ), + expires = datetime.utcnow() + timedelta(days=3), + domain = f".{config.BaseDomain}" + ) + return resp + +@GameJoinRoute.route("/v1/join-game", methods=["POST"]) # Meant for 2020 Android +@csrf.exempt +@auth.authenticated_required_api +def gamejoin_api_v1(): + if not websiteFeatures.GetWebsiteFeature("GameJoinAPI"): + return ReturnPlaceLauncher("GameJoinAPI is disabled", 12) + if not request.is_json: + return ReturnPlaceLauncher("Invalid request", 12) + if "placeId" not in request.json: + return ReturnPlaceLauncher("Invalid request", 12) + try: + requestedPlaceId : int = int(request.json["placeId"]) + isTeleport : bool = request.json["isTeleport"] if "isTeleport" in request.json else False + except: + return ReturnPlaceLauncher("Invalid request", 12) + + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: # Shouldnt happen but just in case + return ReturnPlaceLauncher("Invalid request", 12) + + userId = AuthenticatedUser.id + if PlaceServerPlayer.query.filter_by(userid=userId).first() is not None and not isTeleport: + CurrentPlaceServerPlayerObj : PlaceServerPlayer = PlaceServerPlayer.query.filter_by(userid=userId).first() + CurrentPlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=CurrentPlaceServerPlayerObj.serveruuid).first() + try: + EvictPlayer(CurrentPlaceServerObj, userId) + except: + logging.error(f"/v1/join-game - Failed to evict player {userId} from place {CurrentPlaceServerObj.serverPlaceId}") + return ReturnPlaceLauncher("Invalid request", 12) + + AssetObj : Asset = Asset.query.filter_by(id=requestedPlaceId).first() + if AssetObj is None: + return ReturnPlaceLauncher("Invalid place", 14) + if AssetObj.asset_type != AssetType.Place or AssetObj.moderation_status == 2: + return ReturnPlaceLauncher("Invalid place", 14) + PlaceObj : Place = Place.query.filter_by(placeid=requestedPlaceId).first() + if PlaceObj is None: + return ReturnPlaceLauncher("Invalid place", 14) + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + if UniverseObj.is_public == False and userId != 1: + return ReturnPlaceLauncher("Invalid place", 14) + + UserMembershipStatus : MembershipType = GetUserMembership(AuthenticatedUser) + if UniverseObj.bc_required and UserMembershipStatus == MembershipType.NonBuildersClub: + return ReturnPlaceLauncher("Builders Club required", 12) + if UniverseObj.minimum_account_age > (datetime.utcnow() - AuthenticatedUser.created).days: + return ReturnPlaceLauncher("Account is too new to join this place", 12) + + PlaceServerObj : PlaceServer | bool = GetSuitablePlaceServer( placeId = requestedPlaceId ) + + if PlaceServerObj is False: + logging.info(f"/v1/join-game : {str(requestedPlaceId)} : {AuthenticatedUser.username} [{AuthenticatedUser.id}] : No available place servers found yet") + return ReturnPlaceLauncher(None, 1, authenticated_userid=userId) + + ClientTicket = GenerateClientTicket(AuthenticatedUser, PlaceServerObj.serveruuid, TicketVersion = 4, PlaceId = requestedPlaceId) + SessionId : str = f"{str(uuid.uuid4())}|{str(PlaceServerObj.serveruuid)}|0|{str(PlaceServerObj.serverIP)}|8|{datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.000Z')}|0|null|AAAAA" + + resp = make_response(jsonify({ + "jobId": PlaceServerObj.serveruuid, + "status": 2, + "authenticationUrl": config.BaseURL + "/Login/Negotiate.ashx", + "authenticationTicket": "", + "message": None, + "rand": random.randint(0, 100000000000), + "joinScript": { + "ClientPort" : 0, + "MachineAddress" : PlaceServerObj.serverIP, + "ServerConnections": [ + { + "Port": PlaceServerObj.serverPort, + "Address": PlaceServerObj.serverIP + } + ], + "ServerPort" : PlaceServerObj.serverPort, + "PingUrl": "", + "PingInterval": 120, + "UserName": AuthenticatedUser.username, + "DisplayName": AuthenticatedUser.username, + "SeleniumTestMode": False, + "UserId": AuthenticatedUser.id, + "ClientTicket": ClientTicket, + "SuperSafeChat": False, + "PlaceId": PlaceServerObj.serverPlaceId, + "MeasurementUrl": "", + "WaitingForCharacterGuid": str(uuid.uuid4()), + "BaseUrl": config.BaseURL, + "ChatStyle": PlaceObj.chat_style.name, + "VendorId": 0, + "ScreenShotInfo": "", + "VideoInfo": "", + "CreatorId": AssetObj.creator_id, + "CreatorTypeEnum": "User" if AssetObj.creator_type == 0 else "Group", + "MembershipType": GetUserMembership(AuthenticatedUser, changeToString=True), + "AccountAge": (datetime.utcnow() - AuthenticatedUser.created).days, + "CookieStoreFirstTimePlayKey": "rbx_evt_ftp", + "CookieStoreFiveMinutePlayKey": "rbx_evt_fmp", + "CookieStoreEnabled": True, + "IsRobloxPlace": False, + "UniverseId": PlaceObj.parent_universe_id, + "GenerateTeleportJoin": False, + "IsUnknownOrUnder13": False, + "SessionId": SessionId, + "DataCenterId": 0, + "FollowUserId": 0, + "BrowserTrackerId": 0, + "UsePortraitMode": False, + "CharacterAppearance": f"http://www.syntax.eco/v1/avatar-fetch?userId={str(AuthenticatedUser.id)}&placeId={str(requestedPlaceId)}", + "GameId": PlaceServerObj.serverPlaceId, + "RobloxLocale": "en_us", + "GameLocale": "en_us", + "characterAppearanceId": AuthenticatedUser.id + } + })) + return resp + +def GenerateClientTicket( UserObj : User, JobId : str, CharacterURL : str = None, CustomTimestamp : str = "", TicketVersion : int = 1, PlaceId : int = 1) -> str: + """ + Generates a client ticket so that RCC can verify the user is authenticated + If CharacterURL is not None, it will be used as the character URL instead of the default + If CustomTimestamp is not 0, it will be used as the timestamp instead of the current time + """ + if CustomTimestamp == "": + CustomTimestamp = datetime.utcnow().strftime("%m/%d/%Y %I:%M:%S %p") + if CharacterURL is None: + if TicketVersion == 2: + CharacterURL = str(UserObj.id) + elif TicketVersion == 1: + CharacterURL = Config.BaseURL + "/Asset/CharacterFetch.ashx?userId=" + str(UserObj.id) # f"http://www.syntax.eco/v1.1/avatar-fetch?userId={str(UserObj.id)}&placeId={str(PlaceId)}" + elif TicketVersion == 4: + CharacterURL = f"http://www.syntax.eco/v1/avatar-fetch?userId={str(UserObj.id)}&placeId={str(PlaceId)}" + + FirstTicketUnsigned = f"{str(UserObj.id)}\n{UserObj.username}\n{CharacterURL}\n{JobId}\n{str(CustomTimestamp)}" + SignedFirstTicketRaw : bytes = signUTF8(FirstTicketUnsigned, formatAutomatically=False, addNewLine=False, useNewKey=(TicketVersion > 1)) + SignedFirstTicket = base64.b64encode(SignedFirstTicketRaw).decode("utf-8") + + AccountAge = (datetime.utcnow() - UserObj.created).days + UserMembershipType = GetUserMembership(UserObj, changeToString=True) + + if TicketVersion <= 3: + SecondTicketUnsigned = f"{str(UserObj.id)}\n{str(JobId)}\n{str(CustomTimestamp)}" + elif TicketVersion == 4: + SecondTicketUnsigned = f"{CustomTimestamp}\n{JobId}\n{UserObj.id}\n{UserObj.id}\n0\n{AccountAge}\nf\n{len(UserObj.username)}\n{UserObj.username}\n{len(UserMembershipType)}\n{UserMembershipType}\n0\n\n0\n\n{len(UserObj.username)}\n{UserObj.username}" + + SignedSecondTicketRaw : bytes = signUTF8(SecondTicketUnsigned, formatAutomatically=False, addNewLine=False, useNewKey=(TicketVersion > 1)) + SignedSecondTicket = base64.b64encode(SignedSecondTicketRaw).decode("utf-8") + + return f"{str(CustomTimestamp)};{SignedFirstTicket};{SignedSecondTicket}{f';{TicketVersion}' if TicketVersion > 1 else ''}" + +@GameJoinRoute.route('/Game/Join.ashx', methods=['GET', 'POST']) +@csrf.exempt +def join(): + placeid = request.args.get('placeId', default = None, type = int) + jobid = request.args.get('jobId', default = None, type = str) + ticket = request.args.get('ticket', default = None, type = str) + if placeid is None or jobid is None or ticket is None: + return 'Invalid request ( 0 )',400 + + ticketInfo = redis_controller.get(f"place:{placeid}:ticket:{ticket}") + if ticketInfo is None: + return 'Invalid request ( 1 )',400 + ticketInfo = json.loads(ticketInfo) + if ticketInfo['jobid'] != jobid: + return 'Invalid request ( 2 )',400 + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=jobid).first() + if PlaceServerObj is None: + return 'Invalid request ( 3 )',400 + if PlaceServerObj.serverPlaceId != placeid: + return 'Invalid request ( 4 )',400 + if PlaceServerObj.serverRunningTime == 0: + return 'Invalid request ( 5 )',400 + if PlaceServerObj.maxPlayerCount <= PlaceServerObj.playerCount: + return 'Invalid request ( 6 )',400 + UserObj : User = User.query.filter_by(id=ticketInfo['id']).first() + if UserObj is None: + return 'Invalid request ( 7 )',400 + PlaceObj : Place = Place.query.filter_by(placeid=placeid).first() + AssetObj : Asset = Asset.query.filter_by(id=placeid).first() + UniverseObj : Universe = Universe.query.filter_by(id=PlaceObj.parent_universe_id).first() + + ClientTicket = GenerateClientTicket(UserObj, jobid, TicketVersion = 1 if UniverseObj.place_year in [PlaceYear.Sixteen, PlaceYear.Fourteen] else ( 2 if UniverseObj.place_year == PlaceYear.Eighteen else 4), PlaceId = placeid) + + AuthenticationTicket = auth.CreateToken(UserObj.id, get_remote_address() , (60*60*24) ) + SessionId : str = f"{str(uuid.uuid4())}|{str(PlaceServerObj.serveruuid)}|0|{str(PlaceServerObj.serverIP)}|8|{datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.000Z')}|0|null|{AuthenticationTicket}" + + UserMembershipStatus : str = GetUserMembership(UserObj, changeToString=True) + JoinData : str = json.dumps({ + "ClientPort" : 0, + "MachineAddress" : PlaceServerObj.serverIP, + "ServerConnections": [ + { + "Port": PlaceServerObj.serverPort, + "Address": PlaceServerObj.serverIP + } + ], + "ServerPort" : PlaceServerObj.serverPort, + "PingUrl": "", + "PingInterval": 120, + "UserName": UserObj.username, + "DisplayName": UserObj.username, + "SeleniumTestMode": False, + "UserId": UserObj.id, + "ClientTicket": ClientTicket, + "SuperSafeChat": False, + "PlaceId": PlaceServerObj.serverPlaceId, + "MeasurementUrl": "", + "WaitingForCharacterGuid": str(uuid.uuid4()), + "BaseUrl": config.BaseURL, + "ChatStyle": PlaceObj.chat_style.name, + "VendorId": 0, + "ScreenShotInfo": "", + "VideoInfo": "", + "CreatorId": AssetObj.creator_id, + "CreatorTypeEnum": "User" if AssetObj.creator_type == 0 else "Group", + "MembershipType": UserMembershipStatus, + "AccountAge": (datetime.utcnow() - UserObj.created).days, + "CookieStoreFirstTimePlayKey": "rbx_evt_ftp", + "CookieStoreFiveMinutePlayKey": "rbx_evt_fmp", + "CookieStoreEnabled": True, + "IsRobloxPlace": False, + "UniverseId": PlaceObj.parent_universe_id, + "GenerateTeleportJoin": False, + "IsUnknownOrUnder13": False, + "SessionId": SessionId, + "DataCenterId": 0, + "FollowUserId": 0, + "BrowserTrackerId": 0, + "UsePortraitMode": False, + "CharacterAppearance": config.BaseURL + "/Asset/CharacterFetch.ashx?userId=" + str(UserObj.id) if PlaceObj.placeyear in [PlaceYear.Fourteen, PlaceYear.Sixteen] else ( f"http://www.syntax.eco/v1.1/avatar-fetch?userId={str(UserObj.id)}&placeId={str(placeid)}" if PlaceObj.placeyear in [PlaceYear.Eighteen] else f"http://www.syntax.eco/v1/avatar-fetch?userId={str(UserObj.id)}&placeId={str(placeid)}" ), + "GameId": PlaceServerObj.serverPlaceId, + "RobloxLocale": "en_us", + "GameLocale": "en_us", + "characterAppearanceId": UserObj.id + }) + if UniverseObj.place_year == PlaceYear.Sixteen: + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False) + elif UniverseObj.place_year == PlaceYear.Eighteen: + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False, useNewKey=True) + elif UniverseObj.place_year == PlaceYear.Twenty: + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False, useNewKey=True) + elif UniverseObj.place_year == PlaceYear.Fourteen: + JoinData = json.loads(JoinData) + VerificationTicket = str(uuid.uuid4()) + JoinData["CharacterAppearance"] = f"{config.BaseURL}/Asset/CharacterFetch.ashx?userId={str(UserObj.id)}&t={VerificationTicket}&legacy=1" + redis_controller.set( + f"joinashx-auth:{str(jobid)}:{str(UserObj.id)}:{placeid}:{VerificationTicket}", + json.dumps({ + "CharacterAppearance": JoinData["CharacterAppearance"], + "Username": JoinData["UserName"] + }), + ex = 60 + ) + JoinData = json.dumps(JoinData) + + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False) + elif UniverseObj.place_year == PlaceYear.TwentyOne: + SignedJoinData : str = signUTF8("\r\n"+JoinData, addNewLine=False, useNewKey=True) + else: + return 'Invalid request ( 8 )',400 + + if UniverseObj.place_year in [ PlaceYear.Fourteen, PlaceYear.Sixteen ]: + redis_controller.set(f"allow_join:{str(UserObj.id)}:{str(placeid)}:{str(jobid)}", "1", ex=120) + + joinResposne = make_response(SignedJoinData) + joinResposne.headers['Content-Type'] = 'text/plain' + joinResposne.set_cookie( + key = "Syntax-Session-Id", + value = SessionId, + expires = datetime.utcnow() + timedelta(days=1), + domain = f".{config.BaseDomain}" + ) + if request.cookies.get(".ROBLOSECURITY") is None: # 2018 and 2020 doesen't want to authenticate properly with negotiate.ashx :(, so this is my hack till i can figure out why + joinResposne.set_cookie( + key = ".ROBLOSECURITY", + value = auth.CreateToken( userid = UserObj.id, expireIn = 60 * 60 * 24 * 3, ip = get_remote_address() ), + expires = datetime.utcnow() + timedelta(days=3), + domain = f".{config.BaseDomain}" + ) + return joinResposne \ No newline at end of file diff --git a/app/routes/gamesapi.py b/app/routes/gamesapi.py new file mode 100644 index 0000000..b09c133 --- /dev/null +++ b/app/routes/gamesapi.py @@ -0,0 +1,504 @@ +# games.roblox.com + +import math +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from app.extensions import redis_controller, get_remote_address, csrf, limiter, db +from app.util import auth, websiteFeatures, placeinfo +from app.models.place import Place +from app.models.asset import Asset +from app.models.placeservers import PlaceServer +from app.models.user import User +from app.models.groups import Group +from app.models.asset_thumbnail import AssetThumbnail +from app.models.universe import Universe +from app.enums.PlaceYear import PlaceYear +from app.routes.rate import GetAssetLikesAndDislikes, GetAssetFavoriteCount, GetUserFavoriteStatus +from flask_wtf.csrf import CSRFError, generate_csrf +from sqlalchemy import func, and_ +from flask_sqlalchemy import pagination + +GamesAPIRoute = Blueprint('gamesapi', __name__, url_prefix='/') + +csrf.exempt(GamesAPIRoute) +@GamesAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@GamesAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@GamesAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + + +@GamesAPIRoute.route('/v1/games/sorts', methods=["GET"]) +@auth.authenticated_required_api +def games_sorts(): + return jsonify({ + "sorts" : [ + { + "token": "MostPopular", + "name": "most_popular", + "displayName": "Popular", + "gameSetTypeId": 1, + "gameSetTargetId": 90, + "timeOptionsAvailable": False, + "genreOptionsAvailable": False, + "numberOfRows": 2, + "numberOfGames": 0, + "isDefaultSort": True, + "contextUniverseId": None, + "contextCountryRegionId": 1, + "tokenExpiryInSeconds": 3600 + }, + { + "token": "Featured", + "name": "featured", + "displayName": "Featured", + "gameSetTypeId": 2, + "gameSetTargetId": 91, + "timeOptionsAvailable": False, + "genreOptionsAvailable": False, + "numberOfRows": 1, + "numberOfGames": 0, + "isDefaultSort": True, + "contextUniverseId": None, + "contextCountryRegionId": 1, + "tokenExpiryInSeconds": 3600 + }, + { + "token": "RecentlyUpdated", + "name": "recently_updated", + "displayName": "Recently Updated", + "gameSetTypeId": 3, + "gameSetTargetId": 93, + "timeOptionsAvailable": False, + "genreOptionsAvailable": False, + "numberOfRows": 1, + "numberOfGames": 0, + "isDefaultSort": True, + "contextUniverseId": None, + "contextCountryRegionId": 1, + "tokenExpiryInSeconds": 3600 + }, + ], + "timeFilters": [ + { + "token": "Now", + "name": "Now", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "PastDay", + "name": "PastDay", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "PastWeek", + "name": "PastWeek", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "PastMonth", + "name": "PastMonth", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "AllTime", + "name": "AllTime", + "tokenExpiryInSeconds": 3600 + } + ], + "genreFilters": [ + { + "token": "T638364961735517991_1_89de", + "name": "All", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518009_19_3d2", + "name": "Building", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518045_11_3de6", + "name": "Horror", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518062_7_558c", + "name": "Town and City", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518076_17_c371", + "name": "Military", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518094_15_2056", + "name": "Comedy", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518107_8_6d4f", + "name": "Medieval", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518120_13_c168", + "name": "Adventure", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518134_9_e6aa", + "name": "Sci-Fi", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518156_12_13fb", + "name": "Naval", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518169_20_46a", + "name": "FPS", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518183_21_4bbf", + "name": "RPG", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518192_14_efc6", + "name": "Sports", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518205_10_fa83", + "name": "Fighting", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518223_16_5d38", + "name": "Western", + "tokenExpiryInSeconds": 3600 + } + ], + "gameFilters": [ + { + "token": "T638364961735518263_Any_56d2", + "name": "Any", + "tokenExpiryInSeconds": 3600 + }, + { + "token": "T638364961735518277_Classic_a1f4", + "name": "Classic", + "tokenExpiryInSeconds": 3600 + } + ], + "pageContext": { + "pageId": "f5b1510e-3810-42ab-8135-8ffa5ef221ba", + "isSeeAllPage": None + }, + "gameSortStyle": None + }) + +@GamesAPIRoute.route("/v1/games/list", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def games_list(): + sortToken = request.args.get("sortToken", default = "MostPopular", type = str) + startRows = request.args.get("startRows", default = 0, type = int) + maxRows = request.args.get("maxRows", default = 40, type = int) + + if sortToken not in ["MostPopular", "Featured", "RecentlyUpdated"]: + return jsonify( { "errors": [ { "code": 0, "message": "Invalid sort token." } ] } ), 400 + + if startRows < 0: + return jsonify( { "errors": [ { "code": 0, "message": "Invalid start rows." } ] } ), 400 + + if maxRows > 40 or maxRows < 0: + return jsonify( { "errors": [ { "code": 0, "message": "Max rows must be between 0-40" } ] } ), 400 + + pageNumber = math.floor(startRows / maxRows) + 1 + + if sortToken == "MostPopular": + PopularGames = Universe.query.filter( and_( Universe.is_public == True, Universe.place_year == PlaceYear.Twenty ) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).outerjoin( PlaceServer, PlaceServer.serverPlaceId == Place.placeid ).group_by( Universe.id ) + PopularGames = PopularGames.order_by( func.coalesce( func.sum( PlaceServer.playerCount ), 0 ).desc() ).order_by( func.coalesce( func.sum( Place.visitcount ), 0 ).desc() ) + + UniverseObjsList = PopularGames.paginate( + page = pageNumber, + per_page = maxRows, + error_out = False + ) + elif sortToken == "Featured": + FeaturedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.place_year == PlaceYear.Twenty, Universe.is_featured == True ) ).outerjoin( Place, Place.parent_universe_id == Universe.id ).outerjoin( PlaceServer, PlaceServer.serverPlaceId == Place.placeid ).group_by( Universe.id ) + FeaturedGames = FeaturedGames.order_by( func.coalesce( func.sum( PlaceServer.playerCount ), 0 ).desc() ).order_by( func.coalesce( func.sum( Place.visitcount ), 0 ).desc() ) + UniverseObjsList = FeaturedGames.paginate( + page = pageNumber, + per_page = maxRows, + error_out = False + ) + else: # Fallback to RecentlyUpdated #sortToken == "RecentlyUpdated": + RecentlyUpdatedGames = Universe.query.filter( and_( Universe.is_public == True, Universe.place_year == PlaceYear.Twenty )).order_by( Universe.updated_at.desc() ) + UniverseObjsList = RecentlyUpdatedGames.paginate( + page = pageNumber, + per_page = maxRows, + error_out = False + ) + + UniverseObjsList : pagination.Pagination = UniverseObjsList + + GameList = [] + for UniverseObj in UniverseObjsList.items: + UniverseObj : Universe + PlaceObj : Place = Place.query.filter_by( placeid = UniverseObj.root_place_id ).first() + Upvotes, Downvotes = GetAssetLikesAndDislikes(PlaceObj.placeid) + PlaceAssetObj : Asset = PlaceObj.assetObj + CreatorObj : User | Group = User.query.filter_by(id=UniverseObj.creator_id).first() if UniverseObj.creator_type == 0 else Group.query.filter_by(id=UniverseObj.creator_id).first() + GameList.append({ + "creatorId": UniverseObj.creator_id, + "creatorName": CreatorObj.username if UniverseObj.creator_type == 0 else CreatorObj.name, + "creatorType": "User" if UniverseObj.creator_type == 0 else "Group", + "creatorHasVerifiedBadge": False, + "totalUpVotes": Upvotes, + "totalDownVotes": Downvotes, + "universeId": UniverseObj.id, + "name": PlaceAssetObj.name, + "placeId": PlaceObj.placeid, + "playerCount": placeinfo.GetUniversePlayingCount(UniverseObj), + "imageToken": "", + "isSponsored": False, + "nativeAdData": "", + "isShowSponsoredLabel": False, + "price": 0, + "analyticsIdentifier": "", + "gameDescription": PlaceAssetObj.description, + "genre": "All", + "minimumAge": 0 + }) + + return jsonify({ + "games": GameList, + "suggestedKeyword": "", + "correctedKeyword": "", + "filteredKeyword": "", + "hasMoreRows": UniverseObjsList.has_next, + "nextPageExclusiveStartId": 0, + "featuredSearchUniverseId": 0, + "emphasis": False, + "cutOffIndex": 0, + "algorithm": "", + "algorithmQueryType": "", + "suggestionAlgorithm": "", + "relatedGames": [] + }) + +@GamesAPIRoute.route("/v1/games//votes", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_place_votes( placeId : int ): + PlaceObj : Place = Place.query.filter_by(placeid=placeId).first() + if not PlaceObj: + return jsonify( { "errors": [ { "code": 0, "message": "Invalid placeId." } ] } ), 400 + + Upvotes, Downvotes = GetAssetLikesAndDislikes(PlaceObj.placeid) + return jsonify({ + "id": PlaceObj.placeid, + "upVotes": Upvotes, + "downVotes": Downvotes + }) + +@GamesAPIRoute.route("/v1/games//votes/user", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_place_user_votes( placeId : int ): + PlaceObj : Place = Place.query.filter_by(placeid=placeId).first() + if not PlaceObj: + return jsonify( { "errors": [ { "code": 0, "message": "Invalid placeId." } ] } ), 400 + + return jsonify({ + "canVote": False, + "userVote": False, + "reasonForNotVoteable": "Voting is disabled" + }) + +@GamesAPIRoute.route("/v1/games/multiget-playability-status", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_playability_status(): + universeIdsList = request.args.get("universeIds", default = "", type = str) + if universeIdsList == "": + return jsonify( { "errors": [ { "code": 8, "message": "No universe IDs were specified." } ] } ), 400 + + try: + universeIdsList = universeIdsList.split(",") + universeIdsList = [int(x) for x in universeIdsList] + universeIdsList = list(set(universeIdsList)) + except: + return jsonify( { "errors": [ { "code": 8, "message": "Invalid universe IDs were specified." } ] } ), 400 + + if len(universeIdsList) > 100: + return jsonify( { "errors": [ { "code": 9, "message": "Too many universe IDs were specified." } ] } ), 400 + + RequestedData = [] + for universeId in universeIdsList: + RequestedData.append({ + "playabilityStatus": 0, + "isPlayable": True, + "universeId": universeId + }) + + return jsonify(RequestedData), 200 + +@GamesAPIRoute.route("/v2/games//media", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_game_media( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + return jsonify({"data": []}), 200 + +@GamesAPIRoute.route("/v1/games", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def multi_get_game_info(): + universeIdsList = request.args.get("universeIds", default = "", type = str) + if universeIdsList == "": + return jsonify( { "errors": [ { "code": 8, "message": "No universe IDs were specified." } ] } ), 400 + + try: + universeIdsList = universeIdsList.split(",") + universeIdsList = [int(x) for x in universeIdsList] + universeIdsList = list(set(universeIdsList)) + except: + return jsonify( { "errors": [ { "code": 8, "message": "Invalid universe IDs were specified." } ] } ), 400 + + if len(universeIdsList) > 100: + return jsonify( { "errors": [ { "code": 9, "message": "Too many universe IDs were specified." } ] } ), 400 + + RequestedData = [] + for universeId in universeIdsList: + UniverseObj : Universe = Universe.query.filter_by(id=universeId).first() + if UniverseObj is None: + continue + PlaceObj : Place = Place.query.filter_by( placeid = UniverseObj.root_place_id ).first() + if PlaceObj is None: + continue + + PlaceAssetObj : Asset = PlaceObj.assetObj + CreatorObj : User | Group = User.query.filter_by(id=UniverseObj.creator_id).first() if UniverseObj.creator_type == 0 else Group.query.filter_by(id=UniverseObj.creator_id).first() + + RequestedData.append({ + "id": UniverseObj.id, + "rootPlaceId": UniverseObj.root_place_id, + "name": PlaceAssetObj.name, + "description": PlaceAssetObj.description, + "sourceName": PlaceAssetObj.name, + "sourceDescription": PlaceAssetObj.description, + "creator": { + "id": CreatorObj.id, + "type": "User" if UniverseObj.creator_type == 0 else "Group", + "name": CreatorObj.username if UniverseObj.creator_type == 0 else CreatorObj.name, + "hasVerifiedBadge": False, + "isRNVAccount": False + }, + "price": 0, + "allowedGearGenres": [], + "allowedGearCategories": [], + "isGenreEnforced": True, + "copyingAllowed": False, + "playing": placeinfo.GetUniversePlayingCount(UniverseObj), + "visits": PlaceObj.visitcount, + "maxPlayers": PlaceObj.maxplayers, + "created": UniverseObj.created_at.strftime("%Y-%m-%dT%H:%M:%S.000Z"), + "updated": UniverseObj.updated_at.strftime("%Y-%m-%dT%H:%M:%S.000Z"), + "studioAccessToApisAllowed": False, + "createVipServersAllowed": False, + "universeAvatarType": 1, + "genre": "All", + "isAllGenre": True, + "isFavoritedByUser": False, + "favoritedCount": GetAssetFavoriteCount(PlaceObj.placeid) + }) + + return jsonify({ + "data": RequestedData + }), 200 + +@GamesAPIRoute.route("/v1/games//favorites", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_game_favorites( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + + AuthenticatedUser : User = auth.GetCurrentUser() + + return jsonify({ + "isFavorited": GetUserFavoriteStatus( universeId, AuthenticatedUser.id) + }), 200 + +@GamesAPIRoute.route("/v1/games//social-links/list", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_universe_social_links_list( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + + return jsonify({ + "data": [] + }), 200 + +@GamesAPIRoute.route("/v1/games//game-passes", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_universe_game_passes( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + + return jsonify({ + "previousPageCursor": None, + "nextPageCursor": None, + "data": [] + }), 200 + +@GamesAPIRoute.route("/v1/games/recommendations/game/", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_recommended_games_from_universeid( universeId : int ): + UniverseObj : Universe = Universe.query.filter_by(id = universeId).first() + if not UniverseObj: + return jsonify( { "errors": [ { "code": 2, "message": "The requested universe does not exist." } ] } ), 404 + + return jsonify({ + "games": [], + "nextPaginationKey": None + }), 200 \ No newline at end of file diff --git a/app/routes/gametransactions.py b/app/routes/gametransactions.py new file mode 100644 index 0000000..7ce13a9 --- /dev/null +++ b/app/routes/gametransactions.py @@ -0,0 +1,89 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from app.util import auth, friends, websiteFeatures +import logging +from app.services import economy +from app.extensions import db, limiter, csrf, get_remote_address +from app.models.gameservers import GameServer +from app.models.place_developer_product import DeveloperProduct +from app.models.product_receipt import ProductReceipt + +GameTransactionsRoute = Blueprint("gametransactions", __name__, url_prefix="/") + +@GameTransactionsRoute.before_request +def VerifyUserAgent(): + RequestAddress = get_remote_address() + TargetServerObj : GameServer = GameServer.query.filter_by( serverIP = RequestAddress ).first() + if TargetServerObj is None: + abort(404) + + AccessKey = request.headers.get( key = "AccessKey", default = None , type = str ) + if AccessKey is None: + abort(403) + + if AccessKey != TargetServerObj.accessKey: + abort(403) + +@GameTransactionsRoute.route("/gametransactions/getpendingtransactions/", methods=["GET"]) +def GetPendingTransactions(): + PlayerId = request.args.get( key = "PlayerId", default = None, type = int ) + PlaceId = request.args.get( key = "PlaceId", default = None, type = int ) + + if PlayerId is None or PlaceId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + PendingProductReceipts : list[ProductReceipt] = ProductReceipt.query.filter_by( + user_id = PlayerId, is_processed = False + ).outerjoin( + DeveloperProduct, DeveloperProduct.productid == ProductReceipt.product_id + ).filter( DeveloperProduct.placeid == PlaceId ).all() + + PendingProductReceiptsDict = [] + for PendingProductReceipt in PendingProductReceipts: + PendingProductReceiptsDict.append({ + "playerId": PendingProductReceipt.user_id, + "placeId": PlaceId, + "receipt": PendingProductReceipt.receipt_id, + "actionArgs": [ + { + "Key": "productId", + "Value": PendingProductReceipt.product_id + }, + { + "Key": "currencyTypeId", + "Value": 1 + }, + { + "Key": "unitPrice", + "Value": PendingProductReceipt.robux_amount + } + ] + }) + + return jsonify(PendingProductReceiptsDict) + +@GameTransactionsRoute.route("/gametransactions/settransactionstatuscomplete", methods=["POST"]) +@csrf.exempt +def SetTransactionStatusComplete(): + receiptId : int = request.form.get( key = "receipt", default = None, type = int ) + if receiptId is None: + logging.error("Invalid request") + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + ReceiptObj : ProductReceipt = ProductReceipt.query.filter_by( receipt_id = receiptId ).first() + if ReceiptObj is None: + logging.error("Receipt not found") + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + ReceiptObj.is_processed = True + db.session.commit() + + return jsonify({ + "success": True, + }) \ No newline at end of file diff --git a/app/routes/image.py b/app/routes/image.py new file mode 100644 index 0000000..a0edd82 --- /dev/null +++ b/app/routes/image.py @@ -0,0 +1,652 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, Response +import hashlib +import gzip +import json +from PIL import Image +from app.models.groups import GroupIcon +from app.models.user_thumbnail import UserThumbnail +from app.models.asset_thumbnail import AssetThumbnail +from app.models.place_icon import PlaceIcon +from app.models.user import User +from app.models.asset import Asset +from app.routes.thumbnailer import TakeThumbnail +from app.util import s3helper +from app.extensions import redis_controller, csrf +from config import Config +from io import BytesIO + +config = Config() +ImageRoute = Blueprint('image', __name__) + +def HandleResolutionCheck( + WidthParametersName : list[ str ] = [ 'width', 'x' ], + HeightParametersName : list[ str ] = [ 'height', 'y' ], + AllowedWidths : list[ int ] = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + AllowedHeights : list[ int ] = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + MustBeSquare : bool = True, + CanRoundToNearest : bool = True +) -> ( int, int ): + """ + Handles resolution checking for images. Aborts the request if the resolution is invalid. + Must be called in a flask request context. + + :param WidthParametersName: The names of valid parameters for width. + :param HeightParametersName: The names of valid parameters for height. + :param AllowedWidths: The allowed widths. + :param AllowedHeights: The allowed heights. + :param MustBeSquare: Whether or not the image must be square. + :param CanRoundToNearest: Whether or not the image can round to the nearest resolution. + + :return: ( width, height ) + """ + Width : int = None + Height : int = None + for WidthParameterName in WidthParametersName: + if WidthParameterName in request.args: + Width = request.args.get( key=WidthParameterName, default=None, type=int ) + break + for HeightParameterName in HeightParametersName: + if HeightParameterName in request.args: + Height = request.args.get( key=HeightParameterName, default=None, type=int ) + break + + + if Width is None or Height is None: + abort( 400 ) + if ( Width not in AllowedWidths or Height not in AllowedHeights ) and not CanRoundToNearest: + abort( 400 ) + if MustBeSquare and Width != Height: + abort( 400 ) + + + if CanRoundToNearest: + if Width not in AllowedWidths: + Width = min( AllowedWidths, key=lambda x:abs(x-Width) ) + if Height not in AllowedHeights: + Height = min( AllowedHeights, key=lambda x:abs(x-Height) ) + + return ( Width, Height ) + +def HandleImageResize( + ImageContentHash : str, + TargetWidth : int, + TargetHeight : int, + CroppedHash : str, + CacheControl : str = "max-age=120", + SkipCacheCroppedImage : bool = False, + ReturnAsJSON : bool = False +) -> Response: + """ + Handles image resizing + + :param ImageContentHash: The content hash of the image. + :param TargetWidth: The target width. + :param TargetHeight: The target height. + :param CroppedHash: The hash of the cropped image. + + :return: Flask Response + """ + if s3helper.DoesKeyExist(CroppedHash) and not SkipCacheCroppedImage: + if ReturnAsJSON: + return jsonify({ + "Final": True, + "Url": f"{config.CDN_URL}/{CroppedHash}" + }) + ImageResponse = make_response(redirect(f"{config.CDN_URL}/{CroppedHash}")) + ImageResponse.headers['Cache-Control'] = CacheControl + return ImageResponse + + if not s3helper.DoesKeyExist(ImageContentHash): + if ReturnAsJSON: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + return redirect("/static/img/placeholder.png") + + ImageContent = BytesIO( s3helper.GetFileFromS3(ImageContentHash) ) + ImageObj = Image.open(ImageContent) + ImageObj = ImageObj.resize((int(TargetWidth),int(TargetHeight))).convert('RGBA') + + VirtualFile = BytesIO() + ImageObj.save(VirtualFile, "PNG") + VirtualFile.seek(0) + s3helper.UploadBytesToS3(VirtualFile.getvalue(), CroppedHash, contentType="image/png") + + if ReturnAsJSON: + return jsonify({ + "Final": True, + "Url": f"{config.CDN_URL}/{CroppedHash}" + }) + ImageResponse = make_response(redirect(f"{config.CDN_URL}/{CroppedHash}")) + ImageResponse.headers['Cache-Control'] = CacheControl + return ImageResponse + +@ImageRoute.route("/avatar-thumbnail/image", methods=["GET"]) +@ImageRoute.route('/Thumbs/Avatar.ashx', methods=['GET']) +@ImageRoute.route('/thumbs/avatar.ashx', methods=['GET']) +def avatar(): + userId = request.args.get('userId', default = None, type = int) + username = request.args.get('username', default = None, type = str) + + if (userId is None and username is None): + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + AllowedHeights = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + MustBeSquare = True, + CanRoundToNearest = True + ) + + if username is not None and userId is None: + UserObj : User = User.query.filter_by(username=username).first() + if UserObj is None: + return redirect("/static/img/placeholder.png") + userId = UserObj.id + + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=userId).first() + if ThumbnailObj is None: + return redirect("/static/img/placeholder.png") + + ContentHash = ThumbnailObj.full_contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/avatar-thumbnail/json', methods=['GET']) +def avatar_json(): + userId = request.args.get('userId', None, type=int) + if userId is None: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + + TargetWidth, TargetHeight = HandleResolutionCheck( + WidthParametersName = [ 'width', 'x' ], + HeightParametersName = [ 'height', 'y' ], + AllowedWidths = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + AllowedHeights = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + MustBeSquare = True, + CanRoundToNearest = True + ) + + thumbnail : UserThumbnail = UserThumbnail.query.filter_by(userid=userId).first() + if thumbnail is None: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + ContentHash = thumbnail.full_contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetWidth, + TargetHeight = TargetHeight, + CroppedHash = CroppedHash, + CacheControl = "max-age=120", + ReturnAsJSON = True + ) + +@ImageRoute.route('/headshot-thumbnail/image', methods=['GET']) +@ImageRoute.route('/Thumbs/Head.ashx', methods=['GET']) +def head(): + userId = request.args.get('userId', default = None, type = int) + if userId is None: + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + AllowedHeights = [ 48, 180, 420, 60, 100, 150, 352, 200, 500 ], + MustBeSquare = True, + CanRoundToNearest = True + ) + + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=userId).first() + if ThumbnailObj is None: + return redirect("/static/img/placeholder.png") + + ContentHash = ThumbnailObj.headshot_contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/asset-thumbnail/json', methods=['GET']) +def asset_json(): + assetId = request.args.get( 'assetId', None, type=int ) + if assetId is None: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + + TargetWidth, TargetHeight = HandleResolutionCheck( + WidthParametersName = [ 'width', 'x' ], + HeightParametersName = [ 'height', 'y' ], + AllowedWidths = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,360,1280,720], + AllowedHeights = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,360,1280,720], + MustBeSquare = False, + CanRoundToNearest = True + ) + + thumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=assetId).order_by(AssetThumbnail.asset_version_id.desc()).first() + if thumbnailObj is None: + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + if thumbnailObj.moderation_status != 0 or thumbnailObj.asset.moderation_status != 0: + if thumbnailObj.moderation_status == 2 or thumbnailObj.asset.moderation_status == 2: + return jsonify({ + "Final": True, + "Url": "/static/img/ContentDeleted.png" + }) + return jsonify({ + "Final": False, + "Url": "/static/img/placeholder.png" + }) + + ContentHash = thumbnailObj.content_hash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetWidth, + TargetHeight = TargetHeight, + CroppedHash = CroppedHash, + CacheControl = "max-age=120", + ReturnAsJSON = True + ) + +@ImageRoute.route('/asset-thumbnail/image', methods=['GET']) +@ImageRoute.route('/thumbs/asset.ashx', methods=['GET']) +@ImageRoute.route('/Thumbs/Asset.ashx', methods=['GET']) +def asset(): + assetId = request.args.get('assetId', default = None, type = int) or request.args.get('assetid', default = None, type = int) + if assetId is None: + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,360,1280,720], + AllowedHeights = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,36,1280,720], + MustBeSquare = False, + CanRoundToNearest = True + ) + + ThumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=assetId).order_by(AssetThumbnail.asset_version_id.desc()).first() + if ThumbnailObj is None: + return redirect("/static/img/placeholder.png") + if ThumbnailObj.moderation_status != 0 or ThumbnailObj.asset.moderation_status != 0: + if ThumbnailObj.moderation_status == 2 or ThumbnailObj.asset.moderation_status == 2: + return redirect("/static/img/ContentDeleted.png") + return redirect("/static/img/placeholder.png") + ContentHash = ThumbnailObj.content_hash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/Thumbs/GroupIcon.ashx', methods=['GET']) +def groupicon(): + groupid = request.args.get( key='groupid', default=None, type=int ) + if groupid is None: + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [48,180,420,60,100,150,352], + AllowedHeights = [48,180,420,60,100,150,352], + MustBeSquare = True, + CanRoundToNearest = True + ) + + ThumbnailObj : GroupIcon = GroupIcon.query.filter_by(group_id=groupid).first() + if ThumbnailObj is None: + return redirect("/static/img/placeholder.png") + if ThumbnailObj.moderation_status != 0: + if ThumbnailObj.moderation_status == 2: + return redirect("/static/img/ContentDeleted.png") + return redirect("/static/img/placeholder.png") + + ContentHash = ThumbnailObj.content_hash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/Thumbs/GameIcon.ashx', methods=['GET']) +@ImageRoute.route('/Thumbs/PlaceIcon.ashx', methods=['GET']) +def placeicon(): + assetId = request.args.get('assetId', default = None, type = int) or request.args.get('assetid', default = None, type = int) + if assetId is None: + return redirect("/static/img/placeholder.png") + + TargetX, TargetY = HandleResolutionCheck( + WidthParametersName = [ 'x', 'width' ], + HeightParametersName = [ 'y', 'height' ], + AllowedWidths = [48,180,420,60,100,150,352,324,576], + AllowedHeights = [48,180,420,60,100,150,352,324,576], + MustBeSquare = False, + CanRoundToNearest = True + ) + + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=assetId).first() + if PlaceIconObj is None: + return redirect("/static/img/placeholder.png") + if PlaceIconObj.moderation_status != 0 or PlaceIconObj.asset.moderation_status != 0: + if PlaceIconObj.moderation_status == 2 or PlaceIconObj.asset.moderation_status == 2: + return redirect("/static/img/ContentDeleted.png") + return redirect("/static/img/placeholder.png") + + ContentHash = PlaceIconObj.contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetX}-{TargetY}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetX, + TargetHeight = TargetY, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +@ImageRoute.route('/Game/Tools/ThumbnailAsset.ashx', methods=['GET']) +def thumbnail_asset(): + ExpectedFormat : str = request.args.get( key='fmt', default='png', type=str ) + AssetId : int = request.args.get( key='aid', default=None, type=int ) + + if AssetId is None: + return redirect("/static/img/placeholder.png") + if ExpectedFormat.lower() != "png": + return redirect("/static/img/placeholder.png") + + AssetObj : Asset = Asset.query.filter_by(id=AssetId).first() + if AssetObj is None: + return redirect("/static/img/placeholder.png") + + TargetWidth, TargetHeight = HandleResolutionCheck( + WidthParametersName = [ 'wd', 'width' ], + HeightParametersName = [ 'ht', 'height' ], + AllowedWidths = [48,180,420,60,100,150,352,75], + AllowedHeights = [48,180,420,60,100,150,352,75], + MustBeSquare = True, + CanRoundToNearest = True + ) + + thumbnail : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetId).order_by(AssetThumbnail.asset_version_id.desc()).first() + if thumbnail is None: + TakeThumbnail(AssetId) + return redirect("/static/img/placeholder.png") + if thumbnail.moderation_status != 0: + if thumbnail.moderation_status == 2 or thumbnail.asset.moderation_status == 2: + return redirect("/static/img/ContentDeleted.png") + return redirect("/static/img/placeholder.png") + + ContentHash = thumbnail.content_hash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + + return HandleImageResize( + ImageContentHash = ContentHash, + TargetWidth = TargetWidth, + TargetHeight = TargetHeight, + CroppedHash = CroppedHash, + CacheControl = "max-age=120" + ) + +import urllib.parse + +@ImageRoute.route("/v1/batch", methods=["POST"]) +@csrf.exempt +def BatchImageRequest(): + if request.headers.get("Content-Encoding") == "gzip": + try: + data = gzip.decompress(request.data) + except Exception as e: + return jsonify({"success": False, "message": "Invalid gzip data"}), 400 + try: + JSONData = json.loads(data) + except Exception as e: + return jsonify({"success": False, "message": "Invalid JSON data"}), 400 + else: + JSONData = request.json + if JSONData is None: + return jsonify({"success": False, "message": "Missing JSON data"}), 400 + + # [{'requestId': 'type=GameIcon&id=1&w=128&h=128&filters=', 'targetId': 1, 'type': 'GameIcon', 'size': '128x128', 'isCircular': False}] + + if len(JSONData) > 15: + return jsonify({"success": False, "message": "Too many requests"}), 400 + if len(JSONData) == 0: + return jsonify({"data":[]}), 200 + + ProcessedRequests = [] + for RequestObj in JSONData: + if "requestId" not in RequestObj or "targetId" not in RequestObj or "type" not in RequestObj or "size" not in RequestObj: + continue + if RequestObj["type"] not in [ "Avatar", "AvatarHeadShot", "GameIcon", "GameThumbnail", "Asset", "GroupIcon"]: + continue + + if "x" not in RequestObj["size"]: + continue + SplittedSize = RequestObj["size"].split("x") + if len(SplittedSize) != 2: + continue + try: + TargetWidth = int(SplittedSize[0]) + TargetHeight = int(SplittedSize[1]) + except: + continue + + AllowedSizes = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,36,1280,720] + TargetWidth = min(AllowedSizes, key=lambda x:abs(x-TargetWidth)) + TargetHeight = min(AllowedSizes, key=lambda x:abs(x-TargetHeight)) + + RequestType = RequestObj["type"] + + if RequestType == "Avatar": + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=RequestObj["targetId"]).first() + if ThumbnailObj is None: + continue + ContentHash = ThumbnailObj.full_contenthash + elif RequestType == "AvatarHeadShot": + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=RequestObj["targetId"]).first() + if ThumbnailObj is None: + continue + ContentHash = ThumbnailObj.headshot_contenthash + elif RequestType == "GameIcon": + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=RequestObj["targetId"]).first() + if PlaceIconObj is None: + continue + ContentHash = PlaceIconObj.contenthash + elif RequestType == "GameThumbnail" or RequestType == "Asset": + thumbnailObj : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=RequestObj["targetId"]).order_by(AssetThumbnail.asset_version_id.desc()).first() + if thumbnailObj is None: + continue + if thumbnailObj.moderation_status != 0: + continue + ContentHash = thumbnailObj.content_hash + elif RequestType == "GroupIcon": + ThumbnailObj : GroupIcon = GroupIcon.query.filter_by(group_id=RequestObj["targetId"]).first() + if ThumbnailObj is None: + continue + if ThumbnailObj.moderation_status != 0: + continue + ContentHash = ThumbnailObj.content_hash + else: + continue + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + if not s3helper.DoesKeyExist(CroppedHash): + if not s3helper.DoesKeyExist(ContentHash): + continue + ImageContent = BytesIO( s3helper.GetFileFromS3(ContentHash) ) + ImageObj = Image.open(ImageContent) + ImageObj = ImageObj.resize((int(TargetWidth),int(TargetHeight))).convert('RGBA') + + VirtualFile = BytesIO() + ImageObj.save(VirtualFile, "PNG") + VirtualFile.seek(0) + s3helper.UploadBytesToS3(VirtualFile.getvalue(), CroppedHash, contentType="image/png") + ProcessedRequests.append({ + "requestId": RequestObj["requestId"], + "targetId": RequestObj["targetId"], + "state": "Completed", + "imageUrl": f"{config.CDN_URL}/{CroppedHash}", + "version": None + }) + + return jsonify({ + "data": ProcessedRequests + }) + +@ImageRoute.route("/v1/users/avatar-headshot", methods=["GET"]) +def multi_avatar_headshot(): + userIdsCSV = request.args.get('userIds', default = None, type = str) + if userIdsCSV is None: + return jsonify( { "errors": [ { "code": 4, "message": "The requested Ids are invalid, of an invalid type or missing." } ] } ), 400 + + userIds = userIdsCSV.split(",") + if len(userIds) > 100: + return jsonify( { "errors": [ { "code": 1, "message": "There are too many requested Ids." } ] } ), 400 + + requestedSize = request.args.get('size', default = "48x48", type = str) + + if "x" not in requestedSize: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + SplittedSize = requestedSize.split("x") + if len(SplittedSize) != 2: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + try: + TargetWidth = int(SplittedSize[0]) + TargetHeight = int(SplittedSize[1]) + + AllowedSizes = [48,180,420,60,100,150,352,396,480,512,576,700,768,640,36,1280,720] + TargetWidth = min(AllowedSizes, key=lambda x:abs(x-TargetWidth)) + TargetHeight = min(AllowedSizes, key=lambda x:abs(x-TargetHeight)) + except: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + ProcessedRequests = [] + for userId in userIds: + try: + userId = int(userId) + except: + continue + ThumbnailObj : UserThumbnail = UserThumbnail.query.filter_by(userid=userId).first() + if ThumbnailObj is None: + continue + ContentHash = ThumbnailObj.headshot_contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + if not s3helper.DoesKeyExist(CroppedHash): + if not s3helper.DoesKeyExist(ContentHash): + continue + ImageContent = BytesIO( s3helper.GetFileFromS3(ContentHash) ) + ImageObj = Image.open(ImageContent) + ImageObj = ImageObj.resize((int(TargetWidth),int(TargetHeight))).convert('RGBA') + + VirtualFile = BytesIO() + ImageObj.save(VirtualFile, "PNG") + VirtualFile.seek(0) + s3helper.UploadBytesToS3(VirtualFile.getvalue(), CroppedHash, contentType="image/png") + ProcessedRequests.append({ + "targetId": userId, + "state": "Completed", + #"imageUrl": f"{config.CDN_URL}/{CroppedHash}", # 2020 Does not allow things like cdn.syntax.eco to be used directly in the "Texture" property so we have to redirect them to an allowed route on the www. domain + "imageUrl": f"{config.BaseURL}/headshot-thumbnail/image?userId={userId}&x={TargetWidth}&y={TargetHeight}", + "version": "1" + }) + + return jsonify({ + "data": ProcessedRequests + }), 200 + +@ImageRoute.route("/v1/games/icons", methods=["GET"]) +def get_game_icons(): + universeIdsCSV = request.args.get('universeIds', default = None, type = str) + if universeIdsCSV is None: + return jsonify( { "errors": [ { "code": 4, "message": "The requested Ids are invalid, of an invalid type or missing." } ] } ), 400 + universeIdsList = universeIdsCSV.split(",") + if len(universeIdsList) > 100: + return jsonify( { "errors": [ { "code": 1, "message": "There are too many requested Ids." } ] } ), 400 + + requestedSize = request.args.get('size', default = "50x50", type = str) + if "x" not in requestedSize: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + SplittedSize = requestedSize.split("x") + if len(SplittedSize) != 2: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + try: + TargetWidth = int(SplittedSize[0]) + TargetHeight = int(SplittedSize[1]) + + AllowedSizes = [50, 128, 150, 256, 420, 512] + TargetWidth = min(AllowedSizes, key=lambda x:abs(x-TargetWidth)) + TargetHeight = min(AllowedSizes, key=lambda x:abs(x-TargetHeight)) + except: + return jsonify( { "errors": [ { "code": 3, "message": "The requested size is invalid. Please see documentation for valid thumbnail size parameter name and format." } ] } ), 400 + + ProcessedRequests = [] + for universeId in universeIdsList: + try: + universeId = int(universeId) + except: + continue + PlaceIconObj : PlaceIcon = PlaceIcon.query.filter_by(placeid=universeId).first() + if PlaceIconObj is None: + continue + ContentHash = PlaceIconObj.contenthash + CroppedHash = hashlib.sha512(f"{ContentHash}-{TargetWidth}-{TargetHeight}-v3".encode('utf-8')).hexdigest() + if not s3helper.DoesKeyExist(CroppedHash): + if not s3helper.DoesKeyExist(ContentHash): + continue + ImageContent = BytesIO( s3helper.GetFileFromS3(ContentHash) ) + ImageObj = Image.open(ImageContent) + ImageObj = ImageObj.resize((int(TargetWidth),int(TargetHeight))).convert('RGBA') + + VirtualFile = BytesIO() + ImageObj.save(VirtualFile, "PNG") + VirtualFile.seek(0) + s3helper.UploadBytesToS3(VirtualFile.getvalue(), CroppedHash, contentType="image/png") + ProcessedRequests.append({ + "targetId": universeId, + "state": "Completed", + #"imageUrl": f"{config.CDN_URL}/{CroppedHash}" + "imageUrl": f"{config.BaseURL}/Thumbs/GameIcon.ashx?assetId={str(universeId)}&x={str(TargetWidth)}&y={str(TargetHeight)}" + }) + + return jsonify({ + "data": ProcessedRequests + }), 200 \ No newline at end of file diff --git a/app/routes/inventoryapi.py b/app/routes/inventoryapi.py new file mode 100644 index 0000000..5a6ad7d --- /dev/null +++ b/app/routes/inventoryapi.py @@ -0,0 +1,181 @@ +# inventory.roblox.com + +from flask import Blueprint, jsonify, request, make_response +from flask_wtf.csrf import CSRFError, generate_csrf +from app.extensions import db, redis_controller, limiter, csrf +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.asset import Asset +from app.util import membership +from app.enums.AssetType import AssetType +from app.enums.MembershipType import MembershipType + +InventoryAPI = Blueprint('InventoryAPI', __name__, url_prefix='/') +csrf.exempt(InventoryAPI) +@InventoryAPI.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@InventoryAPI.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@InventoryAPI.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +itemTypes = { + "asset": 0, + "gamepass": 1, + "badge": 2, + "bundle": 3 +} + +@InventoryAPI.route('/v1/users//items//', methods=['GET']) +@limiter.limit("60/minute") +def get_user_item(userId : int , itemType : str , itemTargetId : int): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 1, "message": "The specified user does not exist!" } ] } ), 400 + + try: + itemType = int(itemType) + if itemType < 0 or itemType > 3: + return jsonify( { "errors": [ { "code": 6, "message": "The specified item type does not exist." } ] } ), 400 + except ValueError: + if itemType.lower() not in itemTypes: + return jsonify( { "errors": [ { "code": 7, "message": "The specified Asset does not exist!" } ] } ), 400 + + itemType = itemTypes[itemType.lower()] + + assetObj : Asset = Asset.query.filter_by(id=itemTargetId).first() + if assetObj is None: + return jsonify( { "errors": [ { "code": 3, "message": "The specified item does not exist!" } ] } ), 400 + + dataList = [] + + userAssetList : list[UserAsset] = UserAsset.query.filter_by(userid=userId, assetid=itemTargetId).all() + for user_asset_obj in userAssetList: + dataList.append({ + "type": "Asset", + "id": user_asset_obj.assetid, + "name": user_asset_obj.asset.name, + "instanceId": user_asset_obj.id, + }) + + return jsonify({ + "previousPageCursor": None, + "nextPageCursor": None, + "data": dataList + }), 200 + +@InventoryAPI.route('/v1/users//items///is-owned', methods=['GET']) +@limiter.limit("60/minute") +def lookup_user_ownership(userId : int , itemType , itemTargetId : int): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 1, "message": "The specified user does not exist!" } ] } ), 400 + + try: + itemType = int(itemType) + if itemType < 0 or itemType > 3: + return jsonify( { "errors": [ { "code": 6, "message": "The specified item type does not exist." } ] } ), 400 + except ValueError: + if itemType.lower() not in itemTypes: + return jsonify( { "errors": [ { "code": 7, "message": "The specified Asset does not exist!" } ] } ), 400 + + itemType = itemTypes[itemType.lower()] + + assetObj : Asset = Asset.query.filter_by(id=itemTargetId).first() + if assetObj is None: + return jsonify( { "errors": [ { "code": 3, "message": "The specified item does not exist!" } ] } ), 400 + + userAssetObj : UserAsset = UserAsset.query.filter_by(userid=userId, assetid=itemTargetId).first() + if userAssetObj is None: + return "false", 200 + + return "true", 200 + +#@InventoryAPI.route('/v2/users//inventory', methods=['GET']) +@InventoryAPI.route('/v2/users//inventory//', methods=['GET']) +@InventoryAPI.route('/v2/users//inventory/', methods=['GET']) +@limiter.limit("60/minute") +def get_user_inventory(userId : int, assetTypeId : int = None): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 1, "message": "Invalid user Id." } ] } ), 400 + + cursorPage : int = request.args.get("cursor", default = 1, type = int) + if cursorPage < 1: + return jsonify( { "errors": [ { "code": 4, "message": "The specified cursor is invalid!" } ] } ), 400 + + pageLimit : int = request.args.get("limit", default = 10, type = int) + if pageLimit not in [10, 25, 50, 100]: + return jsonify( { "errors": [ { "code": 5, "message": "The specified limit is invalid!" } ] } ), 400 + + sortOrder : str = request.args.get("sortOrder", default = "Asc", type = str) + if sortOrder.lower() not in ["asc", "desc"]: + return jsonify( { "errors": [ { "code": 6, "message": "The specified sort order is invalid!" } ] } ), 400 + + try: + AssetTypeEnum : AssetType = AssetType(assetTypeId) + except ValueError: + return jsonify( { "errors": [ { "code": 2, "message": "Invalid asset type Id." } ] } ), 400 + + UserAssetList : list[UserAsset] = UserAsset.query.filter_by(userid=userId).outerjoin( + Asset, UserAsset.assetid == Asset.id + ).filter( + Asset.asset_type == AssetTypeEnum + ).order_by( + UserAsset.updated.desc() if sortOrder.lower() == "desc" else UserAsset.updated.asc() + ).paginate( + page = cursorPage, + per_page = pageLimit, + error_out = False + ) + + UserMembershipType : int = membership.GetUserMembership( userObject ).value + + dataList = [] + for user_asset_obj in UserAssetList.items: + user_asset_obj : UserAsset = user_asset_obj + dataList.append({ + "userAssetId": user_asset_obj.id, + "assetId": user_asset_obj.assetid, + "assetName": user_asset_obj.asset.name, + "collectibleItemId": None, + "collectibleItemInstanceId": None, + "serialNumber": user_asset_obj.serial, + "owner": { + "userId": user_asset_obj.userid, + "username": userObject.username, + "buildersClubMembershipType": UserMembershipType + }, + "created": user_asset_obj.created.isoformat(), + "updated": user_asset_obj.updated.isoformat(), + }) + + return jsonify({ + "previousPageCursor": str(UserAssetList.prev_num) if UserAssetList.has_prev else None, + "nextPageCursor": str(UserAssetList.next_num) if UserAssetList.has_next else None, + "data": dataList + }), 200 \ No newline at end of file diff --git a/app/routes/jobreporthandler.py b/app/routes/jobreporthandler.py new file mode 100644 index 0000000..aa4f5ed --- /dev/null +++ b/app/routes/jobreporthandler.py @@ -0,0 +1,708 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort +from app.extensions import db, redis_controller, csrf, get_remote_address +import requests +import logging +import json +import gzip +import json +import math +from datetime import datetime, timedelta + +from app.models.user import User +from app.models.asset import Asset +from app.models.usereconomy import UserEconomy +from app.models.gameservers import GameServer +from app.models.placeservers import PlaceServer +from app.models.placeserver_players import PlaceServerPlayer +from app.models.place import Place +from app.models.groups import Group +from app.models.game_session_log import GameSessionLog +from app.models.universe import Universe +from app.models.user_ban import UserBan + +from app.services.economy import IncrementTargetBalance +from app.services.gameserver_comm import perform_post +from app.pages.home.home import InsertRecentlyPlayed +from app.enums.TransactionType import TransactionType +from app.enums.PlaceYear import PlaceYear +from app.enums.BanType import BanType +from app.util.placeinfo import ClearPlayingCountCache, GetPlayingCount +from app.util.transactions import CreateTransaction + +from config import Config + +config = Config() + +JobReportHandler = Blueprint('jobreporthandler', __name__, url_prefix='/') + +def isValidAuthorizationToken( authtoken : str) -> GameServer: + if authtoken is None: + return None + RequestAddress = get_remote_address() + GameServerObject = GameServer.query.filter_by( accessKey = authtoken, serverIP = RequestAddress ).first() + return GameServerObject + +class InvalidGZIPData(Exception): + pass +class InvalidJSONData(Exception): + pass + +def IncrementPlaceVisits( PlaceObj : Place ): + PlaceObj.visitcount += 1 + + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + if UniverseObj is None: + return + UniverseObj.visit_count += 1 + + db.session.commit() + +def ParsePayloadData(throwException : bool = True): + """ + Handles RCC Post Data and returns the JSON data + """ + if request.headers.get("Content-Encoding") == "gzip": + try: + data = gzip.decompress(request.data) + except Exception as e: + raise InvalidGZIPData("Invalid gzip data") + try: + JSONData = json.loads(data) + except Exception as e: + raise InvalidJSONData("Invalid JSON data") + else: + JSONData = request.json + if JSONData is None: + raise InvalidJSONData("Invalid JSON data") + return JSONData + +def EvictPlayer( PlaceServerObject : PlaceServer, UserId : int ): + PlaceObj : Place = Place.query.filter_by( placeid = PlaceServerObject.serverPlaceId ).first() + MasterServer : GameServer | None = GameServer.query.filter_by(serverId=PlaceServerObject.originServerId).first() + + try: + if PlaceObj.placeyear in [PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.Sixteen]: + if PlaceObj.placeyear in [PlaceYear.Eighteen, PlaceYear.Twenty]: + ExecutionScript = f"""{{ + "Mode": "EvictPlayer", + "MessageVersion": 1, + "Settings": {{ + "PlayerId": {str(UserId)} + }} + }}""" + elif PlaceObj.placeyear in [PlaceYear.Sixteen]: + ExecutionScript = f"""for _, Player in pairs(game:GetService("Players"):GetPlayers()) do if Player.UserId == {UserId} then Player:Kick("Disconnected from game, possibly due to game joined from another device") end end""" + else: + raise Exception("PlaceYear is not compatible") + + ExecuteScriptRequest = perform_post( + TargetGameserver = MasterServer, + Endpoint = "Execute", + JSONData = { + "jobid": str(PlaceServerObject.serveruuid), + "script": ExecutionScript, + "arguments": [] + } + ) + + if ExecuteScriptRequest.status_code != 200: + raise Exception(f"Unexpected Status Code: {ExecuteScriptRequest.status_code}, {ExecuteScriptRequest.content}") + elif PlaceObj.placeyear in [PlaceYear.Fourteen]: + redis_controller.set(f"EvictPlayerRequest:{PlaceServerObject.serveruuid}:{UserId}", 1, ex=60) + StartTime = datetime.utcnow() + + while redis_controller.exists(f"EvictPlayerRequest:{PlaceServerObject.serveruuid}:{UserId}"): + if (datetime.utcnow() - StartTime).total_seconds() > 50: + raise Exception("Failed to evict player") + else: + raise Exception("PlaceYear is not compatible") + + except Exception as e: + logging.error(f"EvictPlayer failed to send request to kick player, {e}") + +@JobReportHandler.before_request +def before_request(): + requesterAddress = get_remote_address() + if requesterAddress is None: + return abort(404) + gameserverObj : GameServer = GameServer.query.filter_by(serverIP=requesterAddress).first() + if gameserverObj is None: + return abort(404) + if "UserRequest" in request.headers.get( key = "accesskey", default = "" ): + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + +@JobReportHandler.route('/internal/gameserver/reportshutdown', methods=['POST']) +@csrf.exempt +def reportshutdown(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner : GameServer | None = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + placeId = JSONData["PlaceId"] + jobId = JSONData["JobId"] + + PlaceServerObject : PlaceServer = PlaceServer.query.filter_by(serverPlaceId=placeId, serveruuid=jobId).first() + if PlaceServerObject is None: + return jsonify({"status": "error", "message": "Invalid place server"}),400 + + try: + logging.info(f"CloseJob : Closing {jobId} for place [{placeId}] because server reports shutdown") + perform_post( + TargetGameserver = PlaceServerOwner, + Endpoint = "CloseJob", + JSONData = { + "jobid": jobId, + } + ) + except Exception as e: + logging.error(f"Failed to close job ( {jobId} ) for place ( {placeId} ), {e}") + + PlaceServerOwner : GameServer = GameServer.query.filter_by(serverId=PlaceServerObject.originServerId).first() + PlaceServerPlayers = PlaceServerPlayer.query.filter_by(serveruuid=jobId).all() + for PlaceServerPlayerObject in PlaceServerPlayers: + db.session.delete(PlaceServerPlayerObject) + db.session.delete(PlaceServerObject) + db.session.commit() + + PlaceObj : Place = Place.query.filter_by(placeid=placeId).first() + if PlaceObj is not None: + ClearPlayingCountCache(PlaceObj) + + return jsonify({"status": "success"}),200 + +@JobReportHandler.route('/internal/gameserver/reportstats', methods=['POST']) +@csrf.exempt +def reportstats(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + placeId = JSONData["PlaceId"] + jobId = JSONData["JobId"] + serverAliveTime = JSONData["ServerAliveTime"] + + PlaceServerObject : PlaceServer = PlaceServer.query.filter_by(serverPlaceId=placeId, serveruuid=jobId).first() + if PlaceServerObject is None: + return jsonify({"status": "success"}),200 + PlaceServerObject.lastping = datetime.utcnow() + PlaceServerObject.serverRunningTime = serverAliveTime + db.session.commit() + + return jsonify({"status": "success"}),200 + +@JobReportHandler.route('/internal/gameserver/reportplacevalidation', methods=['POST']) +@csrf.exempt +def reportplacevalidation(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + ValidationRequestId = JSONData["ReqId"] + LoadSuccess = JSONData["LoadSuccess"] + ErrorMessage = None + if "ErrorMessage" in JSONData: + ErrorMessage = JSONData["ErrorMessage"] + + redis_controller.set(f"ValidatePlaceFileRequest:{ValidationRequestId}", json.dumps({ + "valid": LoadSuccess, + "error": ErrorMessage + }), ex=600) + logging.info(f"Place validation request ( {ValidationRequestId} ) has been completed") + return jsonify({"status": "success"}),200 + +def HandleUserTimePlayed( UserObj : User, Timeplayed : int, serverUUID : str = None, placeId : int = None ): + """ + For every 40 seconds the user has played a game we give them 1 ticket + however we limit the tickets to 100 per day and the user account must be + more than 2 days old + """ + if serverUUID is not None and placeId is not None: + GameSessionLogObject : GameSessionLog = GameSessionLog.query.filter_by(serveruuid=serverUUID, place_id=placeId, user_id=UserObj.id).first() + if GameSessionLogObject is None: + GameSessionLogObject = GameSessionLog( + user_id = UserObj.id, + serveruuid = serverUUID, + place_id = placeId, + joined_at = datetime.utcnow() - timedelta(seconds=Timeplayed), + left_at = datetime.utcnow() + ) + db.session.add(GameSessionLogObject) + else: + GameSessionLogObject.left_at = datetime.utcnow() + db.session.commit() + + if datetime.utcnow() - timedelta(days=2) < UserObj.created: + return + + RawTicketsEarned = math.floor(Timeplayed / 40) + CurrentDay = datetime.utcnow().day + TicketsEarnedToday = redis_controller.get(f"UserTicketsEarned:{UserObj.id}:{CurrentDay}") + if TicketsEarnedToday is None: + TicketsEarnedToday = 0 + else: + TicketsEarnedToday = int(TicketsEarnedToday) + + if TicketsEarnedToday >= 500: + return + + TicketsToGive = 500 - TicketsEarnedToday + if RawTicketsEarned > TicketsToGive: + RawTicketsEarned = TicketsToGive + + if RawTicketsEarned <= 0: + return + + IncrementTargetBalance(UserObj, RawTicketsEarned, 1) + CreateTransaction( + Reciever = UserObj, + Sender = User.query.filter_by(id=1).first(), + CurrencyAmount = RawTicketsEarned, + CurrencyType = 1, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = f"Played game for {str(round(Timeplayed,1))} seconds" + ) + AmountOfTicketsEarnedToday = TicketsEarnedToday + RawTicketsEarned + redis_controller.set(f"UserTicketsEarned:{UserObj.id}:{CurrentDay}", AmountOfTicketsEarnedToday, ex=86400) + +@JobReportHandler.route('/internal/gameserver/verifyplayer', methods=['POST']) +@csrf.exempt +def verifyplayer(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + jobId = JSONData["JobId"] + PlaceServerObject : PlaceServer = PlaceServer.query.filter_by(serveruuid=jobId).first() + if PlaceServerObject is None: + return jsonify({"status": "error", "message": "Invalid place server"}),400 + PlaceServerObject.lastping = datetime.utcnow() + PlaceObject : Place = Place.query.filter_by(placeid=PlaceServerObject.serverPlaceId).first() + if PlaceObject is None: + return jsonify({"status": "error", "message": "Invalid place"}),400 + + UserId = JSONData["UserId"] + UserObject : User = User.query.filter_by(id=UserId).first() + if UserObject is None or UserObject.accountstatus != 1: + return jsonify({"status": "error", "message": "Invalid user", "authenticated": False}), 200 + if "Username" not in JSONData or "CharacterAppearance" not in JSONData or "VerificationTicket" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data", "authenticated": False}), 200 + + Username = JSONData["Username"] + CharacterAppearance = JSONData["CharacterAppearance"] + VerificationTicket = JSONData["VerificationTicket"] + + authKeyName = f"joinashx-auth:{str(jobId)}:{str(UserId)}:{str(PlaceObject.placeid)}:{VerificationTicket}" + + if not redis_controller.exists(authKeyName): + return jsonify({"status": "error", "message": "Invalid join request", "authenticated": False}), 200 + + JoinInfo = json.loads(redis_controller.get(authKeyName)) + if JoinInfo is None: + return jsonify({"status": "error", "message": "Invalid join request", "authenticated": False}), 200 + redis_controller.delete(authKeyName) + if JoinInfo["CharacterAppearance"] != CharacterAppearance or JoinInfo["Username"] != Username: + return jsonify({"status": "error", "message": "Invalid join request", "authenticated": False}), 200 + return jsonify({"status": "success", "message": "Valid join request", "authenticated": True}), 200 + +@JobReportHandler.route('/internal/gameserver/reportplayers', methods=['POST']) +@csrf.exempt +def reportplayers(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + if "AuthToken" not in JSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + PlaceServerOwner = isValidAuthorizationToken(JSONData["AuthToken"]) + if PlaceServerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + jobId = JSONData["JobId"] + players = JSONData["Players"] # Array of players in the server which each player is a dictionary ( { "UserId": 1, "Name": "test" } ) + playerCount = len(players) + + PlaceServerObject : PlaceServer = PlaceServer.query.filter_by(serveruuid=jobId).first() + if PlaceServerObject is None: + return jsonify({"status": "error", "message": "Invalid place server"}),400 + PlaceServerObject.lastping = datetime.utcnow() + PlaceObject : Place = Place.query.filter_by(placeid=PlaceServerObject.serverPlaceId).first() + if PlaceObject is None: + return jsonify({"status": "error", "message": "Invalid place"}),400 + AssetObject : Asset = Asset.query.filter_by(id=PlaceObject.placeid).first() + CreatorObject : User | Group = None + if AssetObject.creator_type == 0: + CreatorObject = User.query.filter_by(id=AssetObject.creator_id).first() + else: + CreatorObject = Group.query.filter_by(id=AssetObject.creator_id).first() + + BadPlayers = [] # Array of players which must be kicked from the server + for player in players: + UserObject : User = User.query.filter_by(id=player["UserId"]).first() + if UserObject is None or UserObject.username != player["Name"] or UserObject.accountstatus != 1: + logging.info(f"/internal/gameserver/reportplayers - {jobId} - Invalid Player ( {player['UserId']} ) - {player['Name']}") + BadPlayers.append(player["UserId"]) + playerCount -= 1 + continue + + if redis_controller.exists(f"EvictPlayerRequest:{jobId}:{player['UserId']}"): + redis_controller.delete(f"EvictPlayerRequest:{jobId}:{player['UserId']}") + logging.info(f"/internal/gameserver/reportplayers - {jobId} - Player ( {player['UserId']} ) requested kick") + BadPlayers.append(player["UserId"]) + playerCount -= 1 + continue + + PlaceServerPlayerObject : PlaceServerPlayer = PlaceServerPlayer.query.filter_by(userid=player["UserId"]).first() + if PlaceServerPlayerObject is None: + if not redis_controller.exists(f"allow_join:{str(player['UserId'])}:{PlaceObject.placeid}:{str(jobId)}"): + logging.info(f"/internal/gameserver/reportplayers - {jobId} - Player ( {player['UserId']} ) is not allowed to join") + BadPlayers.append(player["UserId"]) + playerCount -= 1 + continue + + PlaceServerPlayerObject = PlaceServerPlayer(serveruuid=jobId, userid=player["UserId"], joinTime= datetime.utcnow()) + IncrementPlaceVisits(PlaceObject) + if CreatorObject is not None: + IncrementTargetBalance(CreatorObject, 1, 1) + UserObject.lastonline = datetime.utcnow() + InsertRecentlyPlayed(UserObj = UserObject, PlaceId = PlaceObject.placeid) + db.session.add(PlaceServerPlayerObject) + else: + UserId = player["UserId"] + if str(PlaceServerPlayerObject.serveruuid) == jobId: + PlaceServerPlayerObject.lastHeartbeat = datetime.utcnow() + UserObject.lastonline = datetime.utcnow() + else: + OtherPlaceServerObj = PlaceServer.query.filter_by(serveruuid=PlaceServerPlayerObj.serveruuid).first() + if OtherPlaceServerObj is not None: + EvictPlayer( OtherPlaceServerObj, UserId ) + + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObject.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObject.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=jobId, placeId=PlaceObject.placeid) + db.session.delete(PlaceServerPlayerObj) + + PlaceServerPlayerObj = PlaceServerPlayer(serveruuid=jobId, userid=UserId, joinTime= datetime.utcnow()) + IncrementPlaceVisits(PlaceObject) + if CreatorObject is not None: + IncrementTargetBalance(CreatorObject, 1, 1) + UserObject.lastonline = datetime.utcnow() + InsertRecentlyPlayed(UserObj = UserObject, PlaceId = PlaceObject.placeid) + + PlaceServerPlayers = PlaceServerPlayer.query.filter_by(serveruuid=jobId).all() + for PlaceServerPlayerObject in PlaceServerPlayers: + playerFound = False + for player in players: + if PlaceServerPlayerObject.userid == player["UserId"]: + playerFound = True + break + if playerFound == False: + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObject.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObject.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=jobId, placeId=PlaceObject.placeid) + db.session.delete(PlaceServerPlayerObject) + + PlaceServerObject.playerCount = playerCount + db.session.commit() + ClearPlayingCountCache(PlaceObject) + return jsonify({"status": "success", "bad": BadPlayers}),200 + +@JobReportHandler.route('/internal/gameserver/reportfailure', methods=['POST']) +@csrf.exempt +def reportfailure(): + # TODO: Implement this + return jsonify({"status": "success"}),200 + +# 2018+ endpoints + +@JobReportHandler.route("/v2/CreateOrUpdate/", methods=['POST']) +@csrf.exempt +def CreateOrUpdate(): + try: + JSONData = ParsePayloadData() + except InvalidGZIPData: + return jsonify({"status": "error", "message": "Invalid gzip data"}),400 + except InvalidJSONData: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + except Exception as e: + return jsonify({"status": "error", "message": "Unknown error occured while parsing data"}),400 + + RequestHost = request.headers.get('Host') + if RequestHost is None: + return abort(404) + if not RequestHost.startswith("gameinstances.api."): + return abort(404) + + AccessKey = request.args.get( key = 'apiKey', default = None, type = str) + JobId = request.args.get( key = 'gameId', default = None, type = str) + if AccessKey is None or JobId is None: + return abort(404) + + # Newer RCCs uses temporary access keys to report their game status and stuff + if not redis_controller.exists(f"GameServerAccessKey:{AccessKey}:{JobId}"): + logging.warning(f"Invalid access key ( {AccessKey} ) for server ( {JobId} )") + return abort(404) + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=JobId).first() + if PlaceServerObj is None: + originServerUUID = redis_controller.get(f"place:{JobId}:origin") + if originServerUUID is not None: + PlaceServerOwner : GameServer = GameServer.query.filter_by(serverId=originServerUUID).first() + if PlaceServerOwner is not None: + logging.info(f"CloseJob : Closing {JobId} because server does not exist in database") + perform_post( + TargetGameserver = PlaceServerOwner, + Endpoint = "CloseJob", + JSONData = { + "jobid": JobId, + } + ) + + logging.warning(f"Invalid server ( {JobId} )") + return abort(404) + PlaceServerOwner : GameServer = GameServer.query.filter_by(serverId=PlaceServerObj.originServerId).first() + + PlaceObject : Place = Place.query.filter_by(placeid=PlaceServerObj.serverPlaceId).first() + if PlaceObject is None: + logging.warning(f"Invalid place ( {PlaceServerObj.serverPlaceId} ) for server ( {JobId} )") + return jsonify({"status": "error", "message": "Invalid place"}),400 + AssetObject : Asset = Asset.query.filter_by(id=PlaceObject.placeid).first() + CreatorObject : User | Group = None + if AssetObject.creator_type == 0: + CreatorObject = User.query.filter_by(id=AssetObject.creator_id).first() + else: + CreatorObject = Group.query.filter_by(id=AssetObject.creator_id).first() + + PlaceServerObj.lastping = datetime.utcnow() + GameSessions : list = JSONData["GameSessions"] + if GameSessions is None: + return jsonify({"status": "error", "message": "Invalid JSON data"}),400 + + for GameSession in GameSessions: + UserId = GameSession["UserId"] + UserObject : User = User.query.filter_by(id=UserId).first() + if UserObject is None or UserObject.accountstatus != 1: + EvictPlayer( PlaceServerObj, UserId ) + logging.warning(f"User ( {UserId} ) is not a valid user, on server ( {PlaceServerObj.serveruuid} )") + continue + + PlaceServerPlayerObj : PlaceServerPlayer = PlaceServerPlayer.query.filter_by(serveruuid=JobId, userid=UserId).first() + if PlaceServerPlayerObj is None: + PlaceServerPlayerObj = PlaceServerPlayer(serveruuid=JobId, userid=UserId, joinTime=datetime.utcnow()) + db.session.add(PlaceServerPlayerObj) + IncrementPlaceVisits(PlaceObject) + if CreatorObject is not None: + IncrementTargetBalance(CreatorObject, 1, 1) + UserObject.lastonline = datetime.utcnow() + InsertRecentlyPlayed(UserObj = UserObject, PlaceId = PlaceObject.placeid) + else: + if str(PlaceServerPlayerObj.serveruuid) == JobId: + PlaceServerPlayerObj.lastHeartbeat = datetime.utcnow() + UserObject.lastonline = datetime.utcnow() + else: + OtherPlaceServerObj = PlaceServer.query.filter_by(serveruuid=PlaceServerPlayerObj.serveruuid).first() + if OtherPlaceServerObj is not None: + EvictPlayer( OtherPlaceServerObj, UserId ) + + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObject.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObject.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=JobId, placeId=PlaceObject.placeid) + db.session.delete(PlaceServerPlayerObj) + + PlaceServerPlayerObj = PlaceServerPlayer(serveruuid=JobId, userid=UserId, joinTime= datetime.utcnow()) + IncrementPlaceVisits(PlaceObject) + if CreatorObject is not None: + IncrementTargetBalance(CreatorObject, 1, 1) + UserObject.lastonline = datetime.utcnow() + InsertRecentlyPlayed(UserObj = UserObject, PlaceId = PlaceObject.placeid) + + PlaceServerPlayers = PlaceServerPlayer.query.filter_by(serveruuid=JobId).all() + for PlaceServerPlayerObject in PlaceServerPlayers: + playerFound = False + for GameSession in GameSessions: + if PlaceServerPlayerObject.userid == GameSession["UserId"]: + playerFound = True + break + if playerFound == False: + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObject.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObject.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=JobId, placeId=PlaceObject.placeid) + db.session.delete(PlaceServerPlayerObject) + + if PlaceServerObj.playerCount == 0 and len(GameSessions) == 0 and PlaceServerObj.serverRunningTime > 60: + logging.info(f"CloseJob : Closing {JobId} for place [{PlaceServerObj.serverPlaceId}] because there was no players in the server for more than 60 seconds") + perform_post( + TargetGameserver = PlaceServerOwner, + Endpoint = "CloseJob", + JSONData = { + "jobid": JobId, + } + ) + logging.info(f"Server ( {JobId} ) has been shutdown because there was no players in the server") + db.session.delete(PlaceServerObj) + db.session.commit() + return jsonify({"status": "success"}),200 + + PlaceServerObj.serverRunningTime = int(float(request.args.get('gameTime', '1', type=str))) + 1 + PlaceServerObj.playerCount = len(GameSessions) + db.session.commit() + + ClearPlayingCountCache(PlaceObject) + return jsonify({"status": "success"}),200 + +@JobReportHandler.route("/v2.0/Refresh", methods=['POST']) +@csrf.exempt +def Refresh(): + return jsonify({"status": "success"}),200 # We don't care about this endpoint since the above endpoint will handle it + +@JobReportHandler.route("/v1/Close/", methods=['POST']) +@csrf.exempt +def CloseJob(): + AccessKey = request.args.get( key = 'apiKey', default = None, type = str) + JobId = request.args.get( key = 'gameId', default = None, type = str) + if AccessKey is None or JobId is None: + return abort(404) + + if not redis_controller.exists(f"GameServerAccessKey:{AccessKey}:{JobId}"): + logging.warning(f"Invalid access key ( {AccessKey} ) for server ( {JobId} )") + return abort(404) + + PlaceServerObj : PlaceServer = PlaceServer.query.filter_by(serveruuid=JobId).first() + if PlaceServerObj is not None: + AllPlaceServerPlayers : list[PlaceServerPlayer] = PlaceServerPlayer.query.filter_by(serveruuid=JobId).all() + for PlaceServerPlayerObj in AllPlaceServerPlayers: + TotalTimePlayed = (datetime.utcnow() - PlaceServerPlayerObj.joinTime).total_seconds() + UserObj : User = User.query.filter_by(id=PlaceServerPlayerObj.userid).first() + HandleUserTimePlayed(UserObj, TotalTimePlayed, serverUUID=JobId, placeId=PlaceServerObj.serverPlaceId) + db.session.delete(PlaceServerPlayerObj) + db.session.delete(PlaceServerObj) + db.session.commit() + + return jsonify({"status": "success"}),200 + +@JobReportHandler.route("/game/report-water-sys", methods=['GET']) +@csrf.exempt +def ReportCheatersHandler(): + RequestHost = request.headers.get('Host') + if RequestHost is None: + return abort(404) + if not RequestHost.startswith("gameinstances.api."): + return abort(404) + + ReportingUserId = request.args.get( key = 'UserID', default = None, type = int) + if ReportingUserId is None: + return abort(404) + ReportingMessage = request.args.get( key = 'Message', default = None, type = str) + if ReportingMessage is None: + return abort(404) + AccessKey = request.args.get( key = 'AccessKey', default = '', type = str ) + if "UserRequest" in AccessKey: + return abort(404) + + ReportingRemoteAddress = get_remote_address() + ReportingGameServer : GameServer = GameServer.query.filter_by(serverIP=ReportingRemoteAddress).first() + + if ReportingGameServer is None: + return abort(404) + + UserObj : User = User.query.filter_by(id=ReportingUserId).first() + if UserObj is None: + return abort(404) + + BannableErrorCodes = { + "carol": "Lua vm hooked (20)", + "murdle": "Cheat Engine Stable Methods (0)", + "olivia": "Debugger found (10)" + } + + isBanned = False + if ReportingMessage.lower() in BannableErrorCodes: + LastestUserBanObj : UserBan = UserBan.query.filter_by(userid=UserObj.id, acknowledged = False).order_by(UserBan.id.desc()).first() + if LastestUserBanObj is None and UserObj.accountstatus == 1: + NewUserBanObj = UserBan( + userid = UserObj.id, + author_userid = 1, + ban_type = BanType.Deleted, + reason = "Exploiting in games is not tolerated on SYNTAX", + moderator_note = f"Automatic ban, received detection from gameserver. Error Code: {BannableErrorCodes[ReportingMessage.lower()]} / {BannableErrorCodes[ReportingMessage.lower()]}", + expires_at = None + ) + db.session.add(NewUserBanObj) + UserObj.accountstatus = 3 + db.session.commit() + + isBanned = True + + try: + requests.post( + url = config.CHEATER_REPORTS_DISCORD_WEBHOOK, + json = { + "content": f"Received Cheater Report from GameServer {ReportingGameServer.serverName} ( {ReportingGameServer.serverId} ) for User {UserObj.username} ( {UserObj.id} )\n```{ReportingMessage}```\n Was the user banned? **{isBanned}**", + "username": "Cheater Reports" + } + ) + except Exception as e: + logging.error(f"jobreporthandler : ReportCheatersHandler: Failed to send cheater report to discord, {e}") + + return "OK", 200 + +@JobReportHandler.route("/Game/ClientPresence.ashx", methods=['GET']) +def ClientPresence(): # Does nothing + return "OK", 200 \ No newline at end of file diff --git a/app/routes/kofihandler.py b/app/routes/kofihandler.py new file mode 100644 index 0000000..165d4b2 --- /dev/null +++ b/app/routes/kofihandler.py @@ -0,0 +1,124 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort +from config import Config +import json +import logging +from app.models.giftcard_key import GiftcardKey +from app.enums.GiftcardType import GiftcardType +from app.models.kofi_transaction import KofiTransaction +from app.extensions import db, csrf +import requests +import datetime +import random +import string +from requests.auth import HTTPBasicAuth +from config import Config + +config = Config() + +KofiHandlerRoute = Blueprint("kofihandler", __name__, template_folder="pages") + +def GenerateCode(): + Code = "" + for i in range(0, 5): + Chunk = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5)) + Code += Chunk + if i != 4: + Code += "-" + return Code + +@KofiHandlerRoute.before_request +def before_request(): + if config.KOFI_ENABLED is False: + return abort(404) + +@KofiHandlerRoute.route("/internal/kofi_handler", methods=["POST"]) +@csrf.exempt +def kofi_handler(): + try: + PurchaseData = json.loads( + request.form.get(key="data", default=None, type=str) + ) + if PurchaseData is None: + return abort(400) + except: + return abort(400) + + if PurchaseData["verification_token"] != Config.KOFI_VERIFICATION_TOKEN: + return abort(401) + + if "email" not in PurchaseData: + logging.error("KofiHandler: Email not in PurchaseData") + return abort(400) + UserEmail : str = PurchaseData["email"] + + logging.info(f"KofiHandler: Received donation from {UserEmail}, Transaction ID: {PurchaseData['kofi_transaction_id']}") + TransactionObj : KofiTransaction = KofiTransaction.query.filter_by(kofi_transaction_id=PurchaseData["kofi_transaction_id"]).first() + if TransactionObj is not None: + logging.error(f"KofiHandler: Transaction ID {PurchaseData['kofi_transaction_id']} already exists") + return abort(400) + + NewGiftcardCode : str = GenerateCode() + NewGiftcardObj : GiftcardKey = GiftcardKey( + key = NewGiftcardCode, + type = GiftcardType.Outrageous_BuildersClub, + value = 1 + ) + db.session.add(NewGiftcardObj) + db.session.commit() + + NewTransactionObj : KofiTransaction = KofiTransaction( + kofi_transaction_id = PurchaseData["kofi_transaction_id"], + timestamp = datetime.datetime.strptime(PurchaseData["timestamp"], "%Y-%m-%dT%H:%M:%SZ"), + donation_type = PurchaseData["type"], + amount = float(PurchaseData["amount"]), + currency = PurchaseData["currency"], + is_subscription_payment = PurchaseData["is_subscription_payment"], + message = PurchaseData["message"], + from_name = PurchaseData["from_name"], + from_email = PurchaseData["email"], + assigned_key = NewGiftcardObj.key + ) + db.session.add(NewTransactionObj) + db.session.commit() + + EmailData = { + "Messages": [ + { + "From": { + "Email": Config.MAILJET_NOREPLY_SENDER, + "Name": "Syntax Donation Processor" + }, + "To": [ + { + "Email": UserEmail, + "Name": PurchaseData["from_name"] + } + ], + "TemplateID": Config.MAILJET_DONATION_TEMPLATE_ID, + "TemplateLanguage": True, + "Subject": "Thank you for your donation!", + "Variables": { + "redeem_key": NewGiftcardObj.key, + } + } + ] + } + EmailResponse = requests.post( + url="https://api.mailjet.com/v3.1/send", + data=json.dumps(EmailData), + headers={ + "Content-Type": "application/json" + }, + auth = HTTPBasicAuth( + Config.MAILJET_APIKEY, + Config.MAILJET_SECRETKEY + ) + ) + + if EmailResponse.status_code != 200: + logging.error(f"KofiHandler: Failed to send email to {UserEmail}") + logging.error(EmailResponse.json()) + return "OK", 200 # We don't want to return an error to Ko-fi since we already processed the donation, so we just return OK + + logging.info(f"KofiHandler: Successfully sent email to {UserEmail} and processed donation") + return "OK", 200 diff --git a/app/routes/legacydatapersistence.py b/app/routes/legacydatapersistence.py new file mode 100644 index 0000000..deeb853 --- /dev/null +++ b/app/routes/legacydatapersistence.py @@ -0,0 +1,125 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from config import Config +from app.models.user import User +from app.models.gameservers import GameServer +from app.models.place import Place +from app.models.universe import Universe +from app.models.legacy_data_persistence import LegacyDataPersistence +from app.extensions import redis_controller, get_remote_address, csrf, limiter, db +from datetime import datetime +import logging +import gzip + +LegacyDataPersistenceRoute = Blueprint('legacyDataPersistence', __name__, url_prefix='/persistence/legacy') + +@LegacyDataPersistenceRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + logging.info(f"LegacyDataPersistence - UserAgent {request.user_agent} - Not allowed") + abort(404) + RemoteAddress = get_remote_address() + GameServerObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameServerObj is None: + logging.info(f"LegacyDataPersistence - {RemoteAddress} - Not found") + abort(404) + + if "Roblox-Place-Id" not in request.headers and "placeId" not in request.args: + logging.info(f"LegacyDataPersistence - GameServer {RemoteAddress} - Roblox-Place-Id header and cookie not found") + abort(404) + + PlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) or request.args.get( key = "placeId", default = None, type = int ) + if PlaceId is None: + logging.info(f"LegacyDataPersistence - GameServer {RemoteAddress} - Roblox-Place-Id header or arg not expected type") + abort(404) + + PlaceObj : Place = Place.query.filter_by( placeid = PlaceId ).first() + if PlaceObj is None: + logging.info(f"LegacyDataPersistence - Place {PlaceId} - Place not found") + abort(404) + +@LegacyDataPersistenceRoute.route('/load', methods=['POST', 'GET']) +@csrf.exempt +def LoadData(): + PlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) or request.args.get( key = "placeId", default = None, type = int ) + + RequestedUserId = request.args.get( + key = "userId", + default = None, + type = int + ) + if RequestedUserId is None: + return "Invalid request", 400 + + UserObj : User = User.query.filter_by( id = RequestedUserId ).first() + if UserObj is None: + return "Invalid request", 400 + + PlaceObj : Place = Place.query.filter_by( placeid = PlaceId ).first() + if PlaceObj is None: + return "Invalid request", 400 + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + if UniverseObj is None: + return "Invalid request", 400 + + LegacyDataPersistenceObj : LegacyDataPersistence = LegacyDataPersistence.query.filter_by( + userid = RequestedUserId, + universe_id = UniverseObj.id + ).first() + logging.info(f"LegacyDataPersistence - User {UserObj.id} - Place {PlaceId} - Universe {UniverseObj.id} - Data requested") + if LegacyDataPersistenceObj is None: + return "", 200 + + return gzip.decompress(LegacyDataPersistenceObj.data), 200 + +@LegacyDataPersistenceRoute.route('/save', methods=['POST']) +@csrf.exempt +def SaveData(): + PlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) or request.args.get( key = "placeId", default = None, type = int ) + + PayloadData = request.data + if request.content_encoding != "gzip": + PayloadData = gzip.compress( PayloadData ) + + RequestedUserId = request.args.get( + key = "userId", + default = None, + type = int + ) + if RequestedUserId is None: + return "Invalid request", 400 + + UserObj : User = User.query.filter_by( id = RequestedUserId ).first() + if UserObj is None: + return "Invalid request", 400 + + if len(PayloadData) > 1024 * 1024 * 2: + logging.info(f"LegacyDataPersistence - User {UserObj.id} - Place {PlaceId} - Universe {UniverseObj.id} - Payload too large, {len(PayloadData)} bytes") + return "Payload too large", 400 + + PlaceObj : Place = Place.query.filter_by( placeid = PlaceId ).first() + if PlaceObj is None: + return "Invalid request", 400 + UniverseObj : Universe = Universe.query.filter_by( id = PlaceObj.parent_universe_id ).first() + if UniverseObj is None: + return "Invalid request", 400 + + LegacyDataPersistenceObj : LegacyDataPersistence = LegacyDataPersistence.query.filter_by( + userid = RequestedUserId, + universe_id = UniverseObj.id + ).first() + + if LegacyDataPersistenceObj is None: + LegacyDataPersistenceObj = LegacyDataPersistence( + placeid = PlaceId, + userid = RequestedUserId, + universe_id = UniverseObj.id + ) + db.session.add( LegacyDataPersistenceObj ) + + LegacyDataPersistenceObj.data = PayloadData + LegacyDataPersistenceObj.last_updated = datetime.utcnow() + db.session.commit() + logging.info(f"LegacyDataPersistence - User {UserObj.id} - Place {PlaceId} - Universe {UniverseObj.id} - Saved {len(LegacyDataPersistenceObj.data)} bytes") + return "OK", 200 + + \ No newline at end of file diff --git a/app/routes/luawebservice.py b/app/routes/luawebservice.py new file mode 100644 index 0000000..00d7d43 --- /dev/null +++ b/app/routes/luawebservice.py @@ -0,0 +1,560 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +from config import Config +from app.models.asset import Asset +from app.models.userassets import UserAsset +from app.enums.AssetType import AssetType +from app.models.follow_relationship import FollowRelationship +from app.models.friend_relationship import FriendRelationship +from app.models.friend_request import FriendRequest +from app.models.package_asset import PackageAsset +from app.models.placeserver_players import PlaceServerPlayer +from app.util import auth, friends, websiteFeatures, membership +from app.services import economy +from app.enums.MembershipType import MembershipType +from app.models.user import User +from app.models.user_email import UserEmail +from sqlalchemy import or_, func +from app.extensions import limiter, db, csrf +import logging +from datetime import datetime, timedelta +from app.models.groups import GroupRole, GroupMember +from app.services.groups import GetGroupMemberCount +from app.services.groups import GetUserRankInGroup, GroupExceptions, GetUserRolesetInGroup +from app.services.user_relationships import followings +config = Config() + +LuaWebServiceRoute = Blueprint('luawebservice', __name__, url_prefix='/') + +def MakeReturnFalseResponse(): + Resposne = make_response("""false""") + Resposne.headers["Content-Type"] = "application/xml; charset=utf-8" + return Resposne + +def MakeReturnTrueResponse(): + Resposne = make_response("""true""") + Resposne.headers["Content-Type"] = "application/xml; charset=utf-8" + return Resposne + +def MakeReturnIntResponse(Value : int): + Resposne = make_response(f"""{str(Value)}""") + Resposne.headers["Content-Type"] = "application/xml; charset=utf-8" + return Resposne + +def MakeReturnStringResponse(Value : str): + Resposne = make_response(Value) + #Resposne = make_response(f"""{Value}""") + Resposne.headers["Content-Type"] = "application/xml; charset=utf-8" + return Resposne + +@LuaWebServiceRoute.route('/Game/LuaWebService/HandleSocialRequest.ashx', methods=['GET']) +def HandleSocialRequest(): + playerid = request.args.get("playerid", None, int) + groupid = request.args.get("groupid", None, int) + userid = request.args.get("userid", None, int) + method = request.args.get("method", None, str) + if method is None: + return MakeReturnFalseResponse() + if groupid == 1200769: + groupid = config.ADMIN_GROUP_ID + if method == "GetGroupRank": + try: + if playerid is None or groupid is None: + return MakeReturnIntResponse(0) + if playerid < 1 or groupid < 1: + return MakeReturnIntResponse(0) + return MakeReturnIntResponse(GetUserRankInGroup(playerid, groupid)) + except GroupExceptions.GroupDoesNotExist: + return MakeReturnIntResponse(0) + except GroupExceptions.UserDoesNotExist: + return MakeReturnIntResponse(0) + elif method == "IsInGroup": + try: + if playerid is None or groupid is None: + return MakeReturnFalseResponse() + if playerid < 1 or groupid < 1: + return MakeReturnFalseResponse() + if GetUserRankInGroup(playerid, groupid) == 0: + return MakeReturnFalseResponse() + return MakeReturnTrueResponse() + except GroupExceptions.GroupDoesNotExist: + return MakeReturnFalseResponse() + except GroupExceptions.UserDoesNotExist: + return MakeReturnFalseResponse() + elif method == "GetGroupRole": + try: + if playerid is None or groupid is None: + return MakeReturnStringResponse("Guest") + if playerid < 1 or groupid < 1: + return MakeReturnStringResponse("Guest") + if GetUserRankInGroup(playerid, groupid) == 0: + return MakeReturnStringResponse("Guest") + Roleset : GroupRole = GetUserRolesetInGroup(playerid, groupid) + return MakeReturnStringResponse(Roleset.name) + except GroupExceptions.GroupDoesNotExist: + return MakeReturnStringResponse("Guest") + except GroupExceptions.UserDoesNotExist: + return MakeReturnStringResponse("Guest") + elif method == "IsFriendsWith": + try: + if playerid is None or userid is None: + return MakeReturnFalseResponse() + if playerid < 1 or userid < 1: + return MakeReturnFalseResponse() + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(playerid, userid) + if FriendRelationshipObj is None: + return MakeReturnFalseResponse() + return MakeReturnTrueResponse() + except Exception as e: + logging.error(f"IsFriendsWith: {e}") + return MakeReturnFalseResponse() + + return MakeReturnFalseResponse() + +@LuaWebServiceRoute.route("/Game/GamePass/GamePassHandler.ashx", methods=['GET']) +def GamePassHandler(): + Action = request.args.get("Action", None, str) + UserID = request.args.get("UserID", None, int) + PassID = request.args.get("PassID", None, int) + if Action is None or UserID is None or PassID is None: + return MakeReturnFalseResponse() + if Action == "HasPass": + AssetObj : Asset = Asset.query.filter_by(id=PassID).first() + if AssetObj is None: + return MakeReturnFalseResponse() + if AssetObj.asset_type != AssetType.GamePass: + return MakeReturnFalseResponse() + + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=UserID, assetid=PassID).first() + if UserAssetObj is None: + return MakeReturnFalseResponse() + return MakeReturnTrueResponse() + return MakeReturnFalseResponse() + +@LuaWebServiceRoute.route("/user/request-friendship", methods=['POST']) +@auth.authenticated_client_endpoint +@csrf.exempt +@limiter.limit("1/second") +def RequestFriendship(): + UserID = request.args.get("recipientUserId", None, int) + if UserID is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id == UserID: + return jsonify({"success": False, "message": "Invalid request"}), 400 + TargetUserObj : User = User.query.filter_by(id=UserID).first() + if TargetUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + + TargetPlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by(userid=UserID).first() + if TargetPlaceServerPlayerObj is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + AuthenticatedPlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by(userid=AuthenticatedUser.id).first() + if AuthenticatedPlaceServerPlayerObj is None: + return jsonify({"success": False, "message": "Invalid request"}), 400 + if TargetPlaceServerPlayerObj.serveruuid != AuthenticatedPlaceServerPlayerObj.serveruuid: + return jsonify({"success": False, "message": "Invalid request"}), 400 + + FriendRelationshipObj : FriendRelationship | None = friends.GetFriendRelationship(AuthenticatedUser.id, UserID) + if FriendRelationshipObj is not None: + return jsonify({"success": True }),200 + FriendRequestObj : FriendRequest | None = FriendRequest.query.filter_by(requester_id=AuthenticatedUser.id, requestee_id=UserID).first() + if FriendRequestObj is not None: + return jsonify({"success": True }),200 + FriendRequestObj : FriendRequest | None = FriendRequest.query.filter_by(requester_id=UserID, requestee_id=AuthenticatedUser.id).first() + if FriendRequestObj is not None: + FriendRelationshipObj : FriendRelationship = FriendRelationship( + user_id=AuthenticatedUser.id, + friend_id=UserID + ) + db.session.add(FriendRelationshipObj) + db.session.delete(FriendRequestObj) + db.session.commit() + return jsonify({"success": True }),200 + FriendRequestObj : FriendRequest = FriendRequest( + requester_id=AuthenticatedUser.id, + requestee_id=UserID + ) + db.session.add(FriendRequestObj) + db.session.commit() + return jsonify({"success": True }),200 + +@LuaWebServiceRoute.route("/user/decline-friend-request", methods=['POST']) +@auth.authenticated_client_endpoint +@csrf.exempt +@limiter.limit("1/second") +def DeclineFriendRequest(): + UserID = request.args.get("requesterUserId", None, int) + if UserID is None: + jsonify({"success": False, "message": "Invalid request"}), 400 + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser.id == UserID: + jsonify({"success": False, "message": "Invalid request"}), 400 + TargetUserObj : User = User.query.filter_by(id=UserID).first() + if TargetUserObj is None: + jsonify({"success": False, "message": "Invalid request"}), 400 + FriendRequestObj : FriendRequest | None = FriendRequest.query.filter_by(requester_id=UserID, requestee_id=AuthenticatedUser.id).first() + if FriendRequestObj is None: + FriendRelationshipObj : FriendRelationship | None = friends.GetFriendRelationship(AuthenticatedUser.id, UserID) + if FriendRelationshipObj is None: + jsonify({"success": False, "message": "Invalid request"}), 400 + db.session.delete(FriendRelationshipObj) + db.session.commit() + return jsonify({"success": True }),200 + db.session.delete(FriendRequestObj) + db.session.commit() + return jsonify({"success": True }),200 + +@LuaWebServiceRoute.route("/user/following-exists", methods=["GET"]) +@limiter.limit("60/minute") +def FollowingExists(): + UserID = request.args.get("userId", None, int) + FollowerUserID = request.args.get("followerUserId", None, int) + if UserID is None or FollowerUserID is None: + return jsonify({"success": False, "isFollowing": False}) + + FollowedUserObj : User = User.query.filter_by(id=UserID).first() + FollowerUserObj : User = User.query.filter_by(id=FollowerUserID).first() + if FollowedUserObj is None or FollowerUserObj is None: + return jsonify({"success": False, "isFollowing": False}) + + return jsonify({"success": True, "isFollowing": followings.is_following( follower_user = FollowerUserObj, followed_user = FollowedUserObj)}) + +@LuaWebServiceRoute.route("/user/get-friendship-count", methods=["GET"]) +@limiter.limit("60/minute") +def GetFriendshipCount(): + UserID = request.args.get("userId", None, int) + if UserID is None: + AuthenticatedUser = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "count": 0}) + UserID = AuthenticatedUser.id + + FriendRelationshipCount : int = FriendRelationship.query.filter(or_( FriendRelationship.user_id == UserID, FriendRelationship.friend_id == UserID)).count() + + return jsonify({"success": True, "count": FriendRelationshipCount}) + +@LuaWebServiceRoute.route("/user/follow", methods=["POST"]) +@csrf.exempt +@auth.authenticated_client_endpoint +@limiter.limit("20/minute") +def FollowUser(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + TargetUserId = request.form.get("followedUserId", None, int) + if TargetUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + if TargetUserId == AuthenticatedUser.id: + return jsonify({"success": False, "message": "Invalid request"}),400 + + TargetUserObj : User = User.query.filter_by(id=TargetUserId).first() + if TargetUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + try: + followings.follow_user( + follower_user = AuthenticatedUser, + followed_user = TargetUserObj + ) + except followings.FollowingExceptions.AlreadyFollowing: + return jsonify({"success": True}),200 + except followings.FollowingExceptions.UserRateLimited: + return jsonify({"success": False, "message": "Rate limited"}),429 + except followings.FollowingExceptions.FollowingIsDisabled: + return jsonify({"success": False, "message": "Following is disabled"}),400 + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/user/unfollow", methods=["POST"]) +@csrf.exempt +@auth.authenticated_client_endpoint +@limiter.limit("20/minute") +def UnfollowUser(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + TargetUserId = request.form.get("followedUserId", None, int) + if TargetUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + if TargetUserId == AuthenticatedUser.id: + return jsonify({"success": False, "message": "Invalid request"}),400 + + TargetUserObj : User = User.query.filter_by(id=TargetUserId).first() + if TargetUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + try: + followings.unfollow_user( + current_follower = AuthenticatedUser, + followed_user = TargetUserObj + ) + except followings.FollowingExceptions.UserNotFollowing: + return jsonify({"success": True}),200 + except followings.FollowingExceptions.UserRateLimited: + return jsonify({"success": False, "message": "Rate limited"}),429 + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/my/economy-status", methods=["GET"]) +@auth.authenticated_client_endpoint +def EconomyStatus(): + return jsonify({ + "success": True, + "isMarketplaceEnabled": websiteFeatures.GetWebsiteFeature("EconomyPurchase") + }) + +@LuaWebServiceRoute.route("/currency/balance", methods=["GET"]) +@auth.authenticated_client_endpoint +def EconomyBalance(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + RobuxBal, TixBal = economy.GetUserBalance(AuthenticatedUser) + return jsonify({ + "success": True, + "robux": RobuxBal, + "tickets": TixBal + }) + +@LuaWebServiceRoute.route("/ownership/hasasset", methods=["GET"]) +@LuaWebServiceRoute.route("/ownership/hasAsset", methods=["GET"]) +@auth.gameserver_authenticated_required +def HasAsset(): + AssetID = request.args.get("assetId", None, int) + if AssetID is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + UserId = request.args.get("userId", None, int) + if UserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + AssetObj : Asset = Asset.query.filter_by(id=AssetID).first() + if AssetObj is None: + return "false",200 + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=UserId, assetid=AssetID).first() + if UserAssetObj is None: + return "false",200 + return "true",200 + +@LuaWebServiceRoute.route("/Friend/AreFriends", methods=["GET"]) +@auth.gameserver_authenticated_required +def AreFriends(): + userId = request.args.get("userId", None, int) + otherUserId = request.args.get("otherUserId", None, int) + otherUserIdList = request.args.getlist("otherUserIds") + if userId is None or ( otherUserId is None and len(otherUserIdList) == 0): + return jsonify({"success": False, "message": "Invalid request"}),400 + if otherUserId is not None: + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(userId, otherUserId) + if FriendRelationshipObj is not None: + return jsonify({"success": True, "friendStatus": 2}) + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id = userId, requestee_id=otherUserId).first() + if FriendRequestObj is not None: + return jsonify({"success": True, "friendStatus": 3}) + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id = otherUserId, requestee_id=userId).first() + if FriendRequestObj is not None: + return jsonify({"success": True, "friendStatus": 4}) + return jsonify({"success": True, "friendStatus": 1}) + else: + if len(otherUserIdList) > 100: + return jsonify({"success": False, "message": "Invalid request"}),400 + + RequestResult = "" + for TargetUserId in otherUserIdList: + try: + TargetUserId = int(TargetUserId) + except: + continue + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(userId, TargetUserId) + if FriendRelationshipObj is not None: + RequestResult += f"{str(TargetUserId)}," + continue + return RequestResult,200 + +@LuaWebServiceRoute.route("/Friend/CreateFriend", methods=["POST"]) +@csrf.exempt +@auth.gameserver_authenticated_required +def CreateFriend(): + firstUserId = request.args.get( "firstUserId", default = None, type = int ) + secondUserId = request.args.get( "secondUserId", default = None, type = int ) + + if firstUserId is None or secondUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + firstUserObj : User = User.query.filter_by(id=firstUserId).first() + secondUserObj : User = User.query.filter_by(id=secondUserId).first() + if firstUserObj is None or secondUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(firstUserId, secondUserId) + if FriendRelationshipObj is not None: + return jsonify({"success": True}),200 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=firstUserId, requestee_id=secondUserId).first() + if FriendRequestObj is not None: + db.session.delete(FriendRequestObj) + SecondFriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=secondUserId, requestee_id=firstUserId).first() + if SecondFriendRequestObj is not None: + db.session.delete(SecondFriendRequestObj) + + FriendRelationshipObj = FriendRelationship( + user_id=firstUserId, + friend_id=secondUserId + ) + db.session.add(FriendRelationshipObj) + db.session.commit() + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/Friend/BreakFriend", methods=["POST"]) +@csrf.exempt +@auth.gameserver_authenticated_required +def BreakFriend(): + firstUserId = request.args.get( "firstUserId", default = None, type = int ) + secondUserId = request.args.get( "secondUserId", default = None, type = int ) + + if firstUserId is None or secondUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + firstUserObj : User = User.query.filter_by(id=firstUserId).first() + secondUserObj : User = User.query.filter_by(id=secondUserId).first() + if firstUserObj is None or secondUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(firstUserId, secondUserId) + if FriendRelationshipObj is not None: + db.session.delete(FriendRelationshipObj) + db.session.commit() + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/Friend/CreateFriendRequest", methods=["POST"]) +@csrf.exempt +@auth.gameserver_authenticated_required +def CreateFriendRequest(): + requesterUserId = request.args.get( "requesterUserId", default = None, type = int ) + requestedUserId = request.args.get( "requestedUserId", default = None, type = int ) + + if requesterUserId is None or requestedUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + requesterUserObj : User = User.query.filter_by(id=requesterUserId).first() + requestedUserObj : User = User.query.filter_by(id=requestedUserId).first() + + if requesterUserObj is None or requestedUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRelationshipObj : FriendRelationship = friends.GetFriendRelationship(requesterUserId, requestedUserId) + if FriendRelationshipObj is not None: + return jsonify({"success": True}),200 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=requesterUserId, requestee_id=requestedUserId).first() + OtherFriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=requestedUserId, requestee_id=requesterUserId).first() + if FriendRequestObj is not None and OtherFriendRequestObj is None: + return jsonify({"success": True}),200 + + if OtherFriendRequestObj is not None: + if FriendRequestObj is not None: + db.session.delete(FriendRequestObj) + + db.session.delete(OtherFriendRequestObj) + FriendRelationshipObj = FriendRelationship( + user_id=requesterUserId, + friend_id=requestedUserId + ) + db.session.add(FriendRelationshipObj) + db.session.commit() + + return jsonify({"success": True}),200 + + FriendRequestObj = FriendRequest( + requester_id=requesterUserId, + requestee_id=requestedUserId + ) + db.session.add(FriendRequestObj) + db.session.commit() + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/Friend/DeleteFriendRequest", methods=["POST"]) +@csrf.exempt +@auth.gameserver_authenticated_required +def DeleteFriendRequest(): + requesterUserId = request.args.get( "requesterUserId", default = None, type = int ) + requestedUserId = request.args.get( "requestedUserId", default = None, type = int ) + + if requesterUserId is None or requestedUserId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + requesterUserObj : User = User.query.filter_by(id=requesterUserId).first() + requestedUserObj : User = User.query.filter_by(id=requestedUserId).first() + + if requesterUserObj is None or requestedUserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + FriendRequestObj : FriendRequest = FriendRequest.query.filter_by(requester_id=requesterUserId, requestee_id=requestedUserId).first() + if FriendRequestObj is not None: + db.session.delete(FriendRequestObj) + db.session.commit() + + return jsonify({"success": True}),200 + +@LuaWebServiceRoute.route("/v2/users//groups/roles", methods=["GET"]) +def GetUserGroupRoles( userId : int ): + if userId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + UserObj : User = User.query.filter_by(id=userId).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + GroupRoles = [] + UserGroupMemberList : list[GroupMember] = GroupMember.query.filter_by(user_id = userId).all() + for GroupMemberObj in UserGroupMemberList: + GroupRoles.append({ + "group": { + "id": GroupMemberObj.group_id, + "name": GroupMemberObj.group.name, + "memberCount": GetGroupMemberCount(GroupMemberObj.group) + }, + "role" : { + "id": GroupMemberObj.group_role_id, + "name": GroupMemberObj.group_role.name, + "rank": GroupMemberObj.group_role.rank + } + }) + + if GroupMemberObj.group_id == config.ADMIN_GROUP_ID: + GroupRoles.append({ + "group": { + "id": 1200769, + "name": GroupMemberObj.group.name, + "memberCount": GetGroupMemberCount(GroupMemberObj.group) + }, + "role" : { + "id": GroupMemberObj.group_role_id, + "name": GroupMemberObj.group_role.name, + "rank": GroupMemberObj.group_role.rank + } + }) + + return jsonify({ + "data": GroupRoles + }) + +@LuaWebServiceRoute.route("/users/get-by-username/", methods=["GET"]) +def GetUserByUsername(): + RequestedUsername = request.args.get( + key = "username", + default = None, + type = str + ) + if RequestedUsername is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + UserObj : User = User.query.filter(func.lower(User.username) == func.lower(RequestedUsername)).first() + if UserObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + return jsonify({ + "Id": UserObj.id, + "Username": UserObj.username + }), 200 \ No newline at end of file diff --git a/app/routes/marketplace.py b/app/routes/marketplace.py new file mode 100644 index 0000000..094e823 --- /dev/null +++ b/app/routes/marketplace.py @@ -0,0 +1,408 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, after_this_request +from app.util import auth, friends, websiteFeatures, transactions, redislock +import logging +from app.services import economy +from app.extensions import db, limiter, csrf, redis_controller, user_limiter +from app.models.asset import Asset +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.package_asset import PackageAsset +from app.models.place_developer_product import DeveloperProduct +from app.models.product_receipt import ProductReceipt +from app.models.groups import Group +from app.enums.AssetType import AssetType +from app.enums.TransactionType import TransactionType +from app.pages.catalog.catalog import IncrementAssetCreator, CreateTransactionForSale +import math + +MarketPlaceRoute = Blueprint("marketplace", __name__, url_prefix="/marketplace") +EconomyV1Route = Blueprint("economyv1", __name__, url_prefix="/") + +@MarketPlaceRoute.route("/game-pass-product-info", methods=["GET"]) +@MarketPlaceRoute.route("/productinfo", methods=["GET"]) +def productinfo(): + assetid = request.args.get("assetId") or request.args.get("gamePassId") + if assetid is None: + return "Invalid request",400 + asset : Asset = Asset.query.filter_by(id=assetid).first() + if asset is None: + return "Asset not found",404 + AssetCreator : User | Group = User.query.filter_by(id=asset.creator_id).first() if asset.creator_type == 0 else Group.query.filter_by(id=asset.creator_id).first() + if AssetCreator is None: + AssetCreatorName = "Unknown" + else: + AssetCreatorName = AssetCreator.username if isinstance(AssetCreator, User) else AssetCreator.name + return jsonify({ + "Name": asset.name, + "Description": asset.description, + "Created": asset.created_at, + "Updated": asset.updated_at, + "PriceInRobux": asset.price_robux, + "PriceInTickets": asset.price_tix, + "AssetId": asset.id, + "ProductId": asset.id, + "AssetTypeId": asset.asset_type.value, + "Creator": { + "Id": asset.creator_id, + "Name": AssetCreatorName, + "CreatorType": asset.creator_type + }, + "MinimumMembershipLevel": 0, + "IsForSale": asset.is_for_sale + }) + +@MarketPlaceRoute.route("/productDetails", methods=["GET"]) +def productDetails(): + productId = request.args.get( key = "productId", default = None, type = int ) + if productId is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + TargetDeveloperProduct : DeveloperProduct = DeveloperProduct.query.filter_by( productid = productId ).first() + if TargetDeveloperProduct is None: + return jsonify({ + "success": False, + "message": "Invalid request" + }), 400 + + return jsonify({ + "TargetId" : 1, + "ProductType": "Developer Product", + "AssetId": 0, + "ProductId": TargetDeveloperProduct.productid, + "Name": TargetDeveloperProduct.name, + "Description": TargetDeveloperProduct.description, + "AssetTypeId": 0, + "Creator": { + "Id": 0, + "Name": None, + "CreatorType": None, + "CreatorTargetId": 0 + }, + "IconImageAssetId": TargetDeveloperProduct.iconimage_assetid, + "Created": TargetDeveloperProduct.created_at.strftime('%Y-%m-%dT%H:%M:%S.%fZ'), + "Updated": TargetDeveloperProduct.updated_at.strftime('%Y-%m-%dT%H:%M:%S.%fZ'), + "PriceInRobux": TargetDeveloperProduct.robux_price, + "PremiumPriceInRobux": 0, + "PriceInTickets": 0, + "IsNew": False, + "IsForSale": TargetDeveloperProduct.is_for_sale, + "IsPublicDomain": False, + "IsLimited": False, + "IsLimitedUnique": False, + "Remaining": None, + "Sales": None, + "MinimumMembershipLevel": 0 + }) + +@MarketPlaceRoute.route("/purchase", methods=["POST"]) +@csrf.exempt +@auth.authenticated_required_api +@limiter.limit("20/minute") +@limiter.limit("1/second") +@user_limiter.limit("20/minute") +@user_limiter.limit("1/second") +def inGamePurchaseHandler(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + + productId = request.form.get("productId", None, int) + currencyTypeId = request.form.get("currencyTypeId", None, int) + expectedPrice = request.form.get("purchasePrice", None, int) + + if not websiteFeatures.GetWebsiteFeature("EconomyPurchase"): + return jsonify({"success": False, "status": "EconomyDisabled"}),400 + if productId is None or currencyTypeId is None or expectedPrice is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + currencyType = 0 if currencyTypeId == 1 else 1 + AssetObj : Asset = Asset.query.filter_by(id=productId).first() + if AssetObj is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + if AssetObj.is_limited or not AssetObj.is_for_sale: + return jsonify({"success": False, "status": "NotForSale"}),400 + + LockAssetName = f"asset:{str(AssetObj.id)}" + AssetLock = redislock.acquire_lock(LockAssetName, acquire_timeout=15, lock_timeout=1) + if AssetLock is False: + return jsonify({"success": False, "status": "InternalServerError"}),500 + + @after_this_request + def release_asset_lock(response): + if AssetLock: + redislock.release_lock(LockAssetName, AssetLock) + + UserRobuxBalance, UserTixBalance = economy.GetUserBalance(AuthenticatedUser) + if currencyType == 0: + if AssetObj.price_robux == 0 and AssetObj.price_tix != 0: + return jsonify({"success": False, "status": "CurrencyNotAccepted"}),400 + if AssetObj.price_robux != expectedPrice: + return jsonify({"success": False, "status": "PriceChanged"}),400 + if UserRobuxBalance < expectedPrice: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + else: + if AssetObj.price_tix == 0 and AssetObj.price_robux != 0: + return jsonify({"success": False, "status": "CurrencyNotAccepted"}),400 + if AssetObj.price_tix != expectedPrice: + return jsonify({"success": False, "status": "PriceChanged"}),400 + if UserTixBalance < expectedPrice: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=productId).first() + if UserAssetObj is not None: + return jsonify({"success": False, "status": "AlreadyOwned"}),400 + try: + economy.DecrementTargetBalance(AuthenticatedUser, expectedPrice, currencyType) + except economy.InsufficientFundsException: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + UserAssetObj = UserAsset( + userid = AuthenticatedUser.id, + assetid = productId + ) + + if AssetObj.asset_type == AssetType.Package: + PackageAssets = PackageAsset.query.filter_by(package_asset_id=AssetObj.id).all() + for PackageAssetObj in PackageAssets: + NewPackageAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=PackageAssetObj.asset_id) + db.session.add(NewPackageAssetObj) + + IncrementAssetCreator(AssetObj, expectedPrice, currencyType) + + AssetObj.sale_count += 1 + db.session.add(UserAssetObj) + db.session.commit() + + try: + if AssetObj.creator_type == 0: + SellerUserObj : User = User.query.filter_by(id=AssetObj.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObj, + PurchasePrice = expectedPrice, + PurchaseCurrencyType = currencyType, + Seller = SellerUserObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + elif AssetObj.creator_type == 1: + SellerGroupObj : Group = Group.query.filter_by(id=AssetObj.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObj, + PurchasePrice = expectedPrice, + PurchaseCurrencyType = currencyType, + Seller = SellerGroupObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + except Exception as e: + logging.warn(f"Failed to create transaction log for sale of asset {str(AssetObj.id)}, message: {str(e)}") + pass + + return jsonify({"success": True}),200 + +@EconomyV1Route.route("/v1/purchases/products/", methods=["POST"]) +@csrf.exempt +@auth.authenticated_required_api +@user_limiter.limit("30/minute") +@user_limiter.limit("1/second") +def SubmitItemPurchaseEconomy( assetid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"purchased": False, "reason": "Unauthorized"}),401 + + if "expectedPrice" not in request.json or "expectedCurrency" not in request.json: + return jsonify({"purchased": False, "reason": "Invalid request", "errorMsg": "Invalid Request"}),400 + + productId = assetid + currencyTypeId = request.json["expectedCurrency"] + expectedPrice = request.json["expectedPrice"] + + if not websiteFeatures.GetWebsiteFeature("EconomyPurchase"): + return jsonify({"purchased": False, "reason": "EconomyDisabled", "errorMsg": "Purchasing is temporarily disabled, try again later."}),400 + if productId is None or currencyTypeId is None or expectedPrice is None: + return jsonify({"purchased": False, "reason": "Invalid request", "errorMsg": "Invalid Request"}),400 + currencyType = 0 if currencyTypeId == 1 else 1 + AssetObj : Asset = Asset.query.filter_by(id=productId).first() + if AssetObj is None: + return jsonify({"purchased": False, "reason": "Invalid request", "errorMsg": "Invalid Request"}),400 + if AssetObj.is_limited or not AssetObj.is_for_sale: + return jsonify({"purchased": False, "reason": "NotForSale", "errorMsg": "This item is not for sale"}),400 + + LockAssetName = f"asset:{str(AssetObj.id)}" + AssetLock = redislock.acquire_lock(LockAssetName, acquire_timeout=15, lock_timeout=1) + if AssetLock is False: + return jsonify({"success": False, "status": "InternalServerError"}),500 + + @after_this_request + def release_asset_lock(response): + if AssetLock: + redislock.release_lock(LockAssetName, AssetLock) + + UserRobuxBalance, UserTixBalance = economy.GetUserBalance(AuthenticatedUser) + if currencyType == 0: + if AssetObj.price_robux == 0 and AssetObj.price_tix != 0: + return jsonify({"purchased": False, "reason": "CurrencyNotAccepted", "errorMsg": "This currency is not accepted for this item"}),400 + if AssetObj.price_robux != expectedPrice: + return jsonify({"purchased": False, "reason": "PriceChanged", "errorMsg": "The price has changed"}),400 + if UserRobuxBalance < expectedPrice: + return jsonify({"purchased": False, "reason": "InsufficientFunds", "errorMsg": "You do not have enough Robux to purchase this item."}),400 + else: + if AssetObj.price_tix == 0 and AssetObj.price_robux != 0: + return jsonify({"purchased": False, "reason": "CurrencyNotAccepted", "errorMsg": "This currency is not accepted for this item"}),400 + if AssetObj.price_tix != expectedPrice: + return jsonify({"purchased": False, "reason": "PriceChanged", "errorMsg": "The price has changed"}),400 + if UserTixBalance < expectedPrice: + return jsonify({"purchased": False, "reason": "InsufficientFunds", "errorMsg": "You do not have enough Robux to purchase this item."}),400 + # Check if the user already owns the asset + UserAssetObj : UserAsset = UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=productId).first() + if UserAssetObj is not None: + return jsonify({"purchased": False, "reason": "AlreadyOwned", "errorMsg": "You already own this item."}),400 + try: + economy.DecrementTargetBalance(AuthenticatedUser, expectedPrice, currencyType) + except economy.InsufficientFundsException: + return jsonify({"purchased": False, "reason": "InsufficientFunds", "errorMsg": "You do not have enough Robux to purchase this item."}),400 + UserAssetObj = UserAsset( + userid = AuthenticatedUser.id, + assetid = productId + ) + + if AssetObj.asset_type == AssetType.Package: + PackageAssets = PackageAsset.query.filter_by(package_asset_id=AssetObj.id).all() + for PackageAssetObj in PackageAssets: + NewPackageAssetObj = UserAsset(userid=AuthenticatedUser.id, assetid=PackageAssetObj.asset_id) + db.session.add(NewPackageAssetObj) + + IncrementAssetCreator(AssetObj, expectedPrice, currencyType) + + AssetObj.sale_count += 1 + db.session.add(UserAssetObj) + db.session.commit() + + try: + if AssetObj.creator_type == 0: + SellerUserObj : User = User.query.filter_by(id=AssetObj.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObj, + PurchasePrice = expectedPrice, + PurchaseCurrencyType = currencyType, + Seller = SellerUserObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + elif AssetObj.creator_type == 1: + SellerGroupObj : Group = Group.query.filter_by(id=AssetObj.creator_id).first() + CreateTransactionForSale( + AssetObj = AssetObj, + PurchasePrice = expectedPrice, + PurchaseCurrencyType = currencyType, + Seller = SellerGroupObj, + Buyer = AuthenticatedUser, + ApplyTaxAutomatically = True + ) + except Exception as e: + logging.warn(f"Failed to create transaction log for sale of asset {str(AssetObj.id)}, message: {str(e)}") + pass + + if AssetObj.creator_type == 0: + CreatorObj : User = User.query.filter_by(id = AssetObj.creator_id).first() + sellerName = CreatorObj.username + else: + CreatorObj : Group = Group.query.filter_by(id = AssetObj.creator_id).first() + sellerName = CreatorObj.name + + return jsonify({ + "purchased": True, + "reason": "Success", + "productId": assetid, + "currency": currencyTypeId, + "assetId": assetid, + "assetName": AssetObj.name, + "assetType": AssetObj.asset_type.name, + "assetTypeDisplayName": AssetObj.asset_type.name, + "assetIsWearable": False, + "sellerName": sellerName, + "transactionVerb": "bought", + "isMultiPrivateSale": False + }) + +@MarketPlaceRoute.route("/submitpurchase", methods=["POST"]) +@csrf.exempt +@auth.authenticated_required_api +@user_limiter.limit("20/minute") +@user_limiter.limit("1/second") +def SubmitProductPurchase(): + productId : int = request.form.get( key = "productId", default = None, type = int ) + currencyTypeId : int = request.form.get( key = "currencyTypeId", default = None, type = int ) + expectedUnitPrice : int = request.form.get( key = "expectedUnitPrice", default = None, type = int ) + placeId : int = request.form.get( key = "placeId", default = None, type = int ) + requestId : str = request.form.get( key = "requestId", default = None, type = str ) + + if not websiteFeatures.GetWebsiteFeature("EconomyPurchase"): + return jsonify({"success": False, "status": "EconomyDisabled"}),400 + if productId is None or currencyTypeId is None or expectedUnitPrice is None or placeId is None or requestId is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + currencyType = 0 if currencyTypeId == 1 else 1 + TargetDeveloperProduct : DeveloperProduct = DeveloperProduct.query.filter_by( productid = productId, placeid = placeId ).first() + if TargetDeveloperProduct is None: + return jsonify({"success": False, "message": "Invalid request"}),400 + + PlaceAssetObj : Asset = Asset.query.filter_by( id = TargetDeveloperProduct.placeid ).first() + + if TargetDeveloperProduct.is_for_sale == False: + return jsonify({"success": False, "message": "Invalid request"}),400 + if TargetDeveloperProduct.robux_price != expectedUnitPrice: + return jsonify({"success": False, "message": "Invalid request"}),400 + + if redis_controller.exists(f"purchase_request:{requestId}"): + return jsonify({"success": False, "message": "Invalid request"}),400 + + if currencyType != 0: # Developer Products can only be purchased with Robux + return jsonify({"success": False, "message": "Invalid request"}),400 + + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + UserRobuxBalance, _ = economy.GetUserBalance(AuthenticatedUser) + if UserRobuxBalance < expectedUnitPrice: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + + try: + economy.DecrementTargetBalance(AuthenticatedUser, expectedUnitPrice, currencyType) + except economy.InsufficientFundsException: + return jsonify({"success": False, "status": "InsufficientFunds"}),400 + OwnerObj : User | Group = User.query.filter_by( id = PlaceAssetObj.creator_id ).first() if PlaceAssetObj.creator_type == 0 else Group.query.filter_by( id = PlaceAssetObj.creator_id ).first() + + transactions.CreateTransaction( + Reciever = OwnerObj, + Sender = AuthenticatedUser, + CurrencyAmount = expectedUnitPrice, + CurrencyType = currencyType, + TransactionType = TransactionType.Purchase, + CustomText = f"Purchase of Product({TargetDeveloperProduct.name}) from {PlaceAssetObj.name}" + ) + GrossProfitAfterTax = math.floor(expectedUnitPrice * 0.7) + + economy.IncrementTargetBalance(OwnerObj, GrossProfitAfterTax, currencyType) + transactions.CreateTransaction( + Reciever = OwnerObj, + Sender = AuthenticatedUser, + CurrencyAmount = GrossProfitAfterTax, + CurrencyType = currencyType, + TransactionType = TransactionType.Sale, + CustomText = f"Sale of Product({TargetDeveloperProduct.name}) from {PlaceAssetObj.name}" + ) + redis_controller.set(f"purchase_request:{requestId}", "1", ex = 60 * 10) + + DeveloperProductReceiptObj : ProductReceipt = ProductReceipt( + user_id = AuthenticatedUser.id, + product_id = TargetDeveloperProduct.productid, + robux_amount = expectedUnitPrice + ) + TargetDeveloperProduct.sales_count += 1 + db.session.add(DeveloperProductReceiptObj) + db.session.commit() + + return jsonify({ + "success": True, + "receipt": DeveloperProductReceiptObj.receipt_id + }),200 \ No newline at end of file diff --git a/app/routes/mobile.py b/app/routes/mobile.py new file mode 100644 index 0000000..67a9c9e --- /dev/null +++ b/app/routes/mobile.py @@ -0,0 +1,28 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from sqlalchemy import func +import hashlib +import random +import logging +from config import Config +from app.extensions import limiter, csrf, get_remote_address +from app.models.user import User +from app.models.user_email import UserEmail +from app.util import auth +from app.services import economy +from datetime import datetime, timedelta + +config = Config() +MobileAPIRoute = Blueprint('mobile', __name__, url_prefix='/') + +@MobileAPIRoute.route("/device/initialize", methods=["POST"]) +@csrf.exempt +def DeviceInit(): + return jsonify({"browserTrackerId":random.randint(100000000,9999999999),"appDeviceIdentifier":None}) + +@MobileAPIRoute.route("/mobileapi/check-app-version", methods=["GET"]) +def check_app_version(): + return jsonify({"data":{"UpgradeAction":"None"}}) + +@MobileAPIRoute.route("/mobile/pbe", methods=["GET"]) +def mobile_pbe(): + return "", 200 \ No newline at end of file diff --git a/app/routes/pointsservice.py b/app/routes/pointsservice.py new file mode 100644 index 0000000..2b6f8c4 --- /dev/null +++ b/app/routes/pointsservice.py @@ -0,0 +1,52 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +from app.models.gameservers import GameServer +from app.models.pointsservice import PointsService +from app.extensions import get_remote_address, db, csrf +import logging + +PointsServiceRoute = Blueprint('pointsservice', __name__) + +@PointsServiceRoute.route("/points/get-point-balance", methods=["GET"]) +def get_point_balance(): + userId = request.args.get('userId') + placeId = request.args.get('placeId') + if userId is None or placeId is None: + return jsonify({"success": False, "message": "Missing parameters"}),400 + if userId.isnumeric() is False or placeId.isnumeric() is False: + return jsonify({"success": False, "message": "Invalid parameters"}),400 + RequestIP = get_remote_address() + if RequestIP is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + server = GameServer.query.filter_by(serverIP=RequestIP).first() + if server is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + points : PointsService = PointsService.query.filter_by(userId=userId, placeId=placeId).first() + if points is None: + points = PointsService(userId=userId, placeId=placeId, points=0) + db.session.add(points) + db.session.commit() + return jsonify({"success": True, "pointBalance": points.points}),200 + + +@PointsServiceRoute.route("/points/award-points", methods=["POST"]) +@csrf.exempt +def award_points(): + userId = request.args.get(key='userId', default=None, type=int) + placeId = request.args.get(key='placeId', default=None, type=int) + amount = request.args.get(key='amount', default=None, type=int) + if userId is None or placeId is None or amount is None: + return jsonify({"success": False, "message": "Missing parameters"}),400 + RequestIP = get_remote_address() + if RequestIP is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + server = GameServer.query.filter_by(serverIP=RequestIP).first() + if server is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + points : PointsService = PointsService.query.filter_by(userId=userId, placeId=placeId).first() + if points is None: + points = PointsService(userId=userId, placeId=placeId, points=0) + db.session.add(points) + db.session.commit() + points.points += int(amount) + db.session.commit() + return jsonify({"success": True, "userBalance": points.points, "pointsAwarded": amount, "userGameBalance": points.points}),200 \ No newline at end of file diff --git a/app/routes/presence.py b/app/routes/presence.py new file mode 100644 index 0000000..df896d1 --- /dev/null +++ b/app/routes/presence.py @@ -0,0 +1,17 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response +from app.extensions import csrf, db +from app.util import auth, friends +from app.models.user import User +from datetime import datetime + +PresenceRoute = Blueprint("presence", __name__, url_prefix="/presence") + +@PresenceRoute.route("/", methods=["GET"]) +@auth.authenticated_required_api +def UpdatePresence(): + Authuser : User = auth.GetCurrentUser() + if Authuser is None: + return "BAD REQUEST", 400 + Authuser.lastonline = datetime.utcnow() + db.session.commit() + return "OK", 200 \ No newline at end of file diff --git a/app/routes/presenceapi.py b/app/routes/presenceapi.py new file mode 100644 index 0000000..6c7676b --- /dev/null +++ b/app/routes/presenceapi.py @@ -0,0 +1,105 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session, abort, jsonify, make_response +from app.util import auth +from app.extensions import db, csrf, limiter +from flask_wtf.csrf import CSRFError, generate_csrf +from datetime import datetime, timedelta + +from app.models.user_email import UserEmail +from app.models.user import User +from app.models.placeserver_players import PlaceServerPlayer +from app.models.placeservers import PlaceServer +from app.models.place import Place +from app.models.asset import Asset + +PresenceAPIRoute = Blueprint('presenceapiroute', __name__, url_prefix='/') + +csrf.exempt(PresenceAPIRoute) +@PresenceAPIRoute.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@PresenceAPIRoute.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@PresenceAPIRoute.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + csrf.protect() + +@PresenceAPIRoute.route("/v1/presence/users", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("30/minute") +def multi_get_users_presence(): + if not request.is_json: + return jsonify({"errors": [{"code": 0,"message": "Invalid Request"}]}), 400 + + if "userIds" not in request.json: + return jsonify({"errors": [{"code": 0,"message": "Invalid Request"}]}), 400 + + userIds = request.json["userIds"] + + if type(userIds) is not list: + return jsonify({"errors": [{"code": 0,"message": "Invalid Request"}]}), 400 + + if len(userIds) > 100: + return jsonify({"errors": [{"code": 0,"message": "Invalid Request"}]}), 400 + + requestedData = [] + for userId in userIds: + try: + userId = int(userId) + except: + return jsonify({"errors": [{"code": 1,"message": "Invalid UserId"}]}), 400 + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify({"errors": [{"code": 1,"message": "Invalid UserId"}]}), 400 + else: + isUserOnline = userObject.lastonline > datetime.utcnow() - timedelta(minutes=1) + UserPlaceServerPlayerObj : PlaceServerPlayer | None = PlaceServerPlayer.query.filter_by( userid = userId ).first() + isUserInGame = UserPlaceServerPlayerObj is not None + userPresenceType = 2 if isUserInGame else 1 if isUserOnline else 0 + + PlaceServerHost : PlaceServer | None = None + PlaceObject : Place | None = None + + if isUserInGame: + PlaceServerHost : PlaceServer = PlaceServer.query.filter_by( serveruuid = UserPlaceServerPlayerObj.serveruuid ).first() + if PlaceServerHost is not None: + PlaceObject : Place = Place.query.filter_by( placeid = PlaceServerHost.serverPlaceId ).first() + PlaceAssetObj : Asset = PlaceObject.assetObj + else: + PlaceAssetObj = None + UserPlaceServerPlayerObj = None + + requestedData.append({ + "userPresenceType": userPresenceType, + "lastLocation": "Website" if not isUserInGame else PlaceAssetObj.name, + "placeId": PlaceAssetObj.id if isUserInGame else None, + "rootPlaceId": PlaceAssetObj.id if isUserInGame else None, + "gameId": PlaceServerHost.serveruuid if isUserInGame else None, + "userId": userId, + "lastOnline": userObject.lastonline.strftime("%Y-%m-%dT%H:%M:%S.000Z"), + }) + + return jsonify({ + "userPresences": requestedData + }), 200 \ No newline at end of file diff --git a/app/routes/prometheus.py b/app/routes/prometheus.py new file mode 100644 index 0000000..8660bc9 --- /dev/null +++ b/app/routes/prometheus.py @@ -0,0 +1,100 @@ +# prometheus.py +# Used for providing metrics to Prometheus +# https://prometheus.io/docs/instrumenting/writing_exporters/ + +import time +from flask import Blueprint, Response, abort +from datetime import datetime, timedelta +from sqlalchemy import func + +from app.models.user import User +from app.models.placeserver_players import PlaceServerPlayer +from app.models.placeservers import PlaceServer +from app.models.gameservers import GameServer +from app.models.game_session_log import GameSessionLog +from app.models.asset import Asset + +from app.extensions import get_remote_address +from config import Config + +config = Config() + +PrometheusRoute = Blueprint('prometheus', __name__, url_prefix='/') + +@PrometheusRoute.before_request +def before_request(): + if not config.PROMETHEUS_ENABLED: + return abort( 404 ) + ClientRemoteAddress = get_remote_address() + if ClientRemoteAddress not in config.PROMETHEUS_ALLOWED_IPS: + return abort( 404 ) + + +@PrometheusRoute.route('/metrics', methods=['GET']) +def metrics(): + StartingMeasureTime = time.time() + + UsersOnlineCount = User.query.filter(User.lastonline > (datetime.utcnow() - timedelta(minutes=1))).count() + UsersIngame = PlaceServerPlayer.query.count() + UsersInReservedServers = PlaceServerPlayer.query.join( PlaceServer, PlaceServerPlayer.serveruuid == PlaceServer.serveruuid ).filter(PlaceServer.reservedServerAccessCode != None).count() + ActivePlaceServers = PlaceServer.query.count() + ActiveReservedPlaceServers = PlaceServer.query.filter(PlaceServer.reservedServerAccessCode != None).count() + UsersSignedUpPast24Hours = User.query.filter(User.created > (datetime.utcnow() - timedelta(days=1))).count() + GameServersTotalMemoryUsage = GameServer.query.with_entities( func.sum(GameServer.RCCmemoryUsage) ).scalar() # Megabytes + UniqueGameSessionsPast24Hours = GameSessionLog.query.filter(GameSessionLog.joined_at > (datetime.utcnow() - timedelta(days=1))).distinct(GameSessionLog.user_id).count() + GameSessionsPast24Hours = GameSessionLog.query.filter(GameSessionLog.joined_at > (datetime.utcnow() - timedelta(days=1))).count() + TotalUsersSignedUp = User.query.count() + TotalAssets = Asset.query.count() + + TimeTaken = time.time() - StartingMeasureTime + + PROMETHEUS_RESPONSE = f"""# HELP syntaxeco_users_online The number of users currently online +# TYPE syntaxeco_users_online gauge +syntaxeco_users_online {UsersOnlineCount} + +# HELP syntaxeco_users_ingame The number of users currently in a game +# TYPE syntaxeco_users_ingame gauge +syntaxeco_users_ingame {UsersIngame} + +# HELP syntaxeco_active_placeservers The number of active place servers +# TYPE syntaxeco_active_placeservers gauge +syntaxeco_active_placeservers {ActivePlaceServers} + +# HELP syntaxeco_active_reserved_placeservers The number of active reserved place servers +# TYPE syntaxeco_active_reserved_placeservers gauge +syntaxeco_active_reserved_placeservers {ActiveReservedPlaceServers} + +# HELP syntaxeco_users_in_reserved_servers The number of users currently in reserved servers +# TYPE syntaxeco_users_in_reserved_servers gauge +syntaxeco_users_in_reserved_servers {UsersInReservedServers} + +# HELP syntaxeco_users_signed_up_past_24_hours The number of users that signed up in the past 24 hours +# TYPE syntaxeco_users_signed_up_past_24_hours gauge +syntaxeco_users_signed_up_past_24_hours {UsersSignedUpPast24Hours} + +# HELP syntaxeco_gameservers_total_memory_usage The total memory usage of all game servers +# TYPE syntaxeco_gameservers_total_memory_usage gauge +syntaxeco_gameservers_total_memory_usage {GameServersTotalMemoryUsage} + +# HELP syntaxeco_unique_gamesessions_past_24_hours The number of unique game sessions in the past 24 hours +# TYPE syntaxeco_unique_gamesessions_past_24_hours gauge +syntaxeco_unique_gamesessions_past_24_hours {UniqueGameSessionsPast24Hours} + +# HELP syntaxeco_gamesessions_past_24_hours The number of game sessions in the past 24 hours +# TYPE syntaxeco_gamesessions_past_24_hours gauge +syntaxeco_gamesessions_past_24_hours {GameSessionsPast24Hours} + +# HELP syntaxeco_total_users_signed_up The total number of users that have signed up +# TYPE syntaxeco_total_users_signed_up gauge +syntaxeco_total_users_signed_up {TotalUsersSignedUp} + +# HELP syntaxeco_total_assets The total number of assets +# TYPE syntaxeco_total_assets gauge +syntaxeco_total_assets {TotalAssets} + +# HELP syntaxeco_prometheus_request_time The time taken to generate the Prometheus metrics +# TYPE syntaxeco_prometheus_request_time gauge +syntaxeco_prometheus_request_time {TimeTaken} +""" + + return Response(PROMETHEUS_RESPONSE, mimetype="text/plain") \ No newline at end of file diff --git a/app/routes/publicapi.py b/app/routes/publicapi.py new file mode 100644 index 0000000..e748a5f --- /dev/null +++ b/app/routes/publicapi.py @@ -0,0 +1,525 @@ +import time +import math +import calendar +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort, flash +from sqlalchemy import func +from app.extensions import limiter, csrf, db, user_limiter +from app.models.user import User +from app.models.asset import Asset +from app.models.userassets import UserAsset +from app.models.user_trades import UserTrade +from app.models.user_trade_items import UserTradeItem +from app.models.groups import Group +from app.models.linked_discord import LinkedDiscord +from app.models.placeserver_players import PlaceServerPlayer +from app.models.limited_item_transfers import LimitedItemTransfer +from app.util import auth, redislock +from app.enums.AssetType import AssetType +from app.enums.MembershipType import MembershipType +from app.enums.TradeStatus import TradeStatus +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod +from app.util.membership import GetUserMembership +from app.services.economy import GetAssetRap, GetUserBalance, DecrementTargetBalance, IncrementTargetBalance, CalculateUserRAP +from app.services.groups import GetGroupFromId +from app.pages.trades.trades import createTradePost +from datetime import datetime, timedelta +from sqlalchemy import or_, and_ +from app.models.user_ban import UserBan + +PublicAPIRoute = Blueprint("publicapi", __name__, url_prefix="/public-api") + +def ReturnError( message : str, code : int = 403 ): + return jsonify({ + "success": False, + "message": message, + "data": None + }), code + +def GetUserFromId( UserObj : User | int ) -> User | None: + """ + Returns a User object from a User ID. + """ + if isinstance(UserObj, User): + return UserObj + else: + TargetUser : User | None = User.query.filter_by(id=UserObj).first() + if TargetUser is None: + raise Exception("User does not exist.") + return TargetUser + +def ReturnUserObject( UserObj : User ) -> dict: + return { + "id": UserObj.id, + "username": UserObj.username, + "last_online": int(calendar.timegm(UserObj.lastonline.timetuple())), + "created_at": int(calendar.timegm(UserObj.created.timetuple())), + "description": UserObj.description, + "membership": GetUserMembership(UserObj, changeToString=True), + "is_banned": UserObj.accountstatus != 1, + "inventory_rap": CalculateUserRAP(UserObj) + } + +def ReturnGroupObject( GroupObj : Group ) -> dict: + return { + "id": GroupObj.id, + "name": GroupObj.name, + "created_at": int(calendar.timegm(GroupObj.created_at.timetuple())), + "user_owner_id": GroupObj.owner_id + } + +def ReturnItemObject( AssetObj : Asset, ListCreator : bool = True, includeLimitedInfo : bool = True) -> dict: + Item = { + "id": AssetObj.id, + "name": AssetObj.name, + "description": AssetObj.description, + "asset_type": AssetObj.asset_type.name, + "asset_type_value": AssetObj.asset_type.value, + "creator_id": AssetObj.creator_id, + "creator_type": AssetObj.creator_type, + "created_at": int(calendar.timegm(AssetObj.created_at.timetuple())), + "updated_at": int(calendar.timegm(AssetObj.updated_at.timetuple())), + "is_for_sale": AssetObj.is_for_sale, + "price_robux": AssetObj.price_robux, + "price_tickets": AssetObj.price_tix, + "sales": AssetObj.sale_count + } + if includeLimitedInfo: + Item["is_limited"] = AssetObj.is_limited + Item["is_limited_unique"] = AssetObj.is_limited_unique + Item["asset_rap"] = GetAssetRap(AssetObj.id) if AssetObj.is_limited and not AssetObj.is_for_sale else None + if ListCreator: + Item["creator"] = ReturnUserObject(GetUserFromId(AssetObj.creator_id)) if AssetObj.creator_type == 0 else ReturnGroupObject(GetGroupFromId(AssetObj.creator_id)) + return Item + +@PublicAPIRoute.errorhandler(429) +def ratelimit_handler(e): + return ReturnError("You are being ratelimited, please try again later.", 429) + +@PublicAPIRoute.errorhandler(500) +def internalerror_handler(e): + return ReturnError("An internal error occured, please try again later.", 500) + +@PublicAPIRoute.route("/", methods=["GET"]) +def PublicAPIDocs(): + return render_template("swaggerdocs.html") + +@PublicAPIRoute.route("/v1/users/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUserId(userid : int): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + return ReturnError("User not found", 404) + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObj) + }), 200 + +@PublicAPIRoute.route("/v1/users/username/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUsername(username : str): + UserObj : User = User.query.filter(func.lower(User.username) == func.lower(username)).first() + if UserObj is None: + return ReturnError("User not found", 404) + if UserObj.accountstatus == 4: # GDPR + return ReturnError("User not found", 404) + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObj) + }), 200 + +@PublicAPIRoute.route("/sitestats", methods=["GET"]) +@limiter.limit("30/minute") +def SiteStatsHTTP(): + UsersOnline = User.query.filter(User.lastonline > (datetime.utcnow() - timedelta(minutes=1))).count() + UsersIngame = PlaceServerPlayer.query.count() + BannedByAnticheat = UserBan.query.filter_by(reason="Exploiting in games is not tolerated on SYNTAX").count() # meme + UsersSignedUpToday = User.query.filter(User.created > (datetime.utcnow() - timedelta(days=1))).count() + UsersSignedUpYesterday = User.query.filter(and_( User.created > ( datetime.utcnow() - timedelta(days=2) ), User.created < ( datetime.utcnow() - timedelta(days=1) ) )).count() # i actually forgot why this is needed, but its probably needed to do some cool shit idk + TotalUsers = User.query.count() + return jsonify({ + "success": True, + "message": "", + "data": { + "users_online": UsersOnline, + "users_ingame": UsersIngame, + "signed_up_today": UsersSignedUpToday, + "signed_up_yesterday": UsersSignedUpYesterday, + "total_users": TotalUsers, + "banned_by_ac": BannedByAnticheat + } + }), 200 + +@PublicAPIRoute.route("/v1/users/discord_id/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUserByDiscordId(discordid : int): + LinkedDiscordObj : LinkedDiscord = LinkedDiscord.query.filter_by( discord_id = discordid ).first() + if LinkedDiscordObj is None: + return ReturnError("No SYNTAX account is associated with this Discord ID", 404) + UserObj : User = User.query.filter_by( id = LinkedDiscordObj.user_id ).first() + if UserObj.accountstatus == 4: + return ReturnError("No SYNTAX account is associated with this Discord ID", 404) + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(UserObj) + }), 200 + +@PublicAPIRoute.route("/v1/asset/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupItemId(assetid : int): + ItemObj : Asset = Asset.query.filter_by(id=assetid).first() + if ItemObj is None: + return ReturnError("Asset not found", 404) + if ItemObj.creator_type == 0 and ItemObj.creator_id == 1 and ( datetime.utcnow() < ( ItemObj.created_at + timedelta(minutes=10) ) ): + return ReturnError("Asset created recently, please wait...", 403) + return jsonify({ + "success": True, + "message": "", + "data": ReturnItemObject(ItemObj, includeLimitedInfo=False) + }), 200 + +@PublicAPIRoute.route("/v1/inventory/collectibles/", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUserInventoryCollectibles(userid : int): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + return ReturnError("User not found", 404) + PageNumber = request.args.get("page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + UserAssets : list[UserAsset] = UserAsset.query.filter_by(userid=userid).join(Asset).filter_by(is_limited=True).paginate( page = PageNumber, per_page = 12, error_out = False ) + FormattedUserAsset = [] + + for UserAssetObj in UserAssets.items: + FormattedUserAsset.append({ + "uaid": UserAssetObj.id, + "serial": UserAssetObj.serial, + "price": UserAssetObj.price, + "asset": ReturnItemObject(UserAssetObj.asset, ListCreator=False) + }) + + return jsonify({ + "success": True, + "message": "", + "data": FormattedUserAsset, + "page": PageNumber, + "total_pages": UserAssets.pages, + "next_page": UserAssets.next_num if UserAssets.has_next else None + }) + +@PublicAPIRoute.route("/v1/inventory/assets//", methods=["GET"]) +@limiter.limit("20/minute") +def LookupUserInventory( userid : int, assettypeid : int ): + UserObj : User = User.query.filter_by(id=userid).first() + if UserObj is None: + return ReturnError("User not found", 404) + + PageNumber = request.args.get("page", default=1, type=int) + try: + AssetTypeObj : AssetType = AssetType(assettypeid) + except ValueError: + ReturnError("Invalid asset type, please refer to documentation https://create.roblox.com/docs/reference/engine/enums/AssetType", 400) + if PageNumber < 1: + PageNumber = 1 + UserAssets : list[UserAsset] = UserAsset.query.filter_by(userid=userid).join(Asset).filter_by(asset_type=AssetTypeObj).order_by(UserAsset.id.desc()).paginate( page = PageNumber, per_page = 12, error_out = False ) + FormattedUserAsset = [] + for UserAssetObj in UserAssets.items: + FormattedUserAsset.append({ + "uaid": UserAssetObj.id, + "serial": UserAssetObj.serial, + "price": UserAssetObj.price, + "asset": ReturnItemObject(UserAssetObj.asset, ListCreator=False) + }) + + return jsonify({ + "success": True, + "message": "", + "data": FormattedUserAsset, + "page": PageNumber, + "total_pages": UserAssets.pages, + "next_page": UserAssets.next_num if UserAssets.has_next else None + }) + +@PublicAPIRoute.route("/v1/economy/my-balance", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def GetMyBalance(): + AuthenticatedUser : User = auth.GetCurrentUser() + RobuxBal, TicketsBal = GetUserBalance(AuthenticatedUser) + return jsonify({ + "success": True, + "message": "", + "data": { + "robux": RobuxBal, + "tickets": TicketsBal + } + }) + +@PublicAPIRoute.route("/v1/users/my-profile", methods=["GET"]) +@auth.authenticated_required_api +def GetMyProfile(): + AuthenticatedUser : User = auth.GetCurrentUser() + return jsonify({ + "success": True, + "message": "", + "data": ReturnUserObject(AuthenticatedUser) + }) + +@PublicAPIRoute.route("/v1/trade/list", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def GetMyTrades(): + AuthenticatedUser : User = auth.GetCurrentUser() + PageNumber = request.args.get("page", default=1, type=int) + if PageNumber < 1: + PageNumber = 1 + UserTradesList : list[UserTrade] = UserTrade.query.filter(or_(UserTrade.sender_userid == AuthenticatedUser.id, UserTrade.recipient_userid == AuthenticatedUser.id)).order_by(UserTrade.id.desc()).paginate( page = PageNumber, per_page = 12, error_out = False ) + FormattedUserTrades = [] + for tradeObj in UserTradesList: + tradeObj : UserTrade = tradeObj # type hinting + FormattedUserTrades.append({ + "id": tradeObj.id, + "sender_userid": tradeObj.sender_userid, + "recipient_userid": tradeObj.recipient_userid, + "created_at": int(calendar.timegm(tradeObj.created_at.timetuple())), + "expires_at": int(calendar.timegm(tradeObj.expires_at.timetuple())), + "status": tradeObj.status.name + }) + + return jsonify({ + "success": True, + "message": "", + "data": FormattedUserTrades, + "page": PageNumber, + "total_pages": UserTradesList.pages, + "next_page": UserTradesList.next_num if UserTradesList.has_next else None + }) + +@PublicAPIRoute.route("/v1/trade/", methods=["GET"]) +@auth.authenticated_required_api +@limiter.limit("60/minute") +def GetTradeInfo(tradeid : int): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return ReturnError("Trade not found", 404) + if TradeObj.sender_userid != AuthenticatedUser.id and TradeObj.recipient_userid != AuthenticatedUser.id: + return ReturnError("You are not the sender or recipient of this trade") + + TradeItems : list[UserTradeItem] = UserTradeItem.query.filter_by(tradeid=TradeObj.id).all() + SenderItems = [] + RecipientItems = [] + + for TradeItem in TradeItems: + TradeItem : UserTradeItem = TradeItem + if TradeItem.userid == TradeObj.sender_userid: + SenderItems.append({ + "uaid": TradeItem.userasset.id, + "serial": TradeItem.userasset.serial, + "price": TradeItem.userasset.price, + "asset": ReturnItemObject(TradeItem.userasset.asset, ListCreator=False) + }) + else: + RecipientItems.append({ + "uaid": TradeItem.userasset.id, + "serial": TradeItem.userasset.serial, + "price": TradeItem.userasset.price, + "asset": ReturnItemObject(TradeItem.userasset.asset, ListCreator=False) + }) + + return jsonify({ + "success": True, + "message": "", + "data": { + "id": TradeObj.id, + "sender_userid": TradeObj.sender_userid, + "recipient_userid": TradeObj.recipient_userid, + "created_at": int(calendar.timegm(TradeObj.created_at.timetuple())), + "expires_at": int(calendar.timegm(TradeObj.expires_at.timetuple())), + "status": TradeObj.status.name, + "sender_items": SenderItems, + "recipient_items": RecipientItems, + "sender_robux": TradeObj.sender_userid_robux, + "recipient_robux": TradeObj.recipient_userid_robux + } + }) + +@PublicAPIRoute.route("/v1/trade/create/", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +@user_limiter.limit("5/minute") +@csrf.exempt +def createTradeProxy( recipient_userid : int ): + return createTradePost(recipient_userid) + +@PublicAPIRoute.route("/v1/trade/accept/", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def acceptTrade( tradeid : int ): + + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return ReturnError("Trade not found", 404) + if TradeObj.recipient_userid != AuthenticatedUser.id: + return ReturnError("You are not the recipient of this trade") + if TradeObj.status != TradeStatus.Pending: + return ReturnError("Trade is not pending") + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + return ReturnError("Trade has expired") + + if AuthenticatedUser.TOTPEnabled: + JSONPayload = request.json + if JSONPayload is None: + return ReturnError("Expected JSON payload", 400) + if "TOTPCode" not in JSONPayload: + return ReturnError("Missing parameter 'TOTPCode' in JSON payload", 400) + if not auth.Validate2FACode(AuthenticatedUser.id, JSONPayload["TOTPCode"]): + return ReturnError("Invalid 2FA code") + + UserCurrentMembership : MembershipType = GetUserMembership(AuthenticatedUser.id) + if UserCurrentMembership == MembershipType.NonBuildersClub: + return ReturnError("You must be a Builders Club member to accept trades") + + OppositeUser : User = User.query.filter_by(id=TradeObj.sender_userid).first() + if OppositeUser is None: + return ReturnError("An error occured while trying to complete this trade. Please try again later.") + OppositeUserCurrentMembership : MembershipType = GetUserMembership(OppositeUser.id) + if OppositeUserCurrentMembership == MembershipType.NonBuildersClub: + return ReturnError("The other user must be a Builders Club member to accept trades") + + TradeItems : list[UserTradeItem] = UserTradeItem.query.filter_by(tradeid=TradeObj.id).all() + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + if UserAssetObj is None: + return ReturnError("One of the items no longer exists and this trade cannot be completed.", 400) + if UserAssetObj.userid != TradeItem.userid: + return ReturnError("One of the items no longer belongs to its original owner and this trade cannot be completed.", 400) + + SenderRobuxBal, _ = GetUserBalance(GetUserFromId(TradeObj.sender_userid)) + RecipientRobuxBal, _ = GetUserBalance(GetUserFromId(TradeObj.recipient_userid)) + + if SenderRobuxBal < TradeObj.sender_userid_robux: + return ReturnError("You do not have enough Robux to complete this trade.") + + if RecipientRobuxBal < TradeObj.recipient_userid_robux: + return ReturnError("The other user does not have enough Robux to complete this trade.") + + ItemLocks = [] + for TradeItem in TradeItems: + TradeItemLock = redislock.acquire_lock(f"item:{str(TradeItem.user_asset_id)}", acquire_timeout=20, lock_timeout=5) + if not TradeItemLock: + for ItemLock in ItemLocks: + redislock.release_lock(f"item:{str(ItemLock[1])}", ItemLock[0]) + return ReturnError("An error occured while trying to complete this trade. Please try again later.") + ItemLocks.append([TradeItemLock, TradeItem.user_asset_id]) + + def ReleaseAllLocks(): + for ItemLock in ItemLocks: + redislock.release_lock(f"item:{str(ItemLock[1])}", ItemLock[0]) + + if TradeObj.sender_userid_robux > 0: + DecrementTargetBalance(GetUserFromId(TradeObj.sender_userid), TradeObj.sender_userid_robux, 0) + FinalAdded = math.floor(TradeObj.sender_userid_robux * 0.7) + IncrementTargetBalance(GetUserFromId(TradeObj.recipient_userid), FinalAdded, 0) + if TradeObj.recipient_userid_robux > 0: + DecrementTargetBalance(GetUserFromId(TradeObj.recipient_userid), TradeObj.recipient_userid_robux, 0) + FinalAdded = math.floor(TradeObj.recipient_userid_robux * 0.7) + IncrementTargetBalance(GetUserFromId(TradeObj.sender_userid), FinalAdded, 0) + + def CreateItemTransferLog( original_owner_id : int, new_owner_id : int, asset_id : int, user_asset_id : int ): + NewTransferLog = LimitedItemTransfer( + original_owner_id = original_owner_id, + new_owner_id = new_owner_id, + asset_id = asset_id, + user_asset_id = user_asset_id, + transfer_method = LimitedItemTransferMethod.Trade, + associated_trade_id = TradeObj.id + ) + db.session.add(NewTransferLog) + + for TradeItem in TradeItems: + UserAssetObj : UserAsset = UserAsset.query.filter_by(id=TradeItem.user_asset_id).first() + if UserAssetObj.userid == TradeObj.sender_userid: + CreateItemTransferLog( original_owner_id = TradeObj.sender_userid, new_owner_id = TradeObj.recipient_userid, asset_id = UserAssetObj.assetid, user_asset_id = UserAssetObj.id ) + UserAssetObj.userid = TradeObj.recipient_userid + else: + CreateItemTransferLog( original_owner_id = TradeObj.sender_userid, new_owner_id = TradeObj.recipient_userid, asset_id = UserAssetObj.assetid, user_asset_id = UserAssetObj.id ) + UserAssetObj.userid = TradeObj.sender_userid + + UserAssetObj.price = 0 + UserAssetObj.is_for_sale = False + UserAssetObj.updated = datetime.utcnow() + db.session.commit() + + TradeObj.status = TradeStatus.Accepted + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + ReleaseAllLocks() + + return jsonify({ + "success": True, + "message": "Trade Completed", + "data": None + }) + +@PublicAPIRoute.route("/v1/trade/decline/", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def declineTrade( tradeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return ReturnError("Trade not found", 404) + if TradeObj.recipient_userid != AuthenticatedUser.id: + return ReturnError("You are not the recipient of this trade") + if TradeObj.status != TradeStatus.Pending: + return ReturnError("Trade is not pending") + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + return ReturnError("Trade has expired") + + TradeObj.status = TradeStatus.Declined + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return jsonify({ + "success": True, + "message": "Trade Declined", + "data": None + }) + +@PublicAPIRoute.route("/v1/trade/cancel/", methods=["POST"]) +@auth.authenticated_required_api +@csrf.exempt +def cancelTrade( tradeid : int ): + AuthenticatedUser : User = auth.GetCurrentUser() + TradeObj : UserTrade = UserTrade.query.filter_by(id=tradeid).first() + if TradeObj is None: + return ReturnError("Trade not found", 404) + if TradeObj.sender_userid != AuthenticatedUser.id: + return ReturnError("You are not the sender of this trade") + if TradeObj.status != TradeStatus.Pending: + return ReturnError("Trade is not pending") + if TradeObj.expires_at < datetime.utcnow(): + TradeObj.status = TradeStatus.Expired + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + return ReturnError("Trade has expired") + + TradeObj.status = TradeStatus.Cancelled + TradeObj.updated_at = datetime.utcnow() + db.session.commit() + + return jsonify({ + "success": True, + "message": "Trade Cancelled", + "data": None + }) \ No newline at end of file diff --git a/app/routes/rate.py b/app/routes/rate.py new file mode 100644 index 0000000..fe0a89b --- /dev/null +++ b/app/routes/rate.py @@ -0,0 +1,131 @@ +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort +from app.models.asset_votes import AssetVote +from app.models.asset_favorite import AssetFavorite +from app.models.asset import Asset +from app.enums.AssetType import AssetType +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.previously_played import PreviouslyPlayed +from app.extensions import limiter, db, redis_controller +from app.util import auth +import json + +AssetRateRoute = Blueprint("assetrate", __name__, template_folder="pages") + +def ClearAssetVotesCache( assetId : int ): + redis_controller.delete(f"asset:{str(assetId)}:votes") + +def GetAssetLikesAndDislikes( assetId : int ) -> tuple[int, int]: + """ + Returns 2 int values the first being the likes count and the second being the dislikes count. + """ + # See if we have the likes and dislikes in redis + CachedVoteData = redis_controller.get(f"asset:{str(assetId)}:votes") + if CachedVoteData is not None: + CachedVoteData = json.loads(CachedVoteData) + return CachedVoteData["likes"], CachedVoteData["dislikes"] + + LikesCount = AssetVote.query.filter_by(assetid=assetId, vote=True).count() + DislikesCount = AssetVote.query.filter_by(assetid=assetId, vote=False).count() + redis_controller.set(f"asset:{str(assetId)}:votes", json.dumps({"likes":LikesCount, "dislikes":DislikesCount}), ex=600) + + return LikesCount, DislikesCount + +def GetUserVoteStatus( assetId : int, userId : int ) -> int: # 2 = dislike, 0 = no vote, 1 = like + """ + Returns an int value which is 2 if the user disliked the asset, 0 if the user didn't vote and 1 if the user liked the asset. + """ + UserVoteObj : AssetVote = AssetVote.query.filter_by(assetid=assetId, userid=userId).first() + if UserVoteObj is None: + return 0 + if UserVoteObj.vote == True: + return 1 + return 2 + +def GetAssetVotePercentage( assetId : int ) -> int: + """ + Returns an int value which is the percentage of likes the asset has. + """ + LikesCount, DislikesCount = GetAssetLikesAndDislikes(assetId) + if LikesCount == 0 and DislikesCount == 0: + return 50 + return int((LikesCount / (LikesCount + DislikesCount)) * 100) + +@AssetRateRoute.route("/vote//", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +def vote_asset(assetid : int, status : int): + if status > 2 or status < 0: + return abort(400) + AuthenticatedUser = auth.GetCurrentUser() + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + return abort(404) + + AuthenticatedUser : User = auth.GetCurrentUser() + if AssetObj.asset_type == AssetType.Place: + if PreviouslyPlayed.query.filter_by(userid=AuthenticatedUser.id, placeid=AssetObj.id).first() is None: + return abort(400) + elif AssetObj.asset_type in [AssetType.GamePass, AssetType.Shirt, AssetType.TShirt, AssetType.Pants, AssetType.Hat, AssetType.Gear, AssetType.Plugin, AssetType.HairAccessory, AssetType.FaceAccessory, AssetType.NeckAccessory, AssetType.ShoulderAccessory, AssetType.FrontAccessory, AssetType.BackAccessory, AssetType.WaistAccessory, AssetType.EarAccessory, AssetType.EyeAccessory, AssetType.TShirtAccessory, AssetType.ShirtAccessory, AssetType.PantsAccessory, AssetType.JacketAccessory, AssetType.Package]: + if UserAsset.query.filter_by(userid=AuthenticatedUser.id, assetid=AssetObj.id).first() is None: + return abort(400) + + AssetVoteObj : AssetVote = AssetVote.query.filter_by(assetid=assetid, userid=AuthenticatedUser.id).first() + if AssetVoteObj is None and status != 0: + AssetVoteObj = AssetVote(assetid=assetid, userid=AuthenticatedUser.id, vote=True) + db.session.add(AssetVoteObj) + + if AssetVoteObj is not None and status == 0: + db.session.delete(AssetVoteObj) + + if AssetVoteObj is not None and status != 0: + AssetVoteObj.vote = status == 1 + + db.session.commit() + ClearAssetVotesCache(assetid) + LikesCount, DislikesCount = GetAssetLikesAndDislikes(assetid) + + return jsonify({"success":True}), 200 + +def GetAssetFavoriteCount( assetId : int ) -> int: + """ + Returns an int value which is the amount of users who favorited the asset. + """ + if redis_controller.exists(f"asset:{str(assetId)}:favorites"): + return int(redis_controller.get(f"asset:{str(assetId)}:favorites")) + favoriteCount = AssetFavorite.query.filter_by(assetid=assetId).count() + redis_controller.set(f"asset:{str(assetId)}:favorites", str(favoriteCount)) + return favoriteCount + +def GetUserFavoriteStatus( assetId : int, userId : int ) -> bool: + """ + Returns a bool value which is True if the user favorited the asset and False if the user didn't favorite the asset. + """ + UserFavoriteObj : AssetFavorite = AssetFavorite.query.filter_by(assetid=assetId, userid=userId).first() + if UserFavoriteObj is None: + return False + return True + +@AssetRateRoute.route("/favorite/", methods=["POST"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +def favorite_asset(assetid : int): + AuthenticatedUser = auth.GetCurrentUser() + AssetFavoriteObj : AssetFavorite = AssetFavorite.query.filter_by(assetid=assetid, userid=AuthenticatedUser.id).first() + if AssetFavoriteObj is None: + AssetFavoriteObj = AssetFavorite(assetid=assetid, userid=AuthenticatedUser.id) + db.session.add(AssetFavoriteObj) + db.session.commit() + return jsonify({"success":True}), 200 + +@AssetRateRoute.route("/favorite/", methods=["DELETE"]) +@auth.authenticated_required_api +@limiter.limit("5/minute") +def unfavorite_asset(assetid : int): + AuthenticatedUser = auth.GetCurrentUser() + AssetFavoriteObj : AssetFavorite = AssetFavorite.query.filter_by(assetid=assetid, userid=AuthenticatedUser.id).first() + if AssetFavoriteObj is not None: + db.session.delete(AssetFavoriteObj) + db.session.commit() + redis_controller.delete(f"asset:{str(assetid)}:favorites") + return jsonify({"success":True}), 200 \ No newline at end of file diff --git a/app/routes/rbxapi.py b/app/routes/rbxapi.py new file mode 100644 index 0000000..3ff7dbb --- /dev/null +++ b/app/routes/rbxapi.py @@ -0,0 +1,186 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify +from app.util import auth, membership +from app.enums.MembershipType import MembershipType +from app.extensions import db, redis_controller, get_remote_address +from app.models.user import User +from app.models.user_email import UserEmail +from app.services import economy +from datetime import datetime, timedelta +from config import Config +config = Config() + +RBXAPIRoute = Blueprint('RBXAPIRoute', __name__, template_folder='pages') + +@RBXAPIRoute.route("/users/", methods=["GET"]) +def UserInfoAPI( userid : int ): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None: + return jsonify( { "success" : False, "message" : "User not found" } ), 404 + return jsonify({ + "Id" : UserObj.id, + "Username" : UserObj.username + }) + +@RBXAPIRoute.route("/users/account-info", methods=["GET"]) +@auth.authenticated_required_api +def GetUserAccountInfo(): + AuthenticatedUser : User = auth.GetCurrentUser() + if AuthenticatedUser is None: + return jsonify({"success": False, "message": "Unauthorized"}),401 + UserMembershipType : int = membership.GetUserMembership( AuthenticatedUser ).value + RobuxBalance, _ = economy.GetUserBalance( AuthenticatedUser ) + + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id = AuthenticatedUser.id ).first() + if UserEmailObj is not None: + emailParts = UserEmailObj.email.split("@") + FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1) + SecondPart = emailParts[1] + HiddenEmail = FirstPart + "@" + SecondPart + else: + HiddenEmail = None + + return jsonify({ + "UserId": AuthenticatedUser.id, + "Username": AuthenticatedUser.username, + "DisplayName": AuthenticatedUser.username, + "HasPasswordSet": True, + "Email": HiddenEmail, + "MembershipType": UserMembershipType, + "RobuxBalance": RobuxBalance, + "AgeBracket": 0, + "Roles": [], + "EmailNotificationEnabled": False, + "PasswordNotifcationEnabled": False + }) + +@RBXAPIRoute.route("/my/settings/json", methods=["GET"]) +@auth.authenticated_required_api +def GetMySettingsJSON(): + AuthenticatedUser : User = auth.GetCurrentUser() + UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id = AuthenticatedUser.id ).first() + if UserEmailObj is not None: + emailParts = UserEmailObj.email.split("@") + FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1) + SecondPart = emailParts[1] + HiddenEmail = FirstPart + "@" + SecondPart + else: + HiddenEmail = None + + UserMembershipType : MembershipType = membership.GetUserMembership( AuthenticatedUser ) + + return jsonify({ + "ChangeUsernameEnabled": True, + "IsAdmin": False, + "UserId": AuthenticatedUser.id, + "Name": AuthenticatedUser.username, + "DisplayName": AuthenticatedUser.username, + "IsEmailOnFile": UserEmailObj is not None, + "IsEmailVerified": UserEmailObj is not None and UserEmailObj.verified, + "IsPhoneFeatureEnabled": False, + "RobuxRemainingForUsernameChange": 0, + "PreviousUserNames": "", + "UseSuperSafePrivacyMode": False, + "IsSuperSafeModeEnabledForPrivacySetting": False, + "UseSuperSafeChat": False, + "IsAppChatSettingEnabled": True, + "IsGameChatSettingEnabled": True, + "IsAccountPrivacySettingsV2Enabled": True, + "IsSetPasswordNotificationEnabled": False, + "ChangePasswordRequiresTwoStepVerification": False, + "ChangeEmailRequiresTwoStepVerification": False, + "UserEmail": HiddenEmail, + "UserEmailMasked": True, + "UserEmailVerified": UserEmailObj is not None and UserEmailObj.verified, + "CanHideInventory": False, + "CanTrade": UserMembershipType != MembershipType.NonBuildersClub, + "MissingParentEmail": False, + "IsUpdateEmailSectionShown": True, + "IsUnder13UpdateEmailMessageSectionShown": False, + "IsUserConnectedToFacebook": False, + "IsTwoStepToggleEnabled": False, + "AgeBracket": 0, + "UserAbove13": True, + "ClientIpAddress": get_remote_address(), + "AccountAgeInDays": (datetime.utcnow() - AuthenticatedUser.created).days, + "IsOBC": UserMembershipType == MembershipType.OutrageousBuildersClub, + "IsTBC": UserMembershipType == MembershipType.TurboBuildersClub, + "IsAnyBC": UserMembershipType != MembershipType.NonBuildersClub, + "IsPremium": False, + "IsBcRenewalMembership": False, + "BcExpireDate": "/Date(-0)/", + "BcRenewalPeriod": None, + "BcLevel": None, + "HasCurrencyOperationError": False, + "CurrencyOperationErrorMessage": None, + "BlockedUsersModel": { + "BlockedUserIds": [], + "BlockedUsers": [], + "MaxBlockedUsers": 50, + "Total": 1, + "Page": 1 + }, + "Tab": None, + "ChangePassword": False, + "IsAccountPinEnabled": True, + "IsAccountRestrictionsFeatureEnabled": True, + "IsAccountRestrictionsSettingEnabled": False, + "IsAccountSettingsSocialNetworksV2Enabled": False, + "IsUiBootstrapModalV2Enabled": True, + "IsI18nBirthdayPickerInAccountSettingsEnabled": True, + "InApp": False, + "MyAccountSecurityModel": { + "IsEmailSet": UserEmailObj is not None, + "IsEmailVerified": UserEmailObj is not None and UserEmailObj.verified, + "IsTwoStepEnabled": False, + "ShowSignOutFromAllSessions": True, + "TwoStepVerificationViewModel": { + "UserId": AuthenticatedUser.id, + "IsEnabled": False, + "CodeLength": 6, + "ValidCodeCharacters": None + } + }, + "ApiProxyDomain": config.BaseURL, + "AccountSettingsApiDomain": config.BaseURL, + "AuthDomain": config.BaseURL, + "IsDisconnectFbSocialSignOnEnabled": True, + "IsDisconnectXboxEnabled": True, + "NotificationSettingsDomain": config.BaseURL, + "AllowedNotificationSourceTypes": [ + "Test", + "FriendRequestReceived", + "FriendRequestAccepted", + "PartyInviteReceived", + "PartyMemberJoined", + "ChatNewMessage", + "PrivateMessageReceived", + "UserAddedToPrivateServerWhiteList", + "ConversationUniverseChanged", + "TeamCreateInvite", + "GameUpdate", + "DeveloperMetricsAvailable" + ], + "AllowedReceiverDestinationTypes": [ + "DesktopPush", + "NotificationStream" + ], + "BlacklistedNotificationSourceTypesForMobilePush": [], + "MinimumChromeVersionForPushNotifications": 50, + "PushNotificationsEnabledOnFirefox": True, + "LocaleApiDomain": config.BaseURL, + "HasValidPasswordSet": True, + "IsUpdateEmailApiEndpointEnabled": True, + "FastTrackMember": None, + "IsFastTrackAccessible": False, + "HasFreeNameChange": False, + "IsAgeDownEnabled": False, + "IsSendVerifyEmailApiEndpointEnabled": True, + "IsPromotionChannelsEndpointEnabled": True, + "ReceiveNewsletter": False, + "SocialNetworksVisibilityPrivacy": 6, + "SocialNetworksVisibilityPrivacyValue": "AllUsers", + "Facebook": None, + "Twitter": None, + "YouTube": None, + "Twitch": None + }) \ No newline at end of file diff --git a/app/routes/rolimons.py b/app/routes/rolimons.py new file mode 100644 index 0000000..3bb55e2 --- /dev/null +++ b/app/routes/rolimons.py @@ -0,0 +1,307 @@ +import json +from flask import Blueprint, request, jsonify, abort, make_response, Response +from datetime import datetime, timedelta + +from app.models.asset import Asset +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.placeserver_players import PlaceServerPlayer +from app.models.limited_item_transfers import LimitedItemTransfer + +from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod + +from app.services import economy + +from app.extensions import csrf, redis_controller +from config import Config + +config = Config() + +RolimonsAPI = Blueprint('RolimonsAPI', __name__, url_prefix='/api/internal_rolimons') + +@RolimonsAPI.before_request +def before_request_authentication(): + if config.ROLIMONS_API_ENABLED != True: + abort(404) + + rolimonAccessKey = request.headers.get( + key = "X-Rolimons-Access-Key", + default = None, + type = str + ) + + if rolimonAccessKey is None or rolimonAccessKey != config.ROLIMONS_API_KEY: + abort(404) + +@RolimonsAPI.errorhandler( 500 ) +def internal_error( error ): + return make_response(jsonify({ + "error": "Internal Server Error", + "success": False + }), 500) + +@RolimonsAPI.route('/get_item_owners/', methods=['GET']) +def get_item_owners( assetid : int ): + AssetObj : Asset = Asset.query.filter_by( id = assetid ).first() + if AssetObj is None: + return make_response(jsonify({ + "error": "Asset not found", + "success": False + }), 404) + + if not AssetObj.is_limited: + return make_response(jsonify({ + "error": "Asset is not a limited", + "success": False + }), 400) + + UserAssets : list[UserAsset] = UserAsset.query.filter_by( assetid = assetid ).order_by( UserAsset.serial ).all() + AllItemOwners : list[dict] = [] + + for UserAssetObj in UserAssets: + OwnerUserObj : User = User.query.filter_by( id = UserAssetObj.userid ).first() + if OwnerUserObj is None: + continue + + AllItemOwners.append({ + "uaid": UserAssetObj.id, + "item_id": assetid, + "owner_id": OwnerUserObj.id if OwnerUserObj.accountstatus not in [3,4] else None, + "owner_name": OwnerUserObj.username if OwnerUserObj.accountstatus not in [3,4] else None, + "serial_number": UserAssetObj.serial, + "owned_since": f"{UserAssetObj.updated.isoformat()}Z" + }) + + return make_response(jsonify({ + "success": True, + "data": AllItemOwners + })) + +@RolimonsAPI.route('/get_player_inventory/', methods=['GET']) +def get_user_collectibles( userid : int ): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None or UserObj.accountstatus == 4: + return make_response(jsonify({ + "error": "User not found", + "success": False + }), 404) + + PageNumber = max( + request.args.get( + key = "cursor", + default = 1, + type = int + ), + 1 + ) + + UserAssets = UserAsset.query.filter_by( userid = userid ).join( Asset, UserAsset.assetid == Asset.id ).filter( Asset.is_limited == True ).order_by( UserAsset.id.desc() ).paginate( + page = PageNumber, + per_page = 50, + error_out = False + ) + + AllUserCollectibleAssets : list[dict] = [] + for UserAssetObj in UserAssets.items: + UserAssetObj : UserAsset + AssetObj : Asset = UserAssetObj.asset + + AllUserCollectibleAssets.append({ + "assetId": UserAssetObj.assetid, + "userAssetId": UserAssetObj.id, + "serialNumber": UserAssetObj.serial, + "name": AssetObj.name + }) + + return jsonify({ + "data": AllUserCollectibleAssets, + "nextPageCursor": str(UserAssets.next_num if UserAssets.has_next else None), + "previousPageCursor": str(UserAssets.prev_num if UserAssets.has_prev else None), + "success": True + }) + +@RolimonsAPI.route("/user_by_username/", methods=['GET']) +def get_user_by_username( username : str ): + if len(username) < 3 or len(username) > 32: + return make_response(jsonify({ + "error": "Username length must be between 3 and 32 characters", + "success": False + }), 400) + SearchQuery = username.strip().replace('%', '') + + UserSearchResults = User.query.filter( User.username.ilike( '%' + SearchQuery + '%' ) ).filter( User.accountstatus != 4 ).order_by( User.id ).all() + + UserSearchResultsData = [] + for UserObj in UserSearchResults: + UserSearchResultsData.append({ + "Name": UserObj.username, + "UserID": UserObj.id, + "Description": UserObj.description + }) + + return jsonify({ + "UserSearchResults": UserSearchResultsData, + "success": True + }) + +@RolimonsAPI.route("/multi_get_user_presence", methods=['POST']) +@csrf.exempt +def multi_get_user_presence(): + if not request.is_json: + return make_response(jsonify({ + "error": "Invalid JSON", + "success": False + }), 400) + + if "userIds" not in request.json: + return make_response(jsonify({ + "error": "userIds not found in JSON Payload", + "success": False + }), 400) + + UserIds = request.json["userIds"] + if not isinstance(UserIds, list): + return make_response(jsonify({ + "error": "userIds must be a list", + "success": False + }), 400) + + if len(UserIds) > 100: + return make_response(jsonify({ + "error": "userIds list must not exceed 100 items", + "success": False + }), 400) + + UserPresenceData : list[dict] = [] + for UserId in UserIds: + if not isinstance(UserId, int): + continue + + UserObj : User = User.query.filter_by( id = UserId ).first() + if UserObj is None or UserObj.accountstatus == 4: + continue + + UserObjPresenceData = { + "userId": UserObj.id, + "lastOnline": f"{UserObj.lastonline.isoformat()}Z", + "userPresenceType": "InGame" if PlaceServerPlayer.query.filter_by( userid = UserObj.id ).first() is not None else ( "Online" if UserObj.lastonline > datetime.utcnow() - timedelta( minutes = 1 ) else "Offline" ) + } + + UserObjPresenceData["lastLocation"] = "Playing" if UserObjPresenceData["userPresenceType"] == "InGame" else "Website" + UserPresenceData.append(UserObjPresenceData) + + return jsonify({ + "userPresences": UserPresenceData, + "success": True + }) + +@RolimonsAPI.route("/get_user_by_id/", methods=['GET']) +def get_user_by_id( userid : int ): + UserObj : User = User.query.filter_by( id = userid ).first() + if UserObj is None or UserObj.accountstatus == 4: + return make_response(jsonify({ + "error": "User not found", + "success": False + }), 404) + + return jsonify({ + "id": UserObj.id, + "name": UserObj.username, + "description": UserObj.description, + "isBanned": UserObj.accountstatus in [ 3, 4 ], + }) + +@RolimonsAPI.route("/get_all_limiteds", methods=["GET"]) +def get_all_limiteds(): + def _generate_response() -> list: + AllLimiteds = [] + LimitedsListAssetObj : list[Asset] = Asset.query.filter( + Asset.is_limited == True + ).order_by( Asset.id.desc() ).all() + + for LimitedAsset in LimitedsListAssetObj: + LimitedAsset : Asset + LowestAvailablePrice : UserAsset | None = UserAsset.query.filter_by( assetid = LimitedAsset.id, is_for_sale = True ).order_by( UserAsset.price ).first() + + AllLimiteds.append({ + "name": LimitedAsset.name, + "id": LimitedAsset.id, + "description": LimitedAsset.description, + "rap": economy.GetAssetRap( LimitedAsset ), + "price": LowestAvailablePrice.price if LowestAvailablePrice is not None else None, + "original_price": LimitedAsset.price_robux if LimitedAsset.price_robux != 0 else LimitedAsset.price_tix, + "original_price_type": "Robux" if LimitedAsset.price_robux != 0 else "Tickets", + "type": LimitedAsset.asset_type.name, + "is_limited_unique": LimitedAsset.is_limited_unique, + "updated_at": f"{LimitedAsset.updated_at.isoformat()}Z" + }) + + return AllLimiteds + + if redis_controller.exists("rolimons_all_limiteds"): + return jsonify({ + "data": json.loads( redis_controller.get("rolimons_all_limiteds") ), + "success": True + }) + + AllLimiteds = _generate_response() + redis_controller.set( "rolimons_all_limiteds", json.dumps(AllLimiteds), ex = 5 ) + return jsonify({ + "data": AllLimiteds, + "success": True + }) + +@RolimonsAPI.route("/get_item_sales/", methods=["GET"]) +def get_item_sales( assetid : int ): + AssetObj : Asset = Asset.query.filter_by( id = assetid ).first() + if AssetObj is None: + return make_response(jsonify({ + "error": "Asset not found", + "success": False + }), 404) + + if not AssetObj.is_limited: + return make_response(jsonify({ + "error": "Asset is not a limited", + "success": False + }), 400) + + PageNumber = max( + request.args.get( + key = "cursor", + default = 1, + type = int + ), + 1 + ) + + AllItemTransfers : list[LimitedItemTransfer] = LimitedItemTransfer.query.filter_by( asset_id = assetid, transfer_method = LimitedItemTransferMethod.Purchase ).order_by( LimitedItemTransfer.transferred_at.desc() ).paginate( + page = 1, + per_page = 15, + error_out = False + ) + + AllItemSalesData : list[dict] = [] + for ItemTransfer in AllItemTransfers.items: + ItemTransfer : LimitedItemTransfer + OriginalOwnerObj : User = User.query.filter_by( id = ItemTransfer.original_owner_id ).first() + NewOwnerObj : User = User.query.filter_by( id = ItemTransfer.new_owner_id ).first() + + AllItemSalesData.append({ + "userAssetId": ItemTransfer.user_asset_id, + + "sellerId": OriginalOwnerObj.id, + "sellerName": OriginalOwnerObj.username, + + "buyerId": NewOwnerObj.id, + "buyerName": NewOwnerObj.username, + + "price": ItemTransfer.purchased_price + }) + + return jsonify({ + "sales": AllItemSalesData, + "success": True, + "nextPageCursor": str(AllItemTransfers.next_num) if AllItemTransfers.has_next else None, + "previousPageCursor": str(AllItemTransfers.prev_num) if AllItemTransfers.has_prev else None + }) \ No newline at end of file diff --git a/app/routes/sets.py b/app/routes/sets.py new file mode 100644 index 0000000..d94582b --- /dev/null +++ b/app/routes/sets.py @@ -0,0 +1,51 @@ +import requests +from app.routes.asset import migrateAsset +from app.extensions import limiter, db, redis_controller +from flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, abort + +SetsRoute = Blueprint("sets", __name__, template_folder="pages") + +def FetchSetData( setId : int, avoidCache : bool = False ) -> str: + """ + Fetches the set data from sets.pizzaboxer.xyz and then caches it in redis. + """ + if not avoidCache: + CachedSetData = redis_controller.get(f"set:{str(setId)}:data") + if CachedSetData is not None: + return CachedSetData + SetData = requests.get(f"https://sets.pizzaboxer.xyz/Game/Tools/InsertAsset.ashx?sid={str(setId)}").text + redis_controller.set(f"set:{str(setId)}:data", SetData, ex=(60 * 60 * 24 * 31)) + return SetData + +def FetchUserSetsData( nsets : int = 20, type : str = "user", userid : int = 1, avoidCache : bool = False ) -> str: + """ + Fetches the user's sets data from sets.pizzaboxer.xyz and then caches it in redis. + """ + if not avoidCache: + CachedSetData = redis_controller.get(f"sets:{str(userid)}:data") + if CachedSetData is not None: + return CachedSetData + SetData = requests.get(f"https://sets.pizzaboxer.xyz/Game/Tools/InsertAsset.ashx?nsets={str(nsets)}&type={type}&userid={str(userid)}").text + redis_controller.set(f"sets:{str(userid)}:data", SetData, ex=(60 * 60 * 24 * 31)) + return SetData + +@SetsRoute.route("/Game/Tools/InsertAsset.ashx", methods=["GET"]) +def insert_asset(): + SetId = request.args.get( key = "sid", default = None, type = int ) + if SetId is None: + NSets = request.args.get( key = "nsets", default = None, type = int ) + OwnerType = request.args.get( key = "type", default = None, type = str ) + UserId = request.args.get( key = "userid", default = None, type = int ) + + if NSets is None or OwnerType is None or UserId is None: + return abort(400) + + SetData : str = FetchUserSetsData(nsets=NSets, type=OwnerType, userid=UserId) + DataResponse = make_response(SetData) + DataResponse.headers["Content-Type"] = "text/xml" + return DataResponse + + SetData : str = FetchSetData(SetId) + DataResponse = make_response(SetData) + DataResponse.headers["Content-Type"] = "text/xml" + return DataResponse \ No newline at end of file diff --git a/app/routes/teleportservice.py b/app/routes/teleportservice.py new file mode 100644 index 0000000..1f9a7ef --- /dev/null +++ b/app/routes/teleportservice.py @@ -0,0 +1,139 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify, abort, after_this_request +from app.models.placeservers import PlaceServer +from app.models.gameservers import GameServer +from app.models.place import Place +from app.models.universe import Universe +from app.models.user import User +from app.extensions import redis_controller, get_remote_address, csrf, limiter, db +from app.enums.PlaceYear import PlaceYear +from app.routes.gamejoin import CreateNewPlaceServer +import logging +import random +import string + +TeleportServiceRoute = Blueprint('teleportServiceinternal', __name__, url_prefix='/reservedservers') + +@TeleportServiceRoute.before_request +def before_request_hook(): + if "Roblox/" not in request.user_agent.string: + logging.info(f"TeleportServiceInternal - UserAgent {request.user_agent} - Not allowed") + abort(404) + RemoteAddress = get_remote_address() + GameServerObj : GameServer = GameServer.query.filter_by( serverIP = RemoteAddress ).first() + if GameServerObj is None: + logging.info(f"TeleportServiceInternal - {RemoteAddress} - Not found") + abort(404) + + if "Roblox-Place-Id" not in request.headers: + logging.info(f"TeleportServiceInternal - GameServer {RemoteAddress} - Roblox-Place-Id header not found") + abort(404) + + accessKeyRequest = request.headers.get( key = "accesskey", default = "" ) + if "UserRequest" in accessKeyRequest: + logging.warning(f"TeleportServiceInternal - GameServer {RemoteAddress} - UserRequest access key used") + abort(404) + + PlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + if PlaceId is None: + logging.info(f"TeleportServiceInternal - GameServer {RemoteAddress} - Roblox-Place-Id header not expected type") + abort(404) + + PlaceObj : Place = Place.query.filter_by( placeid = PlaceId ).first() + if PlaceObj is None: + logging.info(f"TeleportServiceInternal - Place {PlaceId} - Place not found") + abort(404) + +@TeleportServiceRoute.route('/create', methods=['POST']) +@csrf.exempt +def create_reserved_server(): + OriginPlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + TargetPlaceId = request.args.get( key = "placeId", default = None, type = int ) + + if OriginPlaceId is None or TargetPlaceId is None: + logging.error(f"TeleportServiceInternal - create_reserved_server - Bad Request - OriginPlaceId {OriginPlaceId} TargetPlaceId {TargetPlaceId} - Both has to be not none") + return "Invalid request", 400 + + OriginPlaceObj : Place = Place.query.filter_by( placeid = OriginPlaceId ).first() + TargetPlaceObj : Place = Place.query.filter_by( placeid = TargetPlaceId ).first() + if OriginPlaceObj is None or TargetPlaceObj is None: + logging.error(f"TeleportServiceInternal - create_reserved_server - Bad Request - Place {OriginPlaceId} or {TargetPlaceId} not found") + return "Invalid request", 400 + + if OriginPlaceObj.parent_universe_id != TargetPlaceObj.parent_universe_id: + logging.error(f"TeleportServiceInternal - create_reserved_server - Bad Request - OriginPlace {OriginPlaceId} and TargetPlace {TargetPlaceId} are not in the same universe") + return "Invalid request", 400 + + UniverseObj : Universe = Universe.query.filter_by( id = OriginPlaceObj.parent_universe_id ).first() + if UniverseObj is None: + return "Invalid request", 400 + + if UniverseObj.place_year not in [ PlaceYear.Sixteen, PlaceYear.Eighteen, PlaceYear.Twenty, PlaceYear.TwentyOne]: + logging.error(f"TeleportServiceInternal - create_reserved_server - Bad Request - Universe {UniverseObj.id} - PlaceYear {UniverseObj.place_year} is not supported") + return "Invalid request", 400 + + CooldownKeyName = f"reserved_server_creation_cooldown:{OriginPlaceObj.parent_universe_id}" + ReservedServerAccessCode = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(64)) + + if not redis_controller.exists( CooldownKeyName ): + redis_controller.setex( name = CooldownKeyName, time = 10, value = "1" ) + try: + NewPlaceServerObj : PlaceServer = CreateNewPlaceServer( + placeId = TargetPlaceId, + reserved_server_access_code = ReservedServerAccessCode + ) + except Exception as e: + logging.error(f"TeleportServiceInternal - create_reserved_server - Place {TargetPlaceId} - Universe {UniverseObj.id} - {e}") + return "Failed to start new server", 400 + + redis_controller.set( f"reservedserveraccesscode_server:{ReservedServerAccessCode}", TargetPlaceObj.placeid, ex = 60 * 60 * 24 ) + + return jsonify({ + "ReservedServerAccessCode": ReservedServerAccessCode, + "ReservedServerGameCode": ReservedServerAccessCode + }) + +@TeleportServiceRoute.route('/grantaccess', methods=['POST']) +@csrf.exempt +def grant_access_to_reserved(): + given_reservedServerAccessCode = request.args.get( key = 'reservedServerAccessCode', default = None, type = str ) + OriginPlaceId = request.headers.get( key = "Roblox-Place-Id", default = None, type = int ) + if given_reservedServerAccessCode is None or OriginPlaceId is None: + return "Invalid request", 400 + + OriginPlaceObj : Place = Place.query.filter_by( placeid = OriginPlaceId ).first() + if OriginPlaceObj is None: + return "Invalid request", 400 + + TargetPlaceServerObj : PlaceServer = PlaceServer.query.filter_by( reservedServerAccessCode = given_reservedServerAccessCode ).first() + if TargetPlaceServerObj is None: + accessCodePlaceIdOrigin = redis_controller.get( f"reservedserveraccesscode_server:{given_reservedServerAccessCode}" ) + if accessCodePlaceIdOrigin is None: + return "Invalid request", 400 + TargetPlaceObj : Place = Place.query.filter_by( placeid = int( accessCodePlaceIdOrigin ) ).first() + if TargetPlaceObj is None: + return "Invalid request", 400 + + if TargetPlaceObj.parent_universe_id != OriginPlaceObj.parent_universe_id: + return "Invalid request", 400 + + try: + TargetPlaceServerObj : PlaceServer = CreateNewPlaceServer( + placeId = TargetPlaceObj.placeid, + reserved_server_access_code = given_reservedServerAccessCode + ) + except Exception as e: + logging.error(f"TeleportServiceInternal - grant_access_to_reserved - Place {TargetPlaceObj.placeid} - Universe {TargetPlaceObj.parent_universe_id} - {e}") + return "Failed to start new server", 400 + redis_controller.set( f"reservedserveraccesscode_server:{given_reservedServerAccessCode}", TargetPlaceObj.placeid, ex = 60 * 60 * 24 ) + + AllowedUserIds = request.form.getlist( key = "playerIds", type = int ) + if len( AllowedUserIds ) == 0: + return "Invalid request", 400 + + for UserId in AllowedUserIds: + UserObj : User = User.query.filter_by( id = UserId ).first() + if UserObj is None: + return "Invalid request", 400 + redis_controller.set( f"reservedserveraccesscode:{TargetPlaceServerObj.serveruuid}:{UserObj.id}", "1", ex = 60 * 8) + + return "", 200 \ No newline at end of file diff --git a/app/routes/thumbnailer.py b/app/routes/thumbnailer.py new file mode 100644 index 0000000..123e85a --- /dev/null +++ b/app/routes/thumbnailer.py @@ -0,0 +1,518 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, make_response, jsonify +from app.extensions import db, redis_controller, csrf +import uuid +import json +import requests +import hashlib +import logging +import os +from datetime import datetime + +from app.services.gameserver_comm import perform_post +from app.util import websiteFeatures, s3helper + +from app.models.gameservers import GameServer +from app.models.asset_version import AssetVersion +from app.models.asset_thumbnail import AssetThumbnail +from app.models.user_thumbnail import UserThumbnail +from app.models.place_icon import PlaceIcon +from app.models.asset import Asset +from app.models.package_asset import PackageAsset +from app.models.place import Place +from app.models.user_avatar import UserAvatar +from app.models.user_avatar_asset import UserAvatarAsset + +from app.enums.PlaceYear import PlaceYear + +Thumbnailer = Blueprint('thumbnailer', __name__, url_prefix='/internal') +AssetTypetoThumbnailRenderType = { + 4 : 4, + 8 : 11, + 9 : 5, + 10 : 3, + 11 : 15, + 12 : 14, + 1 : 6, + 13 : 6, + 18 : 6, + 19 : 12, + 2 : 7, + 17 : 8, + 27 : 9, + 28 : 9, + 29 : 9, + 30 : 9, + 31 : 9, + 32 : 17, + 41 : 11, + 42 : 11, + 43 : 11, + 44 : 11, + 45 : 11, + 46 : 11, + 47 : 11, + 40 : 13, +} + +""" + omg was i fucking high or something several months ago i gotta rewrite this one day + - something.else 19/2/2024 +""" + +def GetAvatarHash( userid : int ) -> str: + """ + Returns the avatar hash for the userid provided + """ + UserAvatarObject : UserAvatar = UserAvatar.query.filter_by(user_id=userid).first() + if UserAvatarObject is None: + return None + UserAvatarAssetObject : UserAvatarAsset = UserAvatarAsset.query.filter_by(user_id=userid).all() + HashString = "" + for UserAvatarAssetObject in UserAvatarAssetObject: + HashString += str(UserAvatarAssetObject.asset_id)+"-" + HashString += str(UserAvatarObject.head_color_id)+"-" + HashString += str(UserAvatarObject.torso_color_id)+"-" + HashString += str(UserAvatarObject.left_arm_color_id)+"-" + HashString += str(UserAvatarObject.right_arm_color_id)+"-" + HashString += str(UserAvatarObject.left_leg_color_id)+"-" + HashString += str(UserAvatarObject.right_leg_color_id)+'-' + HashString += str(UserAvatarObject.r15)+'-' + HashString += str(UserAvatarObject.height_scale)+'-' + HashString += str(UserAvatarObject.width_scale)+'-' + HashString += str(UserAvatarObject.head_scale)+'-' + HashString += str(UserAvatarObject.proportion_scale)+'-' + HashString += str(UserAvatarObject.body_type_scale) + + AvatarHash = hashlib.sha256(HashString.encode()).hexdigest() + return AvatarHash + +def findBestThumbnailer() -> GameServer | None: + weight_ping_time = 3 + weight_queue_size = 0.3 + + AllGameServers : list[GameServer] = GameServer.query.filter_by(allowThumbnailGen=True, isRCCOnline=True).filter( GameServer.thumbnailQueueSize < 40 ).all() + if len(AllGameServers) == 0: + return None + BestGameServer : GameServer = None + for GameServerObject in AllGameServers: + GameServerObject.score = (weight_ping_time * GameServerObject.heartbeatResponseTime) + (weight_queue_size * GameServerObject.thumbnailQueueSize) + if BestGameServer is None: + BestGameServer = GameServerObject + continue + if GameServerObject.score < BestGameServer.score: + BestGameServer = GameServerObject + #logging.info(f"GameserverLoadBalancer: {str(BestGameServer.serverId)} - {str(BestGameServer.score)} - Ping: {str(round(BestGameServer.heartbeatResponseTime, 3))}secs - Queue: {str(BestGameServer.thumbnailQueueSize)}") + return BestGameServer + +def TakeUserThumbnail(UserId : int, bypassCooldown=False, bypassCache=False): + """ + Takes a thumbnail and headshot for the userid provided + bypassCooldown: Bypasses the 5 second cooldown for that user + bypassCache: Bypasses the cache and takes a new thumbnail and headshot + """ + if redis_controller.get(f"Thumbnailer:UserId:{UserId}:Taken") is not None and not bypassCooldown: + return "Thumbnail Attempted Recently" + redis_controller.set(f"Thumbnailer:UserId:{UserId}:Taken", "True", 5) + ImageHeadshotCache = None + ImageThumbnailCache = None + AvatarHash = GetAvatarHash(UserId) + if not bypassCache: + UserThumbnailObject = UserThumbnail.query.filter_by(userid=UserId).first() + if UserThumbnailObject is None: + UserThumbnailObject = UserThumbnail(userid=UserId, full_contenthash=None, headshot_contenthash=None, updated_at=datetime.utcnow()) + db.session.add(UserThumbnailObject) + ImageThumbnailCache = redis_controller.get(f"Thumbnailer:UserImage:{AvatarHash}:Thumbnail") + if ImageThumbnailCache is not None: + #logging.info(f"Thumbnail Cache found for UserId {UserId} - {AvatarHash}") + UserThumbnailObject.full_contenthash = ImageThumbnailCache + ImageHeadshotCache = redis_controller.get(f"Thumbnailer:UserImage:{AvatarHash}:Headshot") + if ImageHeadshotCache is not None: + #logging.info(f"Headshot Cache found for UserId {UserId} - {AvatarHash}") + UserThumbnailObject.headshot_contenthash = ImageHeadshotCache + db.session.commit() + if ImageThumbnailCache is not None and ImageHeadshotCache is not None: + return + if redis_controller.get(f"Thumbnailer:AvatarHash:{AvatarHash}:Lock") is not None: + return "Thumbnail Attempted Recently" + redis_controller.set(f"Thumbnailer:AvatarHash:{AvatarHash}:Lock", "True", 5) + + if not websiteFeatures.GetWebsiteFeature("ThumbnailRendering"): + return "Thumbnail Rendering is disabled" + GameServerObject : GameServer = findBestThumbnailer() + if GameServerObject is None: + return "No suitable game servers found" + ThumbnailReqId = str(uuid.uuid4()) + redis_controller.set(f"Thumbnailer:Request:{ThumbnailReqId}", json.dumps({ + "UserId": UserId, + "Type": 0, + }), ex=600) + + HeadshotReqId = str(uuid.uuid4()) + redis_controller.set(f"Thumbnailer:Request:{HeadshotReqId}", json.dumps({ + "UserId": UserId, + "Type": 1, + }), ex=600) + UserAvatarObj : UserAvatar = UserAvatar.query.filter_by(user_id=UserId).first() + try: + if (not bypassCache and ImageHeadshotCache is None) or bypassCache: + perform_post( + TargetGameserver = GameServerObject, + Endpoint = "Thumbnail", + JSONData = { + "type": 1, + "userid": UserId, + "reqid": HeadshotReqId, + "image_x": 768, + "image_y": 768 + }, + RequestTimeout = 0.5 + ) + if (not bypassCache and ImageThumbnailCache is None) or bypassCache: + perform_post( + TargetGameserver = GameServerObject, + Endpoint = "Thumbnail", + JSONData = { + "type": 16 if UserAvatarObj.r15 else 0, + "userid": UserId, + "reqid": ThumbnailReqId, + "image_x": 768, + "image_y": 768 + }, + RequestTimeout = 0.5 + ) + GameServerObject.thumbnailQueueSize += 2 + db.session.commit() + except Exception as e: + return str(e) + return "Thumbnail request sent" + +def ValidatePlaceFileRequest(PlaceId : int, RequestId : str = None, AssetYear : PlaceYear = None ) -> None: + """ + Sends a validate file request to a thumbnailer server + """ + if not websiteFeatures.GetWebsiteFeature("AssetValidationService"): + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": "Asset Validation Service is temporarily disabled, try again later" + }), ex=600) + + GameServerObject : GameServer = findBestThumbnailer() + if GameServerObject is None: + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": "Cannot verify file at this time, try again later" + }), ex=600) + return + if AssetYear is None: + PlaceObj : Place = Place.query.filter_by(placeid=PlaceId).first() + AssetYear = PlaceYear.Eighteen + if PlaceObj is not None: + AssetYear = PlaceObj.placeyear + try: + AssetYearToEndpoint = { + PlaceYear.Eighteen: "AssetValidation2018", + PlaceYear.Sixteen: "AssetValidation2016", + PlaceYear.Fourteen: "AssetValidation2016", + PlaceYear.Twenty: "AssetValidation2020", + PlaceYear.TwentyOne: "AssetValidation2021" + } + if AssetYear not in AssetYearToEndpoint: + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": "Invalid place year" + }), ex=600) + return + + response = perform_post( + TargetGameserver = GameServerObject, + Endpoint = AssetYearToEndpoint[AssetYear], + JSONData = { + "assetid": PlaceId + }, + RequestTimeout = 60 + ) + + response.raise_for_status() + response = response.json() + if response["valid"]: + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": True, + "error": None + }), ex=600) + return + else: + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": response["reason"] + }), ex=600) + return + except Exception as e: + logging.error(f"Error while trying to validate place file: {str(e)}") + redis_controller.set(f"ValidatePlaceFileRequest:{RequestId}", json.dumps({ + "valid": False, + "error": "An error occured while trying to validate the place file" + }), ex=600) + return + +def TakeThumbnail(AssetId : int, isIcon = False, bypassCooldown = False, bypassCache = False): # isIcon only used for game icons + """ + Takes a thumbnail for the assetid provided + bypassCooldown: Bypasses the 2 minute cooldown for that asset + """ + from app.routes.asset import GenerateTempAuthToken + if redis_controller.get(f"Thumbnailer:AssetId:{AssetId}:{str(isIcon)}:Taken") is not None and not bypassCooldown: + return "Thumbnail Attempted Recently" + redis_controller.set(f"Thumbnailer:AssetId:{AssetId}:{str(isIcon)}:Taken", "True", 120) + AssetObject : Asset = Asset.query.filter_by(id=AssetId).first() + AssetVersionObject : AssetVersion = AssetVersion.query.filter_by(asset_id=AssetId).order_by(AssetVersion.version.desc()).first() + if AssetVersionObject is None and AssetObject.asset_type.value != 32: + return "Asset version not found" + if not bypassCache: + if not isIcon: + ImageThumbnailCache = redis_controller.get(f"Thumbnailer:AssetImage:{AssetVersionObject.content_hash}:Thumbnail") + if ImageThumbnailCache is not None: + ThumbnailObject : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetId, asset_version_id=AssetVersionObject.version).first() + if ThumbnailObject is None: + AssetModeration = 1 + if AssetObject.roblox_asset_id is not None: + AssetModeration = 0 + ThumbnailObject = AssetThumbnail( + asset_id=AssetId, + asset_version_id=AssetVersionObject.version, + content_hash=ImageThumbnailCache, + moderation_status=AssetModeration, + created_at=datetime.utcnow() + ) + db.session.add(ThumbnailObject) + try: + db.session.commit() + except: + return + return + if ThumbnailObject.content_hash == ImageThumbnailCache: + return + ThumbnailObject.content_hash = ImageThumbnailCache + ThumbnailObject.moderation_status = 1 + try: + db.session.commit() + except: + return + return + else: + ImageIconCache = redis_controller.get(f"Thumbnailer:AssetImage:{AssetVersionObject.content_hash}:PlaceIcon") + if ImageIconCache is not None: + PlaceIconObject : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetId).first() + if PlaceIconObject is None: + PlaceIconObject = PlaceIcon( + placeid=AssetId, + contenthash=ImageIconCache, + updated_at=datetime.utcnow(), + moderation_status=1, # Pending + ) + db.session.add(PlaceIconObject) + db.session.commit() + return + if PlaceIconObject.contenthash == ImageIconCache: + return + PlaceIconObject.contenthash = ImageIconCache + PlaceIconObject.moderation_status = 1 + PlaceIconObject.updated_at = datetime.utcnow() + db.session.commit() + return + + AssetObject : Asset = Asset.query.filter_by(id=AssetId).first() + if AssetObject is None: + return "Asset not found" + AssetType = AssetObject.asset_type.value + ThumbnailType = AssetTypetoThumbnailRenderType.get(AssetType) + if ThumbnailType is None: + if AssetType in[39, 3, 24, 5, 48,49,50,51,52,53,54,55,56]: # SolidModel, Animation, Lua and Audio + if AssetType == 39: + StaticImage = open("./app/files/NoRender.png", "rb").read() + elif AssetType == 3: + StaticImage = open("./app/files/AudioThumbnail.png", "rb").read() + elif AssetType in [24,48,49,50,51,52,53,54,55,56]: + StaticImage = open("./app/files/AnimationThumbnail.png", "rb").read() + elif AssetType == 5: + StaticImage = open("./app/files/LuaThumbnail.png", "rb").read() + ImageHash = hashlib.sha512(StaticImage).hexdigest() + if not s3helper.DoesKeyExist(ImageHash): + s3helper.UploadBytesToS3(StaticImage, ImageHash, contentType="image/png") + try: + NewThumbnailObject : AssetThumbnail = AssetThumbnail( + asset_id=AssetId, + asset_version_id=AssetVersionObject.version, + content_hash=ImageHash, + moderation_status=0, + created_at=datetime.utcnow() + ) + db.session.add(NewThumbnailObject) + db.session.commit() + except: + pass + return "Used Static Image" + + return "Thumbnail type not found" + + if not websiteFeatures.GetWebsiteFeature("ThumbnailRendering"): + return "Thumbnail Rendering is disabled" + + GameServerObject : GameServer = findBestThumbnailer() + if GameServerObject is None: + return "No suitable game servers found" + + ThumbnailReqId = str(uuid.uuid4()) + redis_controller.set(f"Thumbnailer:Request:{ThumbnailReqId}", json.dumps({ + "AssetId": AssetId, + "AssetVersionId": AssetVersionObject.version, + "isIcon": isIcon, + "AssetType": AssetType, + }), ex=600) + TargetX = 1024 + TargetY = 1024 + PlaceAuthorisationToken = None + if AssetType == 9: + PlaceAuthorisationToken = GenerateTempAuthToken( AssetId, Expiration = 600, CreatorIP = None ) + if AssetType == 9 and not isIcon: + TargetX = 1280 + TargetY = 720 + if AssetType == 1: # Image + TargetX = 256 + TargetY = 256 + if AssetType == 32: # Package + AllPackageAssets : list[PackageAsset] = PackageAsset.query.filter_by(package_asset_id=AssetId).all() + AssetId = "" + for i in range(len(AllPackageAssets)): + AssetId += f"https://www.syntax.eco/asset/?id={str(AllPackageAssets[i].asset_id)}" + if i != len(AllPackageAssets) - 1: + AssetId += ";" + try: + logging.info(f"thumbnailer : TakeThumbnail : Sent request to thumbnailer for asset {AssetId} with type {ThumbnailType} to {GameServerObject.serverName} [ {GameServerObject.serverId} ]") + perform_post( + TargetGameserver = GameServerObject, + Endpoint = "Thumbnail", + JSONData = { + "type": ThumbnailType, + "asset": AssetId, + "reqid": ThumbnailReqId, + "image_x": TargetX, + "image_y": TargetY, + "placetoken": PlaceAuthorisationToken + } + ) + GameServerObject.thumbnailQueueSize += 1 + db.session.commit() + except Exception as e: + return str(e) + return "Thumbnail request sent" + + +def isValidAuthorizationToken( authtoken : str) -> GameServer: + if authtoken is None: + return None + GameServerObject = GameServer.query.filter_by(accessKey=authtoken).first() + return GameServerObject + +@Thumbnailer.route('/thumbnailreturn', methods=["POST"]) +@csrf.exempt +def thumbnailreturn(): + AuthorizationToken = request.headers.get("Authorization") + if AuthorizationToken is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + ThumbnailerOwner : GameServer = isValidAuthorizationToken(AuthorizationToken) + if ThumbnailerOwner is None: + return jsonify({"status": "error", "message": "Invalid authorization token"}),400 + + ReqId = request.headers.get("ReturnUUID") + if ReqId is None: + return jsonify({"status": "error", "message": "Invalid request id"}),400 + + RequestData = redis_controller.get(f"Thumbnailer:Request:{ReqId}") + if RequestData is None: + return jsonify({"status": "error", "message": "Invalid request id"}),400 + redis_controller.delete(f"Thumbnailer:Request:{ReqId}") + RequestData = json.loads(RequestData) + if "UserId" not in RequestData: + AssetId = RequestData["AssetId"] + AssetVersionId = RequestData["AssetVersionId"] + isIcon = RequestData["isIcon"] + AssetType = RequestData["AssetType"] + + ImageData = request.data + ImageHash = hashlib.sha512(ImageData).hexdigest() + + s3helper.UploadBytesToS3(ImageData, ImageHash, contentType="image/png") + AssetVersionObject : AssetVersion = AssetVersion.query.filter_by(asset_id=AssetId, version=AssetVersionId).first() + if isIcon and AssetType == 9: + PlaceIconObject : PlaceIcon = PlaceIcon.query.filter_by(placeid=AssetId).first() + if PlaceIconObject is None: + PlaceIconObject = PlaceIcon(placeid=AssetId, contenthash=ImageHash, updated_at=datetime.utcnow()) + db.session.add(PlaceIconObject) + else: + PlaceIconObject.contenthash = ImageHash + PlaceIconObject.updated_at = datetime.utcnow() + PlaceIconObject.moderation_status = 1 + if AssetVersionObject: + redis_controller.setex(f"Thumbnailer:AssetImage:{AssetVersionObject.content_hash}:PlaceIcon", 60 * 60 * 24 * 3, ImageHash) + try: + ThumbnailerOwner.thumbnailQueueSize -= 1 + db.session.commit() + except: + pass + return jsonify({"status": "success", "message": "Thumbnail saved"}),200 + + if AssetVersionObject: + redis_controller.setex(f"Thumbnailer:AssetImage:{AssetVersionObject.content_hash}:Thumbnail", 60 * 60 * 24 * 3, ImageHash) + + ThumbnailObject : AssetThumbnail = AssetThumbnail.query.filter_by(asset_id=AssetId, asset_version_id=AssetVersionId).first() + if ThumbnailObject is not None: + ThumbnailObject.content_hash = ImageHash + ThumbnailObject.updated_at = datetime.utcnow() + ThumbnailerOwner.thumbnailQueueSize -= 1 + db.session.commit() + return jsonify({"status": "success", "message": "Thumbnail saved"}),200 + + AssetObject : Asset = Asset.query.filter_by(id=AssetId).first() + AssetModeration = 1 + if AssetObject.roblox_asset_id is not None: + AssetModeration = 0 + + AssetThumbnailObject = AssetThumbnail(asset_id=AssetId, asset_version_id=AssetVersionId, content_hash=ImageHash, created_at=datetime.utcnow(), moderation_status=AssetModeration) # 0 = Approved, 1 = Pending, 2 = Denied + db.session.add(AssetThumbnailObject) + db.session.commit() + + return jsonify({"status": "success", "message": "Thumbnail saved"}),200 + else: + UserId = RequestData["UserId"] + ThumbnailType = RequestData["Type"] + ImageData = request.data + ImageHash = hashlib.sha512(ImageData).hexdigest() + + s3helper.UploadBytesToS3(ImageData, ImageHash, contentType="image/png") + + AvatarHash = GetAvatarHash(UserId) + if ThumbnailType == 0: + redis_controller.setex(f"Thumbnailer:UserImage:{AvatarHash}:Thumbnail", 60 * 60 * 24 * 3, ImageHash) + elif ThumbnailType == 1: + redis_controller.setex(f"Thumbnailer:UserImage:{AvatarHash}:Headshot", 60 * 60 * 24 * 3, ImageHash) + + UserThumbnailObject = UserThumbnail.query.filter_by(userid=UserId).first() + if UserThumbnailObject is None: + if ThumbnailType == 0: + UserThumbnailObject = UserThumbnail(userid=UserId, full_contenthash=ImageHash, headshot_contenthash=None, updated_at=datetime.utcnow()) + else: + UserThumbnailObject = UserThumbnail(userid=UserId, headshot_contenthash=ImageHash, full_contenthash=None, updated_at=datetime.utcnow()) + db.session.add(UserThumbnailObject) + ThumbnailerOwner.thumbnailQueueSize -= 1 + db.session.commit() + return jsonify({"status": "success", "message": "Thumbnail saved"}),200 + else: + if ThumbnailType == 0: + UserThumbnailObject.full_contenthash = ImageHash + else: + UserThumbnailObject.headshot_contenthash = ImageHash + UserThumbnailObject.updated_at = datetime.utcnow() + ThumbnailerOwner.thumbnailQueueSize -= 1 + db.session.commit() + return jsonify({"status": "success", "message": "Thumbnail updated"}),200 \ No newline at end of file diff --git a/app/routes/usersapi.py b/app/routes/usersapi.py new file mode 100644 index 0000000..843ecb5 --- /dev/null +++ b/app/routes/usersapi.py @@ -0,0 +1,219 @@ +# users.roblox.com + +from flask import Blueprint, jsonify, request, make_response +from flask_wtf.csrf import CSRFError, generate_csrf +from app.extensions import db, redis_controller, limiter, csrf +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.past_usernames import PastUsername +from app.models.asset import Asset +from app.util import membership, auth +from app.enums.AssetType import AssetType +from app.enums.MembershipType import MembershipType +from sqlalchemy import func + +UsersAPI = Blueprint('UsersAPI', __name__, url_prefix='/') +csrf.exempt(UsersAPI) +@UsersAPI.errorhandler(CSRFError) +def handle_csrf_error(e): + ErrorResponse = make_response(jsonify({ + "errors": [ + { + "code": 0, + "message": "Token Validation Failed" + } + ] + })) + + ErrorResponse.status_code = 403 + ErrorResponse.headers["x-csrf-token"] = generate_csrf() + return ErrorResponse + +@UsersAPI.errorhandler(429) +def handle_ratelimit_reached(e): + return jsonify({ + "errors": [ + { + "code": 9, + "message": "The flood limit has been exceeded." + } + ] + }), 429 + +@UsersAPI.before_request +def before_request(): + if "Roblox/" not in request.user_agent.string: + if request.path == "/v1/usernames/users" or request.path == "/v1/users": + return + csrf.protect() + +@UsersAPI.route('/v1/users/', methods=['GET']) +@limiter.limit("60/minute") +def get_user( userId : int ): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 3, "message": "The user id is invalid." } ] } ), 404 + + return jsonify({ + "description": userObject.description, + "created": userObject.created.isoformat(), + "isBanned": userObject.accountstatus != 1, + "externalAppDisplayName": userObject.username, + "hasVerifiedBadge": False, + "id": userObject.id, + "name": userObject.username, + "displayName": userObject.username, + }) + +@UsersAPI.route('/v1/users/authenticated', methods=['GET']) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_authenticated_user(): + AuthenticatedUser : User = auth.GetCurrentUser() + + return jsonify({ + "id": AuthenticatedUser.id, + "name": AuthenticatedUser.username, + "displayName": AuthenticatedUser.username, + }) + +@UsersAPI.route("/v1/users/authenticated/roles", methods=["GET"]) +@limiter.limit("60/minute") +@auth.authenticated_required_api +def get_authenticated_user_roles(): + return jsonify({ + "roles": [] + }), 200 + +@UsersAPI.route("/v1/usernames/users", methods=["POST"]) +@limiter.limit("60/minute") +def multi_username_lookup(): + if not request.is_json: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + if "usernames" not in request.json: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + if not isinstance(request.json["usernames"], list): + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + usernames = request.json["usernames"] + if len(usernames) > 100: + return jsonify( { "errors": [ { "code": 2, "message": "Too many usernames." } ] } ), 400 + + alreadySearchedUsernames = [] + data_result = [] + + for username in usernames: + username = str(username) + if username.lower() in alreadySearchedUsernames: + continue + + alreadySearchedUsernames.append(username.lower()) + + userObject : User = User.query.filter(func.lower(User.username) == username.lower()).first() + if userObject is not None: + data_result.append({ + "requestedUsername": username, + "hasVerifiedBadge": False, + "id": userObject.id, + "name": userObject.username, + "displayName": userObject.username + }) + + continue + + pastusernameLookup : PastUsername = PastUsername.query.filter(func.lower(PastUsername.username) == username.lower()).first() + if pastusernameLookup is not None: + userObject : User = User.query.filter_by(id=pastusernameLookup.user_id).first() + if userObject is not None: + data_result.append({ + "requestedUsername": username, + "hasVerifiedBadge": False, + "id": userObject.id, + "name": userObject.username, + "displayName": userObject.username + }) + + continue + + return jsonify({ + "data": data_result + }), 200 + +@UsersAPI.route("/v1/users", methods=["POST"]) +@limiter.limit("60/minute") +def multi_user_lookup(): + if not request.is_json: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + if "userIds" not in request.json: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + if not isinstance(request.json["userIds"], list): + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + + userIds = request.json["userIds"] + if len(userIds) > 100: + return jsonify( { "errors": [ { "code": 2, "message": "Too many usernames." } ] } ), 400 + + alreadySearchedUserIds = [] + data_result = [] + + for userId in userIds: + if type(userId) != int: + return jsonify( { "errors": [ { "code": 0, "message": "The request is invalid." } ] } ), 400 + if userId in alreadySearchedUserIds: + continue + + alreadySearchedUserIds.append(userId) + + userObject : User = User.query.filter_by(id=userId).first() + if userObject is not None: + data_result.append({ + "id": userObject.id, + "name": userObject.username, + "displayName": userObject.username, + "hasVerifiedBadge": False + }) + + continue + + return jsonify({ + "data": data_result + }), 200 + +@UsersAPI.route("/v1/users//username-history", methods=["GET"]) +@limiter.limit("60/minute") +def past_username_history_lookup( userId : int ): + userObject : User = User.query.filter_by(id=userId).first() + if userObject is None: + return jsonify( { "errors": [ { "code": 3, "message": "The user id is invalid." } ] } ), 404 + + cursorPage : int = request.args.get("cursor", default = 1, type = int) + if cursorPage < 1: + return jsonify( { "errors": [ { "code": 4, "message": "The specified cursor is invalid!" } ] } ), 400 + + pageLimit : int = request.args.get("limit", default = 10, type = int) + if pageLimit not in [10, 25, 50, 100]: + return jsonify( { "errors": [ { "code": 5, "message": "The specified limit is invalid!" } ] } ), 400 + + sortOrder : str = request.args.get("sortOrder", default = "Asc", type = str) + if sortOrder.lower() not in ["asc", "desc"]: + return jsonify( { "errors": [ { "code": 6, "message": "The specified sort order is invalid!" } ] } ), 400 + + pastUsernames = PastUsername.query.filter_by(user_id=userId).order_by( + PastUsername.id.desc() if sortOrder.lower() == "desc" else PastUsername.id.asc() + ).paginate(page=cursorPage, per_page=pageLimit, error_out=False) + + data_result = [] + for pastUsername in pastUsernames.items: + data_result.append({ + "name": pastUsername.username, + }) + + return jsonify({ + "previousPageCursor": str(pastUsernames.prev_num) if pastUsernames.has_prev else None, + "nextPageCursor": str(pastUsernames.next_num) if pastUsernames.has_next else None, + "data": data_result + }),200 \ No newline at end of file diff --git a/app/services/economy.py b/app/services/economy.py new file mode 100644 index 0000000..8fe1fae --- /dev/null +++ b/app/services/economy.py @@ -0,0 +1,270 @@ +from app.extensions import redis_controller, db +from app.util import redislock + +from app.models.usereconomy import UserEconomy +from app.models.user import User +from app.models.userassets import UserAsset +from app.models.groups import Group, GroupEconomy +from app.models.asset import Asset +from app.models.asset_rap import AssetRap +from app.services.groups import GetGroupFromId, GetUserFromId + +import redis_lock +import math + +class InvalidCurrencyTypeException(Exception): + pass +class EconomyLockAcquireException(Exception): + pass +class InsufficientFundsException(Exception): + pass +class AssetNotLimitedException(Exception): + pass +class AssetDoesNotExistException(Exception): + pass + +def TaxCurrencyAmount( Amount : int ) -> int: + return math.floor( Amount * 0.7 ) + +def GetAssetFromId( assetid : int | Asset ) -> Asset | None: + """ + Returns the Asset object for the given assetid + """ + if isinstance(assetid, Asset): + return assetid + AssetObj : Asset = Asset.query.filter_by(id=assetid).first() + if AssetObj is None: + raise AssetDoesNotExistException("Asset does not exist") + return AssetObj + +def GetUserEconomyObj( TargetUser : User ) -> UserEconomy | None: + """ + Returns the UserEconomy object for the given user + """ + return UserEconomy.query.filter_by( userid=TargetUser.id ).first() + +def GetGroupEconomyObj( TargetGroup : Group ) -> GroupEconomy | None: + """ + Returns the GroupEconomy object for the given group + """ + return GroupEconomy.query.filter_by( group_id=TargetGroup.id ).first() + +def GetUserBalance( TargetUser : User ) -> tuple[int, int]: + """ + Returns the User's Robux and Tickets balance + """ + EconomyObj : UserEconomy = GetUserEconomyObj( TargetUser ) + return EconomyObj.robux, EconomyObj.tix + +def GetGroupBalance( TargetGroup : Group ) -> tuple[int, int]: + """ + Returns the Group's Robux and Tickets balance + """ + EconomyObj : GroupEconomy = GetGroupEconomyObj( TargetGroup ) + return EconomyObj.robux_balance, EconomyObj.tix_balance + +def UnsafeIncrementTargetBalance( Target : User | Group, Amount : int, CurrencyType : int ): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Increments the Target Balance ( Not Recommended for normal use please instead use IncrementTargetBalance) + """ + if isinstance(Target, User): + TargetEconomyObj : UserEconomy = GetUserEconomyObj( Target ) + if CurrencyType == 0: + TargetEconomyObj.robux += Amount + elif CurrencyType == 1: + TargetEconomyObj.tix += Amount + else: + raise InvalidCurrencyTypeException("Invalid Currency Type") + db.session.commit() + elif isinstance(Target, Group): + TargetEconomyObj : GroupEconomy = GetGroupEconomyObj( Target ) + if CurrencyType == 0: + TargetEconomyObj.robux_balance += Amount + elif CurrencyType == 1: + TargetEconomyObj.tix_balance += Amount + else: + raise InvalidCurrencyTypeException("Invalid Currency Type") + db.session.commit() + else: + raise TypeError("Invalid Target Type") + +def UnsafeDecrementTargetBalance( Target : User | Group, Amount : int, CurrencyType : int ): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Decrements the Target Balance ( Not Recommended for normal use please instead use DecrementTargetBalance) + """ + if isinstance(Target, User): + TargetEconomyObj : UserEconomy = GetUserEconomyObj( Target ) + if CurrencyType == 0: + TargetEconomyObj.robux -= Amount + elif CurrencyType == 1: + TargetEconomyObj.tix -= Amount + else: + raise InvalidCurrencyTypeException("Invalid Currency Type") + db.session.commit() + elif isinstance(Target, Group): + TargetEconomyObj : GroupEconomy = GetGroupEconomyObj( Target ) + if CurrencyType == 0: + TargetEconomyObj.robux_balance -= Amount + elif CurrencyType == 1: + TargetEconomyObj.tix_balance -= Amount + else: + raise InvalidCurrencyTypeException("Invalid Currency Type") + db.session.commit() + else: + raise TypeError("Invalid Target Type") + +def IncrementTargetBalance( Target : User | Group, Amount : int, CurrencyType : int ): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Increments the Target Balance + """ + if Amount < 0: + raise ValueError("Amount must be positive") + if isinstance(Target, User): + with redis_lock.Lock( redis_client = redis_controller, name = f"economy:{Target.id}", expire = 1, auto_renewal = True ): + UnsafeIncrementTargetBalance( Target, Amount, CurrencyType ) + return + elif isinstance(Target, Group): + with redis_lock.Lock( redis_client = redis_controller, name = f"economy_group:{Target.id}", expire = 1, auto_renewal = True ): + UnsafeIncrementTargetBalance( Target, Amount, CurrencyType ) + return + else: + raise TypeError("Invalid Target Type") + +def DecrementTargetBalance( Target : User | Group, Amount : int, CurrencyType : int ): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Decrements the Target Balance + """ + if Amount < 0: + raise ValueError("Amount must be positive") + if isinstance(Target, User): + with redis_lock.Lock( redis_client = redis_controller, name = f"economy:{Target.id}", expire = 1, auto_renewal = True ): + TargetEconomyObj : UserEconomy = GetUserEconomyObj( Target ) + if CurrencyType == 0: + if TargetEconomyObj.robux < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif CurrencyType == 1: + if TargetEconomyObj.tix < Amount: + raise InsufficientFundsException("Insufficient Funds") + UnsafeDecrementTargetBalance( Target, Amount, CurrencyType ) + return + elif isinstance(Target, Group): + with redis_lock.Lock( redis_client = redis_controller, name = f"economy_group:{Target.id}", expire = 1, auto_renewal = True ): + TargetEconomyObj : GroupEconomy = GroupEconomy.query.filter_by( group_id=Target.id ).first() + if CurrencyType == 0: + if TargetEconomyObj.robux_balance < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif CurrencyType == 1: + if TargetEconomyObj.tix_balance < Amount: + raise InsufficientFundsException("Insufficient Funds") + UnsafeDecrementTargetBalance( Target, Amount, CurrencyType ) + return + else: + raise TypeError("Invalid Target Type") + +def TransferFunds( Source : User | Group, Target : User | Group, Amount : int, CurrencyType : int, ApplyTax : bool = False): # CurrencyType is 0 for Robux, 1 for Tickets + """ + Transfers funds from the source to the target + """ + + if Amount < 0: + raise ValueError("Amount must be positive") + if Source == Target: + raise ValueError("Source and Target must be different") + if CurrencyType not in [0,1]: + raise InvalidCurrencyTypeException("Invalid Currency Type") + if isinstance(Source, User): + SourceEconomyObj : UserEconomy = GetUserEconomyObj( Source ) + if CurrencyType == 0: + if SourceEconomyObj.robux < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif CurrencyType == 1: + if SourceEconomyObj.tix < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif isinstance(Source, Group): + SourceEconomyObj : GroupEconomy = GroupEconomy.query.filter_by( group_id=Source.id ).first() + if CurrencyType == 0: + if SourceEconomyObj.robux_balance < Amount: + raise InsufficientFundsException("Insufficient Funds") + elif CurrencyType == 1: + if SourceEconomyObj.tix_balance < Amount: + raise InsufficientFundsException("Insufficient Funds") + else: + raise TypeError("Invalid Source Type") + + TakenAmount : int = Amount + GivenAmount : int = Amount + if ApplyTax: + GivenAmount = TaxCurrencyAmount( Amount ) + try: + DecrementTargetBalance( Source, TakenAmount, CurrencyType ) + except InsufficientFundsException: + raise InsufficientFundsException("Insufficient Funds") + IncrementTargetBalance( Target, GivenAmount, CurrencyType ) + + return + +def AdjustAssetRap(AssetObj : Asset | int, robux : int): + """ Adjusts the RAP of an asset + https://roblox.fandom.com/wiki/Recent_Average_Price + This will only work with assets that are limited + """ + AssetObj : Asset = GetAssetFromId(AssetObj) + + AssetRapObject : AssetRap = AssetRap.query.filter_by(assetid=AssetObj.id).first() + if AssetRapObject is None: + if not AssetObj.is_limited: + raise AssetNotLimitedException("Asset is not limited") + AssetRapObject = AssetRap(assetid=AssetObj.id, rap=robux) + db.session.add(AssetRapObject) + db.session.commit() + return True + if AssetRapObject.rap <= 0: + AssetRapObject.rap = robux + CurrentRAP = AssetRapObject.rap + AssetRapObject.rap = math.floor(CurrentRAP - ( CurrentRAP - robux ) / 10) + db.session.commit() + return True + +def GetAssetRap(AssetObj : Asset | int ) -> int: + """ + Returns the RAP of an asset + """ + AssetObj : Asset = GetAssetFromId(AssetObj) + if not AssetObj.is_limited: + raise AssetNotLimitedException("Asset is not limited") + + AssetRapObject : AssetRap = AssetRap.query.filter_by(assetid=AssetObj.id).first() + if AssetRapObject is None: + AssetRapObject = AssetRap(assetid=AssetObj.id, rap=0) + db.session.add(AssetRapObject) + db.session.commit() + return AssetRapObject.rap + +def GetCreatorOfAsset( AssetObj : Asset | int ) -> User | Group | None: + """ + Returns the creator of an asset + """ + AssetObj : Asset = GetAssetFromId(AssetObj) + if AssetObj.creator_type == 1: + return GetGroupFromId(AssetObj.creator_id) + elif AssetObj.creator_type == 0: + return GetUserFromId(AssetObj.creator_id) + else: + return None + +def CalculateUserRAP( UserObj : User | int, skipCache : bool = False ) -> int: + """ + Calculates the RAP of a user + """ + if redis_controller.exists(f"rap_calculation:{UserObj.id}") and not skipCache: + return int(redis_controller.get(f"rap_calculation:{UserObj.id}")) + + UserObj : User = GetUserFromId(UserObj) + UserRAP : int = 0 + UserLimitedAssets : list[UserAsset] = UserAsset.query.filter_by(userid=UserObj.id).outerjoin( Asset, Asset.id == UserAsset.assetid ).filter( Asset.is_limited == True ).all() + + for UserLimitedAsset in UserLimitedAssets: + UserRAP += GetAssetRap(UserLimitedAsset.assetid) + + redis_controller.set(f"rap_calculation:{UserObj.id}", UserRAP, ex = 60) + return UserRAP \ No newline at end of file diff --git a/app/services/gameserver_comm.py b/app/services/gameserver_comm.py new file mode 100644 index 0000000..a0b451b --- /dev/null +++ b/app/services/gameserver_comm.py @@ -0,0 +1,117 @@ +import requests +import time +import base64 +import json + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.asymmetric import padding + +from app.models.gameservers import GameServer + +from config import Config + +config = Config() + +def sign_content( content : bytes ) -> str: + """ + Signs the given content using the gameserver private key + + :param content: The content to sign + + :returns: str + """ + assert isinstance( content, bytes ), "content must be a bytes object" + + with open( config.GAMESERVER_COMM_PRIVATE_KEY_LOCATION, "rb" ) as f: + private_key = serialization.load_pem_private_key( + f.read(), + password=None, + backend=default_backend() + ) + + signature = private_key.sign( + content, + padding.PKCS1v15(), + hashes.SHA256() + ) + + return base64.b64encode( signature ).decode( "utf-8" ) + +def perform_get( + TargetGameserver : GameServer, + Endpoint : str, + AdditionalHeaders : dict = {}, + + RequestTimeout : int = 10 +) -> requests.Response: + """ + Performs a GET request to the given gameserver + + :param TargetGameserver: The gameserver to send the request to + :param Endpoint: The endpoint to send the request to + :param AdditionalHeaders: Additional headers to send with the request + :param RequestTimeout: The amount of time before the request times out + + :returns: requests.Response + """ + assert isinstance( TargetGameserver, GameServer ), "TargetGameserver must be an instance of GameServer" + assert isinstance( Endpoint, str ), "Endpoint must be a string" + assert isinstance( AdditionalHeaders, dict ), "AdditionalHeaders must be a dictionary" + + RequestTimestamp = time.time() + signed_content = sign_content( f'{RequestTimestamp}\nGET'.encode( 'utf-8' ) ) + ReqSignature = f"{str(RequestTimestamp)}|{ signed_content }" + + headers = { + "User-Agent": "SYNTAX-Gameserver-Communication/1.0", + "X-Syntax-Request-Signature": ReqSignature + } + + return requests.get( + url = f"http://{TargetGameserver.serverIP}:{TargetGameserver.serverPort}/{Endpoint}", + headers = headers, + timeout = RequestTimeout + ) + +def perform_post( + TargetGameserver : GameServer, + Endpoint : str, + JSONData : dict | list = {}, + AdditionalHeaders : dict = {}, + + RequestTimeout : int = 10 +) -> requests.Response: + """ + Performs a POST request to the given gameserver + + :param TargetGameserver: The gameserver to send the request to + :param Endpoint: The endpoint to send the request to + :param JSONData: The JSON data to send with the request + :param AdditionalHeaders: Additional headers to send with the request + :param RequestTimeout: The amount of time before the request times out + + :returns: requests.Response + """ + assert isinstance( TargetGameserver, GameServer ), "TargetGameserver must be an instance of GameServer" + assert isinstance( Endpoint, str ), "Endpoint must be a string" + assert isinstance( JSONData, ( dict, list ) ), "JSONData must be a dictionary or list" + assert isinstance( AdditionalHeaders, dict ), "AdditionalHeaders must be a dictionary" + + RequestTimestamp = time.time() + signed_content = sign_content( f"{RequestTimestamp}\nPOST\n{json.dumps(JSONData)}".encode( "utf-8" )) + ReqSignature = f"{str(RequestTimestamp)}|{signed_content}" + + headers = { + "User-Agent": "SYNTAX-Gameserver-Communication/1.0", + "X-Syntax-Request-Signature": ReqSignature, + "Content-Type": "application/json" + } + headers.update( AdditionalHeaders ) + + return requests.post( + url = f"http://{TargetGameserver.serverIP}:{TargetGameserver.serverPort}/{Endpoint}", + headers = headers, + data = json.dumps( JSONData ), + timeout = RequestTimeout + ) \ No newline at end of file diff --git a/app/services/groups.py b/app/services/groups.py new file mode 100644 index 0000000..600fae2 --- /dev/null +++ b/app/services/groups.py @@ -0,0 +1,690 @@ +import logging + +from app.extensions import db, redis_controller +from app.util import redislock + +from app.models.user import User +from app.models.groups import Group, GroupIcon, GroupSettings, GroupRole, GroupRolePermission, GroupMember, GroupEconomy, GroupJoinRequest, GroupStatus, GroupWallPost + +class GroupExceptions: + class RolesetDoesNotExist(Exception): + pass + class GroupDoesNotExist(Exception): + pass + class UserDoesNotExist(Exception): + pass + class RolesetNameNotUnique(Exception): + pass + class InvalidRankNumber(Exception): + pass + class UserNotInGroup(Exception): + pass + class UserAlreadyInsideGroup(Exception): + pass + class CorruptedGroup(Exception): + pass + class GroupNameAlreadyTaken(Exception): + pass + class GroupNameNotAllowed(Exception): + pass + class InsufficientPermssions(Exception): + pass + +class UserGroupEntry: + group_id : int = 0 + group_name : str = "" + group_description : str = "" + group_owner_id : int = 0 + + group_member_count : int = 0 + + user_rank : int = 0 + user_roleset : GroupRole | None = None + + def __init__(self, Group : Group, UserRoleset : GroupRole | None): + self.group_id = Group.id + self.group_name = Group.name + self.group_description = Group.description + self.group_owner_id = Group.owner_id + + self.user_rank = UserRoleset.rank + self.user_roleset = UserRoleset + + self.group_member_count = GetGroupMemberCount(Group) + +def GetUserFromId( UserObj : User | int ) -> User | None: + """ + Returns a User object from a User ID. + """ + if isinstance(UserObj, User): + return UserObj + else: + TargetUser : User | None = User.query.filter_by(id=UserObj).first() + if TargetUser is None: + raise GroupExceptions.UserDoesNotExist("User does not exist.") + return TargetUser + +def GetRolesetFromId( Role : GroupRole | int ) -> GroupRole | None: + """ + Returns a GroupRole object from a GroupRole ID. + """ + if isinstance(Role, GroupRole): + return Role + else: + TargetGroupRole : GroupRole | None = GroupRole.query.filter_by(id=Role).first() + if TargetGroupRole is None: + raise GroupExceptions.RolesetDoesNotExist("Roleset does not exist.") + return TargetGroupRole + +def GetGroupFromId( GroupObj : Group | int ) -> Group | None: + """ + Returns a Group object from a Group ID. + """ + if isinstance(GroupObj, Group): + return GroupObj + else: + TargetGroup : Group | None = Group.query.filter_by(id=GroupObj).first() + if TargetGroup is None: + raise GroupExceptions.GroupDoesNotExist("Group does not exist.") + return TargetGroup + +def RefreshRolesetCount( Role : GroupRole | int ) -> int: + """ + Recounts the amount of users in a GroupRole and updates the database. + then returns the amount of users in the role. + """ + Role : GroupRole | None = GetRolesetFromId(Role) + + TotalMembers : int = GroupMember.query.filter_by(group_id=Role.group_id, group_role_id=Role.id).count() + Role.member_count = TotalMembers + db.session.commit() + + return TotalMembers + +def GetGroupMemberCount( Group : Group | int ) -> int: + """ + Returns the amount of members in a group. + """ + Group : Group | None = GetGroupFromId(Group) + TotalMembers : int = 0 + for Role in GroupRole.query.filter_by(group_id=Group.id).all(): + TotalMembers += Role.member_count + + return TotalMembers + +def GetUserRankInGroup( TargetUser : User | int, TargetGroup : Group | int ) -> int: + """ + Returns a integer between 0-255 representing the user rank in the group. + 0 - Guest ( Not in the group ) + 1 - 244 - Custom ranks + 255 - Group Owner + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + UserGroupMembership : GroupMember | None = GroupMember.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + if UserGroupMembership is None: + return 0 # Guest + try: + UserAssignedRoleset : GroupRole = GetRolesetFromId(UserGroupMembership.group_role_id) + except GroupExceptions.RolesetDoesNotExist: + logging.warn(f"User {TargetUser.id} is in group {TargetGroup.id} but the roleset {UserGroupMembership.group_role_id} does not exist.") + return 0 # Weird edge case where the user is in the group but the roleset doesn't exist + return UserAssignedRoleset.rank + +def GetUserRolesetInGroup( TargetUser : User | int, TargetGroup : Group | int ) -> GroupRole | None: + """ + Returns a GroupRole object representing the user's roleset in the group. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + UserGroupMembership : GroupMember | None = GroupMember.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + if UserGroupMembership is None: + GuestRoleset : GroupRole | None = GroupRole.query.filter_by(group_id=TargetGroup.id, rank=0).first() + if GuestRoleset is None: + raise GroupExceptions.CorruptedGroup("Group has no guest roleset.") + return GuestRoleset + try: + UserAssignedRoleset : GroupRole = GetRolesetFromId(UserGroupMembership.group_role_id) + except GroupExceptions.RolesetDoesNotExist: + logging.warn(f"User {TargetUser.id} is in group {TargetGroup.id} but the roleset {UserGroupMembership.group_role_id} does not exist.") + return None + return UserAssignedRoleset + +def GetUserGroups( TargetUser : User | int ) -> list[UserGroupEntry]: + """ + Returns a list of UserGroupEntry objects representing the user's groups. + """ + TargetUser : User = GetUserFromId(TargetUser) + + UserGroups : list[UserGroupEntry] = [] + for UserGroupMembership in GroupMember.query.filter_by(user_id=TargetUser.id).all(): + try: + UserAssignedRoleset : GroupRole = GetRolesetFromId(UserGroupMembership.group_role_id) + except GroupExceptions.RolesetDoesNotExist: + logging.warn(f"User {TargetUser.id} is in group {UserGroupMembership.group_id} but the roleset {UserGroupMembership.group_role_id} does not exist.") + continue + GroupObj : Group = GetGroupFromId(UserGroupMembership.group_id) + UserGroups.append(UserGroupEntry( + Group=GroupObj, + UserRoleset=UserAssignedRoleset + )) + return UserGroups + +def GetGroupRolesets( TargetGroup : Group | int ) -> list[GroupRole]: + """ + Returns a list of GroupRole objects representing the group's rolesets. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + + return GroupRole.query.filter_by(group_id=TargetGroup.id).order_by(GroupRole.rank.asc()).all() + +def CreateGroupRoleset( TargetGroup : Group | int, Name : str, Description : str, Rank : int ) -> GroupRole: + """ + Creates a new roleset in the group and returns the GroupRole object. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + if GroupRole.query.filter_by(group_id=TargetGroup.id, name=Name).first() is not None: + raise GroupExceptions.RolesetNameNotUnique("A roleset with that name already exists.") + if Rank < 0 or Rank > 255: + raise GroupExceptions.InvalidRankNumber("Rank must be between 0 and 255.") + if len(Name) > 255: + raise ValueError("Name must be less than 255 characters.") + if len(Description) > 255: + raise ValueError("Description must be less than 255 characters.") + + NewRoleset : GroupRole = GroupRole( + group_id=TargetGroup.id, + name=Name, + description=Description, + rank=Rank, + member_count=0 + ) + db.session.add(NewRoleset) + db.session.commit() + + RolesetPermission : GroupRolePermission = GroupRolePermission( + group_role_id=NewRoleset.id + ) + RolesetPermission.view_status = True + db.session.add(RolesetPermission) + db.session.commit() + + return NewRoleset + +def ChangeUserRole( TargetUser : User | int , TargetRoleset : GroupRole | int ) -> None: + """ + Changes the user's roleset in the group if possible. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetRoleset : GroupRole = GetRolesetFromId(TargetRoleset) + TargetGroup : Group = GetGroupFromId(TargetRoleset.group_id) + + if GetUserRankInGroup(TargetUser, TargetRoleset.group_id) == 0: + raise GroupExceptions.UserNotInGroup("User is not in the group.") + + if GetUserRolesetInGroup(TargetUser, TargetRoleset.group_id) == TargetRoleset: + return + + if TargetGroup.owner_id == TargetUser.id and TargetRoleset.rank != 255: + raise ValueError("Cannot change the owner's roleset.") + + UserGroupMembership : GroupMember = GroupMember.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + OldRolesetId : int = UserGroupMembership.group_role.id + UserGroupMembership.group_role_id = TargetRoleset.id + db.session.commit() + RefreshRolesetCount(OldRolesetId) + RefreshRolesetCount(TargetRoleset.id) + + return + +def AddUserToGroup( TargetUser : User | int , TargetGroup : Group | int, ForceJoin : bool = False ) -> GroupMember | GroupJoinRequest | None: + """ + Adds the user to the group if possible. + ForceJoin : bool ( If the group requires manual approval, this will bypass it. ) + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + if GetUserRankInGroup(TargetUser, TargetGroup) != 0: + raise GroupExceptions.UserAlreadyInsideGroup("User is already in the group.") + + TargetGroupSettings : GroupSettings | None = GroupSettings.query.filter_by(group_id=TargetGroup.id).first() + if TargetGroupSettings is None: + raise ValueError("Group settings do not exist.") + if TargetGroupSettings.approval_required and not ForceJoin: + ExisitingJoinRequest : GroupJoinRequest | None = GroupJoinRequest.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + if ExisitingJoinRequest is not None: + return ExisitingJoinRequest + NewJoinRequest : GroupJoinRequest = GroupJoinRequest( + user_id=TargetUser.id, + group_id=TargetGroup.id + ) + db.session.add(NewJoinRequest) + db.session.commit() + return GroupJoinRequest + + LowestRankRoleset : GroupRole | None = GroupRole.query.filter_by(group_id=TargetGroup.id).filter(GroupRole.rank > 0).order_by(GroupRole.rank.asc()).first() + if LowestRankRoleset is None: + raise GroupExceptions.CorruptedGroup("Group has no rolesets.") + if LowestRankRoleset.rank == 255: + raise GroupExceptions.CorruptedGroup("Group has no member roleset.") + + NewGroupMember : GroupMember = GroupMember( + user_id=TargetUser.id, + group_id=TargetGroup.id, + group_role_id=LowestRankRoleset.id + ) + + db.session.add(NewGroupMember) + db.session.commit() + + RefreshRolesetCount(LowestRankRoleset) + + return NewGroupMember + +def GetJoinRequest( TargetUser : User | int, TargetGroup : Group | int ) -> GroupJoinRequest | None: + """ + Returns a GroupJoinRequest object from a user and group. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + return GroupJoinRequest.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + +def AcceptJoinRequest( TargetUser : User | int, TargetGroup : Group | int ) -> GroupMember | None: + """ + Accepts the user's join request. + """ + ExisitingJoinRequest : GroupJoinRequest | None = GroupJoinRequest.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + if ExisitingJoinRequest is None: + raise ValueError("Join request does not exist.") + db.session.delete(ExisitingJoinRequest) + db.session.commit() + return AddUserToGroup(TargetUser, TargetGroup, ForceJoin=True) + +def GetRolesetPermission( GroupRoleset : GroupRole | int ) -> GroupRolePermission: + """ + Returns a GroupRolePermission object from a GroupRole. + """ + GroupRoleset : GroupRole = GetRolesetFromId(GroupRoleset) + RolesetPermission : GroupRolePermission | None = GroupRolePermission.query.filter_by(group_role_id=GroupRoleset.id).first() + if RolesetPermission is None: + RolesetPermission : GroupRolePermission = GroupRolePermission( + group_role_id=GroupRoleset.id + ) + db.session.add(RolesetPermission) + db.session.commit() + return RolesetPermission + +def ModifyRolesetPermission( + GroupRoleset : GroupRole, + DeleteFromWall : bool = None, + PostToWall : bool = None, + InviteMembers : bool = None, + PostToStatus : bool = None, + RemoveMembers : bool = None, + ViewStatus : bool = None, + ViewWall : bool = None, + ChangeRank : bool = None, + AdvertiseGroup : bool = None, + ManageRelationships : bool = None, + AddGroupPlaces : bool = None, + ViewAuditLogs : bool = None, + CreateItems : bool = None, + ManageItems : bool = None, + SpendGroupFunds : bool = None, + ManageClan : bool = None, + ManageGroupGames : bool = None + ) -> None: + """ + Modifies the roleset's permissions. + """ + RolesetPermission : GroupRolePermission = GetRolesetPermission(GroupRoleset) + + if DeleteFromWall is not None: + RolesetPermission.delete_from_wall = DeleteFromWall + if PostToWall is not None: + RolesetPermission.post_to_wall = PostToWall + if InviteMembers is not None: + RolesetPermission.invite_members = InviteMembers + if PostToStatus is not None: + RolesetPermission.post_to_status = PostToStatus + if RemoveMembers is not None: + RolesetPermission.remove_members = RemoveMembers + if ViewStatus is not None: + RolesetPermission.view_status = ViewStatus + if ViewWall is not None: + RolesetPermission.view_wall = ViewWall + if ChangeRank is not None: + RolesetPermission.change_rank = ChangeRank + if AdvertiseGroup is not None: + RolesetPermission.advertise_group = AdvertiseGroup + if ManageRelationships is not None: + RolesetPermission.manage_relationships = ManageRelationships + if AddGroupPlaces is not None: + RolesetPermission.add_group_places = AddGroupPlaces + if ViewAuditLogs is not None: + RolesetPermission.view_audit_logs = ViewAuditLogs + if CreateItems is not None: + RolesetPermission.create_items = CreateItems + if ManageItems is not None: + RolesetPermission.manage_items = ManageItems + if SpendGroupFunds is not None: + RolesetPermission.spend_group_funds = SpendGroupFunds + if ManageClan is not None: + RolesetPermission.manage_clan = ManageClan + if ManageGroupGames is not None: + RolesetPermission.manage_group_games = ManageGroupGames + + db.session.commit() + return + +from app.util.textfilter import FilterText, TextNotAllowedException +from sqlalchemy import func + +def SearchGroupByName( GroupName : str ) -> Group | None : + """ + Returns a Group object from a group name. + """ + GroupName = GroupName.lower() + return Group.query.filter(func.lower(Group.name) == GroupName).first() + +def isGroupNameAllowed( GroupName : str ) -> bool: + """ + Returns True if the group name is allowed. + """ + if len(GroupName) > 255: + return False + if len(GroupName) < 3: + return False + + AlphanumericCharacters : int = 0 + for Character in GroupName: + if Character.isalnum(): + AlphanumericCharacters += 1 + if AlphanumericCharacters < 3: + return False + try: + FilterText( Text = GroupName, ThrowException = True) + except TextNotAllowedException: + return False + return True + +def AssertUserHasPermission( TargetUser : User | int, TargetGroup : Group | int, Permission ) -> None: # Permission should be like GroupRolePermission.post_to_status + """ + Raises an exception if the user does not have the permission. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + UserRoleset : GroupRole | None = GetUserRolesetInGroup(TargetUser, TargetGroup) + if UserRoleset is None: + raise GroupExceptions.CorruptedGroup("Group does not have a guest roleset.") + RolesetPermission : GroupRolePermission = GetRolesetPermission(UserRoleset) + + if not getattr(RolesetPermission, Permission.name): + raise GroupExceptions.InsufficientPermssions("User does not have permission.") + return + + +def CreateGroup( GroupName : str, GroupDescription : str, GroupOwner : User | int, GroupIconContentHash : str ) -> Group | None : + """ + Creates a new group and returns the Group object. + """ + + CreateLock = redislock.acquire_lock("group_creation_lock", 30, 5) + if not CreateLock: + raise ValueError("Failed to acquire global creation lock.") + + if SearchGroupByName(GroupName) is not None: + redislock.release_lock("group_creation_lock", CreateLock) + raise GroupExceptions.GroupNameAlreadyTaken("Group name is already taken.") + + if isGroupNameAllowed(GroupName) is False: + redislock.release_lock("group_creation_lock", CreateLock) + raise GroupExceptions.GroupNameNotAllowed("Group name is not allowed.") + if len(GroupDescription) > 1024: + redislock.release_lock("group_creation_lock", CreateLock) + raise ValueError("Group description must be less than 1024 characters.") + GroupOwner : User = GetUserFromId(GroupOwner) + + NewGroup : Group = Group( + name=GroupName, + description=GroupDescription, + owner_id=GroupOwner.id + ) + db.session.add(NewGroup) + db.session.commit() + redislock.release_lock("group_creation_lock", CreateLock) + NewGroupSettings : GroupSettings = GroupSettings( + group_id=NewGroup.id + ) + db.session.add(NewGroupSettings) + + NewGroupIcon : GroupIcon = GroupIcon( + group_id=NewGroup.id, + content_hash=GroupIconContentHash, + moderation_status=1, + creator_id=GroupOwner.id + ) + db.session.add(NewGroupIcon) + + NewGroupEconomy : GroupEconomy = GroupEconomy( + group_id=NewGroup.id + ) + db.session.add(NewGroupEconomy) + db.session.commit() + + GuestGroupRoleset : GroupRole = CreateGroupRoleset( + TargetGroup=NewGroup, + Name="Guest", + Description="A non-group member.", + Rank=0 + ) + ModifyRolesetPermission(GuestGroupRoleset, ViewStatus=True, ViewWall=True) + MemberGroupRoleset : GroupRole = CreateGroupRoleset( + TargetGroup=NewGroup, + Name="Member", + Description="A regular group member.", + Rank=1 + ) + ModifyRolesetPermission(MemberGroupRoleset, ViewStatus=True, ViewWall=True, PostToWall=True) + AdminGroupRoleset : GroupRole = CreateGroupRoleset( + TargetGroup=NewGroup, + Name="Admin", + Description="A group administrator.", + Rank=254 + ) + ModifyRolesetPermission(AdminGroupRoleset, ViewStatus=True, ViewWall=True, PostToWall=True) + OwnerGroupRoleset : GroupRole = CreateGroupRoleset( + TargetGroup=NewGroup, + Name="Owner", + Description="The group's owner.", + Rank=255 + ) + ModifyRolesetPermission( + OwnerGroupRoleset, + DeleteFromWall=True, + PostToWall=True, + InviteMembers=True, + PostToStatus=True, + RemoveMembers=True, + ViewStatus=True, + ViewWall=True, + ChangeRank=True, + AdvertiseGroup=True, + ManageRelationships=True, + AddGroupPlaces=True, + ViewAuditLogs=True, + CreateItems=True, + ManageItems=True, + SpendGroupFunds=True, + ManageClan=True, + ManageGroupGames=True + ) + + AddUserToGroup(GroupOwner, NewGroup, ForceJoin=True) + ChangeUserRole(GroupOwner, OwnerGroupRoleset) + + return NewGroup + +def PostToGroupStatus( Poster : User | int, TargetGroup : Group | int, StatusMessage : str, ForcePost : bool = False ) -> GroupStatus: + """ + Posts a status to the group. + ForcePost : bool ( If True this function will not check for the user permissions. ) + """ + Poster : User = GetUserFromId(Poster) + TargetGroup : Group = GetGroupFromId(TargetGroup) + if not ForcePost: + AssertUserHasPermission(Poster, TargetGroup, GroupRolePermission.post_to_status) + + FilteredMessage : str = FilterText(Text=StatusMessage) + if len(FilteredMessage) > 1024: + raise ValueError("Status message must be less than 1024 characters.") + NewStatus : GroupStatus = GroupStatus( + group_id=TargetGroup.id, + poster_id=Poster.id, + content=FilteredMessage + ) + db.session.add(NewStatus) + db.session.commit() + + return NewStatus + +def PostToGroupWall( Poster : User | int, TargetGroup : Group | int, WallMessage : str, ForcePost : bool = False ) -> GroupWallPost: + """ + Posts a message to the group wall. + ForcePost : bool ( If True this function will not check for the user permissions. ) + """ + Poster : User = GetUserFromId(Poster) + TargetGroup : Group = GetGroupFromId(TargetGroup) + if not ForcePost: + AssertUserHasPermission(Poster, TargetGroup, GroupRolePermission.post_to_wall) + + FilteredMessage : str = FilterText(Text=WallMessage) + if len(FilteredMessage) > 1024: + raise ValueError("Wall message must be less than 1024 characters.") + NewWallPost : GroupWallPost = GroupWallPost( + group_id=TargetGroup.id, + poster_id=Poster.id, + content=FilteredMessage + ) + db.session.add(NewWallPost) + db.session.commit() + + return NewWallPost + +def GetGroupWallPosts( TargetGroup : Group | int, Page : int = 1, PerPage : int= 10 ) -> list[GroupWallPost]: + """ + Returns a list of GroupWallPost objects representing the group's wall posts. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + + return GroupWallPost.query.filter_by(group_id=TargetGroup.id).order_by(GroupWallPost.created_at.desc()).paginate(Page, PerPage, False).items + +def RemoveUserFromGroup( TargetUser : User | int, TargetGroup : Group | int, AllowOwnerRemove : bool = False ) -> bool: + """ + Removes the user from the group. + """ + TargetUser : User = GetUserFromId(TargetUser) + TargetGroup : Group = GetGroupFromId(TargetGroup) + + if GetUserRankInGroup(TargetUser, TargetGroup.id) == 0: + raise GroupExceptions.UserNotInGroup("User is not in the group.") + + if TargetGroup.owner_id == TargetUser.id and not AllowOwnerRemove: + raise ValueError("Cannot remove the owner from the group.") + + if TargetGroup.owner_id == TargetUser.id: + TargetGroup.owner_id = None + + UserGroupMembership : GroupMember = GroupMember.query.filter_by(user_id=TargetUser.id, group_id=TargetGroup.id).first() + OldRolesetId : int = UserGroupMembership.group_role.id + db.session.delete(UserGroupMembership) + db.session.commit() + + RefreshRolesetCount(OldRolesetId) + + return True + +def isGroupNameAllowed( GroupName : str ) -> tuple[bool, str]: + """ + Returns True if the group name is allowed. + If not it returns a bool and a string which is the reason why its not allowed + """ + if len(GroupName) > 50: + return False, "Group name must be less than 40 characters." + if len(GroupName) < 3: + return False, "Group name must be more than 3 characters." + + AlphanumericCharacters : int = 0 + for Character in GroupName: + if Character.isalnum(): + AlphanumericCharacters += 1 + if AlphanumericCharacters < 3: + return False, "Group name must contain at least 3 alphanumeric characters." + try: + FilterText( Text = GroupName, ThrowException = True) + except TextNotAllowedException: + return False, "Group name is not allowed." + return True, "" + +def DeleteGroupWallPost( TargetPost : GroupWallPost, Remover : User | int, ForceDelete : bool = False ) -> None: + """ + Deletes a group wall post. + ForceDelete : bool ( If True this function will not check for the user permissions. ) + """ + TargetPost : GroupWallPost = TargetPost + Remover : User = GetUserFromId(Remover) + TargetGroup : Group = GetGroupFromId(TargetPost.group_id) + if not ForceDelete: + AssertUserHasPermission(Remover, TargetGroup, GroupRolePermission.delete_from_wall) + + db.session.delete(TargetPost) + db.session.commit() + return + +def GetLatestGroupStatus( TargetGroup : Group | int, ignoreEmpty : bool = True ) -> GroupWallPost | None: + """ + Returns the latest group status. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + + LatestGroupStatusPost : GroupStatus | None = GroupStatus.query.filter_by(group_id=TargetGroup.id).order_by(GroupStatus.created_at.desc()).first() + if LatestGroupStatusPost is None: + return None + if ignoreEmpty and LatestGroupStatusPost.content == "": + return None + return LatestGroupStatusPost + +def SetNewGroupIcon( TargetGroup : Group | int, NewIconHash : str, Uploader : User | int ) -> GroupIcon: + """ + Sets a new group icon. + """ + TargetGroup : Group = GetGroupFromId(TargetGroup) + Uploader : User = GetUserFromId(Uploader) + + if TargetGroup.icon is not None: + db.session.delete(TargetGroup.icon) + db.session.commit() + + NewGroupIcon : GroupIcon = GroupIcon( + group_id=TargetGroup.id, + content_hash=NewIconHash, + moderation_status=1, + creator_id=Uploader.id + ) + db.session.add(NewGroupIcon) + db.session.commit() + + return NewGroupIcon + +def GetUserGroupCount( UserObj : User | int ) -> int: + """ + Gets the amount of groups a user is in. + """ + UserObj : User = GetUserFromId(UserObj) + + return GroupMember.query.filter_by(user_id=UserObj.id).count() \ No newline at end of file diff --git a/app/services/invitekeys.py b/app/services/invitekeys.py new file mode 100644 index 0000000..cb69983 --- /dev/null +++ b/app/services/invitekeys.py @@ -0,0 +1,70 @@ +import random +import string +import uuid +from datetime import datetime +from app.extensions import db + +from app.models.invite_key import InviteKey +from app.models.user import User + +class InviteExceptions: + class InvalidInviteKey(Exception): + pass + class UserDoesNotExist(Exception): + pass + class InviteKeyAlreadyUsed(Exception): + pass + +def _GenerateInviteKey() -> str: + """ + Returns a randomly generated invite key + """ + RandomUUID = str(uuid.uuid4()) + invite_key = "syntax" + RandomUUID[6:] + InviteKeyObj : InviteKey = InviteKey.query.filter_by(key=invite_key).first() + if InviteKeyObj is not None: + return _GenerateInviteKey() + return invite_key + +def GetUserFromId( UserObj : User | int ) -> User | None: + """ + Returns a User object from a User ID. + """ + if isinstance(UserObj, User): + return UserObj + else: + TargetUser : User | None = User.query.filter_by(id=UserObj).first() + if TargetUser is None: + raise InviteExceptions.UserDoesNotExist("User does not exist.") + return TargetUser + +def GetInviteKey( key : str ) -> InviteKey: + InviteKeyObj : InviteKey = InviteKey.query.filter_by(key=key).first() + if InviteKeyObj is None: + raise InviteExceptions.InvalidInviteKey() + return InviteKeyObj + +def UseInviteKey( key : str, user : User ) -> InviteKey: + InviteKeyObj : InviteKey = GetInviteKey(key) + if InviteKeyObj.used_by is not None: + raise InviteExceptions.InviteKeyAlreadyUsed() + InviteKeyObj.used_by = user.id + InviteKeyObj.used_on = datetime.utcnow() + db.session.add(InviteKeyObj) + db.session.commit() + return InviteKeyObj + +def CreateInviteKey( creator : User | int | None ) -> InviteKey: + """ + Create a new invite key. + """ + if creator is not None: + creator = GetUserFromId(creator) + invite_key = _GenerateInviteKey() + InviteKeyObj = InviteKey( + key = invite_key, + created_by = creator.id if creator is not None else None + ) + db.session.add(InviteKeyObj) + db.session.commit() + return InviteKeyObj \ No newline at end of file diff --git a/app/services/proxydetection.py b/app/services/proxydetection.py new file mode 100644 index 0000000..32895e6 --- /dev/null +++ b/app/services/proxydetection.py @@ -0,0 +1,82 @@ +import requests +import logging +import json +from app.extensions import redis_controller +from app import Config + +config = Config() + +class IPHubQueryFailed(Exception): + pass +class IPHubRateLimited(Exception): + pass + +def lookup_address_info( address : str, skip_cache : bool = False, lookup_timeout : int = 10 ) -> dict: + if not skip_cache: + try: + CachedResponse : str = redis_controller.get(f"iphub_lookup_{address}") + if CachedResponse is not None: + return json.loads(CachedResponse) + except Exception as e: + logging.error(f"lookup_address_info : IPHub cache lookup failed: {e}") + redis_controller.delete(f"iphub_lookup_{address}") + try: + LookupResponse : requests.Response = requests.get( + f"https://api.ipapi.is/?q={address}&key={config.IPAPI_AUTH_KEY}", # We NEED to put this in env (and not hardcode it) + headers = { }, + timeout = lookup_timeout + ) + if LookupResponse.status_code == 403 or LookupResponse.status_code == 429: + logging.error("lookup_address_info : IPHub rate limited") + raise IPHubRateLimited("IPHub rate limited") + elif LookupResponse.status_code != 200: + logging.error(f"lookup_address_info : IPHub query failed: {LookupResponse.status_code} {LookupResponse.text}") + raise IPHubQueryFailed(f"IPHub query failed: {LookupResponse.status_code} {LookupResponse.text}") + + LookupResponseJSON : dict = LookupResponse.json() + redis_controller.setex( + name = f"iphub_lookup_{address}", + time = config.IPAPI_CACHE_LIFETIME, + value = json.dumps(LookupResponseJSON) + ) + return LookupResponseJSON + except requests.exceptions.Timeout: + logging.error(f"lookup_address_info : IPHub query timed out after {lookup_timeout} seconds") + raise IPHubQueryFailed("IPHub query timed out") + except Exception as e: + logging.error(f"lookup_address_info : IPHub query failed: {e}") + raise IPHubQueryFailed(f"IPHub query failed: {e}") + +def fetch_address_risk( address : str, skip_cache : bool = False, lookup_timeout : int = 10, fallback_on_exception : bool = True ) -> int: + """ + :param address: The IP address to check + :param skip_cache: Whether to skip the cache and query IPHub directly + :param lookup_timeout: The timeout for the query + :param fallback_on_exception: Whether to return 0 if the query fails + + :return: The risk level of the IP address (0, 1, or 2) + + https://iphub.info/api + + 0 - Residential or business IP (i.e. safe IP) + 1 - Non-residential IP (hosting provider, proxy, etc.) + 2 - Non-residential & residential IP (warning, may flag innocent people) + """ + + try: + LookupResponseJSON: dict = lookup_address_info(address, skip_cache, lookup_timeout) + if LookupResponseJSON.get("is_crawler", True) \ + or LookupResponseJSON.get("is_datacenter", False) \ + or LookupResponseJSON.get("is_tor", False) \ + or LookupResponseJSON.get("is_proxy", False) \ + or LookupResponseJSON.get("is_vpn", False) \ + or LookupResponseJSON.get("is_abuser", False): + return 1 + else: + return + except Exception as e: + if fallback_on_exception: + logging.error(f"fetch_address_risk : Exception raised falling back: {e}") + return 3 # Why would we let them pass???????????? + else: + raise e \ No newline at end of file diff --git a/app/services/user_relationships/followings.py b/app/services/user_relationships/followings.py new file mode 100644 index 0000000..1b0b6f7 --- /dev/null +++ b/app/services/user_relationships/followings.py @@ -0,0 +1,216 @@ +from app.models.follow_relationship import FollowRelationship +from app.models.user import User +from app.extensions import db, redis_controller +from app.util.websiteFeatures import GetWebsiteFeature + +import redis_lock + +class FollowingExceptions(): + class AlreadyFollowing(Exception): + pass + class CannotFollowSelf(Exception): + pass + class RedisLockAcquireError(Exception): + pass + class UserRateLimited(Exception): + pass + class UserNotFollowing(Exception): + pass + class FollowingIsDisabled(Exception): + pass + +def follow_user( + follower_user : User, + followed_user : User, + + bypass_rate_limit : bool = False +) -> None: + """ + :param follower_user : User : The user that is following + :param followed_user : User : The user that is being followed + + :param bypass_rate_limit : bool : Bypass the rate limit check + + :return None + + :raises FollowingExceptions.AlreadyFollowing : The user is already following the other user + :raises FollowingExceptions.CannotFollowSelf : The user cannot follow themselves + :raises FollowingExceptions.UserNotFound : The user is not found + :raises FollowingExceptions.RedisLockAcquireError : The Redis lock cannot be acquired + :raises FollowingExceptions.UserRateLimited : The user is rate limited + :raises FollowingExceptions.FollowingIsDisabled : Following is disabled + """ + + assert isinstance(follower_user, User), f"Expected follower_user to be of type User, got {follower_user.__class__.__name__}" + assert isinstance(followed_user, User), f"Expected followed_user to be of type User, got {followed_user.__class__}" + + if follower_user.id == followed_user.id: + raise FollowingExceptions.CannotFollowSelf + + if GetWebsiteFeature("FollowingUsers") is False: + raise FollowingExceptions.FollowingIsDisabled + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:followings:follow_user:{follower_user.id}", expire = 10 ): + if not bypass_rate_limit: + if redis_controller.get(f"rate_limit:followings:follow_user_action:{follower_user.id}") is not None: + raise FollowingExceptions.UserRateLimited + redis_controller.set(f"rate_limit:followings:follow_user_action:{follower_user.id}", "1", ex = 5) + + if FollowRelationship.query.filter_by(followerUserId = follower_user.id, followeeUserId = followed_user.id).first() is not None: + raise FollowingExceptions.AlreadyFollowing + + follow_relationship = FollowRelationship( + followerUserId = follower_user.id, + followeeUserId = followed_user.id + ) + db.session.add(follow_relationship) + db.session.commit() + + return None + except AssertionError: + raise FollowingExceptions.RedisLockAcquireError + +def unfollow_user( + current_follower : User, + followed_user : User, + + bypass_rate_limit : bool = False +) -> None: + """ + :param current_follower : User : The user that is unfollowing + :param followed_user : User : The user that is being unfollowed + + :param bypass_rate_limit : bool : Bypass the rate limit check + + :return None + + :raises FollowingExceptions.UserNotFollowing : The user is not following the other user + :raises FollowingExceptions.RedisLockAcquireError : The Redis lock cannot be acquired + :raises FollowingExceptions.UserRateLimited : The user is rate limited + """ + + assert isinstance(current_follower, User), f"Expected current_follower to be of type User, got {current_follower.__class__.__name__}" + assert isinstance(followed_user, User), f"Expected followed_user to be of type User, got {followed_user.__class__}" + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:followings:unfollow_user:{current_follower.id}", expire = 10 ): + if not bypass_rate_limit: + if redis_controller.get(f"rate_limit:followings:unfollow_user_action:{current_follower.id}") is not None: + raise FollowingExceptions.UserRateLimited + redis_controller.set(f"rate_limit:followings:unfollow_user_action:{current_follower.id}", "1", ex = 1) + + follow_relationship = FollowRelationship.query.filter_by(followerUserId = current_follower.id, followeeUserId = followed_user.id).first() + if follow_relationship is None: + raise FollowingExceptions.UserNotFollowing + + db.session.delete(follow_relationship) + db.session.commit() + + return None + except AssertionError: + raise FollowingExceptions.RedisLockAcquireError + +def is_following( + follower_user : User, + followed_user : User +) -> bool: + """ + :param follower_user : User : The user that is following + :param followed_user : User : The user that is being followed + + :return bool : Whether the user is following the other user + """ + + assert isinstance(follower_user, User), f"Expected follower_user to be of type User, got {follower_user.__class__.__name__}" + assert isinstance(followed_user, User), f"Expected followed_user to be of type User, got {followed_user.__class__}" + + return FollowRelationship.query.filter_by(followerUserId = follower_user.id, followeeUserId = followed_user.id).first() is not None + +def get_followers( + requested_user : User, + + return_as_query : bool = False +) -> list[User]: + """ + :param requested_user : User : The user that is being requested + :param return_as_query : bool : Whether to return the result as a query or a list + + :return list[User] : The list of users that are following the requested user + """ + + assert isinstance(requested_user, User), f"Expected requested_user to be of type User, got {requested_user.__class__.__name__}" + + FollowersQuery = User.query.join(FollowRelationship, FollowRelationship.followerUserId == User.id).filter(FollowRelationship.followeeUserId == requested_user.id) + if return_as_query: + return FollowersQuery + + return FollowersQuery.all() + +def get_follower_count( + requested_user : User, + + skip_cache : bool = False +) -> int: + """ + :param requested_user : User : The user that is being requested + :param skip_cache : bool : Whether to skip the cache + + :return int : The number of users that are following the requested user + """ + + assert isinstance(requested_user, User), f"Expected requested_user to be of type User, got {requested_user.__class__}" + + if not skip_cache: + CachedFollowerCount = redis_controller.get(f"services:followings:follower_count:{requested_user.id}") + if CachedFollowerCount is not None: + return int(CachedFollowerCount) + + FollowerCount : int = get_followers(requested_user, return_as_query = True).count() + redis_controller.set(f"services:followings:follower_count:{requested_user.id}", FollowerCount, ex = 10) + + return FollowerCount + +def get_following( + requested_user : User, + + return_as_query : bool = False +) -> list[User]: + """ + :param requested_user : User : The user that is being requested + :param return_as_query : bool : Whether to return the result as a query or a list + + :return list[User] : The list of users that the requested user is following + """ + + assert isinstance(requested_user, User), f"Expected requested_user to be of type User, got {requested_user.__class__}" + + FollowingQuery = User.query.join(FollowRelationship, FollowRelationship.followeeUserId == User.id).filter(FollowRelationship.followerUserId == requested_user.id) + if return_as_query: + return FollowingQuery + + return FollowingQuery.all() + +def get_following_count( + requested_user : User, + + skip_cache : bool = False +) -> int: + """ + :param requested_user : User : The user that is being requested + :param skip_cache : bool : Whether to skip the cache + + :return int : The number of users that the requested user is following + """ + + assert isinstance(requested_user, User), f"Expected requested_user to be of type User, got {requested_user.__class__}" + + if not skip_cache: + CachedFollowingCount = redis_controller.get(f"services:followings:following_count:{requested_user.id}") + if CachedFollowingCount is not None: + return int(CachedFollowingCount) + + FollowingCount : int = get_following(requested_user, return_as_query = True).count() + redis_controller.set(f"services:followings:following_count:{requested_user.id}", FollowingCount, ex = 10) + + return FollowingCount \ No newline at end of file diff --git a/app/services/user_relationships/friends.py b/app/services/user_relationships/friends.py new file mode 100644 index 0000000..d626af7 --- /dev/null +++ b/app/services/user_relationships/friends.py @@ -0,0 +1,200 @@ +from app.models.friend_relationship import FriendRelationship +from app.models.friend_request import FriendRequest +from app.models.user import User + +from app.extensions import db, redis_controller + +import redis_lock + +class FriendExceptions(): + class AlreadyFriends(Exception): + pass + class CannotFriendSelf(Exception): + pass + class RedisLockAcquireError(Exception): + pass + class UserRateLimited(Exception): + pass + class UserNotFriends(Exception): + pass + class FriendIsDisabled(Exception): + pass + class RecipientHasTooManyFriends(Exception): + pass + class SenderHasTooManyFriends(Exception): + pass + +def get_friend_count( + user : User +) -> int: + """ + :param user : User : The user + + :return int : The amount of friends the user has + """ + + assert isinstance(user, User), f"Expected user to be of type User, got {user.__class__}" + + return FriendRelationship.query.filter( + (FriendRelationship.user_id == user.id) | (FriendRelationship.friend_id == user.id) + ).count() + +def get_friend_relationship( + user1 : User, + user2 : User +) -> FriendRelationship | None: + """ + :param user1 : User : The first user + :param user2 : User : The second + + :return FriendRelationship | None : The friend relationship or None + """ + + assert isinstance(user1, User), f"Expected user1 to be of type User, got {user1.__class__.__name__}" + assert isinstance(user2, User), f"Expected user2 to be of type User, got {user2.__class__}" + + return FriendRelationship.query.filter( + (FriendRelationship.user_id == user1.id and FriendRelationship.friend_id == user2.id) | + (FriendRelationship.user_id == user2.id and FriendRelationship.friend_id == user1.id) + ).first() + +def create_friend_relationship( + user1 : User, + user2 : User, +) -> FriendRelationship: + """ + :param user1 : User : The first user + :param user2 : User : The second + + :return FriendRelationship : The friend relationship + """ + + assert isinstance(user1, User), f"Expected user1 to be of type User, got {user1.__class__.__name__}" + assert isinstance(user2, User), f"Expected user2 to be of type User, got {user2.__class__}" + + FirstUser = user1 if user1.id < user2.id else user2 + SecondUser = user2 if user1.id < user2.id else user1 + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:friends:create_friend_relationship:{FirstUser.id}:{SecondUser.id}", expire = 10 ): + if get_friend_relationship(user1, user2) is not None: + raise FriendExceptions.AlreadyFriends + + friendRelationship = FriendRelationship( + user_id = user1.id, + friend_id = user2.id + ) + + db.session.add(friendRelationship) + db.session.commit() + + return friendRelationship + except AssertionError: + raise FriendExceptions.RedisLockAcquireError + +def remove_friend_relationship( + user1 : User, + user2 : User +) -> None: + """ + :param user1 : User : The first user + :param user2 : User : The second + + :return None + """ + + assert isinstance(user1, User), f"Expected user1 to be of type User, got {user1.__class__}" + assert isinstance(user2, User), f"Expected user2 to be of type User, got {user2.__class__}" + + FirstUser = user1 if user1.id < user2.id else user2 + SecondUser = user2 if user1.id < user2.id else user1 + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:friends:remove_friend_relationship:{FirstUser.id}:{SecondUser.id}", expire = 10 ): + friendRelationship = get_friend_relationship(user1, user2) + if friendRelationship is None: + raise FriendExceptions.UserNotFriends + + db.session.delete(friendRelationship) + db.session.commit() + + return None + except AssertionError: + raise FriendExceptions.RedisLockAcquireError + +def send_friend_request( + sender_user : User, + recipient_user : User +) -> FriendRequest | FriendRelationship: + """ + :param sender_user : User : The user sending the friend request + :param recipient_user : User : The user receiving the friend request + + :return FriendRequest | FriendRelationship : The friend request or friend relationship if there is already an existing friend request from the recipient user + """ + + assert isinstance(sender_user, User), f"Expected user1 to be of type User, got {sender_user.__class__}" + assert isinstance(recipient_user, User), f"Expected user2 to be of type User, got {recipient_user.__class__}" + + FirstUser = sender_user if sender_user.id < recipient_user.id else recipient_user + SecondUser = recipient_user if sender_user.id < recipient_user.id else sender_user + + try: + with redis_lock.Lock( redis_client = redis_controller, name = f"services:friends:send_friend_request:{FirstUser.id}:{SecondUser.id}", expire = 10 ): + if get_friend_relationship(sender_user, recipient_user) is not None: + raise FriendExceptions.AlreadyFriends + + if sender_user.id == recipient_user.id: + raise FriendExceptions.CannotFriendSelf + + if get_friend_count(recipient_user) >= 200: + raise FriendExceptions.RecipientHasTooManyFriends + if get_friend_count(sender_user) >= 200: + raise FriendExceptions.SenderHasTooManyFriends + + if redis_controller.get(f"rate_limit:friends:send_friend_request:{sender_user.id}") is not None: + raise FriendExceptions.UserRateLimited + redis_controller.set(f"rate_limit:friends:send_friend_request:{sender_user.id}", "1", ex = 3) + + otherFriendRequest = FriendRequest.query.filter_by(requester_id = recipient_user.id, requestee_id = sender_user.id).first() + if otherFriendRequest is not None: + db.session.delete(otherFriendRequest) + db.session.commit() + + return create_friend_relationship( user1 = sender_user, user2 = recipient_user) + + friendRequest = FriendRequest.query.filter_by(requester_id = sender_user.id, requestee_id = recipient_user.id).first() + if friendRequest is not None: + return friendRequest + + friendRequest = FriendRequest( + requester_id = sender_user.id, + requestee_id = recipient_user.id + ) + db.session.add(friendRequest) + db.session.commit() + + return friendRequest + except AssertionError: + raise FriendExceptions.RedisLockAcquireError + +def decline_friend_request( + sender_user : User, + recipient_user : User +) -> None: + """ + :param sender_user : User : The user sending the friend request + :param recipient_user : User : The user receiving the friend request + + :return None + """ + + assert isinstance(sender_user, User), f"Expected user1 to be of type User, got {sender_user.__class__}" + assert isinstance(recipient_user, User), f"Expected user2 to be of type User, got {recipient_user.__class__}" + + friendRequest = FriendRequest.query.filter_by(requester_id = sender_user.id, requestee_id = recipient_user.id).first() + if friendRequest is not None: + db.session.delete(friendRequest) + db.session.commit() + + return None \ No newline at end of file diff --git a/app/shell_commands.py b/app/shell_commands.py new file mode 100644 index 0000000..7fbc335 --- /dev/null +++ b/app/shell_commands.py @@ -0,0 +1,475 @@ +# Commands for flask shell +from app.extensions import db, redis_controller +from app.models.user import User +from app.util import auth +from sqlalchemy import func +import logging +def lookup_user_id(): + """Lookup user by Id""" + try: + UserId : int = int(input("User Lookup by UserId: ")) + if UserId < 0: + raise Exception("UserId must be a positive integer") + except Exception as e: + logging.error(f"Unable to parse user input, please enter a valid integer, error: {e}") + + UserObj : User = User.query.filter_by(id=UserId).first() + if UserObj is None: + logging.error(f"Unable to find user with UserId: {UserId}") + else: + logging.info(f""" +Username : {UserObj.username} +UserId : {UserObj.id} +CreatedOn : {UserObj.created} +LastPing : {UserObj.lastonline} +AccountStatus : {UserObj.accountstatus} +2FA Enabled : {UserObj.TOTPEnabled} + +-- Description -- +{UserObj.description} +-- End Description -- + +""") + +def lookup_user_name(): + """Lookup user by Username""" + try: + Username : str = str(input("User Lookup by Username: ")) + if len(Username) < 1: + raise Exception("Username must be a valid string") + except Exception as e: + logging.error(f"Unable to parse user input, please enter a valid string, error: {e}") + + UserObj : User = User.query.filter(func.lower(User.username) == func.lower(Username)).first() + if UserObj is None: + logging.error(f"Unable to find user with Username: {Username}") + else: + logging.info(f""" +Username : {UserObj.username} +UserId : {UserObj.id} +CreatedOn : {UserObj.created} +LastPing : {UserObj.lastonline} +AccountStatus : {UserObj.accountstatus} +2FA Enabled : {UserObj.TOTPEnabled} + +-- Description -- +{UserObj.description} +-- End Description -- + +""") + +def refund_unused_invite_keys(): + from app.models.invite_key import InviteKey + from app.services.economy import IncrementTargetBalance + from app.util.transactions import CreateTransaction + from app.enums.TransactionType import TransactionType + from app.pages.messages.messages import CreateSystemMessage + + allDistinctInviteKeyCreators : list[User] = User.query.join(InviteKey, User.id == InviteKey.created_by).filter(InviteKey.used_by == None).distinct(User.id).all() + + def process_user_invite_keys( userObj : User ): + AmountOwed : int = 0 + InviteKeysDeleted : int = 0 + + AllInviteKeys : list[InviteKey] = InviteKey.query.filter_by(created_by=userObj.id, used_by=None).all() + for InviteKeyObj in AllInviteKeys: + AmountOwed += 20 + InviteKeysDeleted += 1 + db.session.delete(InviteKeyObj) + db.session.commit() + + if AmountOwed > 0: + IncrementTargetBalance(userObj, AmountOwed, 0) + CreateTransaction( + Reciever = userObj, + Sender = None, + CurrencyAmount = AmountOwed, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = f"Refunded {InviteKeysDeleted} unused invite keys", + ) + CreateSystemMessage( + subject = "Invite Key Refund", + message = f"""Hello {userObj.username}, + This is an automated message to inform you that as invite keys are no longer used on SYNTAX, we have refunded you R$ {AmountOwed} for {InviteKeysDeleted} unused invite keys. Please contact us on our Discord Server if you have any questions. + +Sincerely, +The SYNTAX Team""", + userid = userObj.id + ) + + logging.info(f"Refunded {InviteKeysDeleted} unused invite keys for user {userObj.username}") + + logging.info(f"Found {len(allDistinctInviteKeyCreators)} users with unused invite keys") + for UserObj in allDistinctInviteKeyCreators: + process_user_invite_keys(UserObj) + +def refund_limiteds(): + from app.models.userassets import UserAsset + from app.models.asset import Asset + from app.services.economy import IncrementTargetBalance, GetAssetRap + from app.util.transactions import CreateTransaction + from app.enums.TransactionType import TransactionType + from app.enums.MembershipType import MembershipType + from app.pages.messages.messages import CreateSystemMessage + from app.models.user import User + from app.util.membership import GetUserMembership + import math + + limitedRAPValueLookup : dict[int, int] = {} + refundCapAmount : dict [MembershipType, int] = { + MembershipType.NonBuildersClub : 200, + MembershipType.BuildersClub : 500, + MembershipType.TurboBuildersClub : 750, + MembershipType.OutrageousBuildersClub : 1200 + } + + def _get_limited_rap_value( assetId : int ): + if assetId in limitedRAPValueLookup: + return limitedRAPValueLookup[assetId] + else: + rapValue : int = GetAssetRap(assetId) + limitedRAPValueLookup[assetId] = rapValue + return rapValue + + def refund_user_limiteds( userObj : User ): + WipedAssets : list = [] + AllLimitedUserAssets : list [UserAsset] = UserAsset.query.filter_by(userid=userObj.id).join(Asset, UserAsset.assetid == Asset.id).filter(Asset.is_limited == True).all() + AmountOwed : int = 0 + + for UserAssetObj in AllLimitedUserAssets: + AssetObj : Asset = UserAssetObj.asset + + LimitedRAPValue : int = _get_limited_rap_value(UserAssetObj.assetid) + AssetOriginalPrice : int = AssetObj.price_robux if AssetObj.price_robux > 0 else AssetObj.price_tix + + if ( not AssetObj.price_robux > 0 ) and AssetOriginalPrice > 0: + AssetOriginalPrice = math.floor(AssetOriginalPrice / 10) + + RefundedAmount : int = max(AssetOriginalPrice if AssetOriginalPrice > LimitedRAPValue else LimitedRAPValue, 50) + AmountOwed += RefundedAmount + + WipedAssets.append(f" - {AssetObj.name} [UAID: {UserAssetObj.id} / Serial: {UserAssetObj.serial}] - R$ {RefundedAmount}") + + db.session.delete(UserAssetObj) + db.session.commit() + + ActualAmountOwed = min(AmountOwed, refundCapAmount[GetUserMembership(userObj)]) + + if ActualAmountOwed > 0: + ItemListText : str = "\n".join(WipedAssets) + + IncrementTargetBalance(userObj, ActualAmountOwed, 0) + CreateTransaction( + Reciever = userObj, + Sender = None, + CurrencyAmount = ActualAmountOwed, + CurrencyType = 0, + TransactionType = TransactionType.BuildersClubStipend, + AssetId = None, + CustomText = f"Limited item refund", + ) + + CreateSystemMessage( + subject = "Limited Item Refund", + message = f"""Hello {userObj.username}, + +This is an automated message to inform you that all limited items are being refunded as we are resetting the economy. We have refunded you R$ {ActualAmountOwed} for the following items: +{ItemListText} + +Item Refund Cap: R$ {refundCapAmount[GetUserMembership(userObj)]} +Total Value before Cap: R$ {AmountOwed} + +Refunded Amount: R$ {ActualAmountOwed} + +Please contact us on our Discord Server if you have any questions. + +Sincerely, +The SYNTAX Team""", + userid = userObj.id + ) + + logging.info(f"Refunded {len(AllLimitedUserAssets)} limited items for user {userObj.username}") + + AllUsersWithLimiteds : list[User] = User.query.join(UserAsset, User.id == UserAsset.userid).join(Asset, UserAsset.assetid == Asset.id).filter(Asset.is_limited == True).distinct(User.id).all() + logging.info(f"Found {len(AllUsersWithLimiteds)} users with limiteds") + + for UserObj in AllUsersWithLimiteds: + refund_user_limiteds(UserObj) + +def delete_limited_assets(): + from app.models.asset import Asset + from app.models.asset_version import AssetVersion + from app.models.asset_thumbnail import AssetThumbnail + + # we have to delete these two table first as they have a relationship with Asset + AllLimitedAssetVersions : list[AssetVersion] = AssetVersion.query.join(Asset, AssetVersion.asset_id == Asset.id).filter(Asset.is_limited == True).all() + AllLimitedAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.join(Asset, AssetThumbnail.asset_id == Asset.id).filter(Asset.is_limited == True).all() + + for AssetVersionObj in AllLimitedAssetVersions: + db.session.delete(AssetVersionObj) + for AssetThumbnailObj in AllLimitedAssetThumbnails: + db.session.delete(AssetThumbnailObj) + db.session.commit() + + AllLimitedAssets : list[Asset] = Asset.query.filter_by(is_limited=True).all() + for AssetObj in AllLimitedAssets: + db.session.delete(AssetObj) + + db.session.commit() + +def clear_user_avatar_assets(): + from app.models.user_avatar_asset import UserAvatarAsset + from app.models.asset import Asset + from app.routes.thumbnailer import TakeUserThumbnail + + NeedReRender : list[int] = [] + + AllUserAvatarAssets : list[UserAvatarAsset] = UserAvatarAsset.query.outerjoin(Asset, UserAvatarAsset.asset_id == Asset.id).filter(Asset.id == None).all() + for UserAvatarAssetObj in AllUserAvatarAssets: + if UserAvatarAssetObj.user_id not in NeedReRender: + NeedReRender.append(UserAvatarAssetObj.user_id) + db.session.delete(UserAvatarAssetObj) + + db.session.commit() + + for UserId in NeedReRender: + logging.info(f"Re-rendering avatar for user {UserId}") + TakeUserThumbnail(UserId) + +def clear_bad_transactions(): + from app.models.user_transactions import UserTransaction + from app.models.asset import Asset + + AllBadTransactions : list[UserTransaction] = UserTransaction.query.outerjoin(Asset, UserTransaction.assetId == Asset.id).filter(Asset.id == None).all() + print(f"Found {len(AllBadTransactions)} bad transactions") + + while True: + BatchTransactions : list[UserTransaction] = AllBadTransactions[:1000] + if len(BatchTransactions) == 0: + break + for TransactionObj in BatchTransactions: + db.session.delete(TransactionObj) + db.session.commit() + AllBadTransactions = AllBadTransactions[1000:] + logging.info(f"Deleted 1000 bad transactions, {len(AllBadTransactions)} remaining") + +def delete_asset( asset_id : int ): + from app.models.asset import Asset + from app.models.asset_version import AssetVersion + from app.models.asset_thumbnail import AssetThumbnail + + AllAssetVersions : list[AssetVersion] = AssetVersion.query.filter_by(asset_id=asset_id).all() + AllAssetThumbnails : list[AssetThumbnail] = AssetThumbnail.query.filter_by(asset_id=asset_id).all() + + for AssetVersionObj in AllAssetVersions: + print(f"Deleting asset version {AssetVersionObj.id}") + db.session.delete(AssetVersionObj) + for AssetThumbnailObj in AllAssetThumbnails: + print(f"Deleting asset thumbnail {AssetThumbnailObj.id}") + db.session.delete(AssetThumbnailObj) + + db.session.commit() + + AssetObj : Asset = Asset.query.filter_by(id=asset_id).first() + db.session.delete(AssetObj) + + db.session.commit() + +def create_admin_user(): + """ + ! FIRST TIME SETUP ONLY ! + Creates a user with all admin permissions and a random password + + Note: will raise an exception if User ID 1 already exists + """ + import datetime + import random + import string + from app.models.user import User + from app.models.admin_permissions import AdminPermissions + from app.models.usereconomy import UserEconomy + from app.models.user_avatar import UserAvatar + from app.util.auth import SetPassword + from app.pages.admin.permissionsdefinition import PermissionsDefinition + + if User.query.filter_by(id=1).first() is not None: + raise Exception("User ID 1 already exists") + + NewUser : User = User( + username = "Admin", + password = "", + created = datetime.datetime.utcnow(), + lastonline = datetime.datetime.utcnow() + ) + + db.session.add(NewUser) + db.session.commit() + + NewPassword : str = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(24)) + + SetPassword( + UserObj = NewUser, + password = NewPassword + ) + + UserEconomyObj : UserEconomy = UserEconomy( + userid = NewUser.id, + robux = 0, + tix = 0, + ) + + db.session.add(UserEconomyObj) + + UserAvatarObj : UserAvatar = UserAvatar( + user_id = NewUser.id, + ) + + db.session.add(UserAvatarObj) + + for permission_name in PermissionsDefinition: + permissionObj : AdminPermissions = AdminPermissions( + userid = NewUser.id, + permission = permission_name + ) + db.session.add(permissionObj) + + db.session.commit() + + print(f""" +Successfully created Admin User +Username: Admin +Password: {NewPassword}""") + +def convert_places_to_universes(): + from app.models.asset import Asset + from app.models.place import Place + from app.models.universe import Universe + from app.models.place_datastore import PlaceDatastore + from app.models.place_ordered_datastore import PlaceOrderedDatastore + from app.models.legacy_data_persistence import LegacyDataPersistence + from app.models.place_badge import PlaceBadge + from app.models.gamepass_link import GamepassLink + from app.models.place_developer_product import DeveloperProduct + + AllPlaces : list[Place] = Place.query.filter_by( parent_universe_id = 0 ).order_by(Place.placeid).all() + logging.info(f"convert_places_to_universes > Found {len(AllPlaces)} places to convert") + for PlaceObj in AllPlaces: + PlaceObj : Place + try: + PlaceAssetObj : Asset = Asset.query.filter_by( id = PlaceObj.placeid ).first() + UniverseObj : Universe = Universe( + root_place_id = PlaceObj.placeid, + creator_id = PlaceAssetObj.creator_id, + creator_type = PlaceAssetObj.creator_type, + place_rig_choice = PlaceObj.rig_choice, + place_year = PlaceObj.placeyear, + is_featured = PlaceObj.featured, + minimum_account_age = PlaceObj.min_account_age, + bc_required = PlaceObj.bc_required, + allow_direct_join = False, + is_public = PlaceObj.is_public, + updated_at = PlaceAssetObj.updated_at, + created_at = PlaceAssetObj.created_at + ) + db.session.add(UniverseObj) + db.session.commit() + + logging.info(f"convert_places_to_universes > Created universe {UniverseObj.id} from place {PlaceObj.placeid}") + PlaceObj.parent_universe_id = UniverseObj.id + db.session.commit() + + logging.info(f"convert_places_to_universes > Converting place {PlaceObj.placeid}'s items to universe {UniverseObj.id}") + + db.session.query(PlaceDatastore).filter_by( placeid = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(PlaceOrderedDatastore).filter_by( placeid = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(LegacyDataPersistence).filter_by( placeid = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(PlaceBadge).filter_by( associated_place_id = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(GamepassLink).filter_by( place_id = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + db.session.query(DeveloperProduct).filter_by( placeid = PlaceObj.placeid ).update({"universe_id": UniverseObj.id}) + + db.session.commit() + + logging.info(f"convert_places_to_universes > Successfully converted place {PlaceObj.placeid}'s items to universe {UniverseObj.id}") + except Exception as e: + logging.error(f"convert_places_to_universes > Failed to migrate place {PlaceObj.placeid}, error: {e}") + +def recalculate_universe_visits(): + from app.models.place import Place + from app.models.universe import Universe + + AllUniverses : list[Universe] = Universe.query.all() + logging.info(f"recalculate_universe_visits > Found {len(AllUniverses)} universes to recalculate") + + for UniverseObj in AllUniverses: + try: + UniverseObj : Universe + UniverseObj.visit_count = Place.query.filter_by( parent_universe_id = UniverseObj.id ).with_entities(func.sum(Place.visitcount)).scalar() + db.session.commit() + logging.info(f"recalculate_universe_visits > Successfully recalculated universe {UniverseObj.id}, new visit count: {UniverseObj.visit_count}") + + except Exception as e: + logging.error(f"recalculate_universe_visits > Failed to recalculate universe {UniverseObj.id}, error: {e}") + +def reverse_item_transfer(): + from app.models.limited_item_transfers import LimitedItemTransfer + from app.models.asset import Asset + from app.models.user import User + from app.services.economy import IncrementTargetBalance, DecrementTargetBalance, GetAssetRap + from app.models.asset_rap import AssetRap + from app.models.userassets import UserAsset + import math + from datetime import datetime + from sqlalchemy import and_ + from app.pages.messages.messages import CreateSystemMessage + + def reverse_transfer( ItemTransferRecordObj : LimitedItemTransfer ): + logging.info(f"reverse_item_transfer > Reversing transfer {ItemTransferRecordObj.id}") + RecievingUserObj : User = User.query.filter_by( id = ItemTransferRecordObj.new_owner_id ).first() + SendingUserObj : User = User.query.filter_by( id = ItemTransferRecordObj.original_owner_id ).first() + UserAssetObj : UserAsset = UserAsset.query.filter_by( id = ItemTransferRecordObj.user_asset_id ).first() + + if RecievingUserObj is None or SendingUserObj is None or UserAssetObj is None: + logging.error(f"reverse_item_transfer > Unable to find user or asset for transfer {ItemTransferRecordObj.id}") + return + + AssetObj : Asset = Asset.query.filter_by( id = ItemTransferRecordObj.asset_id ).first() + AssetRapObj : AssetRap = AssetRap.query.filter_by( assetid = AssetObj.id ).first() + CurrentRapValue : int = GetAssetRap( AssetObj ) + ReversedRapValue : int = math.floor( ( ( CurrentRapValue * 10 ) - ItemTransferRecordObj.purchased_price ) / 9 ) + + RobuxGivenToOriginalOwner : int = math.floor( ItemTransferRecordObj.purchased_price * 0.7 ) + + UserAssetObj.userid = ItemTransferRecordObj.original_owner_id + UserAssetObj.updated = datetime.utcnow() + UserAssetObj.is_for_sale = False + AssetRapObj.rap = ReversedRapValue + db.session.commit() + + IncrementTargetBalance( Target = RecievingUserObj, Amount = ItemTransferRecordObj.purchased_price, CurrencyType = 0 ) + DecrementTargetBalance( Target = SendingUserObj, Amount = RobuxGivenToOriginalOwner, CurrencyType = 0 ) + + CreateSystemMessage( subject = "Item Transfer Reversed", message = f"""Hello {RecievingUserObj.username}, +This is an automated message to inform you that a recent item transfer has been reversed. You have been refunded R$ {ItemTransferRecordObj.purchased_price} for the item {AssetObj.name} which has been taken from your inventory. +Please contact us on our Discord Server if you have any questions. + +Sincerely, +The SYNTAX Team""", userid = RecievingUserObj.id ) + + CreateSystemMessage( subject = "Item Transfer Reversed", message = f"""Hello {SendingUserObj.username}, +This is an automated message to inform you that a recent item transfer has been reversed. R$ {RobuxGivenToOriginalOwner} has been taken from your account and your item ( {AssetObj.name} ) has been returned to your inventory. +Please contact us on our Discord Server if you have any questions. + +Sincerely, +The SYNTAX Team""", userid = SendingUserObj.id ) + + logging.info(f"reverse_item_transfer > Successfully reversed transfer {ItemTransferRecordObj.id} - R$ {ItemTransferRecordObj.purchased_price} given to {RecievingUserObj.username}, R$ {RobuxGivenToOriginalOwner} taken from {SendingUserObj.username}") + logging.info(f"reverse_item_transfer > New RAP value for asset {AssetObj.id}: {CurrentRapValue} -> {ReversedRapValue}") + + FradulentTransfers : list[LimitedItemTransfer] = LimitedItemTransfer.query.filter(and_( LimitedItemTransfer.id > 453, LimitedItemTransfer.id < 472 )).order_by(LimitedItemTransfer.id.desc()).all() + logging.info(f"reverse_item_transfer > Found {len(FradulentTransfers)} fradulent transfers to reverse") + + for TransferObj in FradulentTransfers: + reverse_transfer( TransferObj ) + diff --git a/app/static/avatarrules.json b/app/static/avatarrules.json new file mode 100644 index 0000000..3fb2a46 --- /dev/null +++ b/app/static/avatarrules.json @@ -0,0 +1,553 @@ +{ + "wearableAssetTypes": [ + { + "maxNumber": 5, + "id": 8, + "name": "Hat" + }, + { + "maxNumber": 5, + "id": 41, + "name": "Hair Accessory" + }, + { + "maxNumber": 5, + "id": 42, + "name": "Face Accessory" + }, + { + "maxNumber": 1, + "id": 43, + "name": "Neck Accessory" + }, + { + "maxNumber": 1, + "id": 44, + "name": "Shoulder Accessory" + }, + { + "maxNumber": 1, + "id": 45, + "name": "Front Accessory" + }, + { + "maxNumber": 1, + "id": 46, + "name": "Back Accessory" + }, + { + "maxNumber": 1, + "id": 47, + "name": "Waist Accessory" + }, + { + "maxNumber": 1, + "id": 18, + "name": "Face" + }, + { + "maxNumber": 1, + "id": 19, + "name": "Gear" + }, + { + "maxNumber": 1, + "id": 17, + "name": "Head" + }, + { + "maxNumber": 1, + "id": 29, + "name": "Left Arm" + }, + { + "maxNumber": 1, + "id": 30, + "name": "Left Leg" + }, + { + "maxNumber": 1, + "id": 12, + "name": "Pants" + }, + { + "maxNumber": 1, + "id": 28, + "name": "Right Arm" + }, + { + "maxNumber": 1, + "id": 31, + "name": "Right Leg" + }, + { + "maxNumber": 1, + "id": 11, + "name": "Shirt" + }, + { + "maxNumber": 1, + "id": 2, + "name": "T-Shirt" + }, + { + "maxNumber": 1, + "id": 27, + "name": "Torso" + }, + { + "maxNumber": 1, + "id": 48, + "name": "Climb Animation" + }, + { + "maxNumber": 1, + "id": 49, + "name": "Death Animation" + }, + { + "maxNumber": 1, + "id": 50, + "name": "Fall Animation" + }, + { + "maxNumber": 1, + "id": 51, + "name": "Idle Animation" + }, + { + "maxNumber": 1, + "id": 52, + "name": "Jump Animation" + }, + { + "maxNumber": 1, + "id": 53, + "name": "Run Animation" + }, + { + "maxNumber": 1, + "id": 54, + "name": "Swim Animation" + }, + { + "maxNumber": 1, + "id": 55, + "name": "Walk Animation" + }, + { + "maxNumber": 1, + "id": 56, + "name": "Pose Animation" + }, + { + "maxNumber": 0, + "id": 61, + "name": "Emote Animation" + } + ], + "bodyColorsPalette": [ + { + "brickColorId": 361, + "hexColor": "#564236", + "name": "Dirt brown" + }, + { + "brickColorId": 192, + "hexColor": "#694028", + "name": "Reddish brown" + }, + { + "brickColorId": 217, + "hexColor": "#7C5C46", + "name": "Brown" + }, + { + "brickColorId": 153, + "hexColor": "#957977", + "name": "Sand red" + }, + { + "brickColorId": 359, + "hexColor": "#AF9483", + "name": "Linen" + }, + { + "brickColorId": 352, + "hexColor": "#C7AC78", + "name": "Burlap" + }, + { + "brickColorId": 5, + "hexColor": "#D7C59A", + "name": "Brick yellow" + }, + { + "brickColorId": 101, + "hexColor": "#DA867A", + "name": "Medium red" + }, + { + "brickColorId": 1007, + "hexColor": "#A34B4B", + "name": "Dusty Rose" + }, + { + "brickColorId": 1014, + "hexColor": "#AA5500", + "name": "CGA brown" + }, + { + "brickColorId": 38, + "hexColor": "#A05F35", + "name": "Dark orange" + }, + { + "brickColorId": 18, + "hexColor": "#CC8E69", + "name": "Nougat" + }, + { + "brickColorId": 125, + "hexColor": "#EAB892", + "name": "Light orange" + }, + { + "brickColorId": 1030, + "hexColor": "#FFCC99", + "name": "Pastel brown" + }, + { + "brickColorId": 133, + "hexColor": "#D5733D", + "name": "Neon orange" + }, + { + "brickColorId": 106, + "hexColor": "#DA8541", + "name": "Bright orange" + }, + { + "brickColorId": 105, + "hexColor": "#E29B40", + "name": "Br. yellowish orange" + }, + { + "brickColorId": 1017, + "hexColor": "#FFAF00", + "name": "Deep orange" + }, + { + "brickColorId": 24, + "hexColor": "#F5CD30", + "name": "Bright yellow" + }, + { + "brickColorId": 334, + "hexColor": "#F8D96D", + "name": "Daisy orange" + }, + { + "brickColorId": 226, + "hexColor": "#FDEA8D", + "name": "Cool yellow" + }, + { + "brickColorId": 141, + "hexColor": "#27462D", + "name": "Earth green" + }, + { + "brickColorId": 1021, + "hexColor": "#3A7D15", + "name": "Camo" + }, + { + "brickColorId": 28, + "hexColor": "#287F47", + "name": "Dark green" + }, + { + "brickColorId": 37, + "hexColor": "#4B974B", + "name": "Bright green" + }, + { + "brickColorId": 310, + "hexColor": "#5B9A4C", + "name": "Shamrock" + }, + { + "brickColorId": 317, + "hexColor": "#7C9C6B", + "name": "Moss" + }, + { + "brickColorId": 119, + "hexColor": "#A4BD47", + "name": "Br. yellowish green" + }, + { + "brickColorId": 1011, + "hexColor": "#002060", + "name": "Navy blue" + }, + { + "brickColorId": 1012, + "hexColor": "#2154B9", + "name": "Deep blue" + }, + { + "brickColorId": 1010, + "hexColor": "#0000FF", + "name": "Really blue" + }, + { + "brickColorId": 23, + "hexColor": "#0D69AC", + "name": "Bright blue" + }, + { + "brickColorId": 305, + "hexColor": "#527CAE", + "name": "Steel blue" + }, + { + "brickColorId": 102, + "hexColor": "#6E99CA", + "name": "Medium blue" + }, + { + "brickColorId": 45, + "hexColor": "#B4D2E4", + "name": "Light blue" + }, + { + "brickColorId": 107, + "hexColor": "#008F9C", + "name": "Bright bluish green" + }, + { + "brickColorId": 1018, + "hexColor": "#12EED4", + "name": "Teal" + }, + { + "brickColorId": 1027, + "hexColor": "#9FF3E9", + "name": "Pastel blue-green" + }, + { + "brickColorId": 1019, + "hexColor": "#00FFFF", + "name": "Toothpaste" + }, + { + "brickColorId": 1013, + "hexColor": "#04AFEC", + "name": "Cyan" + }, + { + "brickColorId": 11, + "hexColor": "#80BBDC", + "name": "Pastel Blue" + }, + { + "brickColorId": 1024, + "hexColor": "#AFDDFF", + "name": "Pastel light blue" + }, + { + "brickColorId": 104, + "hexColor": "#6B327C", + "name": "Bright violet" + }, + { + "brickColorId": 1023, + "hexColor": "#8C5B9F", + "name": "Lavender" + }, + { + "brickColorId": 321, + "hexColor": "#A75E9B", + "name": "Lilac" + }, + { + "brickColorId": 1015, + "hexColor": "#AA00AA", + "name": "Magenta" + }, + { + "brickColorId": 1031, + "hexColor": "#6225D1", + "name": "Royal purple" + }, + { + "brickColorId": 1006, + "hexColor": "#B480FF", + "name": "Alder" + }, + { + "brickColorId": 1026, + "hexColor": "#B1A7FF", + "name": "Pastel violet" + }, + { + "brickColorId": 21, + "hexColor": "#C4281C", + "name": "Bright red" + }, + { + "brickColorId": 1004, + "hexColor": "#FF0000", + "name": "Really red" + }, + { + "brickColorId": 1032, + "hexColor": "#FF00BF", + "name": "Hot pink" + }, + { + "brickColorId": 1016, + "hexColor": "#FF66CC", + "name": "Pink" + }, + { + "brickColorId": 330, + "hexColor": "#FF98DC", + "name": "Carnation pink" + }, + { + "brickColorId": 9, + "hexColor": "#E8BAC8", + "name": "Light reddish violet" + }, + { + "brickColorId": 1025, + "hexColor": "#FFC9C9", + "name": "Pastel orange" + }, + { + "brickColorId": 364, + "hexColor": "#5A4C42", + "name": "Dark taupe" + }, + { + "brickColorId": 351, + "hexColor": "#BC9B5D", + "name": "Cork" + }, + { + "brickColorId": 1008, + "hexColor": "#C1BE42", + "name": "Olive" + }, + { + "brickColorId": 29, + "hexColor": "#A1C48C", + "name": "Medium green" + }, + { + "brickColorId": 1022, + "hexColor": "#7F8E64", + "name": "Grime" + }, + { + "brickColorId": 151, + "hexColor": "#789082", + "name": "Sand green" + }, + { + "brickColorId": 135, + "hexColor": "#74869D", + "name": "Sand blue" + }, + { + "brickColorId": 1020, + "hexColor": "#00FF00", + "name": "Lime green" + }, + { + "brickColorId": 1028, + "hexColor": "#CCFFCC", + "name": "Pastel green" + }, + { + "brickColorId": 1009, + "hexColor": "#FFFF00", + "name": "New Yeller" + }, + { + "brickColorId": 1029, + "hexColor": "#FFFFCC", + "name": "Pastel yellow" + }, + { + "brickColorId": 1003, + "hexColor": "#111111", + "name": "Really black" + }, + { + "brickColorId": 26, + "hexColor": "#1B2A35", + "name": "Black" + }, + { + "brickColorId": 199, + "hexColor": "#635F62", + "name": "Dark stone grey" + }, + { + "brickColorId": 194, + "hexColor": "#A3A2A5", + "name": "Medium stone grey" + }, + { + "brickColorId": 1002, + "hexColor": "#CDCDCD", + "name": "Mid gray" + }, + { + "brickColorId": 208, + "hexColor": "#E5E4DF", + "name": "Light stone grey" + }, + { + "brickColorId": 1, + "hexColor": "#F2F3F3", + "name": "White" + }, + { + "brickColorId": 1001, + "hexColor": "#F8F8F8", + "name": "Institutional white" + } + ], + "scales": { + "height": { + "min": 0.9, + "max": 1.05, + "increment": 0.01 + }, + "width": { + "min": 0.7, + "max": 1, + "increment": 0.01 + }, + "head": { + "min": 0.95, + "max": 1, + "increment": 0.01 + }, + "proportion": { + "min": 0, + "max": 1, + "increment": 0.01 + }, + "bodyType": { + "min": 0, + "max": 1, + "increment": 0.01 + } + } +} \ No newline at end of file diff --git a/app/static/css/admin.css b/app/static/css/admin.css new file mode 100644 index 0000000..1964525 --- /dev/null +++ b/app/static/css/admin.css @@ -0,0 +1,48 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.container a { + color: #fff; + text-decoration: none; +} + +.admin-box { + transition: 0.2s; + background-color: rgb(27, 27, 27); + /* drop shadow*/ + box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); +} +.admin-box p { + color: rgb(200,200,200); +} + +.admin-box:hover { + transform: scale(1.05); +} + +.gameserver-box { + transition: 0.2s; + border: 1px solid rgb(60,60,60) !important; +} +.greenborder { + border-color: rgb(0, 199, 0) !important; +} +.redborder { + border-color: rgb(199, 0, 0) !important; +} +.yellowborder { + border-color: rgb(199, 199, 0) !important; +} + +.gameserver-box:hover { + transform: scale(1.015); +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} \ No newline at end of file diff --git a/app/static/css/avatar.css b/app/static/css/avatar.css new file mode 100644 index 0000000..71ae58c --- /dev/null +++ b/app/static/css/avatar.css @@ -0,0 +1,100 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 40px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.head { + width: 60px; + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 60px; + margin: 0 auto; + display: block; + border-radius: 5px; +} +.torso { + width: 120px; + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + margin-top: 10px; + border-radius: 5px; +} +.leftArm { + width: 50px; + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + z-index: 99; + margin-left: -60px; + border-radius: 5px; +} +.rightArm { + width: 50px; + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin: 0 auto; + display: block; + z-index: 99; + margin-left: 130px; + border-radius: 5px; + margin-top: -120px; +} +.legs { + width: 120px; + height: 100%; + margin: 10px auto 0 auto; + display: block; +} +.leftLeg { + float: left; + width: calc(50% - 10px); + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin-right: 10px; + border-radius: 5px; +} +.rightLeg { + float: right; + width: calc(50% - 10px); + border: 1px solid rgb(60,60,60); + cursor: pointer; + height: 120px; + margin-left: 10px; + border-radius: 5px; +} + +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgb(27, 27, 27); /* Adjust the opacity and color as needed */ + z-index: 9999; /* Make sure the overlay is above other elements */ + border-radius: 5px; + overflow-y: scroll; + overflow-x: hidden; +} + +.color-picker-item { + border-radius: 50%; + border: 1px solid rgb(60,60,60); + width: 30px; + height: 30px; + margin: 2px; + cursor: pointer; +} \ No newline at end of file diff --git a/app/static/css/bootstrapv3.min.css b/app/static/css/bootstrapv3.min.css new file mode 100644 index 0000000..ed3905e --- /dev/null +++ b/app/static/css/bootstrapv3.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{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 #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.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-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-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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.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{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.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{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.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{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-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-image:-o-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-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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-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-image:-o-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-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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-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-image:-o-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-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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-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-image:-o-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-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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-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-image:-o-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-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)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.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-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/app/static/css/catalog.css b/app/static/css/catalog.css new file mode 100644 index 0000000..cf3753b --- /dev/null +++ b/app/static/css/catalog.css @@ -0,0 +1,11 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} \ No newline at end of file diff --git a/app/static/css/develop.css b/app/static/css/develop.css new file mode 100644 index 0000000..3ce1f4d --- /dev/null +++ b/app/static/css/develop.css @@ -0,0 +1,15 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.text-secondary { + color: rgb(199,199,199) !important; +} \ No newline at end of file diff --git a/app/static/css/gameview.css b/app/static/css/gameview.css new file mode 100644 index 0000000..ad67c09 --- /dev/null +++ b/app/static/css/gameview.css @@ -0,0 +1,135 @@ +.text-secondary { + color: rgb(199, 199, 199) !important; +} +.nav-link { + color: rgb(199, 199, 199) !important; +} +.nav-link.active { + color: rgb(255, 255, 255) !important; +} +.details-container h2 { + font-size: 29px; + font-weight: 500; +} +.details-container p { + font-size: 12px; +} +.redBg { + background: #CE645B; + width: 100%; + height: 5px; +} + +.greenBg { + background: #52A846; + height: 5px; +} + +.borderLeft { + border-left: 1px solid #c3c3c3; +} + +.thumbsText { + font-size: 12px; +} + +.usersVote { + padding: 0 28px; + height: 30px; + position: relative; + max-width: 300px; + width: 70%; + display: block; + float: right; + margin-top: .5rem; + margin-right: auto; + margin-left: auto; +} + +.upvote { + left: 0; + position: absolute; + top: -3px; + right: 0; +} + +.downvote { + right: 0; + position: absolute; + top: -3px; +} + +.votedetails { + display: block; + width: 100%; +} + +.votecontainer { + width: 100%; + height: 6px; + margin: 6px 0 0 0; + position: relative; + display: block; +} + +.votenumbers { + display: block; +} + +.votebackground { + background-color: #E27676; + width: 100%; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 2px; +} + +.votepercentage { + background-color: #02b757; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: 2px; +} + +.segment { + background-color: rgba(20, 20, 20, 0.3); + height: 6px; + width: 2px; + position: absolute; + top: 0; +} + +.countleft { + float: left; + color: rgb(200, 200, 200); +} + +.countright { + float: right; + color: rgb(200, 200, 200); + text-align: right; +} +.cursor-pointer { + cursor: pointer; +} +.vote-up-text { + color: #02b757; +} +.vote-down-text { + color: #E27676; +} +.text-favorite { + color: #F6B702; + font-size: 16px; + font-weight: 400; +} +.favorite-button-container { + float: left; + margin-left: 10px; + width: 15%; + cursor: pointer; +} \ No newline at end of file diff --git a/app/static/css/global.css b/app/static/css/global.css new file mode 100644 index 0000000..7bec38d --- /dev/null +++ b/app/static/css/global.css @@ -0,0 +1,423 @@ +body { + --bs-body-bg: rgb(20,20,20) !important; + --bs-heading-color: #fff !important; +} + +.linebreak { + width: 100%; + border-bottom: 1px solid rgb(60,60,60); + margin: 10px 0; + height: 1px; +} + +.place-card { + background-color: rgb(30,30,30); + min-height: 220px; + transition: 0.2s; + width: 150px; + border-radius: 3px; + box-shadow: 0 0 5px rgb(0,0,0); +} + +.place-card h5 { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.place-card:hover { + transform: 0.2s; + transform: scale(1.05); +} + +.place-card .votePercentageBackground { + background-color: rgb(49,49,49); + z-index: 1; + height: 10px; + border-radius: 4px; + overflow: hidden; + position: relative; + border: 1px solid rgb(27,27,27); + margin-top: 3px; +} + +.place-card .votePercentageFill { + background-color: rgb(85,85,85); + height: 10px; +} + +.place-card .segment { + background-color: rgb(27, 27, 27); + height: 10px; + width: 2px; + position: absolute; + top: 0; + z-index: 3; +} + +#websitewidemessage { + background-color: rgb(255, 136, 0); +} + +#websitewidemessage p { + margin: 0; + padding: 0; + font-weight: 500; + font-size: 1rem; + text-align: center; +} + +#websitewidemessage a { + text-decoration: underline !important; + color: rgb(0, 140, 255) !important; + font-weight: 400 !important; + transition: 0.2s; +} + +.navbar { + background-color: rgb(30,30,30); + border-bottom: 1px solid rgb(90,90,90); +} + +.navbar-brand h1 { + font-size: 2rem; + margin-bottom: 0; + font-weight: 700; + text-align: center; +} + +#footer { + border-top: 1px solid rgb(90,90,90); + background-color: rgb(30,30,30); + min-height: 100px; +} + +#footerlist a { + display: flex; + width: 100%; + text-decoration: none !important; + color: rgb(160, 160, 160) !important; + font-weight: 400 !important; + transition: 0.2s; +} + +#currencydiv span { + margin-left: 4px; + font-size: 1.25rem; + font-weight: 400; + color: rgb(255,255,255); + min-width: 28px; +} + +.text-secondary { + color: rgb(170,170,170) !important; +} + +.rbx-icon-default-navigation,.rbx-icon-nav-menu,.rbx-icon-nav-robux,.rbx-icon-nav-tix,.rbx-icon-nav-settings,.rbx-icon-nav-search,.rbx-icon-nav-home,.rbx-icon-nav-profile,.rbx-icon-nav-message,.rbx-icon-nav-friends,.rbx-icon-nav-charactercustomizer,.rbx-icon-nav-inventory,.rbx-icon-nav-trade,.rbx-icon-nav-group,.rbx-icon-nav-forum,.rbx-icon-nav-blog,.rbx-icon-nav-search-white,.rbx-icon-nav-shop { + background-image: url(/static/svg/navigation.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; +} + +.rbx-icon-nav-menu { + background-position: 0 0; +} + +.rbx-icon-nav-menu:hover { + background-position: -28px 0; +} + +button:hover .rbx-icon-nav-menu,a:hover .rbx-icon-nav-menu { + background-position: -28px 0; +} + +.rbx-icon-nav-robux { + background-position: 0 -28px; +} + +.rbx-icon-nav-robux:hover { + background-position: -28px -28px; +} + +button:hover .rbx-icon-nav-robux,a:hover .rbx-icon-nav-robux { + background-position: -28px -28px; +} + +.rbx-icon-nav-tix { + background-position: 0 -56px; +} + +.rbx-icon-nav-tix:hover { + background-position: -28px -56px; +} + +button:hover .rbx-icon-nav-tix,a:hover .rbx-icon-nav-tix { + background-position: -28px -56px; +} + +.rbx-icon-nav-settings { + background-position: 0 -84px; +} + +.rbx-icon-nav-settings:hover { + background-position: -28px -84px; +} + +button:hover .rbx-icon-nav-settings,a:hover .rbx-icon-nav-settings { + background-position: -28px -84px; +} + +.rbx-icon-nav-search { + background-position: 0 -112px; +} + +.rbx-icon-nav-search:hover { + background-position: -28px -112px; +} + +button:hover .rbx-icon-nav-search,a:hover .rbx-icon-nav-search { + background-position: -28px -112px; +} + +.rbx-icon-nav-home { + background-position: 0 -140px; +} + +.rbx-icon-nav-home:hover { + background-position: -28px -140px; +} + +button:hover .rbx-icon-nav-home,a:hover .rbx-icon-nav-home { + background-position: -28px -140px; +} + +.rbx-icon-nav-profile { + background-position: 0 -168px; +} + +.rbx-icon-nav-profile:hover { + background-position: -28px -168px; +} + +button:hover .rbx-icon-nav-profile,a:hover .rbx-icon-nav-profile { + background-position: -28px -168px; +} + +.rbx-icon-nav-message { + background-position: 0 -196px; +} + +.rbx-icon-nav-message:hover { + background-position: -28px -196px; +} + +button:hover .rbx-icon-nav-message,a:hover .rbx-icon-nav-message { + background-position: -28px -196px; +} + +.rbx-icon-nav-friends { + background-position: 0 -224px; +} + +.rbx-icon-nav-friends:hover { + background-position: -28px -224px; +} + +button:hover .rbx-icon-nav-friends,a:hover .rbx-icon-nav-friends { + background-position: -28px -224px; +} + +.rbx-icon-nav-charactercustomizer { + background-position: 0 -252px; +} + +.rbx-icon-nav-charactercustomizer:hover { + background-position: -28px -252px; +} + +button:hover .rbx-icon-nav-charactercustomizer,a:hover .rbx-icon-nav-charactercustomizer { + background-position: -28px -252px; +} + +.rbx-icon-nav-inventory { + background-position: 0 -280px; +} + +.rbx-icon-nav-inventory:hover { + background-position: -28px -280px; +} + +button:hover .rbx-icon-nav-inventory,a:hover .rbx-icon-nav-inventory { + background-position: -28px -280px; +} + +.rbx-icon-nav-trade { + background-position: 0 -308px; +} + +.rbx-icon-nav-trade:hover { + background-position: -28px -308px; +} + +button:hover .rbx-icon-nav-trade,a:hover .rbx-icon-nav-trade { + background-position: -28px -308px; +} + +.rbx-icon-nav-group { + background-position: 0 -336px; +} + +.rbx-icon-nav-group:hover { + background-position: -28px -336px; +} + +button:hover .rbx-icon-nav-group,a:hover .rbx-icon-nav-group { + background-position: -28px -336px; +} + +.rbx-icon-nav-forum { + background-position: 0 -364px; +} + +.rbx-icon-nav-forum:hover { + background-position: -28px -364px; +} + +button:hover .rbx-icon-nav-forum,a:hover .rbx-icon-nav-forum { + background-position: -28px -364px; +} + +.rbx-icon-nav-blog { + background-position: 0 -392px; +} + +.rbx-icon-nav-blog:hover { + background-position: -28px -392px; +} + +button:hover .rbx-icon-nav-blog,a:hover .rbx-icon-nav-blog { + background-position: -28px -392px; +} + +.rbx-icon-nav-search-white { + background-position: 0 -420px; +} + +.rbx-icon-nav-search-white:hover { + background-position: -28px -420px; +} + +button:hover .rbx-icon-nav-search-white,a:hover .rbx-icon-nav-search-white { + background-position: -28px -420px; +} + +.rbx-icon-nav-shop { + background-position: 0 -448px; +} + +.rbx-icon-nav-shop:hover { + background-position: -28px -448px; +} + +button:hover .rbx-icon-nav-shop,a:hover .rbx-icon-nav-shop { + background-position: -28px -448px; +} + +.rbx-icon-default-bc,.rbx-icon-bc,.rbx-icon-tbc,.rbx-icon-obc, .rbx-icon-negative-bc, .rbx-icon-negative-tbc, .rbx-icon-negative-obc{ + background-image: url(/static/img/Style/bc.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 52px; + height: 28px; + display: inline-block; +} + +.rbx-icon-default-iconlabels,.rbx-icon-bc-label,.rbx-icon-tbc-label,.rbx-icon-obc-label,.rbx-icon-limited-label,.rbx-icon-limited-bc-label,.rbx-icon-limited-tbc-label,.rbx-icon-limited-obc-label,.rbx-icon-limited-unique-label,.rbx-icon-limited-unique-bc-label,.rbx-icon-limited-unique-tbc-label,.rbx-icon-limited-unique-obc-label { + background-image: url(/static/img/Style/icon_labels.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 110px; + height: 18px; + display: inline-block; +} + +.rbx-icon-bc { + background-position: 0 0; +} + +.rbx-icon-tbc { + background-position: 0 -28px; +} + +.rbx-icon-obc { + background-position: 0 -56px; +} + +.rbx-icon-negative-bc { + background-position: -52px 0; +} + +.rbx-icon-negative-tbc { + background-position: -52px -28px; +} + +.rbx-icon-negative-obc { + background-position: -52px -56px; +} + +.rbx-icon-bc-label { + width: 30px; + background-position: 0 0; +} + +.rbx-icon-tbc-label { + width: 40px; + background-position: 0 -18px; +} + +.rbx-icon-obc-label { + width: 40px; + background-position: 0 -36px; +} + +.rbx-icon-limited-label { + width: 60px; + background-position: 0 -54px; +} + +.rbx-icon-limited-bc-label { + width: 90px; + background-position: 0 -72px; +} + +.rbx-icon-limited-tbc-label { + width: 90px; + background-position: 0 -90px; +} + +.rbx-icon-limited-obc-label { + width: 90px; + background-position: 0 -108px; +} + +.rbx-icon-limited-unique-label { + width: 80px; + background-position: 0 -126px; +} + +.rbx-icon-limited-unique-bc-label { + width: 100px; + background-position: 0 -144px; +} + +.rbx-icon-limited-unique-tbc-label { + width: 110px; + background-position: 0 -162px; +} + +.rbx-icon-limited-unique-obc-label { + background-position: 0 -180px; +} \ No newline at end of file diff --git a/app/static/css/home.css b/app/static/css/home.css new file mode 100644 index 0000000..298442b --- /dev/null +++ b/app/static/css/home.css @@ -0,0 +1,37 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.card-container { + background-color: rgb(30,30,30) !important; + box-shadow: 0 0 10px 0 rgba(0,0,0,0.2); + border-radius: 5px; +} + +.status-icon { + position: absolute; + bottom : -8px; + right: -8px; + width: 20px; + height: 20px; + border-radius: 50%; + background-color: rgb(0, 139, 219); + border: 2px solid rgb(30,30,30); +} + +.status-icon-green { + background-color: rgb(15, 211, 80) !important; +} + +.image-container { + position: relative; + display: table; + margin: 0 auto; + +} + +.text-secondary { + color: rgb(180, 180, 180) !important; +} \ No newline at end of file diff --git a/app/static/css/icons.css b/app/static/css/icons.css new file mode 100644 index 0000000..0b9581e --- /dev/null +++ b/app/static/css/icons.css @@ -0,0 +1,1549 @@ +/* + FILE ARCHIVED ON 20:10:15 Mar 23, 2016 AND RETRIEVED FROM THE + INTERNET ARCHIVE ON 16:20:56 Aug 07, 2021. + JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. + + ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. + SECTION 108(a)(3)). +*/ +.icon-default-navigation, +.icon-nav-menu, +.icon-nav-robux, +.icon-nav-tix, +.icon-nav-settings, +.icon-nav-search, +.icon-nav-home, +.icon-nav-profile, +.icon-nav-message, +.icon-nav-friends, +.icon-nav-charactercustomizer, +.icon-nav-inventory, +.icon-nav-trade, +.icon-nav-group, +.icon-nav-forum, +.icon-nav-blog, +.icon-nav-search-white, +.icon-nav-shop { + background-image: url('/static/img/navigation_02012016.svg'); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.dark-icon { + background-image: url('/static/img/navigation_02012016-dark.svg') !important; +} + +.icon-nav-menu { + background-position: 0 0; +} + +.icon-nav-menu:hover { + background-position: -28px 0; +} + +button:hover .icon-nav-menu, +a:hover .icon-nav-menu { + background-position: -28px 0; +} + +.icon-nav-robux { + background-position: 0 -28px; +} + +.icon-nav-robux:hover { + background-position: -28px -28px; +} + +button:hover .icon-nav-robux, +a:hover .icon-nav-robux { + background-position: -28px -28px; +} + +.icon-nav-tix { + background-position: 0 -56px; +} + +.icon-nav-tix:hover { + background-position: -28px -56px; +} + +button:hover .icon-nav-tix, +a:hover .icon-nav-tix { + background-position: -28px -56px; +} + +.icon-nav-settings { + background-position: 0 -84px; +} + +.icon-nav-settings:hover { + background-position: -28px -84px; +} + +button:hover .icon-nav-settings, +a:hover .icon-nav-settings { + background-position: -28px -84px; +} + +.icon-nav-search { + background-position: 0 -112px; +} + +.icon-nav-search:hover { + background-position: -28px -112px; +} + +button:hover .icon-nav-search, +a:hover .icon-nav-search { + background-position: -28px -112px; +} + +.icon-nav-home { + background-position: 0 -140px; +} + +.hover-icon-nav-home:hover { + color: #02b757; +} + +.icon-nav-home:hover { + background-position: -28px -140px; +} + +button:hover .icon-nav-home, +a:hover .icon-nav-home { + background-position: -28px -140px; +} + +.icon-nav-profile { + background-position: 0 -168px; +} + +.hover-icon-nav-profile:hover { + color: #f68802; +} + +.icon-nav-profile:hover { + background-position: -28px -168px; +} + +button:hover .icon-nav-profile, +a:hover .icon-nav-profile { + background-position: -28px -168px; +} + +.icon-nav-message { + background-position: 0 -196px; +} + +.icon-nav-message:hover { + background-position: -28px -196px; +} + +button:hover .icon-nav-message, +a:hover .icon-nav-message { + background-position: -28px -196px; +} + +.icon-nav-friends { + background-position: 0 -224px; +} + +.icon-nav-friends:hover { + background-position: -28px -224px; +} + +button:hover .icon-nav-friends, +a:hover .icon-nav-friends { + background-position: -28px -224px; +} + +.icon-nav-charactercustomizer { + background-position: 0 -252px; +} + +.icon-nav-charactercustomizer:hover { + background-position: -28px -252px; +} + +.hover-icon-nav-charactercustomizer:hover { + color: #f68802; +} + +button:hover .icon-nav-charactercustomizer, +a:hover .icon-nav-charactercustomizer { + background-position: -28px -252px; +} + +.icon-nav-inventory { + background-position: 0 -280px; +} + +.hover-icon-nav-inventory:hover { + color: #02b757; +} + +.icon-nav-inventory:hover { + background-position: -28px -280px; +} + +button:hover .icon-nav-inventory, +a:hover .icon-nav-inventory { + background-position: -28px -280px; +} + +.icon-nav-trade { + background-position: 0 -308px; +} + +.icon-nav-trade:hover { + background-position: -28px -308px; +} + +button:hover .icon-nav-trade, +a:hover .icon-nav-trade { + background-position: -28px -308px; +} + +.icon-nav-group { + background-position: 0 -336px; +} + +.icon-nav-group:hover { + background-position: -28px -336px; +} + +button:hover .icon-nav-group, +a:hover .icon-nav-group { + background-position: -28px -336px; +} + +.icon-nav-forum { + background-position: 0 -364px; +} + +.icon-nav-forum:hover { + background-position: -28px -364px; +} + +button:hover .icon-nav-forum, +a:hover .icon-nav-forum { + background-position: -28px -364px; +} + +.icon-nav-blog { + background-position: 0 -392px; +} + +.icon-nav-blog:hover { + background-position: -28px -392px; +} + +button:hover .icon-nav-blog, +a:hover .icon-nav-blog { + background-position: -28px -392px; +} + +.icon-nav-search-white { + background-position: 0 -420px; +} + +.icon-nav-search-white:hover { + background-position: -28px -420px; +} + +button:hover .icon-nav-search-white, +a:hover .icon-nav-search-white { + background-position: -28px -420px; +} + +.icon-nav-shop { + background-position: 0 -448px; +} + +.icon-nav-shop:hover { + background-position: -28px -448px; +} + +button:hover .icon-nav-shop, +a:hover .icon-nav-shop { + background-position: -28px -448px; +} + +.icon-default-generic, +.icon-home, +.icon-search, +.icon-settings, +.icon-edit, +.icon-inactive, +.icon-male, +.icon-female, +.icon-page, +.icon-brokenpage, +.icon-audio, +.icon-moreinfo, +.icon-play, +.icon-pause, +.icon-menu, +.icon-right, +.icon-left, +.icon-up, +.icon-down, +.icon-next, +.icon-back, +.icon-checkmark, +.icon-checkmark-on, +.icon-close, +.icon-more, +.icon-sorting, +.icon-additem, +.icon-carousel-right, +.icon-carousel-left, +.icon-games-carousel-right, +.icon-games-carousel-left, +.icon-games-carousel-right.hover, +.icon-games-carousel-left.hover, +.icon-clock, +.icon-grid, +.icon-slideshow, +.icon-pastname, +.btn-generic-edit-lg .icon-edit, +a.btn-generic-edit-lg .icon-edit, +.btn-generic-edit-lg:hover .icon-edit, +a.btn-generic-edit-lg:hover .icon-edit, +.btn-generic-edit-md .icon-edit, +a.btn-generic-edit-md .icon-edit, +.btn-generic-edit-md:hover .icon-edit, +a.btn-generic-edit-md:hover .icon-edit, +.btn-generic-edit-sm .icon-edit, +a.btn-generic-edit-sm .icon-edit, +.btn-generic-edit-sm:hover .icon-edit, +a.btn-generic-edit-sm:hover .icon-edit, +.btn-generic-edit-xs .icon-edit, +a.btn-generic-edit-xs .icon-edit, +.btn-generic-edit-xs:hover .icon-edit, +a.btn-generic-edit-xs:hover .icon-edit { + background-image: url(/img/generic_03112016.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-generic-16x16, +.icon-edit-16x16, +.icon-right-16x16, +.icon-left-16x16, +.icon-up-16x16, +.icon-down-16x16, +.icon-checkmark-16x16, +.icon-close-16x16, +.rbx-input-group-btn .rbx-input-dropdown-btn:hover .icon-down, +.rbx-input-group-btn .rbx-input-dropdown-btn:focus .icon-down, +.rbx-select-group:hover .icon-down, +.open .rbx-input-dropdown-btn .icon-down { + background-image: url(/static/img/generic_03112016.svg); + background-repeat: no-repeat; + background-size: 32px auto; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-games, +.icon-inventory, +.icon-games, +.icon-catalog, +.icon-like, +.icon-like.selected, +.icon-dislike, +.icon-dislike.selected, +.icon-playaudio, +.icon-copylocked, +.icon-nocopylocked, +.icon-publicserver, +.icon-privateserver, +.icon-allgears, +.icon-partialgears, +.icon-nogear, +.icon-MeleeWeapon, +.icon-RangedWeapon, +.icon-PowerUp, +.icon-Explosive, +.icon-MusicalInstrument, +.icon-NavigationEnhancer, +.icon-BuildingTool, +.icon-SocialItem, +.icon-PersonalTransport { + background-image: url(/static/img/games.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-badges, +.icon-inviter, +.icon-friendship, +.icon-welcome-to-the-club, +.icon-ambassador, +.icon-combat-initiation, +.icon-warrior, +.icon-bloxxer, +.icon-homestead, +.icon-bricksmith, +.icon-official-model-maker, +.icon-builders-club, +.icon-turbo-builders-club, +.icon-outrageous-builders-club, +.icon-administrator, +.icon-veteran { + background-image: url(/static/img/roblox_badges.svg); + background-repeat: no-repeat; + background-size: 280px auto; + width: 140px; + height: 140px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-friendstatus, +.icon-game, +.icon-studio, +.icon-online { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/Home/friendsstatus.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-creation, +.icon-profile, +.icon-develop, +.icon-charactercustomizer, +.icon-place, +.icon-personalserver, +.icon-shirt, +.icon-tshirt, +.icon-decal, +.icon-pants, +.icon-models, +.icon-tutorial { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/creation.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-social, +.icon-message, +.icon-addfriend, +.icon-friends, +.icon-group, +.icon-forum, +.icon-blog, +.icon-trade, +.icon-share { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/social.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-branded, +.icon-playerpoint, +.icon-clanpoint, +.icon-leaderboard, +.icon-favorite, +.icon-favorite.favorited, +.icon-robux, +.icon-tix { + background-image: url(/static/img/branded.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-bc, +.icon-bc, +.icon-tbc, +.icon-obc { + background-image: url(/static/img/bc.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 52px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-negative, +.icon-report.active, +.icon-remove, +.icon-alert, +.icon-flag, +.icon-warning, +.icon-lock { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/NextStyleGuide/negative_08272015.svg); + background-repeat: no-repeat; + background-size: 200% auto; + width: 20px; + height: 20px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-stars { + background-image: url(/web/20160323201015im_/http://static.rbxcdn.com/images/Games/stars.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-thumbs-16x16, +.icon-thumbs-up, +.icon-thumbs-down { + background-image: url(/static/img/thumbs.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 16px; + height: 16px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-iconlabels, +.icon-bc-label, +.icon-tbc-label, +.icon-obc-label, +.icon-limited-label, +.icon-limited-bc-label, +.icon-limited-tbc-label, +.icon-limited-obc-label, +.icon-limited-unique-label, +.icon-limited-unique-bc-label, +.icon-limited-unique-tbc-label, +.icon-limited-unique-obc-label { + background-image: url(/static/img/icon_labels.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 110px; + height: 18px; + display: inline-block; + vertical-align: middle; +} + +.icon-default-charts, +.icon-line-chart, +.icon-line-chart.selected, +.icon-pie-chart, +.icon-pie-chart.selected, +.icon-bar-chart, +.icon-bar-chart.selected { + background-image: url(/static/web/20160323201015im_/http://static.rbxcdn.com/images/Icons/charts.svg); + background-repeat: no-repeat; + background-size: auto auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} + +.icon-home { + background-position: 0 0; +} + +.icon-search { + background-position: 0 -28px; +} + +.icon-settings { + background-position: 0 -56px; +} + +.icon-edit { + background-position: 0 -84px; +} + +.icon-inactive { + background-position: 0 -112px; +} + +.icon-male { + background-position: 0 -140px; +} + +.icon-male:hover { + background-position: -28px -140px; +} + +button:hover .icon-male, +a:hover .icon-male { + background-position: -28px -140px; +} + +.icon-female { + background-position: 0 -168px; +} + +.icon-female:hover { + background-position: -28px -168px; +} + +button:hover .icon-female, +a:hover .icon-female { + background-position: -28px -168px; +} + +.icon-page { + background-position: 0 -196px; +} + +.icon-brokenpage { + background-position: 0 -224px; +} + +.icon-audio { + background-position: 0 -252px; +} + +.icon-moreinfo { + background-position: 0 -280px; +} + +.icon-moreinfo:hover { + background-position: -28px -280px; +} + +button:hover .icon-moreinfo, +a:hover .icon-moreinfo { + background-position: -28px -280px; +} + +.icon-play { + background-position: 0 -308px; +} + +.icon-pause { + background-position: 0 -336px; +} + +.icon-menu { + background-position: 0 -364px; +} + +.icon-right { + background-position: 0 -392px; +} + +.icon-right:hover { + background-position: -28px -392px; +} + +button:hover .icon-right, +a:hover .icon-right { + background-position: -28px -392px; +} + +.icon-left { + background-position: 0 -420px; +} + +.icon-left:hover { + background-position: -28px -420px; +} + +button:hover .icon-left, +a:hover .icon-left { + background-position: -28px -420px; +} + +.icon-up { + background-position: 0 -448px; +} + +.icon-down { + background-position: 0 -476px; +} + +.icon-next { + background-position: 0 -504px; +} + +.icon-back { + background-position: 0 -532px; +} + +.icon-checkmark { + background-position: 0 -560px; +} + +.icon-checkmark-on { + background-position: -28px -560px; +} + +.icon-close { + background-position: 0 -588px; +} + +.icon-more { + background-position: 0 -616px; +} + +.icon-more:hover { + background-position: -28px -616px; +} + +button:hover .icon-more, +a:hover .icon-more { + background-position: -28px -616px; +} + +.icon-sorting { + background-position: 0 -644px; +} + +.icon-additem { + background-position: 0 -672px; +} + +.icon-edit-16x16 { + background-position: 0 -48px; +} + +.icon-right-16x16 { + background-position: 0 -224px; +} + +.icon-left-16x16 { + background-position: 0 -240px; +} + +.icon-up-16x16 { + background-position: 0 -256px; +} + +.icon-down-16x16 { + background-position: 0 -272px; +} + +.icon-checkmark-16x16 { + background-position: 0 -320px; +} + +.icon-close-16x16 { + background-position: 0 -336px; +} + +.icon-carousel-right { + background-position: 0 -896px; +} + +.icon-carousel-left { + background-position: 0 -924px; +} + +.icon-games-carousel-right { + background-position: 0 -952px; +} + +.icon-games-carousel-right:hover { + background-position: -28px -952px; +} + +button:hover .icon-games-carousel-right, +a:hover .icon-games-carousel-right { + background-position: -28px -952px; +} + +.icon-games-carousel-left { + background-position: 0 -980px; +} + +.icon-games-carousel-left:hover { + background-position: -28px -980px; +} + +button:hover .icon-games-carousel-left, +a:hover .icon-games-carousel-left { + background-position: -28px -980px; +} + +.icon-games-carousel-right.hover { + background-position: -28px -952px; +} + +.icon-games-carousel-left.hover { + background-position: -28px -980px; +} + +.icon-clock { + background-position: 0 -1008px; +} + +.icon-clock:hover { + background-position: -28px -1008px; +} + +button:hover .icon-clock, +a:hover .icon-clock { + background-position: -28px -1008px; +} + +.icon-grid { + background-position: 0 -1036px; +} + +.icon-slideshow { + background-position: 0 -1064px; +} + +.icon-pastname { + background-position: 0 -1092px; +} + +.icon-inventory { + background-position: 0 0; +} + +.icon-games { + background-position: 0 -28px; +} + +.icon-catalog { + background-position: 0 -56px; +} + +.icon-like { + background-position: 0 -84px; +} + +.icon-like:hover { + background-position: -28px -84px; +} + +button:hover .icon-like, +a:hover .icon-like { + background-position: -28px -84px; +} + +.icon-like.selected { + background-position: -28px -84px; +} + +.icon-dislike { + background-position: 0 -112px; +} + +.icon-dislike:hover { + background-position: -28px -112px; +} + +button:hover .icon-dislike, +a:hover .icon-dislike { + background-position: -28px -112px; +} + +.icon-dislike.selected { + background-position: -28px -112px; +} + +.icon-playaudio { + background-position: 0 -140px; +} + +.icon-copylocked { + background-position: 0 -168px; +} + +.icon-nocopylocked { + background-position: 0 -196px; +} + +.icon-publicserver { + background-position: 0 -224px; +} + +.icon-privateserver { + background-position: 0 -252px; +} + +.icon-allgears { + background-position: 0 -280px; +} + +.icon-partialgears { + background-position: 0 -308px; +} + +.icon-nogear { + background-position: 0 -336px; +} + +.icon-MeleeWeapon { + background-position: 0 -364px; +} + +.icon-RangedWeapon { + background-position: 0 -392px; +} + +.icon-PowerUp { + background-position: 0 -420px; +} + +.icon-Explosive { + background-position: 0 -448px; +} + +.icon-MusicalInstrument { + background-position: 0 -476px; +} + +.icon-NavigationEnhancer { + background-position: 0 -504px; +} + +.icon-BuildingTool { + background-position: 0 -532px; +} + +.icon-SocialItem { + background-position: 0 -560px; +} + +.icon-PersonalTransport { + background-position: 0 -588px; +} + +.icon-profile { + background-position: 0 0; +} + +.icon-develop { + background-position: 0 -28px; +} + +.icon-charactercustomizer { + background-position: 0 -56px; +} + +.icon-place { + background-position: 0 -84px; +} + +.icon-personalserver { + background-position: 0 -112px; +} + +.icon-shirt { + background-position: 0 -140px; +} + +.icon-tshirt { + background-position: 0 -168px; +} + +.icon-decal { + background-position: 0 -196px; +} + +.icon-pants { + background-position: 0 -224px; +} + +.icon-models { + background-position: 0 -252px; +} + +.icon-tutorial { + background-position: 0 -280px; +} + +.icon-playerpoint { + background-position: 0 0; +} + +.icon-clanpoint { + background-position: 0 -28px; +} + +.icon-leaderboard { + background-position: 0 -56px; +} + +.icon-favorite { + background-position: 0 -84px; +} + +.icon-favorite:hover { + background-position: -28px -84px; +} + +button:hover .icon-favorite, +a:hover .icon-favorite { + background-position: -28px -84px; +} + +.icon-favorite.favorited { + background-position: -28px -84px; +} + +.icon-robux { + background-position: 0 -112px; +} + +.icon-tix { + background-position: 0 -140px; +} + +.icon-message { + background-position: 0 0; +} + +.icon-addfriend { + background-position: 0 -28px; +} + +.icon-friends { + background-position: 0 -56px; +} + +.icon-group { + background-position: 0 -84px; +} + +.icon-forum { + background-position: 0 -112px; +} + +.icon-blog { + background-position: 0 -140px; +} + +.icon-trade { + background-position: 0 -168px; +} + +.icon-share { + background-position: 0 -224px; +} + +.icon-share:hover { + background-position: -28px -224px; +} + +button:hover .icon-share, +a:hover .icon-share { + background-position: -28px -224px; +} + +.icon-bc { + background-position: 0 0; +} + +.icon-tbc { + background-position: 0 -28px; +} + +.icon-obc { + background-position: 0 -56px; +} + +.icon-report.active { + background-position: -20px -40px; +} + +.icon-remove { + background-position: 0 0; +} + +.icon-remove:hover { + background-position: -20px 0; +} + +button:hover .icon-remove, +a:hover .icon-remove { + background-position: -20px 0; +} + +.icon-alert { + background-position: 0 -20px; +} + +.icon-alert:hover { + background-position: -20px -20px; +} + +button:hover .icon-alert, +a:hover .icon-alert { + background-position: -20px -20px; +} + +.icon-flag { + background-position: 0 -40px; +} + +.icon-flag:hover { + background-position: -20px -40px; +} + +button:hover .icon-flag, +a:hover .icon-flag { + background-position: -20px -40px; +} + +.icon-warning { + background-position: 0 -60px; +} + +.icon-lock { + background-position: 0 -80px; +} + +.icon-lock:hover { + background-position: -20px -80px; +} + +button:hover .icon-lock, +a:hover .icon-lock { + background-position: -20px -80px; +} + +.icon-votes-background { + background-position: 0 0; +} + +.icon-votes-foreground { + background-position: 0 -16px; +} + +.icon-votes-foreground.hover { + background-position: 0 -32px; +} + +.icon-thumbs-up { + background-position: 0 0; +} + +.icon-thumbs-up:hover, .icon-thumbs-up.colored { + background-position: -16px 0; +} + +button:hover .icon-thumbs-up, +a:hover .icon-thumbs-up { + background-position: -16px 0; +} + +.icon-thumbs-down { + background-position: 0 -16px; +} + +.icon-thumbs-down:hover, .icon-thumbs-down.colored { + background-position: -16px -16px; +} + +button:hover .icon-thumbs-down, +a:hover .icon-thumbs-down { + background-position: -16px -16px; +} + +.icon-bc-label { + width: 30px; + background-position: 0 0; +} + +.icon-tbc-label { + width: 40px; + background-position: 0 -18px; +} + +.icon-obc-label { + width: 40px; + background-position: 0 -36px; +} + +.icon-limited-label { + width: 60px; + background-position: 0 -54px; +} + +.icon-limited-bc-label { + width: 90px; + background-position: 0 -72px; +} + +.icon-limited-tbc-label { + width: 90px; + background-position: 0 -90px; +} + +.icon-limited-obc-label { + width: 90px; + background-position: 0 -108px; +} + +.icon-limited-unique-label { + width: 80px; + background-position: 0 -126px; +} + +.icon-limited-unique-bc-label { + width: 100px; + background-position: 0 -144px; +} + +.icon-limited-unique-tbc-label { + width: 110px; + background-position: 0 -162px; +} + +.icon-limited-unique-obc-label { + background-position: 0 -180px; +} + +.icon-inviter { + background-position: 0 0; +} + +.icon-friendship { + background-position: -140px 0; +} + +.icon-welcome-to-the-club { + background-position: -140px -140px; +} + +.icon-ambassador { + background-position: 0 -420px; +} + +.icon-combat-initiation { + background-position: -140px -420px; +} + +.icon-warrior { + background-position: 0 -560px; +} + +.icon-bloxxer { + background-position: -140px -560px; +} + +.icon-homestead { + background-position: 0 -700px; +} + +.icon-bricksmith { + background-position: -140px -700px; +} + +.icon-official-model-maker { + background-position: -140px -1260px; +} + +.icon-builders-club { + background-position: 0 -700px; +} + +@media (max-width: 767px) { + .icon-builders-club { + background-position: 0 -425px; + } +} + +.icon-turbo-builders-club { + background-position: -140px -700px; +} + +@media (max-width: 767px) { + .icon-turbo-builders-club { + background-position: -85px -425px; + } +} + +.icon-outrageous-builders-club { + background-position: 0 -840px; +} + +@media (max-width: 767px) { + .icon-outrageous-builders-club { + background-position: 0 -510px; + } +} + +.icon-administrator { + /* background-position: -140px -1540px; */ + background-position: -140px -840px; +} + +.icon-veteran { + background-position: 0 -1680px; +} + +.icon-line-chart { + background-position: 0 0; +} + +.icon-line-chart:hover { + background-position: -28px 0; +} + +button:hover .icon-line-chart, +a:hover .icon-line-chart { + background-position: -28px 0; +} + +.icon-line-chart.selected { + background-position: -28px 0; +} + +.icon-pie-chart { + background-position: 0 -28px; +} + +.icon-pie-chart:hover { + background-position: -28px -28px; +} + +button:hover .icon-pie-chart, +a:hover .icon-pie-chart { + background-position: -28px -28px; +} + +.icon-pie-chart.selected { + background-position: -28px -28px; +} + +.icon-bar-chart { + background-position: 0 -56px; +} + +.icon-bar-chart:hover { + background-position: -28px -56px; +} + +button:hover .icon-bar-chart, +a:hover .icon-bar-chart { + background-position: -28px -56px; +} + +.icon-bar-chart.selected { + background-position: -28px 0; +} + +.icon-game { + background-position: 0 0; +} + +.icon-studio { + background-position: 0 -28px; +} + +.icon-online { + background-position: 0 -56px; +} + +/* + Genre Icons +*/ + +div.GamesInfoIcon { + height: 16px; + width: 16px; + display: inline-block; + top: 0; + padding: 0; + margin-right: 3px; + background: url(/img/CategoryIcons/CategorySprite.png); +} + +div.GamesInfoIcon { + background: url(/img/GenreIcons/GenreIconsSprite.png); + height: 16px; +} + +div.GamesInfoIcon.Melee { + background-position: 48px 0; +} + +div.GamesInfoIcon.Ranged { + background-position: 64px 16px; +} + +div.GamesInfoIcon.Explosive { + background-position: -16px 0; +} + +div.GamesInfoIcon.PowerUps { + background-position: -16px -16px; +} + +div.GamesInfoIcon.Navigation { + background-position: 16px 0; + z-index: inherit; +} + +div.GamesInfoIcon.Music { + background-position: 32px 0; +} + +div.GamesInfoIcon.Social { + background-position: 48px 16px; +} + +div.GamesInfoIcon.Building { + background-position: 0 0; +} + +div.GamesInfoIcon.PersonalTransport { + background-position: 0 16px; +} + +div.GamesInfoIcon.Adventure { + background-position: 0 0; +} + +div.GamesInfoIcon.War { + background-position: 16px -3px; +} + +div.GamesInfoIcon.Funny { + background-position: 32px 0; +} + +div.GamesInfoIcon.Scary { + background-position: 49px 0; +} + +div.GamesInfoIcon.Fantasy { + background-position: -16px 0; +} +div.GamesInfoIcon.TownAndCity, +div.GamesInfoIcon.Town.City { + background-position: -32px 0; +} + +div.GamesInfoIcon.All { + background-position: -47px 1px; +} + +div.GamesInfoIcon.Ninja { + background-position: 0 16px; +} + +div.GamesInfoIcon.Wild.West { + background-position: 16px 15px; +} + +div.GamesInfoIcon.Tutorial { + background-position: 32px 16px; +} + +div.GamesInfoIcon.Sports { + background-position: 49px 16px; +} + +div.GamesInfoIcon.Pirate { + background-position: -16px 16px; +} + +div.GamesInfoIcon.Sci-Fi { + background-position: -32px 16px; +} +div.GamesInfoIcon.SkatePark, +div.GamesInfoIcon.Skate.Park { + background-position: -48px 16px; + width: 15px; +} + +div.GamesInfoIcon.FPS { + background: url(/img/GenreIcons/FPS.png) no-repeat; + height: 16px; +} + +div.GamesInfoIcon.RPG { + background: url(/img/GenreIcons/RPG.png) no-repeat; + height: 16px; +} + +.icon-default-friendstatus, +.icon-game, +.icon-online, +.icon-studio { + background-image: url(/img/FriendsStatus.svg); + background-repeat: no-repeat; + background-size: 100% auto; + width: 28px; + height: 28px; + display: inline-block; + vertical-align: middle; +} +.icon-game { + background-position: 0 0; +} +.icon-studio { + background-position: 0 -28px; +} +.icon-online { + background-position: 0 -56px; +} + +span.game-privacy-symbol { + padding-left: 18px; + font-size: 12px; + background-image: url("/img/ico-game_privacy.png"); + background-repeat: no-repeat; + display: inline; + height: 15px; +} + +span.game-privacy-symbol.gps-inactive { + background-position: 0 -45px; +} + +span.game-privacy-symbol.gps-active { + background-position: 0 0; +} + +.tiny-thumbs-up, .tiny-thumbs-down, .upvote.tiny, .downvote.tiny { + background: url('/img/thumbsup.png') no-repeat 0 -170px; + width: 12px; + height: 13px; + padding-right: 5px; + display: inline-block; + position: relative; + top: 2px; +} + +.tiny-thumbs-down { + background-position: 0 -224px; + margin-right: 0; + padding-right: 0; + margin-left: 5px; + top: 2px; +} \ No newline at end of file diff --git a/app/static/css/login.css b/app/static/css/login.css new file mode 100644 index 0000000..b93baca --- /dev/null +++ b/app/static/css/login.css @@ -0,0 +1,77 @@ +body { + background: radial-gradient(circle, #333 10%, transparent 11%),radial-gradient(circle at bottom left, #333 5%, transparent 6%),radial-gradient(circle at bottom right, #333 5%, transparent 6%),radial-gradient(circle at top left, #333 5%, transparent 6%),radial-gradient(circle at top right, #333 5%, transparent 6%); + background-size: 3em 3em; + background-color: rgb(20,20,20); +} +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.login-container { + min-width: 330px; + display: inline-block; + background-color: rgba(25,25,25, 1); + box-shadow: 0 0 15px rgba(0, 0, 0, 0.7); +} + +.login-container h1 { + text-align: center; + margin-bottom: 0; + font-size: 3.5rem; + font-weight: 700; +} +.login-container p { + text-align: center; + padding: 0; + margin-bottom: 15px; + font-size: small; +} + +.login-container button { + width: 100%; + font-weight: 600; + font-size: larger; + padding: 3px; + margin-bottom: 0 !important; +} + +.login-container a { + font-size: small; + font-weight: 400 !important; +} + +.col { + padding: 0 !important; +} + +#password { + margin-top: 10px; + margin-bottom: 10px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.form-text { + /* wrap the text*/ + word-wrap: break-word; +} + +#main a { + text-decoration: none !important; + color: rgb(32, 147, 255) !important; + font-weight: 500 !important; + transition: 0.2s; +} + +#main a:hover { + text-decoration: none !important; + color: rgb(3, 133, 255) !important; + transition: 0.2s; +} \ No newline at end of file diff --git a/app/static/css/message.css b/app/static/css/message.css new file mode 100644 index 0000000..cf3753b --- /dev/null +++ b/app/static/css/message.css @@ -0,0 +1,11 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} \ No newline at end of file diff --git a/app/static/css/profile.css b/app/static/css/profile.css new file mode 100644 index 0000000..1b48ae7 --- /dev/null +++ b/app/static/css/profile.css @@ -0,0 +1,52 @@ +#main { + display: flex; + min-height: 100vh; + margin-top: 120px; +} + +.status-icon { + position: absolute; + bottom : -8px; + right: -8px; + width: 20px; + height: 20px; + border-radius: 50%; + background-color: rgb(0, 139, 219); + border: 2px solid rgb(30,30,30); +} + +.status-icon-green { + background-color: rgb(15, 211, 80) !important; +} + +.image-container { + position: relative; + display: table; + margin-right: 20px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.dark-container { + background-color: rgb(30,30,30) !important; + box-shadow: 0 0 10px 0 rgba(0,0,0,0.2); + border-radius: 5px; + min-height: 100px; + overflow-x: scroll; + -ms-overflow-style: none; + scrollbar-width: none; +} + +.dark-container::-webkit-scrollbar { + display: none; +} + +.image-container-friend { + position: relative; + display: table; + margin: 0 auto; +} \ No newline at end of file diff --git a/app/static/css/settings.css b/app/static/css/settings.css new file mode 100644 index 0000000..1f1e4c5 --- /dev/null +++ b/app/static/css/settings.css @@ -0,0 +1,18 @@ +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.settings-container { + min-width: 800px; + padding: 10px; + border-radius: 5px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} \ No newline at end of file diff --git a/app/static/css/signup.css b/app/static/css/signup.css new file mode 100644 index 0000000..5651446 --- /dev/null +++ b/app/static/css/signup.css @@ -0,0 +1,81 @@ +body { + background: radial-gradient(circle, #333 10%, transparent 11%),radial-gradient(circle at bottom left, #333 5%, transparent 6%),radial-gradient(circle at bottom right, #333 5%, transparent 6%),radial-gradient(circle at top left, #333 5%, transparent 6%),radial-gradient(circle at top right, #333 5%, transparent 6%); + background-size: 3em 3em; + background-color: rgb(20,20,20); +} + +#main { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; +} + +.signup-container { + min-width: 330px; + display: inline-block; + background-color: rgba(25,25,25, 1); + box-shadow: 0 0 15px rgba(0, 0, 0, 0.7); +} + +/* only align h1 tags */ +.signup-container h1 { + text-align: center; + margin-bottom: 0; + font-size: 3.5rem; + font-weight: 700; +} +.signup-container p { + text-align: center; + padding: 0; + margin-bottom: 15px; + font-size: small; +} + +.signup-container button { + width: 100%; + font-weight: 600; + font-size: larger; + padding: 3px; + margin-bottom: 0 !important; + color: #fff; +} + +.signup-container a { + font-size: small; + font-weight: 400 !important; +} + +.col { + padding: 0 !important; +} + +#password { + min-width: 300px; + margin-top: 10px; + margin-bottom: 10px; +} + +.messagealerts { + background: rgba(255, 0, 0, 0.2); + color: rgb(226, 226, 226); + word-wrap: break-word; +} + +.form-text { + /* wrap the text*/ + word-wrap: break-word; +} + +a { + text-decoration: none !important; + color: rgb(32, 147, 255) !important; + font-weight: 500 !important; + transition: 0.2s; +} + +a:hover { + text-decoration: none !important; + color: rgb(3, 133, 255) !important; + transition: 0.2s; +} \ No newline at end of file diff --git a/app/static/css/terms.css b/app/static/css/terms.css new file mode 100644 index 0000000..a75af96 --- /dev/null +++ b/app/static/css/terms.css @@ -0,0 +1,15 @@ +h1 { + font-weight: 700; +} + +h5 { + color : rgb(230,230,230); + font-weight: 400; +} + + +p { + margin-left: 10px; + color: rgb(230, 230, 230); + font-size: large; +} \ No newline at end of file diff --git a/app/static/img/BC.png b/app/static/img/BC.png new file mode 100644 index 0000000000000000000000000000000000000000..9990a6148e56c83be1deb664590e6d7fafc8c1e9 GIT binary patch literal 1166 zcmeAS@N?(olHy`uVBq!ia0vp^Q9vBY!3-ojA03_tq?n7HJVQ7*IBq}me*ok@5AX?b z{r~?z!{VDnBB0{m|Nedd^Y7EIzwdwkef{Il({I0@eEt3K%kTT2f8GA{>*Bi~XW#xf z@Z#H^=U;a`{j%xtm-UZ6uYLG=^}|mqAADMR|I_mOpBCQzIQ8cH3D@8CUVGPZK?k1(9C+%t|EcHR zCoX#)JMDh#u4#LM!j^uei;%{1(fS zTR`7^)lU2c^s;YBkY6x^ppvmmXj*y4%vHP3+OLYC+fRokE^R#>CR6g~crZP3nIq29PZxdtY zm(^UJV$&}h=LOHX_dWS5NBy=He*5FT)i1rc_}@|Oi@A*d-!FUod;X;t$@kyK95xHR zG{=s&@^t2xvWlN&CvR3&M@gH(Y!?_l)AA%|HfkPT2DWwNgb)imZ9E#c-~L(X-y3n|kSe=OQ8>tZ6q0E40Y=pCf8~%t}7JbkgQ!ry@C@ zt%)xVyK7m^I!Bi8+&-VyjkA}$-{Ho;=Fp9u+()nF&pE&<$F*25Q)An`cP=rqFC*G& aztk7ZPIJ!?(ANScWCl-HKbLh*2~7aCW^u*< literal 0 HcmV?d00001 diff --git a/app/static/img/ChristmasHat.png b/app/static/img/ChristmasHat.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b0c2341a27766da28ecdfa21da851c2acd0e42 GIT binary patch literal 3424 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 literal 0 HcmV?d00001 diff --git a/app/static/img/ContentDeleted.png b/app/static/img/ContentDeleted.png new file mode 100644 index 0000000000000000000000000000000000000000..891088a61fe8e5108f60d9ed93335d5960af8b8d GIT binary patch literal 4475 zcmd5=SvVV9w@#}yR28Y3s)`0x^Q?xLQW6AJRE;$kB{kGM^rOZOA%Y_KL}HFoLtA4N zHB&M3p$$P1sd?t4=Ukj~F8=4g{V(>j_WSO4-L3uZwRWPZu|CTs-b(-gfCUDHm;nIi zaDNsfjR4q)Uin1}7u>bs+5kWmlKI&2A`J^TL(Sj-K&S`+@Zu!^a7d$GECT?~WdMMc z#{hupI{<*|8K(ZeI_==Rlc7EYa2Aj3YoQ^A02urp!{Q|%*G1XH5;Tori-AG3&4Z^X zIgf&{J-l%(=SNiZ;IDc5M!fcBz0S^B{Coyf!-9&g4%hLA zXxm129aZVH^X1g;Y%~usWr($ftDNd00-tBhx!%#2@Ii4SRWA|_vp}HJE-Qz{v$suw z=z}&N*qQqbeVX+@Nyx5YwS&*=N<&omMy6({D%N-Al+YX)vm3(%YhC79J%P9DZ%uYq z(ASaRH_Ojv9?ZPNX*~`8{%&k8pslmwasv*2y~f!MwnCar@-)|E4RcfDah<1^tp-)& zT&9R=8yiP4=$*UIwemVq?Wl>&wA6{%m4mQaw_c6%x{#P%x_BG~X3Ia>Oh!E5Z!wu! zTyyZ}zpmcVWwx+`YZwSqTpBr0?~$6(T(p{7R%kfpAl+J`Z_3@Gc0Tki8TH&;z@YSV z2QN0Ar7OLYf`vNK$aVi|yQkRrCZES|Ug1xCE+P~08r0GReYM%yP&_3gDY+(d;V3?aRTCZRFQ+gZ zGIZUlK#86Gnm~7q+3NGI1i$U;a$ZWSuiI0-bG*p@lSgUTn|zbu3y}5!lLD1b-~t!3 zQ(oQeYoC`EUlK=k*67dH(?CKo=I@g2fLg9&%C@5Lzi4#Dti0?-r6Q1nOM7;e{vvK(TWr4^ZlvsRrNG+$>U$ttC zcrurr%yG?$xb$7I%nJUK*zYiP3sz_$>EAZSAvFz^?gK{^{SEbkMYCa8JJqvaspERg zvy==$!zvrg!u{)U5Oj<2J}b3IB~;Md2h zz-Z+Vbl0RL_#aE3lNW zJ@^iTdB#f+@ zy?e708MLNoZPSf@m2dfoaw3xeZ4%P~!l#^bHJGaEMf2*yn4`$|O8nS_)ZjL^(o1km zC>?oE@KN68-+Y$URT{$+23eZBG5rSjlel2e!yN8@%iq5E6_`aVZtmOP;48Iuh3WCQ zIrJM|$&cpp@L^!-w*=|S5mi>7P8S!9XreD`@x3oT1xRHZ7h4+QJeE_3o_#oMTh6eb zWPl9@^*VmclDr1=VOJV=2rVGHX9W5)!fqO^`id2+soe1?b%r11;Hx@%I+#EaAh&{F zP#MF#YmK2ceHq`{Ki}Um`U{8jHxH8P&m?f3D1d%P`Y-Gw4QN+GOCt1EuJ{pC{eDba zN?_oEvbnq}OJ{01$&1u7bmPNQSPY0aBKzw7m2XEUTaB|HijIHFL7BfE|D2306;(tS zwl(mu3%5XKb2&ol#;J=CNHuj$L`9L~;Bsr|;F6avW?BDOzkW|_){c$ZvLR@_>uo5PV- z=By9mKbGSnR3!N_paRh;JTe)>7u@W{_vP~uv-Y`-@hD)5U|O->1wsvm?7cJ!<*!rtypqDYkf&pRZw!pH_lgAM4$`f~S>2ixW=ATKQ0Qh2nm&Zm`n;kA^~w9!YG&oMZ=` z;+&2iyyo8XvDa{H;E*PAxue%lPLCV+epsf_Mc_Y&(vjm3+#K5c&h8H4udGc=41aQ2 z&|?~4`;w*Xst{j#v>qwMo6MHXv6%w$*{bQ)I`a0c6_b^4?Gp45cXLv=XjMFTYwcYL zG+8sv(XzEiS8WGDHiOERFjX@vt=j-|M1Fr zSU!n<$Sw6z)FsC))C3u$OXTFnrq?)PttL+KF{1@qW{l+)IZFKjEIf&??6R1lQ|BMp zQs0!(#jZL48x}-B-jU(2I4_Qq)=xIYvWs5Dt~dZwN8#fnV;dN0*1!Pq`f_=`E&szi zM%#}msfgFzcS?cIIj`idY?AK#AEz$-&7E-=4-m_8!rHmgCHw3u%yi1s?vr@I%< zVK_vjWnIZKZ;8K^?m^IvFi6B3Y+h~lNrN(WEi18~BK;mc?Dks!aBYN;XfVPerpws;t76Z_Ve@VKU6B;Z z1?26J25Z9HK0itwlnCsdQ$NwFwXQOxhuLVnFV~(14~l9L#(147w24wlYMW{}cQN35 z#D2+ya8d)|F_wKKC=YpdDqPje5rgxtR9y^@cZ&3?4gcWB2AwiS{cJ%_yPpv!XjN3J zpI~xMuk+wlJA)KMib8l2m??EPVXT>6Ff*7H?NBQ5LU^`{EFAdrgIH9^8QSXOKjSru z*zybSwG-^k&ISZ{gT@<8A>B>Vv2wW#R&f(UZ}s8pL>&b#vbzu5mw4pJ_NHN|#T2wj z@(Dz+vGZt-jaYVk3cdCH$q(|fV{Q9&Zt-}l($&*o_~gk`s_^r<1#T}lZZ61;!mGt4 z{azzD3;xoJdl~_=5-WBKAY_uMfqJ=KYhiIPg!G^aGo#&8z#EGJSq(?`Bv}I3evc@P zc@mVx%5B&l<@(xh23epx6xSFU@yh)USvwters=1^E@?3_`Y~zinpk1?>|n#owY{Q( z9%1FPLjzB*8}3>Yyamyhw28Y5gu;BiAHz1oEhCj#FE^8G=*(B`sm&L_n&YQ!>^6RKc@$0c|EY8mNcGit2r!$Nx8EZqjPw!t)l%x&gzLH+so6&VIYs&&VwWKZ;g@ z;kO!k*g+J`W+tU~JBspxRb=*b+#Z^nHt)Y^9gZ?6V$SBC|9Kz>eWnx^T=mE`?Ljn- zm5JZeWp#Icu;9U*w1dKQ3x=9WkcA!=s}g2_k}ES?(eIU&T8;y*n1Mehq!t9jgz$wb zvk~A^(XgyN&q#Ut7R-J6vfR#|`+XpGwQMLml4Wfu76^(>ywFak@qGs@t{mE0pN1wrs$4HcJw1eR28Rmn5Ra<| zLeT04L3Z+c-RG`@d1}t<9$U*YBYz)HBG0jteaw;};VO%hwiD5Lt20Z#4yCjxKPoYd zP1K(Wu6{$xCY7HgMC)WV-^9=V@@&me=~|HMHhC7Arvqg7^_R`*f9~9xnBd_ll&Sii zWB0D{dNuTL22m%p_FAem%;6t6FD4;D85agW-qvtUZORx46W{57`xK>$&}h*^P=ym8eIqta zht{JYFMkl5j!kn5-A7VQP5$q&_&-e@>IJ4te%K^vm+{FY{-~1=fmuX#Nd-|hhZb4n zdKtLycAl&z*L>ZdCf-w5t8>_0Vn8;(9>G`Vsr{foF3IoBN?nj#-)0C?{_&&XVbt(i zgERR>K9XgPsO8LjUCPlPOp>%nAhRL}9&gLK3#Zx~81w;W#2qa^x`hGg!z1v#7MNaU(2y;C}p zViieO6Qi}h!TLe}@dNe0{{;AAeaafwae581mLE?0j}Q*HXBFV$7~rbv?B_}g067^s zIZ0U=Nm&(hIeAqXMOB5n;xaO-GBVuS%S!(*!5iV?;TH0*6Fm4#lV}M5*ga!Nh0f#X F{{k1*LZbix literal 0 HcmV?d00001 diff --git a/app/static/img/LoginImage.png b/app/static/img/LoginImage.png new file mode 100644 index 0000000000000000000000000000000000000000..d8959a86dd0d47678f8392f896f6383865ae21d0 GIT binary patch literal 409080 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≧CstY<-D~G!_Zh%2l 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 Yo}hi?9yd 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 z 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%0D-YfCIR~DEMQ6 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 gmh>F6AH&B6D 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 Rx3sVT;qKz?Tz4oq?cbIkA8`Nx literal 0 HcmV?d00001 diff --git a/app/static/img/NBC.png b/app/static/img/NBC.png new file mode 100644 index 0000000000000000000000000000000000000000..05fe8ffb54117abe4384d4be77ed089fc7ab8e7b GIT binary patch literal 1023 zcmeAS@N?(olHy`uVBq!ia0vp^Q9vBY!3-ojA03_tq?n7HJVQ7*IBq}me*ol84)6(a z{r~^}YN7#9@$cWifByXW_3PKqpFh8U|NiC6m(QO+fBN+4*mdy*RNl{diCnXixQ@0Z za~60+7Bet#3xP1>rMq>1fPyk5t`Q}{`DrEPiAAXljw$&`sS0kHMXBZaMcKs)&cS9c z_H60_suKmNb1q6vEXmBzQwYh-O=U3GH#E~XGD(l_ zY~tHA-%mN4g|BZ&@4e$x>^|G>BSW5~jJLXx@QK8erMq=&e3->Qm?bQ(d@&_);qg0p ztmjOZx-MOMT35#Wxzv-%I#X;eGS7dakm5eOCTc;#f!z}l%gl|Ayz>g%{MCI!(C3I* zwi7n5$-F8(>+{d3$5vAJ9W!TLKXkY5e!$7SO8r&J*Qf0{H*LwKRF7XX%BSk3Dg5QbbQ4Qee8>G@cgsG@{reok)7h|43fpv2nP%;1+fs?s%0pi0v9Koz_B1cpaqTvx6+XEe1~ScOE-7Wh?B-~Qs? ziq3axGPMCmmHxT^=QSz&dDV^oV)qg=sr?bJ7un|Qzvk}$@y!Z{{CTRjY%E)P=l1T8 zbN_w*Q*ViMz#g-YEep6#6z#38ifBF3ARx4)Jao;$)4_%O2aQyYO0vl??bJDS)Hc&i z`J;h{=3{SR$$iY-v$bX!FPnW-wR~fhtB=dO8{vGqo=f^_)f0-it`*#~g*92ezCI_k{9GJkdVBL`edB~TYFo?q zxbo*5xUuu}(QElOhj;E;vhzmO?)1XaCEl6eF4i-YTgU}WIvMH?OsNc>u6{1-oD!M< DJs1bH literal 0 HcmV?d00001 diff --git a/app/static/img/OBC.png b/app/static/img/OBC.png new file mode 100644 index 0000000000000000000000000000000000000000..41638e95a775143eb03be37d08a71c37589dc49b GIT binary patch literal 1155 zcmeAS@N?(olHy`uVBq!ia0vp^Q9vBY!3-ojA03_tq?n7HJVQ7*IBq}me*ok@4DbnY z{r~^}O$G)c5m52J-@pHT|Ni&Wr@!yt|9SoT_tU4pA3pqb|NgJrw|`u`_~Y!^ZwC&1 z-LvQG?%iK@?D(>2)93Z;Kd)W;Y4z$)D_4G6zWmeDr5_hAd_Q&Sy9pEC_4dB)=y==O z`lg}bby?Y~qM}y?1uwI*UZkczkB@&I8~ZFW@>xj8)1aWI0Rd0_{GNDvK6Y_=?Bw*= z!QqjO%|mnZ2L=WY^z`m)Yu{H@y(ce!S623}q~skTq1*iYx45`&v9JLBbw#^>5zw>V zB|(0{41!9=E}?1V9Wz($K6CdS&^u&<#S8q^fW~qbctjR6FmMZjFyp1Wb$@_@G9|7N zCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^BW-s<^>H(?~1*vl`N=+=u%+FH@$;?e< zFxNLU(>FABxyTjFz`!)q)5S3)qV?^}n`M_Bc-r0`J36^fwtbn&6rpWSw-_2XZMncJ z9yRUUZ+n4{c9wG9pKk1G`hU#M_Nut-StaixnV5CY`BPVLu?GE+JIFItohfyaNORtu zhbK;)73t#jUiZ44!JPk`t@MTlnQJlmyy{KCKhmT(w6{A=S2=#?ZWgPbN<>WF!yWmI zahWai7cG>nR83jE8PqhHcv3bej#s`$+* zu}qM0?!UMMHPK(LAIn%J)Wkd47d>VYw$;6O`O#aUO(h%lgf5i7QpfDJ-sq;7VC;Wh ziMPqSZ#DE~WH7FKbTj9_V9UMR^XHmMd4FJ<>2SwqvfE>ZI|{oksMaM}Wmj+M4|mtBvZ-JH@~j!-+r*t4 zzx?{RJpQNrqoZa=vrQIjmxj6}ynp)W?ZwST^|h>LRTetz%Iz}!@^MOidxB_?GvDk( zVa%u6fA5s6Ws+*0q93}{u7~%DYL0S;Y4V?}^tslR|9A~0FRWtXo_e+9KI@FIrmrz( z>qPr%N|n>Mo{m^tTqY**TX9aT%(;8Q$;W#(pFe(c?vpnwjmnxVe_x*y``s_Qvw!Lj zHJLfZlIJpms*k@k-r$lm*}A>>-U|ai&)~wdWyMyPU92WQmHDgBu*zmFVdQ&MBb@0R7!T&;S4c literal 0 HcmV?d00001 diff --git a/app/static/img/SignupImage.png b/app/static/img/SignupImage.png new file mode 100644 index 0000000000000000000000000000000000000000..2a35b54624949bdf4555a5b6464fbb9dd7ef37d9 GIT binary patch literal 717070 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

Kq~ePF`Y=c@g5+X9 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 &24bGwQ0#$r-RBm!-99r8qq)`^s8 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�`mdcJFnh^fJ9wZuUmu`U58gC65|4Kd?g{0zP)$UG0@Zd%qZ z(`y)r8xphoWs!H=VKhf{N&{Axfb|&m8~OAp;>z(UC`LKSqb=x%{Y$p*`yF=PSSV+V z+CQJUtZrY@Do1t4iI%lSn zPwNNFbth)VklA^!9Z?FsX7>Q_hbR+1XHzFsAUGJ&%$0`hG=4@*7HP7nZJw#}BxPlTrEBf0 zcXACKur)pQPSMQnvEkSv6G6vcKy9?13DTYMP}3|oUz5i4P87x64o^NV6`Ezc<})vm z6||E4M*DTvwa<>;_|o4yx#33U=>Pwb&kb@)ntwGjDB9NMdWU_#H}!enMlsLE8KOL3 z?^OoS)Tr6Z5d3Ru3@DSIXb_crenKN_;zrl-NO`e&y zG!+oj-~2hECM2|NuPQM#ualudg_>{M(O8{|>G#ud@$B1K+zbd2%)t9U`bm8J(@$a? z^JH$uF{6O@uG?8_F#rC{Io@;sytkPPhB41mjR688wsK|`HC)0BdOf>bi@zWsKDVT0A*`yrhE#6QQgk3Nq}4?TkmAO9KL`n`V<^c7!$ zi;sK?Kl7Kr4}Ss)zkhKKzx!~BllUzd4-awA&9~sT!uS*zXPgmo-H(AeL_q46=#~dK zIXyZvKlb0(XFBI+7iPBIW+|M+1Y*Xxk*Ef;g3nF6(pH#!?;5h!zNqv)QBArL

srm8_5R5;OuwIJD7EHC$-DZ5)8{NCKZJl~ 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 Kv~9Jv5R4xm!S z-zM4ph}(7n50z<|by_90{J1a-d>0T7{o=o%Ae0WVQSCa{RHQE%r@^eh;;UxJlEU%GgM9CcxhJs4Y$xvoYYfuk_EE0B^jO(zX%5Yiz z*;MxI^tYIVqgos<<2+f9nG{~x#>$oetmg%mnwq7H^!lzYj8^0R(;@nc~>BIsKz5!5G{;^DIozRMn3h&t5)ynJR8@Jquy!^HgH$!Cb00JyVPYryK z7pZ~j$yv}RyB^LtgigM{6g7%|nqFN{wLH#N2=n_#LqDxy!beE2)s3q9$n4a3eUDGr8Jyb3v;MvZ7^cfJFQo^xBpw32M)3Uvpu(2~;~gT+=M; zP0`;Zl>SmsMjqS-3V64m+kOp_B&ZIL2QdI-L-uHZw4yJ8`Ls)X4x}hkz(b11Mi?;y zaPhFvNs1hLQ(77;xt3uQ!FWq7Q)<0;sUXjTg8ep;<%GX^Vg{=ByySv(GVO$X9=}6q z8_7L(3%Jn+`ED7o^~5LBK*P?NzlZY<5sPDQ8E2EBtkGV5E)+>sQzNC>*LgOk3wPK;-dPgu3((q3iUJzsj>a)XGTK?oUWSdGBZ&j^eoWbl{0BbIj3cB zkVypVJvLEgPHgf%+53z{&Z}p^S6EtSl=+Y=b9z`cWCTcZp`_dD!k~!)t zX5+uW-;>w=bJz~_XAwrtUjUr=@IBW5yVi=75~guNM!_fl#uxM($RkiW={qUsc($@JepvarGYTKO8tf^_W}j}wL-HRK-W{1da5M@Af0AB zO@DF*KAH)ytV2$#xkt>mCz=Wiy_cZ6zQ40`h|Dm`3g)|kd%S4po$O2I`JhL78_Z-e zpC_cF%6FQj2o>7BO0awz&|VWPD7hfto&ZO05Z6%JQIs_*Yu$Gd?eo22jNAjpBoZbL z23WLL4lF!%_Tfde`Zb?tF;{I6_dRO{=K!sTw9)JvX!d)VGYwX~Lvzua?py(ISGk{u zzTwx+WTmC!L=T0Fo{S5y*;Zf@EhQYv+(0G!ARlLhZA9Gn@II{0eMKLh zA4WEoa{WTm2)ohc)T`;N>ht%G&= zQ>w5I2td?YWxp$Afo)fjm#B*jaU@V9FQTkR0Qj(N5sanDO-ezZbR3s^I~UX`35eb- zk^r5qN*$E+3w+@yg)Kq9jCEu@ zP`#KS=Dak63SI*Q@q-SsPEYs&gy*pfF^BcAeWQs)0wp2JRMD;al4jw$&BrO3T-487p zt1j0_na$2iV#=0_(ymp~gHQehfK<<;AjX7(`rBY!|Fq7}>U-dY*=pW#_~3J#0cQD3 ze+y-_dXt(t`!3waz4U@S7m9#iHl!9wm$3}$^7~5WK&{rgc*8}%B-j=C9IeCaie*yk zQWrmY&5CghJn2)pfjc_`z1C4yKdfFOpJ{cnu(>Fmmfr)1XoeixiyHl9c{4TC(oMis z4>cIHL)1JGmPXxlH8$OKsKpbI@GJl<;!g~KAj}Cnh*FW}$QwHCWb$a{K7jp5REQZ3 z7VVBU+j;{8g|iC;rK~LtiJEx0PPEKQ({{2sC_bW}rQbod(@~ieoQ5-v!a0z0M$5GZLKj4z#fQRZQmcEUJK37zW(SEbMOmA0Fk_YFd9DTqn667721Qh* zsQ0qrIJc}#xK$%vDo{n=DrO3{^Ue-m z`Z^T2QsKg?psCB0jc(n`#;%m#k_vnwh-$JM+2?Ala4jRMV(*QSvd~Mj9j-y)>Xb^RXm!`$5;gU=@>Jl5vJv{3UDzRkz|I%SP z@^f^b_4JKk!C$S(OOF$3UBDA-N)%*jf~`sYj4uckK8ZKIJZMo3aNaaksc?s*IR_00vfQ!#WzZWhg}bNhx9O^=1fM1 zUqACwkf>R&{>gKnj%=PR>s+6uTnN^85zX}m^S6)qmHyQqW;-Yt@!4meq3b%#Gbfb) zy#MI5smRpihyJKztANd^BlA*?;x^A26Ey_6K^ov_`H#>AM4;<7qSXhgCi{*97KAPSh zQO1P+lS{@h=7O5&Tkzx_SFkws5qU_M-kuQm9l94gco#*2lTou2)($)qykoLNsYu5` zq-mtSS6@+QHt}_ZS~;QH0(?HpAm+6_jI~s!YG&UiFICey0SAoj3O>i7aRjSNvD#6G zB2QQu^1aRT$-|;tbxqkn2kd;Xnn)(i+~W(>@!eQI6=ao`rSdKURJ*`NNHzU(=~*uH zaRHj7cF9NCr=)?h-zAT8Xd_vA+PtBn44k5?(OlJ9Tj~biM);eR>92sN^W%t`tN7b2 zOi(z$`-t|Mo+REYo48U+H6*eC)~0#h0Zl;L#RW8!bD(AdV5ndUfi)7m{}34jWKUMP zurk;*I@$Np!1u6smUKWy2f3hiDo7{pTVc~K>;~@;v^N%}M$y;g%I}vlTo)-zjBIpt zSf(}Z;*|uHVWxAxXB3}aN0Vi%q;thADl^TC;kagE-vW&!BuV-T^!?LpljVG#2{yN@ zYa!RLtj;B4LTB;85MxZ=MMR0xBqKRnO>0bTxsG*8Ol|7;S)p4o3ncZa0M=*dKnnmM zlGC`0a6YhBpNl<@wPNw<()h?iAG9UmL4JqsuN5$l3t?K=V6Rut2~aYgg<&A)XAvI? zl!7V}qtN-MECvA%tiI8Kwe(08WMx{)f?n?`L!Q;}Sf3vqBzYMg7Ln>yxo%m^ClMWd zSpgr8eXaA-lcu#Q4BQD=0a22dXe4n4?GV#K#{{aiOI`fvk~SV!KY>S!S4y~JON z&qhg^tb|oDTNTNc=0nX?ykF^;gcfDG^qC9NK$KF=d&0HBCg!yY)x1=oN)B} zmE-~dHF^O?iXq~fjsuy3TdsKDSmW#)K6hCf3DU^Lt0a2fb6L}>Z&XUJf*%e}+^prd zw?e5s&o(Iu>gs;MjQPBpYHPBKcd~a3GxAI~__%HPrt;k6({w^q_Y!w0VukgDba*U6-O1)BH&M|pX`^zGx)T>KjTv}sasplKRxw_8r@00Cn88&oQ#|M!3H zdw%feoCD^9Klw*L!|iW=iHqNTMKe$-zBpyyVtRYzv{EShdhQc+1s4AWuG#i_i#*IY z{rnE?^#*Y#MuUwpC2Bou8F_k$bQE_sOP%7f4LEN`w;5?25ICdTSS9|W)sB}1=Gt^(f0hBPwd!|Qy z?zU)e_MA2rp8b}1<+&e+ZOa-*q!?w+=wI$7Jx0<3WO~V@7Kf(Yu$CBRvK8(IxW=P< zz9-8;0O~rXMN{n?tFzL?#y_1VH2V(C^%hM~rr4sbW+W%qYZe-OdYphvwou%42B>nv zC?>+P-;vVp%oMV=k@B@BLN^ahZ7Z2)V;&RS%!#pq&|N^-3fQ1S6$r4Lq=}yx!>WS= zB*1T4*1~{I@vFSYG8td$1vRn@(G!3vn!3Ot8fC_ss3OmifXi^Ormdz$nrhMs0gbDJ z7~NKBl$LWvO{jI?XnP^Vs9Au2xJ4VUsRwn=9Cpb%1|YIqzf9QmOv>sVk_4pFYrs7? zUM!3atI;x0OJ2;3fhC$Sdc=#)UZN5NrJNHGm-A*N0f}92d!06LMI%THuZPwy%KVM{ z7A|xj7*1DUPV!k?_jyh>0PuZ8IEaUlFo|obsCAYGoIL~+GsOF)jc7FbQX6|Y`*bL6 z5+WU*b&+wk9}Gq{B}YH2rfkN~i!mp`5-!%o7!;5iH!u5#UB6wsO4}*cutT3N+20x2 zzD)crSww2s^+3hsMY4Zef7eF#7J&F-XnzcAo7rzxz!!@$_3e`Cw@&-BAy1L-Sphid zDKx=Ohhxe_aIiCW8FKK;t7n3-!WGQWGwaDg3ZMY4UDyd$<70VSzO^(nenDu=2;R^e zfTNC5dAGFbsLR4}&@XTOFm=Vg$~3nKm3eKbp*K?-S-D4oOgl)UDrh*0{JVfXxGcWp zz2t}Jgcilov!U3M;X~v3JxxCdd8nOIIeF0+Gb3rr!m<#`EL1rMVOPK=?rL764FG(Q z-@=<+WGW2@iR$DepGEeftM_8QW7jz`bpin2Kp?*Wd{7f0*<8n2ZXifc(n6tBEU`$^ zB(B|1M^2Ir&5B;8-4$xoruzG!)NX(e&>;F>0bjzVU9OQdyB3S73tk#1UEt11!xxv$ zfi!(Fk<`O0k^Zfjt#FRhV0D15(p=^&@)V&>wVy7*TM;!_ui%gaNfWJ=9X6hT$ExcA1fQVndd1JVAULu#+8>H z!0CoUmIqC2yiG<-Co2Cj)L1`P3%5q-U2&OW7oD(`MdPo33+u!$F+;NU%S3Mw02a-o z_Xc&*w0q5lmg`ERAs$97*z&Tmz==Uyh3mw*Thkbd6z7uMQPznUfE~d4S;~~DfK0k% zGCIk<(e)>Y_CoiRg2=7P7kby5cbC7s>3a^$o)^h_vdBvYDZP{UI?o%$Qdy)2{TzxOTT zrr}|o3g*+QsA-lxOdGlR?qp_B{r14=i%xT-(Q{2e5HLp%wE6uBwUAZNe0Ifam2eLJc2Xp;4Mrf!EKFg304|k8s{$|C47j72-3Z8d@#* zpMn}5^W7OW7i>PcGTDwz^yVzyM^Bq>Crt>zNXsXa4CkZ?$%xx6x)*yq05*mARRRuc z0Ko}xnRCY1Uw{2Q5MllA{aLU7@PB{!AMfc5KEFSq{J~pX{?*rZ9z)JT-v(aORCqQ| zI^9|Z5|)w$SYzO#urKEfI5zNBXvzNjVf>mh6)U*s`78iaUD#hm7>{dN7taTenl-X; zG2_zby%YtEv~uS6)n^=;gA4Oy36csXXN<{L<-W(uPQH^vdKh?38(wW#1y2j4>e4ddWC>d!Eoya((h|ZPgcmp(TWE`wai}RQ;-^=SR zH!FIy)I-HlUa@JHW`9b^bD=~9746k_dCmbl)8nB-bJ3euSS~Z_l#%WSR0p)zTbcrL z@!Ru{UQ&1FB1XajsC;h|MXnO9k%QiU^?NAEo-y@Y zh`ZKg4faLlInPs~46Rn6KoT+}wsqSg>^f=G_}oaPM0tlY9(2%Hz;k!oAZ}V?O|PX4 zYSO1YOO*kN_sS?}BuPW3?yx$sOxZw#nhQKQd8dR|ruJI@uKd8%JW@UNf(Hnh%P%4G0j3S0bgM(JnT zey%-5T6zEui#Q-!`yy!%SCs`&%2HcFhR7OwubvpI!J#Ff$n&i4AIuX(8fIBH>$9*5 z;IG~dw(fLL;;~3!v}WW+y#OGsB)EV#%*znN`dln)xJX<)0E-HDz#<2=y^#xFJ!Y7! zkxi=pWSC=noPLa44_$|KVN99-gPw2ldFC~3J;%bBb>aKx5&va}Sf;e-q5)3*d@z)R zhp#sLF#0$PT_+oSfrB^KaWfUnx-7Us>O{M!u_F9}BPdmTme9P_g7Pl>Z|rafaAfT{szv0+Dn~Md%zX&frnd80#HuE&*N`)qSsWqu_1C! z(ElpM$GrS@ZG?jw3M!S%uA{6p{f%nABG-a3Gk)c?48^WiXq`O7x>+lzrCF`3$vI7v za_WYMm1<6S;e zs1Evl;6!s)Py}^bgCTlNRZHk}okh1i=vn`nJp4vS<@HmSVCU)bYm6S*5Nu+Q%3>NM zzqw45e1tyAfiGXJR0ASxilgg94o)`8G*@y_iZ(ba&dQiLdDTgRn4x8v?#8~MzEz($ zDHO_>fH~W~uoNIf$sHVX*c&FR08UaEXm+NlFp8`LpdNKf2)#Nj>juH8QaVp?^AcZV zUKypLoW*GIq8A!Aj4_Z;lSGIu_e?2}Ma&UH*C1Ys-V>A>lp*so6&ML>0w+zcL~pj& zt>nS;`Y3}zC!5A5(1JyZx_A(sZL=IQMI5?auFL0oF$_(W#h_=Q9eOdyEYf7?;ge%CI*rLxGhSy4Hdo<%ZotA&(O-wCtH*izB}*_s@auJfE4H|QuO&QE=(Q$a}Ko@q`Na~ zi(Sjq5qbLRtf?izo~z}h4(T`|pJv319@Oc=&SM&4`6tD>o{6Ot%=aTg7fcVYQyKF! zlKp4%qbvT7Ise5CAy?n^LwN)Mf{WN*Y|%6lwfR9I_s{!V%P9V=f3Dvp zAtO3xvM|(TpY&}+|N0WApT5I#G#_H7(h}B&cEAA|86ocV`^` z^ga5I4%mErX@#j5c2ISo1G&5|?$`|Fgg!I#8Iew8ydZ0K8%&J(70C!kbpUSA^~TEKfYqGvJ-ICx^Q zOhBY?x+Q%IQ<@7Ub zTQu9n-vN<~fs*pF9-YW^r8z*6Jo>hk+C|K?3nha!DU;LDEF6?rluQ6!O(cuFr;EZK z6QEo{b$IR<$|f;N`kYZmS=UY{+yL1XGCh~+v`!Y4O=a}`;K}qV;#uJx84+S4X+@g@ z@6UN=$rqQJLWfu3(8F(6j0CA!v#>N!Aqi+p&EsNR?!U+~>4m`ti)ULEX^LOuwOwQ! zXIjo99Vpg0Gv+ZBi&)mPQDczJQz0=j8WrM8K_f>m2^91_@Nl7DCfKrOY`@8sQKK{W z;jnGQZ_8UPF+J;?g^7}FJ+l_g;%mhF95)T()drzqO=WdqDh7Tjpj5@&xXSNq z_noD^s8rrOx&)jk3f4$3sIjL$F0a#u+{w9GQXxZ95A!yo!@lfXGtBtxwlQ}0h2QcSZ08a`4o#>j5O`Sru?+wx%o5`HSj7bw~jjEwd zvJjkOJfZ1eRE|+>Q&V(kNp+C#BXN!EMqX)h)o7IfqR+bz$%h4eQ09a+l&knoo9t_mUty9IrTpkU%#*ktt4D$roxBgOlJ%m^gxB>`gx;w1 zJDqyVwNhKbVz4gvOzUMB#F`49lsD0zuz zG|i@d#GIc*94*hLG>@`gg1Dvway|67>hqHIVOaioEfQI&Mw9ZVs5o@;T2=0|d?)7? z@Xd@BA?yuxGae<GiPT5yF{qQPVl0D3c*Grzu@(d}mD@b;k5|a~z z4WK{=8}cm0%o6se>Lr$Z%>%MJEDJmiSFgWD6+^E^CM~5 zmMEfqhOCkE&)=iwitQKA2vBITn=|J7Q9g4u370inri{~{zC-(LkN%_mavoM#^A@(v z0>akiwd0#dDB_uEBTz z`+tmI{2zWFebb@o+ds46{~;NJG9a=@pGvKmhtVcxb{+ODx)(d(Zblq{!_~$2fQDby zpM%5k{R1}t*-vrvZ~hkQS&h-2{-yg7&I9ps!)q&NGvng&!WiS5+JBdktOf(dRL-Jj zXkF=I*MAk3NaCC{Ki;tjE(-qEr3SGdvzO`wf#@C@fH6L9L#43BhjOMDR z=Zt_ZSe0xT%K=)#Y_OMx)aw=EV^<&?IYh}JWBM%A9)dt2ZMb4(+qOF&6C1Ov=Pu zwD$(2A1BmQ5HB~9(y@5tuzo1Zl(-aIdpZFQn+EN(?V_tsWvO2Zy&Tm18>l9Aa7{pa zx#4dVhM{_2!GT7&YJ6C$odYgVs?cmZs~Oa5tBSFr8cg$bGQkU%L9;WtP{89MX3Z0~(wS)d2VOsE}ti zkCT~QQ+^%gGv(Un`t-x(`6H84YSp;(P1^fdEnb&Rf&;o4HC2(p2m4%tlGWH{AAV2s zl~JEBd7Td2biXt33INv6tuR_#WTFS_8Lj>0cRJP|#fCkLyvYlAqA8H;L0zn+A}7&+ zHbL$%;6VBfk@5o4(&R#FQ6moor`Q4jz?n|iOiC0nvBouPPhs>z2gjQy)DWUoPo)^7 zo6fe88P(l81k-{;C}>N(Bv%?3jVQ0HO1Jy~WYEoOJ<+OIF&^|ml;V{aRTjy-AcIhp z2Nku@+|FR6;1OC6=a*@%Io$$J4t=a|G^knfZJ@ja@>)TLNp}ns#OU-<0hbD+vFi`x zhPcq>sV4_C?xtp8pHyL-=!9O;-Ib=u1rKx$L6I!qJFAIFT=e8~MxK^Uy28<%QnIzp zEHcUTUK=C_i-9XE=86vKBxg^rf;ae%Tm&^x`fnEQiA1<={~Rz+7)` zin`g`dJc}0)TrH_Os{o`2r`;AW4pqN7O$JOFlyA4G0)k2PpardtKKVNb@<>(!P-S@ z+D(TjYlaQ$3jB~}mFRv8zfnhIYQxKrq*xHJNvGG+p_D1{I`2CI1G=dfO)$uIZ@AVf zR18+e1O%EfhQ2ZCAxbsZZWk+Da`sw1Y>MPo$AcL4Y3-bgOs2CnlzPA_lAMPml*iUQ z8@RD@^1%()+o7k=0AI_`4O@wOgtJXqCos^hMO~z8wawne1(CNsPr#Fsioiq8p3Nfb zs!WL!l{WI3kv+0%Q)a9uEy#2lKp=^q=PW_bhXB_>iW98*kL_?OF_P;shGxQp#bS&T%P9`IQh@3Ldo&@81DwS z;LtwbA@mLMFe9HQi46pcw$Q>PFAkjU4l~lj5nbO( zI`1%i^N2Fe*!<`kzHhi*R}^IKA7KIN?K=a**AD=I=Gl(&06Cj#qN{x98~8Th?f>qd z;Qs&g&v;u`Mt$o)bH0|O2n7~WO7?$W|22mmhaX*I_uDV9`^hteu0gZ!;CBsv`M>^u z?-2GK#%~`ne)oX=PhOz^=wMoS z=d!WJ2zCdKv z*jkx_P$xdGe$$}Y_XhUsGr;;TFTjR?Qe~uHnCl|1ZQq)K^OCZ`eYD8BEt+&vS@*LTr-*M<{NrJxFs z;~?u?YzFMSUmhj-Dsmo04>hq>@C8*Qf7P2T(*vm4p$0XFcZ>7~fXig|I30#6_~9H% z!t(Ds5MT)4<}Qp%fc{~6=GHljb=;ELqt`JSGAw9H6@wc?<)dTL0Z7wOCt7B#@*t_e zGQkgyIo;A&I?*ayMr+}F=|o*)P>O;bvs@5CV=98s#0zP6MGhF9jux=cF3FHB@7+`9 z@k9!}Q+LqS#GzzP;D8nA(ME(u9LVQ|HeR6yj$#a#3(}O#h>?^)7J$xSnUKtkr~y_K z>C7hI*aE8q(kL@Zbu1Y=z4F0vBCpL$RxP}kk*ML0(za6qs<(rD$=ar_g(TBs ziLQcGU0%uw!X|6kiuLMUSrs#Vu+|2 zhsq}A8?Nml&cD`>OWjA;Y?zmZHiTrZcmyX0a!yj1!CqW--A4~Kvw~m&d{0lBLn1=E|OO-!BKcX&n0C#1U(%|%a_d5OX+!;EyCFufV% zd1PT?W}L#Pncp4}wjKJ94n`|Yry1ouV|sTc`$6ONbg!%g`o=ep@Lj~_;|qj64X*NO zqT%GjNEc?wOV@qcIeMxL-#oxOhs|fCWTTL(T*oBEV?}ABfzm1oDXB0@GF5DUe2wPN zEsV9KQC6m_lf?ydX&&zf)FET@(E(BJt@_l=bLJktdY%35=rO&cnN_oG5qeG!Lyd3+ znBg!FljWR0*$djhiLY~LHhirUu+gDnhWN~^zzO~1M8csa*;}Irsz-Hv26PJk0dc_A zcj)NhQF2Dm39EunF(4c|JpO~P@aF&cPZ0YK7=US-&@_!1G%BF5PJOV?aP(2~!J}(i zgh(fS?>w4|9*yha|MZOgf9eYH^#$f{ACXf=9wvP6$NoD0w3&=vOg8Crvaa09l(2by ziF}$cefx-b)yuHN8M`Y<93S^T0V3xD1c$@#zC=FGIR3LYXs)*eBpVO!BQSzeDq(CX zU{L3b?%5XI^BvOTh`ZnaiZQ2$4rpaxA4&U%gFV+(7@51zp8>UE`1TRgAACns#EXte zFj>GpX?&FVRC7VR=n=0rsHx!i$8Ry;ozcBIpuOJ0Z5srgOy5y#-K_&m-pB6Nazv;bOq<^BeRZ9pJz^rVKNi4M%fC?<%@yJMI_nkI3g4<2R3p zyB6CYUo*AE$vGy*y7Z>1HZ{+(hvpNdAkF0l+fOe=#|=4CMB3*FsK+gtK=W~A^Y<_? zUFP`?{i_QBL!=g+IY6*8IRJT1$dfd~_XEnig8tb2Lu7SRB~BrmFA5pO$x$RfMg1s za{iTB5{D{K3!BEUZLQ9$GKlojtlD5>5F_ViVONGt1a^(t3l$k&RqZb2^Rq;f(l^N? z#6~<)oH4qA8H=f(?3-iaGYh8P#BB@g4r!V1u%Ni&%Yv9l~1j0FOCMcLP zrU!}nmaUvju6Y@VGz8~ue*=JAFrOx%j#!!m7-&>wt++NIiZ6>k%W0f}VUpV_-0=eB zQPNqYw{mLSDDt9`gw>^Iuny(sym(SIK_Z8}d2Z++3s?XNC(mTj`dyL>nKnWOg~_d? z7ptIrTh#*UujYa$P}IhS&5))4MMc%b9a%>zOEJH$t`YwnN!w9Lw)Rg7;5gXt)mlqa zPUx|f4JQDcq)s?z^^Q^?Nb6f6uIAGq#uE@4kla{TE2q}F=<8Ap*_6oi8-g-h<0_4V zYNG-9=Yk?tSq8z;&pQ`0JOmBajmfPZ z)FLpG^PDgnWvGY|8DP^{7OnC-0(fU03~F|x`x&Hgg!e*o$`-YP>dagXp0wpM zNbxGajrp#mR2GR?QJt@IEQlAk_<5NsSD2ZaO?5PWM&u~2@iI9O8N+#c3Vw7EQ8%xm z6tygr%OzT`jGRm=kfjAn*fd1{6fsNOj9h_470PRe3Cdxvi*>5CN|*0mTnjc6VrQjLTXiZLG+&3WaTl!Mtf9-(h- zI;{n2856Q-;)t)UJVl_BXdc>r+nNKePObAaL!}ONT4;mt&d_BScyNRbK{`b^lf*|V z0I;M)$mS|K$*^f8^E}u_&;0E9>1I3?n_`uu)A-0{zY`CG!p}*Mix&Z$Bh_nKoQ?B& z7FLU}4_0(GuBpXmg#Hf67*%u~ucU)Eaq+3q%{O{+*yb}@rX(hvFb0CgZJLZr_6Xg} z0B2xpI!?=BKPBF)7|GmHjjbaR9u+8(sa-xzP`zBumD7>FG2aPN7pZ+VAWHVtBJ3D1 z#j-X=H5a72fjFle6wP{qEB9-@9VACSqI-3KkAX$*?Rh!GCF9+E92^hsbU#?aM*r%9 z1r>nl?Fs4+6uO3v{HwFVIi`rrcLTzPlf%$+Vm7`%S%L!@D-phir{BBKxUtrX_W2HR zM@GT;?kH6Muh`u~HOz%&~ zj}x|EJY$5T0M=}xNM-hY#PL7=7OiWsySYF-H<+dgwN|8*jJ>e_i!maG2p)z?*H%`y!u;z6PwR(kZw;Xr}?Rz@7M9CrN*|QuR;u*Mh6GYXxBd< zJ*M-F^V=h?p1nqQxiy2@GIO6zqcji}x2T`NvwC`S#O9+5Y+hd26kLI`G|n>hT)vpf zDIp+eY#Z!8zA~v-9umrV=I45kYB}_*X|y184hT&||Kb3EQkv|X&~BB|>Omu64r$;h z*~sUKd*+Tz1IoRUe5VB0N-lg*F9EKt=4!(}u?b7ESFR#MENotdMm}?r zuV#*94P@Px$;N6ue6wLBveqslUn>)ha@AWw3vaD;eH+ld*rUBEoSq60QqD8x<0$65 zI-HX=Q2~^~y=dQ=OMe!ii?O&PC&rRMqQfa|7~-KrbG2cOk_lET<1n9RHuSre5$Z~9 zE)_n6g|Q$YcM?f#TD>;zTKH`P*XRI)`#yG^HHqV!M>{j}Q2_py?*DPyaV^3DStNBA ztb69;i1awx0h*2@@;O;e&>VW`(51|ori_kF(0qG_fxHz+k0Wb>ZG+}wgYKe-MVn3; zbxXh^PYL7u^HKv98UdGy->tdcAZ|O8-)POQUJdC;mIc`_+0JL*MKSMet%fSH-fJN( zo^>XB3o-$P<<~_tR~t0j1~mkFyr~qTkR4mHcn)M`FEE9}ZyJ%AkTt65PBm9#c@DKU zH?T|U+PH1eTx>+H3GqE3$Xrp)L=u?*RY_USIS1c@tcfOYSS6B_S~6MVMS92J3`|t; z!h46f>*2kCq$2x4CBqJdz^Cs8J8Pe`v-<|T=Xap=_m z7G5WjPVrnchWK)nYBi)y97<*VCc|I9ZJ+omXkwt30qo+x#JAAk z0?L-1r3NYx#bF-^Bm$^#Lj3lC7wUu>2GJB!rklNN%IXZ71t`!)S|tlo-18JySwdtZ zEXZL=$xI^oWntRkk}~Qb@&PsXP<@Lc!c(@w&g2%V#S>kea}ZXB6D_4oI(1>C0*wbW zQ$Cr}=W%8OFEWnMMxw7?DMaEts=wa@TD_3{Am7bQ9u{~mf#@8zkv{X zeaCDv4bl+{YGN_vG#NoQ+t89`>CJaHS>(vS%Fq(yh^<+XATUGP8?xH+m0 zwme<%YS`lAik+cTXzx*dMM*;YgacOU6bD_)&ZdznUvXyM=us*k>P4H6rLj_QC#a5o zRiw%PW5%Jj<{&hD*{~pBU2vx7g&>~_Yyo79xabT7S+h$JJmmqi8W$;=&X?z5HgwlX zu>t4Egb7|~_`=Kbg7VgCC@%n!1xN&y7PPWq&hO8#jBve99zq8k;e`H)h7;dVE3oJH zn%*8MMH0{tazC8&HZ_ks7E~4=s0aW3fb=jLyG7qaQRMlKMrG~I7U9{}zzpPq`EkVf z-J>uFxEJXr3OIZJ&^KsqL^G;j#xP^LJp-rLTdjo3pm8}?v)l?9nyKi{O*Ki-=Vu< z#GXlQri|%0pk}g3wD@0}zfQLU@^QlU^%c68drpa`ggS9rFg=bu#8s=UpsWD}XT)uX z&5Hw@{YvIV9TSGzlTpss@V*zVdAXfYhlKXkfnEbafTkfM9S7#fD`2LpU70Q?(pKZ4 zM|0?T_?L>>H!Oyvu_DWeUD6WC9J!TH-$J_Z@s`Fn#@qhd=rj zuV25!r@!^NfedT*g0dM>O6I|k5+xHUC8W&%d(NC9W+{AXt&F}t1Wb4L82;!TcE9%# z++7gutdq}J_A}o0Um*Y?0Oow2kSiNtU&<3^0>CL!_t62()dt6(zQ^$O<0^fD?^7L+ zAB7>b0!eBvXrJ%Uz1ZXY%R4;$;dhLp+%$`SfUF||z`;PYnhWA(kBjF!%bUK(Ohh>`{EhGu7MMO zfjr10S@ywN7#AG&9cnH(zk9^_7q_UXVE>!XDNFK>J}bj4Ln4~&)l$Wjwn5GX^X(Di zn{>CN{8=J#iWU5ovXZ_pn0&`LI+Ce}w)n6Kc3IuE@6={#e;JEM#VyU(uCUT%$< znFcnSrDOrcyiKElRq;O;bT?acH#=z4P*dh!C*Qlqx=^42({-0Aqq*LoyVz;m%WH( zgp(T0nKarr4z-E=Z4yb@T=rH&>cGJjKCdWX-8yGf52&wBP4ZmqS_7B3cU2%I`@JQl z#m7t%$KV{|MKB=R%t#&hdDa^wiKQ%d{)8^tKBfK8d>W7^f_F+{C^O|QD&O%PnI~b_ zN%)x_DWDb$ywH zRZuxZ4Shtr=jVndASpPd=SrF#&ZRT}{j2U?zJ;YjSKZLZn8HXnjJ}*gtI~gJ;}h zfuMKdM*t~QS8m|>I3bnEic;5l^H?Z`imgnJny@$wr;L0zKe=YEjYe_OP1>|m6)T1U z3;JB9Mb_dyd>0Tedzi7_EQnp=*6rKIC}2sP_RT~@*e=b*#A_RB+<@MgUA_ z=R0x6pBHvQ)u>iriBHsxWX?>Qhz@bn8ckmdn>@~_p4VvcX3!l>*&Lj7H|jY6Skq^Q zNYd=9*@IHv%9P=9<-@FvldRt|(zs7|K1P_W3i%2?qZJ7I)?@<8&dFn10KzB@?o@!e zEbDln);S);EJ@vf#g`zTX99vP^=?J=iq1g|w{&6?w2&x7T(uYr8ybFc0>2nbss1Z$ z$hPn?SX`SjpMs#WuHj)qU2T;;hSHn3>j%#asGi2MF26GG0;bR2R1*?aV#Uczl7El7mP zRZ>Q}AJM(qBj24-?`Pa?ACZ3gQ$F@F+JC(F_Mg7*g}p#+sh97npn^`3lm$_06&VZg z^Z)pdkxqk)A)eXL7F3_h-ay zgYCzcoHz-KtW239E3!AN*IP}T)D<}&n(Hmv>kVs$N$KK|(TF5zGv#=tymIy%m zY%A+^Mir)3p0Z6@%@EJ_OduRc2M-OCbgJmzkt>4pNOM9#wR)`PiaJm#M9&deG3+B{ zN*KvBE!92sZ~;)qL{`+Ug?oJk-$ul~<$8&XvcpWE%Niem$xW5dTii6*eRhp9(@P`x zz?akqwL)^D$FX^i>KaA#)lOIQv zT$mOTJx%2 z6n5)exF^ApQ5rp5>j5eKDRE##t`7mOb*NG!6#>|*JTJay;#ielw4?$z3TqV(F$UCL zYU^4om8^oYt*~8sIR)W-%7VL)# zTUlk@$hnEiUPr-k2qR%Rmno%o-YuSK`pi52=2@9O+NbOGuZ5PyA6C(FL4X9==)CB0 zG%82kx=ShS&1Cw>RjxUuvR8Ts*EIfEm`ytXL^(gn+?%mo2JI=U_Umei6w z&P#*p0})LplRPZ+bVa8_8xS^~c>$C;OG6;$XM(;vX<(`#eKyUK9D1id2D0g|ktV%4 z<~A&w4m>|!T~fWoW0o<|Xl6Yb%N3<&J0MkF5=86cgyO8!9~##byVelel9_&pFGgMDt?M&xcHV>uCklz}bD%Kb6Ip`J!mJU393S$mZgV znP7RkR?za=`ZmggwWcGu<^DMVFXmMose(zB=&@!YE8U+Px){JXCtw&qS3MMrG0+F2 zVy1_MI!D=qOcchnOtchvl&LGPTj1t?nytB7gH?4*ELwERD1fOYbWmpLQf(eEJcX(|ONZ2h+3;c%WYD}t)1uA^L}Oc~R+ zkBnZr+}ISN2z5T6C(Mt7QT@4SVa<4+5~lYL%;dhBBtjmZ$*?Q?e++=5mAPdLw%U_o#FnG5+Gnb-cAY-GF>QqJMcn|H&nSOqGhz zeuuZDdxmW%d!8^LPcA5tm#g}9^MHVgQp_s_T7 zkLEYjH}8J5Gt(_Kz|F#lsvaxTU3m)u&W5`IWk?b^CC|;aGqBAH*fkX%Fd0`Ks7v+E z!=;MQM1&aOb`E8jG2ZJQw>m{DgpSPX+H5;c(%|9yfZ9bkILw;~^KpQgdanMs4rrzr zw;ck6SrP(iw3Q$$-NB!N4EiNPM`=skwlV~Ofd8bax=ZfEdCp8QLdE%fHj_sH3xKfx zZh8g_;1EK9_Z~rH6#Cx^QiKrDbsaXlEzaK^F?{zx(_!V#{#k#u;>jofivSNYz!={i zasI_E^5Y~re1~$L7L!%|$U;AZi{E>N>Fo)3|L`lstKKxg4$jtI8NVMzT64wb^(EY= z9_OFE!|9JJx{vm3T2V~{osZPznrDN2cIYE6e(x3XFyr0d`x)amKe-@~T`EG;6FeA% zozTT6)2YqJ7jVI2ygTFlKl%mYuB8XcwgtL?CPzzW0;r8wt+-0vN-DVfr{CcGi#v2L z_Sk%OiLi_C+W*P751dGk(`RxP7ZyqqdIb!?iCHhaV$Re!`4I@SK?R>Q% zhVLW%hK#H6-4W+s+@VYv`=2~R_v(O92~gK*kqxSEQLO}xYbluS&PWd*9Ic$zEx^5ph%6a^DraVit*b=q=y0hCzm*U{v4r;HU!Bh()eqTXQPl6Qd2=1 zXVj@+eD{c2f!*gfIDGaD5M$LmB$Hdzz(Sk@7B(tXnvU`P5owxn_{mGOhi+jAjEr2i z2tmNW1OTXk;No&*WbG7bn%jy}GN$8X^%3ha)^W|X45J(y!|p)Pi~d|} zv~^7`bKWG9|bsqW`E}rooWjK!>n09Aczo zwFy7X1~bA1e`6jA49pLM$rO}n_m{Lh&z=f^qg#B3)|5+ImTqj-# zo48_E67ZaEPq3n1>;8&Gx&p@Z#zTj7vR)o$jJKy{{YuS=%04d*VxZZGndPAeym)vB z<8?}>W%w>{Q*_8Fi~-+p5VtVN$@rO%!|M5yuPwd`+J`vlZ^B-NX$=RCnaI0u^a%g`$9TRxkq&}6hK=qb-{5$48;`--wPoJOtgTDGABqfILoz{^z_J1UQ} z83a4=u87+fp^3)Cs{)GDQW3SLs8itv>4Q;+j4mh_HxIM9S66$o+=7-U(?KU7GF{in zM?Q{7ibAc53Yu^L$Qc-64_WBNn?U|WYSpG?s^C|5y^68TELSJ^C4x?`@p(pmoEC$a zW}&G9g63&jg@?p^L@Rdkn1J(S4*vuWBBCOiWz8_4OQ*T?JDTR?V?uo|njy)<4P6WK ztWcJMf(J1m2t%UO0t^N7{Q%AE4r2O7T~J++RiWZkESkz%nZ7VTjw^E&ks55&JhPgK zqs2>l2N!6ZlgGqOL0AUbWcfaF%IO^$GLzE1c;LI1$rD8mUt^*OLhkh;7kYA?5|TWK z4#i?#@|b}k8T!TuCoX|_(R11#*&ODP4#hPUqrzwT-GZSQ4Y1Ayao?eRF6MfLNO2lw zI*`j`Lg|e9M{q%=PJKjky)|D7%8uzGouxoZAaJOi*BKfXJ9%GEcP0r zzLu%38)zoV9K?aTz1WblD;u3=Ir|EuWEP!1a0lZxY$Mvs4WdLXS~A0|&bo}1Q-^O` z@8AK?&3=RSvg4YoLIo984rMWN4U!s}WlO!FdpT*Mdaw|D1-!%X z)jhY#7>vOXFZ%^Jlfzn{XCDI)87l_|3}4^dI`usbiQ4PU2d{S)ks11kc+sJKwnMEI zdxOjFtY9C9{xu+sB^}AcS21BLw#`Y+t%b4de$hQcmCxa zP%1VbUn2Zg%fjUD%=;r=Eb)R){|` z`$wbWLVt_ngsaak(OhkWiKgp^&xvN3uNf&k6U1X-oU#8)FVJ3Xq0w)3&hXVCohThs zCL|oJF{=eeneT6QXsVib4j_Orh%w$oDQ4HobdR|_sg1=Ay7We zvgdEmJ>PP$p>=vD;8#+{bbG=m4~528r`t1K`@KgvbZBq37LQ)0*-WFe$b{BsQ9jQ| zcW2i2Z9sdyMgL-Na*2GJfNjS$rS*Y;->6HE6FR0ZbGB&HNzCi4znN4I ziCka4zD4(QTWU0yDIiL5Blb zDfu`e9(uHgo_k1)D6Q<_GxtCjAU&ERIo)BA8O<5}WrudR;gBUT1)|i-*MnzXkaV#! zaA2)6M-PW~+abh&5*n12JwwR_Ne!0$vi^(qIl}7k-lJ_>%DqE2hKVv(O3nzoR*Xi; zzP7%kP*(1|FfinK0XVR&j_1C`j#o+VNbEzLpN)xY6eBx#*%yaxVfo#11hp1Jq88dT4SQVhM!QuIqvV2mUNkJKCs%iVK$6-=t>I9*S|BkBqzun+Dz!t(;GzTn|aOFfheg z)1*a?=J&>J1J|&rvdFhF3wkY6A+OV;6YRk=~M7Ui$>L9sR;^=h8CuY6{4a)B6TV);0u-suolsA*D`8SzoSf9OIBHj zXg{_1P()MKs7CEE%UT;l{?3vmLU2e=baeVYyuQl1krWHay~9E=uCq{*P^HlYYIVj+ zfJj3Kv@C__`Y)dda)nK_Q~+f>s6mjjAwDdo6-1iv2QkWOt+1_1RZLPy3FAhnB+K;* z4*7AS3}WA!Hds#H==v7NB8PN;vN?Ruj&1XwAw@W ztn$%gz8i4*@)nzq4%mP399|9J1caJy&q&9Ck%J#R zSH9(aKmF_-LKCq6$xC@Q1a!@uwv4x@rztbwR_X$u`{COMl=}(0&u`2_WDPtI?~k&E z-IL$I?-2Mqzj>gM-1XKxFSLM2$MO4q7Iq={zSG+ifjTS9*%UZHD7gvodV`0*|0TZp zU;P6dZY~kx;vMj-{PW)9;g|2R|IdGpSO4~3!TkP=Klva3U*T>iT)epcm3-z8#&K5Q z{`MZv|J}ce!(VxYbU)gDq%Qd8C-UKIMHilrlemma4Ij4`v~V@ zfRA=q)Y@~3t6mDrheLo_VEl#?_V#AW36uB@SZ;l;OZ055PhO7-Oz%%P|KbkKMK30* z(U@~Z&q0T$&y!oc9Ma>2^UvSId5_I!mrML$5hK9)i+7N zW8}hQj(11&A6;Po`7=Z@EmR+|d`<+oWnJh}($tRm_AF^68ytS}+&mRfNyoON8^akIFny zmjP6*b>%UKr7szinOEvyN|R@_$<`ju$L00<+c`K~;;`e6EDU3@h@9DK#-NQA_fL9L z!G@8cXB?@MxK@+1EL%Ht(#5E68m}tY5G1k9_YoRf3xxz$_oL>8W#t_sTYVc4T1l$d zM3G@@AVIbJ5J_KJC_tK#Y&54XLi2{z5HU{@NhbN7z|!22$|BQpS+KDq=UWfVG8Yt` z(&~Z$M83dcTl39Twg5=Xn>glXHP8`hg2k|@yNA7p6z6SZ?G>a*u+1=7 z9#Sjc)-|MTn-*{`7#|-c>S)E_P(-H`V5){FsmFkCm0`dbyz#pS(HN3uN$Qbk#^xdh zINSs(m>2ImHkx^yS%m7fl!a|(i1OfJl+8$xu_$p|H5W{GCo|;HMd=*iH_WHCW>kvi zA`Mv(_uq7yV6iLOjLXi{T=a-HTWgHczz5vTRkGkcYR*WfY_GA6GZ6%6pKVP`UPjVL z^N{!)wv@W0N%X(E;mNhDBhkP9#lhY~B`^6nfm%LBFs+MUHP%#3UfgwPp6zVPUW9Rx zA0_|=#e?yyb+xGgq<)^*6#KqGb3tkqs<0K#lp~Z{;NV%jtP9X8Yki!pX>Ffv5w;y0 zskt!j@HA8U!7snOhg_5NI9qH~bLi2%*h^u!P%P(%5j8JbzN!>m*`SL|SmUNecfF%m zM^Hl>0&Ua7U{rUk3n1{IEK`Pa9_=M3Ilh+(v&5iI_h(Y`yGX;!%7bw+f#UmwE~0(5 z6PlbDwI)hWN(_hxaq3-zjatwZvK!i)Et>1?DuT{g3~Sglh+$>Us0@{nn`k;saKWR! z-ts!CD|HcuPTQcpT0la2&cLRWjAtXz;k$@(o-BIH%jVx)^^!0nz@nyCh+ebI1+I^1 z_C3m!ZK9=sM%+;MYnoq=Mfa^HUe2L^v4?LX(%nF+x$c>sG*vBvVaBMA%(7JAJkWi7 zfzXjMmrt{SlU|Ig+RKei0~KVbnbSiA&(x1s7XX0MH}?zZ<(YKhH>;RGUDlpS9OL5% z-#6I*)(g1caQymiN%cvE&iY-1-!xCbJ6Y4?*Y_wXqknygxNR^U&lui4kQpcYc5_Kj zln=o>1QxWXpS?#swAlRQ2DwzEZ|{u}R;EmP?$yTfuGfFgI}BexV7@(L`{NtKWK;ra`r2RTUqPaj<7$KH?MaC| zzp}p{l6dfg=@8z%Skgv{Ow{IwQO;riWIf3nA`dej{@@$*uP<@=mp>*0Mwm)v%y7q% zvCmz^hlZR4@0nOq=8T)yS7@K_Z7u44KR=uopj*E~g-nzvp~=S);o}Qj{KgA{xuR(< zW5)b2F#lY^u=@1%zK<4Fz5D1w*cDll6DE`)BMlR3a8Q+|PPX94ByFxXC}T!@vBl=2 z!!qrC98t$iO26k9*V{l!IN4AAs{^L@XN0~%w-+Xn2eSAR&{v6jZFO?qiX6(f!jOI< z|1Cg0&-~vGCOs*G7^MmWR^#O09J-qw+RF`xY=vj1dSdDQMlP7o3q#jMZxYk)`3~Ln zmbI31D6%i-kxhyh2}~L^#Q+OaB6_qh_h_H(OuIk6JIWbGIf$}#tC$VeRA7mu5Hi<&CV-`-<*^I*^T0)%ITE#*H@^KLIb6@5e$Q^?ad_r~1R20T5EBIjZ3 zr5CqD`G9G?u!2z8e;!$_<|v9mXiY+-zEuIT2)*I!eD^ei)hl(l_*f zy6PFcxZ_ajcX#hmwR-VTa(x8u&2x!)m4;QZJihGA?GX- zdnSK%H#?L4k!6|8yc5bqQ`2E#NKrPy!B=;)N8HmhDj)e=6_H<=|649VbWEoamP;AP za_BC%Xf7yKOAqwes1-=#yfFJc5d32JYkgL&=r6bEE_NKSJW5XlU>Zj=bFZGSQ4?0w z1vKss8}x@Qlf+K5)e9+Sq#{G`;Lyt8NA2=bF#weTZxH}V)0cvnJtAcr zuA_>lL*o%NIAP@-2mpv=BgcIUEub`w2Y^LfJMEDQfnf(AhCZ^WGC2f*0BgpJ6n$Fs zxW;oqUi4^!H)OSpnnSD2iL;433-F9`l1$Eq6J$=ZRfEIg*XY<bG&676elZqv+sWl)UMN?%0ph(zDbG*LsA)1`wzV!vrf+t1comG!8s} zbH6ZSyeE>~dLTPSW5EgNwSZNsPxa1Wx;xOb zp&Tc)FZSp^x{&E1i~D?@sbfzC&BX?$u~bHt0C(fp4=86gZ{4d4LE-rw%9JpDa|FPs zvnuOwy>FpboPT+ba-OmIlueNDf<@NUtX9`Gg*JXPMpEY0LSSESfKwp!432C@s6G_ry29x^OH$g=pu?eVIRCc zlfiWPH$H^}2&UZ+OMzQpY@RZv@3R`@NZ$YU3nseUo-rRM-ZN!W2oRXgGkr4z)U~%L zjALz|?@-2!_y3rpE!p?FrL&N6dF;v@dq(KRQt2CC{bG9Lad0=a=syymOe(Bc>z0Uxu&l008~R zm)LxKflgV00wh`FwFl3-;E|>o^EipT;f(R!5zW5C_D46^y|}VkP8%~#eS@c0Oi3Bz zMD{^GCyd`cqD%>!R~OiPcFl=1Rx-YnDTUT`BXn@czcW8bLQ@y9{m~7!FZa;KA)O`~ zWQ#$&?;2DYerSJCk~CruXSCNl>^{G-WVABQC?~Q#N}}_>nYcqfCQwFPCoY`bXV>Vi zcI1SlDj+~cE*Zs1`iKIo6@a7UxoV>o1GXPsa_y8V%uhB@sbrKUTkXrCC}j!tNU4qU z9-Es3nx2C*m8v2$siKsEG^zB(!8MKR>MfY>!?McdCtkCBxni0OFFi)nqRaAGK2 zWJrTt+2jX_((T0PF~~KPHA?>m()OeHRA|%M?#XDZ2?##GH|*ccq*{#`;ox_q{X3~M zYs!?hR);zjng})#HB{7zgH|>9^q`Ef_60SOP0fE^;Ka|$q!}}l=e2p zYKE{~%b8~ra-sRUu-2_Nj0D5Nu7NL6%onAvI}XUxY{0ASXAahUs}XiQ5X8!(M86Aw zH{Biql@rR4P9=28gb7^~=|V5PZ^ATC@^b#>K^Siy(x^$y=pw;{WBNyX!Q6jN;fW%#k=6b_tdYCW|6R#VmRs0@MbKH#iIH3xd3_y&fJD>?D zHDkOznh`1=Gi9W}z%OI_iI-vM*^^WcOeaQ}FN030#~l!jPA(HHJMhv%2Xm0fLBI|+ z)%-$e9%l9;C=u^5DdUPDYYw^#Uh;&6?thv|r_#;9xhGESOQY`1sK-Um!?TSGLMQ-& z7R8XJgR~(Q3JzFJ{Tbtk$OkgLIm$*|7J9H0`W00?5cEW^3sa(FRA8PG(l^T{r^YCH z5a~Xv4;wdKxfarR%*PRU7*_8AYkKWk0DKsA^A=f4Xo%*`k0T%jQV|Uk7mgDO7f{oR z>dqe|v6N93)rk67mr1ZtCsFCZ?>3E@Wg5aSvXCHCYL#&qtzExzVpA3`IszFf3;mv6 z3Gj@#D-s)nQ6rQ@$DXTrDl`OUqNj#xq)&h*EWm*duX9Cu&*_Ct*=2(dl3h&mL}z-b zd=|4&?~p@587AP2We2Nloa>kwW4fa@-7EN}?{S`4AkKVH?M6Cq6G$29ak5DiBM3>u zsuT5cG`ew&wX^0=@0-xM?k1VcaC+K3BVAAZCz2q{d6=Ix=EQdRUg?3xSKd1`S3SBH z2lG=Pb7I7NKO&E_L{K@q&H`DO3%ARRlI&mXIXNlvd!~%>?nD#WRx`b|8P?~c@W7c0 zk?t4!B~o(A$g0B)yk^QUS~F>Cm1b|s=&m+spHc5uQAF-lFemyhxNWoO(lj?)ma1k&}*cQ}Ca>CI)GNJ&ee6!uCfu@J+z!=kJa2<-kTKY#P3Y(4n9F zIfwZ@<2kpV-vG|x@n`QA=0+t@6m}hdr=DT!zv?i4$7xgl*%i_-Vfu0~16Ezj@z8T= zryqC^RI&x+_m1yrOlQDG;TaG&o$VX>IEm5ipVKShU*NCg0v{qubQq6kj7Lc_`8BgB z006b(_V<4Ycc9ML%apK88JIwyC70nh`V2gIDMA-<{MkEa+SDI$d_&;rtaDI#>VF zr|4cBmcmzn!E`^ERCH;^ROZPVXnc1<*hF0Ywb$sM?M*_E&IAV2b8SxvGX z(0I(p5pEN)|BV-D4xPmA>Au3LH-vGeH13+ES#2Zywnh5x0S+Lj*EIl?)yK0oO*5cO zPB~uz?j2#*8aN!g2Ak`h?fdCC3&=U!)K4ku5O6275&iQW2TO2hwi?&S-%LV^sSi4^2X&O)HK;yd&Z8Jf3J~PkoQFOletJ#cl95v2I`SN- zIRlfVgT+X_|1eoy?gHPVx!It7zB3<*>D_7ZW6FypmOeK-ff)=FptoM-RVi;P5r-zaC@~#mEM8{!5X!t$P ztSe9NAEkze)rPLHNvGV^Tk2To83&3h9Qm6|MHYsd-cz!v6W5OylWgzNUH9m34kk-3sgRsI(N~8i`IMPJWSS*q zVKp@fn~2@B3&a?Z9wq_L=({n`GbJ{qNS`VLKlA7d2%8q|p-0oVWIYcvlY@#dDNx}4 z>i_h=R8{j;Mc-yD0HJajvIB0usvpq|*r0`|Xr1av%{M^}x1yBE(pl3!T5;->SjaLL znMf@L7gZ>6rh%6}OVK2q8Z*%$njSfyXS*P^5{Xsmf+ZTL{=SkHqIsh6qDS1c_Rm!Z zrU<+m%1QTX$fQ2tsB~p+uQp=j!tB>PkRn}k<)T-_Nb3~Mkd|v5w;ieS;*gt;6XuhE zDl;{LJPa2k->5~C7*Vwm&D9oh-%45qDR=qE#*$2nMO$T{24urNPTXYn5^W>Kk=y`g zqhYJbn#FqxQeUgY9j3yGxVo!~rl?8=Z5d}d@QOT`c=D%ID=!hCHl>aNCQSwNd0Z7c zLO+&GLo3N523SEro<@xarP0Yll43y{R(0*hllQ5$!h`P-FS^AKpa|+O=BbDd8jrU$ zrBcnveGaX}RtkW}31+bghf_!A(_~GA`4<4PCOw*cXNe-#tOyzoIi&Mx=GuVDmIQD} zoF2qYyP&C3c2^r6F05t z8nvi2e-3T@+`>|V9^e8N=%lz7NGzK;DGSP4m31ZCo5qA%ZnNGaN#7_FK^xz3{fUwQ zcmmL7qz4{Y@z8T~2Nvz!K>r1Jk7n1{)OW4pLj}@l

q=k(JW~lW*j4=D|H>G_w9H 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

o33&kIcT(Kf4oVG|Z7Y2N=ka4R%r; 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%0Ap!%nbuRe|h5T(aXlb0v^B<#~Q(ojI7m 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�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

RuC8lZrYssb3*|g4LQiN080B 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 literal 0 HcmV?d00001 diff --git a/app/static/img/Style/bc.svg b/app/static/img/Style/bc.svg new file mode 100644 index 0000000..5650709 --- /dev/null +++ b/app/static/img/Style/bc.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/Style/icon_labels.svg b/app/static/img/Style/icon_labels.svg new file mode 100644 index 0000000..3fb3743 --- /dev/null +++ b/app/static/img/Style/icon_labels.svg @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/SyntaxLogo.png b/app/static/img/SyntaxLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd524f2c4aad7db094b588236b1d9abb8cc0201 GIT binary patch literal 43551 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%0Au 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 V7k2u3Y&`-$2Q7~6%QJH&{|6O4)2sjh literal 0 HcmV?d00001 diff --git a/app/static/img/TBC.png b/app/static/img/TBC.png new file mode 100644 index 0000000000000000000000000000000000000000..6374d764f38ce3df16f062637c96ab3e6d731d21 GIT binary patch literal 1207 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

No items found

' + } +} + +var ColorPickerSelectedBodyPart = -1 + +document.addEventListener('DOMContentLoaded', async () => { + const ResponseAvatarRules = await fetch('/static/avatarrules.json?version=2') + AvatarRules = await ResponseAvatarRules.json() + AssetCardTemplate = document.getElementsByClassName('asset-card-template')[0] + PaginationNextBtn = document.getElementById('pagination-next-btn') + PaginationPreviousBtn = document.getElementById('pagination-back-btn') + PaginationText = document.getElementById('pagination-page-number') + const ResponseUserAvatar = await fetch('/avatar/getavatar') + const UserAvatar = await ResponseUserAvatar.json() // This should respond with {"bodyColors": [headColor, torsoColor, leftArmColor, rightArmColor, leftLegColor, rightLegColor], "currentlyWearing": [assetId]} + var CurrentlyWearingCardHolder = document.getElementById('currentlywearing-card-holder') + for (let i = 0; i < UserAvatar.currentlyWearing.length; i++) { + var Asset = UserAvatar.currentlyWearing[i] + AssetTypeDict[Asset.id] = {"id": Asset.id, "assetType": Asset.type, "name": Asset.name, "moderation_status": Asset.moderation_status} + AssetsCurrentlyEquipped.push(Asset.id) + var AssetCard = await CreateNewAssetCard(Asset.id, Asset.name) + CurrentlyWearingCardHolder.appendChild(AssetCard) + AssetCard.setAttribute("data-isundercurrentwearing", "true") + } + + UserBodyColors.Head = UserAvatar.bodyColors[0] + UserBodyColors.Torso = UserAvatar.bodyColors[1] + UserBodyColors.LeftArm = UserAvatar.bodyColors[2] + UserBodyColors.RightArm = UserAvatar.bodyColors[3] + UserBodyColors.LeftLeg = UserAvatar.bodyColors[4] + UserBodyColors.RightLeg = UserAvatar.bodyColors[5] + + const SaveChangesButton = document.getElementById('savechanges-btn') + + const SelectTabInput = document.getElementById('select-tab-input') + const EquipAssetsTab = document.getElementById('equip-assets-tab') + const AvatarScalingTab = document.getElementById('avatar-scaling-tab') + + SelectTabInput.addEventListener('change', () => { + var selectedTabIndex = Number(SelectTabInput.options[SelectTabInput.selectedIndex].getAttribute('data-tab')) + if (selectedTabIndex == 1) { + EquipAssetsTab.style.display = 'block' + AvatarScalingTab.style.display = 'none' + } else if (selectedTabIndex == 2) { + EquipAssetsTab.style.display = 'none' + AvatarScalingTab.style.display = 'block' + } + }) + + const HeadColor = document.getElementById('head-bodycolor') + const TorsoColor = document.getElementById('torso-bodycolor') + const LeftArmColor = document.getElementById('leftarm-bodycolor') + const RightArmColor = document.getElementById('rightarm-bodycolor') + const LeftLegColor = document.getElementById('leftleg-bodycolor') + const RightLegColor = document.getElementById('rightleg-bodycolor') + + HeadColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.Head) + TorsoColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.Torso) + LeftArmColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.LeftArm) + RightArmColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.RightArm) + LeftLegColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.LeftLeg) + RightLegColor.style.backgroundColor = await ConvertBodyColortoHex(UserBodyColors.RightLeg) + + HeadColor.addEventListener('click', () => { + ColorPickerSelectedBodyPart = 0 + ColorPickerOverlay.style.display = 'block' + }) + TorsoColor.addEventListener('click', () => { + ColorPickerSelectedBodyPart = 1 + ColorPickerOverlay.style.display = 'block' + }) + LeftArmColor.addEventListener('click', async () => { + await new Promise(r => setTimeout(r, 100)); // This fixes an issue where the torso and left arm would be selected at the same time + ColorPickerSelectedBodyPart = 2 + ColorPickerOverlay.style.display = 'block' + }) + RightArmColor.addEventListener('click', async () => { + await new Promise(r => setTimeout(r, 100)); + ColorPickerSelectedBodyPart = 3 + ColorPickerOverlay.style.display = 'block' + }) + LeftLegColor.addEventListener('click', () => { + ColorPickerSelectedBodyPart = 4 + ColorPickerOverlay.style.display = 'block' + }) + RightLegColor.addEventListener('click', () => { + ColorPickerSelectedBodyPart = 5 + ColorPickerOverlay.style.display = 'block' + }) + + const ColorPickerOverlay = document.getElementById('color-picker-overlay') + const ColorPickerContent = document.getElementById('color-picker-content') + const ColorPickerClose = document.getElementById('color-picker-close') + + ColorPickerClose.addEventListener('click', () => { + ColorPickerOverlay.style.display = 'none' + }) + // We need to add each BrickColor to the color picker content + for (let i = 0; i < AvatarRules.bodyColorsPalette.length; i++) { + const ColorPickerItem = document.createElement('p') + ColorPickerItem.classList.add('color-picker-item') + ColorPickerItem.setAttribute("title", AvatarRules.bodyColorsPalette[i].name) + ColorPickerItem.setAttribute("data-brickcolorid", AvatarRules.bodyColorsPalette[i].brickColorId) + ColorPickerItem.style.backgroundColor = AvatarRules.bodyColorsPalette[i].hexColor + ColorPickerContent.appendChild(ColorPickerItem) + } + const ColorPickerItems = document.getElementsByClassName('color-picker-item') + for (let i = 0; i < ColorPickerItems.length; i++) { + ColorPickerItems[i].addEventListener('click', async () => { + if (ColorPickerSelectedBodyPart > -1) { + var SelectedBrickColor = ColorPickerItems[i].getAttribute('data-brickcolorid') + if (ColorPickerSelectedBodyPart == 0) { + HeadColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.Head = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 1) { + TorsoColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.Torso = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 2) { + LeftArmColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.LeftArm = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 3) { + RightArmColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.RightArm = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 4) { + LeftLegColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.LeftLeg = Number(SelectedBrickColor) + } else if (ColorPickerSelectedBodyPart == 5) { + RightLegColor.style.backgroundColor = await ConvertBodyColortoHex(Number(SelectedBrickColor)) + UserBodyColors.RightLeg = Number(SelectedBrickColor) + } + } + SaveChangesButton.style.display = 'block' + ColorPickerSelectedBodyPart = -1 + ColorPickerOverlay.style.display = 'none' + }) + } + + PaginationNextBtn.addEventListener('click', () => { + if (PaginationNextBtn.disabled){ + return + } + PaginationPreviousBtn.disabled = true + PaginationNextBtn.disabled = true + if (!IsThisTheLastPage) { + PageNumber += 1 + LoadPageForAsset(SelectedAssetType) + } + PaginationText.innerText = `Page ${PageNumber+1}` + }) + PaginationPreviousBtn.addEventListener('click', () => { + if (PaginationPreviousBtn.disabled){ + return + } + PaginationPreviousBtn.disabled = true + PaginationNextBtn.disabled = true + if (PageNumber > 0) { + PageNumber -= 1 + LoadPageForAsset(SelectedAssetType) + } + PaginationText.innerText = `Page ${PageNumber+1}` + }) + var SelectAssetTypeElement = document.getElementById('select-asset-type') + SelectAssetTypeElement.addEventListener('change', () => { + // The option element has a data-assettype attribute which we can use to get the asset type + SelectedAssetType = Number(SelectAssetTypeElement.options[SelectAssetTypeElement.selectedIndex].getAttribute('data-type')) + PageNumber = 0 + PaginationPreviousBtn.disabled = true + PaginationNextBtn.disabled = true + PaginationText.innerText = `Page ${PageNumber+1}` + LoadPageForAsset(SelectedAssetType) + }) + + const changeRigTypeBtn = document.getElementById('change-rigtype-btn') + if ( UserAvatar.rigType == "R6" ) { + changeRigTypeBtn.innerText = "R15" + } else { + changeRigTypeBtn.innerText = "R6" + } + rigType = UserAvatar.rigType + changeRigTypeBtn.addEventListener('click', async () => { + changeRigTypeBtn.innerText = rigType + if ( rigType == "R6" ) { + rigType = "R15" + } else { + rigType = "R6" + } + SaveChangesButton.style.display = 'block' + }) + + async function HandleScaleSlider( scaleName ) { + UserAvatarScaling[scaleName] = UserAvatar.scales[scaleName] + const sliderParent = document.getElementById(`${scaleName}-scale-group`) + + const SliderInput = sliderParent.getElementsByClassName("scaling-slider")[0] + const SliderValueText = sliderParent.getElementsByClassName("scaling-value")[0] + const ScaleRules = AvatarRules.scales[scaleName] + + SliderInput.min = ScaleRules.min * 100 + SliderInput.max = ScaleRules.max * 100 + SliderInput.step = ScaleRules.step * 100 + SliderInput.value = UserAvatar.scales[scaleName] * 100 + + SliderValueText.innerText = `${UserAvatar.scales[scaleName] * 100}%` + + SliderInput.addEventListener('input', () => { + SliderValueText.innerText = `${SliderInput.value}%` + SaveChangesButton.style.display = 'block' + UserAvatarScaling[scaleName] = SliderInput.value / 100 + }) + } + + await HandleScaleSlider( "height" ) + await HandleScaleSlider( "width" ) + await HandleScaleSlider( "head" ) + await HandleScaleSlider( "proportion" ) + + LoadPageForAsset(11) // Default: Shirt +}) \ No newline at end of file diff --git a/app/static/js/assetrate.js b/app/static/js/assetrate.js new file mode 100644 index 0000000..76d0ce0 --- /dev/null +++ b/app/static/js/assetrate.js @@ -0,0 +1,216 @@ +async function initVoteContainer( containerElement ) { + const assetId = containerElement.getAttribute('data-assetid') + const XCSRFToken = document.getElementById('X-CSRF-TOKEN').getAttribute('data-xcsrf') + if ( XCSRFToken == null ) { + console.log('XCSRFToken is null, cannot continue') + return + } + var AssetLikesCount = Number(containerElement.getAttribute("data-likes")) + var AssetDislikesCount = Number(containerElement.getAttribute("data-dislikes")) + var UserVoteStatus = containerElement.getAttribute("data-uservote-status") // 2 = Dislike, 0 = No vote, 1 = Like + + const LikeButton = containerElement.getElementsByClassName('icon-like')[0] + const DislikeButton = containerElement.getElementsByClassName('icon-dislike')[0] + const VotePercentageElement = containerElement.getElementsByClassName('votepercentage')[0] + const LikesElementText = containerElement.getElementsByClassName('vote-up-text')[0] + const DislikesElementText = containerElement.getElementsByClassName('vote-down-text')[0] + + const VoteFeedbackText = containerElement.getElementsByClassName('vote-feedback-text')[0] + + const UpdateVoteCount = async () => { + LikesElementText.textContent = AssetLikesCount + LikesElementText.setAttribute("title", AssetLikesCount) + DislikesElementText.textContent = AssetDislikesCount + DislikesElementText.setAttribute("title", AssetDislikesCount) + + const TotalVotes = AssetLikesCount + AssetDislikesCount + var LikePercentage = Math.round((AssetLikesCount / TotalVotes) * 100) + if ( TotalVotes == 0 ) { + LikePercentage = 50 + } else if ( TotalVotes == 1 ) { // AssetLikesCount / TotalVotes may be Infinity + LikePercentage = AssetLikesCount == 1 ? 100 : 0 + } + VotePercentageElement.style.width = `${LikePercentage}%` + } + const UpdateVoteButtons = async () => { + // Check if the "selected" className is present, if so, remove it if it's not the correct one + if ( LikeButton.classList.contains('selected') ) { + if ( UserVoteStatus != 1 ) { + LikeButton.classList.remove('selected') + } + } else if ( UserVoteStatus == 1 ) { + LikeButton.classList.add('selected') + } + if ( DislikeButton.classList.contains('selected') ) { + if ( UserVoteStatus != 2 ) { + DislikeButton.classList.remove('selected') + } + } else if ( UserVoteStatus == 2 ) { + DislikeButton.classList.add('selected') + } + } + const UpdateUserVoteStatus = async ( newVoteStatus ) => { + var OriginalVoteStatus = UserVoteStatus; + var OriginalLikesCount = AssetLikesCount; + var OriginalDislikesCount = AssetDislikesCount; + let ServerVoteResponse; + if ( newVoteStatus == UserVoteStatus ) { + return; + } + UserVoteStatus = newVoteStatus + if ( newVoteStatus == 1 ) { + AssetLikesCount++ + if ( OriginalVoteStatus == 2 ) { + AssetDislikesCount-- + } + } + if ( newVoteStatus == 2 ) { + AssetDislikesCount++ + if ( OriginalVoteStatus == 1 ) { + AssetLikesCount-- + } + } + if ( newVoteStatus == 0 ) { + if ( OriginalVoteStatus == 1 ) { + AssetLikesCount-- + } + if ( OriginalVoteStatus == 2 ) { + AssetDislikesCount-- + } + } + await UpdateVoteButtons() + await UpdateVoteCount() + + try { + ServerVoteResponse = await fetch(`/vote/${assetId}/${newVoteStatus}`,{ + method: 'POST', + headers: { + 'X-CSRF-TOKEN': XCSRFToken + } + }) + } catch (error) { + console.log(`Error occured while trying to update user vote: ${error}`) + return + } + if ( ServerVoteResponse.status != 200 ) { + console.log(`Server responded with status code ${ServerVoteResponse.status} while trying to update user vote`) + UserVoteStatus = OriginalVoteStatus + AssetLikesCount = OriginalLikesCount + AssetDislikesCount = OriginalDislikesCount + VoteFeedbackText.textContent = `Error while trying to update vote, Status: ${ServerVoteResponse.status}` + VoteFeedbackText.style.display = 'block' + await UpdateVoteButtons() + await UpdateVoteCount() + return + } + return; + } + await UpdateVoteCount() + await UpdateVoteButtons() + + LikeButton.addEventListener('click', async () => { + // Check if its already selected, if so, remove the vote + if ( LikeButton.classList.contains('selected') ) { + await UpdateUserVoteStatus(0) + return + } + await UpdateUserVoteStatus(1) + }) + DislikeButton.addEventListener('click', async () => { + // Check if its already selected, if so, remove the vote + if ( DislikeButton.classList.contains('selected') ) { + await UpdateUserVoteStatus(0) + return + } + await UpdateUserVoteStatus(2) + }) +} + +async function initFavoriteContainer( containerElement ) { + const assetId = containerElement.getAttribute('data-assetid') + const XCSRFToken = document.getElementById('X-CSRF-TOKEN').getAttribute('data-xcsrf') + if ( XCSRFToken == null ) { + console.log('XCSRFToken is null, cannot continue') + return + } + var FavoriteCount = Number(containerElement.getAttribute("data-favorite-count")) + var UserFavoriteStatus = containerElement.getAttribute("data-userfavorite-status") == "True" ? true : false + const FavoriteButton = containerElement.getElementsByClassName('icon-favorite')[0] + const FavoriteButtonText = containerElement.getElementsByClassName('text-favorite')[0] + + const UpdateFavoriteCount = async () => { + FavoriteButtonText.textContent = FavoriteCount + FavoriteButtonText.setAttribute("title", FavoriteCount) + } + const UpdateFavoriteButton = async () => { + if ( UserFavoriteStatus ) { + FavoriteButton.classList.add('favorited') + } else { + FavoriteButton.classList.remove('favorited') + } + } + const UpdateUserFavoriteStatus = async ( newFavoriteStatus ) => { + var OriginalFavoriteStatus = UserFavoriteStatus; + var OriginalFavoriteCount = FavoriteCount; + let ServerFavoriteResponse; + if ( newFavoriteStatus == UserFavoriteStatus ) { + return; + } + UserFavoriteStatus = newFavoriteStatus + if ( newFavoriteStatus ) { + FavoriteCount++ + } else { + FavoriteCount-- + } + await UpdateFavoriteButton() + await UpdateFavoriteCount() + + try { + if ( newFavoriteStatus ) { + ServerFavoriteResponse = await fetch(`/favorite/${assetId}`,{ + method: 'POST', + headers: { + 'X-CSRF-TOKEN': XCSRFToken + } + }) + } else { + ServerFavoriteResponse = await fetch(`/favorite/${assetId}`,{ + method: 'DELETE', + headers: { + 'X-CSRF-TOKEN': XCSRFToken + } + }) + } + } catch (error) { + console.log(`Error occured while trying to update user favorite: ${error}`) + return + } + if ( ServerFavoriteResponse.status != 200 ) { + console.log(`Server responded with status code ${ServerFavoriteResponse.status} while trying to update user favorite`) + UserFavoriteStatus = OriginalFavoriteStatus + FavoriteCount = OriginalFavoriteCount + await UpdateFavoriteButton() + await UpdateFavoriteCount() + return + } + return; + } + + await UpdateFavoriteButton() + await UpdateFavoriteCount() + + FavoriteButton.addEventListener('click', async () => { + await UpdateUserFavoriteStatus(!UserFavoriteStatus) + }) +} + +document.addEventListener('DOMContentLoaded', async () => { + const assetRateContainers = document.getElementsByClassName('usersVote') + for(let i = 0; i < assetRateContainers.length; i++){ + await initVoteContainer( assetRateContainers[i] ) + } + const assetFavoriteContainers = document.getElementsByClassName('favorite-button-container') + for(let i = 0; i < assetFavoriteContainers.length; i++){ + await initFavoriteContainer( assetFavoriteContainers[i] ) + } +}) \ No newline at end of file diff --git a/app/static/js/bootstrapv3.min.js b/app/static/js/bootstrapv3.min.js new file mode 100644 index 0000000..9bcd2fc --- /dev/null +++ b/app/static/js/bootstrapv3.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/app/static/js/catalog.js b/app/static/js/catalog.js new file mode 100644 index 0000000..9ba5141 --- /dev/null +++ b/app/static/js/catalog.js @@ -0,0 +1,153 @@ +/* Functions used to buy or take assets */ + +function buyAsset(assetId, assetName, expectedPrice, currencyType){ + const PurchaseModal = new bootstrap.Modal(document.getElementById('purchaseModal'), { keyboard: false }) + const purchaseModalContent = document.getElementById('purchase-modal-content') + const purchaseModalTitle = document.getElementById('purchase-modal-title') + const purchaseModalButton = document.getElementById('purchase-modal-btn') + const purchaseModalClose = document.getElementById('purchase-modal-close') + + const csrfToken = document.getElementById('csrf_token').getAttribute('data-csrf-token') + + purchaseModalTitle.textContent = `Confirm purchase of ${assetName}` + purchaseModalContent.textContent = `Are you sure you want to buy ${assetName} for ${expectedPrice == 0 ? 'Free' : expectedPrice}${expectedPrice != 0 ? (currencyType == 0 ? " Robux" : " Tix") : ''}?` + + purchaseModalButton.onclick = () => { + purchaseModalButton.disabled = true + purchaseModalClose.disabled = true + purchaseModalContent.textContent = `Processing purchase...` + fetch(`/catalog/api/purchase`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': csrfToken + }, + body: JSON.stringify({ + assetId: Number(assetId), + expectedPrice: Number(expectedPrice), + currencyType: Number(currencyType) + }) + }).then(response => response.json()).then(data => { + if(data.success){ + window.location.reload() + }else{ + purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${data.message}` + } + }).catch(error => { + purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${error}` + }) + } + purchaseModalButton.disabled = false + purchaseModalClose.disabled = false + PurchaseModal.show() +} + +async function PurchaseLimitedOffer( assetId, assetName, expectedPrice, expectedOwner, itemOwnershipId ) { + const PurchaseModal = new bootstrap.Modal(document.getElementById('purchaseModal'), { keyboard: false }) + const purchaseModalContent = document.getElementById('purchase-modal-content') + const purchaseModalTitle = document.getElementById('purchase-modal-title') + const purchaseModalButton = document.getElementById('purchase-modal-btn') + const purchaseModalClose = document.getElementById('purchase-modal-close') + + const csrfToken = document.getElementById('csrf_token').getAttribute('data-csrf-token') + + purchaseModalTitle.textContent = `Confirm purchase of ${assetName}` + purchaseModalContent.textContent = `Are you sure you want to buy ${assetName} for R$${expectedPrice}?` + + purchaseModalButton.onclick = async () => { + purchaseModalButton.disabled = true + purchaseModalClose.disabled = true + purchaseModalContent.textContent = `Processing purchase...` + var LimitedPurchaseResponse = await fetch("/catalog/api/purchase-limited", { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': csrfToken + }, + body: JSON.stringify({ + assetId: Number(assetId), + expectedPrice: Number(expectedPrice), + expectedOwner: Number(expectedOwner), + itemOwnershipId: Number(itemOwnershipId) + }) + }) + var LimitedPurchaseResponseJson = await LimitedPurchaseResponse.json() + if(LimitedPurchaseResponseJson.success){ + window.location.reload() + } else { + purchaseModalContent.textContent = `There was an issue processing your purchase, please try again later. Error: ${LimitedPurchaseResponseJson.message}` + } + } + purchaseModalButton.disabled = false + purchaseModalClose.disabled = false + PurchaseModal.show() +} + +function updateOffsaleCountdown( offsaleAt ) { + var offsaleElement = document.getElementById('offsale-countdown') + if (!offsaleElement) { + console.warn("Could not find offsale countdown element") + return + } + var timeLeft = offsaleAt - new Date() + if (timeLeft <= 0) { + return + } + var hours = Math.floor(timeLeft / 1000 / 60 / 60) + var minutes = Math.floor(timeLeft / 1000 / 60) % 60 + var seconds = Math.floor(timeLeft / 1000) % 60 + offsaleElement.textContent = `${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}` +} + +document.addEventListener('DOMContentLoaded', async () => { + const AssetInfoMetaTag = document.getElementById('asset-info') + var AssetId = null + var DoesUserOwnAset = false + var AssetName = "" + var isAssetLimited = false + var isAssetOnsale = true + var offsaleAt = null + if(AssetInfoMetaTag){ + AssetId = AssetInfoMetaTag.getAttribute('data-asset-id') + AssetName = AssetInfoMetaTag.getAttribute('data-asset-name') + DoesUserOwnAset = AssetInfoMetaTag.getAttribute('data-user-ownasset') + DoesUserOwnAset = DoesUserOwnAset == "true" ? true : false + isAssetLimited = AssetInfoMetaTag.getAttribute('data-islimited') + isAssetLimited = isAssetLimited == "true" ? true : false + isAssetOnsale = AssetInfoMetaTag.getAttribute('data-asset-onsale') + isAssetOnsale = isAssetOnsale == "true" ? true : false + offsaleAt = AssetInfoMetaTag.getAttribute('data-offsale') + if(offsaleAt != null){ + offsaleAt = new Date(offsaleAt * 1000) + //offsaleAt = Date.UTC(offsaleAt.getFullYear(), offsaleAt.getMonth(), offsaleAt.getDate(), offsaleAt.getHours(), offsaleAt.getMinutes(), offsaleAt.getSeconds()) + //offsaleAt = new Date(offsaleAt) + } + } + + if (offsaleAt != null ){ + updateOffsaleCountdown(offsaleAt) + setInterval(() => { + updateOffsaleCountdown(offsaleAt) + }, 1000) + } + const PurchaseButtons = document.getElementsByClassName('purchase-button') + for(let i = 0; i < PurchaseButtons.length; i++){ + if (!DoesUserOwnAset || (isAssetLimited && !isAssetOnsale)) { + if (!isAssetLimited || isAssetOnsale) { + PurchaseButtons[i].onclick = () => { + if ( !AssetInfoMetaTag ) { + buyAsset(PurchaseButtons[i].getAttribute('data-asset-id'), PurchaseButtons[i].getAttribute('data-asset-name'), PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-currency-type')) + } else { + buyAsset(AssetId, AssetName, PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-currency-type')) + } + } + } else { + PurchaseButtons[i].onclick = async () => { + await PurchaseLimitedOffer(AssetId, AssetName, PurchaseButtons[i].getAttribute('data-expected-price'), PurchaseButtons[i].getAttribute('data-expectedowner'), PurchaseButtons[i].getAttribute('data-expectedid')) + } + } + } else { + PurchaseButtons[i].setAttribute("class", PurchaseButtons[i].getAttribute("class").replace("purchase-button", "purchase-button disabled")) + } + } +}) \ No newline at end of file diff --git a/app/static/js/groupMembers.js b/app/static/js/groupMembers.js new file mode 100644 index 0000000..261b3bc --- /dev/null +++ b/app/static/js/groupMembers.js @@ -0,0 +1,110 @@ +async function initalizeComponent( memberElement ) { + const GroupId = Number(memberElement.getAttribute('data-groupid')) + const RoleSelectElement = memberElement.getElementsByClassName('members-select-role')[0] + + const PaginationBackBtn = memberElement.getElementsByClassName('pagination-back-btn')[0] + const PaginationTextElement = memberElement.getElementsByClassName('pagination-page-number')[0] + const PaginationNextBtn = memberElement.getElementsByClassName('pagination-next-btn')[0] + + const UserCardTemplate = document.getElementsByClassName('user-card-template')[0] + const UserCardContainer = memberElement.getElementsByClassName('user-card-container')[0] + + var SelectedRoleId = 0 + var CurrentPage = 1 + + if (RoleSelectElement.options.length > 0) { + SelectedRoleId = RoleSelectElement.options[0].value + } else { + console.error('No role found in RoleSelectElement') + return; + } + + async function getPageResult( RolesetId, PageNumber ) { + try { + const response = await fetch(`/groups/members_json/${GroupId}?role=${RolesetId}&page=${PageNumber}`) + const result = await response.json() + return result + } catch (error) { + if (error.status == 429) { + await new Promise(r => setTimeout(r, 5000)); + return await getPageResult( RolesetId, PageNumber ) + } else { + console.error(error) + alert('An error occured while trying to get the page result, please try again later. Status: ' + error.status) + return null + } + } + } + + async function CreateUserCard( UserId, Username ) { + const UserCard = UserCardTemplate.cloneNode(true) + const UserCardUsername = UserCard.getElementsByClassName('user-name')[0] + const UserCardAvatar = UserCard.getElementsByClassName('avatar-img')[0] + + UserCardUsername.innerText = Username + UserCardAvatar.src = `/Thumbs/Avatar.ashx?userId=${UserId}&x=100&y=100` + + UserCard.style.display = 'block' + UserCard.classList.remove('user-card-template') + UserCard.href = `/users/${UserId}/profile` + UserCardContainer.appendChild(UserCard) + } + + async function updatePage( RolesetId, PageNumber ) { + PaginationNextBtn.disabled = true + PaginationBackBtn.disabled = true + UserCardContainer.innerHTML = '' + + const result = await getPageResult( RolesetId, PageNumber ) + const Users = result.users + + PaginationTextElement.innerText = `Page ${PageNumber}` + if (PageNumber == 1) { + PaginationBackBtn.disabled = true + } else { + PaginationBackBtn.disabled = false + } + + if (result.nextpage) { + PaginationNextBtn.disabled = false + } else { + PaginationNextBtn.disabled = true + } + for (let i = 0; i < Users.length; i++) { + const User = Users[i] + await CreateUserCard( User.userId, User.username ) + } + if ( Users.length == 0 ) { + const NoUsersElement = document.createElement('p') + NoUsersElement.innerText = 'No users found' + NoUsersElement.className = 'w-100 text-center mt-auto mb-auto' + UserCardContainer.appendChild(NoUsersElement) + } + } + + RoleSelectElement.addEventListener('change', async () => { + SelectedRoleId = RoleSelectElement.value + CurrentPage = 1 + await updatePage( SelectedRoleId, 1 ) + }) + + PaginationBackBtn.addEventListener('click', async () => { + CurrentPage-- + await updatePage( SelectedRoleId, CurrentPage ) + }) + + PaginationNextBtn.addEventListener('click', async () => { + CurrentPage++ + await updatePage( SelectedRoleId, CurrentPage ) + }) + + await updatePage( SelectedRoleId, CurrentPage ) +} + +document.addEventListener('DOMContentLoaded', async () => { + const MemberElements = document.getElementsByClassName('group-member-list') + for (let i = 0; i < MemberElements.length; i++) { + const MemberElement = MemberElements[i] + await initalizeComponent( MemberElement ) + } +}) \ No newline at end of file diff --git a/app/static/js/newTrade.js b/app/static/js/newTrade.js new file mode 100644 index 0000000..e9e147c --- /dev/null +++ b/app/static/js/newTrade.js @@ -0,0 +1,369 @@ +document.addEventListener('DOMContentLoaded', async () => { + const TradeInfoElement = document.getElementById('trade-info') + if ( TradeInfoElement == null ) return + + const RequesterUserId = Number(TradeInfoElement.getAttribute('data-requester-userid')) + const TargetUserId = Number(TradeInfoElement.getAttribute('data-target-userid')) + const XCSRFToken = TradeInfoElement.getAttribute('data-xcsrf-token') + const isTOTPEnabled = TradeInfoElement.getAttribute('data-totp-enabled') == 'True' + + const RequesterInventoryElement = document.getElementById('requester-inventory-container') + const TargetInventoryElement = document.getElementById('target-inventory-container') + + const ItemCardTemplate = document.getElementById('item-card-template') + ItemCardTemplate.id = '' + + var UAIDInfo = {} + var RequesterOffer = [] + var TargetOffer = [] + + const RequesterItemOfferContainer = document.getElementById('requester-item-offer-container') + const TargetItemOfferContainer = document.getElementById('target-item-offer-container') + + const TargetOfferValueText = document.getElementById('target-offer-value') + const RequesterOfferValueText = document.getElementById('requester-offer-value') + const TargetOfferRobuxInput = document.getElementById('target-offer-robux-input') + const RequesterOfferRobuxInput = document.getElementById('requester-offer-robux-input') + + const TradeSumbitButton = document.getElementById('trade-submit-btn') + const TOTPInputElement = document.getElementById('otp-code-input') + + if ( isTOTPEnabled ) { + TOTPInputElement.addEventListener('input', async () => { + if ( TOTPInputElement.value.length > 6 ) { + TOTPInputElement.value = TOTPInputElement.value.slice(0, 6) + } + await formValidation() + }) + TOTPInputElement.style.display = 'block' + } + const TransparentBackgroundTop = document.getElementById('transparent-background-top') + const SubmitButtonFeedback = document.getElementById('submit-btn-feedback') + + var isAlreadySubmitting = false + const submitTradeRequest = async () => { + if (TradeSumbitButton.disabled) return + if ( isAlreadySubmitting ) return + isAlreadySubmitting = true + TradeSumbitButton.disabled = true + TransparentBackgroundTop.style.display = 'block' + SubmitButtonFeedback.style.display = 'none' + + const RequesterOfferRobux = Number(RequesterOfferRobuxInput.value) || 0 + const TargetOfferRobux = Number(TargetOfferRobuxInput.value) || 0 + const RequesterOfferUAIDs = RequesterOffer + const TargetOfferUAIDs = TargetOffer + + const TradeRequestResponse = await fetch(`/trade/${TargetUserId}/create`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': XCSRFToken + }, + body: JSON.stringify({ + "RequesterOfferRobux": RequesterOfferRobux, + "TargetOfferRobux": TargetOfferRobux, + "RequesterOfferUAIDs": RequesterOfferUAIDs, + "TargetOfferUAIDs": TargetOfferUAIDs, + "TOTPCode": isTOTPEnabled ? Number(TOTPInputElement.value) : null + }) + }) + let TradeRequestResponseJSON + try { + TradeRequestResponseJSON = await TradeRequestResponse.json() + } catch (e) { + SubmitButtonFeedback.textContent = `${TradeRequestResponse.status}: An error occurred while submitting the trade request.` + SubmitButtonFeedback.style.display = 'block' + TradeSumbitButton.disabled = false + TransparentBackgroundTop.style.display = 'none' + isAlreadySubmitting = false + return + } + if ( TradeRequestResponse.status != 200 ) { + SubmitButtonFeedback.textContent = `${TradeRequestResponse.status}: ${TradeRequestResponseJSON.message}` + SubmitButtonFeedback.style.display = 'block' + TradeSumbitButton.disabled = false + TransparentBackgroundTop.style.display = 'none' + isAlreadySubmitting = false + return + } + window.location.href = `/trade/view/${TradeRequestResponseJSON.tradeId}` + } + + const formValidation = async () => { + if ( RequesterOffer.length == 0 || TargetOffer.length == 0 ) { + TradeSumbitButton.disabled = true + return + } + if ( RequesterOffer.length > 4 || TargetOffer.length > 4 ) { + TradeSumbitButton.disabled = true + return + } + if ( isTOTPEnabled && TOTPInputElement.value.length != 6 ) { + TradeSumbitButton.disabled = true + return + } + TradeSumbitButton.disabled = false + } + + const UpdateOfferValue = async () => { + var RequesterOfferValue = 0 + var TargetOfferValue = 0 + + RequesterOffer.forEach(ItemUAID => { + RequesterOfferValue += UAIDInfo[ItemUAID].rap + }) + TargetOffer.forEach(ItemUAID => { + TargetOfferValue += UAIDInfo[ItemUAID].rap + }) + + RequesterOfferValue += Number(RequesterOfferRobuxInput.value) + TargetOfferValue += Number(TargetOfferRobuxInput.value) + + TargetOfferValueText.textContent = `R$ ${TargetOfferValue}` + RequesterOfferValueText.textContent = `R$ ${RequesterOfferValue}` + await formValidation() + } + + TargetOfferRobuxInput.addEventListener('input', async () => { + if ( Number(TargetOfferRobuxInput.value) < 0 ) { + TargetOfferRobuxInput.value = 0 + } + if ( Number(TargetOfferRobuxInput.value) > 100000 ) { + TargetOfferRobuxInput.value = 100000 + } + await UpdateOfferValue() + }) + RequesterOfferRobuxInput.addEventListener('input', async () => { + if ( Number(RequesterOfferRobuxInput.value) < 0 ) { + RequesterOfferRobuxInput.value = 0 + } + if ( Number(RequesterOfferRobuxInput.value) > 100000 ) { + RequesterOfferRobuxInput.value = 100000 + } + await UpdateOfferValue() + }) + + const ReloadOfferImages = async () => { + const RequesterOfferChildren = RequesterItemOfferContainer.children + for ( let i = 0; i < RequesterOfferChildren.length; i++ ){ + const ItemCard = RequesterOfferChildren[i] + const ItemCardImage = ItemCard.querySelector('.item-image') + if (RequesterOffer[i] == null) { + ItemCardImage.src = '' + ItemCardImage.alt = '' + ItemCardImage.style.display = 'none' + ItemCard.style.cursor = 'default' + ItemCardImage.onclick = null + continue + } else { + if (ItemCardImage.classList.contains('d-none')) { + ItemCardImage.classList.remove('d-none') + } + ItemCard.style.cursor = 'pointer' + ItemCardImage.style.display = 'block' + ItemCardImage.src = `/Thumbs/Asset.ashx?x=100&y=100&assetId=${UAIDInfo[RequesterOffer[i]].assetId}` + ItemCardImage.onclick = async () => { + await RemoveItemFromOffer(RequesterUserId, RequesterOffer[i]) + } + } + } + + const TargetOfferChildren = TargetItemOfferContainer.children + for ( let i = 0; i < TargetOfferChildren.length; i++ ){ + const ItemCard = TargetOfferChildren[i] + const ItemCardImage = ItemCard.querySelector('.item-image') + if (TargetOffer[i] == null) { + ItemCardImage.src = '' + ItemCardImage.alt = '' + ItemCardImage.style.display = 'none' + ItemCard.style.cursor = 'default' + ItemCardImage.onclick = null + continue + } else { + if (ItemCardImage.classList.contains('d-none')) { + ItemCardImage.classList.remove('d-none') + } + ItemCard.style.cursor = 'pointer' + ItemCardImage.style.display = 'block' + ItemCardImage.src = `/Thumbs/Asset.ashx?x=100&y=100&assetId=${UAIDInfo[TargetOffer[i]].assetId}` + ItemCardImage.onclick = async () => { + await RemoveItemFromOffer(TargetUserId, TargetOffer[i]) + } + } + } + await UpdateOfferValue() + } + + const AddItemToOffer = async ( UserId, ItemUAID ) => { + if ( UserId == RequesterUserId ) { + if ( RequesterOffer.includes(ItemUAID) ) return + if ( RequesterOffer.length >= 4 ) { + const RemovedItemUAID = RequesterOffer[0] + await RemoveItemFromOffer(RequesterUserId, RemovedItemUAID) + } + RequesterOffer.push(ItemUAID) + } + if ( UserId == TargetUserId ) { + if ( TargetOffer.includes(ItemUAID) ) return + if ( TargetOffer.length >= 4 ) { + const RemovedItemUAID = TargetOffer[0] + await RemoveItemFromOffer(TargetUserId, RemovedItemUAID) + } + TargetOffer.push(ItemUAID) + } + const AllItemCards = document.querySelectorAll('.item-card') + AllItemCards.forEach(ItemCard => { + const ItemCardUAID = ItemCard.getAttribute('data-item-uaid') + if ( ItemCardUAID == ItemUAID ) { + const ItemCardImage = ItemCard.querySelector('.item-card-image') + ItemCardImage.classList.add("border-primary") + } + }) + await ReloadOfferImages() + } + + const RemoveItemFromOffer = async ( UserId, ItemUAID ) => { + if ( UserId == RequesterUserId ) { + if ( !RequesterOffer.includes(ItemUAID) ) return + RequesterOffer.splice(RequesterOffer.indexOf(ItemUAID), 1) + } + if ( UserId == TargetUserId ) { + if ( !TargetOffer.includes(ItemUAID) ) return + TargetOffer.splice(TargetOffer.indexOf(ItemUAID), 1) + } + const AllItemCards = document.querySelectorAll('.item-card') + AllItemCards.forEach(ItemCard => { + const ItemCardUAID = ItemCard.getAttribute('data-item-uaid') + if ( ItemCardUAID == ItemUAID ) { + const ItemCardImage = ItemCard.querySelector('.item-card-image') + if ( ItemCardImage.classList.contains("border-primary") ){ + ItemCardImage.classList.remove("border-primary") + } + } + }) + await ReloadOfferImages() + } + + const LoadInventoryPage = async ( UserId, InventoryElement, PageNumber ) => { + InventoryElement.innerHTML = '' + const ParentElement = InventoryElement.parentElement + const PaginationBackBtn = ParentElement.querySelector('.pagination-back-btn') + const PaginationNextBtn = ParentElement.querySelector('.pagination-next-btn') + const PaginationPageNumber = ParentElement.querySelector('.pagination-page-number') + + PaginationBackBtn.disabled = true + PaginationNextBtn.disabled = true + PaginationPageNumber.textContent = `Page ${PageNumber}` + + const InventoryResposne = await fetch(`/trade/${UserId}/inventory?page=${PageNumber}`) + if ( !InventoryResposne.ok ) return + const InventoryData = await InventoryResposne.json() + + InventoryData.data.forEach(Item => { + const NewItemCard = ItemCardTemplate.cloneNode(true) + NewItemCard.setAttribute('data-item-assetid', Item.id) + NewItemCard.setAttribute('data-item-name', Item.name) + NewItemCard.setAttribute('data-item-uaid', Item.uaid) + NewItemCard.setAttribute('data-item-serial', Item.serialNumber) + NewItemCard.setAttribute('data-item-rap', Item.rap) + NewItemCard.classList.add('item-card') + + const ItemCardImage = NewItemCard.querySelector('.item-card-image') + ItemCardImage.src = `/Thumbs/Asset.ashx?x=100&y=100&assetId=${Item.id}` + ItemCardImage.alt = Item.name + + const ItemCardName = NewItemCard.querySelector('.item-card-name') + ItemCardName.textContent = Item.name + ItemCardName.href = `/catalog/${Item.id}/` + + const ItemCardSerial = NewItemCard.querySelector('.item-card-serial') + if (Item.serialNumber != null) { + ItemCardSerial.textContent = `#${Item.serialNumber}` + } else { + ItemCardSerial.remove() + } + NewItemCard.style.display = 'block' + InventoryElement.appendChild(NewItemCard) + + UAIDInfo[Item.uaid] = { + 'assetId': Item.id, + 'serialNumber': Item.serialNumber, + 'rap': Item.rap, + 'name': Item.name, + 'ownerId': UserId, + } + if ( UserId == RequesterUserId ) { + if ( RequesterOffer.includes(Item.uaid) ) { + ItemCardImage.classList.add("border-primary") + } + } + if ( UserId == TargetUserId ) { + if ( TargetOffer.includes(Item.uaid) ) { + ItemCardImage.classList.add("border-primary") + } + } + ItemCardImage.style.cursor = 'pointer' + ItemCardImage.addEventListener('click', () => { + if ( ItemCardImage.classList.contains("border-primary") ){ + RemoveItemFromOffer(UserId, Item.uaid) + return + } + AddItemToOffer(UserId, Item.uaid) + }) + }) + if ( InventoryData.data.length == 0 ){ + const NoItemsMessage = document.createElement('p') + NoItemsMessage.className = "text-secondary text-center mt-5 mb-5 w-100" + NoItemsMessage.textContent = "User does not have any tradable items" + InventoryElement.appendChild(NoItemsMessage) + } + + PaginationBackBtn.disabled = PageNumber <= 1 + PaginationNextBtn.disabled = !InventoryData.nextPage + } + + await LoadInventoryPage(RequesterUserId, RequesterInventoryElement, 1) + await LoadInventoryPage(TargetUserId, TargetInventoryElement, 1) + + var RequesterPageNumber = 1 + const RequesterPaginationBackBtn = RequesterInventoryElement.parentElement.querySelector('.pagination-back-btn') + const RequesterPaginationNextBtn = RequesterInventoryElement.parentElement.querySelector('.pagination-next-btn') + + var TargetPageNumber = 1 + const TargetPaginationBackBtn = TargetInventoryElement.parentElement.querySelector('.pagination-back-btn') + const TargetPaginationNextBtn = TargetInventoryElement.parentElement.querySelector('.pagination-next-btn') + + RequesterPaginationBackBtn.addEventListener('click', () => { + if ( RequesterPaginationBackBtn.disabled ) return + if ( RequesterPageNumber <= 1 ) { RequesterPaginationBackBtn.disabled = true; return } + RequesterPageNumber-- + LoadInventoryPage(RequesterUserId, RequesterInventoryElement, RequesterPageNumber) + }) + + RequesterPaginationNextBtn.addEventListener('click', () => { + if ( RequesterPaginationNextBtn.disabled ) return + RequesterPageNumber++ + LoadInventoryPage(RequesterUserId, RequesterInventoryElement, RequesterPageNumber) + }) + + TargetPaginationBackBtn.addEventListener('click', () => { + if ( TargetPaginationBackBtn.disabled ) return + if ( TargetPageNumber <= 1 ) { TargetPaginationBackBtn.disabled = true; return } + TargetPageNumber-- + LoadInventoryPage(TargetUserId, TargetInventoryElement, TargetPageNumber) + }) + + TargetPaginationNextBtn.addEventListener('click', () => { + if ( TargetPaginationNextBtn.disabled ) return + TargetPageNumber++ + LoadInventoryPage(TargetUserId, TargetInventoryElement, TargetPageNumber) + }) + + TradeSumbitButton.addEventListener('click', async () => { + if ( TradeSumbitButton.disabled ) return + await submitTradeRequest() + }) + + await formValidation() +}) \ No newline at end of file diff --git a/app/static/js/presence.js b/app/static/js/presence.js new file mode 100644 index 0000000..a82b1e8 --- /dev/null +++ b/app/static/js/presence.js @@ -0,0 +1,5 @@ +setInterval(function() { + if (document.hasFocus()) { + fetch('/presence') + } +}, 50000); \ No newline at end of file diff --git a/app/static/svg/navigation.svg b/app/static/svg/navigation.svg new file mode 100644 index 0000000..70b040d --- /dev/null +++ b/app/static/svg/navigation.svg @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/swagger/favicon-16x16.png b/app/static/swagger/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..8b194e617af1c135e6b37939591d24ac3a5efa18 GIT binary patch literal 665 zcmV;K0%rY*P)}JKSduyL>)s!A4EhTMMEM%Q;aL6%l#xiZiF>S;#Y{N2Zz%pvTGHJduXuC6Lx-)0EGfRy*N{Tv4i8@4oJ41gw zKzThrcRe|7J~(YYIBq{SYCkn-KQm=N8$CrEK1CcqMI1dv9z#VRL_{D)L|`QmF8}}l zJ9JV`Q}p!p_4f7m_U`WQ@apR4;o;!mnU<7}iG_qr zF(e)x9~BG-3IzcG2M4an0002kNkl41`ZiN1i62V%{PM@Ry|IS_+Yc7{bb`MM~xm(7p4|kMHP&!VGuDW4kFixat zXw43VmgwEvB$hXt_u=vZ>+v4i7E}n~eG6;n4Z=zF1n?T*yg<;W6kOfxpC6nao>VR% z?fpr=asSJ&`L*wu^rLJ5Peq*PB0;alL#XazZCBxJLd&giTfw@!hW167F^`7kobi;( ze<<>qNlP|xy7S1zl@lZNIBR7#o9ybJsptO#%}P0hz~sBp00000NkvXXu0mjfUsDF? literal 0 HcmV?d00001 diff --git a/app/static/swagger/favicon-32x32.png b/app/static/swagger/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..249737fe44558e679f0b67134e274461d988fa98 GIT binary patch literal 628 zcmV-)0*n2LP)Ma*GM0}OV<074bNCP7P7GVd{iMr*I6y~TMLss@FjvgL~HxU z%Vvj33AwpD(Z4*$Mfx=HaU16axM zt2xG_rloN<$iy9j9I5 + + + Swagger UI: OAuth2 Redirect + + + + + diff --git a/app/static/swagger/swagger-docs.json b/app/static/swagger/swagger-docs.json new file mode 100644 index 0000000..94170d4 --- /dev/null +++ b/app/static/swagger/swagger-docs.json @@ -0,0 +1,1608 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Syntax Public API", + "description": "Documentation for the Public API", + "version": "1.0.0" + }, + "paths": { + "/public-api/v1/users/{userid}": { + "get": { + "summary": "Get User by ID", + "tags": [ + "Get User Info" + ], + "description": "Retrieve user information by user ID.", + "parameters": [ + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the user." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "description": "Example Description", + "id": "Input ID", + "is_banned": "Input Status", + "last_online": "Unix Timestamp", + "membership": "Input Membership", + "username": "Input Username", + "inventory_rap": "Inventory Rap" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "User not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/users/username/{username}": { + "get": { + "summary": "Get User by Username", + "tags": [ + "Get User Info" + ], + "description": "Retrieve user information by username.", + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The username of the user." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "description": "Example Description", + "id": "Input ID", + "is_banned": "Input Status", + "last_online": "Unix Timestamp", + "membership": "Input Membership", + "username": "Input Username", + "inventory_rap": "Inventory Rap" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "User not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/users/discord_id/{discordid}": { + "get": { + "summary": "Get User by Discord ID", + "tags": [ + "Get User Info" + ], + "description": "Retrieve user information by Discord ID.", + "parameters": [ + { + "name": "discordid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The User Discord Id." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "description": "Example Description", + "id": "Input ID", + "is_banned": "Input Status", + "last_online": "Unix Timestamp", + "membership": "Input Membership", + "username": "Input Username", + "inventory_rap": "Inventory Rap" + }, + "message": "", + "success": true + } + } + } + } + }, + "404": { + "description": "No user is linked to the requested Discord ID", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "No SYNTAX account is associated with this Discord ID", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/asset/{assetid}": { + "get": { + "summary": "Get Asset by ID", + "tags": [ + "Get Asset Info" + ], + "description": "Retrieve asset information by asset ID.", + "parameters": [ + { + "name": "assetid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the asset." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "asset_rap": { + "type": "integer", + "nullable": true + }, + "asset_type": { + "type": "string" + }, + "asset_type_value": { + "type": "integer" + }, + "created_at": { + "type": "integer" + }, + "creator": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + }, + "creator_id": { + "type": "integer" + }, + "creator_type": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_for_sale": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price_robux": { + "type": "integer" + }, + "price_tickets": { + "type": "integer" + }, + "sales": { + "type": "integer" + }, + "updated_at": { + "type": "integer" + } + } + } + }, + "example": { + "data": { + "asset_rap": "Rap of the item", + "asset_type": "asset type", + "asset_type_value": "asset type value", + "created_at": "Unix Timestamp", + "creator": { + "created_at": "Unix Timestamp", + "description": "User Description", + "id": "User ID", + "is_banned": "User Status", + "last_online": "Unix Timestamp", + "membership": "User Membership", + "username": "Creator Name", + "inventory_rap": "Inventory Rap" + }, + "creator_id": "User ID", + "creator_type": "Type of Creator (group or user)", + "description": "Asset Description", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limited", + "is_limited_unique": "Asset Limited U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unix Timestamp" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "Asset Not Found", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "Asset not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/inventory/collectibles/{userid}": { + "get": { + "summary": "Get User's Collectibles", + "tags": [ + "Inventory and Collectibles" + ], + "description": "Retrieve a user's collectibles.", + "parameters": [ + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the user." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer" + }, + "description": "The page number (optional)." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "asset": { + "type": "object", + "properties": { + "asset_rap": { + "type": "integer", + "nullable": true + }, + "asset_type": { + "type": "string" + }, + "asset_type_value": { + "type": "integer" + }, + "created_at": { + "type": "integer" + }, + "creator_id": { + "type": "integer" + }, + "creator_type": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_for_sale": { + "type": "boolean" + }, + "is_limited": { + "type": "boolean" + }, + "is_limited_unique": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price_robux": { + "type": "integer" + }, + "price_tickets": { + "type": "integer" + }, + "sales": { + "type": "integer" + }, + "updated_at": { + "type": "integer" + } + } + }, + "price": { + "type": "integer" + }, + "serial": { + "type": "integer" + }, + "uaid": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "asset": { + "asset_rap": "Asset Rap", + "asset_type": "Asset Type", + "asset_type_value": "Asset Type Value", + "created_at": "Unix Timestamp", + "creator_id": "User ID", + "creator_type": "Type of Creator (group or user)", + "description": "Asset Description", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limited", + "is_limited_unique": "Asset Limited U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unis Timestamp" + }, + "price": "Resell Price", + "serial": "Serial Owned", + "uaid": "User Asset ID" + } + ], + "message": "", + "next_page": "Next Page", + "page": "Current Page", + "success": true, + "total_pages": "Total Pages" + } + } + } + } + }, + "400": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "User not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/inventory/assets/{userid}/{assettypeid}": { + "get": { + "summary": "Get User's Assets by Type", + "tags": [ + "Inventory and Collectibles" + ], + "description": "Retrieve a user's assets of a specific type.", + "parameters": [ + { + "name": "userid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the user." + }, + { + "name": "assettypeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the asset type. Refer to the [Roblox Documentation](https://create.roblox.com/docs/reference/engine/enums/AssetType) for valid values." + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer" + }, + "description": "The page number (optional)." + } + ], + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "asset": { + "type": "object", + "properties": { + "asset_rap": { + "type": "integer", + "nullable": true + }, + "asset_type": { + "type": "string" + }, + "asset_type_value": { + "type": "integer" + }, + "created_at": { + "type": "integer" + }, + "creator_id": { + "type": "integer" + }, + "creator_type": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_for_sale": { + "type": "boolean" + }, + "is_limited": { + "type": "boolean" + }, + "is_limited_unique": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "price_robux": { + "type": "integer" + }, + "price_tickets": { + "type": "integer" + }, + "sales": { + "type": "integer" + }, + "updated_at": { + "type": "integer" + } + } + }, + "price": { + "type": "integer" + }, + "serial": { + "type": "integer" + }, + "uaid": { + "type": "integer" + } + } + } + } + }, + "example": { + "data": [ + { + "asset": { + "asset_rap": "Asset Rap", + "asset_type": "Asset Type", + "asset_type_value": "Asset Type Value", + "created_at": "Unix Timestamp", + "creator_id": "User ID", + "creator_type": "Type of Creator (group or user)", + "description": "Asset Description", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limited", + "is_limited_unique": "Asset Limted U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unix Timestamp" + }, + "price": "Resell Price", + "serial": "Serial Owner", + "uaid": "User Asset ID" + } + ], + "message": "", + "next_page": "Next Page", + "page": "Current Page", + "success": true, + "total_pages": "Total Pages" + } + } + } + } + }, + "400": { + "description": "User Not Found", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "data": null, + "message": "User not found", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/economy/my-balance": { + "get": { + "summary": "Get My Balance", + "tags": [ + "Economy" + ], + "description": "Retrieve the balance of the authenticated user.", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "robux": { + "type": "integer", + "description": "The amount of Robux in the user's account." + }, + "tickets": { + "type": "integer", + "description": "The amount of Tickets in the user's account." + } + } + } + }, + "example": { + "data": { + "robux": "User Robux Amount", + "tickets": "User Tickets Amount" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "Not Logged In", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "message": "You are not logged in", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/users/my-profile": { + "get": { + "summary": "Get My Profile", + "tags": [ + "Get User Info" + ], + "description": "Retrieve the profile for the authenticated user.", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "description": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "is_banned": { + "type": "boolean" + }, + "last_online": { + "type": "integer" + }, + "membership": { + "type": "string" + }, + "username": { + "type": "string" + }, + "inventory_rap": { + "type": "integer" + } + } + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "description": "User Description", + "id": "User ID", + "is_banned": "User Status", + "last_online": "Unix Timestamp", + "membership": "User Memberhip", + "username": "Username", + "inventory_rap": "Inventory Rap" + }, + "message": "", + "success": true + } + } + } + } + }, + "400": { + "description": "Not Logged In", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "message": "You are not logged in", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/trade/list": { + "get": { + "summary": "List Trades", + "tags": [ + "Trading" + ], + "description": "List trades for the authenticated user.", + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "created_at": { + "type": "integer" + }, + "expires_at": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "recipient_userid": { + "type": "integer" + }, + "sender_userid": { + "type": "integer" + }, + "status": { + "type": "string" + } + } + }, + "example": [ + { + "created_at": "Unix Timestamp", + "expires_at": "Unix Timestamp", + "id": "Trade ID", + "recipient_userid": "User ID", + "sender_userid": "Target User ID", + "status": "Trade Status" + } + ] + }, + "message": { + "type": "string" + }, + "next_page": { + "type": "integer" + }, + "page": { + "type": "integer" + }, + "success": { + "type": "boolean" + }, + "total_pages": { + "type": "integer" + } + }, + "example": { + "data": [ + { + "created_at": "Unix Timetamp", + "expires_at": "Unix Timestamp", + "id": "Trade ID", + "recipient_userid": "User ID", + "sender_userid": "Target User ID", + "status": "Trade Status" + } + ], + "message": "", + "next_page": "Next Page", + "page": "Current Page", + "success": true, + "total_pages": "Total Pages" + } + } + } + } + }, + "400": { + "description": "Not Logged In", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "message": "You are not logged in", + "success": false + } + } + } + } + } + } + } + }, + "/public-api/v1/trade/{tradeid}": { + "get": { + "parameters": [ + { + "name": "tradeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the trade." + } + ], + "summary": "Get Trade by ID", + "tags": [ + "Trading" + ], + "description": "Retrieve trade information by trade ID.", + "responses": { + "200": { + "400": { + "description": "Not Logged In", + "content": { + "application/json": { + "schema": { + "properties": { + "description": { + "type": "string" + } + }, + "example": { + "message": "You are not logged in", + "success": false + } + } + } + } + }, + "description": "Successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "created_at": "integer", + "expires_at": "integer", + "id": "integer", + "recipient_items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "asset": { + "type": "object", + "properties": { + "asset_rap": "integer", + "asset_type": "string", + "asset_type_value": "integer", + "created_at": "integer", + "creator_id": "integer", + "creator_type": "integer", + "description": "string", + "id": "integer", + "is_for_sale": "boolean", + "is_limited": "boolean", + "is_limited_unique": "boolean", + "name": "string", + "price_robux": "integer", + "price_tickets": "integer", + "sales": "integer", + "updated_at": "integer" + } + }, + "price": "integer", + "serial": "integer", + "uaid": "integer" + } + } + }, + "recipient_robux": "integer", + "recipient_userid": "integer", + "sender_items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "asset": { + "type": "object", + "properties": { + "asset_rap": "integer", + "asset_type": "string", + "asset_type_value": "integer", + "created_at": "integer", + "creator_id": "integer", + "creator_type": "integer", + "description": "string", + "id": "integer", + "is_for_sale": "boolean", + "is_limited": "boolean", + "is_limited_unique": "boolean", + "name": "string", + "price_robux": "integer", + "price_tickets": "integer", + "sales": "integer", + "updated_at": "integer" + } + }, + "price": "integer", + "serial": "integer", + "uaid": "integer" + } + } + }, + "sender_robux": "integer", + "sender_userid": "integer", + "status": "string" + } + }, + "message": "string", + "success": "boolean" + } + }, + "example": { + "data": { + "created_at": "Unix Timestamp", + "expires_at": "Unix Timestamp", + "id": "Trade ID", + "recipient_items": [ + { + "asset": { + "asset_rap": "Asset Rap", + "asset_type": "Asset Type", + "asset_type_value": "Asset Type Value", + "created_at": "Unix Timestamp", + "creator_id": "Asset Creator ID", + "creator_type": "Type of Creator (group or user)", + "description": "Will the test be successful? Or go up in flames?!", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limted", + "is_limited_unique": "Asset Limited U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unix Timestamp" + }, + "price": "Resell Price", + "serial": "Serial Owned", + "uaid": "User Asset ID" + } + ], + "recipient_robux": "Robux Offered", + "recipient_userid": "User ID", + "sender_items": [ + { + "asset": { + "asset_rap": "Asset Rap", + "asset_type": "Asset Type", + "asset_type_value": "Asset Type Value", + "created_at": "Unix Timestamp", + "creator_id": "Asset Creator ID", + "creator_type": "Type of Creator (group or user)", + "description": "Asset Description", + "id": "Asset ID", + "is_for_sale": "Asset Status", + "is_limited": "Asset Limited", + "is_limited_unique": "Asset Limited U", + "name": "Asset Name", + "price_robux": "Asset Price (R)", + "price_tickets": "Asset Price (T)", + "sales": "Amount Of Sales", + "updated_at": "Unix Timestamp" + }, + "price": "Resell Price", + "serial": "Serial Owned", + "uaid": "User Asset ID" + } + ], + "sender_robux": "Robux Offered", + "sender_userid": "User ID", + "status": "Trade Status" + }, + "message": "", + "success": true + } + } + } + } + } + } + }, + "/public-api/v1/trade/create/{recipient_userid}": { + "parameters": [ + { + "name": "recipient_userid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the recipient user." + } + ], + "post": { + "summary": "Create Trade", + "tags": [ + "Trading" + ], + "description": "Create a trade request with the specified recipient user.", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "RequesterOfferRobux": { + "type": "integer" + }, + "TargetOfferRobux": { + "type": "integer" + }, + "RequesterOfferUAIDs": { + "type": "array", + "items": { + "type": "integer" + } + }, + "TargetOfferUAIDs": { + "type": "array", + "items": { + "type": "integer" + } + }, + "TOTPCode": { + "type": "integer" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Trade request was successful", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "tradeId": { + "type": "integer" + } + } + }, + "example": { + "success": true, + "message": "", + "tradeId": 1 + } + } + } + }, + "400": { + "description": "Bad request or error in trade creation", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + } + } + }, + "example": { + "success": false, + "message": "error" + } + } + } + } + } + } + }, + "/public-api/v1/trade/accept/{tradeid}": { + "parameters": [ + { + "name": "tradeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the trade." + } + ], + "post": { + "summary": "Accept Trade", + "tags": [ + "Trading" + ], + "description": "Accept a trade with the specified trade ID.", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "TOTPCode": { + "type": "integer" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Trade acceptance was successful", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": true, + "message": "success", + "data": null + } + } + } + }, + "400": { + "description": "Bad request or error in trade acceptance", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": false, + "message": "error", + "data": null + } + } + } + } + } + } + }, + "/public-api/v1/trade/decline/{tradeid}": { + "parameters": [ + { + "name": "tradeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the trade." + } + ], + "post": { + "summary": "Accept Trade", + "tags": [ + "Trading" + ], + "description": "Accept a trade with the specified trade ID.", + "responses": { + "200": { + "description": "Trade acceptance was successful", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": true, + "message": "success", + "data": null + } + } + } + }, + "400": { + "description": "Bad request or error in trade acceptance", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": false, + "message": "error", + "data": null + } + } + } + } + } + } + }, + "/public-api/v1/trade/cancel/{tradeid}": { + "parameters": [ + { + "name": "tradeid", + "in": "path", + "required": true, + "schema": { + "type": "integer" + }, + "description": "The ID of the trade." + } + ], + "post": { + "summary": "Accept Trade", + "tags": [ + "Trading" + ], + "description": "Accept a trade with the specified trade ID.", + "responses": { + "200": { + "description": "Trade acceptance was successful", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": true, + "message": "success", + "data": null + } + } + } + }, + "400": { + "description": "Bad request or error in trade acceptance", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "data": { + "type": null + } + } + }, + "example": { + "success": false, + "message": "error", + "data": null + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/static/swagger/swagger-initializer.js b/app/static/swagger/swagger-initializer.js new file mode 100644 index 0000000..9e8d707 --- /dev/null +++ b/app/static/swagger/swagger-initializer.js @@ -0,0 +1,20 @@ +window.onload = function() { + // + + // the following lines will be replaced by docker/configurator, when it runs in a docker-container + window.ui = SwaggerUIBundle({ + url: "https://www.syntax.eco/static/swagger/swagger-docs.json", + dom_id: '#swagger-ui', + deepLinking: true, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], + layout: "StandaloneLayout" + }); + + // +}; diff --git a/app/static/swagger/swagger-ui-bundle.js b/app/static/swagger/swagger-ui-bundle.js new file mode 100644 index 0000000..8dbca51 --- /dev/null +++ b/app/static/swagger/swagger-ui-bundle.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */ +!function webpackUniversalModuleDefinition(i,s){"object"==typeof exports&&"object"==typeof module?module.exports=s():"function"==typeof define&&define.amd?define([],s):"object"==typeof exports?exports.SwaggerUIBundle=s():i.SwaggerUIBundle=s()}(this,(()=>(()=>{var i={17967:(i,s)=>{"use strict";s.Nm=s.Rq=void 0;var u=/^([^\w]*)(javascript|data|vbscript)/im,m=/&#(\w+)(^\w|;)?/g,v=/&(newline|tab);/gi,_=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,j=/^.+(:|:)/gim,M=[".","/"];s.Rq="about:blank",s.Nm=function sanitizeUrl(i){if(!i)return s.Rq;var $=function decodeHtmlCharacters(i){return i.replace(_,"").replace(m,(function(i,s){return String.fromCharCode(s)}))}(i).replace(v,"").replace(_,"").trim();if(!$)return s.Rq;if(function isRelativeUrlWithoutProtocol(i){return M.indexOf(i[0])>-1}($))return $;var W=$.match(j);if(!W)return $;var X=W[0];return u.test(X)?s.Rq:$}},79742:(i,s)=>{"use strict";s.byteLength=function byteLength(i){var s=getLens(i),u=s[0],m=s[1];return 3*(u+m)/4-m},s.toByteArray=function toByteArray(i){var s,u,_=getLens(i),j=_[0],M=_[1],$=new v(function _byteLength(i,s,u){return 3*(s+u)/4-u}(0,j,M)),W=0,X=M>0?j-4:j;for(u=0;u>16&255,$[W++]=s>>8&255,$[W++]=255&s;2===M&&(s=m[i.charCodeAt(u)]<<2|m[i.charCodeAt(u+1)]>>4,$[W++]=255&s);1===M&&(s=m[i.charCodeAt(u)]<<10|m[i.charCodeAt(u+1)]<<4|m[i.charCodeAt(u+2)]>>2,$[W++]=s>>8&255,$[W++]=255&s);return $},s.fromByteArray=function fromByteArray(i){for(var s,m=i.length,v=m%3,_=[],j=16383,M=0,$=m-v;M<$;M+=j)_.push(encodeChunk(i,M,M+j>$?$:M+j));1===v?(s=i[m-1],_.push(u[s>>2]+u[s<<4&63]+"==")):2===v&&(s=(i[m-2]<<8)+i[m-1],_.push(u[s>>10]+u[s>>4&63]+u[s<<2&63]+"="));return _.join("")};for(var u=[],m=[],v="undefined"!=typeof Uint8Array?Uint8Array:Array,_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",j=0;j<64;++j)u[j]=_[j],m[_.charCodeAt(j)]=j;function getLens(i){var s=i.length;if(s%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var u=i.indexOf("=");return-1===u&&(u=s),[u,u===s?0:4-u%4]}function encodeChunk(i,s,m){for(var v,_,j=[],M=s;M>18&63]+u[_>>12&63]+u[_>>6&63]+u[63&_]);return j.join("")}m["-".charCodeAt(0)]=62,m["_".charCodeAt(0)]=63},48764:(i,s,u)=>{"use strict";const m=u(79742),v=u(80645),_="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;s.Buffer=Buffer,s.SlowBuffer=function SlowBuffer(i){+i!=i&&(i=0);return Buffer.alloc(+i)},s.INSPECT_MAX_BYTES=50;const j=2147483647;function createBuffer(i){if(i>j)throw new RangeError('The value "'+i+'" is invalid for option "size"');const s=new Uint8Array(i);return Object.setPrototypeOf(s,Buffer.prototype),s}function Buffer(i,s,u){if("number"==typeof i){if("string"==typeof s)throw new TypeError('The "string" argument must be of type string. Received type number');return allocUnsafe(i)}return from(i,s,u)}function from(i,s,u){if("string"==typeof i)return function fromString(i,s){"string"==typeof s&&""!==s||(s="utf8");if(!Buffer.isEncoding(s))throw new TypeError("Unknown encoding: "+s);const u=0|byteLength(i,s);let m=createBuffer(u);const v=m.write(i,s);v!==u&&(m=m.slice(0,v));return m}(i,s);if(ArrayBuffer.isView(i))return function fromArrayView(i){if(isInstance(i,Uint8Array)){const s=new Uint8Array(i);return fromArrayBuffer(s.buffer,s.byteOffset,s.byteLength)}return fromArrayLike(i)}(i);if(null==i)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof i);if(isInstance(i,ArrayBuffer)||i&&isInstance(i.buffer,ArrayBuffer))return fromArrayBuffer(i,s,u);if("undefined"!=typeof SharedArrayBuffer&&(isInstance(i,SharedArrayBuffer)||i&&isInstance(i.buffer,SharedArrayBuffer)))return fromArrayBuffer(i,s,u);if("number"==typeof i)throw new TypeError('The "value" argument must not be of type number. Received type number');const m=i.valueOf&&i.valueOf();if(null!=m&&m!==i)return Buffer.from(m,s,u);const v=function fromObject(i){if(Buffer.isBuffer(i)){const s=0|checked(i.length),u=createBuffer(s);return 0===u.length||i.copy(u,0,0,s),u}if(void 0!==i.length)return"number"!=typeof i.length||numberIsNaN(i.length)?createBuffer(0):fromArrayLike(i);if("Buffer"===i.type&&Array.isArray(i.data))return fromArrayLike(i.data)}(i);if(v)return v;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof i[Symbol.toPrimitive])return Buffer.from(i[Symbol.toPrimitive]("string"),s,u);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof i)}function assertSize(i){if("number"!=typeof i)throw new TypeError('"size" argument must be of type number');if(i<0)throw new RangeError('The value "'+i+'" is invalid for option "size"')}function allocUnsafe(i){return assertSize(i),createBuffer(i<0?0:0|checked(i))}function fromArrayLike(i){const s=i.length<0?0:0|checked(i.length),u=createBuffer(s);for(let m=0;m=j)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+j.toString(16)+" bytes");return 0|i}function byteLength(i,s){if(Buffer.isBuffer(i))return i.length;if(ArrayBuffer.isView(i)||isInstance(i,ArrayBuffer))return i.byteLength;if("string"!=typeof i)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof i);const u=i.length,m=arguments.length>2&&!0===arguments[2];if(!m&&0===u)return 0;let v=!1;for(;;)switch(s){case"ascii":case"latin1":case"binary":return u;case"utf8":case"utf-8":return utf8ToBytes(i).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*u;case"hex":return u>>>1;case"base64":return base64ToBytes(i).length;default:if(v)return m?-1:utf8ToBytes(i).length;s=(""+s).toLowerCase(),v=!0}}function slowToString(i,s,u){let m=!1;if((void 0===s||s<0)&&(s=0),s>this.length)return"";if((void 0===u||u>this.length)&&(u=this.length),u<=0)return"";if((u>>>=0)<=(s>>>=0))return"";for(i||(i="utf8");;)switch(i){case"hex":return hexSlice(this,s,u);case"utf8":case"utf-8":return utf8Slice(this,s,u);case"ascii":return asciiSlice(this,s,u);case"latin1":case"binary":return latin1Slice(this,s,u);case"base64":return base64Slice(this,s,u);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,s,u);default:if(m)throw new TypeError("Unknown encoding: "+i);i=(i+"").toLowerCase(),m=!0}}function swap(i,s,u){const m=i[s];i[s]=i[u],i[u]=m}function bidirectionalIndexOf(i,s,u,m,v){if(0===i.length)return-1;if("string"==typeof u?(m=u,u=0):u>2147483647?u=2147483647:u<-2147483648&&(u=-2147483648),numberIsNaN(u=+u)&&(u=v?0:i.length-1),u<0&&(u=i.length+u),u>=i.length){if(v)return-1;u=i.length-1}else if(u<0){if(!v)return-1;u=0}if("string"==typeof s&&(s=Buffer.from(s,m)),Buffer.isBuffer(s))return 0===s.length?-1:arrayIndexOf(i,s,u,m,v);if("number"==typeof s)return s&=255,"function"==typeof Uint8Array.prototype.indexOf?v?Uint8Array.prototype.indexOf.call(i,s,u):Uint8Array.prototype.lastIndexOf.call(i,s,u):arrayIndexOf(i,[s],u,m,v);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(i,s,u,m,v){let _,j=1,M=i.length,$=s.length;if(void 0!==m&&("ucs2"===(m=String(m).toLowerCase())||"ucs-2"===m||"utf16le"===m||"utf-16le"===m)){if(i.length<2||s.length<2)return-1;j=2,M/=2,$/=2,u/=2}function read(i,s){return 1===j?i[s]:i.readUInt16BE(s*j)}if(v){let m=-1;for(_=u;_M&&(u=M-$),_=u;_>=0;_--){let u=!0;for(let m=0;m<$;m++)if(read(i,_+m)!==read(s,m)){u=!1;break}if(u)return _}return-1}function hexWrite(i,s,u,m){u=Number(u)||0;const v=i.length-u;m?(m=Number(m))>v&&(m=v):m=v;const _=s.length;let j;for(m>_/2&&(m=_/2),j=0;j>8,v=u%256,_.push(v),_.push(m);return _}(s,i.length-u),i,u,m)}function base64Slice(i,s,u){return 0===s&&u===i.length?m.fromByteArray(i):m.fromByteArray(i.slice(s,u))}function utf8Slice(i,s,u){u=Math.min(i.length,u);const m=[];let v=s;for(;v239?4:s>223?3:s>191?2:1;if(v+j<=u){let u,m,M,$;switch(j){case 1:s<128&&(_=s);break;case 2:u=i[v+1],128==(192&u)&&($=(31&s)<<6|63&u,$>127&&(_=$));break;case 3:u=i[v+1],m=i[v+2],128==(192&u)&&128==(192&m)&&($=(15&s)<<12|(63&u)<<6|63&m,$>2047&&($<55296||$>57343)&&(_=$));break;case 4:u=i[v+1],m=i[v+2],M=i[v+3],128==(192&u)&&128==(192&m)&&128==(192&M)&&($=(15&s)<<18|(63&u)<<12|(63&m)<<6|63&M,$>65535&&$<1114112&&(_=$))}}null===_?(_=65533,j=1):_>65535&&(_-=65536,m.push(_>>>10&1023|55296),_=56320|1023&_),m.push(_),v+=j}return function decodeCodePointsArray(i){const s=i.length;if(s<=M)return String.fromCharCode.apply(String,i);let u="",m=0;for(;mm.length?(Buffer.isBuffer(s)||(s=Buffer.from(s)),s.copy(m,v)):Uint8Array.prototype.set.call(m,s,v);else{if(!Buffer.isBuffer(s))throw new TypeError('"list" argument must be an Array of Buffers');s.copy(m,v)}v+=s.length}return m},Buffer.byteLength=byteLength,Buffer.prototype._isBuffer=!0,Buffer.prototype.swap16=function swap16(){const i=this.length;if(i%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let s=0;su&&(i+=" ... "),""},_&&(Buffer.prototype[_]=Buffer.prototype.inspect),Buffer.prototype.compare=function compare(i,s,u,m,v){if(isInstance(i,Uint8Array)&&(i=Buffer.from(i,i.offset,i.byteLength)),!Buffer.isBuffer(i))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof i);if(void 0===s&&(s=0),void 0===u&&(u=i?i.length:0),void 0===m&&(m=0),void 0===v&&(v=this.length),s<0||u>i.length||m<0||v>this.length)throw new RangeError("out of range index");if(m>=v&&s>=u)return 0;if(m>=v)return-1;if(s>=u)return 1;if(this===i)return 0;let _=(v>>>=0)-(m>>>=0),j=(u>>>=0)-(s>>>=0);const M=Math.min(_,j),$=this.slice(m,v),W=i.slice(s,u);for(let i=0;i>>=0,isFinite(u)?(u>>>=0,void 0===m&&(m="utf8")):(m=u,u=void 0)}const v=this.length-s;if((void 0===u||u>v)&&(u=v),i.length>0&&(u<0||s<0)||s>this.length)throw new RangeError("Attempt to write outside buffer bounds");m||(m="utf8");let _=!1;for(;;)switch(m){case"hex":return hexWrite(this,i,s,u);case"utf8":case"utf-8":return utf8Write(this,i,s,u);case"ascii":case"latin1":case"binary":return asciiWrite(this,i,s,u);case"base64":return base64Write(this,i,s,u);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,i,s,u);default:if(_)throw new TypeError("Unknown encoding: "+m);m=(""+m).toLowerCase(),_=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const M=4096;function asciiSlice(i,s,u){let m="";u=Math.min(i.length,u);for(let v=s;vm)&&(u=m);let v="";for(let m=s;mu)throw new RangeError("Trying to access beyond buffer length")}function checkInt(i,s,u,m,v,_){if(!Buffer.isBuffer(i))throw new TypeError('"buffer" argument must be a Buffer instance');if(s>v||s<_)throw new RangeError('"value" argument is out of bounds');if(u+m>i.length)throw new RangeError("Index out of range")}function wrtBigUInt64LE(i,s,u,m,v){checkIntBI(s,m,v,i,u,7);let _=Number(s&BigInt(4294967295));i[u++]=_,_>>=8,i[u++]=_,_>>=8,i[u++]=_,_>>=8,i[u++]=_;let j=Number(s>>BigInt(32)&BigInt(4294967295));return i[u++]=j,j>>=8,i[u++]=j,j>>=8,i[u++]=j,j>>=8,i[u++]=j,u}function wrtBigUInt64BE(i,s,u,m,v){checkIntBI(s,m,v,i,u,7);let _=Number(s&BigInt(4294967295));i[u+7]=_,_>>=8,i[u+6]=_,_>>=8,i[u+5]=_,_>>=8,i[u+4]=_;let j=Number(s>>BigInt(32)&BigInt(4294967295));return i[u+3]=j,j>>=8,i[u+2]=j,j>>=8,i[u+1]=j,j>>=8,i[u]=j,u+8}function checkIEEE754(i,s,u,m,v,_){if(u+m>i.length)throw new RangeError("Index out of range");if(u<0)throw new RangeError("Index out of range")}function writeFloat(i,s,u,m,_){return s=+s,u>>>=0,_||checkIEEE754(i,0,u,4),v.write(i,s,u,m,23,4),u+4}function writeDouble(i,s,u,m,_){return s=+s,u>>>=0,_||checkIEEE754(i,0,u,8),v.write(i,s,u,m,52,8),u+8}Buffer.prototype.slice=function slice(i,s){const u=this.length;(i=~~i)<0?(i+=u)<0&&(i=0):i>u&&(i=u),(s=void 0===s?u:~~s)<0?(s+=u)<0&&(s=0):s>u&&(s=u),s>>=0,s>>>=0,u||checkOffset(i,s,this.length);let m=this[i],v=1,_=0;for(;++_>>=0,s>>>=0,u||checkOffset(i,s,this.length);let m=this[i+--s],v=1;for(;s>0&&(v*=256);)m+=this[i+--s]*v;return m},Buffer.prototype.readUint8=Buffer.prototype.readUInt8=function readUInt8(i,s){return i>>>=0,s||checkOffset(i,1,this.length),this[i]},Buffer.prototype.readUint16LE=Buffer.prototype.readUInt16LE=function readUInt16LE(i,s){return i>>>=0,s||checkOffset(i,2,this.length),this[i]|this[i+1]<<8},Buffer.prototype.readUint16BE=Buffer.prototype.readUInt16BE=function readUInt16BE(i,s){return i>>>=0,s||checkOffset(i,2,this.length),this[i]<<8|this[i+1]},Buffer.prototype.readUint32LE=Buffer.prototype.readUInt32LE=function readUInt32LE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),(this[i]|this[i+1]<<8|this[i+2]<<16)+16777216*this[i+3]},Buffer.prototype.readUint32BE=Buffer.prototype.readUInt32BE=function readUInt32BE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),16777216*this[i]+(this[i+1]<<16|this[i+2]<<8|this[i+3])},Buffer.prototype.readBigUInt64LE=defineBigIntMethod((function readBigUInt64LE(i){validateNumber(i>>>=0,"offset");const s=this[i],u=this[i+7];void 0!==s&&void 0!==u||boundsError(i,this.length-8);const m=s+256*this[++i]+65536*this[++i]+this[++i]*2**24,v=this[++i]+256*this[++i]+65536*this[++i]+u*2**24;return BigInt(m)+(BigInt(v)<>>=0,"offset");const s=this[i],u=this[i+7];void 0!==s&&void 0!==u||boundsError(i,this.length-8);const m=s*2**24+65536*this[++i]+256*this[++i]+this[++i],v=this[++i]*2**24+65536*this[++i]+256*this[++i]+u;return(BigInt(m)<>>=0,s>>>=0,u||checkOffset(i,s,this.length);let m=this[i],v=1,_=0;for(;++_=v&&(m-=Math.pow(2,8*s)),m},Buffer.prototype.readIntBE=function readIntBE(i,s,u){i>>>=0,s>>>=0,u||checkOffset(i,s,this.length);let m=s,v=1,_=this[i+--m];for(;m>0&&(v*=256);)_+=this[i+--m]*v;return v*=128,_>=v&&(_-=Math.pow(2,8*s)),_},Buffer.prototype.readInt8=function readInt8(i,s){return i>>>=0,s||checkOffset(i,1,this.length),128&this[i]?-1*(255-this[i]+1):this[i]},Buffer.prototype.readInt16LE=function readInt16LE(i,s){i>>>=0,s||checkOffset(i,2,this.length);const u=this[i]|this[i+1]<<8;return 32768&u?4294901760|u:u},Buffer.prototype.readInt16BE=function readInt16BE(i,s){i>>>=0,s||checkOffset(i,2,this.length);const u=this[i+1]|this[i]<<8;return 32768&u?4294901760|u:u},Buffer.prototype.readInt32LE=function readInt32LE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),this[i]|this[i+1]<<8|this[i+2]<<16|this[i+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),this[i]<<24|this[i+1]<<16|this[i+2]<<8|this[i+3]},Buffer.prototype.readBigInt64LE=defineBigIntMethod((function readBigInt64LE(i){validateNumber(i>>>=0,"offset");const s=this[i],u=this[i+7];void 0!==s&&void 0!==u||boundsError(i,this.length-8);const m=this[i+4]+256*this[i+5]+65536*this[i+6]+(u<<24);return(BigInt(m)<>>=0,"offset");const s=this[i],u=this[i+7];void 0!==s&&void 0!==u||boundsError(i,this.length-8);const m=(s<<24)+65536*this[++i]+256*this[++i]+this[++i];return(BigInt(m)<>>=0,s||checkOffset(i,4,this.length),v.read(this,i,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(i,s){return i>>>=0,s||checkOffset(i,4,this.length),v.read(this,i,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(i,s){return i>>>=0,s||checkOffset(i,8,this.length),v.read(this,i,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(i,s){return i>>>=0,s||checkOffset(i,8,this.length),v.read(this,i,!1,52,8)},Buffer.prototype.writeUintLE=Buffer.prototype.writeUIntLE=function writeUIntLE(i,s,u,m){if(i=+i,s>>>=0,u>>>=0,!m){checkInt(this,i,s,u,Math.pow(2,8*u)-1,0)}let v=1,_=0;for(this[s]=255&i;++_>>=0,u>>>=0,!m){checkInt(this,i,s,u,Math.pow(2,8*u)-1,0)}let v=u-1,_=1;for(this[s+v]=255&i;--v>=0&&(_*=256);)this[s+v]=i/_&255;return s+u},Buffer.prototype.writeUint8=Buffer.prototype.writeUInt8=function writeUInt8(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,1,255,0),this[s]=255&i,s+1},Buffer.prototype.writeUint16LE=Buffer.prototype.writeUInt16LE=function writeUInt16LE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,2,65535,0),this[s]=255&i,this[s+1]=i>>>8,s+2},Buffer.prototype.writeUint16BE=Buffer.prototype.writeUInt16BE=function writeUInt16BE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,2,65535,0),this[s]=i>>>8,this[s+1]=255&i,s+2},Buffer.prototype.writeUint32LE=Buffer.prototype.writeUInt32LE=function writeUInt32LE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,4,4294967295,0),this[s+3]=i>>>24,this[s+2]=i>>>16,this[s+1]=i>>>8,this[s]=255&i,s+4},Buffer.prototype.writeUint32BE=Buffer.prototype.writeUInt32BE=function writeUInt32BE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,4,4294967295,0),this[s]=i>>>24,this[s+1]=i>>>16,this[s+2]=i>>>8,this[s+3]=255&i,s+4},Buffer.prototype.writeBigUInt64LE=defineBigIntMethod((function writeBigUInt64LE(i,s=0){return wrtBigUInt64LE(this,i,s,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeBigUInt64BE=defineBigIntMethod((function writeBigUInt64BE(i,s=0){return wrtBigUInt64BE(this,i,s,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeIntLE=function writeIntLE(i,s,u,m){if(i=+i,s>>>=0,!m){const m=Math.pow(2,8*u-1);checkInt(this,i,s,u,m-1,-m)}let v=0,_=1,j=0;for(this[s]=255&i;++v>0)-j&255;return s+u},Buffer.prototype.writeIntBE=function writeIntBE(i,s,u,m){if(i=+i,s>>>=0,!m){const m=Math.pow(2,8*u-1);checkInt(this,i,s,u,m-1,-m)}let v=u-1,_=1,j=0;for(this[s+v]=255&i;--v>=0&&(_*=256);)i<0&&0===j&&0!==this[s+v+1]&&(j=1),this[s+v]=(i/_>>0)-j&255;return s+u},Buffer.prototype.writeInt8=function writeInt8(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,1,127,-128),i<0&&(i=255+i+1),this[s]=255&i,s+1},Buffer.prototype.writeInt16LE=function writeInt16LE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,2,32767,-32768),this[s]=255&i,this[s+1]=i>>>8,s+2},Buffer.prototype.writeInt16BE=function writeInt16BE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,2,32767,-32768),this[s]=i>>>8,this[s+1]=255&i,s+2},Buffer.prototype.writeInt32LE=function writeInt32LE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,4,2147483647,-2147483648),this[s]=255&i,this[s+1]=i>>>8,this[s+2]=i>>>16,this[s+3]=i>>>24,s+4},Buffer.prototype.writeInt32BE=function writeInt32BE(i,s,u){return i=+i,s>>>=0,u||checkInt(this,i,s,4,2147483647,-2147483648),i<0&&(i=4294967295+i+1),this[s]=i>>>24,this[s+1]=i>>>16,this[s+2]=i>>>8,this[s+3]=255&i,s+4},Buffer.prototype.writeBigInt64LE=defineBigIntMethod((function writeBigInt64LE(i,s=0){return wrtBigUInt64LE(this,i,s,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeBigInt64BE=defineBigIntMethod((function writeBigInt64BE(i,s=0){return wrtBigUInt64BE(this,i,s,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeFloatLE=function writeFloatLE(i,s,u){return writeFloat(this,i,s,!0,u)},Buffer.prototype.writeFloatBE=function writeFloatBE(i,s,u){return writeFloat(this,i,s,!1,u)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(i,s,u){return writeDouble(this,i,s,!0,u)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(i,s,u){return writeDouble(this,i,s,!1,u)},Buffer.prototype.copy=function copy(i,s,u,m){if(!Buffer.isBuffer(i))throw new TypeError("argument should be a Buffer");if(u||(u=0),m||0===m||(m=this.length),s>=i.length&&(s=i.length),s||(s=0),m>0&&m=this.length)throw new RangeError("Index out of range");if(m<0)throw new RangeError("sourceEnd out of bounds");m>this.length&&(m=this.length),i.length-s>>=0,u=void 0===u?this.length:u>>>0,i||(i=0),"number"==typeof i)for(v=s;v=m+4;u-=3)s=`_${i.slice(u-3,u)}${s}`;return`${i.slice(0,u)}${s}`}function checkIntBI(i,s,u,m,v,_){if(i>u||i3?0===s||s===BigInt(0)?`>= 0${m} and < 2${m} ** ${8*(_+1)}${m}`:`>= -(2${m} ** ${8*(_+1)-1}${m}) and < 2 ** ${8*(_+1)-1}${m}`:`>= ${s}${m} and <= ${u}${m}`,new $.ERR_OUT_OF_RANGE("value",v,i)}!function checkBounds(i,s,u){validateNumber(s,"offset"),void 0!==i[s]&&void 0!==i[s+u]||boundsError(s,i.length-(u+1))}(m,v,_)}function validateNumber(i,s){if("number"!=typeof i)throw new $.ERR_INVALID_ARG_TYPE(s,"number",i)}function boundsError(i,s,u){if(Math.floor(i)!==i)throw validateNumber(i,u),new $.ERR_OUT_OF_RANGE(u||"offset","an integer",i);if(s<0)throw new $.ERR_BUFFER_OUT_OF_BOUNDS;throw new $.ERR_OUT_OF_RANGE(u||"offset",`>= ${u?1:0} and <= ${s}`,i)}E("ERR_BUFFER_OUT_OF_BOUNDS",(function(i){return i?`${i} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),E("ERR_INVALID_ARG_TYPE",(function(i,s){return`The "${i}" argument must be of type number. Received type ${typeof s}`}),TypeError),E("ERR_OUT_OF_RANGE",(function(i,s,u){let m=`The value of "${i}" is out of range.`,v=u;return Number.isInteger(u)&&Math.abs(u)>2**32?v=addNumericalSeparator(String(u)):"bigint"==typeof u&&(v=String(u),(u>BigInt(2)**BigInt(32)||u<-(BigInt(2)**BigInt(32)))&&(v=addNumericalSeparator(v)),v+="n"),m+=` It must be ${s}. Received ${v}`,m}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function utf8ToBytes(i,s){let u;s=s||1/0;const m=i.length;let v=null;const _=[];for(let j=0;j55295&&u<57344){if(!v){if(u>56319){(s-=3)>-1&&_.push(239,191,189);continue}if(j+1===m){(s-=3)>-1&&_.push(239,191,189);continue}v=u;continue}if(u<56320){(s-=3)>-1&&_.push(239,191,189),v=u;continue}u=65536+(v-55296<<10|u-56320)}else v&&(s-=3)>-1&&_.push(239,191,189);if(v=null,u<128){if((s-=1)<0)break;_.push(u)}else if(u<2048){if((s-=2)<0)break;_.push(u>>6|192,63&u|128)}else if(u<65536){if((s-=3)<0)break;_.push(u>>12|224,u>>6&63|128,63&u|128)}else{if(!(u<1114112))throw new Error("Invalid code point");if((s-=4)<0)break;_.push(u>>18|240,u>>12&63|128,u>>6&63|128,63&u|128)}}return _}function base64ToBytes(i){return m.toByteArray(function base64clean(i){if((i=(i=i.split("=")[0]).trim().replace(W,"")).length<2)return"";for(;i.length%4!=0;)i+="=";return i}(i))}function blitBuffer(i,s,u,m){let v;for(v=0;v=s.length||v>=i.length);++v)s[v+u]=i[v];return v}function isInstance(i,s){return i instanceof s||null!=i&&null!=i.constructor&&null!=i.constructor.name&&i.constructor.name===s.name}function numberIsNaN(i){return i!=i}const X=function(){const i="0123456789abcdef",s=new Array(256);for(let u=0;u<16;++u){const m=16*u;for(let v=0;v<16;++v)s[m+v]=i[u]+i[v]}return s}();function defineBigIntMethod(i){return"undefined"==typeof BigInt?BufferBigIntNotDefined:i}function BufferBigIntNotDefined(){throw new Error("BigInt not supported")}},21924:(i,s,u)=>{"use strict";var m=u(40210),v=u(55559),_=v(m("String.prototype.indexOf"));i.exports=function callBoundIntrinsic(i,s){var u=m(i,!!s);return"function"==typeof u&&_(i,".prototype.")>-1?v(u):u}},55559:(i,s,u)=>{"use strict";var m=u(58612),v=u(40210),_=v("%Function.prototype.apply%"),j=v("%Function.prototype.call%"),M=v("%Reflect.apply%",!0)||m.call(j,_),$=v("%Object.getOwnPropertyDescriptor%",!0),W=v("%Object.defineProperty%",!0),X=v("%Math.max%");if(W)try{W({},"a",{value:1})}catch(i){W=null}i.exports=function callBind(i){var s=M(m,j,arguments);$&&W&&($(s,"length").configurable&&W(s,"length",{value:1+X(0,i.length-(arguments.length-1))}));return s};var Y=function applyBind(){return M(m,_,arguments)};W?W(i.exports,"apply",{value:Y}):i.exports.apply=Y},94184:(i,s)=>{var u;!function(){"use strict";var m={}.hasOwnProperty;function classNames(){for(var i=[],s=0;s{"use strict";s.parse=function parse(i,s){if("string"!=typeof i)throw new TypeError("argument str must be a string");var u={},m=(s||{}).decode||decode,v=0;for(;v{"use strict";var m=u(11742),v={"text/plain":"Text","text/html":"Url",default:"Text"};i.exports=function copy(i,s){var u,_,j,M,$,W,X=!1;s||(s={}),u=s.debug||!1;try{if(j=m(),M=document.createRange(),$=document.getSelection(),(W=document.createElement("span")).textContent=i,W.ariaHidden="true",W.style.all="unset",W.style.position="fixed",W.style.top=0,W.style.clip="rect(0, 0, 0, 0)",W.style.whiteSpace="pre",W.style.webkitUserSelect="text",W.style.MozUserSelect="text",W.style.msUserSelect="text",W.style.userSelect="text",W.addEventListener("copy",(function(m){if(m.stopPropagation(),s.format)if(m.preventDefault(),void 0===m.clipboardData){u&&console.warn("unable to use e.clipboardData"),u&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var _=v[s.format]||v.default;window.clipboardData.setData(_,i)}else m.clipboardData.clearData(),m.clipboardData.setData(s.format,i);s.onCopy&&(m.preventDefault(),s.onCopy(m.clipboardData))})),document.body.appendChild(W),M.selectNodeContents(W),$.addRange(M),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");X=!0}catch(m){u&&console.error("unable to copy using execCommand: ",m),u&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(s.format||"text",i),s.onCopy&&s.onCopy(window.clipboardData),X=!0}catch(m){u&&console.error("unable to copy using clipboardData: ",m),u&&console.error("falling back to prompt"),_=function format(i){var s=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return i.replace(/#{\s*key\s*}/g,s)}("message"in s?s.message:"Copy to clipboard: #{key}, Enter"),window.prompt(_,i)}}finally{$&&("function"==typeof $.removeRange?$.removeRange(M):$.removeAllRanges()),W&&document.body.removeChild(W),j()}return X}},44101:(i,s,u)=>{var m=u(18957);i.exports=m},90093:(i,s,u)=>{var m=u(28196);i.exports=m},65362:(i,s,u)=>{var m=u(63383);i.exports=m},50415:(i,s,u)=>{u(61181),u(47627),u(24415),u(66274),u(77971);var m=u(54058);i.exports=m.AggregateError},27700:(i,s,u)=>{u(73381);var m=u(35703);i.exports=m("Function").bind},16246:(i,s,u)=>{var m=u(7046),v=u(27700),_=Function.prototype;i.exports=function(i){var s=i.bind;return i===_||m(_,i)&&s===_.bind?v:s}},45999:(i,s,u)=>{u(49221);var m=u(54058);i.exports=m.Object.assign},16121:(i,s,u)=>{i.exports=u(38644)},14122:(i,s,u)=>{i.exports=u(89097)},60269:(i,s,u)=>{i.exports=u(76936)},38644:(i,s,u)=>{u(89731);var m=u(44101);i.exports=m},89097:(i,s,u)=>{var m=u(90093);i.exports=m},76936:(i,s,u)=>{var m=u(65362);i.exports=m},24883:(i,s,u)=>{var m=u(57475),v=u(69826),_=TypeError;i.exports=function(i){if(m(i))return i;throw _(v(i)+" is not a function")}},11851:(i,s,u)=>{var m=u(57475),v=String,_=TypeError;i.exports=function(i){if("object"==typeof i||m(i))return i;throw _("Can't set "+v(i)+" as a prototype")}},18479:i=>{i.exports=function(){}},96059:(i,s,u)=>{var m=u(10941),v=String,_=TypeError;i.exports=function(i){if(m(i))return i;throw _(v(i)+" is not an object")}},31692:(i,s,u)=>{var m=u(74529),v=u(59413),_=u(10623),createMethod=function(i){return function(s,u,j){var M,$=m(s),W=_($),X=v(j,W);if(i&&u!=u){for(;W>X;)if((M=$[X++])!=M)return!0}else for(;W>X;X++)if((i||X in $)&&$[X]===u)return i||X||0;return!i&&-1}};i.exports={includes:createMethod(!0),indexOf:createMethod(!1)}},93765:(i,s,u)=>{var m=u(95329);i.exports=m([].slice)},82532:(i,s,u)=>{var m=u(95329),v=m({}.toString),_=m("".slice);i.exports=function(i){return _(v(i),8,-1)}},9697:(i,s,u)=>{var m=u(22885),v=u(57475),_=u(82532),j=u(99813)("toStringTag"),M=Object,$="Arguments"==_(function(){return arguments}());i.exports=m?_:function(i){var s,u,m;return void 0===i?"Undefined":null===i?"Null":"string"==typeof(u=function(i,s){try{return i[s]}catch(i){}}(s=M(i),j))?u:$?_(s):"Object"==(m=_(s))&&v(s.callee)?"Arguments":m}},23489:(i,s,u)=>{var m=u(90953),v=u(31136),_=u(49677),j=u(65988);i.exports=function(i,s,u){for(var M=v(s),$=j.f,W=_.f,X=0;X{var m=u(95981);i.exports=!m((function(){function F(){}return F.prototype.constructor=null,Object.getPrototypeOf(new F)!==F.prototype}))},23538:i=>{i.exports=function(i,s){return{value:i,done:s}}},32029:(i,s,u)=>{var m=u(55746),v=u(65988),_=u(31887);i.exports=m?function(i,s,u){return v.f(i,s,_(1,u))}:function(i,s,u){return i[s]=u,i}},31887:i=>{i.exports=function(i,s){return{enumerable:!(1&i),configurable:!(2&i),writable:!(4&i),value:s}}},95929:(i,s,u)=>{var m=u(32029);i.exports=function(i,s,u,v){return v&&v.enumerable?i[s]=u:m(i,s,u),i}},75609:(i,s,u)=>{var m=u(21899),v=Object.defineProperty;i.exports=function(i,s){try{v(m,i,{value:s,configurable:!0,writable:!0})}catch(u){m[i]=s}return s}},55746:(i,s,u)=>{var m=u(95981);i.exports=!m((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},76616:i=>{var s="object"==typeof document&&document.all,u=void 0===s&&void 0!==s;i.exports={all:s,IS_HTMLDDA:u}},61333:(i,s,u)=>{var m=u(21899),v=u(10941),_=m.document,j=v(_)&&v(_.createElement);i.exports=function(i){return j?_.createElement(i):{}}},63281:i=>{i.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},2861:i=>{i.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},53385:(i,s,u)=>{var m,v,_=u(21899),j=u(2861),M=_.process,$=_.Deno,W=M&&M.versions||$&&$.version,X=W&&W.v8;X&&(v=(m=X.split("."))[0]>0&&m[0]<4?1:+(m[0]+m[1])),!v&&j&&(!(m=j.match(/Edge\/(\d+)/))||m[1]>=74)&&(m=j.match(/Chrome\/(\d+)/))&&(v=+m[1]),i.exports=v},35703:(i,s,u)=>{var m=u(54058);i.exports=function(i){return m[i+"Prototype"]}},56759:i=>{i.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},53995:(i,s,u)=>{var m=u(95329),v=Error,_=m("".replace),j=String(v("zxcasd").stack),M=/\n\s*at [^:]*:[^\n]*/,$=M.test(j);i.exports=function(i,s){if($&&"string"==typeof i&&!v.prepareStackTrace)for(;s--;)i=_(i,M,"");return i}},79585:(i,s,u)=>{var m=u(32029),v=u(53995),_=u(18780),j=Error.captureStackTrace;i.exports=function(i,s,u,M){_&&(j?j(i,s):m(i,"stack",v(u,M)))}},18780:(i,s,u)=>{var m=u(95981),v=u(31887);i.exports=!m((function(){var i=Error("a");return!("stack"in i)||(Object.defineProperty(i,"stack",v(1,7)),7!==i.stack)}))},76887:(i,s,u)=>{"use strict";var m=u(21899),v=u(79730),_=u(97484),j=u(57475),M=u(49677).f,$=u(37252),W=u(54058),X=u(86843),Y=u(32029),Z=u(90953),wrapConstructor=function(i){var Wrapper=function(s,u,m){if(this instanceof Wrapper){switch(arguments.length){case 0:return new i;case 1:return new i(s);case 2:return new i(s,u)}return new i(s,u,m)}return v(i,this,arguments)};return Wrapper.prototype=i.prototype,Wrapper};i.exports=function(i,s){var u,v,ee,ae,ie,le,ce,pe,de,fe=i.target,ye=i.global,be=i.stat,_e=i.proto,we=ye?m:be?m[fe]:(m[fe]||{}).prototype,Se=ye?W:W[fe]||Y(W,fe,{})[fe],xe=Se.prototype;for(ae in s)v=!(u=$(ye?ae:fe+(be?".":"#")+ae,i.forced))&&we&&Z(we,ae),le=Se[ae],v&&(ce=i.dontCallGetSet?(de=M(we,ae))&&de.value:we[ae]),ie=v&&ce?ce:s[ae],v&&typeof le==typeof ie||(pe=i.bind&&v?X(ie,m):i.wrap&&v?wrapConstructor(ie):_e&&j(ie)?_(ie):ie,(i.sham||ie&&ie.sham||le&&le.sham)&&Y(pe,"sham",!0),Y(Se,ae,pe),_e&&(Z(W,ee=fe+"Prototype")||Y(W,ee,{}),Y(W[ee],ae,ie),i.real&&xe&&(u||!xe[ae])&&Y(xe,ae,ie)))}},95981:i=>{i.exports=function(i){try{return!!i()}catch(i){return!0}}},79730:(i,s,u)=>{var m=u(18285),v=Function.prototype,_=v.apply,j=v.call;i.exports="object"==typeof Reflect&&Reflect.apply||(m?j.bind(_):function(){return j.apply(_,arguments)})},86843:(i,s,u)=>{var m=u(97484),v=u(24883),_=u(18285),j=m(m.bind);i.exports=function(i,s){return v(i),void 0===s?i:_?j(i,s):function(){return i.apply(s,arguments)}}},18285:(i,s,u)=>{var m=u(95981);i.exports=!m((function(){var i=function(){}.bind();return"function"!=typeof i||i.hasOwnProperty("prototype")}))},98308:(i,s,u)=>{"use strict";var m=u(95329),v=u(24883),_=u(10941),j=u(90953),M=u(93765),$=u(18285),W=Function,X=m([].concat),Y=m([].join),Z={};i.exports=$?W.bind:function bind(i){var s=v(this),u=s.prototype,m=M(arguments,1),$=function bound(){var u=X(m,M(arguments));return this instanceof $?function(i,s,u){if(!j(Z,s)){for(var m=[],v=0;v{var m=u(18285),v=Function.prototype.call;i.exports=m?v.bind(v):function(){return v.apply(v,arguments)}},79417:(i,s,u)=>{var m=u(55746),v=u(90953),_=Function.prototype,j=m&&Object.getOwnPropertyDescriptor,M=v(_,"name"),$=M&&"something"===function something(){}.name,W=M&&(!m||m&&j(_,"name").configurable);i.exports={EXISTS:M,PROPER:$,CONFIGURABLE:W}},45526:(i,s,u)=>{var m=u(95329),v=u(24883);i.exports=function(i,s,u){try{return m(v(Object.getOwnPropertyDescriptor(i,s)[u]))}catch(i){}}},97484:(i,s,u)=>{var m=u(82532),v=u(95329);i.exports=function(i){if("Function"===m(i))return v(i)}},95329:(i,s,u)=>{var m=u(18285),v=Function.prototype,_=v.call,j=m&&v.bind.bind(_,_);i.exports=m?j:function(i){return function(){return _.apply(i,arguments)}}},626:(i,s,u)=>{var m=u(54058),v=u(21899),_=u(57475),aFunction=function(i){return _(i)?i:void 0};i.exports=function(i,s){return arguments.length<2?aFunction(m[i])||aFunction(v[i]):m[i]&&m[i][s]||v[i]&&v[i][s]}},22902:(i,s,u)=>{var m=u(9697),v=u(14229),_=u(82119),j=u(12077),M=u(99813)("iterator");i.exports=function(i){if(!_(i))return v(i,M)||v(i,"@@iterator")||j[m(i)]}},53476:(i,s,u)=>{var m=u(78834),v=u(24883),_=u(96059),j=u(69826),M=u(22902),$=TypeError;i.exports=function(i,s){var u=arguments.length<2?M(i):s;if(v(u))return _(m(u,i));throw $(j(i)+" is not iterable")}},14229:(i,s,u)=>{var m=u(24883),v=u(82119);i.exports=function(i,s){var u=i[s];return v(u)?void 0:m(u)}},21899:function(i,s,u){var check=function(i){return i&&i.Math==Math&&i};i.exports=check("object"==typeof globalThis&&globalThis)||check("object"==typeof window&&window)||check("object"==typeof self&&self)||check("object"==typeof u.g&&u.g)||function(){return this}()||this||Function("return this")()},90953:(i,s,u)=>{var m=u(95329),v=u(89678),_=m({}.hasOwnProperty);i.exports=Object.hasOwn||function hasOwn(i,s){return _(v(i),s)}},27748:i=>{i.exports={}},15463:(i,s,u)=>{var m=u(626);i.exports=m("document","documentElement")},2840:(i,s,u)=>{var m=u(55746),v=u(95981),_=u(61333);i.exports=!m&&!v((function(){return 7!=Object.defineProperty(_("div"),"a",{get:function(){return 7}}).a}))},37026:(i,s,u)=>{var m=u(95329),v=u(95981),_=u(82532),j=Object,M=m("".split);i.exports=v((function(){return!j("z").propertyIsEnumerable(0)}))?function(i){return"String"==_(i)?M(i,""):j(i)}:j},70926:(i,s,u)=>{var m=u(57475),v=u(10941),_=u(88929);i.exports=function(i,s,u){var j,M;return _&&m(j=s.constructor)&&j!==u&&v(M=j.prototype)&&M!==u.prototype&&_(i,M),i}},53794:(i,s,u)=>{var m=u(10941),v=u(32029);i.exports=function(i,s){m(s)&&"cause"in s&&v(i,"cause",s.cause)}},45402:(i,s,u)=>{var m,v,_,j=u(47093),M=u(21899),$=u(10941),W=u(32029),X=u(90953),Y=u(63030),Z=u(44262),ee=u(27748),ae="Object already initialized",ie=M.TypeError,le=M.WeakMap;if(j||Y.state){var ce=Y.state||(Y.state=new le);ce.get=ce.get,ce.has=ce.has,ce.set=ce.set,m=function(i,s){if(ce.has(i))throw ie(ae);return s.facade=i,ce.set(i,s),s},v=function(i){return ce.get(i)||{}},_=function(i){return ce.has(i)}}else{var pe=Z("state");ee[pe]=!0,m=function(i,s){if(X(i,pe))throw ie(ae);return s.facade=i,W(i,pe,s),s},v=function(i){return X(i,pe)?i[pe]:{}},_=function(i){return X(i,pe)}}i.exports={set:m,get:v,has:_,enforce:function(i){return _(i)?v(i):m(i,{})},getterFor:function(i){return function(s){var u;if(!$(s)||(u=v(s)).type!==i)throw ie("Incompatible receiver, "+i+" required");return u}}}},6782:(i,s,u)=>{var m=u(99813),v=u(12077),_=m("iterator"),j=Array.prototype;i.exports=function(i){return void 0!==i&&(v.Array===i||j[_]===i)}},57475:(i,s,u)=>{var m=u(76616),v=m.all;i.exports=m.IS_HTMLDDA?function(i){return"function"==typeof i||i===v}:function(i){return"function"==typeof i}},37252:(i,s,u)=>{var m=u(95981),v=u(57475),_=/#|\.prototype\./,isForced=function(i,s){var u=M[j(i)];return u==W||u!=$&&(v(s)?m(s):!!s)},j=isForced.normalize=function(i){return String(i).replace(_,".").toLowerCase()},M=isForced.data={},$=isForced.NATIVE="N",W=isForced.POLYFILL="P";i.exports=isForced},82119:i=>{i.exports=function(i){return null==i}},10941:(i,s,u)=>{var m=u(57475),v=u(76616),_=v.all;i.exports=v.IS_HTMLDDA?function(i){return"object"==typeof i?null!==i:m(i)||i===_}:function(i){return"object"==typeof i?null!==i:m(i)}},82529:i=>{i.exports=!0},56664:(i,s,u)=>{var m=u(626),v=u(57475),_=u(7046),j=u(32302),M=Object;i.exports=j?function(i){return"symbol"==typeof i}:function(i){var s=m("Symbol");return v(s)&&_(s.prototype,M(i))}},93091:(i,s,u)=>{var m=u(86843),v=u(78834),_=u(96059),j=u(69826),M=u(6782),$=u(10623),W=u(7046),X=u(53476),Y=u(22902),Z=u(7609),ee=TypeError,Result=function(i,s){this.stopped=i,this.result=s},ae=Result.prototype;i.exports=function(i,s,u){var ie,le,ce,pe,de,fe,ye,be=u&&u.that,_e=!(!u||!u.AS_ENTRIES),we=!(!u||!u.IS_RECORD),Se=!(!u||!u.IS_ITERATOR),xe=!(!u||!u.INTERRUPTED),Pe=m(s,be),stop=function(i){return ie&&Z(ie,"normal",i),new Result(!0,i)},callFn=function(i){return _e?(_(i),xe?Pe(i[0],i[1],stop):Pe(i[0],i[1])):xe?Pe(i,stop):Pe(i)};if(we)ie=i.iterator;else if(Se)ie=i;else{if(!(le=Y(i)))throw ee(j(i)+" is not iterable");if(M(le)){for(ce=0,pe=$(i);pe>ce;ce++)if((de=callFn(i[ce]))&&W(ae,de))return de;return new Result(!1)}ie=X(i,le)}for(fe=we?i.next:ie.next;!(ye=v(fe,ie)).done;){try{de=callFn(ye.value)}catch(i){Z(ie,"throw",i)}if("object"==typeof de&&de&&W(ae,de))return de}return new Result(!1)}},7609:(i,s,u)=>{var m=u(78834),v=u(96059),_=u(14229);i.exports=function(i,s,u){var j,M;v(i);try{if(!(j=_(i,"return"))){if("throw"===s)throw u;return u}j=m(j,i)}catch(i){M=!0,j=i}if("throw"===s)throw u;if(M)throw j;return v(j),u}},53847:(i,s,u)=>{"use strict";var m=u(35143).IteratorPrototype,v=u(29290),_=u(31887),j=u(90904),M=u(12077),returnThis=function(){return this};i.exports=function(i,s,u,$){var W=s+" Iterator";return i.prototype=v(m,{next:_(+!$,u)}),j(i,W,!1,!0),M[W]=returnThis,i}},75105:(i,s,u)=>{"use strict";var m=u(76887),v=u(78834),_=u(82529),j=u(79417),M=u(57475),$=u(53847),W=u(249),X=u(88929),Y=u(90904),Z=u(32029),ee=u(95929),ae=u(99813),ie=u(12077),le=u(35143),ce=j.PROPER,pe=j.CONFIGURABLE,de=le.IteratorPrototype,fe=le.BUGGY_SAFARI_ITERATORS,ye=ae("iterator"),be="keys",_e="values",we="entries",returnThis=function(){return this};i.exports=function(i,s,u,j,ae,le,Se){$(u,s,j);var xe,Pe,Ie,getIterationMethod=function(i){if(i===ae&&Ve)return Ve;if(!fe&&i in qe)return qe[i];switch(i){case be:return function keys(){return new u(this,i)};case _e:return function values(){return new u(this,i)};case we:return function entries(){return new u(this,i)}}return function(){return new u(this)}},Te=s+" Iterator",Re=!1,qe=i.prototype,ze=qe[ye]||qe["@@iterator"]||ae&&qe[ae],Ve=!fe&&ze||getIterationMethod(ae),We="Array"==s&&qe.entries||ze;if(We&&(xe=W(We.call(new i)))!==Object.prototype&&xe.next&&(_||W(xe)===de||(X?X(xe,de):M(xe[ye])||ee(xe,ye,returnThis)),Y(xe,Te,!0,!0),_&&(ie[Te]=returnThis)),ce&&ae==_e&&ze&&ze.name!==_e&&(!_&&pe?Z(qe,"name",_e):(Re=!0,Ve=function values(){return v(ze,this)})),ae)if(Pe={values:getIterationMethod(_e),keys:le?Ve:getIterationMethod(be),entries:getIterationMethod(we)},Se)for(Ie in Pe)(fe||Re||!(Ie in qe))&&ee(qe,Ie,Pe[Ie]);else m({target:s,proto:!0,forced:fe||Re},Pe);return _&&!Se||qe[ye]===Ve||ee(qe,ye,Ve,{name:ae}),ie[s]=Ve,Pe}},35143:(i,s,u)=>{"use strict";var m,v,_,j=u(95981),M=u(57475),$=u(10941),W=u(29290),X=u(249),Y=u(95929),Z=u(99813),ee=u(82529),ae=Z("iterator"),ie=!1;[].keys&&("next"in(_=[].keys())?(v=X(X(_)))!==Object.prototype&&(m=v):ie=!0),!$(m)||j((function(){var i={};return m[ae].call(i)!==i}))?m={}:ee&&(m=W(m)),M(m[ae])||Y(m,ae,(function(){return this})),i.exports={IteratorPrototype:m,BUGGY_SAFARI_ITERATORS:ie}},12077:i=>{i.exports={}},10623:(i,s,u)=>{var m=u(43057);i.exports=function(i){return m(i.length)}},35331:i=>{var s=Math.ceil,u=Math.floor;i.exports=Math.trunc||function trunc(i){var m=+i;return(m>0?u:s)(m)}},14649:(i,s,u)=>{var m=u(85803);i.exports=function(i,s){return void 0===i?arguments.length<2?"":s:m(i)}},24420:(i,s,u)=>{"use strict";var m=u(55746),v=u(95329),_=u(78834),j=u(95981),M=u(14771),$=u(87857),W=u(36760),X=u(89678),Y=u(37026),Z=Object.assign,ee=Object.defineProperty,ae=v([].concat);i.exports=!Z||j((function(){if(m&&1!==Z({b:1},Z(ee({},"a",{enumerable:!0,get:function(){ee(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var i={},s={},u=Symbol(),v="abcdefghijklmnopqrst";return i[u]=7,v.split("").forEach((function(i){s[i]=i})),7!=Z({},i)[u]||M(Z({},s)).join("")!=v}))?function assign(i,s){for(var u=X(i),v=arguments.length,j=1,Z=$.f,ee=W.f;v>j;)for(var ie,le=Y(arguments[j++]),ce=Z?ae(M(le),Z(le)):M(le),pe=ce.length,de=0;pe>de;)ie=ce[de++],m&&!_(ee,le,ie)||(u[ie]=le[ie]);return u}:Z},29290:(i,s,u)=>{var m,v=u(96059),_=u(59938),j=u(56759),M=u(27748),$=u(15463),W=u(61333),X=u(44262),Y="prototype",Z="script",ee=X("IE_PROTO"),EmptyConstructor=function(){},scriptTag=function(i){return"<"+Z+">"+i+""},NullProtoObjectViaActiveX=function(i){i.write(scriptTag("")),i.close();var s=i.parentWindow.Object;return i=null,s},NullProtoObject=function(){try{m=new ActiveXObject("htmlfile")}catch(i){}var i,s,u;NullProtoObject="undefined"!=typeof document?document.domain&&m?NullProtoObjectViaActiveX(m):(s=W("iframe"),u="java"+Z+":",s.style.display="none",$.appendChild(s),s.src=String(u),(i=s.contentWindow.document).open(),i.write(scriptTag("document.F=Object")),i.close(),i.F):NullProtoObjectViaActiveX(m);for(var v=j.length;v--;)delete NullProtoObject[Y][j[v]];return NullProtoObject()};M[ee]=!0,i.exports=Object.create||function create(i,s){var u;return null!==i?(EmptyConstructor[Y]=v(i),u=new EmptyConstructor,EmptyConstructor[Y]=null,u[ee]=i):u=NullProtoObject(),void 0===s?u:_.f(u,s)}},59938:(i,s,u)=>{var m=u(55746),v=u(83937),_=u(65988),j=u(96059),M=u(74529),$=u(14771);s.f=m&&!v?Object.defineProperties:function defineProperties(i,s){j(i);for(var u,m=M(s),v=$(s),W=v.length,X=0;W>X;)_.f(i,u=v[X++],m[u]);return i}},65988:(i,s,u)=>{var m=u(55746),v=u(2840),_=u(83937),j=u(96059),M=u(83894),$=TypeError,W=Object.defineProperty,X=Object.getOwnPropertyDescriptor,Y="enumerable",Z="configurable",ee="writable";s.f=m?_?function defineProperty(i,s,u){if(j(i),s=M(s),j(u),"function"==typeof i&&"prototype"===s&&"value"in u&&ee in u&&!u[ee]){var m=X(i,s);m&&m[ee]&&(i[s]=u.value,u={configurable:Z in u?u[Z]:m[Z],enumerable:Y in u?u[Y]:m[Y],writable:!1})}return W(i,s,u)}:W:function defineProperty(i,s,u){if(j(i),s=M(s),j(u),v)try{return W(i,s,u)}catch(i){}if("get"in u||"set"in u)throw $("Accessors not supported");return"value"in u&&(i[s]=u.value),i}},49677:(i,s,u)=>{var m=u(55746),v=u(78834),_=u(36760),j=u(31887),M=u(74529),$=u(83894),W=u(90953),X=u(2840),Y=Object.getOwnPropertyDescriptor;s.f=m?Y:function getOwnPropertyDescriptor(i,s){if(i=M(i),s=$(s),X)try{return Y(i,s)}catch(i){}if(W(i,s))return j(!v(_.f,i,s),i[s])}},10946:(i,s,u)=>{var m=u(55629),v=u(56759).concat("length","prototype");s.f=Object.getOwnPropertyNames||function getOwnPropertyNames(i){return m(i,v)}},87857:(i,s)=>{s.f=Object.getOwnPropertySymbols},249:(i,s,u)=>{var m=u(90953),v=u(57475),_=u(89678),j=u(44262),M=u(91310),$=j("IE_PROTO"),W=Object,X=W.prototype;i.exports=M?W.getPrototypeOf:function(i){var s=_(i);if(m(s,$))return s[$];var u=s.constructor;return v(u)&&s instanceof u?u.prototype:s instanceof W?X:null}},7046:(i,s,u)=>{var m=u(95329);i.exports=m({}.isPrototypeOf)},55629:(i,s,u)=>{var m=u(95329),v=u(90953),_=u(74529),j=u(31692).indexOf,M=u(27748),$=m([].push);i.exports=function(i,s){var u,m=_(i),W=0,X=[];for(u in m)!v(M,u)&&v(m,u)&&$(X,u);for(;s.length>W;)v(m,u=s[W++])&&(~j(X,u)||$(X,u));return X}},14771:(i,s,u)=>{var m=u(55629),v=u(56759);i.exports=Object.keys||function keys(i){return m(i,v)}},36760:(i,s)=>{"use strict";var u={}.propertyIsEnumerable,m=Object.getOwnPropertyDescriptor,v=m&&!u.call({1:2},1);s.f=v?function propertyIsEnumerable(i){var s=m(this,i);return!!s&&s.enumerable}:u},88929:(i,s,u)=>{var m=u(45526),v=u(96059),_=u(11851);i.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var i,s=!1,u={};try{(i=m(Object.prototype,"__proto__","set"))(u,[]),s=u instanceof Array}catch(i){}return function setPrototypeOf(u,m){return v(u),_(m),s?i(u,m):u.__proto__=m,u}}():void 0)},95623:(i,s,u)=>{"use strict";var m=u(22885),v=u(9697);i.exports=m?{}.toString:function toString(){return"[object "+v(this)+"]"}},39811:(i,s,u)=>{var m=u(78834),v=u(57475),_=u(10941),j=TypeError;i.exports=function(i,s){var u,M;if("string"===s&&v(u=i.toString)&&!_(M=m(u,i)))return M;if(v(u=i.valueOf)&&!_(M=m(u,i)))return M;if("string"!==s&&v(u=i.toString)&&!_(M=m(u,i)))return M;throw j("Can't convert object to primitive value")}},31136:(i,s,u)=>{var m=u(626),v=u(95329),_=u(10946),j=u(87857),M=u(96059),$=v([].concat);i.exports=m("Reflect","ownKeys")||function ownKeys(i){var s=_.f(M(i)),u=j.f;return u?$(s,u(i)):s}},54058:i=>{i.exports={}},9056:(i,s,u)=>{var m=u(65988).f;i.exports=function(i,s,u){u in i||m(i,u,{configurable:!0,get:function(){return s[u]},set:function(i){s[u]=i}})}},48219:(i,s,u)=>{var m=u(82119),v=TypeError;i.exports=function(i){if(m(i))throw v("Can't call method on "+i);return i}},90904:(i,s,u)=>{var m=u(22885),v=u(65988).f,_=u(32029),j=u(90953),M=u(95623),$=u(99813)("toStringTag");i.exports=function(i,s,u,W){if(i){var X=u?i:i.prototype;j(X,$)||v(X,$,{configurable:!0,value:s}),W&&!m&&_(X,"toString",M)}}},44262:(i,s,u)=>{var m=u(68726),v=u(99418),_=m("keys");i.exports=function(i){return _[i]||(_[i]=v(i))}},63030:(i,s,u)=>{var m=u(21899),v=u(75609),_="__core-js_shared__",j=m[_]||v(_,{});i.exports=j},68726:(i,s,u)=>{var m=u(82529),v=u(63030);(i.exports=function(i,s){return v[i]||(v[i]=void 0!==s?s:{})})("versions",[]).push({version:"3.31.1",mode:m?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.31.1/LICENSE",source:"https://github.com/zloirock/core-js"})},64620:(i,s,u)=>{var m=u(95329),v=u(62435),_=u(85803),j=u(48219),M=m("".charAt),$=m("".charCodeAt),W=m("".slice),createMethod=function(i){return function(s,u){var m,X,Y=_(j(s)),Z=v(u),ee=Y.length;return Z<0||Z>=ee?i?"":void 0:(m=$(Y,Z))<55296||m>56319||Z+1===ee||(X=$(Y,Z+1))<56320||X>57343?i?M(Y,Z):m:i?W(Y,Z,Z+2):X-56320+(m-55296<<10)+65536}};i.exports={codeAt:createMethod(!1),charAt:createMethod(!0)}},63405:(i,s,u)=>{var m=u(53385),v=u(95981),_=u(21899).String;i.exports=!!Object.getOwnPropertySymbols&&!v((function(){var i=Symbol();return!_(i)||!(Object(i)instanceof Symbol)||!Symbol.sham&&m&&m<41}))},59413:(i,s,u)=>{var m=u(62435),v=Math.max,_=Math.min;i.exports=function(i,s){var u=m(i);return u<0?v(u+s,0):_(u,s)}},74529:(i,s,u)=>{var m=u(37026),v=u(48219);i.exports=function(i){return m(v(i))}},62435:(i,s,u)=>{var m=u(35331);i.exports=function(i){var s=+i;return s!=s||0===s?0:m(s)}},43057:(i,s,u)=>{var m=u(62435),v=Math.min;i.exports=function(i){return i>0?v(m(i),9007199254740991):0}},89678:(i,s,u)=>{var m=u(48219),v=Object;i.exports=function(i){return v(m(i))}},46935:(i,s,u)=>{var m=u(78834),v=u(10941),_=u(56664),j=u(14229),M=u(39811),$=u(99813),W=TypeError,X=$("toPrimitive");i.exports=function(i,s){if(!v(i)||_(i))return i;var u,$=j(i,X);if($){if(void 0===s&&(s="default"),u=m($,i,s),!v(u)||_(u))return u;throw W("Can't convert object to primitive value")}return void 0===s&&(s="number"),M(i,s)}},83894:(i,s,u)=>{var m=u(46935),v=u(56664);i.exports=function(i){var s=m(i,"string");return v(s)?s:s+""}},22885:(i,s,u)=>{var m={};m[u(99813)("toStringTag")]="z",i.exports="[object z]"===String(m)},85803:(i,s,u)=>{var m=u(9697),v=String;i.exports=function(i){if("Symbol"===m(i))throw TypeError("Cannot convert a Symbol value to a string");return v(i)}},69826:i=>{var s=String;i.exports=function(i){try{return s(i)}catch(i){return"Object"}}},99418:(i,s,u)=>{var m=u(95329),v=0,_=Math.random(),j=m(1..toString);i.exports=function(i){return"Symbol("+(void 0===i?"":i)+")_"+j(++v+_,36)}},32302:(i,s,u)=>{var m=u(63405);i.exports=m&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},83937:(i,s,u)=>{var m=u(55746),v=u(95981);i.exports=m&&v((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},47093:(i,s,u)=>{var m=u(21899),v=u(57475),_=m.WeakMap;i.exports=v(_)&&/native code/.test(String(_))},99813:(i,s,u)=>{var m=u(21899),v=u(68726),_=u(90953),j=u(99418),M=u(63405),$=u(32302),W=m.Symbol,X=v("wks"),Y=$?W.for||W:W&&W.withoutSetter||j;i.exports=function(i){return _(X,i)||(X[i]=M&&_(W,i)?W[i]:Y("Symbol."+i)),X[i]}},62864:(i,s,u)=>{"use strict";var m=u(626),v=u(90953),_=u(32029),j=u(7046),M=u(88929),$=u(23489),W=u(9056),X=u(70926),Y=u(14649),Z=u(53794),ee=u(79585),ae=u(55746),ie=u(82529);i.exports=function(i,s,u,le){var ce="stackTraceLimit",pe=le?2:1,de=i.split("."),fe=de[de.length-1],ye=m.apply(null,de);if(ye){var be=ye.prototype;if(!ie&&v(be,"cause")&&delete be.cause,!u)return ye;var _e=m("Error"),we=s((function(i,s){var u=Y(le?s:i,void 0),m=le?new ye(i):new ye;return void 0!==u&&_(m,"message",u),ee(m,we,m.stack,2),this&&j(be,this)&&X(m,this,we),arguments.length>pe&&Z(m,arguments[pe]),m}));if(we.prototype=be,"Error"!==fe?M?M(we,_e):$(we,_e,{name:!0}):ae&&ce in ye&&(W(we,ye,ce),W(we,ye,"prepareStackTrace")),$(we,ye),!ie)try{be.name!==fe&&_(be,"name",fe),be.constructor=we}catch(i){}return we}}},24415:(i,s,u)=>{var m=u(76887),v=u(626),_=u(79730),j=u(95981),M=u(62864),$="AggregateError",W=v($),X=!j((function(){return 1!==W([1]).errors[0]}))&&j((function(){return 7!==W([1],$,{cause:7}).cause}));m({global:!0,constructor:!0,arity:2,forced:X},{AggregateError:M($,(function(i){return function AggregateError(s,u){return _(i,this,arguments)}}),X,!0)})},49812:(i,s,u)=>{"use strict";var m=u(76887),v=u(7046),_=u(249),j=u(88929),M=u(23489),$=u(29290),W=u(32029),X=u(31887),Y=u(53794),Z=u(79585),ee=u(93091),ae=u(14649),ie=u(99813)("toStringTag"),le=Error,ce=[].push,pe=function AggregateError(i,s){var u,m=v(de,this);j?u=j(le(),m?_(this):de):(u=m?this:$(de),W(u,ie,"Error")),void 0!==s&&W(u,"message",ae(s)),Z(u,pe,u.stack,1),arguments.length>2&&Y(u,arguments[2]);var M=[];return ee(i,ce,{that:M}),W(u,"errors",M),u};j?j(pe,le):M(pe,le,{name:!0});var de=pe.prototype=$(le.prototype,{constructor:X(1,pe),message:X(1,""),name:X(1,"AggregateError")});m({global:!0,constructor:!0,arity:2},{AggregateError:pe})},47627:(i,s,u)=>{u(49812)},66274:(i,s,u)=>{"use strict";var m=u(74529),v=u(18479),_=u(12077),j=u(45402),M=u(65988).f,$=u(75105),W=u(23538),X=u(82529),Y=u(55746),Z="Array Iterator",ee=j.set,ae=j.getterFor(Z);i.exports=$(Array,"Array",(function(i,s){ee(this,{type:Z,target:m(i),index:0,kind:s})}),(function(){var i=ae(this),s=i.target,u=i.kind,m=i.index++;return!s||m>=s.length?(i.target=void 0,W(void 0,!0)):W("keys"==u?m:"values"==u?s[m]:[m,s[m]],!1)}),"values");var ie=_.Arguments=_.Array;if(v("keys"),v("values"),v("entries"),!X&&Y&&"values"!==ie.name)try{M(ie,"name",{value:"values"})}catch(i){}},61181:(i,s,u)=>{var m=u(76887),v=u(21899),_=u(79730),j=u(62864),M="WebAssembly",$=v[M],W=7!==Error("e",{cause:7}).cause,exportGlobalErrorCauseWrapper=function(i,s){var u={};u[i]=j(i,s,W),m({global:!0,constructor:!0,arity:1,forced:W},u)},exportWebAssemblyErrorCauseWrapper=function(i,s){if($&&$[i]){var u={};u[i]=j(M+"."+i,s,W),m({target:M,stat:!0,constructor:!0,arity:1,forced:W},u)}};exportGlobalErrorCauseWrapper("Error",(function(i){return function Error(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("EvalError",(function(i){return function EvalError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("RangeError",(function(i){return function RangeError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("ReferenceError",(function(i){return function ReferenceError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("SyntaxError",(function(i){return function SyntaxError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("TypeError",(function(i){return function TypeError(s){return _(i,this,arguments)}})),exportGlobalErrorCauseWrapper("URIError",(function(i){return function URIError(s){return _(i,this,arguments)}})),exportWebAssemblyErrorCauseWrapper("CompileError",(function(i){return function CompileError(s){return _(i,this,arguments)}})),exportWebAssemblyErrorCauseWrapper("LinkError",(function(i){return function LinkError(s){return _(i,this,arguments)}})),exportWebAssemblyErrorCauseWrapper("RuntimeError",(function(i){return function RuntimeError(s){return _(i,this,arguments)}}))},73381:(i,s,u)=>{var m=u(76887),v=u(98308);m({target:"Function",proto:!0,forced:Function.bind!==v},{bind:v})},49221:(i,s,u)=>{var m=u(76887),v=u(24420);m({target:"Object",stat:!0,arity:2,forced:Object.assign!==v},{assign:v})},77971:(i,s,u)=>{"use strict";var m=u(64620).charAt,v=u(85803),_=u(45402),j=u(75105),M=u(23538),$="String Iterator",W=_.set,X=_.getterFor($);j(String,"String",(function(i){W(this,{type:$,string:v(i),index:0})}),(function next(){var i,s=X(this),u=s.string,v=s.index;return v>=u.length?M(void 0,!0):(i=m(u,v),s.index+=i.length,M(i,!1))}))},89731:(i,s,u)=>{u(47627)},7634:(i,s,u)=>{u(66274);var m=u(63281),v=u(21899),_=u(9697),j=u(32029),M=u(12077),$=u(99813)("toStringTag");for(var W in m){var X=v[W],Y=X&&X.prototype;Y&&_(Y)!==$&&j(Y,$,W),M[W]=M.Array}},18957:(i,s,u)=>{u(89731);var m=u(50415);u(7634),i.exports=m},28196:(i,s,u)=>{var m=u(16246);i.exports=m},63383:(i,s,u)=>{var m=u(45999);i.exports=m},8269:function(i,s,u){var m;m=void 0!==u.g?u.g:this,i.exports=function(i){if(i.CSS&&i.CSS.escape)return i.CSS.escape;var cssEscape=function(i){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var s,u=String(i),m=u.length,v=-1,_="",j=u.charCodeAt(0);++v=1&&s<=31||127==s||0==v&&s>=48&&s<=57||1==v&&s>=48&&s<=57&&45==j?"\\"+s.toString(16)+" ":0==v&&1==m&&45==s||!(s>=128||45==s||95==s||s>=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122)?"\\"+u.charAt(v):u.charAt(v):_+="�";return _};return i.CSS||(i.CSS={}),i.CSS.escape=cssEscape,cssEscape}(m)},27698:(i,s,u)=>{"use strict";var m=u(48764).Buffer;function isSpecificValue(i){return i instanceof m||i instanceof Date||i instanceof RegExp}function cloneSpecificValue(i){if(i instanceof m){var s=m.alloc?m.alloc(i.length):new m(i.length);return i.copy(s),s}if(i instanceof Date)return new Date(i.getTime());if(i instanceof RegExp)return new RegExp(i);throw new Error("Unexpected situation")}function deepCloneArray(i){var s=[];return i.forEach((function(i,u){"object"==typeof i&&null!==i?Array.isArray(i)?s[u]=deepCloneArray(i):isSpecificValue(i)?s[u]=cloneSpecificValue(i):s[u]=v({},i):s[u]=i})),s}function safeGetProperty(i,s){return"__proto__"===s?void 0:i[s]}var v=i.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var i,s,u=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(m){"object"!=typeof m||null===m||Array.isArray(m)||Object.keys(m).forEach((function(_){return s=safeGetProperty(u,_),(i=safeGetProperty(m,_))===u?void 0:"object"!=typeof i||null===i?void(u[_]=i):Array.isArray(i)?void(u[_]=deepCloneArray(i)):isSpecificValue(i)?void(u[_]=cloneSpecificValue(i)):"object"!=typeof s||null===s||Array.isArray(s)?void(u[_]=v({},i)):void(u[_]=v(s,i))}))})),u}},9996:i=>{"use strict";var s=function isMergeableObject(i){return function isNonNullObject(i){return!!i&&"object"==typeof i}(i)&&!function isSpecial(i){var s=Object.prototype.toString.call(i);return"[object RegExp]"===s||"[object Date]"===s||function isReactElement(i){return i.$$typeof===u}(i)}(i)};var u="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function cloneUnlessOtherwiseSpecified(i,s){return!1!==s.clone&&s.isMergeableObject(i)?deepmerge(function emptyTarget(i){return Array.isArray(i)?[]:{}}(i),i,s):i}function defaultArrayMerge(i,s,u){return i.concat(s).map((function(i){return cloneUnlessOtherwiseSpecified(i,u)}))}function getKeys(i){return Object.keys(i).concat(function getEnumerableOwnPropertySymbols(i){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(i).filter((function(s){return Object.propertyIsEnumerable.call(i,s)})):[]}(i))}function propertyIsOnObject(i,s){try{return s in i}catch(i){return!1}}function mergeObject(i,s,u){var m={};return u.isMergeableObject(i)&&getKeys(i).forEach((function(s){m[s]=cloneUnlessOtherwiseSpecified(i[s],u)})),getKeys(s).forEach((function(v){(function propertyIsUnsafe(i,s){return propertyIsOnObject(i,s)&&!(Object.hasOwnProperty.call(i,s)&&Object.propertyIsEnumerable.call(i,s))})(i,v)||(propertyIsOnObject(i,v)&&u.isMergeableObject(s[v])?m[v]=function getMergeFunction(i,s){if(!s.customMerge)return deepmerge;var u=s.customMerge(i);return"function"==typeof u?u:deepmerge}(v,u)(i[v],s[v],u):m[v]=cloneUnlessOtherwiseSpecified(s[v],u))})),m}function deepmerge(i,u,m){(m=m||{}).arrayMerge=m.arrayMerge||defaultArrayMerge,m.isMergeableObject=m.isMergeableObject||s,m.cloneUnlessOtherwiseSpecified=cloneUnlessOtherwiseSpecified;var v=Array.isArray(u);return v===Array.isArray(i)?v?m.arrayMerge(i,u,m):mergeObject(i,u,m):cloneUnlessOtherwiseSpecified(u,m)}deepmerge.all=function deepmergeAll(i,s){if(!Array.isArray(i))throw new Error("first argument should be an array");return i.reduce((function(i,u){return deepmerge(i,u,s)}),{})};var m=deepmerge;i.exports=m},27856:function(i){i.exports=function(){"use strict";const{entries:i,setPrototypeOf:s,isFrozen:u,getPrototypeOf:m,getOwnPropertyDescriptor:v}=Object;let{freeze:_,seal:j,create:M}=Object,{apply:$,construct:W}="undefined"!=typeof Reflect&&Reflect;_||(_=function freeze(i){return i}),j||(j=function seal(i){return i}),$||($=function apply(i,s,u){return i.apply(s,u)}),W||(W=function construct(i,s){return new i(...s)});const X=unapply(Array.prototype.forEach),Y=unapply(Array.prototype.pop),Z=unapply(Array.prototype.push),ee=unapply(String.prototype.toLowerCase),ae=unapply(String.prototype.toString),ie=unapply(String.prototype.match),le=unapply(String.prototype.replace),ce=unapply(String.prototype.indexOf),pe=unapply(String.prototype.trim),de=unapply(RegExp.prototype.test),fe=unconstruct(TypeError);function unapply(i){return function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v2&&void 0!==arguments[2]?arguments[2]:ee;s&&s(i,null);let _=m.length;for(;_--;){let s=m[_];if("string"==typeof s){const i=v(s);i!==s&&(u(m)||(m[_]=i),s=i)}i[s]=!0}return i}function clone(s){const u=M(null);for(const[m,_]of i(s))void 0!==v(s,m)&&(u[m]=_);return u}function lookupGetter(i,s){for(;null!==i;){const u=v(i,s);if(u){if(u.get)return unapply(u.get);if("function"==typeof u.value)return unapply(u.value)}i=m(i)}function fallbackValue(i){return console.warn("fallback value for",i),null}return fallbackValue}const ye=_(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),be=_(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),_e=_(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),we=_(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Se=_(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),xe=_(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Pe=_(["#text"]),Ie=_(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),Te=_(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Re=_(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),qe=_(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),ze=j(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Ve=j(/<%[\w\W]*|[\w\W]*%>/gm),We=j(/\${[\w\W]*}/gm),He=j(/^data-[\-\w.\u00B7-\uFFFF]/),Xe=j(/^aria-[\-\w]+$/),Ye=j(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Qe=j(/^(?:\w+script|data):/i),et=j(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),tt=j(/^html$/i);var rt=Object.freeze({__proto__:null,MUSTACHE_EXPR:ze,ERB_EXPR:Ve,TMPLIT_EXPR:We,DATA_ATTR:He,ARIA_ATTR:Xe,IS_ALLOWED_URI:Ye,IS_SCRIPT_OR_DATA:Qe,ATTR_WHITESPACE:et,DOCTYPE_NAME:tt});const nt=function getGlobal(){return"undefined"==typeof window?null:window},ot=function _createTrustedTypesPolicy(i,s){if("object"!=typeof i||"function"!=typeof i.createPolicy)return null;let u=null;const m="data-tt-policy-suffix";s&&s.hasAttribute(m)&&(u=s.getAttribute(m));const v="dompurify"+(u?"#"+u:"");try{return i.createPolicy(v,{createHTML:i=>i,createScriptURL:i=>i})}catch(i){return console.warn("TrustedTypes policy "+v+" could not be created."),null}};function createDOMPurify(){let s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:nt();const DOMPurify=i=>createDOMPurify(i);if(DOMPurify.version="3.0.6",DOMPurify.removed=[],!s||!s.document||9!==s.document.nodeType)return DOMPurify.isSupported=!1,DOMPurify;let{document:u}=s;const m=u,v=m.currentScript,{DocumentFragment:j,HTMLTemplateElement:$,Node:W,Element:ze,NodeFilter:Ve,NamedNodeMap:We=s.NamedNodeMap||s.MozNamedAttrMap,HTMLFormElement:He,DOMParser:Xe,trustedTypes:Qe}=s,et=ze.prototype,at=lookupGetter(et,"cloneNode"),it=lookupGetter(et,"nextSibling"),st=lookupGetter(et,"childNodes"),lt=lookupGetter(et,"parentNode");if("function"==typeof $){const i=u.createElement("template");i.content&&i.content.ownerDocument&&(u=i.content.ownerDocument)}let ct,ut="";const{implementation:pt,createNodeIterator:ht,createDocumentFragment:dt,getElementsByTagName:mt}=u,{importNode:gt}=m;let yt={};DOMPurify.isSupported="function"==typeof i&&"function"==typeof lt&&pt&&void 0!==pt.createHTMLDocument;const{MUSTACHE_EXPR:vt,ERB_EXPR:bt,TMPLIT_EXPR:_t,DATA_ATTR:Et,ARIA_ATTR:wt,IS_SCRIPT_OR_DATA:St,ATTR_WHITESPACE:xt}=rt;let{IS_ALLOWED_URI:kt}=rt,Ot=null;const At=addToSet({},[...ye,...be,..._e,...Se,...Pe]);let Ct=null;const jt=addToSet({},[...Ie,...Te,...Re,...qe]);let Pt=Object.seal(M(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),It=null,Nt=null,Tt=!0,Mt=!0,Rt=!1,Bt=!0,Dt=!1,Lt=!1,Ft=!1,qt=!1,$t=!1,zt=!1,Ut=!1,Vt=!0,Wt=!1;const Kt="user-content-";let Ht=!0,Jt=!1,Gt={},Xt=null;const Yt=addToSet({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Qt=null;const Zt=addToSet({},["audio","video","img","source","image","track"]);let er=null;const tr=addToSet({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),rr="http://www.w3.org/1998/Math/MathML",nr="http://www.w3.org/2000/svg",ar="http://www.w3.org/1999/xhtml";let ir=ar,sr=!1,lr=null;const cr=addToSet({},[rr,nr,ar],ae);let ur=null;const pr=["application/xhtml+xml","text/html"],dr="text/html";let fr=null,mr=null;const gr=u.createElement("form"),yr=function isRegexOrFunction(i){return i instanceof RegExp||i instanceof Function},vr=function _parseConfig(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!mr||mr!==i){if(i&&"object"==typeof i||(i={}),i=clone(i),ur=ur=-1===pr.indexOf(i.PARSER_MEDIA_TYPE)?dr:i.PARSER_MEDIA_TYPE,fr="application/xhtml+xml"===ur?ae:ee,Ot="ALLOWED_TAGS"in i?addToSet({},i.ALLOWED_TAGS,fr):At,Ct="ALLOWED_ATTR"in i?addToSet({},i.ALLOWED_ATTR,fr):jt,lr="ALLOWED_NAMESPACES"in i?addToSet({},i.ALLOWED_NAMESPACES,ae):cr,er="ADD_URI_SAFE_ATTR"in i?addToSet(clone(tr),i.ADD_URI_SAFE_ATTR,fr):tr,Qt="ADD_DATA_URI_TAGS"in i?addToSet(clone(Zt),i.ADD_DATA_URI_TAGS,fr):Zt,Xt="FORBID_CONTENTS"in i?addToSet({},i.FORBID_CONTENTS,fr):Yt,It="FORBID_TAGS"in i?addToSet({},i.FORBID_TAGS,fr):{},Nt="FORBID_ATTR"in i?addToSet({},i.FORBID_ATTR,fr):{},Gt="USE_PROFILES"in i&&i.USE_PROFILES,Tt=!1!==i.ALLOW_ARIA_ATTR,Mt=!1!==i.ALLOW_DATA_ATTR,Rt=i.ALLOW_UNKNOWN_PROTOCOLS||!1,Bt=!1!==i.ALLOW_SELF_CLOSE_IN_ATTR,Dt=i.SAFE_FOR_TEMPLATES||!1,Lt=i.WHOLE_DOCUMENT||!1,$t=i.RETURN_DOM||!1,zt=i.RETURN_DOM_FRAGMENT||!1,Ut=i.RETURN_TRUSTED_TYPE||!1,qt=i.FORCE_BODY||!1,Vt=!1!==i.SANITIZE_DOM,Wt=i.SANITIZE_NAMED_PROPS||!1,Ht=!1!==i.KEEP_CONTENT,Jt=i.IN_PLACE||!1,kt=i.ALLOWED_URI_REGEXP||Ye,ir=i.NAMESPACE||ar,Pt=i.CUSTOM_ELEMENT_HANDLING||{},i.CUSTOM_ELEMENT_HANDLING&&yr(i.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Pt.tagNameCheck=i.CUSTOM_ELEMENT_HANDLING.tagNameCheck),i.CUSTOM_ELEMENT_HANDLING&&yr(i.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Pt.attributeNameCheck=i.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),i.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof i.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Pt.allowCustomizedBuiltInElements=i.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Dt&&(Mt=!1),zt&&($t=!0),Gt&&(Ot=addToSet({},[...Pe]),Ct=[],!0===Gt.html&&(addToSet(Ot,ye),addToSet(Ct,Ie)),!0===Gt.svg&&(addToSet(Ot,be),addToSet(Ct,Te),addToSet(Ct,qe)),!0===Gt.svgFilters&&(addToSet(Ot,_e),addToSet(Ct,Te),addToSet(Ct,qe)),!0===Gt.mathMl&&(addToSet(Ot,Se),addToSet(Ct,Re),addToSet(Ct,qe))),i.ADD_TAGS&&(Ot===At&&(Ot=clone(Ot)),addToSet(Ot,i.ADD_TAGS,fr)),i.ADD_ATTR&&(Ct===jt&&(Ct=clone(Ct)),addToSet(Ct,i.ADD_ATTR,fr)),i.ADD_URI_SAFE_ATTR&&addToSet(er,i.ADD_URI_SAFE_ATTR,fr),i.FORBID_CONTENTS&&(Xt===Yt&&(Xt=clone(Xt)),addToSet(Xt,i.FORBID_CONTENTS,fr)),Ht&&(Ot["#text"]=!0),Lt&&addToSet(Ot,["html","head","body"]),Ot.table&&(addToSet(Ot,["tbody"]),delete It.tbody),i.TRUSTED_TYPES_POLICY){if("function"!=typeof i.TRUSTED_TYPES_POLICY.createHTML)throw fe('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof i.TRUSTED_TYPES_POLICY.createScriptURL)throw fe('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');ct=i.TRUSTED_TYPES_POLICY,ut=ct.createHTML("")}else void 0===ct&&(ct=ot(Qe,v)),null!==ct&&"string"==typeof ut&&(ut=ct.createHTML(""));_&&_(i),mr=i}},br=addToSet({},["mi","mo","mn","ms","mtext"]),_r=addToSet({},["foreignobject","desc","title","annotation-xml"]),Er=addToSet({},["title","style","font","a","script"]),wr=addToSet({},be);addToSet(wr,_e),addToSet(wr,we);const Sr=addToSet({},Se);addToSet(Sr,xe);const xr=function _checkValidNamespace(i){let s=lt(i);s&&s.tagName||(s={namespaceURI:ir,tagName:"template"});const u=ee(i.tagName),m=ee(s.tagName);return!!lr[i.namespaceURI]&&(i.namespaceURI===nr?s.namespaceURI===ar?"svg"===u:s.namespaceURI===rr?"svg"===u&&("annotation-xml"===m||br[m]):Boolean(wr[u]):i.namespaceURI===rr?s.namespaceURI===ar?"math"===u:s.namespaceURI===nr?"math"===u&&_r[m]:Boolean(Sr[u]):i.namespaceURI===ar?!(s.namespaceURI===nr&&!_r[m])&&!(s.namespaceURI===rr&&!br[m])&&!Sr[u]&&(Er[u]||!wr[u]):!("application/xhtml+xml"!==ur||!lr[i.namespaceURI]))},kr=function _forceRemove(i){Z(DOMPurify.removed,{element:i});try{i.parentNode.removeChild(i)}catch(s){i.remove()}},Or=function _removeAttribute(i,s){try{Z(DOMPurify.removed,{attribute:s.getAttributeNode(i),from:s})}catch(i){Z(DOMPurify.removed,{attribute:null,from:s})}if(s.removeAttribute(i),"is"===i&&!Ct[i])if($t||zt)try{kr(s)}catch(i){}else try{s.setAttribute(i,"")}catch(i){}},Ar=function _initDocument(i){let s=null,m=null;if(qt)i=""+i;else{const s=ie(i,/^[\r\n\t ]+/);m=s&&s[0]}"application/xhtml+xml"===ur&&ir===ar&&(i=''+i+"");const v=ct?ct.createHTML(i):i;if(ir===ar)try{s=(new Xe).parseFromString(v,ur)}catch(i){}if(!s||!s.documentElement){s=pt.createDocument(ir,"template",null);try{s.documentElement.innerHTML=sr?ut:v}catch(i){}}const _=s.body||s.documentElement;return i&&m&&_.insertBefore(u.createTextNode(m),_.childNodes[0]||null),ir===ar?mt.call(s,Lt?"html":"body")[0]:Lt?s.documentElement:_},Cr=function _createNodeIterator(i){return ht.call(i.ownerDocument||i,i,Ve.SHOW_ELEMENT|Ve.SHOW_COMMENT|Ve.SHOW_TEXT,null)},jr=function _isClobbered(i){return i instanceof He&&("string"!=typeof i.nodeName||"string"!=typeof i.textContent||"function"!=typeof i.removeChild||!(i.attributes instanceof We)||"function"!=typeof i.removeAttribute||"function"!=typeof i.setAttribute||"string"!=typeof i.namespaceURI||"function"!=typeof i.insertBefore||"function"!=typeof i.hasChildNodes)},Pr=function _isNode(i){return"function"==typeof W&&i instanceof W},Ir=function _executeHook(i,s,u){yt[i]&&X(yt[i],(i=>{i.call(DOMPurify,s,u,mr)}))},Nr=function _sanitizeElements(i){let s=null;if(Ir("beforeSanitizeElements",i,null),jr(i))return kr(i),!0;const u=fr(i.nodeName);if(Ir("uponSanitizeElement",i,{tagName:u,allowedTags:Ot}),i.hasChildNodes()&&!Pr(i.firstElementChild)&&de(/<[/\w]/g,i.innerHTML)&&de(/<[/\w]/g,i.textContent))return kr(i),!0;if(!Ot[u]||It[u]){if(!It[u]&&Mr(u)){if(Pt.tagNameCheck instanceof RegExp&&de(Pt.tagNameCheck,u))return!1;if(Pt.tagNameCheck instanceof Function&&Pt.tagNameCheck(u))return!1}if(Ht&&!Xt[u]){const s=lt(i)||i.parentNode,u=st(i)||i.childNodes;if(u&&s)for(let m=u.length-1;m>=0;--m)s.insertBefore(at(u[m],!0),it(i))}return kr(i),!0}return i instanceof ze&&!xr(i)?(kr(i),!0):"noscript"!==u&&"noembed"!==u&&"noframes"!==u||!de(/<\/no(script|embed|frames)/i,i.innerHTML)?(Dt&&3===i.nodeType&&(s=i.textContent,X([vt,bt,_t],(i=>{s=le(s,i," ")})),i.textContent!==s&&(Z(DOMPurify.removed,{element:i.cloneNode()}),i.textContent=s)),Ir("afterSanitizeElements",i,null),!1):(kr(i),!0)},Tr=function _isValidAttribute(i,s,m){if(Vt&&("id"===s||"name"===s)&&(m in u||m in gr))return!1;if(Mt&&!Nt[s]&&de(Et,s));else if(Tt&&de(wt,s));else if(!Ct[s]||Nt[s]){if(!(Mr(i)&&(Pt.tagNameCheck instanceof RegExp&&de(Pt.tagNameCheck,i)||Pt.tagNameCheck instanceof Function&&Pt.tagNameCheck(i))&&(Pt.attributeNameCheck instanceof RegExp&&de(Pt.attributeNameCheck,s)||Pt.attributeNameCheck instanceof Function&&Pt.attributeNameCheck(s))||"is"===s&&Pt.allowCustomizedBuiltInElements&&(Pt.tagNameCheck instanceof RegExp&&de(Pt.tagNameCheck,m)||Pt.tagNameCheck instanceof Function&&Pt.tagNameCheck(m))))return!1}else if(er[s]);else if(de(kt,le(m,xt,"")));else if("src"!==s&&"xlink:href"!==s&&"href"!==s||"script"===i||0!==ce(m,"data:")||!Qt[i])if(Rt&&!de(St,le(m,xt,"")));else if(m)return!1;return!0},Mr=function _isBasicCustomElement(i){return i.indexOf("-")>0},Rr=function _sanitizeAttributes(i){Ir("beforeSanitizeAttributes",i,null);const{attributes:s}=i;if(!s)return;const u={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ct};let m=s.length;for(;m--;){const v=s[m],{name:_,namespaceURI:j,value:M}=v,$=fr(_);let W="value"===_?M:pe(M);if(u.attrName=$,u.attrValue=W,u.keepAttr=!0,u.forceKeepAttr=void 0,Ir("uponSanitizeAttribute",i,u),W=u.attrValue,u.forceKeepAttr)continue;if(Or(_,i),!u.keepAttr)continue;if(!Bt&&de(/\/>/i,W)){Or(_,i);continue}Dt&&X([vt,bt,_t],(i=>{W=le(W,i," ")}));const Z=fr(i.nodeName);if(Tr(Z,$,W)){if(!Wt||"id"!==$&&"name"!==$||(Or(_,i),W=Kt+W),ct&&"object"==typeof Qe&&"function"==typeof Qe.getAttributeType)if(j);else switch(Qe.getAttributeType(Z,$)){case"TrustedHTML":W=ct.createHTML(W);break;case"TrustedScriptURL":W=ct.createScriptURL(W)}try{j?i.setAttributeNS(j,_,W):i.setAttribute(_,W),Y(DOMPurify.removed)}catch(i){}}}Ir("afterSanitizeAttributes",i,null)},Br=function _sanitizeShadowDOM(i){let s=null;const u=Cr(i);for(Ir("beforeSanitizeShadowDOM",i,null);s=u.nextNode();)Ir("uponSanitizeShadowNode",s,null),Nr(s)||(s.content instanceof j&&_sanitizeShadowDOM(s.content),Rr(s));Ir("afterSanitizeShadowDOM",i,null)};return DOMPurify.sanitize=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=null,v=null,_=null,M=null;if(sr=!i,sr&&(i="\x3c!--\x3e"),"string"!=typeof i&&!Pr(i)){if("function"!=typeof i.toString)throw fe("toString is not a function");if("string"!=typeof(i=i.toString()))throw fe("dirty is not a string, aborting")}if(!DOMPurify.isSupported)return i;if(Ft||vr(s),DOMPurify.removed=[],"string"==typeof i&&(Jt=!1),Jt){if(i.nodeName){const s=fr(i.nodeName);if(!Ot[s]||It[s])throw fe("root node is forbidden and cannot be sanitized in-place")}}else if(i instanceof W)u=Ar("\x3c!----\x3e"),v=u.ownerDocument.importNode(i,!0),1===v.nodeType&&"BODY"===v.nodeName||"HTML"===v.nodeName?u=v:u.appendChild(v);else{if(!$t&&!Dt&&!Lt&&-1===i.indexOf("<"))return ct&&Ut?ct.createHTML(i):i;if(u=Ar(i),!u)return $t?null:Ut?ut:""}u&&qt&&kr(u.firstChild);const $=Cr(Jt?i:u);for(;_=$.nextNode();)Nr(_)||(_.content instanceof j&&Br(_.content),Rr(_));if(Jt)return i;if($t){if(zt)for(M=dt.call(u.ownerDocument);u.firstChild;)M.appendChild(u.firstChild);else M=u;return(Ct.shadowroot||Ct.shadowrootmode)&&(M=gt.call(m,M,!0)),M}let Y=Lt?u.outerHTML:u.innerHTML;return Lt&&Ot["!doctype"]&&u.ownerDocument&&u.ownerDocument.doctype&&u.ownerDocument.doctype.name&&de(tt,u.ownerDocument.doctype.name)&&(Y="\n"+Y),Dt&&X([vt,bt,_t],(i=>{Y=le(Y,i," ")})),ct&&Ut?ct.createHTML(Y):Y},DOMPurify.setConfig=function(){vr(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ft=!0},DOMPurify.clearConfig=function(){mr=null,Ft=!1},DOMPurify.isValidAttribute=function(i,s,u){mr||vr({});const m=fr(i),v=fr(s);return Tr(m,v,u)},DOMPurify.addHook=function(i,s){"function"==typeof s&&(yt[i]=yt[i]||[],Z(yt[i],s))},DOMPurify.removeHook=function(i){if(yt[i])return Y(yt[i])},DOMPurify.removeHooks=function(i){yt[i]&&(yt[i]=[])},DOMPurify.removeAllHooks=function(){yt={}},DOMPurify}return createDOMPurify()}()},69450:i=>{"use strict";class SubRange{constructor(i,s){this.low=i,this.high=s,this.length=1+s-i}overlaps(i){return!(this.highi.high)}touches(i){return!(this.high+1i.high)}add(i){return new SubRange(Math.min(this.low,i.low),Math.max(this.high,i.high))}subtract(i){return i.low<=this.low&&i.high>=this.high?[]:i.low>this.low&&i.highi+s.length),0)}add(i,s){var _add=i=>{for(var s=0;s{for(var s=0;s{for(var s=0;s{for(var u=s.low;u<=s.high;)i.push(u),u++;return i}),[])}subranges(){return this.ranges.map((i=>({low:i.low,high:i.high,length:1+i.high-i.low})))}}i.exports=DRange},17187:i=>{"use strict";var s,u="object"==typeof Reflect?Reflect:null,m=u&&"function"==typeof u.apply?u.apply:function ReflectApply(i,s,u){return Function.prototype.apply.call(i,s,u)};s=u&&"function"==typeof u.ownKeys?u.ownKeys:Object.getOwnPropertySymbols?function ReflectOwnKeys(i){return Object.getOwnPropertyNames(i).concat(Object.getOwnPropertySymbols(i))}:function ReflectOwnKeys(i){return Object.getOwnPropertyNames(i)};var v=Number.isNaN||function NumberIsNaN(i){return i!=i};function EventEmitter(){EventEmitter.init.call(this)}i.exports=EventEmitter,i.exports.once=function once(i,s){return new Promise((function(u,m){function errorListener(u){i.removeListener(s,resolver),m(u)}function resolver(){"function"==typeof i.removeListener&&i.removeListener("error",errorListener),u([].slice.call(arguments))}eventTargetAgnosticAddListener(i,s,resolver,{once:!0}),"error"!==s&&function addErrorHandlerIfEventEmitter(i,s,u){"function"==typeof i.on&&eventTargetAgnosticAddListener(i,"error",s,u)}(i,errorListener,{once:!0})}))},EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._eventsCount=0,EventEmitter.prototype._maxListeners=void 0;var _=10;function checkListener(i){if("function"!=typeof i)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof i)}function _getMaxListeners(i){return void 0===i._maxListeners?EventEmitter.defaultMaxListeners:i._maxListeners}function _addListener(i,s,u,m){var v,_,j;if(checkListener(u),void 0===(_=i._events)?(_=i._events=Object.create(null),i._eventsCount=0):(void 0!==_.newListener&&(i.emit("newListener",s,u.listener?u.listener:u),_=i._events),j=_[s]),void 0===j)j=_[s]=u,++i._eventsCount;else if("function"==typeof j?j=_[s]=m?[u,j]:[j,u]:m?j.unshift(u):j.push(u),(v=_getMaxListeners(i))>0&&j.length>v&&!j.warned){j.warned=!0;var M=new Error("Possible EventEmitter memory leak detected. "+j.length+" "+String(s)+" listeners added. Use emitter.setMaxListeners() to increase limit");M.name="MaxListenersExceededWarning",M.emitter=i,M.type=s,M.count=j.length,function ProcessEmitWarning(i){console&&console.warn&&console.warn(i)}(M)}return i}function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(i,s,u){var m={fired:!1,wrapFn:void 0,target:i,type:s,listener:u},v=onceWrapper.bind(m);return v.listener=u,m.wrapFn=v,v}function _listeners(i,s,u){var m=i._events;if(void 0===m)return[];var v=m[s];return void 0===v?[]:"function"==typeof v?u?[v.listener||v]:[v]:u?function unwrapListeners(i){for(var s=new Array(i.length),u=0;u0&&(j=s[0]),j instanceof Error)throw j;var M=new Error("Unhandled error."+(j?" ("+j.message+")":""));throw M.context=j,M}var $=_[i];if(void 0===$)return!1;if("function"==typeof $)m($,this,s);else{var W=$.length,X=arrayClone($,W);for(u=0;u=0;_--)if(u[_]===s||u[_].listener===s){j=u[_].listener,v=_;break}if(v<0)return this;0===v?u.shift():function spliceOne(i,s){for(;s+1=0;m--)this.removeListener(i,s[m]);return this},EventEmitter.prototype.listeners=function listeners(i){return _listeners(this,i,!0)},EventEmitter.prototype.rawListeners=function rawListeners(i){return _listeners(this,i,!1)},EventEmitter.listenerCount=function(i,s){return"function"==typeof i.listenerCount?i.listenerCount(s):listenerCount.call(i,s)},EventEmitter.prototype.listenerCount=listenerCount,EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?s(this._events):[]}},21102:(i,s,u)=>{"use strict";var m=u(46291),v=create(Error);function create(i){return FormattedError.displayName=i.displayName||i.name,FormattedError;function FormattedError(s){return s&&(s=m.apply(null,arguments)),new i(s)}}i.exports=v,v.eval=create(EvalError),v.range=create(RangeError),v.reference=create(ReferenceError),v.syntax=create(SyntaxError),v.type=create(TypeError),v.uri=create(URIError),v.create=create},46291:i=>{!function(){var s;function format(i){for(var s,u,m,v,_=1,j=[].slice.call(arguments),M=0,$=i.length,W="",X=!1,Y=!1,nextArg=function(){return j[_++]},slurpNumber=function(){for(var u="";/\d/.test(i[M]);)u+=i[M++],s=i[M];return u.length>0?parseInt(u):null};M<$;++M)if(s=i[M],X)switch(X=!1,"."==s?(Y=!1,s=i[++M]):"0"==s&&"."==i[M+1]?(Y=!0,s=i[M+=2]):Y=!0,v=slurpNumber(),s){case"b":W+=parseInt(nextArg(),10).toString(2);break;case"c":W+="string"==typeof(u=nextArg())||u instanceof String?u:String.fromCharCode(parseInt(u,10));break;case"d":W+=parseInt(nextArg(),10);break;case"f":m=String(parseFloat(nextArg()).toFixed(v||6)),W+=Y?m:m.replace(/^0/,"");break;case"j":W+=JSON.stringify(nextArg());break;case"o":W+="0"+parseInt(nextArg(),10).toString(8);break;case"s":W+=nextArg();break;case"x":W+="0x"+parseInt(nextArg(),10).toString(16);break;case"X":W+="0x"+parseInt(nextArg(),10).toString(16).toUpperCase();break;default:W+=s}else"%"===s?X=!0:W+=s;return W}(s=i.exports=format).format=format,s.vsprintf=function vsprintf(i,s){return format.apply(null,[i].concat(s))},"undefined"!=typeof console&&"function"==typeof console.log&&(s.printf=function printf(){console.log(format.apply(null,arguments))})}()},17648:i=>{"use strict";var s=Array.prototype.slice,u=Object.prototype.toString;i.exports=function bind(i){var m=this;if("function"!=typeof m||"[object Function]"!==u.call(m))throw new TypeError("Function.prototype.bind called on incompatible "+m);for(var v,_=s.call(arguments,1),j=Math.max(0,m.length-_.length),M=[],$=0;${"use strict";var m=u(17648);i.exports=Function.prototype.bind||m},40210:(i,s,u)=>{"use strict";var m,v=SyntaxError,_=Function,j=TypeError,getEvalledConstructor=function(i){try{return _('"use strict"; return ('+i+").constructor;")()}catch(i){}},M=Object.getOwnPropertyDescriptor;if(M)try{M({},"")}catch(i){M=null}var throwTypeError=function(){throw new j},$=M?function(){try{return throwTypeError}catch(i){try{return M(arguments,"callee").get}catch(i){return throwTypeError}}}():throwTypeError,W=u(41405)(),X=u(28185)(),Y=Object.getPrototypeOf||(X?function(i){return i.__proto__}:null),Z={},ee="undefined"!=typeof Uint8Array&&Y?Y(Uint8Array):m,ae={"%AggregateError%":"undefined"==typeof AggregateError?m:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?m:ArrayBuffer,"%ArrayIteratorPrototype%":W&&Y?Y([][Symbol.iterator]()):m,"%AsyncFromSyncIteratorPrototype%":m,"%AsyncFunction%":Z,"%AsyncGenerator%":Z,"%AsyncGeneratorFunction%":Z,"%AsyncIteratorPrototype%":Z,"%Atomics%":"undefined"==typeof Atomics?m:Atomics,"%BigInt%":"undefined"==typeof BigInt?m:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?m:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?m:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?m:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?m:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?m:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?m:FinalizationRegistry,"%Function%":_,"%GeneratorFunction%":Z,"%Int8Array%":"undefined"==typeof Int8Array?m:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?m:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?m:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":W&&Y?Y(Y([][Symbol.iterator]())):m,"%JSON%":"object"==typeof JSON?JSON:m,"%Map%":"undefined"==typeof Map?m:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&W&&Y?Y((new Map)[Symbol.iterator]()):m,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?m:Promise,"%Proxy%":"undefined"==typeof Proxy?m:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?m:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?m:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&W&&Y?Y((new Set)[Symbol.iterator]()):m,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?m:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":W&&Y?Y(""[Symbol.iterator]()):m,"%Symbol%":W?Symbol:m,"%SyntaxError%":v,"%ThrowTypeError%":$,"%TypedArray%":ee,"%TypeError%":j,"%Uint8Array%":"undefined"==typeof Uint8Array?m:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?m:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?m:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?m:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?m:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?m:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?m:WeakSet};if(Y)try{null.error}catch(i){var ie=Y(Y(i));ae["%Error.prototype%"]=ie}var le=function doEval(i){var s;if("%AsyncFunction%"===i)s=getEvalledConstructor("async function () {}");else if("%GeneratorFunction%"===i)s=getEvalledConstructor("function* () {}");else if("%AsyncGeneratorFunction%"===i)s=getEvalledConstructor("async function* () {}");else if("%AsyncGenerator%"===i){var u=doEval("%AsyncGeneratorFunction%");u&&(s=u.prototype)}else if("%AsyncIteratorPrototype%"===i){var m=doEval("%AsyncGenerator%");m&&Y&&(s=Y(m.prototype))}return ae[i]=s,s},ce={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},pe=u(58612),de=u(17642),fe=pe.call(Function.call,Array.prototype.concat),ye=pe.call(Function.apply,Array.prototype.splice),be=pe.call(Function.call,String.prototype.replace),_e=pe.call(Function.call,String.prototype.slice),we=pe.call(Function.call,RegExp.prototype.exec),Se=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,xe=/\\(\\)?/g,Pe=function getBaseIntrinsic(i,s){var u,m=i;if(de(ce,m)&&(m="%"+(u=ce[m])[0]+"%"),de(ae,m)){var _=ae[m];if(_===Z&&(_=le(m)),void 0===_&&!s)throw new j("intrinsic "+i+" exists, but is not available. Please file an issue!");return{alias:u,name:m,value:_}}throw new v("intrinsic "+i+" does not exist!")};i.exports=function GetIntrinsic(i,s){if("string"!=typeof i||0===i.length)throw new j("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof s)throw new j('"allowMissing" argument must be a boolean');if(null===we(/^%?[^%]*%?$/,i))throw new v("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var u=function stringToPath(i){var s=_e(i,0,1),u=_e(i,-1);if("%"===s&&"%"!==u)throw new v("invalid intrinsic syntax, expected closing `%`");if("%"===u&&"%"!==s)throw new v("invalid intrinsic syntax, expected opening `%`");var m=[];return be(i,Se,(function(i,s,u,v){m[m.length]=u?be(v,xe,"$1"):s||i})),m}(i),m=u.length>0?u[0]:"",_=Pe("%"+m+"%",s),$=_.name,W=_.value,X=!1,Y=_.alias;Y&&(m=Y[0],ye(u,fe([0,1],Y)));for(var Z=1,ee=!0;Z=u.length){var pe=M(W,ie);W=(ee=!!pe)&&"get"in pe&&!("originalValue"in pe.get)?pe.get:W[ie]}else ee=de(W,ie),W=W[ie];ee&&!X&&(ae[$]=W)}}return W}},28185:i=>{"use strict";var s={foo:{}},u=Object;i.exports=function hasProto(){return{__proto__:s}.foo===s.foo&&!({__proto__:null}instanceof u)}},41405:(i,s,u)=>{"use strict";var m="undefined"!=typeof Symbol&&Symbol,v=u(55419);i.exports=function hasNativeSymbols(){return"function"==typeof m&&("function"==typeof Symbol&&("symbol"==typeof m("foo")&&("symbol"==typeof Symbol("bar")&&v())))}},55419:i=>{"use strict";i.exports=function hasSymbols(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var i={},s=Symbol("test"),u=Object(s);if("string"==typeof s)return!1;if("[object Symbol]"!==Object.prototype.toString.call(s))return!1;if("[object Symbol]"!==Object.prototype.toString.call(u))return!1;for(s in i[s]=42,i)return!1;if("function"==typeof Object.keys&&0!==Object.keys(i).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(i).length)return!1;var m=Object.getOwnPropertySymbols(i);if(1!==m.length||m[0]!==s)return!1;if(!Object.prototype.propertyIsEnumerable.call(i,s))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var v=Object.getOwnPropertyDescriptor(i,s);if(42!==v.value||!0!==v.enumerable)return!1}return!0}},17642:(i,s,u)=>{"use strict";var m=u(58612);i.exports=m.call(Function.call,Object.prototype.hasOwnProperty)},47802:i=>{function deepFreeze(i){return i instanceof Map?i.clear=i.delete=i.set=function(){throw new Error("map is read-only")}:i instanceof Set&&(i.add=i.clear=i.delete=function(){throw new Error("set is read-only")}),Object.freeze(i),Object.getOwnPropertyNames(i).forEach((function(s){var u=i[s];"object"!=typeof u||Object.isFrozen(u)||deepFreeze(u)})),i}var s=deepFreeze,u=deepFreeze;s.default=u;class Response{constructor(i){void 0===i.data&&(i.data={}),this.data=i.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function escapeHTML(i){return i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function inherit(i,...s){const u=Object.create(null);for(const s in i)u[s]=i[s];return s.forEach((function(i){for(const s in i)u[s]=i[s]})),u}const emitsWrappingTags=i=>!!i.kind;class HTMLRenderer{constructor(i,s){this.buffer="",this.classPrefix=s.classPrefix,i.walk(this)}addText(i){this.buffer+=escapeHTML(i)}openNode(i){if(!emitsWrappingTags(i))return;let s=i.kind;i.sublanguage||(s=`${this.classPrefix}${s}`),this.span(s)}closeNode(i){emitsWrappingTags(i)&&(this.buffer+="")}value(){return this.buffer}span(i){this.buffer+=``}}class TokenTree{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(i){this.top.children.push(i)}openNode(i){const s={kind:i,children:[]};this.add(s),this.stack.push(s)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(i){return this.constructor._walk(i,this.rootNode)}static _walk(i,s){return"string"==typeof s?i.addText(s):s.children&&(i.openNode(s),s.children.forEach((s=>this._walk(i,s))),i.closeNode(s)),i}static _collapse(i){"string"!=typeof i&&i.children&&(i.children.every((i=>"string"==typeof i))?i.children=[i.children.join("")]:i.children.forEach((i=>{TokenTree._collapse(i)})))}}class TokenTreeEmitter extends TokenTree{constructor(i){super(),this.options=i}addKeyword(i,s){""!==i&&(this.openNode(s),this.addText(i),this.closeNode())}addText(i){""!==i&&this.add(i)}addSublanguage(i,s){const u=i.root;u.kind=s,u.sublanguage=!0,this.add(u)}toHTML(){return new HTMLRenderer(this,this.options).value()}finalize(){return!0}}function source(i){return i?"string"==typeof i?i:i.source:null}const m=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;const v="[a-zA-Z]\\w*",_="[a-zA-Z_]\\w*",j="\\b\\d+(\\.\\d+)?",M="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",$="\\b(0b[01]+)",W={begin:"\\\\[\\s\\S]",relevance:0},X={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[W]},Y={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[W]},Z={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT=function(i,s,u={}){const m=inherit({className:"comment",begin:i,end:s,contains:[]},u);return m.contains.push(Z),m.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),m},ee=COMMENT("//","$"),ae=COMMENT("/\\*","\\*/"),ie=COMMENT("#","$"),le={className:"number",begin:j,relevance:0},ce={className:"number",begin:M,relevance:0},pe={className:"number",begin:$,relevance:0},de={className:"number",begin:j+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},fe={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[W,{begin:/\[/,end:/\]/,relevance:0,contains:[W]}]}]},ye={className:"title",begin:v,relevance:0},be={className:"title",begin:_,relevance:0},_e={begin:"\\.\\s*"+_,relevance:0};var we=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:v,UNDERSCORE_IDENT_RE:_,NUMBER_RE:j,C_NUMBER_RE:M,BINARY_NUMBER_RE:$,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(i={})=>{const s=/^#![ ]*\//;return i.binary&&(i.begin=function concat(...i){return i.map((i=>source(i))).join("")}(s,/.*\b/,i.binary,/\b.*/)),inherit({className:"meta",begin:s,end:/$/,relevance:0,"on:begin":(i,s)=>{0!==i.index&&s.ignoreMatch()}},i)},BACKSLASH_ESCAPE:W,APOS_STRING_MODE:X,QUOTE_STRING_MODE:Y,PHRASAL_WORDS_MODE:Z,COMMENT,C_LINE_COMMENT_MODE:ee,C_BLOCK_COMMENT_MODE:ae,HASH_COMMENT_MODE:ie,NUMBER_MODE:le,C_NUMBER_MODE:ce,BINARY_NUMBER_MODE:pe,CSS_NUMBER_MODE:de,REGEXP_MODE:fe,TITLE_MODE:ye,UNDERSCORE_TITLE_MODE:be,METHOD_GUARD:_e,END_SAME_AS_BEGIN:function(i){return Object.assign(i,{"on:begin":(i,s)=>{s.data._beginMatch=i[1]},"on:end":(i,s)=>{s.data._beginMatch!==i[1]&&s.ignoreMatch()}})}});function skipIfhasPrecedingDot(i,s){"."===i.input[i.index-1]&&s.ignoreMatch()}function beginKeywords(i,s){s&&i.beginKeywords&&(i.begin="\\b("+i.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",i.__beforeBegin=skipIfhasPrecedingDot,i.keywords=i.keywords||i.beginKeywords,delete i.beginKeywords,void 0===i.relevance&&(i.relevance=0))}function compileIllegal(i,s){Array.isArray(i.illegal)&&(i.illegal=function either(...i){return"("+i.map((i=>source(i))).join("|")+")"}(...i.illegal))}function compileMatch(i,s){if(i.match){if(i.begin||i.end)throw new Error("begin & end are not supported with match");i.begin=i.match,delete i.match}}function compileRelevance(i,s){void 0===i.relevance&&(i.relevance=1)}const Se=["of","and","for","in","not","or","if","then","parent","list","value"],xe="keyword";function compileKeywords(i,s,u=xe){const m={};return"string"==typeof i?compileList(u,i.split(" ")):Array.isArray(i)?compileList(u,i):Object.keys(i).forEach((function(u){Object.assign(m,compileKeywords(i[u],s,u))})),m;function compileList(i,u){s&&(u=u.map((i=>i.toLowerCase()))),u.forEach((function(s){const u=s.split("|");m[u[0]]=[i,scoreForKeyword(u[0],u[1])]}))}}function scoreForKeyword(i,s){return s?Number(s):function commonKeyword(i){return Se.includes(i.toLowerCase())}(i)?0:1}function compileLanguage(i,{plugins:s}){function langRe(s,u){return new RegExp(source(s),"m"+(i.case_insensitive?"i":"")+(u?"g":""))}class MultiRegex{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(i,s){s.position=this.position++,this.matchIndexes[this.matchAt]=s,this.regexes.push([s,i]),this.matchAt+=function countMatchGroups(i){return new RegExp(i.toString()+"|").exec("").length-1}(i)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const i=this.regexes.map((i=>i[1]));this.matcherRe=langRe(function join(i,s="|"){let u=0;return i.map((i=>{u+=1;const s=u;let v=source(i),_="";for(;v.length>0;){const i=m.exec(v);if(!i){_+=v;break}_+=v.substring(0,i.index),v=v.substring(i.index+i[0].length),"\\"===i[0][0]&&i[1]?_+="\\"+String(Number(i[1])+s):(_+=i[0],"("===i[0]&&u++)}return _})).map((i=>`(${i})`)).join(s)}(i),!0),this.lastIndex=0}exec(i){this.matcherRe.lastIndex=this.lastIndex;const s=this.matcherRe.exec(i);if(!s)return null;const u=s.findIndex(((i,s)=>s>0&&void 0!==i)),m=this.matchIndexes[u];return s.splice(0,u),Object.assign(s,m)}}class ResumableMultiRegex{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(i){if(this.multiRegexes[i])return this.multiRegexes[i];const s=new MultiRegex;return this.rules.slice(i).forEach((([i,u])=>s.addRule(i,u))),s.compile(),this.multiRegexes[i]=s,s}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(i,s){this.rules.push([i,s]),"begin"===s.type&&this.count++}exec(i){const s=this.getMatcher(this.regexIndex);s.lastIndex=this.lastIndex;let u=s.exec(i);if(this.resumingScanAtSamePosition())if(u&&u.index===this.lastIndex);else{const s=this.getMatcher(0);s.lastIndex=this.lastIndex+1,u=s.exec(i)}return u&&(this.regexIndex+=u.position+1,this.regexIndex===this.count&&this.considerAll()),u}}if(i.compilerExtensions||(i.compilerExtensions=[]),i.contains&&i.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return i.classNameAliases=inherit(i.classNameAliases||{}),function compileMode(s,u){const m=s;if(s.isCompiled)return m;[compileMatch].forEach((i=>i(s,u))),i.compilerExtensions.forEach((i=>i(s,u))),s.__beforeBegin=null,[beginKeywords,compileIllegal,compileRelevance].forEach((i=>i(s,u))),s.isCompiled=!0;let v=null;if("object"==typeof s.keywords&&(v=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=compileKeywords(s.keywords,i.case_insensitive)),s.lexemes&&v)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return v=v||s.lexemes||/\w+/,m.keywordPatternRe=langRe(v,!0),u&&(s.begin||(s.begin=/\B|\b/),m.beginRe=langRe(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(m.endRe=langRe(s.end)),m.terminatorEnd=source(s.end)||"",s.endsWithParent&&u.terminatorEnd&&(m.terminatorEnd+=(s.end?"|":"")+u.terminatorEnd)),s.illegal&&(m.illegalRe=langRe(s.illegal)),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(i){return function expandOrCloneMode(i){i.variants&&!i.cachedVariants&&(i.cachedVariants=i.variants.map((function(s){return inherit(i,{variants:null},s)})));if(i.cachedVariants)return i.cachedVariants;if(dependencyOnParent(i))return inherit(i,{starts:i.starts?inherit(i.starts):null});if(Object.isFrozen(i))return inherit(i);return i}("self"===i?s:i)}))),s.contains.forEach((function(i){compileMode(i,m)})),s.starts&&compileMode(s.starts,u),m.matcher=function buildModeRegex(i){const s=new ResumableMultiRegex;return i.contains.forEach((i=>s.addRule(i.begin,{rule:i,type:"begin"}))),i.terminatorEnd&&s.addRule(i.terminatorEnd,{type:"end"}),i.illegal&&s.addRule(i.illegal,{type:"illegal"}),s}(m),m}(i)}function dependencyOnParent(i){return!!i&&(i.endsWithParent||dependencyOnParent(i.starts))}function BuildVuePlugin(i){const s={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!i.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,escapeHTML(this.code);let s={};return this.autoDetect?(s=i.highlightAuto(this.code),this.detectedLanguage=s.language):(s=i.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),s.value},autoDetect(){return!this.language||function hasValueOrEmptyAttribute(i){return Boolean(i||""===i)}(this.autodetect)},ignoreIllegals:()=>!0},render(i){return i("pre",{},[i("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:s,VuePlugin:{install(i){i.component("highlightjs",s)}}}}const Pe={"after:highlightElement":({el:i,result:s,text:u})=>{const m=nodeStream(i);if(!m.length)return;const v=document.createElement("div");v.innerHTML=s.value,s.value=function mergeStreams(i,s,u){let m=0,v="";const _=[];function selectStream(){return i.length&&s.length?i[0].offset!==s[0].offset?i[0].offset"}function close(i){v+=""}function render(i){("start"===i.event?open:close)(i.node)}for(;i.length||s.length;){let s=selectStream();if(v+=escapeHTML(u.substring(m,s[0].offset)),m=s[0].offset,s===i){_.reverse().forEach(close);do{render(s.splice(0,1)[0]),s=selectStream()}while(s===i&&s.length&&s[0].offset===m);_.reverse().forEach(open)}else"start"===s[0].event?_.push(s[0].node):_.pop(),render(s.splice(0,1)[0])}return v+escapeHTML(u.substr(m))}(m,nodeStream(v),u)}};function tag(i){return i.nodeName.toLowerCase()}function nodeStream(i){const s=[];return function _nodeStream(i,u){for(let m=i.firstChild;m;m=m.nextSibling)3===m.nodeType?u+=m.nodeValue.length:1===m.nodeType&&(s.push({event:"start",offset:u,node:m}),u=_nodeStream(m,u),tag(m).match(/br|hr|img|input/)||s.push({event:"stop",offset:u,node:m}));return u}(i,0),s}const Ie={},error=i=>{console.error(i)},warn=(i,...s)=>{console.log(`WARN: ${i}`,...s)},deprecated=(i,s)=>{Ie[`${i}/${s}`]||(console.log(`Deprecated as of ${i}. ${s}`),Ie[`${i}/${s}`]=!0)},Te=escapeHTML,Re=inherit,qe=Symbol("nomatch");var ze=function(i){const u=Object.create(null),m=Object.create(null),v=[];let _=!0;const j=/(^(<[^>]+>|\t|)+|\n)/gm,M="Could not find the language '{}', did you forget to load/include a language module?",$={disableAutodetect:!0,name:"Plain text",contains:[]};let W={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:TokenTreeEmitter};function shouldNotHighlight(i){return W.noHighlightRe.test(i)}function highlight(i,s,u,m){let v="",_="";"object"==typeof s?(v=i,u=s.ignoreIllegals,_=s.language,m=void 0):(deprecated("10.7.0","highlight(lang, code, ...args) has been deprecated."),deprecated("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),_=i,v=s);const j={code:v,language:_};fire("before:highlight",j);const M=j.result?j.result:_highlight(j.language,j.code,u,m);return M.code=j.code,fire("after:highlight",M),M}function _highlight(i,s,m,j){function keywordData(i,s){const u=X.case_insensitive?s[0].toLowerCase():s[0];return Object.prototype.hasOwnProperty.call(i.keywords,u)&&i.keywords[u]}function processBuffer(){null!=ee.subLanguage?function processSubLanguage(){if(""===le)return;let i=null;if("string"==typeof ee.subLanguage){if(!u[ee.subLanguage])return void ie.addText(le);i=_highlight(ee.subLanguage,le,!0,ae[ee.subLanguage]),ae[ee.subLanguage]=i.top}else i=highlightAuto(le,ee.subLanguage.length?ee.subLanguage:null);ee.relevance>0&&(ce+=i.relevance),ie.addSublanguage(i.emitter,i.language)}():function processKeywords(){if(!ee.keywords)return void ie.addText(le);let i=0;ee.keywordPatternRe.lastIndex=0;let s=ee.keywordPatternRe.exec(le),u="";for(;s;){u+=le.substring(i,s.index);const m=keywordData(ee,s);if(m){const[i,v]=m;if(ie.addText(u),u="",ce+=v,i.startsWith("_"))u+=s[0];else{const u=X.classNameAliases[i]||i;ie.addKeyword(s[0],u)}}else u+=s[0];i=ee.keywordPatternRe.lastIndex,s=ee.keywordPatternRe.exec(le)}u+=le.substr(i),ie.addText(u)}(),le=""}function startNewMode(i){return i.className&&ie.openNode(X.classNameAliases[i.className]||i.className),ee=Object.create(i,{parent:{value:ee}}),ee}function endOfMode(i,s,u){let m=function startsWith(i,s){const u=i&&i.exec(s);return u&&0===u.index}(i.endRe,u);if(m){if(i["on:end"]){const u=new Response(i);i["on:end"](s,u),u.isMatchIgnored&&(m=!1)}if(m){for(;i.endsParent&&i.parent;)i=i.parent;return i}}if(i.endsWithParent)return endOfMode(i.parent,s,u)}function doIgnore(i){return 0===ee.matcher.regexIndex?(le+=i[0],1):(fe=!0,0)}function doBeginMatch(i){const s=i[0],u=i.rule,m=new Response(u),v=[u.__beforeBegin,u["on:begin"]];for(const u of v)if(u&&(u(i,m),m.isMatchIgnored))return doIgnore(s);return u&&u.endSameAsBegin&&(u.endRe=function escape(i){return new RegExp(i.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}(s)),u.skip?le+=s:(u.excludeBegin&&(le+=s),processBuffer(),u.returnBegin||u.excludeBegin||(le=s)),startNewMode(u),u.returnBegin?0:s.length}function doEndMatch(i){const u=i[0],m=s.substr(i.index),v=endOfMode(ee,i,m);if(!v)return qe;const _=ee;_.skip?le+=u:(_.returnEnd||_.excludeEnd||(le+=u),processBuffer(),_.excludeEnd&&(le=u));do{ee.className&&ie.closeNode(),ee.skip||ee.subLanguage||(ce+=ee.relevance),ee=ee.parent}while(ee!==v.parent);return v.starts&&(v.endSameAsBegin&&(v.starts.endRe=v.endRe),startNewMode(v.starts)),_.returnEnd?0:u.length}let $={};function processLexeme(u,v){const j=v&&v[0];if(le+=u,null==j)return processBuffer(),0;if("begin"===$.type&&"end"===v.type&&$.index===v.index&&""===j){if(le+=s.slice(v.index,v.index+1),!_){const s=new Error("0 width match regex");throw s.languageName=i,s.badRule=$.rule,s}return 1}if($=v,"begin"===v.type)return doBeginMatch(v);if("illegal"===v.type&&!m){const i=new Error('Illegal lexeme "'+j+'" for mode "'+(ee.className||"")+'"');throw i.mode=ee,i}if("end"===v.type){const i=doEndMatch(v);if(i!==qe)return i}if("illegal"===v.type&&""===j)return 1;if(de>1e5&&de>3*v.index){throw new Error("potential infinite loop, way more iterations than matches")}return le+=j,j.length}const X=getLanguage(i);if(!X)throw error(M.replace("{}",i)),new Error('Unknown language: "'+i+'"');const Y=compileLanguage(X,{plugins:v});let Z="",ee=j||Y;const ae={},ie=new W.__emitter(W);!function processContinuations(){const i=[];for(let s=ee;s!==X;s=s.parent)s.className&&i.unshift(s.className);i.forEach((i=>ie.openNode(i)))}();let le="",ce=0,pe=0,de=0,fe=!1;try{for(ee.matcher.considerAll();;){de++,fe?fe=!1:ee.matcher.considerAll(),ee.matcher.lastIndex=pe;const i=ee.matcher.exec(s);if(!i)break;const u=processLexeme(s.substring(pe,i.index),i);pe=i.index+u}return processLexeme(s.substr(pe)),ie.closeAllNodes(),ie.finalize(),Z=ie.toHTML(),{relevance:Math.floor(ce),value:Z,language:i,illegal:!1,emitter:ie,top:ee}}catch(u){if(u.message&&u.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:u.message,context:s.slice(pe-100,pe+100),mode:u.mode},sofar:Z,relevance:0,value:Te(s),emitter:ie};if(_)return{illegal:!1,relevance:0,value:Te(s),emitter:ie,language:i,top:ee,errorRaised:u};throw u}}function highlightAuto(i,s){s=s||W.languages||Object.keys(u);const m=function justTextHighlightResult(i){const s={relevance:0,emitter:new W.__emitter(W),value:Te(i),illegal:!1,top:$};return s.emitter.addText(i),s}(i),v=s.filter(getLanguage).filter(autoDetection).map((s=>_highlight(s,i,!1)));v.unshift(m);const _=v.sort(((i,s)=>{if(i.relevance!==s.relevance)return s.relevance-i.relevance;if(i.language&&s.language){if(getLanguage(i.language).supersetOf===s.language)return 1;if(getLanguage(s.language).supersetOf===i.language)return-1}return 0})),[j,M]=_,X=j;return X.second_best=M,X}const X={"before:highlightElement":({el:i})=>{W.useBR&&(i.innerHTML=i.innerHTML.replace(/\n/g,"").replace(//g,"\n"))},"after:highlightElement":({result:i})=>{W.useBR&&(i.value=i.value.replace(/\n/g,"
"))}},Y=/^(<[^>]+>|\t)+/gm,Z={"after:highlightElement":({result:i})=>{W.tabReplace&&(i.value=i.value.replace(Y,(i=>i.replace(/\t/g,W.tabReplace))))}};function highlightElement(i){let s=null;const u=function blockLanguage(i){let s=i.className+" ";s+=i.parentNode?i.parentNode.className:"";const u=W.languageDetectRe.exec(s);if(u){const s=getLanguage(u[1]);return s||(warn(M.replace("{}",u[1])),warn("Falling back to no-highlight mode for this block.",i)),s?u[1]:"no-highlight"}return s.split(/\s+/).find((i=>shouldNotHighlight(i)||getLanguage(i)))}(i);if(shouldNotHighlight(u))return;fire("before:highlightElement",{el:i,language:u}),s=i;const v=s.textContent,_=u?highlight(v,{language:u,ignoreIllegals:!0}):highlightAuto(v);fire("after:highlightElement",{el:i,result:_,text:v}),i.innerHTML=_.value,function updateClassName(i,s,u){const v=s?m[s]:u;i.classList.add("hljs"),v&&i.classList.add(v)}(i,u,_.language),i.result={language:_.language,re:_.relevance,relavance:_.relevance},_.second_best&&(i.second_best={language:_.second_best.language,re:_.second_best.relevance,relavance:_.second_best.relevance})}const initHighlighting=()=>{if(initHighlighting.called)return;initHighlighting.called=!0,deprecated("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead.");document.querySelectorAll("pre code").forEach(highlightElement)};let ee=!1;function highlightAll(){if("loading"===document.readyState)return void(ee=!0);document.querySelectorAll("pre code").forEach(highlightElement)}function getLanguage(i){return i=(i||"").toLowerCase(),u[i]||u[m[i]]}function registerAliases(i,{languageName:s}){"string"==typeof i&&(i=[i]),i.forEach((i=>{m[i.toLowerCase()]=s}))}function autoDetection(i){const s=getLanguage(i);return s&&!s.disableAutodetect}function fire(i,s){const u=i;v.forEach((function(i){i[u]&&i[u](s)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function boot(){ee&&highlightAll()}),!1),Object.assign(i,{highlight,highlightAuto,highlightAll,fixMarkup:function deprecateFixMarkup(i){return deprecated("10.2.0","fixMarkup will be removed entirely in v11.0"),deprecated("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),function fixMarkup(i){return W.tabReplace||W.useBR?i.replace(j,(i=>"\n"===i?W.useBR?"
":i:W.tabReplace?i.replace(/\t/g,W.tabReplace):i)):i}(i)},highlightElement,highlightBlock:function deprecateHighlightBlock(i){return deprecated("10.7.0","highlightBlock will be removed entirely in v12.0"),deprecated("10.7.0","Please use highlightElement now."),highlightElement(i)},configure:function configure(i){i.useBR&&(deprecated("10.3.0","'useBR' will be removed entirely in v11.0"),deprecated("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),W=Re(W,i)},initHighlighting,initHighlightingOnLoad:function initHighlightingOnLoad(){deprecated("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),ee=!0},registerLanguage:function registerLanguage(s,m){let v=null;try{v=m(i)}catch(i){if(error("Language definition for '{}' could not be registered.".replace("{}",s)),!_)throw i;error(i),v=$}v.name||(v.name=s),u[s]=v,v.rawDefinition=m.bind(null,i),v.aliases&®isterAliases(v.aliases,{languageName:s})},unregisterLanguage:function unregisterLanguage(i){delete u[i];for(const s of Object.keys(m))m[s]===i&&delete m[s]},listLanguages:function listLanguages(){return Object.keys(u)},getLanguage,registerAliases,requireLanguage:function requireLanguage(i){deprecated("10.4.0","requireLanguage will be removed entirely in v11."),deprecated("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const s=getLanguage(i);if(s)return s;throw new Error("The '{}' language is required, but not loaded.".replace("{}",i))},autoDetection,inherit:Re,addPlugin:function addPlugin(i){!function upgradePluginAPI(i){i["before:highlightBlock"]&&!i["before:highlightElement"]&&(i["before:highlightElement"]=s=>{i["before:highlightBlock"](Object.assign({block:s.el},s))}),i["after:highlightBlock"]&&!i["after:highlightElement"]&&(i["after:highlightElement"]=s=>{i["after:highlightBlock"](Object.assign({block:s.el},s))})}(i),v.push(i)},vuePlugin:BuildVuePlugin(i).VuePlugin}),i.debugMode=function(){_=!1},i.safeMode=function(){_=!0},i.versionString="10.7.3";for(const i in we)"object"==typeof we[i]&&s(we[i]);return Object.assign(i,we),i.addPlugin(X),i.addPlugin(Pe),i.addPlugin(Z),i}({});i.exports=ze},61519:i=>{function concat(...i){return i.map((i=>function source(i){return i?"string"==typeof i?i:i.source:null}(i))).join("")}i.exports=function bash(i){const s={},u={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[s]}]};Object.assign(s,{className:"variable",variants:[{begin:concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},u]});const m={className:"subst",begin:/\$\(/,end:/\)/,contains:[i.BACKSLASH_ESCAPE]},v={begin:/<<-?\s*(?=\w+)/,starts:{contains:[i.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},_={className:"string",begin:/"/,end:/"/,contains:[i.BACKSLASH_ESCAPE,s,m]};m.contains.push(_);const j={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},i.NUMBER_MODE,s]},M=i.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),$={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[i.inherit(i.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[M,i.SHEBANG(),$,j,i.HASH_COMMENT_MODE,v,_,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}},30786:i=>{function concat(...i){return i.map((i=>function source(i){return i?"string"==typeof i?i:i.source:null}(i))).join("")}i.exports=function http(i){const s="HTTP/(2|1\\.[01])",u={className:"attribute",begin:concat("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},m=[u,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+s+" \\d{3})",end:/$/,contains:[{className:"meta",begin:s},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:m}},{begin:"(?=^[A-Z]+ (.*?) "+s+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:s},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:m}},i.inherit(u,{relevance:0})]}}},96344:i=>{const s="[A-Za-z$_][0-9A-Za-z$_]*",u=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],m=["true","false","null","undefined","NaN","Infinity"],v=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function lookahead(i){return concat("(?=",i,")")}function concat(...i){return i.map((i=>function source(i){return i?"string"==typeof i?i:i.source:null}(i))).join("")}i.exports=function javascript(i){const _=s,j="<>",M="",$={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(i,s)=>{const u=i[0].length+i.index,m=i.input[u];"<"!==m?">"===m&&(((i,{after:s})=>{const u="",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:i.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:W,contains:ye}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:j,end:M},{begin:$.begin,"on:begin":$.isTrulyOpeningTag,end:$.end}],subLanguage:"xml",contains:[{begin:$.begin,end:$.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:W,contains:["self",i.inherit(i.TITLE_MODE,{begin:_}),be],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:i.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[be,i.inherit(i.TITLE_MODE,{begin:_})]},{variants:[{begin:"\\."+_},{begin:"\\$"+_}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},i.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[i.inherit(i.TITLE_MODE,{begin:_}),"self",be]},{begin:"(get|set)\\s+(?="+_+"\\()",end:/\{/,keywords:"get set",contains:[i.inherit(i.TITLE_MODE,{begin:_}),{begin:/\(\)/},be]},{begin:/\$[(.]/}]}}},82026:i=>{i.exports=function json(i){const s={literal:"true false null"},u=[i.C_LINE_COMMENT_MODE,i.C_BLOCK_COMMENT_MODE],m=[i.QUOTE_STRING_MODE,i.C_NUMBER_MODE],v={end:",",endsWithParent:!0,excludeEnd:!0,contains:m,keywords:s},_={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[i.BACKSLASH_ESCAPE],illegal:"\\n"},i.inherit(v,{begin:/:/})].concat(u),illegal:"\\S"},j={begin:"\\[",end:"\\]",contains:[i.inherit(v)],illegal:"\\S"};return m.push(_,j),u.forEach((function(i){m.push(i)})),{name:"JSON",contains:m,keywords:s,illegal:"\\S"}}},66336:i=>{i.exports=function powershell(i){const s={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},u={begin:"`[\\s\\S]",relevance:0},m={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},v={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[u,m,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},_={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},j=i.inherit(i.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),M={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},$={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[i.TITLE_MODE]},W={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[m]}]},X={begin:/using\s/,end:/$/,returnBegin:!0,contains:[v,_,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},Y={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},Z={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(s.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},i.inherit(i.TITLE_MODE,{endsParent:!0})]},ee=[Z,j,u,i.NUMBER_MODE,v,_,M,m,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/@\B/,relevance:0}],ae={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",ee,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return Z.contains.unshift(ae),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:s,contains:ee.concat($,W,X,Y,ae)}}},42157:i=>{function source(i){return i?"string"==typeof i?i:i.source:null}function lookahead(i){return concat("(?=",i,")")}function concat(...i){return i.map((i=>source(i))).join("")}function either(...i){return"("+i.map((i=>source(i))).join("|")+")"}i.exports=function xml(i){const s=concat(/[A-Z_]/,function optional(i){return concat("(",i,")?")}(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),u={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},m={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},v=i.inherit(m,{begin:/\(/,end:/\)/}),_=i.inherit(i.APOS_STRING_MODE,{className:"meta-string"}),j=i.inherit(i.QUOTE_STRING_MODE,{className:"meta-string"}),M={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[m,j,_,v,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[m,v,j,_]}]}]},i.COMMENT(//,{relevance:10}),{begin://,relevance:10},u,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[M],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[M],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:s,relevance:0,starts:M}]},{className:"tag",begin:concat(/<\//,lookahead(concat(s,/>/))),contains:[{className:"name",begin:s,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},54587:i=>{i.exports=function yaml(i){var s="true false yes no null",u="[\\w#;/?:@&=+$,.~*'()[\\]]+",m={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[i.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},v=i.inherit(m,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),_={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},j={end:",",endsWithParent:!0,excludeEnd:!0,keywords:s,relevance:0},M={begin:/\{/,end:/\}/,contains:[j],illegal:"\\n",relevance:0},$={begin:"\\[",end:"\\]",contains:[j],illegal:"\\n",relevance:0},W=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+u},{className:"type",begin:"!<"+u+">"},{className:"type",begin:"!"+u},{className:"type",begin:"!!"+u},{className:"meta",begin:"&"+i.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+i.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},i.HASH_COMMENT_MODE,{beginKeywords:s,keywords:{literal:s}},_,{className:"number",begin:i.C_NUMBER_RE+"\\b",relevance:0},M,$,m],X=[...W];return X.pop(),X.push(v),j.contains=X,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:W}}},8679:(i,s,u)=>{"use strict";var m=u(59864),v={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},_={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},j={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},M={};function getStatics(i){return m.isMemo(i)?j:M[i.$$typeof]||v}M[m.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},M[m.Memo]=j;var $=Object.defineProperty,W=Object.getOwnPropertyNames,X=Object.getOwnPropertySymbols,Y=Object.getOwnPropertyDescriptor,Z=Object.getPrototypeOf,ee=Object.prototype;i.exports=function hoistNonReactStatics(i,s,u){if("string"!=typeof s){if(ee){var m=Z(s);m&&m!==ee&&hoistNonReactStatics(i,m,u)}var v=W(s);X&&(v=v.concat(X(s)));for(var j=getStatics(i),M=getStatics(s),ae=0;ae{s.read=function(i,s,u,m,v){var _,j,M=8*v-m-1,$=(1<>1,X=-7,Y=u?v-1:0,Z=u?-1:1,ee=i[s+Y];for(Y+=Z,_=ee&(1<<-X)-1,ee>>=-X,X+=M;X>0;_=256*_+i[s+Y],Y+=Z,X-=8);for(j=_&(1<<-X)-1,_>>=-X,X+=m;X>0;j=256*j+i[s+Y],Y+=Z,X-=8);if(0===_)_=1-W;else{if(_===$)return j?NaN:1/0*(ee?-1:1);j+=Math.pow(2,m),_-=W}return(ee?-1:1)*j*Math.pow(2,_-m)},s.write=function(i,s,u,m,v,_){var j,M,$,W=8*_-v-1,X=(1<>1,Z=23===v?Math.pow(2,-24)-Math.pow(2,-77):0,ee=m?0:_-1,ae=m?1:-1,ie=s<0||0===s&&1/s<0?1:0;for(s=Math.abs(s),isNaN(s)||s===1/0?(M=isNaN(s)?1:0,j=X):(j=Math.floor(Math.log(s)/Math.LN2),s*($=Math.pow(2,-j))<1&&(j--,$*=2),(s+=j+Y>=1?Z/$:Z*Math.pow(2,1-Y))*$>=2&&(j++,$/=2),j+Y>=X?(M=0,j=X):j+Y>=1?(M=(s*$-1)*Math.pow(2,v),j+=Y):(M=s*Math.pow(2,Y-1)*Math.pow(2,v),j=0));v>=8;i[u+ee]=255&M,ee+=ae,M/=256,v-=8);for(j=j<0;i[u+ee]=255&j,ee+=ae,j/=256,W-=8);i[u+ee-ae]|=128*ie}},43393:function(i){i.exports=function(){"use strict";var i=Array.prototype.slice;function createClass(i,s){s&&(i.prototype=Object.create(s.prototype)),i.prototype.constructor=i}function Iterable(i){return isIterable(i)?i:Seq(i)}function KeyedIterable(i){return isKeyed(i)?i:KeyedSeq(i)}function IndexedIterable(i){return isIndexed(i)?i:IndexedSeq(i)}function SetIterable(i){return isIterable(i)&&!isAssociative(i)?i:SetSeq(i)}function isIterable(i){return!(!i||!i[s])}function isKeyed(i){return!(!i||!i[u])}function isIndexed(i){return!(!i||!i[m])}function isAssociative(i){return isKeyed(i)||isIndexed(i)}function isOrdered(i){return!(!i||!i[v])}createClass(KeyedIterable,Iterable),createClass(IndexedIterable,Iterable),createClass(SetIterable,Iterable),Iterable.isIterable=isIterable,Iterable.isKeyed=isKeyed,Iterable.isIndexed=isIndexed,Iterable.isAssociative=isAssociative,Iterable.isOrdered=isOrdered,Iterable.Keyed=KeyedIterable,Iterable.Indexed=IndexedIterable,Iterable.Set=SetIterable;var s="@@__IMMUTABLE_ITERABLE__@@",u="@@__IMMUTABLE_KEYED__@@",m="@@__IMMUTABLE_INDEXED__@@",v="@@__IMMUTABLE_ORDERED__@@",_="delete",j=5,M=1<>>0;if(""+u!==s||4294967295===u)return NaN;s=u}return s<0?ensureSize(i)+s:s}function returnTrue(){return!0}function wholeSlice(i,s,u){return(0===i||void 0!==u&&i<=-u)&&(void 0===s||void 0!==u&&s>=u)}function resolveBegin(i,s){return resolveIndex(i,s,0)}function resolveEnd(i,s){return resolveIndex(i,s,s)}function resolveIndex(i,s,u){return void 0===i?u:i<0?Math.max(0,s+i):void 0===s?i:Math.min(s,i)}var Z=0,ee=1,ae=2,ie="function"==typeof Symbol&&Symbol.iterator,le="@@iterator",ce=ie||le;function Iterator(i){this.next=i}function iteratorValue(i,s,u,m){var v=0===i?s:1===i?u:[s,u];return m?m.value=v:m={value:v,done:!1},m}function iteratorDone(){return{value:void 0,done:!0}}function hasIterator(i){return!!getIteratorFn(i)}function isIterator(i){return i&&"function"==typeof i.next}function getIterator(i){var s=getIteratorFn(i);return s&&s.call(i)}function getIteratorFn(i){var s=i&&(ie&&i[ie]||i[le]);if("function"==typeof s)return s}function isArrayLike(i){return i&&"number"==typeof i.length}function Seq(i){return null==i?emptySequence():isIterable(i)?i.toSeq():seqFromValue(i)}function KeyedSeq(i){return null==i?emptySequence().toKeyedSeq():isIterable(i)?isKeyed(i)?i.toSeq():i.fromEntrySeq():keyedSeqFromValue(i)}function IndexedSeq(i){return null==i?emptySequence():isIterable(i)?isKeyed(i)?i.entrySeq():i.toIndexedSeq():indexedSeqFromValue(i)}function SetSeq(i){return(null==i?emptySequence():isIterable(i)?isKeyed(i)?i.entrySeq():i:indexedSeqFromValue(i)).toSetSeq()}Iterator.prototype.toString=function(){return"[Iterator]"},Iterator.KEYS=Z,Iterator.VALUES=ee,Iterator.ENTRIES=ae,Iterator.prototype.inspect=Iterator.prototype.toSource=function(){return this.toString()},Iterator.prototype[ce]=function(){return this},createClass(Seq,Iterable),Seq.of=function(){return Seq(arguments)},Seq.prototype.toSeq=function(){return this},Seq.prototype.toString=function(){return this.__toString("Seq {","}")},Seq.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},Seq.prototype.__iterate=function(i,s){return seqIterate(this,i,s,!0)},Seq.prototype.__iterator=function(i,s){return seqIterator(this,i,s,!0)},createClass(KeyedSeq,Seq),KeyedSeq.prototype.toKeyedSeq=function(){return this},createClass(IndexedSeq,Seq),IndexedSeq.of=function(){return IndexedSeq(arguments)},IndexedSeq.prototype.toIndexedSeq=function(){return this},IndexedSeq.prototype.toString=function(){return this.__toString("Seq [","]")},IndexedSeq.prototype.__iterate=function(i,s){return seqIterate(this,i,s,!1)},IndexedSeq.prototype.__iterator=function(i,s){return seqIterator(this,i,s,!1)},createClass(SetSeq,Seq),SetSeq.of=function(){return SetSeq(arguments)},SetSeq.prototype.toSetSeq=function(){return this},Seq.isSeq=isSeq,Seq.Keyed=KeyedSeq,Seq.Set=SetSeq,Seq.Indexed=IndexedSeq;var pe,de,fe,ye="@@__IMMUTABLE_SEQ__@@";function ArraySeq(i){this._array=i,this.size=i.length}function ObjectSeq(i){var s=Object.keys(i);this._object=i,this._keys=s,this.size=s.length}function IterableSeq(i){this._iterable=i,this.size=i.length||i.size}function IteratorSeq(i){this._iterator=i,this._iteratorCache=[]}function isSeq(i){return!(!i||!i[ye])}function emptySequence(){return pe||(pe=new ArraySeq([]))}function keyedSeqFromValue(i){var s=Array.isArray(i)?new ArraySeq(i).fromEntrySeq():isIterator(i)?new IteratorSeq(i).fromEntrySeq():hasIterator(i)?new IterableSeq(i).fromEntrySeq():"object"==typeof i?new ObjectSeq(i):void 0;if(!s)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+i);return s}function indexedSeqFromValue(i){var s=maybeIndexedSeqFromValue(i);if(!s)throw new TypeError("Expected Array or iterable object of values: "+i);return s}function seqFromValue(i){var s=maybeIndexedSeqFromValue(i)||"object"==typeof i&&new ObjectSeq(i);if(!s)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+i);return s}function maybeIndexedSeqFromValue(i){return isArrayLike(i)?new ArraySeq(i):isIterator(i)?new IteratorSeq(i):hasIterator(i)?new IterableSeq(i):void 0}function seqIterate(i,s,u,m){var v=i._cache;if(v){for(var _=v.length-1,j=0;j<=_;j++){var M=v[u?_-j:j];if(!1===s(M[1],m?M[0]:j,i))return j+1}return j}return i.__iterateUncached(s,u)}function seqIterator(i,s,u,m){var v=i._cache;if(v){var _=v.length-1,j=0;return new Iterator((function(){var i=v[u?_-j:j];return j++>_?iteratorDone():iteratorValue(s,m?i[0]:j-1,i[1])}))}return i.__iteratorUncached(s,u)}function fromJS(i,s){return s?fromJSWith(s,i,"",{"":i}):fromJSDefault(i)}function fromJSWith(i,s,u,m){return Array.isArray(s)?i.call(m,u,IndexedSeq(s).map((function(u,m){return fromJSWith(i,u,m,s)}))):isPlainObj(s)?i.call(m,u,KeyedSeq(s).map((function(u,m){return fromJSWith(i,u,m,s)}))):s}function fromJSDefault(i){return Array.isArray(i)?IndexedSeq(i).map(fromJSDefault).toList():isPlainObj(i)?KeyedSeq(i).map(fromJSDefault).toMap():i}function isPlainObj(i){return i&&(i.constructor===Object||void 0===i.constructor)}function is(i,s){if(i===s||i!=i&&s!=s)return!0;if(!i||!s)return!1;if("function"==typeof i.valueOf&&"function"==typeof s.valueOf){if((i=i.valueOf())===(s=s.valueOf())||i!=i&&s!=s)return!0;if(!i||!s)return!1}return!("function"!=typeof i.equals||"function"!=typeof s.equals||!i.equals(s))}function deepEqual(i,s){if(i===s)return!0;if(!isIterable(s)||void 0!==i.size&&void 0!==s.size&&i.size!==s.size||void 0!==i.__hash&&void 0!==s.__hash&&i.__hash!==s.__hash||isKeyed(i)!==isKeyed(s)||isIndexed(i)!==isIndexed(s)||isOrdered(i)!==isOrdered(s))return!1;if(0===i.size&&0===s.size)return!0;var u=!isAssociative(i);if(isOrdered(i)){var m=i.entries();return s.every((function(i,s){var v=m.next().value;return v&&is(v[1],i)&&(u||is(v[0],s))}))&&m.next().done}var v=!1;if(void 0===i.size)if(void 0===s.size)"function"==typeof i.cacheResult&&i.cacheResult();else{v=!0;var _=i;i=s,s=_}var j=!0,M=s.__iterate((function(s,m){if(u?!i.has(s):v?!is(s,i.get(m,W)):!is(i.get(m,W),s))return j=!1,!1}));return j&&i.size===M}function Repeat(i,s){if(!(this instanceof Repeat))return new Repeat(i,s);if(this._value=i,this.size=void 0===s?1/0:Math.max(0,s),0===this.size){if(de)return de;de=this}}function invariant(i,s){if(!i)throw new Error(s)}function Range(i,s,u){if(!(this instanceof Range))return new Range(i,s,u);if(invariant(0!==u,"Cannot step a Range by 0"),i=i||0,void 0===s&&(s=1/0),u=void 0===u?1:Math.abs(u),sm?iteratorDone():iteratorValue(i,v,u[s?m-v++:v++])}))},createClass(ObjectSeq,KeyedSeq),ObjectSeq.prototype.get=function(i,s){return void 0===s||this.has(i)?this._object[i]:s},ObjectSeq.prototype.has=function(i){return this._object.hasOwnProperty(i)},ObjectSeq.prototype.__iterate=function(i,s){for(var u=this._object,m=this._keys,v=m.length-1,_=0;_<=v;_++){var j=m[s?v-_:_];if(!1===i(u[j],j,this))return _+1}return _},ObjectSeq.prototype.__iterator=function(i,s){var u=this._object,m=this._keys,v=m.length-1,_=0;return new Iterator((function(){var j=m[s?v-_:_];return _++>v?iteratorDone():iteratorValue(i,j,u[j])}))},ObjectSeq.prototype[v]=!0,createClass(IterableSeq,IndexedSeq),IterableSeq.prototype.__iterateUncached=function(i,s){if(s)return this.cacheResult().__iterate(i,s);var u=getIterator(this._iterable),m=0;if(isIterator(u))for(var v;!(v=u.next()).done&&!1!==i(v.value,m++,this););return m},IterableSeq.prototype.__iteratorUncached=function(i,s){if(s)return this.cacheResult().__iterator(i,s);var u=getIterator(this._iterable);if(!isIterator(u))return new Iterator(iteratorDone);var m=0;return new Iterator((function(){var s=u.next();return s.done?s:iteratorValue(i,m++,s.value)}))},createClass(IteratorSeq,IndexedSeq),IteratorSeq.prototype.__iterateUncached=function(i,s){if(s)return this.cacheResult().__iterate(i,s);for(var u,m=this._iterator,v=this._iteratorCache,_=0;_=m.length){var s=u.next();if(s.done)return s;m[v]=s.value}return iteratorValue(i,v,m[v++])}))},createClass(Repeat,IndexedSeq),Repeat.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Repeat.prototype.get=function(i,s){return this.has(i)?this._value:s},Repeat.prototype.includes=function(i){return is(this._value,i)},Repeat.prototype.slice=function(i,s){var u=this.size;return wholeSlice(i,s,u)?this:new Repeat(this._value,resolveEnd(s,u)-resolveBegin(i,u))},Repeat.prototype.reverse=function(){return this},Repeat.prototype.indexOf=function(i){return is(this._value,i)?0:-1},Repeat.prototype.lastIndexOf=function(i){return is(this._value,i)?this.size:-1},Repeat.prototype.__iterate=function(i,s){for(var u=0;u=0&&s=0&&uu?iteratorDone():iteratorValue(i,_++,j)}))},Range.prototype.equals=function(i){return i instanceof Range?this._start===i._start&&this._end===i._end&&this._step===i._step:deepEqual(this,i)},createClass(Collection,Iterable),createClass(KeyedCollection,Collection),createClass(IndexedCollection,Collection),createClass(SetCollection,Collection),Collection.Keyed=KeyedCollection,Collection.Indexed=IndexedCollection,Collection.Set=SetCollection;var be="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function imul(i,s){var u=65535&(i|=0),m=65535&(s|=0);return u*m+((i>>>16)*m+u*(s>>>16)<<16>>>0)|0};function smi(i){return i>>>1&1073741824|3221225471&i}function hash(i){if(!1===i||null==i)return 0;if("function"==typeof i.valueOf&&(!1===(i=i.valueOf())||null==i))return 0;if(!0===i)return 1;var s=typeof i;if("number"===s){if(i!=i||i===1/0)return 0;var u=0|i;for(u!==i&&(u^=4294967295*i);i>4294967295;)u^=i/=4294967295;return smi(u)}if("string"===s)return i.length>Te?cachedHashString(i):hashString(i);if("function"==typeof i.hashCode)return i.hashCode();if("object"===s)return hashJSObj(i);if("function"==typeof i.toString)return hashString(i.toString());throw new Error("Value type "+s+" cannot be hashed.")}function cachedHashString(i){var s=ze[i];return void 0===s&&(s=hashString(i),qe===Re&&(qe=0,ze={}),qe++,ze[i]=s),s}function hashString(i){for(var s=0,u=0;u0)switch(i.nodeType){case 1:return i.uniqueID;case 9:return i.documentElement&&i.documentElement.uniqueID}}var Se,xe="function"==typeof WeakMap;xe&&(Se=new WeakMap);var Pe=0,Ie="__immutablehash__";"function"==typeof Symbol&&(Ie=Symbol(Ie));var Te=16,Re=255,qe=0,ze={};function assertNotInfinite(i){invariant(i!==1/0,"Cannot perform this action with an infinite size.")}function Map(i){return null==i?emptyMap():isMap(i)&&!isOrdered(i)?i:emptyMap().withMutations((function(s){var u=KeyedIterable(i);assertNotInfinite(u.size),u.forEach((function(i,u){return s.set(u,i)}))}))}function isMap(i){return!(!i||!i[We])}createClass(Map,KeyedCollection),Map.of=function(){var s=i.call(arguments,0);return emptyMap().withMutations((function(i){for(var u=0;u=s.length)throw new Error("Missing value for key: "+s[u]);i.set(s[u],s[u+1])}}))},Map.prototype.toString=function(){return this.__toString("Map {","}")},Map.prototype.get=function(i,s){return this._root?this._root.get(0,void 0,i,s):s},Map.prototype.set=function(i,s){return updateMap(this,i,s)},Map.prototype.setIn=function(i,s){return this.updateIn(i,W,(function(){return s}))},Map.prototype.remove=function(i){return updateMap(this,i,W)},Map.prototype.deleteIn=function(i){return this.updateIn(i,(function(){return W}))},Map.prototype.update=function(i,s,u){return 1===arguments.length?i(this):this.updateIn([i],s,u)},Map.prototype.updateIn=function(i,s,u){u||(u=s,s=void 0);var m=updateInDeepMap(this,forceIterator(i),s,u);return m===W?void 0:m},Map.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):emptyMap()},Map.prototype.merge=function(){return mergeIntoMapWith(this,void 0,arguments)},Map.prototype.mergeWith=function(s){return mergeIntoMapWith(this,s,i.call(arguments,1))},Map.prototype.mergeIn=function(s){var u=i.call(arguments,1);return this.updateIn(s,emptyMap(),(function(i){return"function"==typeof i.merge?i.merge.apply(i,u):u[u.length-1]}))},Map.prototype.mergeDeep=function(){return mergeIntoMapWith(this,deepMerger,arguments)},Map.prototype.mergeDeepWith=function(s){var u=i.call(arguments,1);return mergeIntoMapWith(this,deepMergerWith(s),u)},Map.prototype.mergeDeepIn=function(s){var u=i.call(arguments,1);return this.updateIn(s,emptyMap(),(function(i){return"function"==typeof i.mergeDeep?i.mergeDeep.apply(i,u):u[u.length-1]}))},Map.prototype.sort=function(i){return OrderedMap(sortFactory(this,i))},Map.prototype.sortBy=function(i,s){return OrderedMap(sortFactory(this,s,i))},Map.prototype.withMutations=function(i){var s=this.asMutable();return i(s),s.wasAltered()?s.__ensureOwner(this.__ownerID):this},Map.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new OwnerID)},Map.prototype.asImmutable=function(){return this.__ensureOwner()},Map.prototype.wasAltered=function(){return this.__altered},Map.prototype.__iterator=function(i,s){return new MapIterator(this,i,s)},Map.prototype.__iterate=function(i,s){var u=this,m=0;return this._root&&this._root.iterate((function(s){return m++,i(s[1],s[0],u)}),s),m},Map.prototype.__ensureOwner=function(i){return i===this.__ownerID?this:i?makeMap(this.size,this._root,i,this.__hash):(this.__ownerID=i,this.__altered=!1,this)},Map.isMap=isMap;var Ve,We="@@__IMMUTABLE_MAP__@@",He=Map.prototype;function ArrayMapNode(i,s){this.ownerID=i,this.entries=s}function BitmapIndexedNode(i,s,u){this.ownerID=i,this.bitmap=s,this.nodes=u}function HashArrayMapNode(i,s,u){this.ownerID=i,this.count=s,this.nodes=u}function HashCollisionNode(i,s,u){this.ownerID=i,this.keyHash=s,this.entries=u}function ValueNode(i,s,u){this.ownerID=i,this.keyHash=s,this.entry=u}function MapIterator(i,s,u){this._type=s,this._reverse=u,this._stack=i._root&&mapIteratorFrame(i._root)}function mapIteratorValue(i,s){return iteratorValue(i,s[0],s[1])}function mapIteratorFrame(i,s){return{node:i,index:0,__prev:s}}function makeMap(i,s,u,m){var v=Object.create(He);return v.size=i,v._root=s,v.__ownerID=u,v.__hash=m,v.__altered=!1,v}function emptyMap(){return Ve||(Ve=makeMap(0))}function updateMap(i,s,u){var m,v;if(i._root){var _=MakeRef(X),j=MakeRef(Y);if(m=updateNode(i._root,i.__ownerID,0,void 0,s,u,_,j),!j.value)return i;v=i.size+(_.value?u===W?-1:1:0)}else{if(u===W)return i;v=1,m=new ArrayMapNode(i.__ownerID,[[s,u]])}return i.__ownerID?(i.size=v,i._root=m,i.__hash=void 0,i.__altered=!0,i):m?makeMap(v,m):emptyMap()}function updateNode(i,s,u,m,v,_,j,M){return i?i.update(s,u,m,v,_,j,M):_===W?i:(SetRef(M),SetRef(j),new ValueNode(s,m,[v,_]))}function isLeafNode(i){return i.constructor===ValueNode||i.constructor===HashCollisionNode}function mergeIntoNode(i,s,u,m,v){if(i.keyHash===m)return new HashCollisionNode(s,m,[i.entry,v]);var _,M=(0===u?i.keyHash:i.keyHash>>>u)&$,W=(0===u?m:m>>>u)&$;return new BitmapIndexedNode(s,1<>>=1)j[$]=1&u?s[_++]:void 0;return j[m]=v,new HashArrayMapNode(i,_+1,j)}function mergeIntoMapWith(i,s,u){for(var m=[],v=0;v>1&1431655765))+(i>>2&858993459))+(i>>4)&252645135,i+=i>>8,127&(i+=i>>16)}function setIn(i,s,u,m){var v=m?i:arrCopy(i);return v[s]=u,v}function spliceIn(i,s,u,m){var v=i.length+1;if(m&&s+1===v)return i[s]=u,i;for(var _=new Array(v),j=0,M=0;M=Xe)return createNodes(i,$,m,v);var ee=i&&i===this.ownerID,ae=ee?$:arrCopy($);return Z?M?X===Y-1?ae.pop():ae[X]=ae.pop():ae[X]=[m,v]:ae.push([m,v]),ee?(this.entries=ae,this):new ArrayMapNode(i,ae)}},BitmapIndexedNode.prototype.get=function(i,s,u,m){void 0===s&&(s=hash(u));var v=1<<((0===i?s:s>>>i)&$),_=this.bitmap;return 0==(_&v)?m:this.nodes[popCount(_&v-1)].get(i+j,s,u,m)},BitmapIndexedNode.prototype.update=function(i,s,u,m,v,_,M){void 0===u&&(u=hash(m));var X=(0===s?u:u>>>s)&$,Y=1<=Ye)return expandNodes(i,ie,Z,X,ce);if(ee&&!ce&&2===ie.length&&isLeafNode(ie[1^ae]))return ie[1^ae];if(ee&&ce&&1===ie.length&&isLeafNode(ce))return ce;var pe=i&&i===this.ownerID,de=ee?ce?Z:Z^Y:Z|Y,fe=ee?ce?setIn(ie,ae,ce,pe):spliceOut(ie,ae,pe):spliceIn(ie,ae,ce,pe);return pe?(this.bitmap=de,this.nodes=fe,this):new BitmapIndexedNode(i,de,fe)},HashArrayMapNode.prototype.get=function(i,s,u,m){void 0===s&&(s=hash(u));var v=(0===i?s:s>>>i)&$,_=this.nodes[v];return _?_.get(i+j,s,u,m):m},HashArrayMapNode.prototype.update=function(i,s,u,m,v,_,M){void 0===u&&(u=hash(m));var X=(0===s?u:u>>>s)&$,Y=v===W,Z=this.nodes,ee=Z[X];if(Y&&!ee)return this;var ae=updateNode(ee,i,s+j,u,m,v,_,M);if(ae===ee)return this;var ie=this.count;if(ee){if(!ae&&--ie0&&m=0&&i>>s&$;if(m>=this.array.length)return new VNode([],i);var v,_=0===m;if(s>0){var M=this.array[m];if((v=M&&M.removeBefore(i,s-j,u))===M&&_)return this}if(_&&!v)return this;var W=editableVNode(this,i);if(!_)for(var X=0;X>>s&$;if(v>=this.array.length)return this;if(s>0){var _=this.array[v];if((m=_&&_.removeAfter(i,s-j,u))===_&&v===this.array.length-1)return this}var M=editableVNode(this,i);return M.array.splice(v+1),m&&(M.array[v]=m),M};var rt,nt,ot={};function iterateList(i,s){var u=i._origin,m=i._capacity,v=getTailOffset(m),_=i._tail;return iterateNodeOrLeaf(i._root,i._level,0);function iterateNodeOrLeaf(i,s,u){return 0===s?iterateLeaf(i,u):iterateNode(i,s,u)}function iterateLeaf(i,j){var $=j===v?_&&_.array:i&&i.array,W=j>u?0:u-j,X=m-j;return X>M&&(X=M),function(){if(W===X)return ot;var i=s?--X:W++;return $&&$[i]}}function iterateNode(i,v,_){var $,W=i&&i.array,X=_>u?0:u-_>>v,Y=1+(m-_>>v);return Y>M&&(Y=M),function(){for(;;){if($){var i=$();if(i!==ot)return i;$=null}if(X===Y)return ot;var u=s?--Y:X++;$=iterateNodeOrLeaf(W&&W[u],v-j,_+(u<=i.size||s<0)return i.withMutations((function(i){s<0?setListBounds(i,s).set(0,u):setListBounds(i,0,s+1).set(s,u)}));s+=i._origin;var m=i._tail,v=i._root,_=MakeRef(Y);return s>=getTailOffset(i._capacity)?m=updateVNode(m,i.__ownerID,0,s,u,_):v=updateVNode(v,i.__ownerID,i._level,s,u,_),_.value?i.__ownerID?(i._root=v,i._tail=m,i.__hash=void 0,i.__altered=!0,i):makeList(i._origin,i._capacity,i._level,v,m):i}function updateVNode(i,s,u,m,v,_){var M,W=m>>>u&$,X=i&&W0){var Y=i&&i.array[W],Z=updateVNode(Y,s,u-j,m,v,_);return Z===Y?i:((M=editableVNode(i,s)).array[W]=Z,M)}return X&&i.array[W]===v?i:(SetRef(_),M=editableVNode(i,s),void 0===v&&W===M.array.length-1?M.array.pop():M.array[W]=v,M)}function editableVNode(i,s){return s&&i&&s===i.ownerID?i:new VNode(i?i.array.slice():[],s)}function listNodeFor(i,s){if(s>=getTailOffset(i._capacity))return i._tail;if(s<1<0;)u=u.array[s>>>m&$],m-=j;return u}}function setListBounds(i,s,u){void 0!==s&&(s|=0),void 0!==u&&(u|=0);var m=i.__ownerID||new OwnerID,v=i._origin,_=i._capacity,M=v+s,W=void 0===u?_:u<0?_+u:v+u;if(M===v&&W===_)return i;if(M>=W)return i.clear();for(var X=i._level,Y=i._root,Z=0;M+Z<0;)Y=new VNode(Y&&Y.array.length?[void 0,Y]:[],m),Z+=1<<(X+=j);Z&&(M+=Z,v+=Z,W+=Z,_+=Z);for(var ee=getTailOffset(_),ae=getTailOffset(W);ae>=1<ee?new VNode([],m):ie;if(ie&&ae>ee&&M<_&&ie.array.length){for(var ce=Y=editableVNode(Y,m),pe=X;pe>j;pe-=j){var de=ee>>>pe&$;ce=ce.array[de]=editableVNode(ce.array[de],m)}ce.array[ee>>>j&$]=ie}if(W<_&&(le=le&&le.removeAfter(m,0,W)),M>=ae)M-=ae,W-=ae,X=j,Y=null,le=le&&le.removeBefore(m,0,M);else if(M>v||ae>>X&$;if(fe!==ae>>>X&$)break;fe&&(Z+=(1<v&&(Y=Y.removeBefore(m,X,M-Z)),Y&&aev&&(v=M.size),isIterable(j)||(M=M.map((function(i){return fromJS(i)}))),m.push(M)}return v>i.size&&(i=i.setSize(v)),mergeIntoCollectionWith(i,s,m)}function getTailOffset(i){return i>>j<=M&&j.size>=2*_.size?(m=(v=j.filter((function(i,s){return void 0!==i&&$!==s}))).toKeyedSeq().map((function(i){return i[0]})).flip().toMap(),i.__ownerID&&(m.__ownerID=v.__ownerID=i.__ownerID)):(m=_.remove(s),v=$===j.size-1?j.pop():j.set($,void 0))}else if(X){if(u===j.get($)[1])return i;m=_,v=j.set($,[s,u])}else m=_.set(s,j.size),v=j.set(j.size,[s,u]);return i.__ownerID?(i.size=m.size,i._map=m,i._list=v,i.__hash=void 0,i):makeOrderedMap(m,v)}function ToKeyedSequence(i,s){this._iter=i,this._useKeys=s,this.size=i.size}function ToIndexedSequence(i){this._iter=i,this.size=i.size}function ToSetSequence(i){this._iter=i,this.size=i.size}function FromEntriesSequence(i){this._iter=i,this.size=i.size}function flipFactory(i){var s=makeSequence(i);return s._iter=i,s.size=i.size,s.flip=function(){return i},s.reverse=function(){var s=i.reverse.apply(this);return s.flip=function(){return i.reverse()},s},s.has=function(s){return i.includes(s)},s.includes=function(s){return i.has(s)},s.cacheResult=cacheResultThrough,s.__iterateUncached=function(s,u){var m=this;return i.__iterate((function(i,u){return!1!==s(u,i,m)}),u)},s.__iteratorUncached=function(s,u){if(s===ae){var m=i.__iterator(s,u);return new Iterator((function(){var i=m.next();if(!i.done){var s=i.value[0];i.value[0]=i.value[1],i.value[1]=s}return i}))}return i.__iterator(s===ee?Z:ee,u)},s}function mapFactory(i,s,u){var m=makeSequence(i);return m.size=i.size,m.has=function(s){return i.has(s)},m.get=function(m,v){var _=i.get(m,W);return _===W?v:s.call(u,_,m,i)},m.__iterateUncached=function(m,v){var _=this;return i.__iterate((function(i,v,j){return!1!==m(s.call(u,i,v,j),v,_)}),v)},m.__iteratorUncached=function(m,v){var _=i.__iterator(ae,v);return new Iterator((function(){var v=_.next();if(v.done)return v;var j=v.value,M=j[0];return iteratorValue(m,M,s.call(u,j[1],M,i),v)}))},m}function reverseFactory(i,s){var u=makeSequence(i);return u._iter=i,u.size=i.size,u.reverse=function(){return i},i.flip&&(u.flip=function(){var s=flipFactory(i);return s.reverse=function(){return i.flip()},s}),u.get=function(u,m){return i.get(s?u:-1-u,m)},u.has=function(u){return i.has(s?u:-1-u)},u.includes=function(s){return i.includes(s)},u.cacheResult=cacheResultThrough,u.__iterate=function(s,u){var m=this;return i.__iterate((function(i,u){return s(i,u,m)}),!u)},u.__iterator=function(s,u){return i.__iterator(s,!u)},u}function filterFactory(i,s,u,m){var v=makeSequence(i);return m&&(v.has=function(m){var v=i.get(m,W);return v!==W&&!!s.call(u,v,m,i)},v.get=function(m,v){var _=i.get(m,W);return _!==W&&s.call(u,_,m,i)?_:v}),v.__iterateUncached=function(v,_){var j=this,M=0;return i.__iterate((function(i,_,$){if(s.call(u,i,_,$))return M++,v(i,m?_:M-1,j)}),_),M},v.__iteratorUncached=function(v,_){var j=i.__iterator(ae,_),M=0;return new Iterator((function(){for(;;){var _=j.next();if(_.done)return _;var $=_.value,W=$[0],X=$[1];if(s.call(u,X,W,i))return iteratorValue(v,m?W:M++,X,_)}}))},v}function countByFactory(i,s,u){var m=Map().asMutable();return i.__iterate((function(v,_){m.update(s.call(u,v,_,i),0,(function(i){return i+1}))})),m.asImmutable()}function groupByFactory(i,s,u){var m=isKeyed(i),v=(isOrdered(i)?OrderedMap():Map()).asMutable();i.__iterate((function(_,j){v.update(s.call(u,_,j,i),(function(i){return(i=i||[]).push(m?[j,_]:_),i}))}));var _=iterableClass(i);return v.map((function(s){return reify(i,_(s))}))}function sliceFactory(i,s,u,m){var v=i.size;if(void 0!==s&&(s|=0),void 0!==u&&(u===1/0?u=v:u|=0),wholeSlice(s,u,v))return i;var _=resolveBegin(s,v),j=resolveEnd(u,v);if(_!=_||j!=j)return sliceFactory(i.toSeq().cacheResult(),s,u,m);var M,$=j-_;$==$&&(M=$<0?0:$);var W=makeSequence(i);return W.size=0===M?M:i.size&&M||void 0,!m&&isSeq(i)&&M>=0&&(W.get=function(s,u){return(s=wrapIndex(this,s))>=0&&sM)return iteratorDone();var i=v.next();return m||s===ee?i:iteratorValue(s,$-1,s===Z?void 0:i.value[1],i)}))},W}function takeWhileFactory(i,s,u){var m=makeSequence(i);return m.__iterateUncached=function(m,v){var _=this;if(v)return this.cacheResult().__iterate(m,v);var j=0;return i.__iterate((function(i,v,M){return s.call(u,i,v,M)&&++j&&m(i,v,_)})),j},m.__iteratorUncached=function(m,v){var _=this;if(v)return this.cacheResult().__iterator(m,v);var j=i.__iterator(ae,v),M=!0;return new Iterator((function(){if(!M)return iteratorDone();var i=j.next();if(i.done)return i;var v=i.value,$=v[0],W=v[1];return s.call(u,W,$,_)?m===ae?i:iteratorValue(m,$,W,i):(M=!1,iteratorDone())}))},m}function skipWhileFactory(i,s,u,m){var v=makeSequence(i);return v.__iterateUncached=function(v,_){var j=this;if(_)return this.cacheResult().__iterate(v,_);var M=!0,$=0;return i.__iterate((function(i,_,W){if(!M||!(M=s.call(u,i,_,W)))return $++,v(i,m?_:$-1,j)})),$},v.__iteratorUncached=function(v,_){var j=this;if(_)return this.cacheResult().__iterator(v,_);var M=i.__iterator(ae,_),$=!0,W=0;return new Iterator((function(){var i,_,X;do{if((i=M.next()).done)return m||v===ee?i:iteratorValue(v,W++,v===Z?void 0:i.value[1],i);var Y=i.value;_=Y[0],X=Y[1],$&&($=s.call(u,X,_,j))}while($);return v===ae?i:iteratorValue(v,_,X,i)}))},v}function concatFactory(i,s){var u=isKeyed(i),m=[i].concat(s).map((function(i){return isIterable(i)?u&&(i=KeyedIterable(i)):i=u?keyedSeqFromValue(i):indexedSeqFromValue(Array.isArray(i)?i:[i]),i})).filter((function(i){return 0!==i.size}));if(0===m.length)return i;if(1===m.length){var v=m[0];if(v===i||u&&isKeyed(v)||isIndexed(i)&&isIndexed(v))return v}var _=new ArraySeq(m);return u?_=_.toKeyedSeq():isIndexed(i)||(_=_.toSetSeq()),(_=_.flatten(!0)).size=m.reduce((function(i,s){if(void 0!==i){var u=s.size;if(void 0!==u)return i+u}}),0),_}function flattenFactory(i,s,u){var m=makeSequence(i);return m.__iterateUncached=function(m,v){var _=0,j=!1;function flatDeep(i,M){var $=this;i.__iterate((function(i,v){return(!s||M0}function zipWithFactory(i,s,u){var m=makeSequence(i);return m.size=new ArraySeq(u).map((function(i){return i.size})).min(),m.__iterate=function(i,s){for(var u,m=this.__iterator(ee,s),v=0;!(u=m.next()).done&&!1!==i(u.value,v++,this););return v},m.__iteratorUncached=function(i,m){var v=u.map((function(i){return i=Iterable(i),getIterator(m?i.reverse():i)})),_=0,j=!1;return new Iterator((function(){var u;return j||(u=v.map((function(i){return i.next()})),j=u.some((function(i){return i.done}))),j?iteratorDone():iteratorValue(i,_++,s.apply(null,u.map((function(i){return i.value}))))}))},m}function reify(i,s){return isSeq(i)?s:i.constructor(s)}function validateEntry(i){if(i!==Object(i))throw new TypeError("Expected [K, V] tuple: "+i)}function resolveSize(i){return assertNotInfinite(i.size),ensureSize(i)}function iterableClass(i){return isKeyed(i)?KeyedIterable:isIndexed(i)?IndexedIterable:SetIterable}function makeSequence(i){return Object.create((isKeyed(i)?KeyedSeq:isIndexed(i)?IndexedSeq:SetSeq).prototype)}function cacheResultThrough(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):Seq.prototype.cacheResult.call(this)}function defaultComparator(i,s){return i>s?1:i=0;u--)s={value:arguments[u],next:s};return this.__ownerID?(this.size=i,this._head=s,this.__hash=void 0,this.__altered=!0,this):makeStack(i,s)},Stack.prototype.pushAll=function(i){if(0===(i=IndexedIterable(i)).size)return this;assertNotInfinite(i.size);var s=this.size,u=this._head;return i.reverse().forEach((function(i){s++,u={value:i,next:u}})),this.__ownerID?(this.size=s,this._head=u,this.__hash=void 0,this.__altered=!0,this):makeStack(s,u)},Stack.prototype.pop=function(){return this.slice(1)},Stack.prototype.unshift=function(){return this.push.apply(this,arguments)},Stack.prototype.unshiftAll=function(i){return this.pushAll(i)},Stack.prototype.shift=function(){return this.pop.apply(this,arguments)},Stack.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):emptyStack()},Stack.prototype.slice=function(i,s){if(wholeSlice(i,s,this.size))return this;var u=resolveBegin(i,this.size);if(resolveEnd(s,this.size)!==this.size)return IndexedCollection.prototype.slice.call(this,i,s);for(var m=this.size-u,v=this._head;u--;)v=v.next;return this.__ownerID?(this.size=m,this._head=v,this.__hash=void 0,this.__altered=!0,this):makeStack(m,v)},Stack.prototype.__ensureOwner=function(i){return i===this.__ownerID?this:i?makeStack(this.size,this._head,i,this.__hash):(this.__ownerID=i,this.__altered=!1,this)},Stack.prototype.__iterate=function(i,s){if(s)return this.reverse().__iterate(i);for(var u=0,m=this._head;m&&!1!==i(m.value,u++,this);)m=m.next;return u},Stack.prototype.__iterator=function(i,s){if(s)return this.reverse().__iterator(i);var u=0,m=this._head;return new Iterator((function(){if(m){var s=m.value;return m=m.next,iteratorValue(i,u++,s)}return iteratorDone()}))},Stack.isStack=isStack;var pt,ht="@@__IMMUTABLE_STACK__@@",dt=Stack.prototype;function makeStack(i,s,u,m){var v=Object.create(dt);return v.size=i,v._head=s,v.__ownerID=u,v.__hash=m,v.__altered=!1,v}function emptyStack(){return pt||(pt=makeStack(0))}function mixin(i,s){var keyCopier=function(u){i.prototype[u]=s[u]};return Object.keys(s).forEach(keyCopier),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(s).forEach(keyCopier),i}dt[ht]=!0,dt.withMutations=He.withMutations,dt.asMutable=He.asMutable,dt.asImmutable=He.asImmutable,dt.wasAltered=He.wasAltered,Iterable.Iterator=Iterator,mixin(Iterable,{toArray:function(){assertNotInfinite(this.size);var i=new Array(this.size||0);return this.valueSeq().__iterate((function(s,u){i[u]=s})),i},toIndexedSeq:function(){return new ToIndexedSequence(this)},toJS:function(){return this.toSeq().map((function(i){return i&&"function"==typeof i.toJS?i.toJS():i})).__toJS()},toJSON:function(){return this.toSeq().map((function(i){return i&&"function"==typeof i.toJSON?i.toJSON():i})).__toJS()},toKeyedSeq:function(){return new ToKeyedSequence(this,!0)},toMap:function(){return Map(this.toKeyedSeq())},toObject:function(){assertNotInfinite(this.size);var i={};return this.__iterate((function(s,u){i[u]=s})),i},toOrderedMap:function(){return OrderedMap(this.toKeyedSeq())},toOrderedSet:function(){return OrderedSet(isKeyed(this)?this.valueSeq():this)},toSet:function(){return Set(isKeyed(this)?this.valueSeq():this)},toSetSeq:function(){return new ToSetSequence(this)},toSeq:function(){return isIndexed(this)?this.toIndexedSeq():isKeyed(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Stack(isKeyed(this)?this.valueSeq():this)},toList:function(){return List(isKeyed(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(i,s){return 0===this.size?i+s:i+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+s},concat:function(){return reify(this,concatFactory(this,i.call(arguments,0)))},includes:function(i){return this.some((function(s){return is(s,i)}))},entries:function(){return this.__iterator(ae)},every:function(i,s){assertNotInfinite(this.size);var u=!0;return this.__iterate((function(m,v,_){if(!i.call(s,m,v,_))return u=!1,!1})),u},filter:function(i,s){return reify(this,filterFactory(this,i,s,!0))},find:function(i,s,u){var m=this.findEntry(i,s);return m?m[1]:u},forEach:function(i,s){return assertNotInfinite(this.size),this.__iterate(s?i.bind(s):i)},join:function(i){assertNotInfinite(this.size),i=void 0!==i?""+i:",";var s="",u=!0;return this.__iterate((function(m){u?u=!1:s+=i,s+=null!=m?m.toString():""})),s},keys:function(){return this.__iterator(Z)},map:function(i,s){return reify(this,mapFactory(this,i,s))},reduce:function(i,s,u){var m,v;return assertNotInfinite(this.size),arguments.length<2?v=!0:m=s,this.__iterate((function(s,_,j){v?(v=!1,m=s):m=i.call(u,m,s,_,j)})),m},reduceRight:function(i,s,u){var m=this.toKeyedSeq().reverse();return m.reduce.apply(m,arguments)},reverse:function(){return reify(this,reverseFactory(this,!0))},slice:function(i,s){return reify(this,sliceFactory(this,i,s,!0))},some:function(i,s){return!this.every(not(i),s)},sort:function(i){return reify(this,sortFactory(this,i))},values:function(){return this.__iterator(ee)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(i,s){return ensureSize(i?this.toSeq().filter(i,s):this)},countBy:function(i,s){return countByFactory(this,i,s)},equals:function(i){return deepEqual(this,i)},entrySeq:function(){var i=this;if(i._cache)return new ArraySeq(i._cache);var s=i.toSeq().map(entryMapper).toIndexedSeq();return s.fromEntrySeq=function(){return i.toSeq()},s},filterNot:function(i,s){return this.filter(not(i),s)},findEntry:function(i,s,u){var m=u;return this.__iterate((function(u,v,_){if(i.call(s,u,v,_))return m=[v,u],!1})),m},findKey:function(i,s){var u=this.findEntry(i,s);return u&&u[0]},findLast:function(i,s,u){return this.toKeyedSeq().reverse().find(i,s,u)},findLastEntry:function(i,s,u){return this.toKeyedSeq().reverse().findEntry(i,s,u)},findLastKey:function(i,s){return this.toKeyedSeq().reverse().findKey(i,s)},first:function(){return this.find(returnTrue)},flatMap:function(i,s){return reify(this,flatMapFactory(this,i,s))},flatten:function(i){return reify(this,flattenFactory(this,i,!0))},fromEntrySeq:function(){return new FromEntriesSequence(this)},get:function(i,s){return this.find((function(s,u){return is(u,i)}),void 0,s)},getIn:function(i,s){for(var u,m=this,v=forceIterator(i);!(u=v.next()).done;){var _=u.value;if((m=m&&m.get?m.get(_,W):W)===W)return s}return m},groupBy:function(i,s){return groupByFactory(this,i,s)},has:function(i){return this.get(i,W)!==W},hasIn:function(i){return this.getIn(i,W)!==W},isSubset:function(i){return i="function"==typeof i.includes?i:Iterable(i),this.every((function(s){return i.includes(s)}))},isSuperset:function(i){return(i="function"==typeof i.isSubset?i:Iterable(i)).isSubset(this)},keyOf:function(i){return this.findKey((function(s){return is(s,i)}))},keySeq:function(){return this.toSeq().map(keyMapper).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(i){return this.toKeyedSeq().reverse().keyOf(i)},max:function(i){return maxFactory(this,i)},maxBy:function(i,s){return maxFactory(this,s,i)},min:function(i){return maxFactory(this,i?neg(i):defaultNegComparator)},minBy:function(i,s){return maxFactory(this,s?neg(s):defaultNegComparator,i)},rest:function(){return this.slice(1)},skip:function(i){return this.slice(Math.max(0,i))},skipLast:function(i){return reify(this,this.toSeq().reverse().skip(i).reverse())},skipWhile:function(i,s){return reify(this,skipWhileFactory(this,i,s,!0))},skipUntil:function(i,s){return this.skipWhile(not(i),s)},sortBy:function(i,s){return reify(this,sortFactory(this,s,i))},take:function(i){return this.slice(0,Math.max(0,i))},takeLast:function(i){return reify(this,this.toSeq().reverse().take(i).reverse())},takeWhile:function(i,s){return reify(this,takeWhileFactory(this,i,s))},takeUntil:function(i,s){return this.takeWhile(not(i),s)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=hashIterable(this))}});var mt=Iterable.prototype;mt[s]=!0,mt[ce]=mt.values,mt.__toJS=mt.toArray,mt.__toStringMapper=quoteString,mt.inspect=mt.toSource=function(){return this.toString()},mt.chain=mt.flatMap,mt.contains=mt.includes,mixin(KeyedIterable,{flip:function(){return reify(this,flipFactory(this))},mapEntries:function(i,s){var u=this,m=0;return reify(this,this.toSeq().map((function(v,_){return i.call(s,[_,v],m++,u)})).fromEntrySeq())},mapKeys:function(i,s){var u=this;return reify(this,this.toSeq().flip().map((function(m,v){return i.call(s,m,v,u)})).flip())}});var gt=KeyedIterable.prototype;function keyMapper(i,s){return s}function entryMapper(i,s){return[s,i]}function not(i){return function(){return!i.apply(this,arguments)}}function neg(i){return function(){return-i.apply(this,arguments)}}function quoteString(i){return"string"==typeof i?JSON.stringify(i):String(i)}function defaultZipper(){return arrCopy(arguments)}function defaultNegComparator(i,s){return is?-1:0}function hashIterable(i){if(i.size===1/0)return 0;var s=isOrdered(i),u=isKeyed(i),m=s?1:0;return murmurHashOfSize(i.__iterate(u?s?function(i,s){m=31*m+hashMerge(hash(i),hash(s))|0}:function(i,s){m=m+hashMerge(hash(i),hash(s))|0}:s?function(i){m=31*m+hash(i)|0}:function(i){m=m+hash(i)|0}),m)}function murmurHashOfSize(i,s){return s=be(s,3432918353),s=be(s<<15|s>>>-15,461845907),s=be(s<<13|s>>>-13,5),s=be((s=(s+3864292196|0)^i)^s>>>16,2246822507),s=smi((s=be(s^s>>>13,3266489909))^s>>>16)}function hashMerge(i,s){return i^s+2654435769+(i<<6)+(i>>2)|0}return gt[u]=!0,gt[ce]=mt.entries,gt.__toJS=mt.toObject,gt.__toStringMapper=function(i,s){return JSON.stringify(s)+": "+quoteString(i)},mixin(IndexedIterable,{toKeyedSeq:function(){return new ToKeyedSequence(this,!1)},filter:function(i,s){return reify(this,filterFactory(this,i,s,!1))},findIndex:function(i,s){var u=this.findEntry(i,s);return u?u[0]:-1},indexOf:function(i){var s=this.keyOf(i);return void 0===s?-1:s},lastIndexOf:function(i){var s=this.lastKeyOf(i);return void 0===s?-1:s},reverse:function(){return reify(this,reverseFactory(this,!1))},slice:function(i,s){return reify(this,sliceFactory(this,i,s,!1))},splice:function(i,s){var u=arguments.length;if(s=Math.max(0|s,0),0===u||2===u&&!s)return this;i=resolveBegin(i,i<0?this.count():this.size);var m=this.slice(0,i);return reify(this,1===u?m:m.concat(arrCopy(arguments,2),this.slice(i+s)))},findLastIndex:function(i,s){var u=this.findLastEntry(i,s);return u?u[0]:-1},first:function(){return this.get(0)},flatten:function(i){return reify(this,flattenFactory(this,i,!1))},get:function(i,s){return(i=wrapIndex(this,i))<0||this.size===1/0||void 0!==this.size&&i>this.size?s:this.find((function(s,u){return u===i}),void 0,s)},has:function(i){return(i=wrapIndex(this,i))>=0&&(void 0!==this.size?this.size===1/0||i{"function"==typeof Object.create?i.exports=function inherits(i,s){s&&(i.super_=s,i.prototype=Object.create(s.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}))}:i.exports=function inherits(i,s){if(s){i.super_=s;var TempCtor=function(){};TempCtor.prototype=s.prototype,i.prototype=new TempCtor,i.prototype.constructor=i}}},35823:i=>{i.exports=function(i,s,u,m){var v=new Blob(void 0!==m?[m,i]:[i],{type:u||"application/octet-stream"});if(void 0!==window.navigator.msSaveBlob)window.navigator.msSaveBlob(v,s);else{var _=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(v):window.webkitURL.createObjectURL(v),j=document.createElement("a");j.style.display="none",j.href=_,j.setAttribute("download",s),void 0===j.download&&j.setAttribute("target","_blank"),document.body.appendChild(j),j.click(),setTimeout((function(){document.body.removeChild(j),window.URL.revokeObjectURL(_)}),200)}}},91296:(i,s,u)=>{var m=NaN,v="[object Symbol]",_=/^\s+|\s+$/g,j=/^[-+]0x[0-9a-f]+$/i,M=/^0b[01]+$/i,$=/^0o[0-7]+$/i,W=parseInt,X="object"==typeof u.g&&u.g&&u.g.Object===Object&&u.g,Y="object"==typeof self&&self&&self.Object===Object&&self,Z=X||Y||Function("return this")(),ee=Object.prototype.toString,ae=Math.max,ie=Math.min,now=function(){return Z.Date.now()};function isObject(i){var s=typeof i;return!!i&&("object"==s||"function"==s)}function toNumber(i){if("number"==typeof i)return i;if(function isSymbol(i){return"symbol"==typeof i||function isObjectLike(i){return!!i&&"object"==typeof i}(i)&&ee.call(i)==v}(i))return m;if(isObject(i)){var s="function"==typeof i.valueOf?i.valueOf():i;i=isObject(s)?s+"":s}if("string"!=typeof i)return 0===i?i:+i;i=i.replace(_,"");var u=M.test(i);return u||$.test(i)?W(i.slice(2),u?2:8):j.test(i)?m:+i}i.exports=function debounce(i,s,u){var m,v,_,j,M,$,W=0,X=!1,Y=!1,Z=!0;if("function"!=typeof i)throw new TypeError("Expected a function");function invokeFunc(s){var u=m,_=v;return m=v=void 0,W=s,j=i.apply(_,u)}function shouldInvoke(i){var u=i-$;return void 0===$||u>=s||u<0||Y&&i-W>=_}function timerExpired(){var i=now();if(shouldInvoke(i))return trailingEdge(i);M=setTimeout(timerExpired,function remainingWait(i){var u=s-(i-$);return Y?ie(u,_-(i-W)):u}(i))}function trailingEdge(i){return M=void 0,Z&&m?invokeFunc(i):(m=v=void 0,j)}function debounced(){var i=now(),u=shouldInvoke(i);if(m=arguments,v=this,$=i,u){if(void 0===M)return function leadingEdge(i){return W=i,M=setTimeout(timerExpired,s),X?invokeFunc(i):j}($);if(Y)return M=setTimeout(timerExpired,s),invokeFunc($)}return void 0===M&&(M=setTimeout(timerExpired,s)),j}return s=toNumber(s)||0,isObject(u)&&(X=!!u.leading,_=(Y="maxWait"in u)?ae(toNumber(u.maxWait)||0,s):_,Z="trailing"in u?!!u.trailing:Z),debounced.cancel=function cancel(){void 0!==M&&clearTimeout(M),W=0,m=$=v=M=void 0},debounced.flush=function flush(){return void 0===M?j:trailingEdge(now())},debounced}},18552:(i,s,u)=>{var m=u(10852)(u(55639),"DataView");i.exports=m},1989:(i,s,u)=>{var m=u(51789),v=u(80401),_=u(57667),j=u(21327),M=u(81866);function Hash(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(3118),v=u(9435);function LazyWrapper(i){this.__wrapped__=i,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}LazyWrapper.prototype=m(v.prototype),LazyWrapper.prototype.constructor=LazyWrapper,i.exports=LazyWrapper},38407:(i,s,u)=>{var m=u(27040),v=u(14125),_=u(82117),j=u(67518),M=u(54705);function ListCache(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(3118),v=u(9435);function LodashWrapper(i,s){this.__wrapped__=i,this.__actions__=[],this.__chain__=!!s,this.__index__=0,this.__values__=void 0}LodashWrapper.prototype=m(v.prototype),LodashWrapper.prototype.constructor=LodashWrapper,i.exports=LodashWrapper},57071:(i,s,u)=>{var m=u(10852)(u(55639),"Map");i.exports=m},83369:(i,s,u)=>{var m=u(24785),v=u(11285),_=u(96e3),j=u(49916),M=u(95265);function MapCache(i){var s=-1,u=null==i?0:i.length;for(this.clear();++s{var m=u(10852)(u(55639),"Promise");i.exports=m},58525:(i,s,u)=>{var m=u(10852)(u(55639),"Set");i.exports=m},88668:(i,s,u)=>{var m=u(83369),v=u(90619),_=u(72385);function SetCache(i){var s=-1,u=null==i?0:i.length;for(this.__data__=new m;++s{var m=u(38407),v=u(37465),_=u(63779),j=u(67599),M=u(44758),$=u(34309);function Stack(i){var s=this.__data__=new m(i);this.size=s.size}Stack.prototype.clear=v,Stack.prototype.delete=_,Stack.prototype.get=j,Stack.prototype.has=M,Stack.prototype.set=$,i.exports=Stack},62705:(i,s,u)=>{var m=u(55639).Symbol;i.exports=m},11149:(i,s,u)=>{var m=u(55639).Uint8Array;i.exports=m},70577:(i,s,u)=>{var m=u(10852)(u(55639),"WeakMap");i.exports=m},96874:i=>{i.exports=function apply(i,s,u){switch(u.length){case 0:return i.call(s);case 1:return i.call(s,u[0]);case 2:return i.call(s,u[0],u[1]);case 3:return i.call(s,u[0],u[1],u[2])}return i.apply(s,u)}},77412:i=>{i.exports=function arrayEach(i,s){for(var u=-1,m=null==i?0:i.length;++u{i.exports=function arrayFilter(i,s){for(var u=-1,m=null==i?0:i.length,v=0,_=[];++u{var m=u(42118);i.exports=function arrayIncludes(i,s){return!!(null==i?0:i.length)&&m(i,s,0)>-1}},14636:(i,s,u)=>{var m=u(22545),v=u(35694),_=u(1469),j=u(44144),M=u(65776),$=u(36719),W=Object.prototype.hasOwnProperty;i.exports=function arrayLikeKeys(i,s){var u=_(i),X=!u&&v(i),Y=!u&&!X&&j(i),Z=!u&&!X&&!Y&&$(i),ee=u||X||Y||Z,ae=ee?m(i.length,String):[],ie=ae.length;for(var le in i)!s&&!W.call(i,le)||ee&&("length"==le||Y&&("offset"==le||"parent"==le)||Z&&("buffer"==le||"byteLength"==le||"byteOffset"==le)||M(le,ie))||ae.push(le);return ae}},29932:i=>{i.exports=function arrayMap(i,s){for(var u=-1,m=null==i?0:i.length,v=Array(m);++u{i.exports=function arrayPush(i,s){for(var u=-1,m=s.length,v=i.length;++u{i.exports=function arrayReduce(i,s,u,m){var v=-1,_=null==i?0:i.length;for(m&&_&&(u=i[++v]);++v<_;)u=s(u,i[v],v,i);return u}},82908:i=>{i.exports=function arraySome(i,s){for(var u=-1,m=null==i?0:i.length;++u{i.exports=function asciiToArray(i){return i.split("")}},49029:i=>{var s=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;i.exports=function asciiWords(i){return i.match(s)||[]}},86556:(i,s,u)=>{var m=u(89465),v=u(77813);i.exports=function assignMergeValue(i,s,u){(void 0!==u&&!v(i[s],u)||void 0===u&&!(s in i))&&m(i,s,u)}},34865:(i,s,u)=>{var m=u(89465),v=u(77813),_=Object.prototype.hasOwnProperty;i.exports=function assignValue(i,s,u){var j=i[s];_.call(i,s)&&v(j,u)&&(void 0!==u||s in i)||m(i,s,u)}},18470:(i,s,u)=>{var m=u(77813);i.exports=function assocIndexOf(i,s){for(var u=i.length;u--;)if(m(i[u][0],s))return u;return-1}},44037:(i,s,u)=>{var m=u(98363),v=u(3674);i.exports=function baseAssign(i,s){return i&&m(s,v(s),i)}},63886:(i,s,u)=>{var m=u(98363),v=u(81704);i.exports=function baseAssignIn(i,s){return i&&m(s,v(s),i)}},89465:(i,s,u)=>{var m=u(38777);i.exports=function baseAssignValue(i,s,u){"__proto__"==s&&m?m(i,s,{configurable:!0,enumerable:!0,value:u,writable:!0}):i[s]=u}},85990:(i,s,u)=>{var m=u(46384),v=u(77412),_=u(34865),j=u(44037),M=u(63886),$=u(64626),W=u(278),X=u(18805),Y=u(1911),Z=u(58234),ee=u(46904),ae=u(64160),ie=u(43824),le=u(29148),ce=u(38517),pe=u(1469),de=u(44144),fe=u(56688),ye=u(13218),be=u(72928),_e=u(3674),we=u(81704),Se="[object Arguments]",xe="[object Function]",Pe="[object Object]",Ie={};Ie[Se]=Ie["[object Array]"]=Ie["[object ArrayBuffer]"]=Ie["[object DataView]"]=Ie["[object Boolean]"]=Ie["[object Date]"]=Ie["[object Float32Array]"]=Ie["[object Float64Array]"]=Ie["[object Int8Array]"]=Ie["[object Int16Array]"]=Ie["[object Int32Array]"]=Ie["[object Map]"]=Ie["[object Number]"]=Ie[Pe]=Ie["[object RegExp]"]=Ie["[object Set]"]=Ie["[object String]"]=Ie["[object Symbol]"]=Ie["[object Uint8Array]"]=Ie["[object Uint8ClampedArray]"]=Ie["[object Uint16Array]"]=Ie["[object Uint32Array]"]=!0,Ie["[object Error]"]=Ie[xe]=Ie["[object WeakMap]"]=!1,i.exports=function baseClone(i,s,u,Te,Re,qe){var ze,Ve=1&s,We=2&s,He=4&s;if(u&&(ze=Re?u(i,Te,Re,qe):u(i)),void 0!==ze)return ze;if(!ye(i))return i;var Xe=pe(i);if(Xe){if(ze=ie(i),!Ve)return W(i,ze)}else{var Ye=ae(i),Qe=Ye==xe||"[object GeneratorFunction]"==Ye;if(de(i))return $(i,Ve);if(Ye==Pe||Ye==Se||Qe&&!Re){if(ze=We||Qe?{}:ce(i),!Ve)return We?Y(i,M(ze,i)):X(i,j(ze,i))}else{if(!Ie[Ye])return Re?i:{};ze=le(i,Ye,Ve)}}qe||(qe=new m);var et=qe.get(i);if(et)return et;qe.set(i,ze),be(i)?i.forEach((function(m){ze.add(baseClone(m,s,u,m,i,qe))})):fe(i)&&i.forEach((function(m,v){ze.set(v,baseClone(m,s,u,v,i,qe))}));var tt=Xe?void 0:(He?We?ee:Z:We?we:_e)(i);return v(tt||i,(function(m,v){tt&&(m=i[v=m]),_(ze,v,baseClone(m,s,u,v,i,qe))})),ze}},3118:(i,s,u)=>{var m=u(13218),v=Object.create,_=function(){function object(){}return function(i){if(!m(i))return{};if(v)return v(i);object.prototype=i;var s=new object;return object.prototype=void 0,s}}();i.exports=_},89881:(i,s,u)=>{var m=u(47816),v=u(99291)(m);i.exports=v},41848:i=>{i.exports=function baseFindIndex(i,s,u,m){for(var v=i.length,_=u+(m?1:-1);m?_--:++_{var m=u(62488),v=u(37285);i.exports=function baseFlatten(i,s,u,_,j){var M=-1,$=i.length;for(u||(u=v),j||(j=[]);++M<$;){var W=i[M];s>0&&u(W)?s>1?baseFlatten(W,s-1,u,_,j):m(j,W):_||(j[j.length]=W)}return j}},28483:(i,s,u)=>{var m=u(25063)();i.exports=m},47816:(i,s,u)=>{var m=u(28483),v=u(3674);i.exports=function baseForOwn(i,s){return i&&m(i,s,v)}},97786:(i,s,u)=>{var m=u(71811),v=u(40327);i.exports=function baseGet(i,s){for(var u=0,_=(s=m(s,i)).length;null!=i&&u<_;)i=i[v(s[u++])];return u&&u==_?i:void 0}},68866:(i,s,u)=>{var m=u(62488),v=u(1469);i.exports=function baseGetAllKeys(i,s,u){var _=s(i);return v(i)?_:m(_,u(i))}},44239:(i,s,u)=>{var m=u(62705),v=u(89607),_=u(2333),j=m?m.toStringTag:void 0;i.exports=function baseGetTag(i){return null==i?void 0===i?"[object Undefined]":"[object Null]":j&&j in Object(i)?v(i):_(i)}},13:i=>{i.exports=function baseHasIn(i,s){return null!=i&&s in Object(i)}},42118:(i,s,u)=>{var m=u(41848),v=u(62722),_=u(42351);i.exports=function baseIndexOf(i,s,u){return s==s?_(i,s,u):m(i,v,u)}},9454:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function baseIsArguments(i){return v(i)&&"[object Arguments]"==m(i)}},90939:(i,s,u)=>{var m=u(2492),v=u(37005);i.exports=function baseIsEqual(i,s,u,_,j){return i===s||(null==i||null==s||!v(i)&&!v(s)?i!=i&&s!=s:m(i,s,u,_,baseIsEqual,j))}},2492:(i,s,u)=>{var m=u(46384),v=u(67114),_=u(18351),j=u(16096),M=u(64160),$=u(1469),W=u(44144),X=u(36719),Y="[object Arguments]",Z="[object Array]",ee="[object Object]",ae=Object.prototype.hasOwnProperty;i.exports=function baseIsEqualDeep(i,s,u,ie,le,ce){var pe=$(i),de=$(s),fe=pe?Z:M(i),ye=de?Z:M(s),be=(fe=fe==Y?ee:fe)==ee,_e=(ye=ye==Y?ee:ye)==ee,we=fe==ye;if(we&&W(i)){if(!W(s))return!1;pe=!0,be=!1}if(we&&!be)return ce||(ce=new m),pe||X(i)?v(i,s,u,ie,le,ce):_(i,s,fe,u,ie,le,ce);if(!(1&u)){var Se=be&&ae.call(i,"__wrapped__"),xe=_e&&ae.call(s,"__wrapped__");if(Se||xe){var Pe=Se?i.value():i,Ie=xe?s.value():s;return ce||(ce=new m),le(Pe,Ie,u,ie,ce)}}return!!we&&(ce||(ce=new m),j(i,s,u,ie,le,ce))}},25588:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function baseIsMap(i){return v(i)&&"[object Map]"==m(i)}},2958:(i,s,u)=>{var m=u(46384),v=u(90939);i.exports=function baseIsMatch(i,s,u,_){var j=u.length,M=j,$=!_;if(null==i)return!M;for(i=Object(i);j--;){var W=u[j];if($&&W[2]?W[1]!==i[W[0]]:!(W[0]in i))return!1}for(;++j{i.exports=function baseIsNaN(i){return i!=i}},28458:(i,s,u)=>{var m=u(23560),v=u(15346),_=u(13218),j=u(80346),M=/^\[object .+?Constructor\]$/,$=Function.prototype,W=Object.prototype,X=$.toString,Y=W.hasOwnProperty,Z=RegExp("^"+X.call(Y).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");i.exports=function baseIsNative(i){return!(!_(i)||v(i))&&(m(i)?Z:M).test(j(i))}},29221:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function baseIsSet(i){return v(i)&&"[object Set]"==m(i)}},38749:(i,s,u)=>{var m=u(44239),v=u(41780),_=u(37005),j={};j["[object Float32Array]"]=j["[object Float64Array]"]=j["[object Int8Array]"]=j["[object Int16Array]"]=j["[object Int32Array]"]=j["[object Uint8Array]"]=j["[object Uint8ClampedArray]"]=j["[object Uint16Array]"]=j["[object Uint32Array]"]=!0,j["[object Arguments]"]=j["[object Array]"]=j["[object ArrayBuffer]"]=j["[object Boolean]"]=j["[object DataView]"]=j["[object Date]"]=j["[object Error]"]=j["[object Function]"]=j["[object Map]"]=j["[object Number]"]=j["[object Object]"]=j["[object RegExp]"]=j["[object Set]"]=j["[object String]"]=j["[object WeakMap]"]=!1,i.exports=function baseIsTypedArray(i){return _(i)&&v(i.length)&&!!j[m(i)]}},67206:(i,s,u)=>{var m=u(91573),v=u(16432),_=u(6557),j=u(1469),M=u(39601);i.exports=function baseIteratee(i){return"function"==typeof i?i:null==i?_:"object"==typeof i?j(i)?v(i[0],i[1]):m(i):M(i)}},280:(i,s,u)=>{var m=u(25726),v=u(86916),_=Object.prototype.hasOwnProperty;i.exports=function baseKeys(i){if(!m(i))return v(i);var s=[];for(var u in Object(i))_.call(i,u)&&"constructor"!=u&&s.push(u);return s}},10313:(i,s,u)=>{var m=u(13218),v=u(25726),_=u(33498),j=Object.prototype.hasOwnProperty;i.exports=function baseKeysIn(i){if(!m(i))return _(i);var s=v(i),u=[];for(var M in i)("constructor"!=M||!s&&j.call(i,M))&&u.push(M);return u}},9435:i=>{i.exports=function baseLodash(){}},91573:(i,s,u)=>{var m=u(2958),v=u(1499),_=u(42634);i.exports=function baseMatches(i){var s=v(i);return 1==s.length&&s[0][2]?_(s[0][0],s[0][1]):function(u){return u===i||m(u,i,s)}}},16432:(i,s,u)=>{var m=u(90939),v=u(27361),_=u(79095),j=u(15403),M=u(89162),$=u(42634),W=u(40327);i.exports=function baseMatchesProperty(i,s){return j(i)&&M(s)?$(W(i),s):function(u){var j=v(u,i);return void 0===j&&j===s?_(u,i):m(s,j,3)}}},42980:(i,s,u)=>{var m=u(46384),v=u(86556),_=u(28483),j=u(59783),M=u(13218),$=u(81704),W=u(36390);i.exports=function baseMerge(i,s,u,X,Y){i!==s&&_(s,(function(_,$){if(Y||(Y=new m),M(_))j(i,s,$,u,baseMerge,X,Y);else{var Z=X?X(W(i,$),_,$+"",i,s,Y):void 0;void 0===Z&&(Z=_),v(i,$,Z)}}),$)}},59783:(i,s,u)=>{var m=u(86556),v=u(64626),_=u(77133),j=u(278),M=u(38517),$=u(35694),W=u(1469),X=u(29246),Y=u(44144),Z=u(23560),ee=u(13218),ae=u(68630),ie=u(36719),le=u(36390),ce=u(59881);i.exports=function baseMergeDeep(i,s,u,pe,de,fe,ye){var be=le(i,u),_e=le(s,u),we=ye.get(_e);if(we)m(i,u,we);else{var Se=fe?fe(be,_e,u+"",i,s,ye):void 0,xe=void 0===Se;if(xe){var Pe=W(_e),Ie=!Pe&&Y(_e),Te=!Pe&&!Ie&&ie(_e);Se=_e,Pe||Ie||Te?W(be)?Se=be:X(be)?Se=j(be):Ie?(xe=!1,Se=v(_e,!0)):Te?(xe=!1,Se=_(_e,!0)):Se=[]:ae(_e)||$(_e)?(Se=be,$(be)?Se=ce(be):ee(be)&&!Z(be)||(Se=M(_e))):xe=!1}xe&&(ye.set(_e,Se),de(Se,_e,pe,fe,ye),ye.delete(_e)),m(i,u,Se)}}},40371:i=>{i.exports=function baseProperty(i){return function(s){return null==s?void 0:s[i]}}},79152:(i,s,u)=>{var m=u(97786);i.exports=function basePropertyDeep(i){return function(s){return m(s,i)}}},18674:i=>{i.exports=function basePropertyOf(i){return function(s){return null==i?void 0:i[s]}}},10107:i=>{i.exports=function baseReduce(i,s,u,m,v){return v(i,(function(i,v,_){u=m?(m=!1,i):s(u,i,v,_)})),u}},5976:(i,s,u)=>{var m=u(6557),v=u(45357),_=u(30061);i.exports=function baseRest(i,s){return _(v(i,s,m),i+"")}},10611:(i,s,u)=>{var m=u(34865),v=u(71811),_=u(65776),j=u(13218),M=u(40327);i.exports=function baseSet(i,s,u,$){if(!j(i))return i;for(var W=-1,X=(s=v(s,i)).length,Y=X-1,Z=i;null!=Z&&++W{var m=u(6557),v=u(89250),_=v?function(i,s){return v.set(i,s),i}:m;i.exports=_},56560:(i,s,u)=>{var m=u(75703),v=u(38777),_=u(6557),j=v?function(i,s){return v(i,"toString",{configurable:!0,enumerable:!1,value:m(s),writable:!0})}:_;i.exports=j},14259:i=>{i.exports=function baseSlice(i,s,u){var m=-1,v=i.length;s<0&&(s=-s>v?0:v+s),(u=u>v?v:u)<0&&(u+=v),v=s>u?0:u-s>>>0,s>>>=0;for(var _=Array(v);++m{var m=u(89881);i.exports=function baseSome(i,s){var u;return m(i,(function(i,m,v){return!(u=s(i,m,v))})),!!u}},22545:i=>{i.exports=function baseTimes(i,s){for(var u=-1,m=Array(i);++u{var m=u(62705),v=u(29932),_=u(1469),j=u(33448),M=m?m.prototype:void 0,$=M?M.toString:void 0;i.exports=function baseToString(i){if("string"==typeof i)return i;if(_(i))return v(i,baseToString)+"";if(j(i))return $?$.call(i):"";var s=i+"";return"0"==s&&1/i==-Infinity?"-0":s}},27561:(i,s,u)=>{var m=u(67990),v=/^\s+/;i.exports=function baseTrim(i){return i?i.slice(0,m(i)+1).replace(v,""):i}},7518:i=>{i.exports=function baseUnary(i){return function(s){return i(s)}}},57406:(i,s,u)=>{var m=u(71811),v=u(10928),_=u(40292),j=u(40327);i.exports=function baseUnset(i,s){return s=m(s,i),null==(i=_(i,s))||delete i[j(v(s))]}},1757:i=>{i.exports=function baseZipObject(i,s,u){for(var m=-1,v=i.length,_=s.length,j={};++m{i.exports=function cacheHas(i,s){return i.has(s)}},71811:(i,s,u)=>{var m=u(1469),v=u(15403),_=u(55514),j=u(79833);i.exports=function castPath(i,s){return m(i)?i:v(i,s)?[i]:_(j(i))}},40180:(i,s,u)=>{var m=u(14259);i.exports=function castSlice(i,s,u){var v=i.length;return u=void 0===u?v:u,!s&&u>=v?i:m(i,s,u)}},74318:(i,s,u)=>{var m=u(11149);i.exports=function cloneArrayBuffer(i){var s=new i.constructor(i.byteLength);return new m(s).set(new m(i)),s}},64626:(i,s,u)=>{i=u.nmd(i);var m=u(55639),v=s&&!s.nodeType&&s,_=v&&i&&!i.nodeType&&i,j=_&&_.exports===v?m.Buffer:void 0,M=j?j.allocUnsafe:void 0;i.exports=function cloneBuffer(i,s){if(s)return i.slice();var u=i.length,m=M?M(u):new i.constructor(u);return i.copy(m),m}},57157:(i,s,u)=>{var m=u(74318);i.exports=function cloneDataView(i,s){var u=s?m(i.buffer):i.buffer;return new i.constructor(u,i.byteOffset,i.byteLength)}},93147:i=>{var s=/\w*$/;i.exports=function cloneRegExp(i){var u=new i.constructor(i.source,s.exec(i));return u.lastIndex=i.lastIndex,u}},40419:(i,s,u)=>{var m=u(62705),v=m?m.prototype:void 0,_=v?v.valueOf:void 0;i.exports=function cloneSymbol(i){return _?Object(_.call(i)):{}}},77133:(i,s,u)=>{var m=u(74318);i.exports=function cloneTypedArray(i,s){var u=s?m(i.buffer):i.buffer;return new i.constructor(u,i.byteOffset,i.length)}},52157:i=>{var s=Math.max;i.exports=function composeArgs(i,u,m,v){for(var _=-1,j=i.length,M=m.length,$=-1,W=u.length,X=s(j-M,0),Y=Array(W+X),Z=!v;++${var s=Math.max;i.exports=function composeArgsRight(i,u,m,v){for(var _=-1,j=i.length,M=-1,$=m.length,W=-1,X=u.length,Y=s(j-$,0),Z=Array(Y+X),ee=!v;++_{i.exports=function copyArray(i,s){var u=-1,m=i.length;for(s||(s=Array(m));++u{var m=u(34865),v=u(89465);i.exports=function copyObject(i,s,u,_){var j=!u;u||(u={});for(var M=-1,$=s.length;++M<$;){var W=s[M],X=_?_(u[W],i[W],W,u,i):void 0;void 0===X&&(X=i[W]),j?v(u,W,X):m(u,W,X)}return u}},18805:(i,s,u)=>{var m=u(98363),v=u(99551);i.exports=function copySymbols(i,s){return m(i,v(i),s)}},1911:(i,s,u)=>{var m=u(98363),v=u(51442);i.exports=function copySymbolsIn(i,s){return m(i,v(i),s)}},14429:(i,s,u)=>{var m=u(55639)["__core-js_shared__"];i.exports=m},97991:i=>{i.exports=function countHolders(i,s){for(var u=i.length,m=0;u--;)i[u]===s&&++m;return m}},21463:(i,s,u)=>{var m=u(5976),v=u(16612);i.exports=function createAssigner(i){return m((function(s,u){var m=-1,_=u.length,j=_>1?u[_-1]:void 0,M=_>2?u[2]:void 0;for(j=i.length>3&&"function"==typeof j?(_--,j):void 0,M&&v(u[0],u[1],M)&&(j=_<3?void 0:j,_=1),s=Object(s);++m<_;){var $=u[m];$&&i(s,$,m,j)}return s}))}},99291:(i,s,u)=>{var m=u(98612);i.exports=function createBaseEach(i,s){return function(u,v){if(null==u)return u;if(!m(u))return i(u,v);for(var _=u.length,j=s?_:-1,M=Object(u);(s?j--:++j<_)&&!1!==v(M[j],j,M););return u}}},25063:i=>{i.exports=function createBaseFor(i){return function(s,u,m){for(var v=-1,_=Object(s),j=m(s),M=j.length;M--;){var $=j[i?M:++v];if(!1===u(_[$],$,_))break}return s}}},22402:(i,s,u)=>{var m=u(71774),v=u(55639);i.exports=function createBind(i,s,u){var _=1&s,j=m(i);return function wrapper(){return(this&&this!==v&&this instanceof wrapper?j:i).apply(_?u:this,arguments)}}},98805:(i,s,u)=>{var m=u(40180),v=u(62689),_=u(83140),j=u(79833);i.exports=function createCaseFirst(i){return function(s){s=j(s);var u=v(s)?_(s):void 0,M=u?u[0]:s.charAt(0),$=u?m(u,1).join(""):s.slice(1);return M[i]()+$}}},35393:(i,s,u)=>{var m=u(62663),v=u(53816),_=u(58748),j=RegExp("['’]","g");i.exports=function createCompounder(i){return function(s){return m(_(v(s).replace(j,"")),i,"")}}},71774:(i,s,u)=>{var m=u(3118),v=u(13218);i.exports=function createCtor(i){return function(){var s=arguments;switch(s.length){case 0:return new i;case 1:return new i(s[0]);case 2:return new i(s[0],s[1]);case 3:return new i(s[0],s[1],s[2]);case 4:return new i(s[0],s[1],s[2],s[3]);case 5:return new i(s[0],s[1],s[2],s[3],s[4]);case 6:return new i(s[0],s[1],s[2],s[3],s[4],s[5]);case 7:return new i(s[0],s[1],s[2],s[3],s[4],s[5],s[6])}var u=m(i.prototype),_=i.apply(u,s);return v(_)?_:u}}},46347:(i,s,u)=>{var m=u(96874),v=u(71774),_=u(86935),j=u(94487),M=u(20893),$=u(46460),W=u(55639);i.exports=function createCurry(i,s,u){var X=v(i);return function wrapper(){for(var v=arguments.length,Y=Array(v),Z=v,ee=M(wrapper);Z--;)Y[Z]=arguments[Z];var ae=v<3&&Y[0]!==ee&&Y[v-1]!==ee?[]:$(Y,ee);return(v-=ae.length){var m=u(67206),v=u(98612),_=u(3674);i.exports=function createFind(i){return function(s,u,j){var M=Object(s);if(!v(s)){var $=m(u,3);s=_(s),u=function(i){return $(M[i],i,M)}}var W=i(s,u,j);return W>-1?M[$?s[W]:W]:void 0}}},86935:(i,s,u)=>{var m=u(52157),v=u(14054),_=u(97991),j=u(71774),M=u(94487),$=u(20893),W=u(90451),X=u(46460),Y=u(55639);i.exports=function createHybrid(i,s,u,Z,ee,ae,ie,le,ce,pe){var de=128&s,fe=1&s,ye=2&s,be=24&s,_e=512&s,we=ye?void 0:j(i);return function wrapper(){for(var Se=arguments.length,xe=Array(Se),Pe=Se;Pe--;)xe[Pe]=arguments[Pe];if(be)var Ie=$(wrapper),Te=_(xe,Ie);if(Z&&(xe=m(xe,Z,ee,be)),ae&&(xe=v(xe,ae,ie,be)),Se-=Te,be&&Se1&&xe.reverse(),de&&ce{var m=u(96874),v=u(71774),_=u(55639);i.exports=function createPartial(i,s,u,j){var M=1&s,$=v(i);return function wrapper(){for(var s=-1,v=arguments.length,W=-1,X=j.length,Y=Array(X+v),Z=this&&this!==_&&this instanceof wrapper?$:i;++W{var m=u(86528),v=u(258),_=u(69255);i.exports=function createRecurry(i,s,u,j,M,$,W,X,Y,Z){var ee=8&s;s|=ee?32:64,4&(s&=~(ee?64:32))||(s&=-4);var ae=[i,s,M,ee?$:void 0,ee?W:void 0,ee?void 0:$,ee?void 0:W,X,Y,Z],ie=u.apply(void 0,ae);return m(i)&&v(ie,ae),ie.placeholder=j,_(ie,i,s)}},97727:(i,s,u)=>{var m=u(28045),v=u(22402),_=u(46347),j=u(86935),M=u(84375),$=u(66833),W=u(63833),X=u(258),Y=u(69255),Z=u(40554),ee=Math.max;i.exports=function createWrap(i,s,u,ae,ie,le,ce,pe){var de=2&s;if(!de&&"function"!=typeof i)throw new TypeError("Expected a function");var fe=ae?ae.length:0;if(fe||(s&=-97,ae=ie=void 0),ce=void 0===ce?ce:ee(Z(ce),0),pe=void 0===pe?pe:Z(pe),fe-=ie?ie.length:0,64&s){var ye=ae,be=ie;ae=ie=void 0}var _e=de?void 0:$(i),we=[i,s,u,ae,ie,ye,be,le,ce,pe];if(_e&&W(we,_e),i=we[0],s=we[1],u=we[2],ae=we[3],ie=we[4],!(pe=we[9]=void 0===we[9]?de?0:i.length:ee(we[9]-fe,0))&&24&s&&(s&=-25),s&&1!=s)Se=8==s||16==s?_(i,s,pe):32!=s&&33!=s||ie.length?j.apply(void 0,we):M(i,s,u,ae);else var Se=v(i,s,u);return Y((_e?m:X)(Se,we),i,s)}},60696:(i,s,u)=>{var m=u(68630);i.exports=function customOmitClone(i){return m(i)?void 0:i}},69389:(i,s,u)=>{var m=u(18674)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});i.exports=m},38777:(i,s,u)=>{var m=u(10852),v=function(){try{var i=m(Object,"defineProperty");return i({},"",{}),i}catch(i){}}();i.exports=v},67114:(i,s,u)=>{var m=u(88668),v=u(82908),_=u(74757);i.exports=function equalArrays(i,s,u,j,M,$){var W=1&u,X=i.length,Y=s.length;if(X!=Y&&!(W&&Y>X))return!1;var Z=$.get(i),ee=$.get(s);if(Z&&ee)return Z==s&&ee==i;var ae=-1,ie=!0,le=2&u?new m:void 0;for($.set(i,s),$.set(s,i);++ae{var m=u(62705),v=u(11149),_=u(77813),j=u(67114),M=u(68776),$=u(21814),W=m?m.prototype:void 0,X=W?W.valueOf:void 0;i.exports=function equalByTag(i,s,u,m,W,Y,Z){switch(u){case"[object DataView]":if(i.byteLength!=s.byteLength||i.byteOffset!=s.byteOffset)return!1;i=i.buffer,s=s.buffer;case"[object ArrayBuffer]":return!(i.byteLength!=s.byteLength||!Y(new v(i),new v(s)));case"[object Boolean]":case"[object Date]":case"[object Number]":return _(+i,+s);case"[object Error]":return i.name==s.name&&i.message==s.message;case"[object RegExp]":case"[object String]":return i==s+"";case"[object Map]":var ee=M;case"[object Set]":var ae=1&m;if(ee||(ee=$),i.size!=s.size&&!ae)return!1;var ie=Z.get(i);if(ie)return ie==s;m|=2,Z.set(i,s);var le=j(ee(i),ee(s),m,W,Y,Z);return Z.delete(i),le;case"[object Symbol]":if(X)return X.call(i)==X.call(s)}return!1}},16096:(i,s,u)=>{var m=u(58234),v=Object.prototype.hasOwnProperty;i.exports=function equalObjects(i,s,u,_,j,M){var $=1&u,W=m(i),X=W.length;if(X!=m(s).length&&!$)return!1;for(var Y=X;Y--;){var Z=W[Y];if(!($?Z in s:v.call(s,Z)))return!1}var ee=M.get(i),ae=M.get(s);if(ee&&ae)return ee==s&&ae==i;var ie=!0;M.set(i,s),M.set(s,i);for(var le=$;++Y{var m=u(85564),v=u(45357),_=u(30061);i.exports=function flatRest(i){return _(v(i,void 0,m),i+"")}},31957:(i,s,u)=>{var m="object"==typeof u.g&&u.g&&u.g.Object===Object&&u.g;i.exports=m},58234:(i,s,u)=>{var m=u(68866),v=u(99551),_=u(3674);i.exports=function getAllKeys(i){return m(i,_,v)}},46904:(i,s,u)=>{var m=u(68866),v=u(51442),_=u(81704);i.exports=function getAllKeysIn(i){return m(i,_,v)}},66833:(i,s,u)=>{var m=u(89250),v=u(50308),_=m?function(i){return m.get(i)}:v;i.exports=_},97658:(i,s,u)=>{var m=u(52060),v=Object.prototype.hasOwnProperty;i.exports=function getFuncName(i){for(var s=i.name+"",u=m[s],_=v.call(m,s)?u.length:0;_--;){var j=u[_],M=j.func;if(null==M||M==i)return j.name}return s}},20893:i=>{i.exports=function getHolder(i){return i.placeholder}},45050:(i,s,u)=>{var m=u(37019);i.exports=function getMapData(i,s){var u=i.__data__;return m(s)?u["string"==typeof s?"string":"hash"]:u.map}},1499:(i,s,u)=>{var m=u(89162),v=u(3674);i.exports=function getMatchData(i){for(var s=v(i),u=s.length;u--;){var _=s[u],j=i[_];s[u]=[_,j,m(j)]}return s}},10852:(i,s,u)=>{var m=u(28458),v=u(47801);i.exports=function getNative(i,s){var u=v(i,s);return m(u)?u:void 0}},85924:(i,s,u)=>{var m=u(5569)(Object.getPrototypeOf,Object);i.exports=m},89607:(i,s,u)=>{var m=u(62705),v=Object.prototype,_=v.hasOwnProperty,j=v.toString,M=m?m.toStringTag:void 0;i.exports=function getRawTag(i){var s=_.call(i,M),u=i[M];try{i[M]=void 0;var m=!0}catch(i){}var v=j.call(i);return m&&(s?i[M]=u:delete i[M]),v}},99551:(i,s,u)=>{var m=u(34963),v=u(70479),_=Object.prototype.propertyIsEnumerable,j=Object.getOwnPropertySymbols,M=j?function(i){return null==i?[]:(i=Object(i),m(j(i),(function(s){return _.call(i,s)})))}:v;i.exports=M},51442:(i,s,u)=>{var m=u(62488),v=u(85924),_=u(99551),j=u(70479),M=Object.getOwnPropertySymbols?function(i){for(var s=[];i;)m(s,_(i)),i=v(i);return s}:j;i.exports=M},64160:(i,s,u)=>{var m=u(18552),v=u(57071),_=u(53818),j=u(58525),M=u(70577),$=u(44239),W=u(80346),X="[object Map]",Y="[object Promise]",Z="[object Set]",ee="[object WeakMap]",ae="[object DataView]",ie=W(m),le=W(v),ce=W(_),pe=W(j),de=W(M),fe=$;(m&&fe(new m(new ArrayBuffer(1)))!=ae||v&&fe(new v)!=X||_&&fe(_.resolve())!=Y||j&&fe(new j)!=Z||M&&fe(new M)!=ee)&&(fe=function(i){var s=$(i),u="[object Object]"==s?i.constructor:void 0,m=u?W(u):"";if(m)switch(m){case ie:return ae;case le:return X;case ce:return Y;case pe:return Z;case de:return ee}return s}),i.exports=fe},47801:i=>{i.exports=function getValue(i,s){return null==i?void 0:i[s]}},58775:i=>{var s=/\{\n\/\* \[wrapped with (.+)\] \*/,u=/,? & /;i.exports=function getWrapDetails(i){var m=i.match(s);return m?m[1].split(u):[]}},222:(i,s,u)=>{var m=u(71811),v=u(35694),_=u(1469),j=u(65776),M=u(41780),$=u(40327);i.exports=function hasPath(i,s,u){for(var W=-1,X=(s=m(s,i)).length,Y=!1;++W{var s=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");i.exports=function hasUnicode(i){return s.test(i)}},93157:i=>{var s=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;i.exports=function hasUnicodeWord(i){return s.test(i)}},51789:(i,s,u)=>{var m=u(94536);i.exports=function hashClear(){this.__data__=m?m(null):{},this.size=0}},80401:i=>{i.exports=function hashDelete(i){var s=this.has(i)&&delete this.__data__[i];return this.size-=s?1:0,s}},57667:(i,s,u)=>{var m=u(94536),v=Object.prototype.hasOwnProperty;i.exports=function hashGet(i){var s=this.__data__;if(m){var u=s[i];return"__lodash_hash_undefined__"===u?void 0:u}return v.call(s,i)?s[i]:void 0}},21327:(i,s,u)=>{var m=u(94536),v=Object.prototype.hasOwnProperty;i.exports=function hashHas(i){var s=this.__data__;return m?void 0!==s[i]:v.call(s,i)}},81866:(i,s,u)=>{var m=u(94536);i.exports=function hashSet(i,s){var u=this.__data__;return this.size+=this.has(i)?0:1,u[i]=m&&void 0===s?"__lodash_hash_undefined__":s,this}},43824:i=>{var s=Object.prototype.hasOwnProperty;i.exports=function initCloneArray(i){var u=i.length,m=new i.constructor(u);return u&&"string"==typeof i[0]&&s.call(i,"index")&&(m.index=i.index,m.input=i.input),m}},29148:(i,s,u)=>{var m=u(74318),v=u(57157),_=u(93147),j=u(40419),M=u(77133);i.exports=function initCloneByTag(i,s,u){var $=i.constructor;switch(s){case"[object ArrayBuffer]":return m(i);case"[object Boolean]":case"[object Date]":return new $(+i);case"[object DataView]":return v(i,u);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return M(i,u);case"[object Map]":case"[object Set]":return new $;case"[object Number]":case"[object String]":return new $(i);case"[object RegExp]":return _(i);case"[object Symbol]":return j(i)}}},38517:(i,s,u)=>{var m=u(3118),v=u(85924),_=u(25726);i.exports=function initCloneObject(i){return"function"!=typeof i.constructor||_(i)?{}:m(v(i))}},83112:i=>{var s=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;i.exports=function insertWrapDetails(i,u){var m=u.length;if(!m)return i;var v=m-1;return u[v]=(m>1?"& ":"")+u[v],u=u.join(m>2?", ":" "),i.replace(s,"{\n/* [wrapped with "+u+"] */\n")}},37285:(i,s,u)=>{var m=u(62705),v=u(35694),_=u(1469),j=m?m.isConcatSpreadable:void 0;i.exports=function isFlattenable(i){return _(i)||v(i)||!!(j&&i&&i[j])}},65776:i=>{var s=/^(?:0|[1-9]\d*)$/;i.exports=function isIndex(i,u){var m=typeof i;return!!(u=null==u?9007199254740991:u)&&("number"==m||"symbol"!=m&&s.test(i))&&i>-1&&i%1==0&&i{var m=u(77813),v=u(98612),_=u(65776),j=u(13218);i.exports=function isIterateeCall(i,s,u){if(!j(u))return!1;var M=typeof s;return!!("number"==M?v(u)&&_(s,u.length):"string"==M&&s in u)&&m(u[s],i)}},15403:(i,s,u)=>{var m=u(1469),v=u(33448),_=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,j=/^\w*$/;i.exports=function isKey(i,s){if(m(i))return!1;var u=typeof i;return!("number"!=u&&"symbol"!=u&&"boolean"!=u&&null!=i&&!v(i))||(j.test(i)||!_.test(i)||null!=s&&i in Object(s))}},37019:i=>{i.exports=function isKeyable(i){var s=typeof i;return"string"==s||"number"==s||"symbol"==s||"boolean"==s?"__proto__"!==i:null===i}},86528:(i,s,u)=>{var m=u(96425),v=u(66833),_=u(97658),j=u(8111);i.exports=function isLaziable(i){var s=_(i),u=j[s];if("function"!=typeof u||!(s in m.prototype))return!1;if(i===u)return!0;var M=v(u);return!!M&&i===M[0]}},15346:(i,s,u)=>{var m,v=u(14429),_=(m=/[^.]+$/.exec(v&&v.keys&&v.keys.IE_PROTO||""))?"Symbol(src)_1."+m:"";i.exports=function isMasked(i){return!!_&&_ in i}},25726:i=>{var s=Object.prototype;i.exports=function isPrototype(i){var u=i&&i.constructor;return i===("function"==typeof u&&u.prototype||s)}},89162:(i,s,u)=>{var m=u(13218);i.exports=function isStrictComparable(i){return i==i&&!m(i)}},27040:i=>{i.exports=function listCacheClear(){this.__data__=[],this.size=0}},14125:(i,s,u)=>{var m=u(18470),v=Array.prototype.splice;i.exports=function listCacheDelete(i){var s=this.__data__,u=m(s,i);return!(u<0)&&(u==s.length-1?s.pop():v.call(s,u,1),--this.size,!0)}},82117:(i,s,u)=>{var m=u(18470);i.exports=function listCacheGet(i){var s=this.__data__,u=m(s,i);return u<0?void 0:s[u][1]}},67518:(i,s,u)=>{var m=u(18470);i.exports=function listCacheHas(i){return m(this.__data__,i)>-1}},54705:(i,s,u)=>{var m=u(18470);i.exports=function listCacheSet(i,s){var u=this.__data__,v=m(u,i);return v<0?(++this.size,u.push([i,s])):u[v][1]=s,this}},24785:(i,s,u)=>{var m=u(1989),v=u(38407),_=u(57071);i.exports=function mapCacheClear(){this.size=0,this.__data__={hash:new m,map:new(_||v),string:new m}}},11285:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheDelete(i){var s=m(this,i).delete(i);return this.size-=s?1:0,s}},96e3:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheGet(i){return m(this,i).get(i)}},49916:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheHas(i){return m(this,i).has(i)}},95265:(i,s,u)=>{var m=u(45050);i.exports=function mapCacheSet(i,s){var u=m(this,i),v=u.size;return u.set(i,s),this.size+=u.size==v?0:1,this}},68776:i=>{i.exports=function mapToArray(i){var s=-1,u=Array(i.size);return i.forEach((function(i,m){u[++s]=[m,i]})),u}},42634:i=>{i.exports=function matchesStrictComparable(i,s){return function(u){return null!=u&&(u[i]===s&&(void 0!==s||i in Object(u)))}}},24523:(i,s,u)=>{var m=u(88306);i.exports=function memoizeCapped(i){var s=m(i,(function(i){return 500===u.size&&u.clear(),i})),u=s.cache;return s}},63833:(i,s,u)=>{var m=u(52157),v=u(14054),_=u(46460),j="__lodash_placeholder__",M=128,$=Math.min;i.exports=function mergeData(i,s){var u=i[1],W=s[1],X=u|W,Y=X<131,Z=W==M&&8==u||W==M&&256==u&&i[7].length<=s[8]||384==W&&s[7].length<=s[8]&&8==u;if(!Y&&!Z)return i;1&W&&(i[2]=s[2],X|=1&u?0:4);var ee=s[3];if(ee){var ae=i[3];i[3]=ae?m(ae,ee,s[4]):ee,i[4]=ae?_(i[3],j):s[4]}return(ee=s[5])&&(ae=i[5],i[5]=ae?v(ae,ee,s[6]):ee,i[6]=ae?_(i[5],j):s[6]),(ee=s[7])&&(i[7]=ee),W&M&&(i[8]=null==i[8]?s[8]:$(i[8],s[8])),null==i[9]&&(i[9]=s[9]),i[0]=s[0],i[1]=X,i}},89250:(i,s,u)=>{var m=u(70577),v=m&&new m;i.exports=v},94536:(i,s,u)=>{var m=u(10852)(Object,"create");i.exports=m},86916:(i,s,u)=>{var m=u(5569)(Object.keys,Object);i.exports=m},33498:i=>{i.exports=function nativeKeysIn(i){var s=[];if(null!=i)for(var u in Object(i))s.push(u);return s}},31167:(i,s,u)=>{i=u.nmd(i);var m=u(31957),v=s&&!s.nodeType&&s,_=v&&i&&!i.nodeType&&i,j=_&&_.exports===v&&m.process,M=function(){try{var i=_&&_.require&&_.require("util").types;return i||j&&j.binding&&j.binding("util")}catch(i){}}();i.exports=M},2333:i=>{var s=Object.prototype.toString;i.exports=function objectToString(i){return s.call(i)}},5569:i=>{i.exports=function overArg(i,s){return function(u){return i(s(u))}}},45357:(i,s,u)=>{var m=u(96874),v=Math.max;i.exports=function overRest(i,s,u){return s=v(void 0===s?i.length-1:s,0),function(){for(var _=arguments,j=-1,M=v(_.length-s,0),$=Array(M);++j{var m=u(97786),v=u(14259);i.exports=function parent(i,s){return s.length<2?i:m(i,v(s,0,-1))}},52060:i=>{i.exports={}},90451:(i,s,u)=>{var m=u(278),v=u(65776),_=Math.min;i.exports=function reorder(i,s){for(var u=i.length,j=_(s.length,u),M=m(i);j--;){var $=s[j];i[j]=v($,u)?M[$]:void 0}return i}},46460:i=>{var s="__lodash_placeholder__";i.exports=function replaceHolders(i,u){for(var m=-1,v=i.length,_=0,j=[];++m{var m=u(31957),v="object"==typeof self&&self&&self.Object===Object&&self,_=m||v||Function("return this")();i.exports=_},36390:i=>{i.exports=function safeGet(i,s){if(("constructor"!==s||"function"!=typeof i[s])&&"__proto__"!=s)return i[s]}},90619:i=>{i.exports=function setCacheAdd(i){return this.__data__.set(i,"__lodash_hash_undefined__"),this}},72385:i=>{i.exports=function setCacheHas(i){return this.__data__.has(i)}},258:(i,s,u)=>{var m=u(28045),v=u(21275)(m);i.exports=v},21814:i=>{i.exports=function setToArray(i){var s=-1,u=Array(i.size);return i.forEach((function(i){u[++s]=i})),u}},30061:(i,s,u)=>{var m=u(56560),v=u(21275)(m);i.exports=v},69255:(i,s,u)=>{var m=u(58775),v=u(83112),_=u(30061),j=u(87241);i.exports=function setWrapToString(i,s,u){var M=s+"";return _(i,v(M,j(m(M),u)))}},21275:i=>{var s=Date.now;i.exports=function shortOut(i){var u=0,m=0;return function(){var v=s(),_=16-(v-m);if(m=v,_>0){if(++u>=800)return arguments[0]}else u=0;return i.apply(void 0,arguments)}}},37465:(i,s,u)=>{var m=u(38407);i.exports=function stackClear(){this.__data__=new m,this.size=0}},63779:i=>{i.exports=function stackDelete(i){var s=this.__data__,u=s.delete(i);return this.size=s.size,u}},67599:i=>{i.exports=function stackGet(i){return this.__data__.get(i)}},44758:i=>{i.exports=function stackHas(i){return this.__data__.has(i)}},34309:(i,s,u)=>{var m=u(38407),v=u(57071),_=u(83369);i.exports=function stackSet(i,s){var u=this.__data__;if(u instanceof m){var j=u.__data__;if(!v||j.length<199)return j.push([i,s]),this.size=++u.size,this;u=this.__data__=new _(j)}return u.set(i,s),this.size=u.size,this}},42351:i=>{i.exports=function strictIndexOf(i,s,u){for(var m=u-1,v=i.length;++m{var m=u(44286),v=u(62689),_=u(676);i.exports=function stringToArray(i){return v(i)?_(i):m(i)}},55514:(i,s,u)=>{var m=u(24523),v=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,_=/\\(\\)?/g,j=m((function(i){var s=[];return 46===i.charCodeAt(0)&&s.push(""),i.replace(v,(function(i,u,m,v){s.push(m?v.replace(_,"$1"):u||i)})),s}));i.exports=j},40327:(i,s,u)=>{var m=u(33448);i.exports=function toKey(i){if("string"==typeof i||m(i))return i;var s=i+"";return"0"==s&&1/i==-Infinity?"-0":s}},80346:i=>{var s=Function.prototype.toString;i.exports=function toSource(i){if(null!=i){try{return s.call(i)}catch(i){}try{return i+""}catch(i){}}return""}},67990:i=>{var s=/\s/;i.exports=function trimmedEndIndex(i){for(var u=i.length;u--&&s.test(i.charAt(u)););return u}},676:i=>{var s="\\ud800-\\udfff",u="["+s+"]",m="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",v="\\ud83c[\\udffb-\\udfff]",_="[^"+s+"]",j="(?:\\ud83c[\\udde6-\\uddff]){2}",M="[\\ud800-\\udbff][\\udc00-\\udfff]",$="(?:"+m+"|"+v+")"+"?",W="[\\ufe0e\\ufe0f]?",X=W+$+("(?:\\u200d(?:"+[_,j,M].join("|")+")"+W+$+")*"),Y="(?:"+[_+m+"?",m,j,M,u].join("|")+")",Z=RegExp(v+"(?="+v+")|"+Y+X,"g");i.exports=function unicodeToArray(i){return i.match(Z)||[]}},2757:i=>{var s="\\ud800-\\udfff",u="\\u2700-\\u27bf",m="a-z\\xdf-\\xf6\\xf8-\\xff",v="A-Z\\xc0-\\xd6\\xd8-\\xde",_="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",j="["+_+"]",M="\\d+",$="["+u+"]",W="["+m+"]",X="[^"+s+_+M+u+m+v+"]",Y="(?:\\ud83c[\\udde6-\\uddff]){2}",Z="[\\ud800-\\udbff][\\udc00-\\udfff]",ee="["+v+"]",ae="(?:"+W+"|"+X+")",ie="(?:"+ee+"|"+X+")",le="(?:['’](?:d|ll|m|re|s|t|ve))?",ce="(?:['’](?:D|LL|M|RE|S|T|VE))?",pe="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",de="[\\ufe0e\\ufe0f]?",fe=de+pe+("(?:\\u200d(?:"+["[^"+s+"]",Y,Z].join("|")+")"+de+pe+")*"),ye="(?:"+[$,Y,Z].join("|")+")"+fe,be=RegExp([ee+"?"+W+"+"+le+"(?="+[j,ee,"$"].join("|")+")",ie+"+"+ce+"(?="+[j,ee+ae,"$"].join("|")+")",ee+"?"+ae+"+"+le,ee+"+"+ce,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",M,ye].join("|"),"g");i.exports=function unicodeWords(i){return i.match(be)||[]}},87241:(i,s,u)=>{var m=u(77412),v=u(47443),_=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];i.exports=function updateWrapDetails(i,s){return m(_,(function(u){var m="_."+u[0];s&u[1]&&!v(i,m)&&i.push(m)})),i.sort()}},21913:(i,s,u)=>{var m=u(96425),v=u(7548),_=u(278);i.exports=function wrapperClone(i){if(i instanceof m)return i.clone();var s=new v(i.__wrapped__,i.__chain__);return s.__actions__=_(i.__actions__),s.__index__=i.__index__,s.__values__=i.__values__,s}},39514:(i,s,u)=>{var m=u(97727);i.exports=function ary(i,s,u){return s=u?void 0:s,s=i&&null==s?i.length:s,m(i,128,void 0,void 0,void 0,void 0,s)}},68929:(i,s,u)=>{var m=u(48403),v=u(35393)((function(i,s,u){return s=s.toLowerCase(),i+(u?m(s):s)}));i.exports=v},48403:(i,s,u)=>{var m=u(79833),v=u(11700);i.exports=function capitalize(i){return v(m(i).toLowerCase())}},66678:(i,s,u)=>{var m=u(85990);i.exports=function clone(i){return m(i,4)}},75703:i=>{i.exports=function constant(i){return function(){return i}}},40087:(i,s,u)=>{var m=u(97727);function curry(i,s,u){var v=m(i,8,void 0,void 0,void 0,void 0,void 0,s=u?void 0:s);return v.placeholder=curry.placeholder,v}curry.placeholder={},i.exports=curry},23279:(i,s,u)=>{var m=u(13218),v=u(7771),_=u(14841),j=Math.max,M=Math.min;i.exports=function debounce(i,s,u){var $,W,X,Y,Z,ee,ae=0,ie=!1,le=!1,ce=!0;if("function"!=typeof i)throw new TypeError("Expected a function");function invokeFunc(s){var u=$,m=W;return $=W=void 0,ae=s,Y=i.apply(m,u)}function shouldInvoke(i){var u=i-ee;return void 0===ee||u>=s||u<0||le&&i-ae>=X}function timerExpired(){var i=v();if(shouldInvoke(i))return trailingEdge(i);Z=setTimeout(timerExpired,function remainingWait(i){var u=s-(i-ee);return le?M(u,X-(i-ae)):u}(i))}function trailingEdge(i){return Z=void 0,ce&&$?invokeFunc(i):($=W=void 0,Y)}function debounced(){var i=v(),u=shouldInvoke(i);if($=arguments,W=this,ee=i,u){if(void 0===Z)return function leadingEdge(i){return ae=i,Z=setTimeout(timerExpired,s),ie?invokeFunc(i):Y}(ee);if(le)return clearTimeout(Z),Z=setTimeout(timerExpired,s),invokeFunc(ee)}return void 0===Z&&(Z=setTimeout(timerExpired,s)),Y}return s=_(s)||0,m(u)&&(ie=!!u.leading,X=(le="maxWait"in u)?j(_(u.maxWait)||0,s):X,ce="trailing"in u?!!u.trailing:ce),debounced.cancel=function cancel(){void 0!==Z&&clearTimeout(Z),ae=0,$=ee=W=Z=void 0},debounced.flush=function flush(){return void 0===Z?Y:trailingEdge(v())},debounced}},53816:(i,s,u)=>{var m=u(69389),v=u(79833),_=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,j=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");i.exports=function deburr(i){return(i=v(i))&&i.replace(_,m).replace(j,"")}},77813:i=>{i.exports=function eq(i,s){return i===s||i!=i&&s!=s}},13311:(i,s,u)=>{var m=u(67740)(u(30998));i.exports=m},30998:(i,s,u)=>{var m=u(41848),v=u(67206),_=u(40554),j=Math.max;i.exports=function findIndex(i,s,u){var M=null==i?0:i.length;if(!M)return-1;var $=null==u?0:_(u);return $<0&&($=j(M+$,0)),m(i,v(s,3),$)}},85564:(i,s,u)=>{var m=u(21078);i.exports=function flatten(i){return(null==i?0:i.length)?m(i,1):[]}},84599:(i,s,u)=>{var m=u(68836),v=u(69306),_=Array.prototype.push;function baseAry(i,s){return 2==s?function(s,u){return i(s,u)}:function(s){return i(s)}}function cloneArray(i){for(var s=i?i.length:0,u=Array(s);s--;)u[s]=i[s];return u}function wrapImmutable(i,s){return function(){var u=arguments.length;if(u){for(var m=Array(u);u--;)m[u]=arguments[u];var v=m[0]=s.apply(void 0,m);return i.apply(void 0,m),v}}}i.exports=function baseConvert(i,s,u,j){var M="function"==typeof s,$=s===Object(s);if($&&(j=u,u=s,s=void 0),null==u)throw new TypeError;j||(j={});var W={cap:!("cap"in j)||j.cap,curry:!("curry"in j)||j.curry,fixed:!("fixed"in j)||j.fixed,immutable:!("immutable"in j)||j.immutable,rearg:!("rearg"in j)||j.rearg},X=M?u:v,Y="curry"in j&&j.curry,Z="fixed"in j&&j.fixed,ee="rearg"in j&&j.rearg,ae=M?u.runInContext():void 0,ie=M?u:{ary:i.ary,assign:i.assign,clone:i.clone,curry:i.curry,forEach:i.forEach,isArray:i.isArray,isError:i.isError,isFunction:i.isFunction,isWeakMap:i.isWeakMap,iteratee:i.iteratee,keys:i.keys,rearg:i.rearg,toInteger:i.toInteger,toPath:i.toPath},le=ie.ary,ce=ie.assign,pe=ie.clone,de=ie.curry,fe=ie.forEach,ye=ie.isArray,be=ie.isError,_e=ie.isFunction,we=ie.isWeakMap,Se=ie.keys,xe=ie.rearg,Pe=ie.toInteger,Ie=ie.toPath,Te=Se(m.aryMethod),Re={castArray:function(i){return function(){var s=arguments[0];return ye(s)?i(cloneArray(s)):i.apply(void 0,arguments)}},iteratee:function(i){return function(){var s=arguments[1],u=i(arguments[0],s),m=u.length;return W.cap&&"number"==typeof s?(s=s>2?s-2:1,m&&m<=s?u:baseAry(u,s)):u}},mixin:function(i){return function(s){var u=this;if(!_e(u))return i(u,Object(s));var m=[];return fe(Se(s),(function(i){_e(s[i])&&m.push([i,u.prototype[i]])})),i(u,Object(s)),fe(m,(function(i){var s=i[1];_e(s)?u.prototype[i[0]]=s:delete u.prototype[i[0]]})),u}},nthArg:function(i){return function(s){var u=s<0?1:Pe(s)+1;return de(i(s),u)}},rearg:function(i){return function(s,u){var m=u?u.length:0;return de(i(s,u),m)}},runInContext:function(s){return function(u){return baseConvert(i,s(u),j)}}};function castCap(i,s){if(W.cap){var u=m.iterateeRearg[i];if(u)return function iterateeRearg(i,s){return overArg(i,(function(i){var u=s.length;return function baseArity(i,s){return 2==s?function(s,u){return i.apply(void 0,arguments)}:function(s){return i.apply(void 0,arguments)}}(xe(baseAry(i,u),s),u)}))}(s,u);var v=!M&&m.iterateeAry[i];if(v)return function iterateeAry(i,s){return overArg(i,(function(i){return"function"==typeof i?baseAry(i,s):i}))}(s,v)}return s}function castFixed(i,s,u){if(W.fixed&&(Z||!m.skipFixed[i])){var v=m.methodSpread[i],j=v&&v.start;return void 0===j?le(s,u):function flatSpread(i,s){return function(){for(var u=arguments.length,m=u-1,v=Array(u);u--;)v[u]=arguments[u];var j=v[s],M=v.slice(0,s);return j&&_.apply(M,j),s!=m&&_.apply(M,v.slice(s+1)),i.apply(this,M)}}(s,j)}return s}function castRearg(i,s,u){return W.rearg&&u>1&&(ee||!m.skipRearg[i])?xe(s,m.methodRearg[i]||m.aryRearg[u]):s}function cloneByPath(i,s){for(var u=-1,m=(s=Ie(s)).length,v=m-1,_=pe(Object(i)),j=_;null!=j&&++u1?de(s,u):s}(0,v=castCap(_,v),i),!1}})),!v})),v||(v=j),v==s&&(v=Y?de(v,1):function(){return s.apply(this,arguments)}),v.convert=createConverter(_,s),v.placeholder=s.placeholder=u,v}if(!$)return wrap(s,u,X);var qe=u,ze=[];return fe(Te,(function(i){fe(m.aryMethod[i],(function(i){var s=qe[m.remap[i]||i];s&&ze.push([i,wrap(i,s,qe)])}))})),fe(Se(qe),(function(i){var s=qe[i];if("function"==typeof s){for(var u=ze.length;u--;)if(ze[u][0]==i)return;s.convert=createConverter(i,s),ze.push([i,s])}})),fe(ze,(function(i){qe[i[0]]=i[1]})),qe.convert=function convertLib(i){return qe.runInContext.convert(i)(void 0)},qe.placeholder=qe,fe(Se(qe),(function(i){fe(m.realToAlias[i]||[],(function(s){qe[s]=qe[i]}))})),qe}},68836:(i,s)=>{s.aliasToReal={each:"forEach",eachRight:"forEachRight",entries:"toPairs",entriesIn:"toPairsIn",extend:"assignIn",extendAll:"assignInAll",extendAllWith:"assignInAllWith",extendWith:"assignInWith",first:"head",conforms:"conformsTo",matches:"isMatch",property:"get",__:"placeholder",F:"stubFalse",T:"stubTrue",all:"every",allPass:"overEvery",always:"constant",any:"some",anyPass:"overSome",apply:"spread",assoc:"set",assocPath:"set",complement:"negate",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",dropLast:"dropRight",dropLastWhile:"dropRightWhile",equals:"isEqual",identical:"eq",indexBy:"keyBy",init:"initial",invertObj:"invert",juxt:"over",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",paths:"at",pickAll:"pick",pipe:"flow",pluck:"map",prop:"get",propEq:"matchesProperty",propOr:"getOr",props:"at",symmetricDifference:"xor",symmetricDifferenceBy:"xorBy",symmetricDifferenceWith:"xorWith",takeLast:"takeRight",takeLastWhile:"takeRightWhile",unapply:"rest",unnest:"flatten",useWith:"overArgs",where:"conformsTo",whereEq:"isMatch",zipObj:"zipObject"},s.aryMethod={1:["assignAll","assignInAll","attempt","castArray","ceil","create","curry","curryRight","defaultsAll","defaultsDeepAll","floor","flow","flowRight","fromPairs","invert","iteratee","memoize","method","mergeAll","methodOf","mixin","nthArg","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words","zipAll"],2:["add","after","ary","assign","assignAllWith","assignIn","assignInAllWith","at","before","bind","bindAll","bindKey","chunk","cloneDeepWith","cloneWith","concat","conformsTo","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","defaultTo","delay","difference","divide","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","flatMapDeep","flattenDepth","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","meanBy","merge","mergeAllWith","minBy","multiply","nth","omit","omitBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","propertyOf","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","restFrom","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","spreadFrom","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","trimChars","trimCharsEnd","trimCharsStart","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","getOr","includesFrom","indexOfFrom","inRange","intersectionBy","intersectionWith","invokeArgs","invokeArgsMap","isEqualWith","isMatchWith","flatMapDepth","lastIndexOfFrom","mergeWith","orderBy","padChars","padCharsEnd","padCharsStart","pullAllBy","pullAllWith","rangeStep","rangeStepRight","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","update","xorBy","xorWith","zipWith"],4:["fill","setWith","updateWith"]},s.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]},s.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},s.iterateeRearg={mapKeys:[1],reduceRight:[1,0]},s.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]},s.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}},s.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}},s.realToAlias=function(){var i=Object.prototype.hasOwnProperty,u=s.aliasToReal,m={};for(var v in u){var _=u[v];i.call(m,_)?m[_].push(v):m[_]=[v]}return m}(),s.remap={assignAll:"assign",assignAllWith:"assignWith",assignInAll:"assignIn",assignInAllWith:"assignInWith",curryN:"curry",curryRightN:"curryRight",defaultsAll:"defaults",defaultsDeepAll:"defaultsDeep",findFrom:"find",findIndexFrom:"findIndex",findLastFrom:"findLast",findLastIndexFrom:"findLastIndex",getOr:"get",includesFrom:"includes",indexOfFrom:"indexOf",invokeArgs:"invoke",invokeArgsMap:"invokeMap",lastIndexOfFrom:"lastIndexOf",mergeAll:"merge",mergeAllWith:"mergeWith",padChars:"pad",padCharsEnd:"padEnd",padCharsStart:"padStart",propertyOf:"get",rangeStep:"range",rangeStepRight:"rangeRight",restFrom:"rest",spreadFrom:"spread",trimChars:"trim",trimCharsEnd:"trimEnd",trimCharsStart:"trimStart",zipAll:"zip"},s.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0},s.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}},4269:(i,s,u)=>{i.exports={ary:u(39514),assign:u(44037),clone:u(66678),curry:u(40087),forEach:u(77412),isArray:u(1469),isError:u(64647),isFunction:u(23560),isWeakMap:u(81018),iteratee:u(72594),keys:u(280),rearg:u(4963),toInteger:u(40554),toPath:u(30084)}},72700:(i,s,u)=>{i.exports=u(28252)},92822:(i,s,u)=>{var m=u(84599),v=u(4269);i.exports=function convert(i,s,u){return m(v,i,s,u)}},69306:i=>{i.exports={}},28252:(i,s,u)=>{var m=u(92822)("set",u(36968));m.placeholder=u(69306),i.exports=m},27361:(i,s,u)=>{var m=u(97786);i.exports=function get(i,s,u){var v=null==i?void 0:m(i,s);return void 0===v?u:v}},79095:(i,s,u)=>{var m=u(13),v=u(222);i.exports=function hasIn(i,s){return null!=i&&v(i,s,m)}},6557:i=>{i.exports=function identity(i){return i}},35694:(i,s,u)=>{var m=u(9454),v=u(37005),_=Object.prototype,j=_.hasOwnProperty,M=_.propertyIsEnumerable,$=m(function(){return arguments}())?m:function(i){return v(i)&&j.call(i,"callee")&&!M.call(i,"callee")};i.exports=$},1469:i=>{var s=Array.isArray;i.exports=s},98612:(i,s,u)=>{var m=u(23560),v=u(41780);i.exports=function isArrayLike(i){return null!=i&&v(i.length)&&!m(i)}},29246:(i,s,u)=>{var m=u(98612),v=u(37005);i.exports=function isArrayLikeObject(i){return v(i)&&m(i)}},51584:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isBoolean(i){return!0===i||!1===i||v(i)&&"[object Boolean]"==m(i)}},44144:(i,s,u)=>{i=u.nmd(i);var m=u(55639),v=u(95062),_=s&&!s.nodeType&&s,j=_&&i&&!i.nodeType&&i,M=j&&j.exports===_?m.Buffer:void 0,$=(M?M.isBuffer:void 0)||v;i.exports=$},41609:(i,s,u)=>{var m=u(280),v=u(64160),_=u(35694),j=u(1469),M=u(98612),$=u(44144),W=u(25726),X=u(36719),Y=Object.prototype.hasOwnProperty;i.exports=function isEmpty(i){if(null==i)return!0;if(M(i)&&(j(i)||"string"==typeof i||"function"==typeof i.splice||$(i)||X(i)||_(i)))return!i.length;var s=v(i);if("[object Map]"==s||"[object Set]"==s)return!i.size;if(W(i))return!m(i).length;for(var u in i)if(Y.call(i,u))return!1;return!0}},18446:(i,s,u)=>{var m=u(90939);i.exports=function isEqual(i,s){return m(i,s)}},64647:(i,s,u)=>{var m=u(44239),v=u(37005),_=u(68630);i.exports=function isError(i){if(!v(i))return!1;var s=m(i);return"[object Error]"==s||"[object DOMException]"==s||"string"==typeof i.message&&"string"==typeof i.name&&!_(i)}},23560:(i,s,u)=>{var m=u(44239),v=u(13218);i.exports=function isFunction(i){if(!v(i))return!1;var s=m(i);return"[object Function]"==s||"[object GeneratorFunction]"==s||"[object AsyncFunction]"==s||"[object Proxy]"==s}},41780:i=>{i.exports=function isLength(i){return"number"==typeof i&&i>-1&&i%1==0&&i<=9007199254740991}},56688:(i,s,u)=>{var m=u(25588),v=u(7518),_=u(31167),j=_&&_.isMap,M=j?v(j):m;i.exports=M},45220:i=>{i.exports=function isNull(i){return null===i}},81763:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isNumber(i){return"number"==typeof i||v(i)&&"[object Number]"==m(i)}},13218:i=>{i.exports=function isObject(i){var s=typeof i;return null!=i&&("object"==s||"function"==s)}},37005:i=>{i.exports=function isObjectLike(i){return null!=i&&"object"==typeof i}},68630:(i,s,u)=>{var m=u(44239),v=u(85924),_=u(37005),j=Function.prototype,M=Object.prototype,$=j.toString,W=M.hasOwnProperty,X=$.call(Object);i.exports=function isPlainObject(i){if(!_(i)||"[object Object]"!=m(i))return!1;var s=v(i);if(null===s)return!0;var u=W.call(s,"constructor")&&s.constructor;return"function"==typeof u&&u instanceof u&&$.call(u)==X}},72928:(i,s,u)=>{var m=u(29221),v=u(7518),_=u(31167),j=_&&_.isSet,M=j?v(j):m;i.exports=M},47037:(i,s,u)=>{var m=u(44239),v=u(1469),_=u(37005);i.exports=function isString(i){return"string"==typeof i||!v(i)&&_(i)&&"[object String]"==m(i)}},33448:(i,s,u)=>{var m=u(44239),v=u(37005);i.exports=function isSymbol(i){return"symbol"==typeof i||v(i)&&"[object Symbol]"==m(i)}},36719:(i,s,u)=>{var m=u(38749),v=u(7518),_=u(31167),j=_&&_.isTypedArray,M=j?v(j):m;i.exports=M},81018:(i,s,u)=>{var m=u(64160),v=u(37005);i.exports=function isWeakMap(i){return v(i)&&"[object WeakMap]"==m(i)}},72594:(i,s,u)=>{var m=u(85990),v=u(67206);i.exports=function iteratee(i){return v("function"==typeof i?i:m(i,1))}},3674:(i,s,u)=>{var m=u(14636),v=u(280),_=u(98612);i.exports=function keys(i){return _(i)?m(i):v(i)}},81704:(i,s,u)=>{var m=u(14636),v=u(10313),_=u(98612);i.exports=function keysIn(i){return _(i)?m(i,!0):v(i)}},10928:i=>{i.exports=function last(i){var s=null==i?0:i.length;return s?i[s-1]:void 0}},88306:(i,s,u)=>{var m=u(83369);function memoize(i,s){if("function"!=typeof i||null!=s&&"function"!=typeof s)throw new TypeError("Expected a function");var memoized=function(){var u=arguments,m=s?s.apply(this,u):u[0],v=memoized.cache;if(v.has(m))return v.get(m);var _=i.apply(this,u);return memoized.cache=v.set(m,_)||v,_};return memoized.cache=new(memoize.Cache||m),memoized}memoize.Cache=m,i.exports=memoize},82492:(i,s,u)=>{var m=u(42980),v=u(21463)((function(i,s,u){m(i,s,u)}));i.exports=v},94885:i=>{i.exports=function negate(i){if("function"!=typeof i)throw new TypeError("Expected a function");return function(){var s=arguments;switch(s.length){case 0:return!i.call(this);case 1:return!i.call(this,s[0]);case 2:return!i.call(this,s[0],s[1]);case 3:return!i.call(this,s[0],s[1],s[2])}return!i.apply(this,s)}}},50308:i=>{i.exports=function noop(){}},7771:(i,s,u)=>{var m=u(55639);i.exports=function(){return m.Date.now()}},57557:(i,s,u)=>{var m=u(29932),v=u(85990),_=u(57406),j=u(71811),M=u(98363),$=u(60696),W=u(99021),X=u(46904),Y=W((function(i,s){var u={};if(null==i)return u;var W=!1;s=m(s,(function(s){return s=j(s,i),W||(W=s.length>1),s})),M(i,X(i),u),W&&(u=v(u,7,$));for(var Y=s.length;Y--;)_(u,s[Y]);return u}));i.exports=Y},39601:(i,s,u)=>{var m=u(40371),v=u(79152),_=u(15403),j=u(40327);i.exports=function property(i){return _(i)?m(j(i)):v(i)}},4963:(i,s,u)=>{var m=u(97727),v=u(99021),_=v((function(i,s){return m(i,256,void 0,void 0,void 0,s)}));i.exports=_},54061:(i,s,u)=>{var m=u(62663),v=u(89881),_=u(67206),j=u(10107),M=u(1469);i.exports=function reduce(i,s,u){var $=M(i)?m:j,W=arguments.length<3;return $(i,_(s,4),u,W,v)}},36968:(i,s,u)=>{var m=u(10611);i.exports=function set(i,s,u){return null==i?i:m(i,s,u)}},59704:(i,s,u)=>{var m=u(82908),v=u(67206),_=u(5076),j=u(1469),M=u(16612);i.exports=function some(i,s,u){var $=j(i)?m:_;return u&&M(i,s,u)&&(s=void 0),$(i,v(s,3))}},70479:i=>{i.exports=function stubArray(){return[]}},95062:i=>{i.exports=function stubFalse(){return!1}},18601:(i,s,u)=>{var m=u(14841),v=1/0;i.exports=function toFinite(i){return i?(i=m(i))===v||i===-1/0?17976931348623157e292*(i<0?-1:1):i==i?i:0:0===i?i:0}},40554:(i,s,u)=>{var m=u(18601);i.exports=function toInteger(i){var s=m(i),u=s%1;return s==s?u?s-u:s:0}},7334:(i,s,u)=>{var m=u(79833);i.exports=function toLower(i){return m(i).toLowerCase()}},14841:(i,s,u)=>{var m=u(27561),v=u(13218),_=u(33448),j=/^[-+]0x[0-9a-f]+$/i,M=/^0b[01]+$/i,$=/^0o[0-7]+$/i,W=parseInt;i.exports=function toNumber(i){if("number"==typeof i)return i;if(_(i))return NaN;if(v(i)){var s="function"==typeof i.valueOf?i.valueOf():i;i=v(s)?s+"":s}if("string"!=typeof i)return 0===i?i:+i;i=m(i);var u=M.test(i);return u||$.test(i)?W(i.slice(2),u?2:8):j.test(i)?NaN:+i}},30084:(i,s,u)=>{var m=u(29932),v=u(278),_=u(1469),j=u(33448),M=u(55514),$=u(40327),W=u(79833);i.exports=function toPath(i){return _(i)?m(i,$):j(i)?[i]:v(M(W(i)))}},59881:(i,s,u)=>{var m=u(98363),v=u(81704);i.exports=function toPlainObject(i){return m(i,v(i))}},79833:(i,s,u)=>{var m=u(80531);i.exports=function toString(i){return null==i?"":m(i)}},11700:(i,s,u)=>{var m=u(98805)("toUpperCase");i.exports=m},58748:(i,s,u)=>{var m=u(49029),v=u(93157),_=u(79833),j=u(2757);i.exports=function words(i,s,u){return i=_(i),void 0===(s=u?void 0:s)?v(i)?j(i):m(i):i.match(s)||[]}},8111:(i,s,u)=>{var m=u(96425),v=u(7548),_=u(9435),j=u(1469),M=u(37005),$=u(21913),W=Object.prototype.hasOwnProperty;function lodash(i){if(M(i)&&!j(i)&&!(i instanceof m)){if(i instanceof v)return i;if(W.call(i,"__wrapped__"))return $(i)}return new v(i)}lodash.prototype=_.prototype,lodash.prototype.constructor=lodash,i.exports=lodash},7287:(i,s,u)=>{var m=u(34865),v=u(1757);i.exports=function zipObject(i,s){return v(i||[],s||[],m)}},96470:(i,s,u)=>{"use strict";var m=u(47802),v=u(21102);s.highlight=highlight,s.highlightAuto=function highlightAuto(i,s){var u,j,M,$,W=s||{},X=W.subset||m.listLanguages(),Y=W.prefix,Z=X.length,ee=-1;null==Y&&(Y=_);if("string"!=typeof i)throw v("Expected `string` for value, got `%s`",i);j={relevance:0,language:null,value:[]},u={relevance:0,language:null,value:[]};for(;++eej.relevance&&(j=M),M.relevance>u.relevance&&(j=u,u=M));j.language&&(u.secondBest=j);return u},s.registerLanguage=function registerLanguage(i,s){m.registerLanguage(i,s)},s.listLanguages=function listLanguages(){return m.listLanguages()},s.registerAlias=function registerAlias(i,s){var u,v=i;s&&((v={})[i]=s);for(u in v)m.registerAliases(v[u],{languageName:u})},Emitter.prototype.addText=function text(i){var s,u,m=this.stack;if(""===i)return;s=m[m.length-1],(u=s.children[s.children.length-1])&&"text"===u.type?u.value+=i:s.children.push({type:"text",value:i})},Emitter.prototype.addKeyword=function addKeyword(i,s){this.openNode(s),this.addText(i),this.closeNode()},Emitter.prototype.addSublanguage=function addSublanguage(i,s){var u=this.stack,m=u[u.length-1],v=i.rootNode.children,_=s?{type:"element",tagName:"span",properties:{className:[s]},children:v}:v;m.children=m.children.concat(_)},Emitter.prototype.openNode=function open(i){var s=this.stack,u=this.options.classPrefix+i,m=s[s.length-1],v={type:"element",tagName:"span",properties:{className:[u]},children:[]};m.children.push(v),s.push(v)},Emitter.prototype.closeNode=function close(){this.stack.pop()},Emitter.prototype.closeAllNodes=noop,Emitter.prototype.finalize=noop,Emitter.prototype.toHTML=function toHtmlNoop(){return""};var _="hljs-";function highlight(i,s,u){var j,M=m.configure({}),$=(u||{}).prefix;if("string"!=typeof i)throw v("Expected `string` for name, got `%s`",i);if(!m.getLanguage(i))throw v("Unknown language: `%s` is not registered",i);if("string"!=typeof s)throw v("Expected `string` for value, got `%s`",s);if(null==$&&($=_),m.configure({__emitter:Emitter,classPrefix:$}),j=m.highlight(s,{language:i,ignoreIllegals:!0}),m.configure(M||{}),j.errorRaised)throw j.errorRaised;return{relevance:j.relevance,language:j.language,value:j.emitter.rootNode.children}}function Emitter(i){this.options=i,this.rootNode={children:[]},this.stack=[this.rootNode]}function noop(){}},42566:(i,s,u)=>{const m=u(94885);function coerceElementMatchingCallback(i){return"string"==typeof i?s=>s.element===i:i.constructor&&i.extend?s=>s instanceof i:i}class ArraySlice{constructor(i){this.elements=i||[]}toValue(){return this.elements.map((i=>i.toValue()))}map(i,s){return this.elements.map(i,s)}flatMap(i,s){return this.map(i,s).reduce(((i,s)=>i.concat(s)),[])}compactMap(i,s){const u=[];return this.forEach((m=>{const v=i.bind(s)(m);v&&u.push(v)})),u}filter(i,s){return i=coerceElementMatchingCallback(i),new ArraySlice(this.elements.filter(i,s))}reject(i,s){return i=coerceElementMatchingCallback(i),new ArraySlice(this.elements.filter(m(i),s))}find(i,s){return i=coerceElementMatchingCallback(i),this.elements.find(i,s)}forEach(i,s){this.elements.forEach(i,s)}reduce(i,s){return this.elements.reduce(i,s)}includes(i){return this.elements.some((s=>s.equals(i)))}shift(){return this.elements.shift()}unshift(i){this.elements.unshift(this.refract(i))}push(i){return this.elements.push(this.refract(i)),this}add(i){this.push(i)}get(i){return this.elements[i]}getValue(i){const s=this.elements[i];if(s)return s.toValue()}get length(){return this.elements.length}get isEmpty(){return 0===this.elements.length}get first(){return this.elements[0]}}"undefined"!=typeof Symbol&&(ArraySlice.prototype[Symbol.iterator]=function symbol(){return this.elements[Symbol.iterator]()}),i.exports=ArraySlice},17645:i=>{class KeyValuePair{constructor(i,s){this.key=i,this.value=s}clone(){const i=new KeyValuePair;return this.key&&(i.key=this.key.clone()),this.value&&(i.value=this.value.clone()),i}}i.exports=KeyValuePair},78520:(i,s,u)=>{const m=u(45220),v=u(47037),_=u(81763),j=u(51584),M=u(13218),$=u(28219),W=u(99829);class Namespace{constructor(i){this.elementMap={},this.elementDetection=[],this.Element=W.Element,this.KeyValuePair=W.KeyValuePair,i&&i.noDefault||this.useDefault(),this._attributeElementKeys=[],this._attributeElementArrayKeys=[]}use(i){return i.namespace&&i.namespace({base:this}),i.load&&i.load({base:this}),this}useDefault(){return this.register("null",W.NullElement).register("string",W.StringElement).register("number",W.NumberElement).register("boolean",W.BooleanElement).register("array",W.ArrayElement).register("object",W.ObjectElement).register("member",W.MemberElement).register("ref",W.RefElement).register("link",W.LinkElement),this.detect(m,W.NullElement,!1).detect(v,W.StringElement,!1).detect(_,W.NumberElement,!1).detect(j,W.BooleanElement,!1).detect(Array.isArray,W.ArrayElement,!1).detect(M,W.ObjectElement,!1),this}register(i,s){return this._elements=void 0,this.elementMap[i]=s,this}unregister(i){return this._elements=void 0,delete this.elementMap[i],this}detect(i,s,u){return void 0===u||u?this.elementDetection.unshift([i,s]):this.elementDetection.push([i,s]),this}toElement(i){if(i instanceof this.Element)return i;let s;for(let u=0;u{const s=i[0].toUpperCase()+i.substr(1);this._elements[s]=this.elementMap[i]}))),this._elements}get serialiser(){return new $(this)}}$.prototype.Namespace=Namespace,i.exports=Namespace},87526:(i,s,u)=>{const m=u(94885),v=u(42566);class ObjectSlice extends v{map(i,s){return this.elements.map((u=>i.bind(s)(u.value,u.key,u)))}filter(i,s){return new ObjectSlice(this.elements.filter((u=>i.bind(s)(u.value,u.key,u))))}reject(i,s){return this.filter(m(i.bind(s)))}forEach(i,s){return this.elements.forEach(((u,m)=>{i.bind(s)(u.value,u.key,u,m)}))}keys(){return this.map(((i,s)=>s.toValue()))}values(){return this.map((i=>i.toValue()))}}i.exports=ObjectSlice},99829:(i,s,u)=>{const m=u(3079),v=u(96295),_=u(16036),j=u(91090),M=u(18866),$=u(35804),W=u(5946),X=u(76735),Y=u(59964),Z=u(38588),ee=u(42566),ae=u(87526),ie=u(17645);function refract(i){if(i instanceof m)return i;if("string"==typeof i)return new _(i);if("number"==typeof i)return new j(i);if("boolean"==typeof i)return new M(i);if(null===i)return new v;if(Array.isArray(i))return new $(i.map(refract));if("object"==typeof i){return new X(i)}return i}m.prototype.ObjectElement=X,m.prototype.RefElement=Z,m.prototype.MemberElement=W,m.prototype.refract=refract,ee.prototype.refract=refract,i.exports={Element:m,NullElement:v,StringElement:_,NumberElement:j,BooleanElement:M,ArrayElement:$,MemberElement:W,ObjectElement:X,LinkElement:Y,RefElement:Z,refract,ArraySlice:ee,ObjectSlice:ae,KeyValuePair:ie}},59964:(i,s,u)=>{const m=u(3079);i.exports=class LinkElement extends m{constructor(i,s,u){super(i||[],s,u),this.element="link"}get relation(){return this.attributes.get("relation")}set relation(i){this.attributes.set("relation",i)}get href(){return this.attributes.get("href")}set href(i){this.attributes.set("href",i)}}},38588:(i,s,u)=>{const m=u(3079);i.exports=class RefElement extends m{constructor(i,s,u){super(i||[],s,u),this.element="ref",this.path||(this.path="element")}get path(){return this.attributes.get("path")}set path(i){this.attributes.set("path",i)}}},43500:(i,s,u)=>{const m=u(78520),v=u(99829);s.lS=m,u(17645),s.O4=v.ArraySlice,v.ObjectSlice,s.W_=v.Element,s.RP=v.StringElement,s.VL=v.NumberElement,s.hh=v.BooleanElement,s.zr=v.NullElement,s.ON=v.ArrayElement,s.Sb=v.ObjectElement,s.c6=v.MemberElement,s.tK=v.RefElement,s.EA=v.LinkElement,s.Qc=v.refract,u(28219),u(3414)},35804:(i,s,u)=>{const m=u(94885),v=u(3079),_=u(42566);class ArrayElement extends v{constructor(i,s,u){super(i||[],s,u),this.element="array"}primitive(){return"array"}get(i){return this.content[i]}getValue(i){const s=this.get(i);if(s)return s.toValue()}getIndex(i){return this.content[i]}set(i,s){return this.content[i]=this.refract(s),this}remove(i){const s=this.content.splice(i,1);return s.length?s[0]:null}map(i,s){return this.content.map(i,s)}flatMap(i,s){return this.map(i,s).reduce(((i,s)=>i.concat(s)),[])}compactMap(i,s){const u=[];return this.forEach((m=>{const v=i.bind(s)(m);v&&u.push(v)})),u}filter(i,s){return new _(this.content.filter(i,s))}reject(i,s){return this.filter(m(i),s)}reduce(i,s){let u,m;void 0!==s?(u=0,m=this.refract(s)):(u=1,m="object"===this.primitive()?this.first.value:this.first);for(let s=u;s{i.bind(s)(u,this.refract(m))}))}shift(){return this.content.shift()}unshift(i){this.content.unshift(this.refract(i))}push(i){return this.content.push(this.refract(i)),this}add(i){this.push(i)}findElements(i,s){const u=s||{},m=!!u.recursive,v=void 0===u.results?[]:u.results;return this.forEach(((s,u,_)=>{m&&void 0!==s.findElements&&s.findElements(i,{results:v,recursive:m}),i(s,u,_)&&v.push(s)})),v}find(i){return new _(this.findElements(i,{recursive:!0}))}findByElement(i){return this.find((s=>s.element===i))}findByClass(i){return this.find((s=>s.classes.includes(i)))}getById(i){return this.find((s=>s.id.toValue()===i)).first}includes(i){return this.content.some((s=>s.equals(i)))}contains(i){return this.includes(i)}empty(){return new this.constructor([])}"fantasy-land/empty"(){return this.empty()}concat(i){return new this.constructor(this.content.concat(i.content))}"fantasy-land/concat"(i){return this.concat(i)}"fantasy-land/map"(i){return new this.constructor(this.map(i))}"fantasy-land/chain"(i){return this.map((s=>i(s)),this).reduce(((i,s)=>i.concat(s)),this.empty())}"fantasy-land/filter"(i){return new this.constructor(this.content.filter(i))}"fantasy-land/reduce"(i,s){return this.content.reduce(i,s)}get length(){return this.content.length}get isEmpty(){return 0===this.content.length}get first(){return this.getIndex(0)}get second(){return this.getIndex(1)}get last(){return this.getIndex(this.length-1)}}ArrayElement.empty=function empty(){return new this},ArrayElement["fantasy-land/empty"]=ArrayElement.empty,"undefined"!=typeof Symbol&&(ArrayElement.prototype[Symbol.iterator]=function symbol(){return this.content[Symbol.iterator]()}),i.exports=ArrayElement},18866:(i,s,u)=>{const m=u(3079);i.exports=class BooleanElement extends m{constructor(i,s,u){super(i,s,u),this.element="boolean"}primitive(){return"boolean"}}},3079:(i,s,u)=>{const m=u(18446),v=u(17645),_=u(42566);class Element{constructor(i,s,u){s&&(this.meta=s),u&&(this.attributes=u),this.content=i}freeze(){Object.isFrozen(this)||(this._meta&&(this.meta.parent=this,this.meta.freeze()),this._attributes&&(this.attributes.parent=this,this.attributes.freeze()),this.children.forEach((i=>{i.parent=this,i.freeze()}),this),this.content&&Array.isArray(this.content)&&Object.freeze(this.content),Object.freeze(this))}primitive(){}clone(){const i=new this.constructor;return i.element=this.element,this.meta.length&&(i._meta=this.meta.clone()),this.attributes.length&&(i._attributes=this.attributes.clone()),this.content?this.content.clone?i.content=this.content.clone():Array.isArray(this.content)?i.content=this.content.map((i=>i.clone())):i.content=this.content:i.content=this.content,i}toValue(){return this.content instanceof Element?this.content.toValue():this.content instanceof v?{key:this.content.key.toValue(),value:this.content.value?this.content.value.toValue():void 0}:this.content&&this.content.map?this.content.map((i=>i.toValue()),this):this.content}toRef(i){if(""===this.id.toValue())throw Error("Cannot create reference to an element that does not contain an ID");const s=new this.RefElement(this.id.toValue());return i&&(s.path=i),s}findRecursive(...i){if(arguments.length>1&&!this.isFrozen)throw new Error("Cannot find recursive with multiple element names without first freezing the element. Call `element.freeze()`");const s=i.pop();let u=new _;const append=(i,s)=>(i.push(s),i),checkElement=(i,u)=>{u.element===s&&i.push(u);const m=u.findRecursive(s);return m&&m.reduce(append,i),u.content instanceof v&&(u.content.key&&checkElement(i,u.content.key),u.content.value&&checkElement(i,u.content.value)),i};return this.content&&(this.content.element&&checkElement(u,this.content),Array.isArray(this.content)&&this.content.reduce(checkElement,u)),i.isEmpty||(u=u.filter((s=>{let u=s.parents.map((i=>i.element));for(const s in i){const m=i[s],v=u.indexOf(m);if(-1===v)return!1;u=u.splice(0,v)}return!0}))),u}set(i){return this.content=i,this}equals(i){return m(this.toValue(),i)}getMetaProperty(i,s){if(!this.meta.hasKey(i)){if(this.isFrozen){const i=this.refract(s);return i.freeze(),i}this.meta.set(i,s)}return this.meta.get(i)}setMetaProperty(i,s){this.meta.set(i,s)}get element(){return this._storedElement||"element"}set element(i){this._storedElement=i}get content(){return this._content}set content(i){if(i instanceof Element)this._content=i;else if(i instanceof _)this.content=i.elements;else if("string"==typeof i||"number"==typeof i||"boolean"==typeof i||"null"===i||null==i)this._content=i;else if(i instanceof v)this._content=i;else if(Array.isArray(i))this._content=i.map(this.refract);else{if("object"!=typeof i)throw new Error("Cannot set content to given value");this._content=Object.keys(i).map((s=>new this.MemberElement(s,i[s])))}}get meta(){if(!this._meta){if(this.isFrozen){const i=new this.ObjectElement;return i.freeze(),i}this._meta=new this.ObjectElement}return this._meta}set meta(i){i instanceof this.ObjectElement?this._meta=i:this.meta.set(i||{})}get attributes(){if(!this._attributes){if(this.isFrozen){const i=new this.ObjectElement;return i.freeze(),i}this._attributes=new this.ObjectElement}return this._attributes}set attributes(i){i instanceof this.ObjectElement?this._attributes=i:this.attributes.set(i||{})}get id(){return this.getMetaProperty("id","")}set id(i){this.setMetaProperty("id",i)}get classes(){return this.getMetaProperty("classes",[])}set classes(i){this.setMetaProperty("classes",i)}get title(){return this.getMetaProperty("title","")}set title(i){this.setMetaProperty("title",i)}get description(){return this.getMetaProperty("description","")}set description(i){this.setMetaProperty("description",i)}get links(){return this.getMetaProperty("links",[])}set links(i){this.setMetaProperty("links",i)}get isFrozen(){return Object.isFrozen(this)}get parents(){let{parent:i}=this;const s=new _;for(;i;)s.push(i),i=i.parent;return s}get children(){if(Array.isArray(this.content))return new _(this.content);if(this.content instanceof v){const i=new _([this.content.key]);return this.content.value&&i.push(this.content.value),i}return this.content instanceof Element?new _([this.content]):new _}get recursiveChildren(){const i=new _;return this.children.forEach((s=>{i.push(s),s.recursiveChildren.forEach((s=>{i.push(s)}))})),i}}i.exports=Element},5946:(i,s,u)=>{const m=u(17645),v=u(3079);i.exports=class MemberElement extends v{constructor(i,s,u,v){super(new m,u,v),this.element="member",this.key=i,this.value=s}get key(){return this.content.key}set key(i){this.content.key=this.refract(i)}get value(){return this.content.value}set value(i){this.content.value=this.refract(i)}}},96295:(i,s,u)=>{const m=u(3079);i.exports=class NullElement extends m{constructor(i,s,u){super(i||null,s,u),this.element="null"}primitive(){return"null"}set(){return new Error("Cannot set the value of null")}}},91090:(i,s,u)=>{const m=u(3079);i.exports=class NumberElement extends m{constructor(i,s,u){super(i,s,u),this.element="number"}primitive(){return"number"}}},76735:(i,s,u)=>{const m=u(94885),v=u(13218),_=u(35804),j=u(5946),M=u(87526);i.exports=class ObjectElement extends _{constructor(i,s,u){super(i||[],s,u),this.element="object"}primitive(){return"object"}toValue(){return this.content.reduce(((i,s)=>(i[s.key.toValue()]=s.value?s.value.toValue():void 0,i)),{})}get(i){const s=this.getMember(i);if(s)return s.value}getMember(i){if(void 0!==i)return this.content.find((s=>s.key.toValue()===i))}remove(i){let s=null;return this.content=this.content.filter((u=>u.key.toValue()!==i||(s=u,!1))),s}getKey(i){const s=this.getMember(i);if(s)return s.key}set(i,s){if(v(i))return Object.keys(i).forEach((s=>{this.set(s,i[s])})),this;const u=i,m=this.getMember(u);return m?m.value=s:this.content.push(new j(u,s)),this}keys(){return this.content.map((i=>i.key.toValue()))}values(){return this.content.map((i=>i.value.toValue()))}hasKey(i){return this.content.some((s=>s.key.equals(i)))}items(){return this.content.map((i=>[i.key.toValue(),i.value.toValue()]))}map(i,s){return this.content.map((u=>i.bind(s)(u.value,u.key,u)))}compactMap(i,s){const u=[];return this.forEach(((m,v,_)=>{const j=i.bind(s)(m,v,_);j&&u.push(j)})),u}filter(i,s){return new M(this.content).filter(i,s)}reject(i,s){return this.filter(m(i),s)}forEach(i,s){return this.content.forEach((u=>i.bind(s)(u.value,u.key,u)))}}},16036:(i,s,u)=>{const m=u(3079);i.exports=class StringElement extends m{constructor(i,s,u){super(i,s,u),this.element="string"}primitive(){return"string"}get length(){return this.content.length}}},3414:(i,s,u)=>{const m=u(28219);i.exports=class JSON06Serialiser extends m{serialise(i){if(!(i instanceof this.namespace.elements.Element))throw new TypeError(`Given element \`${i}\` is not an Element instance`);let s;i._attributes&&i.attributes.get("variable")&&(s=i.attributes.get("variable"));const u={element:i.element};i._meta&&i._meta.length>0&&(u.meta=this.serialiseObject(i.meta));const m="enum"===i.element||-1!==i.attributes.keys().indexOf("enumerations");if(m){const s=this.enumSerialiseAttributes(i);s&&(u.attributes=s)}else if(i._attributes&&i._attributes.length>0){let{attributes:m}=i;m.get("metadata")&&(m=m.clone(),m.set("meta",m.get("metadata")),m.remove("metadata")),"member"===i.element&&s&&(m=m.clone(),m.remove("variable")),m.length>0&&(u.attributes=this.serialiseObject(m))}if(m)u.content=this.enumSerialiseContent(i,u);else if(this[`${i.element}SerialiseContent`])u.content=this[`${i.element}SerialiseContent`](i,u);else if(void 0!==i.content){let m;s&&i.content.key?(m=i.content.clone(),m.key.attributes.set("variable",s),m=this.serialiseContent(m)):m=this.serialiseContent(i.content),this.shouldSerialiseContent(i,m)&&(u.content=m)}else this.shouldSerialiseContent(i,i.content)&&i instanceof this.namespace.elements.Array&&(u.content=[]);return u}shouldSerialiseContent(i,s){return"parseResult"===i.element||"httpRequest"===i.element||"httpResponse"===i.element||"category"===i.element||"link"===i.element||void 0!==s&&(!Array.isArray(s)||0!==s.length)}refSerialiseContent(i,s){return delete s.attributes,{href:i.toValue(),path:i.path.toValue()}}sourceMapSerialiseContent(i){return i.toValue()}dataStructureSerialiseContent(i){return[this.serialiseContent(i.content)]}enumSerialiseAttributes(i){const s=i.attributes.clone(),u=s.remove("enumerations")||new this.namespace.elements.Array([]),m=s.get("default");let v=s.get("samples")||new this.namespace.elements.Array([]);if(m&&m.content&&(m.content.attributes&&m.content.attributes.remove("typeAttributes"),s.set("default",new this.namespace.elements.Array([m.content]))),v.forEach((i=>{i.content&&i.content.element&&i.content.attributes.remove("typeAttributes")})),i.content&&0!==u.length&&v.unshift(i.content),v=v.map((i=>i instanceof this.namespace.elements.Array?[i]:new this.namespace.elements.Array([i.content]))),v.length&&s.set("samples",v),s.length>0)return this.serialiseObject(s)}enumSerialiseContent(i){if(i._attributes){const s=i.attributes.get("enumerations");if(s&&s.length>0)return s.content.map((i=>{const s=i.clone();return s.attributes.remove("typeAttributes"),this.serialise(s)}))}if(i.content){const s=i.content.clone();return s.attributes.remove("typeAttributes"),[this.serialise(s)]}return[]}deserialise(i){if("string"==typeof i)return new this.namespace.elements.String(i);if("number"==typeof i)return new this.namespace.elements.Number(i);if("boolean"==typeof i)return new this.namespace.elements.Boolean(i);if(null===i)return new this.namespace.elements.Null;if(Array.isArray(i))return new this.namespace.elements.Array(i.map(this.deserialise,this));const s=this.namespace.getElementClass(i.element),u=new s;u.element!==i.element&&(u.element=i.element),i.meta&&this.deserialiseObject(i.meta,u.meta),i.attributes&&this.deserialiseObject(i.attributes,u.attributes);const m=this.deserialiseContent(i.content);if(void 0===m&&null!==u.content||(u.content=m),"enum"===u.element){u.content&&u.attributes.set("enumerations",u.content);let i=u.attributes.get("samples");if(u.attributes.remove("samples"),i){const m=i;i=new this.namespace.elements.Array,m.forEach((m=>{m.forEach((m=>{const v=new s(m);v.element=u.element,i.push(v)}))}));const v=i.shift();u.content=v?v.content:void 0,u.attributes.set("samples",i)}else u.content=void 0;let m=u.attributes.get("default");if(m&&m.length>0){m=m.get(0);const i=new s(m);i.element=u.element,u.attributes.set("default",i)}}else if("dataStructure"===u.element&&Array.isArray(u.content))[u.content]=u.content;else if("category"===u.element){const i=u.attributes.get("meta");i&&(u.attributes.set("metadata",i),u.attributes.remove("meta"))}else"member"===u.element&&u.key&&u.key._attributes&&u.key._attributes.getValue("variable")&&(u.attributes.set("variable",u.key.attributes.get("variable")),u.key.attributes.remove("variable"));return u}serialiseContent(i){if(i instanceof this.namespace.elements.Element)return this.serialise(i);if(i instanceof this.namespace.KeyValuePair){const s={key:this.serialise(i.key)};return i.value&&(s.value=this.serialise(i.value)),s}return i&&i.map?i.map(this.serialise,this):i}deserialiseContent(i){if(i){if(i.element)return this.deserialise(i);if(i.key){const s=new this.namespace.KeyValuePair(this.deserialise(i.key));return i.value&&(s.value=this.deserialise(i.value)),s}if(i.map)return i.map(this.deserialise,this)}return i}shouldRefract(i){return!!(i._attributes&&i.attributes.keys().length||i._meta&&i.meta.keys().length)||"enum"!==i.element&&(i.element!==i.primitive()||"member"===i.element)}convertKeyToRefract(i,s){return this.shouldRefract(s)?this.serialise(s):"enum"===s.element?this.serialiseEnum(s):"array"===s.element?s.map((s=>this.shouldRefract(s)||"default"===i?this.serialise(s):"array"===s.element||"object"===s.element||"enum"===s.element?s.children.map((i=>this.serialise(i))):s.toValue())):"object"===s.element?(s.content||[]).map(this.serialise,this):s.toValue()}serialiseEnum(i){return i.children.map((i=>this.serialise(i)))}serialiseObject(i){const s={};return i.forEach(((i,u)=>{if(i){const m=u.toValue();s[m]=this.convertKeyToRefract(m,i)}})),s}deserialiseObject(i,s){Object.keys(i).forEach((u=>{s.set(u,this.deserialise(i[u]))}))}}},28219:i=>{i.exports=class JSONSerialiser{constructor(i){this.namespace=i||new this.Namespace}serialise(i){if(!(i instanceof this.namespace.elements.Element))throw new TypeError(`Given element \`${i}\` is not an Element instance`);const s={element:i.element};i._meta&&i._meta.length>0&&(s.meta=this.serialiseObject(i.meta)),i._attributes&&i._attributes.length>0&&(s.attributes=this.serialiseObject(i.attributes));const u=this.serialiseContent(i.content);return void 0!==u&&(s.content=u),s}deserialise(i){if(!i.element)throw new Error("Given value is not an object containing an element name");const s=new(this.namespace.getElementClass(i.element));s.element!==i.element&&(s.element=i.element),i.meta&&this.deserialiseObject(i.meta,s.meta),i.attributes&&this.deserialiseObject(i.attributes,s.attributes);const u=this.deserialiseContent(i.content);return void 0===u&&null!==s.content||(s.content=u),s}serialiseContent(i){if(i instanceof this.namespace.elements.Element)return this.serialise(i);if(i instanceof this.namespace.KeyValuePair){const s={key:this.serialise(i.key)};return i.value&&(s.value=this.serialise(i.value)),s}if(i&&i.map){if(0===i.length)return;return i.map(this.serialise,this)}return i}deserialiseContent(i){if(i){if(i.element)return this.deserialise(i);if(i.key){const s=new this.namespace.KeyValuePair(this.deserialise(i.key));return i.value&&(s.value=this.deserialise(i.value)),s}if(i.map)return i.map(this.deserialise,this)}return i}serialiseObject(i){const s={};if(i.forEach(((i,u)=>{i&&(s[u.toValue()]=this.serialise(i))})),0!==Object.keys(s).length)return s}deserialiseObject(i,s){Object.keys(i).forEach((u=>{s.set(u,this.deserialise(i[u]))}))}}},27418:i=>{"use strict";var s=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,m=Object.prototype.propertyIsEnumerable;i.exports=function shouldUseNative(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de","5"===Object.getOwnPropertyNames(i)[0])return!1;for(var s={},u=0;u<10;u++)s["_"+String.fromCharCode(u)]=u;if("0123456789"!==Object.getOwnPropertyNames(s).map((function(i){return s[i]})).join(""))return!1;var m={};return"abcdefghijklmnopqrst".split("").forEach((function(i){m[i]=i})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},m)).join("")}catch(i){return!1}}()?Object.assign:function(i,v){for(var _,j,M=function toObject(i){if(null==i)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}(i),$=1;${var m="function"==typeof Map&&Map.prototype,v=Object.getOwnPropertyDescriptor&&m?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,_=m&&v&&"function"==typeof v.get?v.get:null,j=m&&Map.prototype.forEach,M="function"==typeof Set&&Set.prototype,$=Object.getOwnPropertyDescriptor&&M?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,W=M&&$&&"function"==typeof $.get?$.get:null,X=M&&Set.prototype.forEach,Y="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,Z="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,ee="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,ae=Boolean.prototype.valueOf,ie=Object.prototype.toString,le=Function.prototype.toString,ce=String.prototype.match,pe=String.prototype.slice,de=String.prototype.replace,fe=String.prototype.toUpperCase,ye=String.prototype.toLowerCase,be=RegExp.prototype.test,_e=Array.prototype.concat,we=Array.prototype.join,Se=Array.prototype.slice,xe=Math.floor,Pe="function"==typeof BigInt?BigInt.prototype.valueOf:null,Ie=Object.getOwnPropertySymbols,Te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Re="function"==typeof Symbol&&"object"==typeof Symbol.iterator,qe="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Re||"symbol")?Symbol.toStringTag:null,ze=Object.prototype.propertyIsEnumerable,Ve=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(i){return i.__proto__}:null);function addNumericSeparator(i,s){if(i===1/0||i===-1/0||i!=i||i&&i>-1e3&&i<1e3||be.call(/e/,s))return s;var u=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof i){var m=i<0?-xe(-i):xe(i);if(m!==i){var v=String(m),_=pe.call(s,v.length+1);return de.call(v,u,"$&_")+"."+de.call(de.call(_,/([0-9]{3})/g,"$&_"),/_$/,"")}}return de.call(s,u,"$&_")}var We=u(24654),He=We.custom,Xe=isSymbol(He)?He:null;function wrapQuotes(i,s,u){var m="double"===(u.quoteStyle||s)?'"':"'";return m+i+m}function quote(i){return de.call(String(i),/"/g,""")}function isArray(i){return!("[object Array]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}function isRegExp(i){return!("[object RegExp]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}function isSymbol(i){if(Re)return i&&"object"==typeof i&&i instanceof Symbol;if("symbol"==typeof i)return!0;if(!i||"object"!=typeof i||!Te)return!1;try{return Te.call(i),!0}catch(i){}return!1}i.exports=function inspect_(i,s,u,m){var v=s||{};if(has(v,"quoteStyle")&&"single"!==v.quoteStyle&&"double"!==v.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has(v,"maxStringLength")&&("number"==typeof v.maxStringLength?v.maxStringLength<0&&v.maxStringLength!==1/0:null!==v.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var M=!has(v,"customInspect")||v.customInspect;if("boolean"!=typeof M&&"symbol"!==M)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has(v,"indent")&&null!==v.indent&&"\t"!==v.indent&&!(parseInt(v.indent,10)===v.indent&&v.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has(v,"numericSeparator")&&"boolean"!=typeof v.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var $=v.numericSeparator;if(void 0===i)return"undefined";if(null===i)return"null";if("boolean"==typeof i)return i?"true":"false";if("string"==typeof i)return inspectString(i,v);if("number"==typeof i){if(0===i)return 1/0/i>0?"0":"-0";var ie=String(i);return $?addNumericSeparator(i,ie):ie}if("bigint"==typeof i){var fe=String(i)+"n";return $?addNumericSeparator(i,fe):fe}var be=void 0===v.depth?5:v.depth;if(void 0===u&&(u=0),u>=be&&be>0&&"object"==typeof i)return isArray(i)?"[Array]":"[Object]";var xe=function getIndent(i,s){var u;if("\t"===i.indent)u="\t";else{if(!("number"==typeof i.indent&&i.indent>0))return null;u=we.call(Array(i.indent+1)," ")}return{base:u,prev:we.call(Array(s+1),u)}}(v,u);if(void 0===m)m=[];else if(indexOf(m,i)>=0)return"[Circular]";function inspect(i,s,_){if(s&&(m=Se.call(m)).push(s),_){var j={depth:v.depth};return has(v,"quoteStyle")&&(j.quoteStyle=v.quoteStyle),inspect_(i,j,u+1,m)}return inspect_(i,v,u+1,m)}if("function"==typeof i&&!isRegExp(i)){var Ie=function nameOf(i){if(i.name)return i.name;var s=ce.call(le.call(i),/^function\s*([\w$]+)/);if(s)return s[1];return null}(i),He=arrObjKeys(i,inspect);return"[Function"+(Ie?": "+Ie:" (anonymous)")+"]"+(He.length>0?" { "+we.call(He,", ")+" }":"")}if(isSymbol(i)){var Ye=Re?de.call(String(i),/^(Symbol\(.*\))_[^)]*$/,"$1"):Te.call(i);return"object"!=typeof i||Re?Ye:markBoxed(Ye)}if(function isElement(i){if(!i||"object"!=typeof i)return!1;if("undefined"!=typeof HTMLElement&&i instanceof HTMLElement)return!0;return"string"==typeof i.nodeName&&"function"==typeof i.getAttribute}(i)){for(var Qe="<"+ye.call(String(i.nodeName)),et=i.attributes||[],tt=0;tt"}if(isArray(i)){if(0===i.length)return"[]";var rt=arrObjKeys(i,inspect);return xe&&!function singleLineValues(i){for(var s=0;s=0)return!1;return!0}(rt)?"["+indentedJoin(rt,xe)+"]":"[ "+we.call(rt,", ")+" ]"}if(function isError(i){return!("[object Error]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i)){var nt=arrObjKeys(i,inspect);return"cause"in Error.prototype||!("cause"in i)||ze.call(i,"cause")?0===nt.length?"["+String(i)+"]":"{ ["+String(i)+"] "+we.call(nt,", ")+" }":"{ ["+String(i)+"] "+we.call(_e.call("[cause]: "+inspect(i.cause),nt),", ")+" }"}if("object"==typeof i&&M){if(Xe&&"function"==typeof i[Xe]&&We)return We(i,{depth:be-u});if("symbol"!==M&&"function"==typeof i.inspect)return i.inspect()}if(function isMap(i){if(!_||!i||"object"!=typeof i)return!1;try{_.call(i);try{W.call(i)}catch(i){return!0}return i instanceof Map}catch(i){}return!1}(i)){var ot=[];return j&&j.call(i,(function(s,u){ot.push(inspect(u,i,!0)+" => "+inspect(s,i))})),collectionOf("Map",_.call(i),ot,xe)}if(function isSet(i){if(!W||!i||"object"!=typeof i)return!1;try{W.call(i);try{_.call(i)}catch(i){return!0}return i instanceof Set}catch(i){}return!1}(i)){var at=[];return X&&X.call(i,(function(s){at.push(inspect(s,i))})),collectionOf("Set",W.call(i),at,xe)}if(function isWeakMap(i){if(!Y||!i||"object"!=typeof i)return!1;try{Y.call(i,Y);try{Z.call(i,Z)}catch(i){return!0}return i instanceof WeakMap}catch(i){}return!1}(i))return weakCollectionOf("WeakMap");if(function isWeakSet(i){if(!Z||!i||"object"!=typeof i)return!1;try{Z.call(i,Z);try{Y.call(i,Y)}catch(i){return!0}return i instanceof WeakSet}catch(i){}return!1}(i))return weakCollectionOf("WeakSet");if(function isWeakRef(i){if(!ee||!i||"object"!=typeof i)return!1;try{return ee.call(i),!0}catch(i){}return!1}(i))return weakCollectionOf("WeakRef");if(function isNumber(i){return!("[object Number]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(inspect(Number(i)));if(function isBigInt(i){if(!i||"object"!=typeof i||!Pe)return!1;try{return Pe.call(i),!0}catch(i){}return!1}(i))return markBoxed(inspect(Pe.call(i)));if(function isBoolean(i){return!("[object Boolean]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(ae.call(i));if(function isString(i){return!("[object String]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i))return markBoxed(inspect(String(i)));if(!function isDate(i){return!("[object Date]"!==toStr(i)||qe&&"object"==typeof i&&qe in i)}(i)&&!isRegExp(i)){var it=arrObjKeys(i,inspect),st=Ve?Ve(i)===Object.prototype:i instanceof Object||i.constructor===Object,lt=i instanceof Object?"":"null prototype",ct=!st&&qe&&Object(i)===i&&qe in i?pe.call(toStr(i),8,-1):lt?"Object":"",ut=(st||"function"!=typeof i.constructor?"":i.constructor.name?i.constructor.name+" ":"")+(ct||lt?"["+we.call(_e.call([],ct||[],lt||[]),": ")+"] ":"");return 0===it.length?ut+"{}":xe?ut+"{"+indentedJoin(it,xe)+"}":ut+"{ "+we.call(it,", ")+" }"}return String(i)};var Ye=Object.prototype.hasOwnProperty||function(i){return i in this};function has(i,s){return Ye.call(i,s)}function toStr(i){return ie.call(i)}function indexOf(i,s){if(i.indexOf)return i.indexOf(s);for(var u=0,m=i.length;us.maxStringLength){var u=i.length-s.maxStringLength,m="... "+u+" more character"+(u>1?"s":"");return inspectString(pe.call(i,0,s.maxStringLength),s)+m}return wrapQuotes(de.call(de.call(i,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,lowbyte),"single",s)}function lowbyte(i){var s=i.charCodeAt(0),u={8:"b",9:"t",10:"n",12:"f",13:"r"}[s];return u?"\\"+u:"\\x"+(s<16?"0":"")+fe.call(s.toString(16))}function markBoxed(i){return"Object("+i+")"}function weakCollectionOf(i){return i+" { ? }"}function collectionOf(i,s,u,m){return i+" ("+s+") {"+(m?indentedJoin(u,m):we.call(u,", "))+"}"}function indentedJoin(i,s){if(0===i.length)return"";var u="\n"+s.prev+s.base;return u+we.call(i,","+u)+"\n"+s.prev}function arrObjKeys(i,s){var u=isArray(i),m=[];if(u){m.length=i.length;for(var v=0;v{var s,u,m=i.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(i){if(s===setTimeout)return setTimeout(i,0);if((s===defaultSetTimout||!s)&&setTimeout)return s=setTimeout,setTimeout(i,0);try{return s(i,0)}catch(u){try{return s.call(null,i,0)}catch(u){return s.call(this,i,0)}}}!function(){try{s="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(i){s=defaultSetTimout}try{u="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(i){u=defaultClearTimeout}}();var v,_=[],j=!1,M=-1;function cleanUpNextTick(){j&&v&&(j=!1,v.length?_=v.concat(_):M=-1,_.length&&drainQueue())}function drainQueue(){if(!j){var i=runTimeout(cleanUpNextTick);j=!0;for(var s=_.length;s;){for(v=_,_=[];++M1)for(var u=1;u{"use strict";var m=u(50414);function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,i.exports=function(){function shim(i,s,u,v,_,j){if(j!==m){var M=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw M.name="Invariant Violation",M}}function getShim(){return shim}shim.isRequired=shim;var i={array:shim,bigint:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return i.PropTypes=i,i}},45697:(i,s,u)=>{i.exports=u(92703)()},50414:i=>{"use strict";i.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},55798:i=>{"use strict";var s=String.prototype.replace,u=/%20/g,m="RFC1738",v="RFC3986";i.exports={default:v,formatters:{RFC1738:function(i){return s.call(i,u,"+")},RFC3986:function(i){return String(i)}},RFC1738:m,RFC3986:v}},80129:(i,s,u)=>{"use strict";var m=u(58261),v=u(55235),_=u(55798);i.exports={formats:_,parse:v,stringify:m}},55235:(i,s,u)=>{"use strict";var m=u(12769),v=Object.prototype.hasOwnProperty,_=Array.isArray,j={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:m.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},interpretNumericEntities=function(i){return i.replace(/&#(\d+);/g,(function(i,s){return String.fromCharCode(parseInt(s,10))}))},parseArrayValue=function(i,s){return i&&"string"==typeof i&&s.comma&&i.indexOf(",")>-1?i.split(","):i},M=function parseQueryStringKeys(i,s,u,m){if(i){var _=u.allowDots?i.replace(/\.([^.[]+)/g,"[$1]"):i,j=/(\[[^[\]]*])/g,M=u.depth>0&&/(\[[^[\]]*])/.exec(_),$=M?_.slice(0,M.index):_,W=[];if($){if(!u.plainObjects&&v.call(Object.prototype,$)&&!u.allowPrototypes)return;W.push($)}for(var X=0;u.depth>0&&null!==(M=j.exec(_))&&X=0;--_){var j,M=i[_];if("[]"===M&&u.parseArrays)j=[].concat(v);else{j=u.plainObjects?Object.create(null):{};var $="["===M.charAt(0)&&"]"===M.charAt(M.length-1)?M.slice(1,-1):M,W=parseInt($,10);u.parseArrays||""!==$?!isNaN(W)&&M!==$&&String(W)===$&&W>=0&&u.parseArrays&&W<=u.arrayLimit?(j=[])[W]=v:"__proto__"!==$&&(j[$]=v):j={0:v}}v=j}return v}(W,s,u,m)}};i.exports=function(i,s){var u=function normalizeParseOptions(i){if(!i)return j;if(null!==i.decoder&&void 0!==i.decoder&&"function"!=typeof i.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==i.charset&&"utf-8"!==i.charset&&"iso-8859-1"!==i.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var s=void 0===i.charset?j.charset:i.charset;return{allowDots:void 0===i.allowDots?j.allowDots:!!i.allowDots,allowPrototypes:"boolean"==typeof i.allowPrototypes?i.allowPrototypes:j.allowPrototypes,allowSparse:"boolean"==typeof i.allowSparse?i.allowSparse:j.allowSparse,arrayLimit:"number"==typeof i.arrayLimit?i.arrayLimit:j.arrayLimit,charset:s,charsetSentinel:"boolean"==typeof i.charsetSentinel?i.charsetSentinel:j.charsetSentinel,comma:"boolean"==typeof i.comma?i.comma:j.comma,decoder:"function"==typeof i.decoder?i.decoder:j.decoder,delimiter:"string"==typeof i.delimiter||m.isRegExp(i.delimiter)?i.delimiter:j.delimiter,depth:"number"==typeof i.depth||!1===i.depth?+i.depth:j.depth,ignoreQueryPrefix:!0===i.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof i.interpretNumericEntities?i.interpretNumericEntities:j.interpretNumericEntities,parameterLimit:"number"==typeof i.parameterLimit?i.parameterLimit:j.parameterLimit,parseArrays:!1!==i.parseArrays,plainObjects:"boolean"==typeof i.plainObjects?i.plainObjects:j.plainObjects,strictNullHandling:"boolean"==typeof i.strictNullHandling?i.strictNullHandling:j.strictNullHandling}}(s);if(""===i||null==i)return u.plainObjects?Object.create(null):{};for(var $="string"==typeof i?function parseQueryStringValues(i,s){var u,M={},$=s.ignoreQueryPrefix?i.replace(/^\?/,""):i,W=s.parameterLimit===1/0?void 0:s.parameterLimit,X=$.split(s.delimiter,W),Y=-1,Z=s.charset;if(s.charsetSentinel)for(u=0;u-1&&(ae=_(ae)?[ae]:ae),v.call(M,ee)?M[ee]=m.combine(M[ee],ae):M[ee]=ae}return M}(i,u):i,W=u.plainObjects?Object.create(null):{},X=Object.keys($),Y=0;Y{"use strict";var m=u(37478),v=u(12769),_=u(55798),j=Object.prototype.hasOwnProperty,M={brackets:function brackets(i){return i+"[]"},comma:"comma",indices:function indices(i,s){return i+"["+s+"]"},repeat:function repeat(i){return i}},$=Array.isArray,W=String.prototype.split,X=Array.prototype.push,pushToArray=function(i,s){X.apply(i,$(s)?s:[s])},Y=Date.prototype.toISOString,Z=_.default,ee={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:v.encode,encodeValuesOnly:!1,format:Z,formatter:_.formatters[Z],indices:!1,serializeDate:function serializeDate(i){return Y.call(i)},skipNulls:!1,strictNullHandling:!1},ae={},ie=function stringify(i,s,u,_,j,M,X,Y,Z,ie,le,ce,pe,de,fe,ye){for(var be=i,_e=ye,we=0,Se=!1;void 0!==(_e=_e.get(ae))&&!Se;){var xe=_e.get(i);if(we+=1,void 0!==xe){if(xe===we)throw new RangeError("Cyclic object value");Se=!0}void 0===_e.get(ae)&&(we=0)}if("function"==typeof Y?be=Y(s,be):be instanceof Date?be=le(be):"comma"===u&&$(be)&&(be=v.maybeMap(be,(function(i){return i instanceof Date?le(i):i}))),null===be){if(j)return X&&!de?X(s,ee.encoder,fe,"key",ce):s;be=""}if(function isNonNullishPrimitive(i){return"string"==typeof i||"number"==typeof i||"boolean"==typeof i||"symbol"==typeof i||"bigint"==typeof i}(be)||v.isBuffer(be)){if(X){var Pe=de?s:X(s,ee.encoder,fe,"key",ce);if("comma"===u&&de){for(var Ie=W.call(String(be),","),Te="",Re=0;Re0?be.join(",")||null:void 0}];else if($(Y))qe=Y;else{var Ve=Object.keys(be);qe=Z?Ve.sort(Z):Ve}for(var We=_&&$(be)&&1===be.length?s+"[]":s,He=0;He0?fe+de:""}},12769:(i,s,u)=>{"use strict";var m=u(55798),v=Object.prototype.hasOwnProperty,_=Array.isArray,j=function(){for(var i=[],s=0;s<256;++s)i.push("%"+((s<16?"0":"")+s.toString(16)).toUpperCase());return i}(),M=function arrayToObject(i,s){for(var u=s&&s.plainObjects?Object.create(null):{},m=0;m1;){var s=i.pop(),u=s.obj[s.prop];if(_(u)){for(var m=[],v=0;v=48&&X<=57||X>=65&&X<=90||X>=97&&X<=122||_===m.RFC1738&&(40===X||41===X)?$+=M.charAt(W):X<128?$+=j[X]:X<2048?$+=j[192|X>>6]+j[128|63&X]:X<55296||X>=57344?$+=j[224|X>>12]+j[128|X>>6&63]+j[128|63&X]:(W+=1,X=65536+((1023&X)<<10|1023&M.charCodeAt(W)),$+=j[240|X>>18]+j[128|X>>12&63]+j[128|X>>6&63]+j[128|63&X])}return $},isBuffer:function isBuffer(i){return!(!i||"object"!=typeof i)&&!!(i.constructor&&i.constructor.isBuffer&&i.constructor.isBuffer(i))},isRegExp:function isRegExp(i){return"[object RegExp]"===Object.prototype.toString.call(i)},maybeMap:function maybeMap(i,s){if(_(i)){for(var u=[],m=0;m{"use strict";var u=Object.prototype.hasOwnProperty;function decode(i){try{return decodeURIComponent(i.replace(/\+/g," "))}catch(i){return null}}function encode(i){try{return encodeURIComponent(i)}catch(i){return null}}s.stringify=function querystringify(i,s){s=s||"";var m,v,_=[];for(v in"string"!=typeof s&&(s="?"),i)if(u.call(i,v)){if((m=i[v])||null!=m&&!isNaN(m)||(m=""),v=encode(v),m=encode(m),null===v||null===m)continue;_.push(v+"="+m)}return _.length?s+_.join("&"):""},s.parse=function querystring(i){for(var s,u=/([^=?#&]+)=?([^&]*)/g,m={};s=u.exec(i);){var v=decode(s[1]),_=decode(s[2]);null===v||null===_||v in m||(m[v]=_)}return m}},14419:(i,s,u)=>{const m=u(60697),v=u(69450),_=m.types;i.exports=class RandExp{constructor(i,s){if(this._setDefaults(i),i instanceof RegExp)this.ignoreCase=i.ignoreCase,this.multiline=i.multiline,i=i.source;else{if("string"!=typeof i)throw new Error("Expected a regexp or string");this.ignoreCase=s&&-1!==s.indexOf("i"),this.multiline=s&&-1!==s.indexOf("m")}this.tokens=m(i)}_setDefaults(i){this.max=null!=i.max?i.max:null!=RandExp.prototype.max?RandExp.prototype.max:100,this.defaultRange=i.defaultRange?i.defaultRange:this.defaultRange.clone(),i.randInt&&(this.randInt=i.randInt)}gen(){return this._gen(this.tokens,[])}_gen(i,s){var u,m,v,j,M;switch(i.type){case _.ROOT:case _.GROUP:if(i.followedBy||i.notFollowedBy)return"";for(i.remember&&void 0===i.groupNumber&&(i.groupNumber=s.push(null)-1),m="",j=0,M=(u=i.options?this._randSelect(i.options):i.stack).length;j{"use strict";var m=u(34155),v=65536,_=4294967295;var j=u(89509).Buffer,M=u.g.crypto||u.g.msCrypto;M&&M.getRandomValues?i.exports=function randomBytes(i,s){if(i>_)throw new RangeError("requested too many random bytes");var u=j.allocUnsafe(i);if(i>0)if(i>v)for(var $=0;${"use strict";function _typeof(i){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(i){return typeof i}:function(i){return i&&"function"==typeof Symbol&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},_typeof(i)}Object.defineProperty(s,"__esModule",{value:!0}),s.CopyToClipboard=void 0;var m=_interopRequireDefault(u(67294)),v=_interopRequireDefault(u(20640)),_=["text","onCopy","options","children"];function _interopRequireDefault(i){return i&&i.__esModule?i:{default:i}}function ownKeys(i,s){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(i);s&&(m=m.filter((function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable}))),u.push.apply(u,m)}return u}function _objectSpread(i){for(var s=1;s=0||(v[u]=i[u]);return v}(i,s);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||Object.prototype.propertyIsEnumerable.call(i,u)&&(v[u]=i[u])}return v}function _defineProperties(i,s){for(var u=0;u{"use strict";var m=u(74300).CopyToClipboard;m.CopyToClipboard=m,i.exports=m},53441:(i,s,u)=>{"use strict";function _typeof(i){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(i){return typeof i}:function(i){return i&&"function"==typeof Symbol&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},_typeof(i)}Object.defineProperty(s,"__esModule",{value:!0}),s.DebounceInput=void 0;var m=_interopRequireDefault(u(67294)),v=_interopRequireDefault(u(91296)),_=["element","onChange","value","minLength","debounceTimeout","forceNotifyByEnter","forceNotifyOnBlur","onKeyDown","onBlur","inputRef"];function _interopRequireDefault(i){return i&&i.__esModule?i:{default:i}}function _objectWithoutProperties(i,s){if(null==i)return{};var u,m,v=function _objectWithoutPropertiesLoose(i,s){if(null==i)return{};var u,m,v={},_=Object.keys(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||(v[u]=i[u]);return v}(i,s);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(i);for(m=0;m<_.length;m++)u=_[m],s.indexOf(u)>=0||Object.prototype.propertyIsEnumerable.call(i,u)&&(v[u]=i[u])}return v}function ownKeys(i,s){var u=Object.keys(i);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(i);s&&(m=m.filter((function(s){return Object.getOwnPropertyDescriptor(i,s).enumerable}))),u.push.apply(u,m)}return u}function _objectSpread(i){for(var s=1;s=m?u.notify(i):s.length>v.length&&u.notify(_objectSpread(_objectSpread({},i),{},{target:_objectSpread(_objectSpread({},i.target),{},{value:""})}))}))})),_defineProperty(_assertThisInitialized(u),"onKeyDown",(function(i){"Enter"===i.key&&u.forceNotify(i);var s=u.props.onKeyDown;s&&(i.persist(),s(i))})),_defineProperty(_assertThisInitialized(u),"onBlur",(function(i){u.forceNotify(i);var s=u.props.onBlur;s&&(i.persist(),s(i))})),_defineProperty(_assertThisInitialized(u),"createNotifier",(function(i){if(i<0)u.notify=function(){return null};else if(0===i)u.notify=u.doNotify;else{var s=(0,v.default)((function(i){u.isDebouncing=!1,u.doNotify(i)}),i);u.notify=function(i){u.isDebouncing=!0,s(i)},u.flush=function(){return s.flush()},u.cancel=function(){u.isDebouncing=!1,s.cancel()}}})),_defineProperty(_assertThisInitialized(u),"doNotify",(function(){u.props.onChange.apply(void 0,arguments)})),_defineProperty(_assertThisInitialized(u),"forceNotify",(function(i){var s=u.props.debounceTimeout;if(u.isDebouncing||!(s>0)){u.cancel&&u.cancel();var m=u.state.value,v=u.props.minLength;m.length>=v?u.doNotify(i):u.doNotify(_objectSpread(_objectSpread({},i),{},{target:_objectSpread(_objectSpread({},i.target),{},{value:m})}))}})),u.isDebouncing=!1,u.state={value:void 0===i.value||null===i.value?"":i.value};var m=u.props.debounceTimeout;return u.createNotifier(m),u}return function _createClass(i,s,u){return s&&_defineProperties(i.prototype,s),u&&_defineProperties(i,u),Object.defineProperty(i,"prototype",{writable:!1}),i}(DebounceInput,[{key:"componentDidUpdate",value:function componentDidUpdate(i){if(!this.isDebouncing){var s=this.props,u=s.value,m=s.debounceTimeout,v=i.debounceTimeout,_=i.value,j=this.state.value;void 0!==u&&_!==u&&j!==u&&this.setState({value:u}),m!==v&&this.createNotifier(m)}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.flush&&this.flush()}},{key:"render",value:function render(){var i,s,u=this.props,v=u.element,j=(u.onChange,u.value,u.minLength,u.debounceTimeout,u.forceNotifyByEnter),M=u.forceNotifyOnBlur,$=u.onKeyDown,W=u.onBlur,X=u.inputRef,Y=_objectWithoutProperties(u,_),Z=this.state.value;i=j?{onKeyDown:this.onKeyDown}:$?{onKeyDown:$}:{},s=M?{onBlur:this.onBlur}:W?{onBlur:W}:{};var ee=X?{ref:X}:{};return m.default.createElement(v,_objectSpread(_objectSpread(_objectSpread(_objectSpread({},Y),{},{onChange:this.onChange,value:Z},i),s),ee))}}]),DebounceInput}(m.default.PureComponent);s.DebounceInput=j,_defineProperty(j,"defaultProps",{element:"input",type:"text",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},775:(i,s,u)=>{"use strict";var m=u(53441).DebounceInput;m.DebounceInput=m,i.exports=m},64448:(i,s,u)=>{"use strict";var m=u(67294),v=u(27418),_=u(63840);function y(i){for(var s="https://reactjs.org/docs/error-decoder.html?invariant="+i,u=1;u
"},UC.link_close=function(){return""},UC.image=function(i,s,u){var m=' src="'+escapeHtml(i[s].src)+'"',v=i[s].title?' title="'+escapeHtml(replaceEntities(i[s].title))+'"':"";return""},UC.table_open=function(){return"\n"},UC.table_close=function(){return"
\n"},UC.thead_open=function(){return"\n"},UC.thead_close=function(){return"\n"},UC.tbody_open=function(){return"\n"},UC.tbody_close=function(){return"\n"},UC.tr_open=function(){return""},UC.tr_close=function(){return"\n"},UC.th_open=function(i,s){var u=i[s];return""},UC.th_close=function(){return""},UC.td_open=function(i,s){var u=i[s];return""},UC.td_close=function(){return""},UC.strong_open=function(){return""},UC.strong_close=function(){return""},UC.em_open=function(){return""},UC.em_close=function(){return""},UC.del_open=function(){return""},UC.del_close=function(){return""},UC.ins_open=function(){return""},UC.ins_close=function(){return""},UC.mark_open=function(){return""},UC.mark_close=function(){return""},UC.sub=function(i,s){return""+escapeHtml(i[s].content)+""},UC.sup=function(i,s){return""+escapeHtml(i[s].content)+""},UC.hardbreak=function(i,s,u){return u.xhtmlOut?"
\n":"
\n"},UC.softbreak=function(i,s,u){return u.breaks?u.xhtmlOut?"
\n":"
\n":"\n"},UC.text=function(i,s){return escapeHtml(i[s].content)},UC.htmlblock=function(i,s){return i[s].content},UC.htmltag=function(i,s){return i[s].content},UC.abbr_open=function(i,s){return''},UC.abbr_close=function(){return""},UC.footnote_ref=function(i,s){var u=Number(i[s].id+1).toString(),m="fnref"+u;return i[s].subId>0&&(m+=":"+i[s].subId),'['+u+"]"},UC.footnote_block_open=function(i,s,u){return(u.xhtmlOut?'
\n':'
\n')+'
\n
    \n'},UC.footnote_block_close=function(){return"
\n
\n"},UC.footnote_open=function(i,s){return'
  • '},UC.footnote_close=function(){return"
  • \n"},UC.footnote_anchor=function(i,s){var u="fnref"+Number(i[s].id+1).toString();return i[s].subId>0&&(u+=":"+i[s].subId),' '},UC.dl_open=function(){return"
    \n"},UC.dt_open=function(){return"
    "},UC.dd_open=function(){return"
    "},UC.dl_close=function(){return"
    \n"},UC.dt_close=function(){return"\n"},UC.dd_close=function(){return"

    =rS6a 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/games.svg b/app/static/img/games.svg new file mode 100644 index 0000000..b2acd29 --- /dev/null +++ b/app/static/img/games.svg @@ -0,0 +1,482 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/static/img/linux-penguin.svg b/app/static/img/linux-penguin.svg new file mode 100644 index 0000000..5bb67f2 --- /dev/null +++ b/app/static/img/linux-penguin.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/static/img/placeholder.png b/app/static/img/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..9449ec4045fb9cefce531066d14d130078055984 GIT binary patch literal 6289 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 literal 0 HcmV?d00001 diff --git a/app/static/img/syntax.ico b/app/static/img/syntax.ico new file mode 100644 index 0000000000000000000000000000000000000000..ef302ba26a703132fa395deec5372a6f2923d97e GIT binary patch literal 117136 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 literal 0 HcmV?d00001 diff --git a/app/static/img/thumbs.svg b/app/static/img/thumbs.svg new file mode 100644 index 0000000..9c9f509 --- /dev/null +++ b/app/static/img/thumbs.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/app/static/img/thumbsup.png b/app/static/img/thumbsup.png new file mode 100644 index 0000000000000000000000000000000000000000..97f3edf6324678d90f39a04b609d71272fc395f0 GIT binary patch literal 4447 zcmaJ_X*|^H-yX&;N0um}nL#JQm_dv!V;{|oELkF%4TD+Cj5TCQDcSd>?9*~cN=hR} zB1^UwWJ#n@vP?PBqGz1{>HMD;&v|}t?)!UxuIu_P_w{>opFfJVmy%GD0000|Cx82e&AO`dQ zLn)Mh&`g#K>A&^s?KpKn2 z45ZOP*4Cf{7#x92-HtW?B498kC@PbMqY_9c8*>O>LYGV?n%KbMNF!rgeLc7x3zU>HKI&|k*Bi3>9fY6mN@5J%=O&J5^HGGbs z73hMB*fjvsr9yp|@OjU?a-?M#(o)=Q$mgn?D~M8RS0|_wwl~`(3=c7-reGKiv0G^? zF%g_6rh_Jfr#N?4KGvz-{T{k~S0A?VZb-FHPoFYsz`-{nu7iqI3&)lA=N`5;Vg&9uK_5XYkpeBk;A1cFOFzZc9Rb?YrLODvQpOC^I zANvjgn}Y2|D`nm(e%{-5qhZZIh!ZY1I%^)yQoieL_CoxsDv!;@#gbH1^_2ny@!^dh zxaPXR(I1wWp)a0uSVey}}ke?@=v zQ$p@_R#3K26HTOa^wxEeIWY&q{XRIv6;L)$lu%-4YL=EL!!?vm;cBiv+7UhSNY`%p z#xN`!wQ&pN%I{=Tu$pv?>zDZQ^=+o4@Kik|^5B7&@grbhs(Q5^K=EK;n-@`HyAwtM zT7Z>+R_uOm3m4wkDnPt|D}fbR`SqI@X;m66lPAod6X?F87>@z|#fw6v<3u{B#tN{VUCUd@ccvdeK2MGu>s z!LB!%{zQr5W+%2-u@$?#jtRHjfNStu6x9I`LPoCW87GilRM{}H}P?Y$wc=*nw zhAZF%=$SA)EDH@brUHuaWBzD%?)7&wg$17qYhYCAnm%b(g|~C`ZVxHFtZ^kVp<;Dl zpykm9cb}U8!s)L!Gx|g}eba~^WUfsbgb{UilR zWdk5aQ(~qP^dkN&WGf_*DfNXLo)gnBy`1N-1x}@@6q3;&gFbBJljV$BB9xZK&(Q4m z0!yCzf9r3(4H3FHZFN=up8M?-Xt7|)*aWX+9~Lb`oWvTVyacPtEV_m=nFGw6n*MPe zrB}ttEVZ^5`i*mso4xODHOsWXq{{R5B3Bj-E%qELa+69YR6?@z=%=*EBKrPbe z>qUmjvO6w<-&7|{k+sr$p{0B)ocobXv{#Gr3v1KX^|`;U!6VSdmOYIvEUdII=@svxX!>zq<4Ianzojb==9BxB=Mv^aj?xMD zLwoz)8;R;m?f99SuQ)w0m2Wh)rJ|^}+2>Y+1PSss8OH;g+aR{vO>1 zyLb5h?kW^pkf|BO`OABe9xhSMM`2H1vvX6`A9JoRapA zI*AA-Tns^HOjue-^E7v6c&8Rf-V(PF-rVQ#Q0ldICat0=0O`vj5^~-MWU74m7L{33 zXtc0SOT4%$2o>nDYpbc>5_6D=Ym%9(0wFvRvEp-1E!@M_b-sd8qI2M+W(C;kX?6Ss z>G(+jS>a~Kr>FCR(8RUz&==nj)KdB3NU_uY6M;vjuX@x{K-Yk4VQL&CbxC^ivKS{T@AQcTQ|&CH6?m(U$Ja zlwJc*R~K01em|pV44oDBcAN{E5kj;q?^xqbS5(5_?^185%d9+8FJ7-|eYy%IXTPO* zXLH*{vF+xvevi5>7xf;gPL{^ombfgR&FHi2*C1-8LV~QCE9-YWkm4duf80K0*_42e z-`jaq@d?%MS+%;q&j)wnTgN9M^{GuX_jb!qt0s1zrU|l@POp;oq)SE~{JM4+DPq~$ zBP9LetAgExqHTOz+RHSN$F>H^yTDf=;HhNkB1=aIm2`LK{p_Hsth3VdzAXm}&+tMV zZYQnn)P0S85>(K@({x~zvfmAcBs-`^mNzQa&xpjS&P{`ouKp0Hw98k}O75(AHS1{* z+W&3(+Uh+!*%MaawA!Jf=V)N3LEaq7>w&VwXbaORE^qo^fYcBF)nkmPpcD?ZNMr=x zI0eow#aw6fqI@o?2gmgF9G|8bR(u(IqY7CGUL9?U7CHpZ=0?o9tKZS?(SnqH8qG#U z4&_RSYr=drdPV^y<&W(it9&$`-X={rT=}~9!NohG5$(6c{s1|yO#{|u0`_(6m?znp z4e|sJC$CSy&{kyzZkKJJOsCqSokecRN*0uaT*#NnQfG-U9|7#AcFGB~_O>JpvZ){B z1x9Xr!@6reAmGWlKLNa^l(duFW2YtO_JIbGIF~BNpyt}1peJ%Ud1v5)ZHLv4Q!d-O zr&pa}=Uy}FJ=gp8Ry%LE5N2dkuzzs zoX`?t>bE1~vEBPEzML5T!|kx*chO;8RueQn?H$RvGpR>t}%PHu1t!kvI|>N=O)^WR+-mr*X` zsvC5}f>Kfd=L!=C()5{ABpw;VN0~C=HscLF!)h#Whr53TpXe>5+a?&Tx?>U}~!_8Ff z#`WxwW-oAJHhGI%TU&>0otHN@W1g#&wd>~h$$y^T5LgKALhNl3ST8)BSo;ulBt_KI zzj9Ghq2qze5(@HVzm;6R<9JLIN^J~q_O_T(r@?&zVlH|G6kxhH4(@x#-m{MmRF!2uO5w*~xosEF?`PlfkjEvHC`9F$i<<+Uxo!EO!7- zo<%pwLYDEt!3QfgJBD#F{j;<9Tckb(mt)8B{!}$Z4J-`HBaCMTx|GI}z8^Z1z9rUT3+FQ>RctTg@x@N%KbJ|rCzc$dK=ShPgf8s1 zCkXHA^Hl1(vUq;|!)Q*}hmoxJ?}J?2+#c=MKK1$pCtTxT`SLP#otpqW*Zq04Zty6V zGSQUv{d)}D!UAh&Z{NuarBEnvnL5vgM8}j7#!=s_?Ck70Ai1b>E+o$Hc#cMuZN5jX z?}KP(UteFrAOsnY$Lqp1zT_NEr~TPg}fnvRYDPSB)t5^9vQxA=Qw9^`Gfe z38$ITR^bb8`GM!mtj`GRSqrs;3Dw=yuQ~O z?yNT$FHzJ(FRo~Bj<4B8iCMnFQHF47_|B?;yBxiWKg6!Dq}-9%gbAKjN;u&CQz79b za8v*5y`z~2_H%^ywI^m`r50bEhNiW)w2kDoUpoo$nZQlX6t)Y(`<}_B{Y#8 zKrR`1@xoR@LLysQ@tR2v_i?&P2~2n_R6aXOGVo)C($^nxf1ZTho3}#wEgf2H{Tx1| zEy}RHl`iabPa>YR{L+qXbSDtF8T_yT+?P&WxG~!Cylz1dR&SoX?2-1mAS!-ctg6_I z=sX?``y(-TLMkws+5@?%pM^W!fEZ)bwloO6Fp$>$u*Q#5YTOsX4I$==%FO#1=N7 zx88(Y{A9noa%dCk$Y^X!N1UmjG`#8JkFYbwW*5mhBHWX(o{j7s>4 setTimeout(r, 500)); + } + RenderWaitingText.style.display = 'none' + var AvatarImage = document.getElementById('avatar-image') + var AvatarSource = AvatarImage.src // Unmodified src "/Thumbs/Avatar.ashx?x=420&y=420&userId=1" + if (AvatarSource.includes('&refresh=')) { + AvatarSource = AvatarSource.substring(0, AvatarSource.indexOf('&refresh=')) + } + AvatarImage.src = AvatarSource + '&refresh=' + Math.random() +} + +async function UpdateAvatar() { + var SaveChangesButton = document.getElementById('savechanges-btn') + SaveChangesButton.style.display = 'none' + var CurrentlyEquippedArray = [] + for (let i = 0; i < AssetsCurrentlyEquipped.length; i++) { + CurrentlyEquippedArray.push(AssetTypeDict[AssetsCurrentlyEquipped[i]].id) + } + var UpdateAvatarResponse = await fetch('/avatar/setavatar', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + 'bodyColors': [UserBodyColors.Head, UserBodyColors.Torso, UserBodyColors.LeftArm, UserBodyColors.RightArm, UserBodyColors.LeftLeg, UserBodyColors.RightLeg], + "assets": CurrentlyEquippedArray, + "rigType": rigType, + "scales": UserAvatarScaling + }) + }) + if (UpdateAvatarResponse.status == 200) { + WaitForRenderReady() + } else if (UpdateAvatarResponse.status == 400) { + alert('Something went wrong!') + } else if (UpdateAvatarResponse.status == 429) { + alert('Slow down! You are changing your avatar too fast!') + SaveChangesButton.style.display = 'block' + } else { + alert('Something went wrong!') + } +} + +async function ConvertBodyColortoHex( bodycolor ) { + for (let i = 0; i < AvatarRules.bodyColorsPalette.length; i++) { + if (AvatarRules.bodyColorsPalette[i].brickColorId == bodycolor) { + return AvatarRules.bodyColorsPalette[i].hexColor + } + } + return '#FFFFFF' +} + +async function UpdateAssetCards( assetId ) { + var AssetCards = document.getElementsByClassName(`asset-card-${assetId}`) + var IsAssetEquipped = AssetsCurrentlyEquipped.includes(assetId) + for (let i = 0; i < AssetCards.length; i++) { + var ToggleWearButton = AssetCards[i].getElementsByClassName('asset-card-button')[0] + if (IsAssetEquipped) { + ToggleWearButton.innerHTML = 'Remove' + } else { + ToggleWearButton.innerHTML = 'Wear' + if (AssetCards[i].getAttribute("data-isundercurrentwearing") == "true") { + AssetCards[i].remove() + } + } + } +} + +async function WearAsset( assetId ) { + if (AssetsCurrentlyEquipped.includes(assetId)) { + return + } + assetType = AssetTypeDict[assetId].assetType + var LimitForAssetType = await GetLimitForAssetType(assetType) + var CountForAssetType = 0 + for (let i = 0; i < AssetsCurrentlyEquipped.length; i++) { + if (AssetTypeDict[AssetsCurrentlyEquipped[i]].assetType == assetType) { + CountForAssetType++ + } + } + if (CountForAssetType >= LimitForAssetType) { + for (let i = 0; i < AssetsCurrentlyEquipped.length; i++) { + if (AssetTypeDict[AssetsCurrentlyEquipped[i]].assetType == assetType) { + var AssetId = AssetsCurrentlyEquipped[i] + AssetsCurrentlyEquipped.splice(i, 1) + UpdateAssetCards(AssetId) + break + } + } + } + if (LimitForAssetType > 0) { + AssetsCurrentlyEquipped.push(assetId) + var CurrentlyWearingCardHolder = document.getElementById('currentlywearing-card-holder') + var NewAssetCard = await CreateNewAssetCard(assetId, AssetTypeDict[assetId].name) + CurrentlyWearingCardHolder.appendChild(NewAssetCard) + NewAssetCard.setAttribute("data-isundercurrentwearing", "true") + } + UpdateAssetCards(assetId) + document.getElementById('savechanges-btn').style.display = 'block' +} + +async function RemoveAsset( assetId ) { + for (let i = 0; i < AssetsCurrentlyEquipped.length; i++) { + if (AssetsCurrentlyEquipped[i] == assetId) { + AssetsCurrentlyEquipped.splice(i, 1) + break + } + } + UpdateAssetCards(assetId) + document.getElementById('savechanges-btn').style.display = 'block' +} + +async function CreateNewAssetCard( AssetId, Name ) { + var NewAssetCard = AssetCardTemplate.cloneNode(true) + NewAssetCard.setAttribute("class", NewAssetCard.getAttribute("class").replace("template", AssetId)) + NewAssetCard.style.display = 'block' + var AssetImage = NewAssetCard.getElementsByClassName('asset-card-img')[0] + var AssetName = NewAssetCard.getElementsByClassName('asset-card-assetname')[0] + var AssetToggleButton = NewAssetCard.getElementsByClassName('asset-card-button')[0] + AssetImage.src = `/Thumbs/Asset.ashx?x=150&y=150&assetId=${AssetId}` + AssetName.innerText = Name + AssetName.href = `/catalog/${AssetId}/` + + //var AssetsCardHolder = document.getElementById('assets-card-holder') + //AssetsCardHolder.appendChild(NewAssetCard) + + if (AssetsCurrentlyEquipped.includes(AssetId)) { + AssetToggleButton.innerText = 'Remove' + } + if ( AssetTypeDict[AssetId].moderation_status == 0 ) { + AssetToggleButton.addEventListener('click', async () => { + if (AssetToggleButton.innerText == 'Wear') { + AssetToggleButton.innerText = 'Remove' + WearAsset(AssetId) + } else if (AssetToggleButton.innerText == 'Remove') { + AssetToggleButton.innerText = 'Wear' + RemoveAsset(AssetId) + } + }) + } else { + AssetToggleButton.disabled = true + if ( AssetTypeDict[AssetId].moderation_status == 1 ) { + AssetToggleButton.innerText = 'Pending' + } else if ( AssetTypeDict[AssetId].moderation_status == 2 ) { + AssetToggleButton.innerText = 'Deleted' + } + } + + return NewAssetCard +} + +async function LoadPageForAsset( AssetType ) { + var AssetsArray = await GetAssetsForType(AssetType, PageNumber) + var AssetsCardHolder = document.getElementById('assets-card-holder') + AssetsCardHolder.innerHTML = '' + for (let i = 0; i < AssetsArray.length; i++) { + var Asset = AssetsArray[i] + var AssetCard = await CreateNewAssetCard(Asset.id, Asset.name) + AssetsCardHolder.appendChild(AssetCard) + } + + if (PageNumber > 0) { + PaginationPreviousBtn.disabled = false + } else { + PaginationPreviousBtn.disabled = true + } + if (!IsThisTheLastPage) { + PaginationNextBtn.disabled = false + } else { + PaginationNextBtn.disabled = true + } + if (AssetsArray.length == 0) { + AssetsCardHolder.innerHTML = '

    +z4i=kMVk{6GF< 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%0De&5r=)a>*yp5kXekTI|*Wd~~fMwLD>CwTB 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

    \n"};var VC=UC.getBreak=function getBreak(i,s){return(s=nextToken(i,s))1)break;if(41===u&&--m<0)break;s++}return _!==s&&(v=unescapeMd(i.src.slice(_,s)),!!i.parser.validateLink(v)&&(i.linkContent=v,i.pos=s,!0))}function parseLinkTitle(i,s){var u,m=s,v=i.posMax,_=i.src.charCodeAt(s);if(34!==_&&39!==_&&40!==_)return!1;for(s++,40===_&&(_=41);s=i.length)&&!YC.test(i[s])}function replaceAt(i,s,u){return i.substr(0,s)+u+i.substr(s+1)}var QC=[["block",function block(i){i.inlineMode?i.tokens.push({type:"inline",content:i.src.replace(/\n/g," ").trim(),level:0,lines:[0,1],children:[]}):i.block.parse(i.src,i.options,i.env,i.tokens)}],["abbr",function abbr(i){var s,u,m,v,_=i.tokens;if(!i.inlineMode)for(s=1,u=_.length-1;s0?j[s].count:1,m=0;m=0;s--)if("text"===(_=v[s]).type){for($=0,j=_.content,X.lastIndex=0,W=_.level,M=[];Y=X.exec(j);)X.lastIndex>$&&M.push({type:"text",content:j.slice($,Y.index+Y[1].length),level:W}),M.push({type:"abbr_open",title:i.env.abbreviations[":"+Y[2]],level:W++}),M.push({type:"text",content:Y[2],level:W}),M.push({type:"abbr_close",level:--W}),$=X.lastIndex-Y[3].length;M.length&&($=0;_--)if("inline"===i.tokens[_].type)for(s=(v=i.tokens[_].children).length-1;s>=0;s--)"text"===(u=v[s]).type&&(m=replaceScopedAbbr(m=u.content),KC.test(m)&&(m=m.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1—$2").replace(/(^|\s)--(\s|$)/gm,"$1–$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1–$2")),u.content=m)}],["smartquotes",function smartquotes(i){var s,u,m,v,_,j,M,$,W,X,Y,Z,ee,ae,ie,le,ce;if(i.options.typographer)for(ce=[],ie=i.tokens.length-1;ie>=0;ie--)if("inline"===i.tokens[ie].type)for(le=i.tokens[ie].children,ce.length=0,s=0;s=0&&!(ce[ee].level<=M);ee--);ce.length=ee+1,_=0,j=(m=u.content).length;e:for(;_=0&&(X=ce[ee],!(ce[ee].level=(v=i.eMarks[s])||42!==(u=i.src.charCodeAt(m++))&&45!==u&&43!==u||m=v)return-1;if((u=i.src.charCodeAt(m++))<48||u>57)return-1;for(;;){if(m>=v)return-1;if(!((u=i.src.charCodeAt(m++))>=48&&u<=57)){if(41===u||46===u)break;return-1}}return m=this.eMarks[i]},StateBlock.prototype.skipEmptyLines=function skipEmptyLines(i){for(var s=this.lineMax;iu;)if(s!==this.src.charCodeAt(--i))return i+1;return i},StateBlock.prototype.getLines=function getLines(i,s,u,m){var v,_,j,M,$,W=i;if(i>=s)return"";if(W+1===s)return _=this.bMarks[W]+Math.min(this.tShift[W],u),j=m?this.eMarks[W]+1:this.eMarks[W],this.src.slice(_,j);for(M=new Array(s-i),v=0;Wu&&($=u),$<0&&($=0),_=this.bMarks[W]+$,j=W+1]/,rj=/^<\/([a-zA-Z]{1,15})[\s>]/;function index_browser_getLine(i,s){var u=i.bMarks[s]+i.blkIndent,m=i.eMarks[s];return i.src.substr(u,m-u)}function skipMarker(i,s){var u,m,v=i.bMarks[s]+i.tShift[s],_=i.eMarks[s];return v>=_||126!==(m=i.src.charCodeAt(v++))&&58!==m||v===(u=i.skipSpaces(v))||u>=_?-1:u}var nj=[["code",function code(i,s,u){var m,v;if(i.tShift[s]-i.blkIndent<4)return!1;for(v=m=s+1;m=4))break;v=++m}return i.line=m,i.tokens.push({type:"code",content:i.getLines(s,v,4+i.blkIndent,!0),block:!0,lines:[s,i.line],level:i.level}),!0}],["fences",function fences(i,s,u,m){var v,_,j,M,$,W=!1,X=i.bMarks[s]+i.tShift[s],Y=i.eMarks[s];if(X+3>Y)return!1;if(126!==(v=i.src.charCodeAt(X))&&96!==v)return!1;if($=X,(_=(X=i.skipChars(X,v))-$)<3)return!1;if((j=i.src.slice(X,Y).trim()).indexOf("`")>=0)return!1;if(m)return!0;for(M=s;!(++M>=u)&&!((X=$=i.bMarks[M]+i.tShift[M])<(Y=i.eMarks[M])&&i.tShift[M]=4||(X=i.skipChars(X,v))-$<_||(X=i.skipSpaces(X))le)return!1;if(62!==i.src.charCodeAt(ie++))return!1;if(i.level>=i.options.maxNesting)return!1;if(m)return!0;for(32===i.src.charCodeAt(ie)&&ie++,$=i.blkIndent,i.blkIndent=0,M=[i.bMarks[s]],i.bMarks[s]=ie,_=(ie=ie=le,j=[i.tShift[s]],i.tShift[s]=ie-i.bMarks[s],Y=i.parser.ruler.getRules("blockquote"),v=s+1;v=(le=i.eMarks[v]));v++)if(62!==i.src.charCodeAt(ie++)){if(_)break;for(ae=!1,Z=0,ee=Y.length;Z=le,j.push(i.tShift[v]),i.tShift[v]=ie-i.bMarks[v];for(W=i.parentType,i.parentType="blockquote",i.tokens.push({type:"blockquote_open",lines:X=[s,0],level:i.level++}),i.parser.tokenize(i,s,v),i.tokens.push({type:"blockquote_close",level:--i.level}),i.parentType=W,X[1]=i.line,Z=0;Z$)return!1;if(42!==(v=i.src.charCodeAt(M++))&&45!==v&&95!==v)return!1;for(_=1;M<$;){if((j=i.src.charCodeAt(M++))!==v&&32!==j)return!1;j===v&&_++}return!(_<3)&&(m||(i.line=s+1,i.tokens.push({type:"hr",lines:[s,i.line],level:i.level})),!0)},["paragraph","blockquote","list"]],["list",function index_browser_list(i,s,u,m){var v,_,j,M,$,W,X,Y,Z,ee,ae,ie,le,ce,pe,de,fe,ye,be,_e,we,Se=!0;if((Y=skipOrderedListMarker(i,s))>=0)ie=!0;else{if(!((Y=skipBulletListMarker(i,s))>=0))return!1;ie=!1}if(i.level>=i.options.maxNesting)return!1;if(ae=i.src.charCodeAt(Y-1),m)return!0;for(ce=i.tokens.length,ie?(X=i.bMarks[s]+i.tShift[s],ee=Number(i.src.substr(X,Y-X-1)),i.tokens.push({type:"ordered_list_open",order:ee,lines:de=[s,0],level:i.level++})):i.tokens.push({type:"bullet_list_open",lines:de=[s,0],level:i.level++}),v=s,pe=!1,ye=i.parser.ruler.getRules("list");!(!(v=i.eMarks[v]?1:le-Y)>4&&(Z=1),Z<1&&(Z=1),_=Y-i.bMarks[v]+Z,i.tokens.push({type:"list_item_open",lines:fe=[s,0],level:i.level++}),M=i.blkIndent,$=i.tight,j=i.tShift[s],W=i.parentType,i.tShift[s]=le-i.bMarks[s],i.blkIndent=_,i.tight=!0,i.parentType="list",i.parser.tokenize(i,s,u,!0),i.tight&&!pe||(Se=!1),pe=i.line-s>1&&i.isEmpty(i.line-1),i.blkIndent=M,i.tShift[s]=j,i.tight=$,i.parentType=W,i.tokens.push({type:"list_item_close",level:--i.level}),v=s=i.line,fe[1]=v,le=i.bMarks[s],v>=u)||i.isEmpty(v)||i.tShift[v]X)return!1;if(91!==i.src.charCodeAt(W))return!1;if(94!==i.src.charCodeAt(W+1))return!1;if(i.level>=i.options.maxNesting)return!1;for(M=W+2;M=X||58!==i.src.charCodeAt(++M))&&(m||(M++,i.env.footnotes||(i.env.footnotes={}),i.env.footnotes.refs||(i.env.footnotes.refs={}),$=i.src.slice(W+2,M-2),i.env.footnotes.refs[":"+$]=-1,i.tokens.push({type:"footnote_reference_open",label:$,level:i.level++}),v=i.bMarks[s],_=i.tShift[s],j=i.parentType,i.tShift[s]=i.skipSpaces(M)-M,i.bMarks[s]=M,i.blkIndent+=4,i.parentType="footnote",i.tShift[s]=$)return!1;if(35!==(v=i.src.charCodeAt(M))||M>=$)return!1;for(_=1,v=i.src.charCodeAt(++M);35===v&&M<$&&_<=6;)_++,v=i.src.charCodeAt(++M);return!(_>6||M<$&&32!==v)&&(m||($=i.skipCharsBack($,32,M),(j=i.skipCharsBack($,35,M))>M&&32===i.src.charCodeAt(j-1)&&($=j),i.line=s+1,i.tokens.push({type:"heading_open",hLevel:_,lines:[s,i.line],level:i.level}),M<$&&i.tokens.push({type:"inline",content:i.src.slice(M,$).trim(),level:i.level+1,lines:[s,i.line],children:[]}),i.tokens.push({type:"heading_close",hLevel:_,level:i.level})),!0)},["paragraph","blockquote"]],["lheading",function lheading(i,s,u){var m,v,_,j=s+1;return!(j>=u)&&(!(i.tShift[j]3)&&(!((v=i.bMarks[j]+i.tShift[j])>=(_=i.eMarks[j]))&&((45===(m=i.src.charCodeAt(v))||61===m)&&(v=i.skipChars(v,m),!((v=i.skipSpaces(v))<_)&&(v=i.bMarks[s]+i.tShift[s],i.line=j+1,i.tokens.push({type:"heading_open",hLevel:61===m?1:2,lines:[s,i.line],level:i.level}),i.tokens.push({type:"inline",content:i.src.slice(v,i.eMarks[s]).trim(),level:i.level+1,lines:[s,i.line-1],children:[]}),i.tokens.push({type:"heading_close",hLevel:61===m?1:2,level:i.level}),!0))))))}],["htmlblock",function htmlblock(i,s,u,m){var v,_,j,M=i.bMarks[s],$=i.eMarks[s],W=i.tShift[s];if(M+=W,!i.options.html)return!1;if(W>3||M+2>=$)return!1;if(60!==i.src.charCodeAt(M))return!1;if(33===(v=i.src.charCodeAt(M+1))||63===v){if(m)return!0}else{if(47!==v&&!function isLetter$1(i){var s=32|i;return s>=97&&s<=122}(v))return!1;if(47===v){if(!(_=i.src.slice(M,$).match(rj)))return!1}else if(!(_=i.src.slice(M,$).match(tj)))return!1;if(!0!==ZC[_[1].toLowerCase()])return!1;if(m)return!0}for(j=s+1;ju)return!1;if($=s+1,i.tShift[$]=i.eMarks[$])return!1;if(124!==(v=i.src.charCodeAt(j))&&45!==v&&58!==v)return!1;if(_=index_browser_getLine(i,s+1),!/^[-:| ]+$/.test(_))return!1;if((W=_.split("|"))<=2)return!1;for(Y=[],M=0;M=0;if(X=s+1,i.isEmpty(X)&&++X>u)return!1;if(i.tShift[X]=i.options.maxNesting)return!1;W=i.tokens.length,i.tokens.push({type:"dl_open",lines:$=[s,0],level:i.level++}),j=s,_=X;e:for(;;){for(ce=!0,le=!1,i.tokens.push({type:"dt_open",lines:[j,j],level:i.level++}),i.tokens.push({type:"inline",content:i.getLines(j,j+1,i.blkIndent,!1).trim(),level:i.level+1,lines:[j,j],children:[]}),i.tokens.push({type:"dt_close",level:--i.level});;){if(i.tokens.push({type:"dd_open",lines:M=[X,0],level:i.level++}),ie=i.tight,Z=i.ddIndent,Y=i.blkIndent,ae=i.tShift[_],ee=i.parentType,i.blkIndent=i.ddIndent=i.tShift[_]+2,i.tShift[_]=v-i.bMarks[_],i.tight=!0,i.parentType="deflist",i.parser.tokenize(i,_,u,!0),i.tight&&!le||(ce=!1),le=i.line-_>1&&i.isEmpty(i.line-1),i.tShift[_]=ae,i.tight=ie,i.parentType=ee,i.blkIndent=Y,i.ddIndent=Z,i.tokens.push({type:"dd_close",level:--i.level}),M[1]=X=i.line,X>=u)break e;if(i.tShift[X]=u)break;if(j=X,i.isEmpty(j))break;if(i.tShift[j]=u)break;if(i.isEmpty(_)&&_++,_>=u)break;if(i.tShift[_]3)){for(v=!1,_=0,j=M.length;_=u))&&!(i.tShift[j]=0&&(i=i.replace(oj,(function(s,u){var m;return 10===i.charCodeAt(u)?(_=u+1,j=0,s):(m=" ".slice((u-_-j)%4),j=u-_+1,m)}))),v=new StateBlock(i,this,s,u,m),this.tokenize(v,v.line,v.lineMax)};for(var pj=[],yj=0;yj<256;yj++)pj.push(0);function isAlphaNum(i){return i>=48&&i<=57||i>=65&&i<=90||i>=97&&i<=122}function scanDelims(i,s){var u,m,v,_=s,j=!0,M=!0,$=i.posMax,W=i.src.charCodeAt(s);for(u=s>0?i.src.charCodeAt(s-1):-1;_<$&&i.src.charCodeAt(_)===W;)_++;return _>=$&&(j=!1),(v=_-s)>=4?j=M=!1:(32!==(m=_<$?i.src.charCodeAt(_):-1)&&10!==m||(j=!1),32!==u&&10!==u||(M=!1),95===W&&(isAlphaNum(u)&&(j=!1),isAlphaNum(m)&&(M=!1))),{can_open:j,can_close:M,delims:v}}"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach((function(i){pj[i.charCodeAt(0)]=1}));var vj=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;var _j=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;var Ej=["coap","doi","javascript","aaa","aaas","about","acap","cap","cid","crid","data","dav","dict","dns","file","ftp","geo","go","gopher","h323","http","https","iax","icap","im","imap","info","ipp","iris","iris.beep","iris.xpc","iris.xpcs","iris.lwz","ldap","mailto","mid","msrp","msrps","mtqp","mupdate","news","nfs","ni","nih","nntp","opaquelocktoken","pop","pres","rtsp","service","session","shttp","sieve","sip","sips","sms","snmp","soap.beep","soap.beeps","tag","tel","telnet","tftp","thismessage","tn3270","tip","tv","urn","vemmi","ws","wss","xcon","xcon-userid","xmlrpc.beep","xmlrpc.beeps","xmpp","z39.50r","z39.50s","adiumxtra","afp","afs","aim","apt","attachment","aw","beshare","bitcoin","bolo","callto","chrome","chrome-extension","com-eventbrite-attendee","content","cvs","dlna-playsingle","dlna-playcontainer","dtn","dvb","ed2k","facetime","feed","finger","fish","gg","git","gizmoproject","gtalk","hcp","icon","ipn","irc","irc6","ircs","itms","jar","jms","keyparc","lastfm","ldaps","magnet","maps","market","message","mms","ms-help","msnim","mumble","mvn","notes","oid","palm","paparazzi","platform","proxy","psyc","query","res","resource","rmi","rsync","rtmp","secondlife","sftp","sgn","skype","smb","soldat","spotify","ssh","steam","svn","teamspeak","things","udp","unreal","ut2004","ventrilo","view-source","webcal","wtai","wyciwyg","xfire","xri","ymsgr"],xj=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,Aj=/^<([a-zA-Z.\-]{1,25}):([^<>\x00-\x20]*)>/;function replace$1(i,s){return i=i.source,s=s||"",function self(u,m){return u?(m=m.source||m,i=i.replace(u,m),self):new RegExp(i,s)}}var Cj=replace$1(/(?:unquoted|single_quoted|double_quoted)/)("unquoted",/[^"'=<>`\x00-\x20]+/)("single_quoted",/'[^']*'/)("double_quoted",/"[^"]*"/)(),jj=replace$1(/(?:\s+attr_name(?:\s*=\s*attr_value)?)/)("attr_name",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)("attr_value",Cj)(),Ij=replace$1(/<[A-Za-z][A-Za-z0-9]*attribute*\s*\/?>/)("attribute",jj)(),Bj=replace$1(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)("open_tag",Ij)("close_tag",/<\/[A-Za-z][A-Za-z0-9]*\s*>/)("comment",/|/)("processing",/<[?].*?[?]>/)("declaration",/]*>/)("cdata",//)();var Dj=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,Fj=/^&([a-z][a-z0-9]{1,31});/i;var qj=[["text",function index_browser_text(i,s){for(var u=i.pos;u=0&&32===i.pending.charCodeAt(u))if(u>=1&&32===i.pending.charCodeAt(u-1)){for(var _=u-2;_>=0;_--)if(32!==i.pending.charCodeAt(_)){i.pending=i.pending.substring(0,_+1);break}i.push({type:"hardbreak",level:i.level})}else i.pending=i.pending.slice(0,-1),i.push({type:"softbreak",level:i.level});else i.push({type:"softbreak",level:i.level});for(v++;v=M)return!1;if(126!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),126===_)return!1;if(126===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m$+3)return i.pos+=m-$,s||(i.pending+=i.src.slice($,m)),!0;for(i.pos=$+2,v=1;i.pos+1=M)return!1;if(43!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),43===_)return!1;if(43===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m=M)return!1;if(61!==i.src.charCodeAt($+1))return!1;if(i.level>=i.options.maxNesting)return!1;if(_=$>0?i.src.charCodeAt($-1):-1,j=i.src.charCodeAt($+2),61===_)return!1;if(61===j)return!1;if(32===j||10===j)return!1;for(m=$+2;m=i.options.maxNesting)return!1;for(i.pos=X+u,M=[u];i.pos=v)return!1;if(i.level>=i.options.maxNesting)return!1;for(i.pos=_+1;i.pos=v)return!1;if(i.level>=i.options.maxNesting)return!1;for(i.pos=_+1;i.pos=i.options.maxNesting)return!1;if(u=ee+1,(m=parseLinkLabel(i,ee))<0)return!1;if((M=m+1)=Z)return!1;for(ee=M,parseLinkDestination(i,M)?(_=i.linkContent,M=i.pos):_="",ee=M;M=Z||41!==i.src.charCodeAt(M))return i.pos=Y,!1;M++}else{if(i.linkLevel>0)return!1;for(;M=0?v=i.src.slice(ee,M++):M=ee-1),v||(void 0===v&&(M=m+1),v=i.src.slice(u,m)),!($=i.env.references[normalizeReference(v)]))return i.pos=Y,!1;_=$.href,j=$.title}return s||(i.pos=u,i.posMax=m,X?i.push({type:"image",src:_,title:j,alt:i.src.substr(u,m-u),level:i.level}):(i.push({type:"link_open",href:_,title:j,level:i.level++}),i.linkLevel++,i.parser.tokenize(i),i.linkLevel--,i.push({type:"link_close",level:--i.level}))),i.pos=M,i.posMax=Z,!0}],["footnote_inline",function footnote_inline(i,s){var u,m,v,_,j=i.posMax,M=i.pos;return!(M+2>=j)&&(94===i.src.charCodeAt(M)&&(91===i.src.charCodeAt(M+1)&&(!(i.level>=i.options.maxNesting)&&(u=M+2,!((m=parseLinkLabel(i,M+1))<0)&&(s||(i.env.footnotes||(i.env.footnotes={}),i.env.footnotes.list||(i.env.footnotes.list=[]),v=i.env.footnotes.list.length,i.pos=u,i.posMax=m,i.push({type:"footnote_ref",id:v,level:i.level}),i.linkLevel++,_=i.tokens.length,i.parser.tokenize(i),i.env.footnotes.list[v]={tokens:i.tokens.splice(_)},i.linkLevel--),i.pos=m+1,i.posMax=j,!0)))))}],["footnote_ref",function footnote_ref(i,s){var u,m,v,_,j=i.posMax,M=i.pos;if(M+3>j)return!1;if(!i.env.footnotes||!i.env.footnotes.refs)return!1;if(91!==i.src.charCodeAt(M))return!1;if(94!==i.src.charCodeAt(M+1))return!1;if(i.level>=i.options.maxNesting)return!1;for(m=M+2;m=j)&&(m++,u=i.src.slice(M+2,m-1),void 0!==i.env.footnotes.refs[":"+u]&&(s||(i.env.footnotes.list||(i.env.footnotes.list=[]),i.env.footnotes.refs[":"+u]<0?(v=i.env.footnotes.list.length,i.env.footnotes.list[v]={label:u,count:0},i.env.footnotes.refs[":"+u]=v):v=i.env.footnotes.refs[":"+u],_=i.env.footnotes.list[v].count,i.env.footnotes.list[v].count++,i.push({type:"footnote_ref",id:v,subId:_,level:i.level})),i.pos=m,i.posMax=j,!0)))}],["autolink",function autolink(i,s){var u,m,v,_,j,M=i.pos;return 60===i.src.charCodeAt(M)&&(!((u=i.src.slice(M)).indexOf(">")<0)&&((m=u.match(Aj))?!(Ej.indexOf(m[1].toLowerCase())<0)&&(j=normalizeLink(_=m[0].slice(1,-1)),!!i.parser.validateLink(_)&&(s||(i.push({type:"link_open",href:j,level:i.level}),i.push({type:"text",content:_,level:i.level+1}),i.push({type:"link_close",level:i.level})),i.pos+=m[0].length,!0)):!!(v=u.match(xj))&&(j=normalizeLink("mailto:"+(_=v[0].slice(1,-1))),!!i.parser.validateLink(j)&&(s||(i.push({type:"link_open",href:j,level:i.level}),i.push({type:"text",content:_,level:i.level+1}),i.push({type:"link_close",level:i.level})),i.pos+=v[0].length,!0))))}],["htmltag",function htmltag(i,s){var u,m,v,_=i.pos;return!!i.options.html&&(v=i.posMax,!(60!==i.src.charCodeAt(_)||_+2>=v)&&(!(33!==(u=i.src.charCodeAt(_+1))&&63!==u&&47!==u&&!function isLetter$2(i){var s=32|i;return s>=97&&s<=122}(u))&&(!!(m=i.src.slice(_).match(Bj))&&(s||i.push({type:"htmltag",content:i.src.slice(_,_+m[0].length),level:i.level}),i.pos+=m[0].length,!0))))}],["entity",function entity(i,s){var u,m,v=i.pos,_=i.posMax;if(38!==i.src.charCodeAt(v))return!1;if(v+1<_)if(35===i.src.charCodeAt(v+1)){if(m=i.src.slice(v).match(Dj))return s||(u="x"===m[1][0].toLowerCase()?parseInt(m[1].slice(1),16):parseInt(m[1],10),i.pending+=isValidEntityCode(u)?fromCodePoint(u):fromCodePoint(65533)),i.pos+=m[0].length,!0}else if(m=i.src.slice(v).match(Fj)){var j=decodeEntity(m[1]);if(m[1]!==j)return s||(i.pending+=j),i.pos+=m[0].length,!0}return s||(i.pending+="&"),i.pos++,!0}]];function ParserInline(){this.ruler=new Ruler;for(var i=0;i0)i.pos=u;else{for(s=0;s=_)break}else i.pending+=i.src[i.pos++]}i.pending&&i.pushPending()},ParserInline.prototype.parse=function(i,s,u,m){var v=new StateInline(i,this,s,u,m);this.tokenize(v)};var $j={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","replacements","smartquotes","references","abbr2","footnote_tail"]},block:{rules:["blockquote","code","fences","footnote","heading","hr","htmlblock","lheading","list","paragraph","table"]},inline:{rules:["autolink","backticks","del","emphasis","entity","escape","footnote_ref","htmltag","links","newline","text"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","abbr2"]},block:{rules:["blockquote","code","fences","heading","hr","htmlblock","lheading","list","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","htmltag","links","newline","text"]}}}};function StateCore(i,s,u){this.src=s,this.env=u,this.options=i.options,this.tokens=[],this.inlineMode=!1,this.inline=i.inline,this.block=i.block,this.renderer=i.renderer,this.typographer=i.typographer}function Remarkable(i,s){"string"!=typeof i&&(s=i,i="default"),s&&null!=s.linkify&&console.warn("linkify option is removed. Use linkify plugin instead:\n\nimport Remarkable from 'remarkable';\nimport linkify from 'remarkable/linkify';\nnew Remarkable().use(linkify)\n"),this.inline=new ParserInline,this.block=new ParserBlock,this.core=new Core,this.renderer=new Renderer,this.ruler=new Ruler,this.options={},this.configure($j[i]),this.set(s||{})}Remarkable.prototype.set=function(i){index_browser_assign(this.options,i)},Remarkable.prototype.configure=function(i){var s=this;if(!i)throw new Error("Wrong `remarkable` preset, check name/content");i.options&&s.set(i.options),i.components&&Object.keys(i.components).forEach((function(u){i.components[u].rules&&s[u].ruler.enable(i.components[u].rules,!0)}))},Remarkable.prototype.use=function(i,s){return i(this,s),this},Remarkable.prototype.parse=function(i,s){var u=new StateCore(this,i,s);return this.core.process(u),u.tokens},Remarkable.prototype.render=function(i,s){return s=s||{},this.renderer.render(this.parse(i,s),this.options,s)},Remarkable.prototype.parseInline=function(i,s){var u=new StateCore(this,i,s);return u.inlineMode=!0,this.core.process(u),u.tokens},Remarkable.prototype.renderInline=function(i,s){return s=s||{},this.renderer.render(this.parseInline(i,s),this.options,s)};function utils_indexOf(i,s){if(Array.prototype.indexOf)return i.indexOf(s);for(var u=0,m=i.length;u=0;u--)!0===s(i[u])&&i.splice(u,1)}function throwUnhandledCaseError(i){throw new Error("Unhandled case for value: '".concat(i,"'"))}var zj=function(){function HtmlTag(i){void 0===i&&(i={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=i.tagName||"",this.attrs=i.attrs||{},this.innerHTML=i.innerHtml||i.innerHTML||""}return HtmlTag.prototype.setTagName=function(i){return this.tagName=i,this},HtmlTag.prototype.getTagName=function(){return this.tagName||""},HtmlTag.prototype.setAttr=function(i,s){return this.getAttrs()[i]=s,this},HtmlTag.prototype.getAttr=function(i){return this.getAttrs()[i]},HtmlTag.prototype.setAttrs=function(i){return Object.assign(this.getAttrs(),i),this},HtmlTag.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},HtmlTag.prototype.setClass=function(i){return this.setAttr("class",i)},HtmlTag.prototype.addClass=function(i){for(var s,u=this.getClass(),m=this.whitespaceRegex,v=u?u.split(m):[],_=i.split(m);s=_.shift();)-1===utils_indexOf(v,s)&&v.push(s);return this.getAttrs().class=v.join(" "),this},HtmlTag.prototype.removeClass=function(i){for(var s,u=this.getClass(),m=this.whitespaceRegex,v=u?u.split(m):[],_=i.split(m);v.length&&(s=_.shift());){var j=utils_indexOf(v,s);-1!==j&&v.splice(j,1)}return this.getAttrs().class=v.join(" "),this},HtmlTag.prototype.getClass=function(){return this.getAttrs().class||""},HtmlTag.prototype.hasClass=function(i){return-1!==(" "+this.getClass()+" ").indexOf(" "+i+" ")},HtmlTag.prototype.setInnerHTML=function(i){return this.innerHTML=i,this},HtmlTag.prototype.setInnerHtml=function(i){return this.setInnerHTML(i)},HtmlTag.prototype.getInnerHTML=function(){return this.innerHTML||""},HtmlTag.prototype.getInnerHtml=function(){return this.getInnerHTML()},HtmlTag.prototype.toAnchorString=function(){var i=this.getTagName(),s=this.buildAttrsStr();return["<",i,s=s?" "+s:"",">",this.getInnerHtml(),""].join("")},HtmlTag.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var i=this.getAttrs(),s=[];for(var u in i)i.hasOwnProperty(u)&&s.push(u+'="'+i[u]+'"');return s.join(" ")},HtmlTag}();var Hj=function(){function AnchorTagBuilder(i){void 0===i&&(i={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=i.newWindow||!1,this.truncate=i.truncate||{},this.className=i.className||""}return AnchorTagBuilder.prototype.build=function(i){return new zj({tagName:"a",attrs:this.createAttrs(i),innerHtml:this.processAnchorText(i.getAnchorText())})},AnchorTagBuilder.prototype.createAttrs=function(i){var s={href:i.getAnchorHref()},u=this.createCssClass(i);return u&&(s.class=u),this.newWindow&&(s.target="_blank",s.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length=_)return j.host.length==s?(j.host.substr(0,s-v)+u).substr(0,_+m):buildSegment($,_).substr(0,_+m);var W="";if(j.path&&(W+="/"+j.path),j.query&&(W+="?"+j.query),W){if(($+W).length>=_)return($+W).length==s?($+W).substr(0,s):($+buildSegment(W,_-$.length)).substr(0,_+m);$+=W}if(j.fragment){var X="#"+j.fragment;if(($+X).length>=_)return($+X).length==s?($+X).substr(0,s):($+buildSegment(X,_-$.length)).substr(0,_+m);$+=X}if(j.scheme&&j.host){var Y=j.scheme+"://";if(($+Y).length<_)return(Y+$).substr(0,s)}if($.length<=s)return $;var Z="";return _>0&&(Z=$.substr(-1*Math.floor(_/2))),($.substr(0,Math.ceil(_/2))+u+Z).substr(0,_+m)}(i,u):"middle"===m?function truncateMiddle(i,s,u){if(i.length<=s)return i;var m,v;null==u?(u="…",m=8,v=3):(m=u.length,v=u.length);var _=s-v,j="";return _>0&&(j=i.substr(-1*Math.floor(_/2))),(i.substr(0,Math.ceil(_/2))+u+j).substr(0,_+m)}(i,u):function truncateEnd(i,s,u){return function ellipsis(i,s,u){var m;return i.length>s&&(null==u?(u="…",m=3):m=u.length,i=i.substring(0,s-m)+u),i}(i,s,u)}(i,u)},AnchorTagBuilder}(),Jj=function(){function Match(i){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=i.tagBuilder,this.matchedText=i.matchedText,this.offset=i.offset}return Match.prototype.getMatchedText=function(){return this.matchedText},Match.prototype.setOffset=function(i){this.offset=i},Match.prototype.getOffset=function(){return this.offset},Match.prototype.getCssClassSuffixes=function(){return[this.getType()]},Match.prototype.buildTag=function(){return this.tagBuilder.build(this)},Match}(),extendStatics=function(i,s){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,s){i.__proto__=s}||function(i,s){for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&(i[u]=s[u])},extendStatics(i,s)};function tslib_es6_extends(i,s){if("function"!=typeof s&&null!==s)throw new TypeError("Class extends value "+String(s)+" is not a constructor or null");function __(){this.constructor=i}extendStatics(i,s),i.prototype=null===s?Object.create(s):(__.prototype=s.prototype,new __)}var __assign=function(){return __assign=Object.assign||function __assign(i){for(var s,u=1,m=arguments.length;u-1},UrlMatchValidator.isValidUriScheme=function(i){var s=i.match(this.uriSchemeRegex),u=s&&s[0].toLowerCase();return"javascript:"!==u&&"vbscript:"!==u},UrlMatchValidator.urlMatchDoesNotHaveProtocolOrDot=function(i,s){return!(!i||s&&this.hasFullProtocolRegex.test(s)||-1!==i.indexOf("."))},UrlMatchValidator.urlMatchDoesNotHaveAtLeastOneWordChar=function(i,s){return!(!i||!s)&&(!this.hasFullProtocolRegex.test(s)&&!this.hasWordCharAfterProtocolRegex.test(i))},UrlMatchValidator.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,UrlMatchValidator.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,UrlMatchValidator.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+hP+"]"),UrlMatchValidator.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,UrlMatchValidator}(),AP=(Gj=new RegExp("[/?#](?:["+gP+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+gP+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,getDomainNameStr(2),")","|","(","(//)?",/(?:www\.)/.source,getDomainNameStr(6),")","|","(","(//)?",getDomainNameStr(10)+"\\.",EP.source,"(?![-"+mP+"])",")",")","(?::[0-9]+)?","(?:"+Gj.source+")?"].join(""),"gi")),CP=new RegExp("["+gP+"]"),jP=function(i){function UrlMatcher(s){var u=i.call(this,s)||this;return u.stripPrefix={scheme:!0,www:!0},u.stripTrailingSlash=!0,u.decodePercentEncoding=!0,u.matcherRegex=AP,u.wordCharRegExp=CP,u.stripPrefix=s.stripPrefix,u.stripTrailingSlash=s.stripTrailingSlash,u.decodePercentEncoding=s.decodePercentEncoding,u}return tslib_es6_extends(UrlMatcher,i),UrlMatcher.prototype.parseMatches=function(i){for(var s,u=this.matcherRegex,m=this.stripPrefix,v=this.stripTrailingSlash,_=this.decodePercentEncoding,j=this.tagBuilder,M=[],_loop_1=function(){var u=s[0],W=s[1],X=s[4],Y=s[5],Z=s[9],ee=s.index,ae=Y||Z,ie=i.charAt(ee-1);if(!OP.isValid(u,W))return"continue";if(ee>0&&"@"===ie)return"continue";if(ee>0&&ae&&$.wordCharRegExp.test(ie))return"continue";if(/\?$/.test(u)&&(u=u.substr(0,u.length-1)),$.matchHasUnbalancedClosingParen(u))u=u.substr(0,u.length-1);else{var le=$.matchHasInvalidCharAfterTld(u,W);le>-1&&(u=u.substr(0,le))}var ce=["http://","https://"].find((function(i){return!!W&&-1!==W.indexOf(i)}));if(ce){var pe=u.indexOf(ce);u=u.substr(pe),W=W.substr(pe),ee+=pe}var de=W?"scheme":X?"www":"tld",fe=!!W;M.push(new oP({tagBuilder:j,matchedText:u,offset:ee,urlMatchType:de,url:u,protocolUrlMatch:fe,protocolRelativeMatch:!!ae,stripPrefix:m,stripTrailingSlash:v,decodePercentEncoding:_}))},$=this;null!==(s=u.exec(i));)_loop_1();return M},UrlMatcher.prototype.matchHasUnbalancedClosingParen=function(i){var s,u=i.charAt(i.length-1);if(")"===u)s="(";else if("]"===u)s="[";else{if("}"!==u)return!1;s="{"}for(var m=0,v=0,_=i.length-1;v<_;v++){var j=i.charAt(v);j===s?m++:j===u&&(m=Math.max(m-1,0))}return 0===m},UrlMatcher.prototype.matchHasInvalidCharAfterTld=function(i,s){if(!i)return-1;var u=0;s&&(u=i.indexOf(":"),i=i.slice(u));var m=new RegExp("^((.?//)?[-."+gP+"]*[-"+gP+"]\\.[-"+gP+"]+)").exec(i);return null===m?-1:(u+=m[1].length,i=i.slice(m[1].length),/^[^-.A-Za-z0-9:\/?#]/.test(i)?u:-1)},UrlMatcher}(aP),PP=new RegExp("[_".concat(gP,"]")),IP=function(i){function HashtagMatcher(s){var u=i.call(this,s)||this;return u.serviceName="twitter",u.serviceName=s.serviceName,u}return tslib_es6_extends(HashtagMatcher,i),HashtagMatcher.prototype.parseMatches=function(i){for(var s=this.tagBuilder,u=this.serviceName,m=[],v=i.length,_=0,j=-1,M=0;_-1&&_-j<=140){var v=i.slice(j,_),M=new tP({tagBuilder:s,matchedText:v,offset:j,serviceName:u,hashtag:v.slice(1)});m.push(M)}}},HashtagMatcher}(aP),NP=["twitter","facebook","instagram","tiktok"],TP=new RegExp("".concat(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source,"|").concat(/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source),"g"),MP=function(i){function PhoneMatcher(){var s=null!==i&&i.apply(this,arguments)||this;return s.matcherRegex=TP,s}return tslib_es6_extends(PhoneMatcher,i),PhoneMatcher.prototype.parseMatches=function(i){for(var s,u=this.matcherRegex,m=this.tagBuilder,v=[];null!==(s=u.exec(i));){var _=s[0],j=_.replace(/[^0-9,;#]/g,""),M=!(!s[1]&&!s[2]),$=0==s.index?"":i.substr(s.index-1,1),W=i.substr(s.index+_.length,1),X=!$.match(/\d/)&&!W.match(/\d/);this.testMatch(s[3])&&this.testMatch(_)&&X&&v.push(new nP({tagBuilder:m,matchedText:_,offset:s.index,number:j,plusSign:M}))}return v},PhoneMatcher.prototype.testMatch=function(i){return lP.test(i)},PhoneMatcher}(aP),RP=new RegExp("@[_".concat(gP,"]{1,50}(?![_").concat(gP,"])"),"g"),BP=new RegExp("@[_.".concat(gP,"]{1,30}(?![_").concat(gP,"])"),"g"),DP=new RegExp("@[-_.".concat(gP,"]{1,50}(?![-_").concat(gP,"])"),"g"),LP=new RegExp("@[_.".concat(gP,"]{1,23}[_").concat(gP,"](?![_").concat(gP,"])"),"g"),FP=new RegExp("[^"+gP+"]"),qP=function(i){function MentionMatcher(s){var u=i.call(this,s)||this;return u.serviceName="twitter",u.matcherRegexes={twitter:RP,instagram:BP,soundcloud:DP,tiktok:LP},u.nonWordCharRegex=FP,u.serviceName=s.serviceName,u}return tslib_es6_extends(MentionMatcher,i),MentionMatcher.prototype.parseMatches=function(i){var s,u=this.serviceName,m=this.matcherRegexes[this.serviceName],v=this.nonWordCharRegex,_=this.tagBuilder,j=[];if(!m)return j;for(;null!==(s=m.exec(i));){var M=s.index,$=i.charAt(M-1);if(0===M||v.test($)){var W=s[0].replace(/\.+$/g,""),X=W.slice(1);j.push(new rP({tagBuilder:_,matchedText:W,offset:M,serviceName:u,mention:X}))}}return j},MentionMatcher}(aP);function parseHtml(i,s){for(var u=s.onOpenTag,m=s.onCloseTag,v=s.onText,_=s.onComment,j=s.onDoctype,M=new $P,$=0,W=i.length,X=0,Y=0,Z=M;$"===i?(Z=new $P(__assign(__assign({},Z),{name:captureTagName()})),emitTagAndPreviousTextNode()):iP.test(i)||sP.test(i)||":"===i||resetToDataState()}function stateEndTagOpen(i){">"===i?resetToDataState():iP.test(i)?X=3:resetToDataState()}function stateBeforeAttributeName(i){cP.test(i)||("/"===i?X=12:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():"="===i||uP.test(i)||pP.test(i)?resetToDataState():X=5)}function stateAttributeName(i){cP.test(i)?X=6:"/"===i?X=12:"="===i?X=7:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():uP.test(i)&&resetToDataState()}function stateAfterAttributeName(i){cP.test(i)||("/"===i?X=12:"="===i?X=7:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():uP.test(i)?resetToDataState():X=5)}function stateBeforeAttributeValue(i){cP.test(i)||('"'===i?X=8:"'"===i?X=9:/[>=`]/.test(i)?resetToDataState():"<"===i?startNewTag():X=10)}function stateAttributeValueDoubleQuoted(i){'"'===i&&(X=11)}function stateAttributeValueSingleQuoted(i){"'"===i&&(X=11)}function stateAttributeValueUnquoted(i){cP.test(i)?X=4:">"===i?emitTagAndPreviousTextNode():"<"===i&&startNewTag()}function stateAfterAttributeValueQuoted(i){cP.test(i)?X=4:"/"===i?X=12:">"===i?emitTagAndPreviousTextNode():"<"===i?startNewTag():(X=4,function reconsumeCurrentCharacter(){$--}())}function stateSelfClosingStartTag(i){">"===i?(Z=new $P(__assign(__assign({},Z),{isClosing:!0})),emitTagAndPreviousTextNode()):X=4}function stateMarkupDeclarationOpen(s){"--"===i.substr($,2)?($+=2,Z=new $P(__assign(__assign({},Z),{type:"comment"})),X=14):"DOCTYPE"===i.substr($,7).toUpperCase()?($+=7,Z=new $P(__assign(__assign({},Z),{type:"doctype"})),X=20):resetToDataState()}function stateCommentStart(i){"-"===i?X=15:">"===i?resetToDataState():X=16}function stateCommentStartDash(i){"-"===i?X=18:">"===i?resetToDataState():X=16}function stateComment(i){"-"===i&&(X=17)}function stateCommentEndDash(i){X="-"===i?18:16}function stateCommentEnd(i){">"===i?emitTagAndPreviousTextNode():"!"===i?X=19:"-"===i||(X=16)}function stateCommentEndBang(i){"-"===i?X=17:">"===i?emitTagAndPreviousTextNode():X=16}function stateDoctype(i){">"===i?emitTagAndPreviousTextNode():"<"===i&&startNewTag()}function resetToDataState(){X=0,Z=M}function startNewTag(){X=1,Z=new $P({idx:$})}function emitTagAndPreviousTextNode(){var s=i.slice(Y,Z.idx);s&&v(s,Y),"comment"===Z.type?_(Z.idx):"doctype"===Z.type?j(Z.idx):(Z.isOpening&&u(Z.name,Z.idx),Z.isClosing&&m(Z.name,Z.idx)),resetToDataState(),Y=$+1}function captureTagName(){var s=Z.idx+(Z.isClosing?2:1);return i.slice(s,$).toLowerCase()}Y<$&&function emitText(){var s=i.slice(Y,$);v(s,Y),Y=$+1}()}var $P=function $P(i){void 0===i&&(i={}),this.idx=void 0!==i.idx?i.idx:-1,this.type=i.type||"tag",this.name=i.name||"",this.isOpening=!!i.isOpening,this.isClosing=!!i.isClosing},zP=function(){function Autolinker(i){void 0===i&&(i={}),this.version=Autolinker.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(i.urls),this.email="boolean"==typeof i.email?i.email:this.email,this.phone="boolean"==typeof i.phone?i.phone:this.phone,this.hashtag=i.hashtag||this.hashtag,this.mention=i.mention||this.mention,this.newWindow="boolean"==typeof i.newWindow?i.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(i.stripPrefix),this.stripTrailingSlash="boolean"==typeof i.stripTrailingSlash?i.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding="boolean"==typeof i.decodePercentEncoding?i.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=i.sanitizeHtml||!1;var s=this.mention;if(!1!==s&&-1===["twitter","instagram","soundcloud","tiktok"].indexOf(s))throw new Error("invalid `mention` cfg '".concat(s,"' - see docs"));var u=this.hashtag;if(!1!==u&&-1===NP.indexOf(u))throw new Error("invalid `hashtag` cfg '".concat(u,"' - see docs"));this.truncate=this.normalizeTruncateCfg(i.truncate),this.className=i.className||this.className,this.replaceFn=i.replaceFn||this.replaceFn,this.context=i.context||this}return Autolinker.link=function(i,s){return new Autolinker(s).link(i)},Autolinker.parse=function(i,s){return new Autolinker(s).parse(i)},Autolinker.prototype.normalizeUrlsCfg=function(i){return null==i&&(i=!0),"boolean"==typeof i?{schemeMatches:i,wwwMatches:i,tldMatches:i}:{schemeMatches:"boolean"!=typeof i.schemeMatches||i.schemeMatches,wwwMatches:"boolean"!=typeof i.wwwMatches||i.wwwMatches,tldMatches:"boolean"!=typeof i.tldMatches||i.tldMatches}},Autolinker.prototype.normalizeStripPrefixCfg=function(i){return null==i&&(i=!0),"boolean"==typeof i?{scheme:i,www:i}:{scheme:"boolean"!=typeof i.scheme||i.scheme,www:"boolean"!=typeof i.www||i.www}},Autolinker.prototype.normalizeTruncateCfg=function(i){return"number"==typeof i?{length:i,location:"end"}:function defaults(i,s){for(var u in s)s.hasOwnProperty(u)&&void 0===i[u]&&(i[u]=s[u]);return i}(i||{},{length:Number.POSITIVE_INFINITY,location:"end"})},Autolinker.prototype.parse=function(i){var s=this,u=["a","style","script"],m=0,v=[];return parseHtml(i,{onOpenTag:function(i){u.indexOf(i)>=0&&m++},onText:function(i,u){if(0===m){var _=function splitAndCapture(i,s){if(!s.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var u,m=[],v=0;u=s.exec(i);)m.push(i.substring(v,u.index)),m.push(u[0]),v=u.index+u[0].length;return m.push(i.substring(v)),m}(i,/( | |<|<|>|>|"|"|')/gi),j=u;_.forEach((function(i,u){if(u%2==0){var m=s.parseText(i,j);v.push.apply(v,m)}j+=i.length}))}},onCloseTag:function(i){u.indexOf(i)>=0&&(m=Math.max(m-1,0))},onComment:function(i){},onDoctype:function(i){}}),v=this.compactMatches(v),v=this.removeUnwantedMatches(v)},Autolinker.prototype.compactMatches=function(i){i.sort((function(i,s){return i.getOffset()-s.getOffset()}));for(var s=0;sv?s:s+1;i.splice(j,1);continue}if(i[s+1].getOffset()<_){i.splice(s+1,1);continue}}s++}return i},Autolinker.prototype.removeUnwantedMatches=function(i){return this.hashtag||utils_remove(i,(function(i){return"hashtag"===i.getType()})),this.email||utils_remove(i,(function(i){return"email"===i.getType()})),this.phone||utils_remove(i,(function(i){return"phone"===i.getType()})),this.mention||utils_remove(i,(function(i){return"mention"===i.getType()})),this.urls.schemeMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"scheme"===i.getUrlMatchType()})),this.urls.wwwMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"www"===i.getUrlMatchType()})),this.urls.tldMatches||utils_remove(i,(function(i){return"url"===i.getType()&&"tld"===i.getUrlMatchType()})),i},Autolinker.prototype.parseText=function(i,s){void 0===s&&(s=0),s=s||0;for(var u=this.getMatchers(),m=[],v=0,_=u.length;v<_;v++){for(var j=u[v].parseMatches(i),M=0,$=j.length;M<$;M++)j[M].setOffset(s+j[M].getOffset());m.push.apply(m,j)}return m},Autolinker.prototype.link=function(i){if(!i)return"";this.sanitizeHtml&&(i=i.replace(//g,">"));for(var s=this.parse(i),u=[],m=0,v=0,_=s.length;v<_;v++){var j=s[v];u.push(i.substring(m,j.getOffset())),u.push(this.createMatchReturnVal(j)),m=j.getOffset()+j.getMatchedText().length}return u.push(i.substring(m)),u.join("")},Autolinker.prototype.createMatchReturnVal=function(i){var s;return this.replaceFn&&(s=this.replaceFn.call(this.context,i)),"string"==typeof s?s:!1===s?i.getMatchedText():s instanceof zj?s.toAnchorString():i.buildTag().toAnchorString()},Autolinker.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var i=this.getTagBuilder(),s=[new IP({tagBuilder:i,serviceName:this.hashtag}),new xP({tagBuilder:i}),new MP({tagBuilder:i}),new qP({tagBuilder:i,serviceName:this.mention}),new jP({tagBuilder:i,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=s},Autolinker.prototype.getTagBuilder=function(){var i=this.tagBuilder;return i||(i=this.tagBuilder=new Hj({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),i},Autolinker.version="3.16.2",Autolinker.AnchorTagBuilder=Hj,Autolinker.HtmlTag=zj,Autolinker.matcher={Email:xP,Hashtag:IP,Matcher:aP,Mention:qP,Phone:MP,Url:jP},Autolinker.match={Email:eP,Hashtag:tP,Match:Jj,Mention:rP,Phone:nP,Url:oP},Autolinker}();const UP=zP;var VP=/www|@|\:\/\//;function isLinkOpen(i){return/^\s]/i.test(i)}function isLinkClose(i){return/^<\/a\s*>/i.test(i)}function createLinkifier(){var i=[],s=new UP({stripPrefix:!1,url:!0,email:!0,replaceFn:function(s){switch(s.getType()){case"url":i.push({text:s.matchedText,url:s.getUrl()});break;case"email":i.push({text:s.matchedText,url:"mailto:"+s.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:i,autolinker:s}}function parseTokens(i){var s,u,m,v,_,j,M,$,W,X,Y,Z,ee,ae=i.tokens,ie=null;for(u=0,m=ae.length;u=0;s--)if("link_close"!==(_=v[s]).type){if("htmltag"===_.type&&(isLinkOpen(_.content)&&Y>0&&Y--,isLinkClose(_.content)&&Y++),!(Y>0)&&"text"===_.type&&VP.test(_.content)){if(ie||(Z=(ie=createLinkifier()).links,ee=ie.autolinker),j=_.content,Z.length=0,ee.link(j),!Z.length)continue;for(M=[],X=_.level,$=0;$({useUnsafeMarkdown:!1})};const HP=Markdown;function sanitizer(i){let{useUnsafeMarkdown:s=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const u=s,m=s?[]:["style","class"];return s&&!sanitizer.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),sanitizer.hasWarnedAboutDeprecation=!0),KP().sanitize(i,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:u,FORBID_ATTR:m})}sanitizer.hasWarnedAboutDeprecation=!1;class BaseLayout extends He.Component{render(){const{errSelectors:i,specSelectors:s,getComponent:u}=this.props,m=u("SvgAssets"),v=u("InfoContainer",!0),_=u("VersionPragmaFilter"),j=u("operations",!0),M=u("Models",!0),$=u("Webhooks",!0),W=u("Row"),X=u("Col"),Y=u("errors",!0),Z=u("ServersContainer",!0),ee=u("SchemesContainer",!0),ae=u("AuthorizeBtnContainer",!0),ie=u("FilterContainer",!0),le=s.isSwagger2(),ce=s.isOAS3(),pe=s.isOAS31(),de=!s.specStr(),fe=s.loadingStatus();let ye=null;if("loading"===fe&&(ye=He.createElement("div",{className:"info"},He.createElement("div",{className:"loading-container"},He.createElement("div",{className:"loading"})))),"failed"===fe&&(ye=He.createElement("div",{className:"info"},He.createElement("div",{className:"loading-container"},He.createElement("h4",{className:"title"},"Failed to load API definition."),He.createElement(Y,null)))),"failedConfig"===fe){const s=i.lastError(),u=s?s.get("message"):"";ye=He.createElement("div",{className:"info failed-config"},He.createElement("div",{className:"loading-container"},He.createElement("h4",{className:"title"},"Failed to load remote configuration."),He.createElement("p",null,u)))}if(!ye&&de&&(ye=He.createElement("h4",null,"No API definition provided.")),ye)return He.createElement("div",{className:"swagger-ui"},He.createElement("div",{className:"loading-container"},ye));const be=s.servers(),_e=s.schemes(),we=be&&be.size,Se=_e&&_e.size,xe=!!s.securityDefinitions();return He.createElement("div",{className:"swagger-ui"},He.createElement(m,null),He.createElement(_,{isSwagger2:le,isOAS3:ce,alsoShow:He.createElement(Y,null)},He.createElement(Y,null),He.createElement(W,{className:"information-container"},He.createElement(X,{mobile:12},He.createElement(v,null))),we||Se||xe?He.createElement("div",{className:"scheme-container"},He.createElement(X,{className:"schemes wrapper",mobile:12},we?He.createElement(Z,null):null,Se?He.createElement(ee,null):null,xe?He.createElement(ae,null):null)):null,He.createElement(ie,null),He.createElement(W,null,He.createElement(X,{mobile:12,desktop:12},He.createElement(j,null))),pe&&He.createElement(W,{className:"webhooks-container"},He.createElement(X,{mobile:12,desktop:12},He.createElement($,null))),He.createElement(W,null,He.createElement(X,{mobile:12,desktop:12},He.createElement(M,null)))))}}const core_components=()=>({components:{App,authorizationPopup:AuthorizationPopup,authorizeBtn:AuthorizeBtn,AuthorizeBtnContainer,authorizeOperationBtn:AuthorizeOperationBtn,auths:Auths,AuthItem:auth_item_Auths,authError:AuthError,oauth2:Oauth2,apiKeyAuth:ApiKeyAuth,basicAuth:BasicAuth,clear:Clear,liveResponse:LiveResponse,InitializedInput,info:OC,InfoContainer,InfoUrl,InfoBasePath,Contact:AC,License:CC,JumpToPath,CopyToClipboardBtn,onlineValidatorBadge:OnlineValidatorBadge,operations:Operations,operation:operation_Operation,OperationSummary,OperationSummaryMethod,OperationSummaryPath,highlightCode:bC,responses:responses_Responses,response:response_Response,ResponseExtension:response_extension,responseBody:ResponseBody,parameters:Parameters,parameterRow:ParameterRow,execute:Execute,headers:headers_Headers,errors:Errors,contentType:ContentType,overview:Overview,footer:Footer,FilterContainer,ParamBody,curl:Curl,schemes:Schemes,SchemesContainer,modelExample:ModelExample,ModelWrapper,ModelCollapse,Model,Models,EnumModel:enum_model,ObjectModel,ArrayModel,PrimitiveModel:Primitive,Property:property,TryItOutButton,Markdown:HP,BaseLayout,VersionPragmaFilter,VersionStamp:version_stamp,OperationExt:operation_extensions,OperationExtRow:operation_extension_row,ParameterExt:parameter_extension,ParameterIncludeEmpty,OperationTag,OperationContainer,OpenAPIVersion:openapi_version,DeepLink:deep_link,SvgAssets:svg_assets,Example:example_Example,ExamplesSelect,ExamplesSelectValueRetainer}}),form_components=()=>({components:{...xe}});var JP=__webpack_require__(775),GP=__webpack_require__.n(JP);const XP={value:"",onChange:()=>{},schema:{},keyName:"",required:!1,errors:(0,et.List)()};class JsonSchemaForm extends He.Component{static defaultProps=XP;componentDidMount(){const{dispatchInitialValue:i,value:s,onChange:u}=this.props;i?u(s):!1===i&&u("")}render(){let{schema:i,errors:s,value:u,onChange:m,getComponent:v,fn:_,disabled:j}=this.props;const M=i&&i.get?i.get("format"):null,$=i&&i.get?i.get("type"):null;let getComponentSilently=i=>v(i,!1,{failSilently:!0}),W=$?getComponentSilently(M?`JsonSchema_${$}_${M}`:`JsonSchema_${$}`):v("JsonSchema_string");return W||(W=v("JsonSchema_string")),He.createElement(W,Ao()({},this.props,{errors:s,fn:_,getComponent:v,value:u,onChange:m,schema:i,disabled:j}))}}class JsonSchema_string extends He.Component{static defaultProps=XP;onChange=i=>{const s=this.props.schema&&"file"===this.props.schema.get("type")?i.target.files[0]:i.target.value;this.props.onChange(s,this.props.keyName)};onEnumChange=i=>this.props.onChange(i);render(){let{getComponent:i,value:s,schema:u,errors:m,required:v,description:_,disabled:j}=this.props;const M=u&&u.get?u.get("enum"):null,$=u&&u.get?u.get("format"):null,W=u&&u.get?u.get("type"):null,X=u&&u.get?u.get("in"):null;if(s||(s=""),m=m.toJS?m.toJS():[],M){const u=i("Select");return He.createElement(u,{className:m.length?"invalid":"",title:m.length?m:"",allowedValues:[...M],value:s,allowEmptyValue:!v,disabled:j,onChange:this.onEnumChange})}const Y=j||X&&"formData"===X&&!("FormData"in window),Z=i("Input");return W&&"file"===W?He.createElement(Z,{type:"file",className:m.length?"invalid":"",title:m.length?m:"",onChange:this.onChange,disabled:Y}):He.createElement(GP(),{type:$&&"password"===$?"password":"text",className:m.length?"invalid":"",title:m.length?m:"",value:s,minLength:0,debounceTimeout:350,placeholder:_,onChange:this.onChange,disabled:Y})}}class JsonSchema_array extends He.PureComponent{static defaultProps=XP;constructor(i,s){super(i,s),this.state={value:valueOrEmptyList(i.value),schema:i.schema}}UNSAFE_componentWillReceiveProps(i){const s=valueOrEmptyList(i.value);s!==this.state.value&&this.setState({value:s}),i.schema!==this.state.schema&&this.setState({schema:i.schema})}onChange=()=>{this.props.onChange(this.state.value)};onItemChange=(i,s)=>{this.setState((u=>{let{value:m}=u;return{value:m.set(s,i)}}),this.onChange)};removeItem=i=>{this.setState((s=>{let{value:u}=s;return{value:u.delete(i)}}),this.onChange)};addItem=()=>{const{fn:i}=this.props;let s=valueOrEmptyList(this.state.value);this.setState((()=>({value:s.push(i.getSampleSchema(this.state.schema.get("items"),!1,{includeWriteOnly:!0}))})),this.onChange)};onEnumChange=i=>{this.setState((()=>({value:i})),this.onChange)};render(){let{getComponent:i,required:s,schema:u,errors:m,fn:v,disabled:_}=this.props;m=m.toJS?m.toJS():Array.isArray(m)?m:[];const j=m.filter((i=>"string"==typeof i)),M=m.filter((i=>void 0!==i.needRemove)).map((i=>i.error)),$=this.state.value,W=!!($&&$.count&&$.count()>0),X=u.getIn(["items","enum"]),Y=u.getIn(["items","type"]),Z=u.getIn(["items","format"]),ee=u.get("items");let ae,ie=!1,le="file"===Y||"string"===Y&&"binary"===Z;if(Y&&Z?ae=i(`JsonSchema_${Y}_${Z}`):"boolean"!==Y&&"array"!==Y&&"object"!==Y||(ae=i(`JsonSchema_${Y}`)),ae||le||(ie=!0),X){const u=i("Select");return He.createElement(u,{className:m.length?"invalid":"",title:m.length?m:"",multiple:!0,value:$,disabled:_,allowedValues:X,allowEmptyValue:!s,onChange:this.onEnumChange})}const ce=i("Button");return He.createElement("div",{className:"json-schema-array"},W?$.map(((s,u)=>{const j=(0,et.fromJS)([...m.filter((i=>i.index===u)).map((i=>i.error))]);return He.createElement("div",{key:u,className:"json-schema-form-item"},le?He.createElement(JsonSchemaArrayItemFile,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j,getComponent:i}):ie?He.createElement(JsonSchemaArrayItemText,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j}):He.createElement(ae,Ao()({},this.props,{value:s,onChange:i=>this.onItemChange(i,u),disabled:_,errors:j,schema:ee,getComponent:i,fn:v})),_?null:He.createElement(ce,{className:`btn btn-sm json-schema-form-item-remove ${M.length?"invalid":null}`,title:M.length?M:"",onClick:()=>this.removeItem(u)}," - "))})):null,_?null:He.createElement(ce,{className:`btn btn-sm json-schema-form-item-add ${j.length?"invalid":null}`,title:j.length?j:"",onClick:this.addItem},"Add ",Y?`${Y} `:"","item"))}}class JsonSchemaArrayItemText extends He.Component{static defaultProps=XP;onChange=i=>{const s=i.target.value;this.props.onChange(s,this.props.keyName)};render(){let{value:i,errors:s,description:u,disabled:m}=this.props;return i||(i=""),s=s.toJS?s.toJS():[],He.createElement(GP(),{type:"text",className:s.length?"invalid":"",title:s.length?s:"",value:i,minLength:0,debounceTimeout:350,placeholder:u,onChange:this.onChange,disabled:m})}}class JsonSchemaArrayItemFile extends He.Component{static defaultProps=XP;onFileChange=i=>{const s=i.target.files[0];this.props.onChange(s,this.props.keyName)};render(){let{getComponent:i,errors:s,disabled:u}=this.props;const m=i("Input"),v=u||!("FormData"in window);return He.createElement(m,{type:"file",className:s.length?"invalid":"",title:s.length?s:"",onChange:this.onFileChange,disabled:v})}}class JsonSchema_boolean extends He.Component{static defaultProps=XP;onEnumChange=i=>this.props.onChange(i);render(){let{getComponent:i,value:s,errors:u,schema:m,required:v,disabled:_}=this.props;u=u.toJS?u.toJS():[];let j=m&&m.get?m.get("enum"):null,M=!j||!v,$=!j&&["true","false"];const W=i("Select");return He.createElement(W,{className:u.length?"invalid":"",title:u.length?u:"",value:String(s),disabled:_,allowedValues:j?[...j]:$,allowEmptyValue:M,onChange:this.onEnumChange})}}const stringifyObjectErrors=i=>i.map((i=>{const s=void 0!==i.propKey?i.propKey:i.index;let u="string"==typeof i?i:"string"==typeof i.error?i.error:null;if(!s&&u)return u;let m=i.error,v=`/${i.propKey}`;for(;"object"==typeof m;){const i=void 0!==m.propKey?m.propKey:m.index;if(void 0===i)break;if(v+=`/${i}`,!m.error)break;m=m.error}return`${v}: ${m}`}));class JsonSchema_object extends He.PureComponent{constructor(){super()}static defaultProps=XP;onChange=i=>{this.props.onChange(i)};handleOnChange=i=>{const s=i.target.value;this.onChange(s)};render(){let{getComponent:i,value:s,errors:u,disabled:m}=this.props;const v=i("TextArea");return u=u.toJS?u.toJS():Array.isArray(u)?u:[],He.createElement("div",null,He.createElement(v,{className:gC()({invalid:u.length}),title:u.length?stringifyObjectErrors(u).join(", "):"",value:stringify(s),disabled:m,onChange:this.handleOnChange}))}}function valueOrEmptyList(i){return et.List.isList(i)?i:Array.isArray(i)?(0,et.fromJS)(i):(0,et.List)()}const json_schema_components=()=>({components:{...Pe}}),base=()=>[configsPlugin,util,logs,view,plugins_spec,err,icons,plugins_layout,json_schema_5_samples,core_components,form_components,swagger_client,json_schema_components,auth,downloadUrlPlugin,deep_linking,filter,on_complete,plugins_request_snippets,safe_render()],YP=(0,et.Map)();function onlyOAS3(i){return(s,u)=>function(){if(u.getSystem().specSelectors.isOAS3()){const s=i(...arguments);return"function"==typeof s?s(u):s}return s(...arguments)}}const QP=onlyOAS3(Xt((()=>null))),ZP=onlyOAS3((()=>i=>{const s=i.getSystem().specSelectors.specJson().getIn(["components","schemas"]);return et.Map.isMap(s)?s:YP})),eI=onlyOAS3((()=>i=>i.getSystem().specSelectors.specJson().hasIn(["servers",0]))),tI=onlyOAS3(Xt(Ri,(i=>i.getIn(["components","securitySchemes"])||null))),wrap_selectors_validOperationMethods=(i,s)=>function(u){if(s.specSelectors.isOAS3())return s.oas3Selectors.validOperationMethods();for(var m=arguments.length,v=new Array(m>1?m-1:0),_=1;_function(){for(var m=arguments.length,v=new Array(m),_=0;_i),(i=>{let{specSelectors:s}=i;return s.securityDefinitions()}),((i,s)=>{let u=(0,et.List)();return s?(s.entrySeq().forEach((i=>{let[s,m]=i;const v=m.get("type");if("oauth2"===v&&m.get("flows").entrySeq().forEach((i=>{let[v,_]=i,j=(0,et.fromJS)({flow:v,authorizationUrl:_.get("authorizationUrl"),tokenUrl:_.get("tokenUrl"),scopes:_.get("scopes"),type:m.get("type"),description:m.get("description")});u=u.push(new et.Map({[s]:j.filter((i=>void 0!==i))}))})),"http"!==v&&"apiKey"!==v||(u=u.push(new et.Map({[s]:m}))),"openIdConnect"===v&&m.get("openIdConnectData")){let i=m.get("openIdConnectData");(i.get("grant_types_supported")||["authorization_code","implicit"]).forEach((v=>{let _=i.get("scopes_supported")&&i.get("scopes_supported").reduce(((i,s)=>i.set(s,"")),new et.Map),j=(0,et.fromJS)({flow:v,authorizationUrl:i.get("authorization_endpoint"),tokenUrl:i.get("token_endpoint"),scopes:_,type:"oauth2",openIdConnectUrl:m.get("openIdConnectUrl")});u=u.push(new et.Map({[s]:j.filter((i=>void 0!==i))}))}))}})),u):u})));function OAS3ComponentWrapFactory(i){return(s,u)=>m=>"function"==typeof u.specSelectors?.isOAS3?u.specSelectors.isOAS3()?He.createElement(i,Ao()({},m,u,{Ori:s})):He.createElement(s,m):(console.warn("OAS3 wrapper: couldn't get spec"),null)}const lI=(0,et.Map)(),selectors_isSwagger2=()=>i=>function isSwagger2(i){const s=i.get("swagger");return"string"==typeof s&&"2.0"===s}(i.getSystem().specSelectors.specJson()),selectors_isOAS30=()=>i=>function isOAS30(i){const s=i.get("openapi");return"string"==typeof s&&/^3\.0\.([0123])(?:-rc[012])?$/.test(s)}(i.getSystem().specSelectors.specJson()),selectors_isOAS3=()=>i=>i.getSystem().specSelectors.isOAS30();function selectors_onlyOAS3(i){return function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.specSelectors.isOAS3()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}}}const cI=selectors_onlyOAS3((()=>i=>i.specSelectors.specJson().get("servers",lI))),uI=selectors_onlyOAS3(((i,s)=>{let{callbacks:u,specPath:m}=s;return i=>{const s=i.specSelectors.validOperationMethods();return et.Map.isMap(u)?u.reduce(((i,u,v)=>{if(!et.Map.isMap(u))return i;const _=u.reduce(((i,u,_)=>{if(!et.Map.isMap(u))return i;const j=u.entrySeq().filter((i=>{let[u]=i;return s.includes(u)})).map((i=>{let[s,u]=i;return{operation:(0,et.Map)({operation:u}),method:s,path:_,callbackName:v,specPath:m.concat([v,_,s])}}));return i.concat(j)}),(0,et.List)());return i.concat(_)}),(0,et.List)()).groupBy((i=>i.callbackName)).map((i=>i.toArray())).toObject():{}}})),callbacks=i=>{let{callbacks:s,specPath:u,specSelectors:m,getComponent:v}=i;const _=m.callbacksOperations({callbacks:s,specPath:u}),j=Object.keys(_),M=v("OperationContainer",!0);return 0===j.length?He.createElement("span",null,"No callbacks"):He.createElement("div",null,j.map((i=>He.createElement("div",{key:`${i}`},He.createElement("h2",null,i),_[i].map((s=>He.createElement(M,{key:`${i}-${s.path}-${s.method}`,op:s.operation,tag:"callbacks",method:s.method,path:s.path,specPath:s.specPath,allowTryItOut:!1})))))))},getDefaultRequestBodyValue=(i,s,u,m)=>{const v=i.getIn(["content",s])??(0,et.OrderedMap)(),_=v.get("schema",(0,et.OrderedMap)()).toJS(),j=void 0!==v.get("examples"),M=v.get("example"),$=j?v.getIn(["examples",u,"value"]):M;return stringify(m.getSampleSchema(_,s,{includeWriteOnly:!0},$))},components_request_body=i=>{let{userHasEditedBody:s,requestBody:u,requestBodyValue:m,requestBodyInclusionSetting:v,requestBodyErrors:_,getComponent:j,getConfigs:M,specSelectors:$,fn:W,contentType:X,isExecute:Y,specPath:Z,onChange:ee,onChangeIncludeEmpty:ae,activeExamplesKey:ie,updateActiveExamplesKey:le,setRetainRequestBodyValueFlag:ce}=i;const handleFile=i=>{ee(i.target.files[0])},setIsIncludedOptions=i=>{let s={key:i,shouldDispatchInit:!1,defaultValue:!0};return"no value"===v.get(i,"no value")&&(s.shouldDispatchInit=!0),s},pe=j("Markdown",!0),de=j("modelExample"),fe=j("RequestBodyEditor"),ye=j("highlightCode"),be=j("ExamplesSelectValueRetainer"),_e=j("Example"),we=j("ParameterIncludeEmpty"),{showCommonExtensions:Se}=M(),xe=u?.get("description")??null,Pe=u?.get("content")??new et.OrderedMap;X=X||Pe.keySeq().first()||"";const Ie=Pe.get(X)??(0,et.OrderedMap)(),Te=Ie.get("schema",(0,et.OrderedMap)()),Re=Ie.get("examples",null),qe=Re?.map(((i,s)=>{const m=i?.get("value",null);return m&&(i=i.set("value",getDefaultRequestBodyValue(u,X,s,W),m)),i}));if(_=et.List.isList(_)?_:(0,et.List)(),!Ie.size)return null;const ze="object"===Ie.getIn(["schema","type"]),Ve="binary"===Ie.getIn(["schema","format"]),We="base64"===Ie.getIn(["schema","format"]);if("application/octet-stream"===X||0===X.indexOf("image/")||0===X.indexOf("audio/")||0===X.indexOf("video/")||Ve||We){const i=j("Input");return Y?He.createElement(i,{type:"file",onChange:handleFile}):He.createElement("i",null,"Example values are not available for ",He.createElement("code",null,X)," media types.")}if(ze&&("application/x-www-form-urlencoded"===X||0===X.indexOf("multipart/"))&&Te.get("properties",(0,et.OrderedMap)()).size>0){const i=j("JsonSchemaForm"),s=j("ParameterExt"),u=Te.get("properties",(0,et.OrderedMap)());return m=et.Map.isMap(m)?m:(0,et.OrderedMap)(),He.createElement("div",{className:"table-container"},xe&&He.createElement(pe,{source:xe}),He.createElement("table",null,He.createElement("tbody",null,et.Map.isMap(u)&&u.entrySeq().map((u=>{let[M,$]=u;if($.get("readOnly"))return;let X=Se?getCommonExtensions($):null;const Z=Te.get("required",(0,et.List)()).includes(M),ie=$.get("type"),le=$.get("format"),ce=$.get("description"),de=m.getIn([M,"value"]),fe=m.getIn([M,"errors"])||_,ye=v.get(M)||!1,be=$.has("default")||$.has("example")||$.hasIn(["items","example"])||$.hasIn(["items","default"]),_e=$.has("enum")&&(1===$.get("enum").size||Z),xe=be||_e;let Pe="";"array"!==ie||xe||(Pe=[]),("object"===ie||xe)&&(Pe=W.getSampleSchema($,!1,{includeWriteOnly:!0})),"string"!=typeof Pe&&"object"===ie&&(Pe=stringify(Pe)),"string"==typeof Pe&&"array"===ie&&(Pe=JSON.parse(Pe));const Ie="string"===ie&&("binary"===le||"base64"===le);return He.createElement("tr",{key:M,className:"parameters","data-property-name":M},He.createElement("td",{className:"parameters-col_name"},He.createElement("div",{className:Z?"parameter__name required":"parameter__name"},M,Z?He.createElement("span",null," *"):null),He.createElement("div",{className:"parameter__type"},ie,le&&He.createElement("span",{className:"prop-format"},"($",le,")"),Se&&X.size?X.entrySeq().map((i=>{let[u,m]=i;return He.createElement(s,{key:`${u}-${m}`,xKey:u,xVal:m})})):null),He.createElement("div",{className:"parameter__deprecated"},$.get("deprecated")?"deprecated":null)),He.createElement("td",{className:"parameters-col_description"},He.createElement(pe,{source:ce}),Y?He.createElement("div",null,He.createElement(i,{fn:W,dispatchInitialValue:!Ie,schema:$,description:M,getComponent:j,value:void 0===de?Pe:de,required:Z,errors:fe,onChange:i=>{ee(i,[M])}}),Z?null:He.createElement(we,{onChange:i=>ae(M,i),isIncluded:ye,isIncludedOptions:setIsIncludedOptions(M),isDisabled:Array.isArray(de)?0!==de.length:!isEmptyValue(de)})):null))})))))}const Xe=getDefaultRequestBodyValue(u,X,ie,W);let Ye=null;return getKnownSyntaxHighlighterLanguage(Xe)&&(Ye="json"),He.createElement("div",null,xe&&He.createElement(pe,{source:xe}),qe?He.createElement(be,{userHasEditedBody:s,examples:qe,currentKey:ie,currentUserInputValue:m,onSelect:i=>{le(i)},updateValue:ee,defaultToFirstExample:!0,getComponent:j,setRetainRequestBodyValueFlag:ce}):null,Y?He.createElement("div",null,He.createElement(fe,{value:m,errors:_,defaultValue:Xe,onChange:ee,getComponent:j})):He.createElement(de,{getComponent:j,getConfigs:M,specSelectors:$,expandDepth:1,isExecute:Y,schema:Ie.get("schema"),specPath:Z.push("content",X),example:He.createElement(ye,{className:"body-param__example",getConfigs:M,language:Ye,value:stringify(m)||Xe}),includeWriteOnly:!0}),qe?He.createElement(_e,{example:qe.get(ie),getComponent:j,getConfigs:M}):null)};class operation_link_OperationLink extends He.Component{render(){const{link:i,name:s,getComponent:u}=this.props,m=u("Markdown",!0);let v=i.get("operationId")||i.get("operationRef"),_=i.get("parameters")&&i.get("parameters").toJS(),j=i.get("description");return He.createElement("div",{className:"operation-link"},He.createElement("div",{className:"description"},He.createElement("b",null,He.createElement("code",null,s)),j?He.createElement(m,{source:j}):null),He.createElement("pre",null,"Operation `",v,"`",He.createElement("br",null),He.createElement("br",null),"Parameters ",function padString(i,s){if("string"!=typeof s)return"";return s.split("\n").map(((s,u)=>u>0?Array(i+1).join(" ")+s:s)).join("\n")}(0,JSON.stringify(_,null,2))||"{}",He.createElement("br",null)))}}const pI=operation_link_OperationLink;class servers_Servers extends He.Component{componentDidMount(){let{servers:i,currentServer:s}=this.props;s||this.setServer(i.first()?.get("url"))}UNSAFE_componentWillReceiveProps(i){let{servers:s,setServerVariableValue:u,getServerVariable:m}=i;if(this.props.currentServer!==i.currentServer||this.props.servers!==i.servers){let v=s.find((s=>s.get("url")===i.currentServer)),_=this.props.servers.find((i=>i.get("url")===this.props.currentServer))||(0,et.OrderedMap)();if(!v)return this.setServer(s.first().get("url"));let j=((_.get("variables")||(0,et.OrderedMap)()).find((i=>i.get("default")))||(0,et.OrderedMap)()).get("default"),M=v.get("variables")||(0,et.OrderedMap)(),$=(M.find((i=>i.get("default")))||(0,et.OrderedMap)()).get("default");M.map(((s,v)=>{m(i.currentServer,v)&&j===$||u({server:i.currentServer,key:v,val:s.get("default")||""})}))}}onServerChange=i=>{this.setServer(i.target.value)};onServerVariableValueChange=i=>{let{setServerVariableValue:s,currentServer:u}=this.props,m=i.target.getAttribute("data-variable"),v=i.target.value;"function"==typeof s&&s({server:u,key:m,val:v})};setServer=i=>{let{setSelectedServer:s}=this.props;s(i)};render(){let{servers:i,currentServer:s,getServerVariable:u,getEffectiveServerValue:m}=this.props,v=(i.find((i=>i.get("url")===s))||(0,et.OrderedMap)()).get("variables")||(0,et.OrderedMap)(),_=0!==v.size;return He.createElement("div",{className:"servers"},He.createElement("label",{htmlFor:"servers"},He.createElement("select",{onChange:this.onServerChange,value:s},i.valueSeq().map((i=>He.createElement("option",{value:i.get("url"),key:i.get("url")},i.get("url"),i.get("description")&&` - ${i.get("description")}`))).toArray())),_?He.createElement("div",null,He.createElement("div",{className:"computed-url"},"Computed URL:",He.createElement("code",null,m(s))),He.createElement("h4",null,"Server variables"),He.createElement("table",null,He.createElement("tbody",null,v.entrySeq().map((i=>{let[m,v]=i;return He.createElement("tr",{key:m},He.createElement("td",null,m),He.createElement("td",null,v.get("enum")?He.createElement("select",{"data-variable":m,onChange:this.onServerVariableValueChange},v.get("enum").map((i=>He.createElement("option",{selected:i===u(s,m),key:i,value:i},i)))):He.createElement("input",{type:"text",value:u(s,m)||"",onChange:this.onServerVariableValueChange,"data-variable":m})))}))))):null)}}class ServersContainer extends He.Component{render(){const{specSelectors:i,oas3Selectors:s,oas3Actions:u,getComponent:m}=this.props,v=i.servers(),_=m("Servers");return v&&v.size?He.createElement("div",null,He.createElement("span",{className:"servers-title"},"Servers"),He.createElement(_,{servers:v,currentServer:s.selectedServer(),setSelectedServer:u.setSelectedServer,setServerVariableValue:u.setServerVariableValue,getServerVariable:s.serverVariableValue,getEffectiveServerValue:s.serverEffectiveValue})):null}}const hI=Function.prototype;class RequestBodyEditor extends He.PureComponent{static defaultProps={onChange:hI,userHasEditedBody:!1};constructor(i,s){super(i,s),this.state={value:stringify(i.value)||i.defaultValue},i.onChange(i.value)}applyDefaultValue=i=>{const{onChange:s,defaultValue:u}=i||this.props;return this.setState({value:u}),s(u)};onChange=i=>{this.props.onChange(stringify(i))};onDomChange=i=>{const s=i.target.value;this.setState({value:s},(()=>this.onChange(s)))};UNSAFE_componentWillReceiveProps(i){this.props.value!==i.value&&i.value!==this.state.value&&this.setState({value:stringify(i.value)}),!i.value&&i.defaultValue&&this.state.value&&this.applyDefaultValue(i)}render(){let{getComponent:i,errors:s}=this.props,{value:u}=this.state,m=s.size>0;const v=i("TextArea");return He.createElement("div",{className:"body-param"},He.createElement(v,{className:gC()("body-param__text",{invalid:m}),title:s.size?s.join(", "):"",value:u,onChange:this.onDomChange}))}}class HttpAuth extends He.Component{constructor(i,s){super(i,s);let{name:u,schema:m}=this.props,v=this.getValue();this.state={name:u,schema:m,value:v}}getValue(){let{name:i,authorized:s}=this.props;return s&&s.getIn([i,"value"])}onChange=i=>{let{onChange:s}=this.props,{value:u,name:m}=i.target,v=Object.assign({},this.state.value);m?v[m]=u:v=u,this.setState({value:v},(()=>s(this.state)))};render(){let{schema:i,getComponent:s,errSelectors:u,name:m}=this.props;const v=s("Input"),_=s("Row"),j=s("Col"),M=s("authError"),$=s("Markdown",!0),W=s("JumpToPath",!0),X=(i.get("scheme")||"").toLowerCase();let Y=this.getValue(),Z=u.allErrors().filter((i=>i.get("authId")===m));if("basic"===X){let s=Y?Y.get("username"):null;return He.createElement("div",null,He.createElement("h4",null,He.createElement("code",null,m||i.get("name")),"  (http, Basic)",He.createElement(W,{path:["securityDefinitions",m]})),s&&He.createElement("h6",null,"Authorized"),He.createElement(_,null,He.createElement($,{source:i.get("description")})),He.createElement(_,null,He.createElement("label",null,"Username:"),s?He.createElement("code",null," ",s," "):He.createElement(j,null,He.createElement(v,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),He.createElement(_,null,He.createElement("label",null,"Password:"),s?He.createElement("code",null," ****** "):He.createElement(j,null,He.createElement(v,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),Z.valueSeq().map(((i,s)=>He.createElement(M,{error:i,key:s}))))}return"bearer"===X?He.createElement("div",null,He.createElement("h4",null,He.createElement("code",null,m||i.get("name")),"  (http, Bearer)",He.createElement(W,{path:["securityDefinitions",m]})),Y&&He.createElement("h6",null,"Authorized"),He.createElement(_,null,He.createElement($,{source:i.get("description")})),He.createElement(_,null,He.createElement("label",null,"Value:"),Y?He.createElement("code",null," ****** "):He.createElement(j,null,He.createElement(v,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),Z.valueSeq().map(((i,s)=>He.createElement(M,{error:i,key:s})))):He.createElement("div",null,He.createElement("em",null,He.createElement("b",null,m)," HTTP authentication: unsupported scheme ",`'${X}'`))}}class operation_servers_OperationServers extends He.Component{setSelectedServer=i=>{const{path:s,method:u}=this.props;return this.forceUpdate(),this.props.setSelectedServer(i,`${s}:${u}`)};setServerVariableValue=i=>{const{path:s,method:u}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...i,namespace:`${s}:${u}`})};getSelectedServer=()=>{const{path:i,method:s}=this.props;return this.props.getSelectedServer(`${i}:${s}`)};getServerVariable=(i,s)=>{const{path:u,method:m}=this.props;return this.props.getServerVariable({namespace:`${u}:${m}`,server:i},s)};getEffectiveServerValue=i=>{const{path:s,method:u}=this.props;return this.props.getEffectiveServerValue({server:i,namespace:`${s}:${u}`})};render(){const{operationServers:i,pathServers:s,getComponent:u}=this.props;if(!i&&!s)return null;const m=u("Servers"),v=i||s,_=i?"operation":"path";return He.createElement("div",{className:"opblock-section operation-servers"},He.createElement("div",{className:"opblock-section-header"},He.createElement("div",{className:"tab-header"},He.createElement("h4",{className:"opblock-title"},"Servers"))),He.createElement("div",{className:"opblock-description-wrapper"},He.createElement("h4",{className:"message"},"These ",_,"-level options override the global server options."),He.createElement(m,{servers:v,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}const dI={Callbacks:callbacks,HttpAuth,RequestBody:components_request_body,Servers:servers_Servers,ServersContainer,RequestBodyEditor,OperationServers:operation_servers_OperationServers,operationLink:pI},fI=new Remarkable("commonmark");fI.block.ruler.enable(["table"]),fI.set({linkTarget:"_blank"});const markdown_Markdown=i=>{let{source:s,className:u="",getConfigs:m}=i;if("string"!=typeof s)return null;if(s){const{useUnsafeMarkdown:i}=m(),v=sanitizer(fI.render(s),{useUnsafeMarkdown:i});let _;return"string"==typeof v&&(_=v.trim()),He.createElement("div",{dangerouslySetInnerHTML:{__html:_},className:gC()(u,"renderedMarkdown")})}return null};markdown_Markdown.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const mI=OAS3ComponentWrapFactory(markdown_Markdown),gI=OAS3ComponentWrapFactory((i=>{let{Ori:s,...u}=i;const{schema:m,getComponent:v,errSelectors:_,authorized:j,onAuthChange:M,name:$}=u,W=v("HttpAuth");return"http"===m.get("type")?He.createElement(W,{key:$,schema:m,name:$,errSelectors:_,authorized:j,getComponent:v,onChange:M}):He.createElement(s,u)})),yI=OAS3ComponentWrapFactory(OnlineValidatorBadge);class ModelComponent extends He.Component{render(){let{getConfigs:i,schema:s}=this.props,u=["model-box"],m=null;return!0===s.get("deprecated")&&(u.push("deprecated"),m=He.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),He.createElement("div",{className:u.join(" ")},m,He.createElement(Model,Ao()({},this.props,{getConfigs:i,depth:1,expandDepth:this.props.expandDepth||0})))}}const vI=OAS3ComponentWrapFactory(ModelComponent),bI=OAS3ComponentWrapFactory((i=>{let{Ori:s,...u}=i;const{schema:m,getComponent:v,errors:_,onChange:j}=u,M=m&&m.get?m.get("format"):null,$=m&&m.get?m.get("type"):null,W=v("Input");return $&&"string"===$&&M&&("binary"===M||"base64"===M)?He.createElement(W,{type:"file",className:_.length?"invalid":"",title:_.length?_:"",onChange:i=>{j(i.target.files[0])},disabled:s.isDisabled}):He.createElement(s,u)})),_I=function OAS30ComponentWrapFactory(i){return(s,u)=>m=>"function"==typeof u.specSelectors?.isOAS30?u.specSelectors.isOAS30()?He.createElement(i,Ao()({},m,u,{Ori:s})):He.createElement(s,m):(console.warn("OAS30 wrapper: couldn't get spec"),null)}((i=>{const{Ori:s}=i;return He.createElement(s,{oasVersion:"3.0"})})),EI={Markdown:mI,AuthItem:gI,OpenAPIVersion:_I,JsonSchema_string:bI,model:vI,onlineValidatorBadge:yI},wI="oas3_set_servers",SI="oas3_set_request_body_value",xI="oas3_set_request_body_retain_flag",kI="oas3_set_request_body_inclusion",OI="oas3_set_active_examples_member",AI="oas3_set_request_content_type",CI="oas3_set_response_content_type",jI="oas3_set_server_variable_value",PI="oas3_set_request_body_validate_error",II="oas3_clear_request_body_validate_error",NI="oas3_clear_request_body_value";function setSelectedServer(i,s){return{type:wI,payload:{selectedServerUrl:i,namespace:s}}}function setRequestBodyValue(i){let{value:s,pathMethod:u}=i;return{type:SI,payload:{value:s,pathMethod:u}}}const setRetainRequestBodyValueFlag=i=>{let{value:s,pathMethod:u}=i;return{type:xI,payload:{value:s,pathMethod:u}}};function setRequestBodyInclusion(i){let{value:s,pathMethod:u,name:m}=i;return{type:kI,payload:{value:s,pathMethod:u,name:m}}}function setActiveExamplesMember(i){let{name:s,pathMethod:u,contextType:m,contextName:v}=i;return{type:OI,payload:{name:s,pathMethod:u,contextType:m,contextName:v}}}function setRequestContentType(i){let{value:s,pathMethod:u}=i;return{type:AI,payload:{value:s,pathMethod:u}}}function setResponseContentType(i){let{value:s,path:u,method:m}=i;return{type:CI,payload:{value:s,path:u,method:m}}}function setServerVariableValue(i){let{server:s,namespace:u,key:m,val:v}=i;return{type:jI,payload:{server:s,namespace:u,key:m,val:v}}}const setRequestBodyValidateError=i=>{let{path:s,method:u,validationErrors:m}=i;return{type:PI,payload:{path:s,method:u,validationErrors:m}}},clearRequestBodyValidateError=i=>{let{path:s,method:u}=i;return{type:II,payload:{path:s,method:u}}},initRequestBodyValidateError=i=>{let{pathMethod:s}=i;return{type:II,payload:{path:s[0],method:s[1]}}},clearRequestBodyValue=i=>{let{pathMethod:s}=i;return{type:NI,payload:{pathMethod:s}}},oas3_selectors_onlyOAS3=i=>function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.getSystem().specSelectors.isOAS3()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}};const TI=oas3_selectors_onlyOAS3(((i,s)=>{const u=s?[s,"selectedServer"]:["selectedServer"];return i.getIn(u)||""})),MI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"bodyValue"])||null)),RI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"retainBodyValue"])||!1)),selectDefaultRequestBodyValue=(i,s,u)=>i=>{const{oas3Selectors:m,specSelectors:v,fn:_}=i.getSystem();if(v.isOAS3()){const i=m.requestContentType(s,u);if(i)return getDefaultRequestBodyValue(v.specResolvedSubtree(["paths",s,u,"requestBody"]),i,m.activeExamplesMember(s,u,"requestBody","requestBody"),_)}return null},BI=oas3_selectors_onlyOAS3(((i,s,u)=>i=>{const{oas3Selectors:m,specSelectors:v,fn:_}=i;let j=!1;const M=m.requestContentType(s,u);let $=m.requestBodyValue(s,u);const W=v.specResolvedSubtree(["paths",s,u,"requestBody"]);if(!W)return!1;if(et.Map.isMap($)&&($=stringify($.mapEntries((i=>et.Map.isMap(i[1])?[i[0],i[1].get("value")]:i)).toJS())),et.List.isList($)&&($=stringify($)),M){const i=getDefaultRequestBodyValue(W,M,m.activeExamplesMember(s,u,"requestBody","requestBody"),_);j=!!$&&$!==i}return j})),DI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"bodyInclusion"])||(0,et.Map)())),LI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"errors"])||null)),FI=oas3_selectors_onlyOAS3(((i,s,u,m,v)=>i.getIn(["examples",s,u,m,v,"activeExample"])||null)),qI=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"requestContentType"])||null)),$I=oas3_selectors_onlyOAS3(((i,s,u)=>i.getIn(["requestData",s,u,"responseContentType"])||null)),zI=oas3_selectors_onlyOAS3(((i,s,u)=>{let m;if("string"!=typeof s){const{server:i,namespace:v}=s;m=v?[v,"serverVariableValues",i,u]:["serverVariableValues",i,u]}else{m=["serverVariableValues",s,u]}return i.getIn(m)||null})),UI=oas3_selectors_onlyOAS3(((i,s)=>{let u;if("string"!=typeof s){const{server:i,namespace:m}=s;u=m?[m,"serverVariableValues",i]:["serverVariableValues",i]}else{u=["serverVariableValues",s]}return i.getIn(u)||(0,et.OrderedMap)()})),VI=oas3_selectors_onlyOAS3(((i,s)=>{var u,m;if("string"!=typeof s){const{server:v,namespace:_}=s;m=v,u=_?i.getIn([_,"serverVariableValues",m]):i.getIn(["serverVariableValues",m])}else m=s,u=i.getIn(["serverVariableValues",m]);u=u||(0,et.OrderedMap)();let v=m;return u.map(((i,s)=>{v=v.replace(new RegExp(`{${s}}`,"g"),i)})),v})),WI=function validateRequestBodyIsRequired(i){return function(){for(var s=arguments.length,u=new Array(s),m=0;m{const m=s.getSystem().specSelectors.specJson();let v=[...u][1]||[];return!m.getIn(["paths",...v,"requestBody","required"])||i(...u)}}}(((i,s)=>((i,s)=>(s=s||[],!!i.getIn(["requestData",...s,"bodyValue"])))(i,s))),validateShallowRequired=(i,s)=>{let{oas3RequiredRequestBodyContentType:u,oas3RequestContentType:m,oas3RequestBodyValue:v}=s,_=[];if(!et.Map.isMap(v))return _;let j=[];return Object.keys(u.requestContentType).forEach((i=>{if(i===m){u.requestContentType[i].forEach((i=>{j.indexOf(i)<0&&j.push(i)}))}})),j.forEach((i=>{v.getIn([i,"value"])||_.push(i)})),_},KI=Xt((()=>["get","put","post","delete","options","head","patch","trace"])),HI={[wI]:(i,s)=>{let{payload:{selectedServerUrl:u,namespace:m}}=s;const v=m?[m,"selectedServer"]:["selectedServer"];return i.setIn(v,u)},[SI]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;if(!et.Map.isMap(u))return i.setIn(["requestData",v,_,"bodyValue"],u);let j,M=i.getIn(["requestData",v,_,"bodyValue"])||(0,et.Map)();et.Map.isMap(M)||(M=(0,et.Map)());const[...$]=u.keys();return $.forEach((i=>{let s=u.getIn([i]);M.has(i)&&et.Map.isMap(s)||(j=M.setIn([i,"value"],s))})),i.setIn(["requestData",v,_,"bodyValue"],j)},[xI]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;return i.setIn(["requestData",v,_,"retainBodyValue"],u)},[kI]:(i,s)=>{let{payload:{value:u,pathMethod:m,name:v}}=s,[_,j]=m;return i.setIn(["requestData",_,j,"bodyInclusion",v],u)},[OI]:(i,s)=>{let{payload:{name:u,pathMethod:m,contextType:v,contextName:_}}=s,[j,M]=m;return i.setIn(["examples",j,M,v,_,"activeExample"],u)},[AI]:(i,s)=>{let{payload:{value:u,pathMethod:m}}=s,[v,_]=m;return i.setIn(["requestData",v,_,"requestContentType"],u)},[CI]:(i,s)=>{let{payload:{value:u,path:m,method:v}}=s;return i.setIn(["requestData",m,v,"responseContentType"],u)},[jI]:(i,s)=>{let{payload:{server:u,namespace:m,key:v,val:_}}=s;const j=m?[m,"serverVariableValues",u,v]:["serverVariableValues",u,v];return i.setIn(j,_)},[PI]:(i,s)=>{let{payload:{path:u,method:m,validationErrors:v}}=s,_=[];if(_.push("Required field is not provided"),v.missingBodyValue)return i.setIn(["requestData",u,m,"errors"],(0,et.fromJS)(_));if(v.missingRequiredKeys&&v.missingRequiredKeys.length>0){const{missingRequiredKeys:s}=v;return i.updateIn(["requestData",u,m,"bodyValue"],(0,et.fromJS)({}),(i=>s.reduce(((i,s)=>i.setIn([s,"errors"],(0,et.fromJS)(_))),i)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),i},[II]:(i,s)=>{let{payload:{path:u,method:m}}=s;const v=i.getIn(["requestData",u,m,"bodyValue"]);if(!et.Map.isMap(v))return i.setIn(["requestData",u,m,"errors"],(0,et.fromJS)([]));const[..._]=v.keys();return _?i.updateIn(["requestData",u,m,"bodyValue"],(0,et.fromJS)({}),(i=>_.reduce(((i,s)=>i.setIn([s,"errors"],(0,et.fromJS)([]))),i))):i},[NI]:(i,s)=>{let{payload:{pathMethod:u}}=s,[m,v]=u;const _=i.getIn(["requestData",m,v,"bodyValue"]);return _?et.Map.isMap(_)?i.setIn(["requestData",m,v,"bodyValue"],(0,et.Map)()):i.setIn(["requestData",m,v,"bodyValue"],""):i}};function oas3(){return{components:dI,wrapComponents:EI,statePlugins:{spec:{wrapSelectors:Ie,selectors:Re},auth:{wrapSelectors:Te},oas3:{actions:{...qe},reducers:HI,selectors:{...ze}}}}}const webhooks=i=>{let{specSelectors:s,getComponent:u}=i;const m=s.selectWebhooksOperations(),v=Object.keys(m),_=u("OperationContainer",!0);return 0===v.length?null:He.createElement("div",{className:"webhooks"},He.createElement("h2",null,"Webhooks"),v.map((i=>He.createElement("div",{key:`${i}-webhook`},m[i].map((s=>He.createElement(_,{key:`${i}-${s.method}-webhook`,op:s.operation,tag:"webhooks",method:s.method,path:i,specPath:s.specPath,allowTryItOut:!1})))))))},oas31_components_license=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectLicenseNameField(),v=u.selectLicenseUrl(),_=s("Link");return He.createElement("div",{className:"info__license"},v?He.createElement("div",{className:"info__license__url"},He.createElement(_,{target:"_blank",href:sanitizeUrl(v)},m)):He.createElement("span",null,m))},oas31_components_contact=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectContactNameField(),v=u.selectContactUrl(),_=u.selectContactEmailField(),j=s("Link");return He.createElement("div",{className:"info__contact"},v&&He.createElement("div",null,He.createElement(j,{href:sanitizeUrl(v),target:"_blank"},m," - Website")),_&&He.createElement(j,{href:sanitizeUrl(`mailto:${_}`)},v?`Send email to ${m}`:`Contact ${m}`))},oas31_components_info=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.version(),v=u.url(),_=u.basePath(),j=u.host(),M=u.selectInfoSummaryField(),$=u.selectInfoDescriptionField(),W=u.selectInfoTitleField(),X=u.selectInfoTermsOfServiceUrl(),Y=u.selectExternalDocsUrl(),Z=u.selectExternalDocsDescriptionField(),ee=u.contact(),ae=u.license(),ie=s("Markdown",!0),le=s("Link"),ce=s("VersionStamp"),pe=s("OpenAPIVersion"),de=s("InfoUrl"),fe=s("InfoBasePath"),ye=s("License",!0),be=s("Contact",!0),_e=s("JsonSchemaDialect",!0);return He.createElement("div",{className:"info"},He.createElement("hgroup",{className:"main"},He.createElement("h2",{className:"title"},W,He.createElement("span",null,m&&He.createElement(ce,{version:m}),He.createElement(pe,{oasVersion:"3.1"}))),(j||_)&&He.createElement(fe,{host:j,basePath:_}),v&&He.createElement(de,{getComponent:s,url:v})),M&&He.createElement("p",{className:"info__summary"},M),He.createElement("div",{className:"info__description description"},He.createElement(ie,{source:$})),X&&He.createElement("div",{className:"info__tos"},He.createElement(le,{target:"_blank",href:sanitizeUrl(X)},"Terms of service")),ee.size>0&&He.createElement(be,null),ae.size>0&&He.createElement(ye,null),Y&&He.createElement(le,{className:"info__extdocs",target:"_blank",href:sanitizeUrl(Y)},Z||Y),He.createElement(_e,null))},json_schema_dialect=i=>{let{getComponent:s,specSelectors:u}=i;const m=u.selectJsonSchemaDialectField(),v=u.selectJsonSchemaDialectDefault(),_=s("Link");return He.createElement(He.Fragment,null,m&&m===v&&He.createElement("p",{className:"info__jsonschemadialect"},"JSON Schema dialect:"," ",He.createElement(_,{target:"_blank",href:sanitizeUrl(m)},m)),m&&m!==v&&He.createElement("div",{className:"error-wrapper"},He.createElement("div",{className:"no-margin"},He.createElement("div",{className:"errors"},He.createElement("div",{className:"errors-wrapper"},He.createElement("h4",{className:"center"},"Warning"),He.createElement("p",{className:"message"},He.createElement("strong",null,"OpenAPI.jsonSchemaDialect")," field contains a value different from the default value of"," ",He.createElement(_,{target:"_blank",href:v},v),". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value."))))))},version_pragma_filter=i=>{let{bypass:s,isSwagger2:u,isOAS3:m,isOAS31:v,alsoShow:_,children:j}=i;return s?He.createElement("div",null,j):u&&(m||v)?He.createElement("div",{className:"version-pragma"},_,He.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},He.createElement("div",null,He.createElement("h3",null,"Unable to render this definition"),He.createElement("p",null,He.createElement("code",null,"swagger")," and ",He.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),He.createElement("p",null,"Supported version fields are ",He.createElement("code",null,'swagger: "2.0"')," and those that match ",He.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",He.createElement("code",null,"openapi: 3.1.0"),").")))):u||m||v?He.createElement("div",null,j):He.createElement("div",{className:"version-pragma"},_,He.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},He.createElement("div",null,He.createElement("h3",null,"Unable to render this definition"),He.createElement("p",null,"The provided definition does not specify a valid version field."),He.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",He.createElement("code",null,'swagger: "2.0"')," and those that match ",He.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",He.createElement("code",null,"openapi: 3.1.0"),")."))))},getModelName=i=>"string"==typeof i&&i.includes("#/components/schemas/")?(i=>{const s=i.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(s)}catch{return s}})(i.replace(/^.*#\/components\/schemas\//,"")):null,JI=(0,He.forwardRef)(((i,s)=>{let{schema:u,getComponent:m,onToggle:v}=i;const _=m("JSONSchema202012"),j=getModelName(u.get("$$ref")),M=(0,He.useCallback)(((i,s)=>{v(j,s)}),[j,v]);return He.createElement(_,{name:j,schema:u.toJS(),ref:s,onExpand:M})}));JI.defaultProps={name:"",displayName:"",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};const GI=JI,models=i=>{let{specActions:s,specSelectors:u,layoutSelectors:m,layoutActions:v,getComponent:_,getConfigs:j}=i;const M=u.selectSchemas(),$=Object.keys(M).length>0,W=["components","schemas"],{docExpansion:X,defaultModelsExpandDepth:Y}=j(),Z=Y>0&&"none"!==X,ee=m.isShown(W,Z),ae=_("Collapse"),ie=_("JSONSchema202012"),le=_("ArrowUpIcon"),ce=_("ArrowDownIcon");(0,He.useEffect)((()=>{const i=ee&&Y>1,m=null!=u.specResolvedSubtree(W);i&&!m&&s.requestResolvedSubtree(W)}),[ee,Y]);const pe=(0,He.useCallback)((()=>{v.show(W,!ee)}),[ee]),de=(0,He.useCallback)((i=>{null!==i&&v.readyToScroll(W,i)}),[]),handleJSONSchema202012Ref=i=>s=>{null!==s&&v.readyToScroll([...W,i],s)},handleJSONSchema202012Expand=i=>(m,v)=>{if(v){const m=[...W,i];null!=u.specResolvedSubtree(m)||s.requestResolvedSubtree([...W,i])}};return!$||Y<0?null:He.createElement("section",{className:gC()("models",{"is-open":ee}),ref:de},He.createElement("h4",null,He.createElement("button",{"aria-expanded":ee,className:"models-control",onClick:pe},He.createElement("span",null,"Schemas"),ee?He.createElement(le,null):He.createElement(ce,null))),He.createElement(ae,{isOpened:ee},Object.entries(M).map((i=>{let[s,u]=i;return He.createElement(ie,{key:s,ref:handleJSONSchema202012Ref(s),schema:u,name:s,onExpand:handleJSONSchema202012Expand(s)})}))))},mutual_tls_auth=i=>{let{schema:s,getComponent:u}=i;const m=u("JumpToPath",!0);return He.createElement("div",null,He.createElement("h4",null,s.get("name")," (mutualTLS)"," ",He.createElement(m,{path:["securityDefinitions",s.get("name")]})),He.createElement("p",null,"Mutual TLS is required by this API/Operation. Certificates are managed via your Operating System and/or your browser."),He.createElement("p",null,s.get("description")))};class auths_Auths extends He.Component{constructor(i,s){super(i,s),this.state={}}onAuthChange=i=>{let{name:s}=i;this.setState({[s]:i})};submitAuth=i=>{i.preventDefault();let{authActions:s}=this.props;s.authorizeWithPersistOption(this.state)};logoutClick=i=>{i.preventDefault();let{authActions:s,definitions:u}=this.props,m=u.map(((i,s)=>s)).toArray();this.setState(m.reduce(((i,s)=>(i[s]="",i)),{})),s.logoutWithPersistOption(m)};close=i=>{i.preventDefault();let{authActions:s}=this.props;s.showDefinitions(!1)};render(){let{definitions:i,getComponent:s,authSelectors:u,errSelectors:m}=this.props;const v=s("AuthItem"),_=s("oauth2",!0),j=s("Button"),M=u.authorized(),$=i.filter(((i,s)=>!!M.get(s))),W=i.filter((i=>"oauth2"!==i.get("type")&&"mutualTLS"!==i.get("type"))),X=i.filter((i=>"oauth2"===i.get("type"))),Y=i.filter((i=>"mutualTLS"===i.get("type")));return He.createElement("div",{className:"auth-container"},W.size>0&&He.createElement("form",{onSubmit:this.submitAuth},W.map(((i,u)=>He.createElement(v,{key:u,schema:i,name:u,getComponent:s,onAuthChange:this.onAuthChange,authorized:M,errSelectors:m}))).toArray(),He.createElement("div",{className:"auth-btn-wrapper"},W.size===$.size?He.createElement(j,{className:"btn modal-btn auth",onClick:this.logoutClick,"aria-label":"Remove authorization"},"Logout"):He.createElement(j,{type:"submit",className:"btn modal-btn auth authorize","aria-label":"Apply credentials"},"Authorize"),He.createElement(j,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),X.size>0?He.createElement("div",null,He.createElement("div",{className:"scope-def"},He.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),He.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),i.filter((i=>"oauth2"===i.get("type"))).map(((i,s)=>He.createElement("div",{key:s},He.createElement(_,{authorized:M,schema:i,name:s})))).toArray()):null,Y.size>0&&He.createElement("div",null,Y.map(((i,u)=>He.createElement(v,{key:u,schema:i,name:u,getComponent:s,onAuthChange:this.onAuthChange,authorized:M,errSelectors:m}))).toArray()))}}const XI=auths_Auths,isOAS31=i=>{const s=i.get("openapi");return"string"==typeof s&&/^3\.1\.(?:[1-9]\d*|0)$/.test(s)},fn_createOnlyOAS31Selector=i=>function(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{if(u.getSystem().specSelectors.isOAS31()){const v=i(s,...m);return"function"==typeof v?v(u):v}return null}},createOnlyOAS31SelectorWrapper=i=>(s,u)=>function(m){for(var v=arguments.length,_=new Array(v>1?v-1:0),j=1;jfunction(s){for(var u=arguments.length,m=new Array(u>1?u-1:0),v=1;v{const v=i(s,u,...m);return"function"==typeof v?v(u):v}},createOnlyOAS31ComponentWrapper=i=>(s,u)=>m=>u.specSelectors.isOAS31()?He.createElement(i,Ao()({},m,{originalComponent:s,getSystem:u.getSystem})):He.createElement(s,m),YI=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31License",!0);return He.createElement(u,null)})),QI=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31Contact",!0);return He.createElement(u,null)})),ZI=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const u=s().getComponent("OAS31Info",!0);return He.createElement(u,null)})),makeIsExpandable=(i,s)=>{const{fn:u}=s();if("function"!=typeof i)return null;const{hasKeyword:m}=u.jsonSchema202012;return s=>i(s)||m(s,"example")||s?.xml||s?.discriminator||s?.externalDocs},getProperties=(i,s)=>{let{includeReadOnly:u,includeWriteOnly:m}=s;if(!i?.properties)return{};const v=Object.entries(i.properties).filter((i=>{let[,s]=i;return(!(!0===s?.readOnly)||u)&&(!(!0===s?.writeOnly)||m)}));return Object.fromEntries(v)},eN=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s,...u}=i;const m=s(),{getComponent:v,fn:_,getConfigs:j}=m,M=j(),$=v("OAS31Model"),W=v("JSONSchema202012"),X=v("JSONSchema202012Keyword$schema"),Y=v("JSONSchema202012Keyword$vocabulary"),Z=v("JSONSchema202012Keyword$id"),ee=v("JSONSchema202012Keyword$anchor"),ae=v("JSONSchema202012Keyword$dynamicAnchor"),ie=v("JSONSchema202012Keyword$ref"),le=v("JSONSchema202012Keyword$dynamicRef"),ce=v("JSONSchema202012Keyword$defs"),pe=v("JSONSchema202012Keyword$comment"),de=v("JSONSchema202012KeywordAllOf"),fe=v("JSONSchema202012KeywordAnyOf"),ye=v("JSONSchema202012KeywordOneOf"),be=v("JSONSchema202012KeywordNot"),_e=v("JSONSchema202012KeywordIf"),we=v("JSONSchema202012KeywordThen"),Se=v("JSONSchema202012KeywordElse"),xe=v("JSONSchema202012KeywordDependentSchemas"),Pe=v("JSONSchema202012KeywordPrefixItems"),Ie=v("JSONSchema202012KeywordItems"),Te=v("JSONSchema202012KeywordContains"),Re=v("JSONSchema202012KeywordProperties"),qe=v("JSONSchema202012KeywordPatternProperties"),ze=v("JSONSchema202012KeywordAdditionalProperties"),Ve=v("JSONSchema202012KeywordPropertyNames"),We=v("JSONSchema202012KeywordUnevaluatedItems"),Xe=v("JSONSchema202012KeywordUnevaluatedProperties"),Ye=v("JSONSchema202012KeywordType"),Qe=v("JSONSchema202012KeywordEnum"),et=v("JSONSchema202012KeywordConst"),tt=v("JSONSchema202012KeywordConstraint"),rt=v("JSONSchema202012KeywordDependentRequired"),nt=v("JSONSchema202012KeywordContentSchema"),ot=v("JSONSchema202012KeywordTitle"),at=v("JSONSchema202012KeywordDescription"),it=v("JSONSchema202012KeywordDefault"),st=v("JSONSchema202012KeywordDeprecated"),lt=v("JSONSchema202012KeywordReadOnly"),ct=v("JSONSchema202012KeywordWriteOnly"),ut=v("JSONSchema202012Accordion"),pt=v("JSONSchema202012ExpandDeepButton"),ht=v("JSONSchema202012ChevronRightIcon"),dt=v("withJSONSchema202012Context")($,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:M.defaultModelExpandDepth,includeReadOnly:Boolean(u.includeReadOnly),includeWriteOnly:Boolean(u.includeWriteOnly)},components:{JSONSchema:W,Keyword$schema:X,Keyword$vocabulary:Y,Keyword$id:Z,Keyword$anchor:ee,Keyword$dynamicAnchor:ae,Keyword$ref:ie,Keyword$dynamicRef:le,Keyword$defs:ce,Keyword$comment:pe,KeywordAllOf:de,KeywordAnyOf:fe,KeywordOneOf:ye,KeywordNot:be,KeywordIf:_e,KeywordThen:we,KeywordElse:Se,KeywordDependentSchemas:xe,KeywordPrefixItems:Pe,KeywordItems:Ie,KeywordContains:Te,KeywordProperties:Re,KeywordPatternProperties:qe,KeywordAdditionalProperties:ze,KeywordPropertyNames:Ve,KeywordUnevaluatedItems:We,KeywordUnevaluatedProperties:Xe,KeywordType:Ye,KeywordEnum:Qe,KeywordConst:et,KeywordConstraint:tt,KeywordDependentRequired:rt,KeywordContentSchema:nt,KeywordTitle:ot,KeywordDescription:at,KeywordDefault:it,KeywordDeprecated:st,KeywordReadOnly:lt,KeywordWriteOnly:ct,Accordion:ut,ExpandDeepButton:pt,ChevronRightIcon:ht},fn:{upperFirst:_.upperFirst,isExpandable:makeIsExpandable(_.jsonSchema202012.isExpandable,s),getProperties}});return He.createElement(dt,u)})),tN=eN,rN=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s}=i;const{getComponent:u,fn:m,getConfigs:v}=s(),_=v();if(rN.ModelsWithJSONSchemaContext)return He.createElement(rN.ModelsWithJSONSchemaContext,null);const j=u("OAS31Models",!0),M=u("JSONSchema202012"),$=u("JSONSchema202012Keyword$schema"),W=u("JSONSchema202012Keyword$vocabulary"),X=u("JSONSchema202012Keyword$id"),Y=u("JSONSchema202012Keyword$anchor"),Z=u("JSONSchema202012Keyword$dynamicAnchor"),ee=u("JSONSchema202012Keyword$ref"),ae=u("JSONSchema202012Keyword$dynamicRef"),ie=u("JSONSchema202012Keyword$defs"),le=u("JSONSchema202012Keyword$comment"),ce=u("JSONSchema202012KeywordAllOf"),pe=u("JSONSchema202012KeywordAnyOf"),de=u("JSONSchema202012KeywordOneOf"),fe=u("JSONSchema202012KeywordNot"),ye=u("JSONSchema202012KeywordIf"),be=u("JSONSchema202012KeywordThen"),_e=u("JSONSchema202012KeywordElse"),we=u("JSONSchema202012KeywordDependentSchemas"),Se=u("JSONSchema202012KeywordPrefixItems"),xe=u("JSONSchema202012KeywordItems"),Pe=u("JSONSchema202012KeywordContains"),Ie=u("JSONSchema202012KeywordProperties"),Te=u("JSONSchema202012KeywordPatternProperties"),Re=u("JSONSchema202012KeywordAdditionalProperties"),qe=u("JSONSchema202012KeywordPropertyNames"),ze=u("JSONSchema202012KeywordUnevaluatedItems"),Ve=u("JSONSchema202012KeywordUnevaluatedProperties"),We=u("JSONSchema202012KeywordType"),Xe=u("JSONSchema202012KeywordEnum"),Ye=u("JSONSchema202012KeywordConst"),Qe=u("JSONSchema202012KeywordConstraint"),et=u("JSONSchema202012KeywordDependentRequired"),tt=u("JSONSchema202012KeywordContentSchema"),rt=u("JSONSchema202012KeywordTitle"),nt=u("JSONSchema202012KeywordDescription"),ot=u("JSONSchema202012KeywordDefault"),at=u("JSONSchema202012KeywordDeprecated"),it=u("JSONSchema202012KeywordReadOnly"),st=u("JSONSchema202012KeywordWriteOnly"),lt=u("JSONSchema202012Accordion"),ct=u("JSONSchema202012ExpandDeepButton"),ut=u("JSONSchema202012ChevronRightIcon"),pt=u("withJSONSchema202012Context");return rN.ModelsWithJSONSchemaContext=pt(j,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:_.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:M,Keyword$schema:$,Keyword$vocabulary:W,Keyword$id:X,Keyword$anchor:Y,Keyword$dynamicAnchor:Z,Keyword$ref:ee,Keyword$dynamicRef:ae,Keyword$defs:ie,Keyword$comment:le,KeywordAllOf:ce,KeywordAnyOf:pe,KeywordOneOf:de,KeywordNot:fe,KeywordIf:ye,KeywordThen:be,KeywordElse:_e,KeywordDependentSchemas:we,KeywordPrefixItems:Se,KeywordItems:xe,KeywordContains:Pe,KeywordProperties:Ie,KeywordPatternProperties:Te,KeywordAdditionalProperties:Re,KeywordPropertyNames:qe,KeywordUnevaluatedItems:ze,KeywordUnevaluatedProperties:Ve,KeywordType:We,KeywordEnum:Xe,KeywordConst:Ye,KeywordConstraint:Qe,KeywordDependentRequired:et,KeywordContentSchema:tt,KeywordTitle:rt,KeywordDescription:nt,KeywordDefault:ot,KeywordDeprecated:at,KeywordReadOnly:it,KeywordWriteOnly:st,Accordion:lt,ExpandDeepButton:ct,ChevronRightIcon:ut},fn:{upperFirst:m.upperFirst,isExpandable:m.jsonSchema202012.isExpandable,getProperties:m.jsonSchema202012.getProperties}}),He.createElement(rN.ModelsWithJSONSchemaContext,null)}));rN.ModelsWithJSONSchemaContext=null;const nN=rN,wrap_components_version_pragma_filter=(i,s)=>i=>{const u=s.specSelectors.isOAS31(),m=s.getComponent("OAS31VersionPragmaFilter");return He.createElement(m,Ao()({isOAS31:u},i))},oN=createOnlyOAS31ComponentWrapper((i=>{let{originalComponent:s,...u}=i;const{getComponent:m,schema:v}=u,_=m("MutualTLSAuth",!0);return"mutualTLS"===v.get("type")?He.createElement(_,{schema:v}):He.createElement(s,u)})),aN=oN,iN=createOnlyOAS31ComponentWrapper((i=>{let{getSystem:s,...u}=i;const m=s().getComponent("OAS31Auths",!0);return He.createElement(m,u)})),sN=iN,lN=(0,et.Map)(),cN=Xt(((i,s)=>s.specSelectors.specJson()),isOAS31),selectors_webhooks=()=>i=>i.specSelectors.specJson().get("webhooks",lN),uN=Xt(((i,s)=>s.specSelectors.webhooks()),((i,s)=>s.specSelectors.validOperationMethods()),((i,s)=>s.specSelectors.specResolvedSubtree(["webhooks"])),((i,s)=>et.Map.isMap(i)?i.reduce(((i,u,m)=>{if(!et.Map.isMap(u))return i;const v=u.entrySeq().filter((i=>{let[u]=i;return s.includes(u)})).map((i=>{let[s,u]=i;return{operation:(0,et.Map)({operation:u}),method:s,path:m,specPath:(0,et.List)(["webhooks",m,s])}}));return i.concat(v)}),(0,et.List)()).groupBy((i=>i.path)).map((i=>i.toArray())).toObject():{})),selectors_license=()=>i=>i.specSelectors.info().get("license",lN),selectLicenseNameField=()=>i=>i.specSelectors.license().get("name","License"),selectLicenseUrlField=()=>i=>i.specSelectors.license().get("url"),pN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectLicenseUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectLicenseIdentifierField=()=>i=>i.specSelectors.license().get("identifier"),selectors_contact=()=>i=>i.specSelectors.info().get("contact",lN),selectContactNameField=()=>i=>i.specSelectors.contact().get("name","the developer"),selectContactEmailField=()=>i=>i.specSelectors.contact().get("email"),selectContactUrlField=()=>i=>i.specSelectors.contact().get("url"),hN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectContactUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectInfoTitleField=()=>i=>i.specSelectors.info().get("title"),selectInfoSummaryField=()=>i=>i.specSelectors.info().get("summary"),selectInfoDescriptionField=()=>i=>i.specSelectors.info().get("description"),selectInfoTermsOfServiceField=()=>i=>i.specSelectors.info().get("termsOfService"),dN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectInfoTermsOfServiceField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectExternalDocsDescriptionField=()=>i=>i.specSelectors.externalDocs().get("description"),selectExternalDocsUrlField=()=>i=>i.specSelectors.externalDocs().get("url"),fN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectExternalDocsUrlField()),((i,s,u)=>{if(u)return safeBuildUrl(u,i,{selectedServer:s})})),selectJsonSchemaDialectField=()=>i=>i.specSelectors.specJson().get("jsonSchemaDialect"),selectJsonSchemaDialectDefault=()=>"https://spec.openapis.org/oas/3.1/dialect/base",mN=Xt(((i,s)=>s.specSelectors.definitions()),((i,s)=>s.specSelectors.specResolvedSubtree(["components","schemas"])),((i,s)=>et.Map.isMap(i)?et.Map.isMap(s)?Object.entries(i.toJS()).reduce(((i,u)=>{let[m,v]=u;const _=s.get(m);return i[m]=_?.toJS()||v,i}),{}):i.toJS():{})),wrap_selectors_isOAS3=(i,s)=>function(u){const m=s.specSelectors.isOAS31();for(var v=arguments.length,_=new Array(v>1?v-1:0),j=1;j(i,s)=>s.oas31Selectors.selectLicenseUrl())),yN=createOnlyOAS31SelectorWrapper((()=>(i,s)=>{const u=s.specSelectors.securityDefinitions();let m=i();return u?(u.entrySeq().forEach((i=>{let[s,u]=i;"mutualTLS"===u.get("type")&&(m=m.push(new et.Map({[s]:u})))})),m):m})),vN=Xt(((i,s)=>s.specSelectors.url()),((i,s)=>s.oas3Selectors.selectedServer()),((i,s)=>s.specSelectors.selectLicenseUrlField()),((i,s)=>s.specSelectors.selectLicenseIdentifierField()),((i,s,u,m)=>u?safeBuildUrl(u,i,{selectedServer:s}):m?`https://spdx.org/licenses/${m}.html`:void 0)),keywords_Example=i=>{let{schema:s,getSystem:u}=i;const{fn:m}=u(),{hasKeyword:v,stringify:_}=m.jsonSchema202012.useFn();return v(s,"example")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--example"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Example"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},_(s.example))):null},keywords_Xml=i=>{let{schema:s,getSystem:u}=i;const m=s?.xml||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!!(m.name||m.namespace||m.prefix),[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ae=M("Accordion"),ie=M("ExpandDeepButton"),le=_("JSONSchema202012DeepExpansionContext")(),ce=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),pe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(le.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml"},W?He.createElement(He.Fragment,null,He.createElement(ae,{expanded:X,onChange:ce},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML")),He.createElement(ie,{expanded:X,onClick:pe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML"),!0===m.attribute&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"attribute"),!0===m.wrapped&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"wrapped"),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement(He.Fragment,null,m.name&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"name"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.name))),m.namespace&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"namespace"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.namespace))),m.prefix&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"prefix"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},m.prefix)))))))},DiscriminatorMapping_DiscriminatorMapping=i=>{let{discriminator:s}=i;const u=s?.mapping||{};return 0===Object.keys(u).length?null:Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("div",{key:`${s}-${u}`,className:"json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},s),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},u))}))};DiscriminatorMapping_DiscriminatorMapping.defaultProps={mapping:void 0};const bN=DiscriminatorMapping_DiscriminatorMapping,keywords_Discriminator_Discriminator=i=>{let{schema:s,getSystem:u}=i;const m=s?.discriminator||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!!m.mapping,[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ae=M("Accordion"),ie=M("ExpandDeepButton"),le=_("JSONSchema202012DeepExpansionContext")(),ce=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),pe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(le.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator"},W?He.createElement(He.Fragment,null,He.createElement(ae,{expanded:X,onChange:ce},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator")),He.createElement(ie,{expanded:X,onClick:pe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator"),m.propertyName&&He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},m.propertyName),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement(bN,{discriminator:m})))))},keywords_ExternalDocs=i=>{let{schema:s,getSystem:u}=i;const m=s?.externalDocs||{},{fn:v,getComponent:_}=u(),{useIsExpandedDeeply:j,useComponent:M}=v.jsonSchema202012,$=j(),W=!(!m.description&&!m.url),[X,Y]=(0,He.useState)($),[Z,ee]=(0,He.useState)(!1),ae=M("Accordion"),ie=M("ExpandDeepButton"),le=_("JSONSchema202012KeywordDescription"),ce=_("Link"),pe=_("JSONSchema202012DeepExpansionContext")(),de=(0,He.useCallback)((()=>{Y((i=>!i))}),[]),fe=(0,He.useCallback)(((i,s)=>{Y(s),ee(s)}),[]);return 0===Object.keys(m).length?null:He.createElement(pe.Provider,{value:Z},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs"},W?He.createElement(He.Fragment,null,He.createElement(ae,{expanded:X,onChange:de},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation")),He.createElement(ie,{expanded:X,onClick:fe})):He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation"),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!X})},X&&He.createElement(He.Fragment,null,m.description&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement(le,{schema:m,getSystem:u})),m.url&&He.createElement("li",{className:"json-schema-2020-12-property"},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"url"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},He.createElement(ce,{target:"_blank",href:sanitizeUrl(m.url)},m.url))))))))},keywords_Description=i=>{let{schema:s,getSystem:u}=i;if(!s?.description)return null;const{getComponent:m}=u(),v=m("Markdown");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},He.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},He.createElement(v,{source:s.description})))},_N=createOnlyOAS31ComponentWrapper(keywords_Description),EN=createOnlyOAS31ComponentWrapper((i=>{let{schema:s,getSystem:u,originalComponent:m}=i;const{getComponent:v}=u(),_=v("JSONSchema202012KeywordDiscriminator"),j=v("JSONSchema202012KeywordXml"),M=v("JSONSchema202012KeywordExample"),$=v("JSONSchema202012KeywordExternalDocs");return He.createElement(He.Fragment,null,He.createElement(m,{schema:s}),He.createElement(_,{schema:s,getSystem:u}),He.createElement(j,{schema:s,getSystem:u}),He.createElement($,{schema:s,getSystem:u}),He.createElement(M,{schema:s,getSystem:u}))})),wN=EN,keywords_Properties=i=>{let{schema:s,getSystem:u}=i;const{fn:m}=u(),{useComponent:v}=m.jsonSchema202012,{getDependentRequired:_,getProperties:j}=m.jsonSchema202012.useFn(),M=m.jsonSchema202012.useConfig(),$=Array.isArray(s?.required)?s.required:[],W=v("JSONSchema"),X=j(s,M);return 0===Object.keys(X).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},He.createElement("ul",null,Object.entries(X).map((i=>{let[u,m]=i;const v=$.includes(u),j=_(u,s);return He.createElement("li",{key:u,className:gC()("json-schema-2020-12-property",{"json-schema-2020-12-property--required":v})},He.createElement(W,{name:u,schema:m,dependentRequired:j}))}))))},SN=createOnlyOAS31ComponentWrapper(keywords_Properties);const xN=function afterLoad(i){let{fn:s,getSystem:u}=i;if(s.jsonSchema202012){const i=makeIsExpandable(s.jsonSchema202012.isExpandable,u);Object.assign(this.fn.jsonSchema202012,{isExpandable:i,getProperties})}if("function"==typeof s.sampleFromSchema&&s.jsonSchema202012){const i=((i,s)=>{const{fn:u,specSelectors:m}=s;return Object.fromEntries(Object.entries(i).map((i=>{let[s,v]=i;const _=u[s];return[s,function(){return m.isOAS31()?v(...arguments):"function"==typeof _?_(...arguments):void 0}]})))})({sampleFromSchema:s.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:s.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:s.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:s.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:s.jsonSchema202012.memoizedCreateXMLExample},u());Object.assign(this.fn,i)}},oas31=i=>{let{fn:s}=i;const u=s.createSystemSelector||fn_createSystemSelector,m=s.createOnlyOAS31Selector||fn_createOnlyOAS31Selector;return{afterLoad:xN,fn:{isOAS31,createSystemSelector:fn_createSystemSelector,createOnlyOAS31Selector:fn_createOnlyOAS31Selector},components:{Webhooks:webhooks,JsonSchemaDialect:json_schema_dialect,MutualTLSAuth:mutual_tls_auth,OAS31Info:oas31_components_info,OAS31License:oas31_components_license,OAS31Contact:oas31_components_contact,OAS31VersionPragmaFilter:version_pragma_filter,OAS31Model:GI,OAS31Models:models,OAS31Auths:XI,JSONSchema202012KeywordExample:keywords_Example,JSONSchema202012KeywordXml:keywords_Xml,JSONSchema202012KeywordDiscriminator:keywords_Discriminator_Discriminator,JSONSchema202012KeywordExternalDocs:keywords_ExternalDocs},wrapComponents:{InfoContainer:ZI,License:YI,Contact:QI,VersionPragmaFilter:wrap_components_version_pragma_filter,Model:tN,Models:nN,AuthItem:aN,auths:sN,JSONSchema202012KeywordDescription:_N,JSONSchema202012KeywordDefault:wN,JSONSchema202012KeywordProperties:SN},statePlugins:{auth:{wrapSelectors:{definitionsToAuthorize:yN}},spec:{selectors:{isOAS31:u(cN),license:selectors_license,selectLicenseNameField,selectLicenseUrlField,selectLicenseIdentifierField:m(selectLicenseIdentifierField),selectLicenseUrl:u(pN),contact:selectors_contact,selectContactNameField,selectContactEmailField,selectContactUrlField,selectContactUrl:u(hN),selectInfoTitleField,selectInfoSummaryField:m(selectInfoSummaryField),selectInfoDescriptionField,selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:u(dN),selectExternalDocsDescriptionField,selectExternalDocsUrlField,selectExternalDocsUrl:u(fN),webhooks:m(selectors_webhooks),selectWebhooksOperations:m(u(uN)),selectJsonSchemaDialectField,selectJsonSchemaDialectDefault,selectSchemas:u(mN)},wrapSelectors:{isOAS3:wrap_selectors_isOAS3,selectLicenseUrl:gN}},oas31:{selectors:{selectLicenseUrl:m(u(vN))}}}}},kN=TC().object,ON=TC().bool,AN=(TC().oneOfType([kN,ON]),(0,He.createContext)(null));AN.displayName="JSONSchemaContext";const CN=(0,He.createContext)(0);CN.displayName="JSONSchemaLevelContext";const jN=(0,He.createContext)(!1);jN.displayName="JSONSchemaDeepExpansionContext";const PN=(0,He.createContext)(new Set),useConfig=()=>{const{config:i}=(0,He.useContext)(AN);return i},useComponent=i=>{const{components:s}=(0,He.useContext)(AN);return s[i]||null},useFn=function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:s}=(0,He.useContext)(AN);return void 0!==i?s[i]:s},useLevel=()=>{const i=(0,He.useContext)(CN);return[i,i+1]},useIsExpandedDeeply=()=>(0,He.useContext)(jN),useRenderedSchemas=function(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===i)return(0,He.useContext)(PN);const s=(0,He.useContext)(PN);return new Set([...s,i])},IN=(0,He.forwardRef)(((i,s)=>{let{schema:u,name:m,dependentRequired:v,onExpand:_}=i;const j=useFn(),M=(()=>{const[i]=useLevel(),{defaultExpandedLevels:s}=useConfig();return s-i>0})(),$=useIsExpandedDeeply(),[W,X]=(0,He.useState)(M||$),[Y,Z]=(0,He.useState)($),[ee,ae]=useLevel(),ie=(()=>{const[i]=useLevel();return i>0})(),le=j.isExpandable(u)||v.length>0,ce=(i=>useRenderedSchemas().has(i))(u),pe=useRenderedSchemas(u),de=j.stringifyConstraints(u),fe=useComponent("Accordion"),ye=useComponent("Keyword$schema"),be=useComponent("Keyword$vocabulary"),_e=useComponent("Keyword$id"),we=useComponent("Keyword$anchor"),Se=useComponent("Keyword$dynamicAnchor"),xe=useComponent("Keyword$ref"),Pe=useComponent("Keyword$dynamicRef"),Ie=useComponent("Keyword$defs"),Te=useComponent("Keyword$comment"),Re=useComponent("KeywordAllOf"),qe=useComponent("KeywordAnyOf"),ze=useComponent("KeywordOneOf"),Ve=useComponent("KeywordNot"),We=useComponent("KeywordIf"),Xe=useComponent("KeywordThen"),Ye=useComponent("KeywordElse"),Qe=useComponent("KeywordDependentSchemas"),et=useComponent("KeywordPrefixItems"),tt=useComponent("KeywordItems"),rt=useComponent("KeywordContains"),nt=useComponent("KeywordProperties"),ot=useComponent("KeywordPatternProperties"),at=useComponent("KeywordAdditionalProperties"),it=useComponent("KeywordPropertyNames"),st=useComponent("KeywordUnevaluatedItems"),lt=useComponent("KeywordUnevaluatedProperties"),ct=useComponent("KeywordType"),ut=useComponent("KeywordEnum"),pt=useComponent("KeywordConst"),ht=useComponent("KeywordConstraint"),dt=useComponent("KeywordDependentRequired"),mt=useComponent("KeywordContentSchema"),gt=useComponent("KeywordTitle"),yt=useComponent("KeywordDescription"),vt=useComponent("KeywordDefault"),bt=useComponent("KeywordDeprecated"),_t=useComponent("KeywordReadOnly"),Et=useComponent("KeywordWriteOnly"),wt=useComponent("ExpandDeepButton");(0,He.useEffect)((()=>{Z($)}),[$]),(0,He.useEffect)((()=>{Z(Y)}),[Y]);const St=(0,He.useCallback)(((i,s)=>{X(s),!s&&Z(!1),_(i,s,!1)}),[_]),xt=(0,He.useCallback)(((i,s)=>{X(s),Z(s),_(i,s,!0)}),[_]);return He.createElement(CN.Provider,{value:ae},He.createElement(jN.Provider,{value:Y},He.createElement(PN.Provider,{value:pe},He.createElement("article",{ref:s,"data-json-schema-level":ee,className:gC()("json-schema-2020-12",{"json-schema-2020-12--embedded":ie,"json-schema-2020-12--circular":ce})},He.createElement("div",{className:"json-schema-2020-12-head"},le&&!ce?He.createElement(He.Fragment,null,He.createElement(fe,{expanded:W,onChange:St},He.createElement(gt,{title:m,schema:u})),He.createElement(wt,{expanded:W,onClick:xt})):He.createElement(gt,{title:m,schema:u}),He.createElement(bt,{schema:u}),He.createElement(_t,{schema:u}),He.createElement(Et,{schema:u}),He.createElement(ct,{schema:u,isCircular:ce}),de.length>0&&de.map((i=>He.createElement(ht,{key:`${i.scope}-${i.value}`,constraint:i})))),He.createElement("div",{className:gC()("json-schema-2020-12-body",{"json-schema-2020-12-body--collapsed":!W})},W&&He.createElement(He.Fragment,null,He.createElement(yt,{schema:u}),!ce&&le&&He.createElement(He.Fragment,null,He.createElement(nt,{schema:u}),He.createElement(ot,{schema:u}),He.createElement(at,{schema:u}),He.createElement(lt,{schema:u}),He.createElement(it,{schema:u}),He.createElement(Re,{schema:u}),He.createElement(qe,{schema:u}),He.createElement(ze,{schema:u}),He.createElement(Ve,{schema:u}),He.createElement(We,{schema:u}),He.createElement(Xe,{schema:u}),He.createElement(Ye,{schema:u}),He.createElement(Qe,{schema:u}),He.createElement(et,{schema:u}),He.createElement(tt,{schema:u}),He.createElement(st,{schema:u}),He.createElement(rt,{schema:u}),He.createElement(mt,{schema:u})),He.createElement(ut,{schema:u}),He.createElement(pt,{schema:u}),He.createElement(dt,{schema:u,dependentRequired:v}),He.createElement(vt,{schema:u}),He.createElement(ye,{schema:u}),He.createElement(be,{schema:u}),He.createElement(_e,{schema:u}),He.createElement(we,{schema:u}),He.createElement(Se,{schema:u}),He.createElement(xe,{schema:u}),!ce&&le&&He.createElement(Ie,{schema:u}),He.createElement(Pe,{schema:u}),He.createElement(Te,{schema:u})))))))}));IN.defaultProps={name:"",dependentRequired:[],onExpand:()=>{}};const NN=IN,keywords_$schema=i=>{let{schema:s}=i;return s?.$schema?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$schema"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$schema)):null},$vocabulary_$vocabulary=i=>{let{schema:s}=i;const u=useIsExpandedDeeply(),[m,v]=(0,He.useState)(u),_=useComponent("Accordion"),j=(0,He.useCallback)((()=>{v((i=>!i))}),[]);return s?.$vocabulary?"object"!=typeof s.$vocabulary?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary"},He.createElement(_,{expanded:m,onChange:j},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$vocabulary")),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",null,m&&Object.entries(s.$vocabulary).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:gC()("json-schema-2020-12-$vocabulary-uri",{"json-schema-2020-12-$vocabulary-uri--disabled":!u})},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s))})))):null},keywords_$id=i=>{let{schema:s}=i;return s?.$id?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$id"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$id)):null},keywords_$anchor=i=>{let{schema:s}=i;return s?.$anchor?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$anchor"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$anchor)):null},keywords_$dynamicAnchor=i=>{let{schema:s}=i;return s?.$dynamicAnchor?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicAnchor"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$dynamicAnchor)):null},keywords_$ref=i=>{let{schema:s}=i;return s?.$ref?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$ref"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$ref)):null},keywords_$dynamicRef=i=>{let{schema:s}=i;return s?.$dynamicRef?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicRef"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$dynamicRef)):null},keywords_$defs=i=>{let{schema:s}=i;const u=s?.$defs||{},m=useIsExpandedDeeply(),[v,_]=(0,He.useState)(m),[j,M]=(0,He.useState)(!1),$=useComponent("Accordion"),W=useComponent("ExpandDeepButton"),X=useComponent("JSONSchema"),Y=(0,He.useCallback)((()=>{_((i=>!i))}),[]),Z=(0,He.useCallback)(((i,s)=>{_(s),M(s)}),[]);return 0===Object.keys(u).length?null:He.createElement(jN.Provider,{value:j},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs"},He.createElement($,{expanded:v,onChange:Y},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$defs")),He.createElement(W,{expanded:v,onClick:Z}),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!v})},v&&He.createElement(He.Fragment,null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(X,{name:s,schema:u}))}))))))},keywords_$comment=i=>{let{schema:s}=i;return s?.$comment?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$comment"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},s.$comment)):null},keywords_AllOf=i=>{let{schema:s}=i;const u=s?.allOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ae=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(jN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"All of")),He.createElement(X,{expanded:_,onClick:ae}),He.createElement(Z,{schema:{allOf:u}}),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_AnyOf=i=>{let{schema:s}=i;const u=s?.anyOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ae=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(jN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Any of")),He.createElement(X,{expanded:_,onClick:ae}),He.createElement(Z,{schema:{anyOf:u}}),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_OneOf=i=>{let{schema:s}=i;const u=s?.oneOf||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ae=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(jN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"One of")),He.createElement(X,{expanded:_,onClick:ae}),He.createElement(Z,{schema:{oneOf:u}}),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_Not=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"not"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Not");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--not"},He.createElement(m,{name:v,schema:s.not}))},keywords_If=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"if"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"If");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},He.createElement(m,{name:v,schema:s.if}))},keywords_Then=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"then"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Then");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--then"},He.createElement(m,{name:v,schema:s.then}))},keywords_Else=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"else"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Else");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},He.createElement(m,{name:v,schema:s.else}))},keywords_DependentSchemas=i=>{let{schema:s}=i;const u=s?.dependentSchemas||[],m=useIsExpandedDeeply(),[v,_]=(0,He.useState)(m),[j,M]=(0,He.useState)(!1),$=useComponent("Accordion"),W=useComponent("ExpandDeepButton"),X=useComponent("JSONSchema"),Y=(0,He.useCallback)((()=>{_((i=>!i))}),[]),Z=(0,He.useCallback)(((i,s)=>{_(s),M(s)}),[]);return"object"!=typeof u||0===Object.keys(u).length?null:He.createElement(jN.Provider,{value:j},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas"},He.createElement($,{expanded:v,onChange:Y},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Dependent schemas")),He.createElement(W,{expanded:v,onClick:Z}),He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!v})},v&&He.createElement(He.Fragment,null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(X,{name:s,schema:u}))}))))))},keywords_PrefixItems=i=>{let{schema:s}=i;const u=s?.prefixItems||[],m=useFn(),v=useIsExpandedDeeply(),[_,j]=(0,He.useState)(v),[M,$]=(0,He.useState)(!1),W=useComponent("Accordion"),X=useComponent("ExpandDeepButton"),Y=useComponent("JSONSchema"),Z=useComponent("KeywordType"),ee=(0,He.useCallback)((()=>{j((i=>!i))}),[]),ae=(0,He.useCallback)(((i,s)=>{j(s),$(s)}),[]);return Array.isArray(u)&&0!==u.length?He.createElement(jN.Provider,{value:M},He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems"},He.createElement(W,{expanded:_,onChange:ee},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Prefix items")),He.createElement(X,{expanded:_,onClick:ae}),He.createElement(Z,{schema:{prefixItems:u}}),He.createElement("ul",{className:gC()("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!_})},_&&He.createElement(He.Fragment,null,u.map(((i,s)=>He.createElement("li",{key:`#${s}`,className:"json-schema-2020-12-property"},He.createElement(Y,{name:`#${s} ${m.getTitle(i)}`,schema:i})))))))):null},keywords_Items=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"items"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Items");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--items"},He.createElement(m,{name:v,schema:s.items}))},keywords_Contains=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"contains"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Contains");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains"},He.createElement(m,{name:v,schema:s.contains}))},keywords_Properties_Properties=i=>{let{schema:s}=i;const u=useFn(),m=s?.properties||{},v=Array.isArray(s?.required)?s.required:[],_=useComponent("JSONSchema");return 0===Object.keys(m).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},He.createElement("ul",null,Object.entries(m).map((i=>{let[m,j]=i;const M=v.includes(m),$=u.getDependentRequired(m,s);return He.createElement("li",{key:m,className:gC()("json-schema-2020-12-property",{"json-schema-2020-12-property--required":M})},He.createElement(_,{name:m,schema:j,dependentRequired:$}))}))))},keywords_PatternProperties_PatternProperties=i=>{let{schema:s}=i;const u=s?.patternProperties||{},m=useComponent("JSONSchema");return 0===Object.keys(u).length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties"},He.createElement("ul",null,Object.entries(u).map((i=>{let[s,u]=i;return He.createElement("li",{key:s,className:"json-schema-2020-12-property"},He.createElement(m,{name:s,schema:u}))}))))},keywords_AdditionalProperties=i=>{let{schema:s}=i;const u=useFn(),{additionalProperties:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"additionalProperties"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Additional properties");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties"},!0===m?He.createElement(He.Fragment,null,_,He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"allowed")):!1===m?He.createElement(He.Fragment,null,_,He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"forbidden")):He.createElement(v,{name:_,schema:m}))},keywords_PropertyNames=i=>{let{schema:s}=i;const u=useFn(),{propertyNames:m}=s,v=useComponent("JSONSchema"),_=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Property names");return u.hasKeyword(s,"propertyNames")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames"},He.createElement(v,{name:_,schema:m})):null},keywords_UnevaluatedItems=i=>{let{schema:s}=i;const u=useFn(),{unevaluatedItems:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"unevaluatedItems"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated items");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems"},He.createElement(v,{name:_,schema:m}))},keywords_UnevaluatedProperties=i=>{let{schema:s}=i;const u=useFn(),{unevaluatedProperties:m}=s,v=useComponent("JSONSchema");if(!u.hasKeyword(s,"unevaluatedProperties"))return null;const _=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated properties");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties"},He.createElement(v,{name:_,schema:m}))},Type_Type=i=>{let{schema:s,isCircular:u}=i;const m=useFn().getType(s),v=u?" [circular]":"";return He.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},`${m}${v}`)};Type_Type.defaultProps={isCircular:!1};const TN=Type_Type,Enum_Enum=i=>{let{schema:s}=i;const u=useFn();return Array.isArray(s?.enum)?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Allowed values"),He.createElement("ul",null,s.enum.map((i=>{const s=u.stringify(i);return He.createElement("li",{key:s},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},s))})))):null},keywords_Const=i=>{let{schema:s}=i;const u=useFn();return u.hasKeyword(s,"const")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--const"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Const"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},u.stringify(s.const))):null},Constraint=i=>{let{constraint:s}=i;return He.createElement("span",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${s.scope}`},s.value)},MN=He.memo(Constraint),DependentRequired_DependentRequired=i=>{let{dependentRequired:s}=i;return 0===s.length?null:He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Required when defined"),He.createElement("ul",null,s.map((i=>He.createElement("li",{key:i},He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning"},i))))))},keywords_ContentSchema=i=>{let{schema:s}=i;const u=useFn(),m=useComponent("JSONSchema");if(!u.hasKeyword(s,"contentSchema"))return null;const v=He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Content schema");return He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema"},He.createElement(m,{name:v,schema:s.contentSchema}))},Title=i=>{let{title:s,schema:u}=i;const m=useFn();return s||m.getTitle(u)?He.createElement("div",{className:"json-schema-2020-12__title"},s||m.getTitle(u)):null};Title.defaultProps={title:""};const RN=Title,keywords_Description_Description=i=>{let{schema:s}=i;return s?.description?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},He.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},s.description)):null},keywords_Default=i=>{let{schema:s}=i;const u=useFn();return u.hasKeyword(s,"default")?He.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--default"},He.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Default"),He.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},u.stringify(s.default))):null},keywords_Deprecated=i=>{let{schema:s}=i;return!0!==s?.deprecated?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning"},"deprecated")},keywords_ReadOnly=i=>{let{schema:s}=i;return!0!==s?.readOnly?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"read-only")},keywords_WriteOnly=i=>{let{schema:s}=i;return!0!==s?.writeOnly?null:He.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"write-only")},Accordion=i=>{let{expanded:s,children:u,onChange:m}=i;const v=useComponent("ChevronRightIcon"),_=(0,He.useCallback)((i=>{m(i,!s)}),[s,m]);return He.createElement("button",{type:"button",className:"json-schema-2020-12-accordion",onClick:_},He.createElement("div",{className:"json-schema-2020-12-accordion__children"},u),He.createElement("span",{className:gC()("json-schema-2020-12-accordion__icon",{"json-schema-2020-12-accordion__icon--expanded":s,"json-schema-2020-12-accordion__icon--collapsed":!s})},He.createElement(v,null)))};Accordion.defaultProps={expanded:!1};const BN=Accordion,ExpandDeepButton_ExpandDeepButton=i=>{let{expanded:s,onClick:u}=i;const m=(0,He.useCallback)((i=>{u(i,!s)}),[s,u]);return He.createElement("button",{type:"button",className:"json-schema-2020-12-expand-deep-button",onClick:m},s?"Collapse all":"Expand all")},icons_ChevronRight=()=>He.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},He.createElement("path",{d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"})),fn_upperFirst=i=>"string"==typeof i?`${i.charAt(0).toUpperCase()}${i.slice(1)}`:i,getTitle=i=>{const s=useFn();return i?.title?s.upperFirst(i.title):i?.$anchor?s.upperFirst(i.$anchor):i?.$id?i.$id:""},getType=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;const u=useFn();if(null==i)return"any";if(u.isBooleanJSONSchema(i))return i?"any":"never";if("object"!=typeof i)return"any";if(s.has(i))return"any";s.add(i);const{type:m,prefixItems:v,items:_}=i,getArrayType=()=>{if(Array.isArray(v)){const i=v.map((i=>getType(i,s))),u=_?getType(_,s):"any";return`array<[${i.join(", ")}], ${u}>`}if(_){return`array<${getType(_,s)}>`}return"array"};if(i.not&&"any"===getType(i.not))return"never";const handleCombiningKeywords=(u,m)=>{if(Array.isArray(i[u])){return`(${i[u].map((i=>getType(i,s))).join(m)})`}return null},j=[Array.isArray(m)?m.map((i=>"array"===i?getArrayType():i)).join(" | "):"array"===m?getArrayType():["null","boolean","object","array","number","integer","string"].includes(m)?m:(()=>{if(Object.hasOwn(i,"prefixItems")||Object.hasOwn(i,"items")||Object.hasOwn(i,"contains"))return getArrayType();if(Object.hasOwn(i,"properties")||Object.hasOwn(i,"additionalProperties")||Object.hasOwn(i,"patternProperties"))return"object";if(["int32","int64"].includes(i.format))return"integer";if(["float","double"].includes(i.format))return"number";if(Object.hasOwn(i,"minimum")||Object.hasOwn(i,"maximum")||Object.hasOwn(i,"exclusiveMinimum")||Object.hasOwn(i,"exclusiveMaximum")||Object.hasOwn(i,"multipleOf"))return"number | integer";if(Object.hasOwn(i,"pattern")||Object.hasOwn(i,"format")||Object.hasOwn(i,"minLength")||Object.hasOwn(i,"maxLength"))return"string";if(void 0!==i.const){if(null===i.const)return"null";if("boolean"==typeof i.const)return"boolean";if("number"==typeof i.const)return Number.isInteger(i.const)?"integer":"number";if("string"==typeof i.const)return"string";if(Array.isArray(i.const))return"array";if("object"==typeof i.const)return"object"}return null})(),handleCombiningKeywords("oneOf"," | "),handleCombiningKeywords("anyOf"," | "),handleCombiningKeywords("allOf"," & ")].filter(Boolean).join(" | ");return s.delete(i),j||"any"},isBooleanJSONSchema=i=>"boolean"==typeof i,hasKeyword=(i,s)=>null!==i&&"object"==typeof i&&Object.hasOwn(i,s),isExpandable=i=>{const s=useFn();return i?.$schema||i?.$vocabulary||i?.$id||i?.$anchor||i?.$dynamicAnchor||i?.$ref||i?.$dynamicRef||i?.$defs||i?.$comment||i?.allOf||i?.anyOf||i?.oneOf||s.hasKeyword(i,"not")||s.hasKeyword(i,"if")||s.hasKeyword(i,"then")||s.hasKeyword(i,"else")||i?.dependentSchemas||i?.prefixItems||s.hasKeyword(i,"items")||s.hasKeyword(i,"contains")||i?.properties||i?.patternProperties||s.hasKeyword(i,"additionalProperties")||s.hasKeyword(i,"propertyNames")||s.hasKeyword(i,"unevaluatedItems")||s.hasKeyword(i,"unevaluatedProperties")||i?.description||i?.enum||s.hasKeyword(i,"const")||s.hasKeyword(i,"contentSchema")||s.hasKeyword(i,"default")},fn_stringify=i=>null===i||["number","bigint","boolean"].includes(typeof i)?String(i):Array.isArray(i)?`[${i.map(fn_stringify).join(", ")}]`:JSON.stringify(i),stringifyConstraintRange=(i,s,u)=>{const m="number"==typeof s,v="number"==typeof u;return m&&v?s===u?`${s} ${i}`:`[${s}, ${u}] ${i}`:m?`>= ${s} ${i}`:v?`<= ${u} ${i}`:null},stringifyConstraints=i=>{const s=[],u=(i=>{if("number"!=typeof i?.multipleOf)return null;if(i.multipleOf<=0)return null;if(1===i.multipleOf)return null;const{multipleOf:s}=i;if(Number.isInteger(s))return`multiple of ${s}`;const u=10**s.toString().split(".")[1].length;return`multiple of ${s*u}/${u}`})(i);null!==u&&s.push({scope:"number",value:u});const m=(i=>{const s=i?.minimum,u=i?.maximum,m=i?.exclusiveMinimum,v=i?.exclusiveMaximum,_="number"==typeof s,j="number"==typeof u,M="number"==typeof m,$="number"==typeof v,W=M&&(!_||sv);if((_||M)&&(j||$))return`${W?"(":"["}${W?m:s}, ${X?v:u}${X?")":"]"}`;if(_||M)return`${W?">":"≥"} ${W?m:s}`;if(j||$)return`${X?"<":"≤"} ${X?v:u}`;return null})(i);null!==m&&s.push({scope:"number",value:m}),i?.format&&s.push({scope:"string",value:i.format});const v=stringifyConstraintRange("characters",i?.minLength,i?.maxLength);null!==v&&s.push({scope:"string",value:v}),i?.pattern&&s.push({scope:"string",value:`matches ${i?.pattern}`}),i?.contentMediaType&&s.push({scope:"string",value:`media type: ${i.contentMediaType}`}),i?.contentEncoding&&s.push({scope:"string",value:`encoding: ${i.contentEncoding}`});const _=stringifyConstraintRange(i?.hasUniqueItems?"unique items":"items",i?.minItems,i?.maxItems);null!==_&&s.push({scope:"array",value:_});const j=stringifyConstraintRange("contained items",i?.minContains,i?.maxContains);null!==j&&s.push({scope:"array",value:j});const M=stringifyConstraintRange("properties",i?.minProperties,i?.maxProperties);return null!==M&&s.push({scope:"object",value:M}),s},getDependentRequired=(i,s)=>s?.dependentRequired?Array.from(Object.entries(s.dependentRequired).reduce(((s,u)=>{let[m,v]=u;return Array.isArray(v)&&v.includes(i)?(s.add(m),s):s}),new Set)):[],withJSONSchemaContext=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const u={components:{JSONSchema:NN,Keyword$schema:keywords_$schema,Keyword$vocabulary:$vocabulary_$vocabulary,Keyword$id:keywords_$id,Keyword$anchor:keywords_$anchor,Keyword$dynamicAnchor:keywords_$dynamicAnchor,Keyword$ref:keywords_$ref,Keyword$dynamicRef:keywords_$dynamicRef,Keyword$defs:keywords_$defs,Keyword$comment:keywords_$comment,KeywordAllOf:keywords_AllOf,KeywordAnyOf:keywords_AnyOf,KeywordOneOf:keywords_OneOf,KeywordNot:keywords_Not,KeywordIf:keywords_If,KeywordThen:keywords_Then,KeywordElse:keywords_Else,KeywordDependentSchemas:keywords_DependentSchemas,KeywordPrefixItems:keywords_PrefixItems,KeywordItems:keywords_Items,KeywordContains:keywords_Contains,KeywordProperties:keywords_Properties_Properties,KeywordPatternProperties:keywords_PatternProperties_PatternProperties,KeywordAdditionalProperties:keywords_AdditionalProperties,KeywordPropertyNames:keywords_PropertyNames,KeywordUnevaluatedItems:keywords_UnevaluatedItems,KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,KeywordType:TN,KeywordEnum:Enum_Enum,KeywordConst:keywords_Const,KeywordConstraint:MN,KeywordDependentRequired:DependentRequired_DependentRequired,KeywordContentSchema:keywords_ContentSchema,KeywordTitle:RN,KeywordDescription:keywords_Description_Description,KeywordDefault:keywords_Default,KeywordDeprecated:keywords_Deprecated,KeywordReadOnly:keywords_ReadOnly,KeywordWriteOnly:keywords_WriteOnly,Accordion:BN,ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,ChevronRightIcon:icons_ChevronRight,...s.components},config:{default$schema:"https://json-schema.org/draft/2020-12/schema",defaultExpandedLevels:0,...s.config},fn:{upperFirst:fn_upperFirst,getTitle,getType,isBooleanJSONSchema,hasKeyword,isExpandable,stringify:fn_stringify,stringifyConstraints,getDependentRequired,...s.fn}},HOC=s=>He.createElement(AN.Provider,{value:u},He.createElement(i,s));return HOC.contexts={JSONSchemaContext:AN},HOC.displayName=i.displayName,HOC},json_schema_2020_12=()=>({components:{JSONSchema202012:NN,JSONSchema202012Keyword$schema:keywords_$schema,JSONSchema202012Keyword$vocabulary:$vocabulary_$vocabulary,JSONSchema202012Keyword$id:keywords_$id,JSONSchema202012Keyword$anchor:keywords_$anchor,JSONSchema202012Keyword$dynamicAnchor:keywords_$dynamicAnchor,JSONSchema202012Keyword$ref:keywords_$ref,JSONSchema202012Keyword$dynamicRef:keywords_$dynamicRef,JSONSchema202012Keyword$defs:keywords_$defs,JSONSchema202012Keyword$comment:keywords_$comment,JSONSchema202012KeywordAllOf:keywords_AllOf,JSONSchema202012KeywordAnyOf:keywords_AnyOf,JSONSchema202012KeywordOneOf:keywords_OneOf,JSONSchema202012KeywordNot:keywords_Not,JSONSchema202012KeywordIf:keywords_If,JSONSchema202012KeywordThen:keywords_Then,JSONSchema202012KeywordElse:keywords_Else,JSONSchema202012KeywordDependentSchemas:keywords_DependentSchemas,JSONSchema202012KeywordPrefixItems:keywords_PrefixItems,JSONSchema202012KeywordItems:keywords_Items,JSONSchema202012KeywordContains:keywords_Contains,JSONSchema202012KeywordProperties:keywords_Properties_Properties,JSONSchema202012KeywordPatternProperties:keywords_PatternProperties_PatternProperties,JSONSchema202012KeywordAdditionalProperties:keywords_AdditionalProperties,JSONSchema202012KeywordPropertyNames:keywords_PropertyNames,JSONSchema202012KeywordUnevaluatedItems:keywords_UnevaluatedItems,JSONSchema202012KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,JSONSchema202012KeywordType:TN,JSONSchema202012KeywordEnum:Enum_Enum,JSONSchema202012KeywordConst:keywords_Const,JSONSchema202012KeywordConstraint:MN,JSONSchema202012KeywordDependentRequired:DependentRequired_DependentRequired,JSONSchema202012KeywordContentSchema:keywords_ContentSchema,JSONSchema202012KeywordTitle:RN,JSONSchema202012KeywordDescription:keywords_Description_Description,JSONSchema202012KeywordDefault:keywords_Default,JSONSchema202012KeywordDeprecated:keywords_Deprecated,JSONSchema202012KeywordReadOnly:keywords_ReadOnly,JSONSchema202012KeywordWriteOnly:keywords_WriteOnly,JSONSchema202012Accordion:BN,JSONSchema202012ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,JSONSchema202012ChevronRightIcon:icons_ChevronRight,withJSONSchema202012Context:withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>jN},fn:{upperFirst:fn_upperFirst,jsonSchema202012:{isExpandable,hasKeyword,useFn,useConfig,useComponent,useIsExpandedDeeply}}});var DN=__webpack_require__(68630),LN=__webpack_require__.n(DN);const array=(i,s)=>{let{sample:u}=s;return function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:u,maxItems:m,uniqueItems:v}=s,{contains:_,minContains:j,maxContains:M}=s;let $=[...i];if(null!=_&&"object"==typeof _){if(Number.isInteger(j)&&j>1){const i=$.at(0);for(let s=1;s0&&($=i.slice(0,m)),Number.isInteger(u)&&u>0)for(let i=0;$.length{throw new Error("Not implemented")},bytes=i=>jt()(i),random_pick=i=>i.at(0),predicates_isBooleanJSONSchema=i=>"boolean"==typeof i,isJSONSchemaObject=i=>LN()(i),isJSONSchema=i=>predicates_isBooleanJSONSchema(i)||isJSONSchemaObject(i),email=()=>"user@example.com",idn_email=()=>"실례@example.com",hostname=()=>"example.com",idn_hostname=()=>"실례.com",ipv4=()=>"198.51.100.42",ipv6=()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",uri=()=>"https://example.com/",uri_reference=()=>"path/index.html",iri=()=>"https://실례.com/",iri_reference=()=>"path/실례.html",uuid=()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",uri_template=()=>"https://example.com/dictionary/{term:1}/{term}",json_pointer=()=>"/a/b/c",relative_json_pointer=()=>"1/0",date_time=()=>(new Date).toISOString(),date=()=>(new Date).toISOString().substring(0,10),time=()=>(new Date).toISOString().substring(11),duration=()=>"P3D",generators_password=()=>"********",regex=()=>"^[a-z]+$";const FN=class Registry{data={};register(i,s){this.data[i]=s}unregister(i){void 0===i?this.data={}:delete this.data[i]}get(i){return this.data[i]}},qN=new FN,api_formatAPI=(i,s)=>"function"==typeof s?qN.register(i,s):null===s?qN.unregister(i):qN.get(i);var $N=__webpack_require__(48764).Buffer;const _7bit=i=>$N.from(i).toString("ascii");var zN=__webpack_require__(48764).Buffer;const _8bit=i=>zN.from(i).toString("utf8");var UN=__webpack_require__(48764).Buffer;const encoders_binary=i=>UN.from(i).toString("binary"),quoted_printable=i=>{let s="";for(let u=0;u=33&&m<=60||m>=62&&m<=126||9===m||32===m)s+=i.charAt(u);else if(13===m||10===m)s+="\r\n";else if(m>126){const m=unescape(encodeURIComponent(i.charAt(u)));for(let i=0;iVN.from(i).toString("hex");var WN=__webpack_require__(48764).Buffer;const base32=i=>{const s=WN.from(i).toString("utf8"),u="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let m=0,v="",_=0,j=0;for(let i=0;i=5;)v+=u.charAt(_>>>j-5&31),j-=5;j>0&&(v+=u.charAt(_<<5-j&31),m=(8-8*s.length%5)%5);for(let i=0;iKN.from(i).toString("base64");const HN=new class EncoderRegistry extends FN{#e={"7bit":_7bit,"8bit":_8bit,binary:encoders_binary,"quoted-printable":quoted_printable,base16,base32,base64};data={...this.#e};get defaults(){return{...this.#e}}},encoderAPI=(i,s)=>"function"==typeof s?HN.register(i,s):null===s?HN.unregister(i):HN.get(i);encoderAPI.getDefaults=()=>HN.defaults;const JN=encoderAPI,GN={"text/plain":()=>"string","text/css":()=>".selector { border: 1px solid red }","text/csv":()=>"value1,value2,value3","text/html":()=>"

    content

    ","text/calendar":()=>"BEGIN:VCALENDAR","text/javascript":()=>"console.dir('Hello world!');","text/xml":()=>'John Doe',"text/*":()=>"string"},XN={"image/*":()=>bytes(25).toString("binary")},YN={"audio/*":()=>bytes(25).toString("binary")},QN={"video/*":()=>bytes(25).toString("binary")},ZN={"application/json":()=>'{"key":"value"}',"application/ld+json":()=>'{"name": "John Doe"}',"application/x-httpd-php":()=>"Hello World!

    '; ?>","application/rtf":()=>String.raw`{\rtf1\adeflang1025\ansi\ansicpg1252\uc1`,"application/x-sh":()=>'echo "Hello World!"',"application/xhtml+xml":()=>"

    content

    ","application/*":()=>bytes(25).toString("binary")};const eT=new class MediaTypeRegistry extends FN{#e={...GN,...XN,...YN,...QN,...ZN};data={...this.#e};get defaults(){return{...this.#e}}},mediaTypeAPI=(i,s)=>{if("function"==typeof s)return eT.register(i,s);if(null===s)return eT.unregister(i);const u=i.split(";").at(0),m=`${u.split("/").at(0)}/*`;return eT.get(i)||eT.get(u)||eT.get(m)};mediaTypeAPI.getDefaults=()=>eT.defaults;const tT=mediaTypeAPI,types_string=function(i){let{sample:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:u,contentMediaType:m,contentSchema:v}=i,{pattern:_,format:j}=i,M=JN(u)||sC();let $;if("string"==typeof _)$=(i=>{try{return new(Aa())(i).gen()}catch{return"string"}})(_);else if("string"==typeof j)$=(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"email":return email();case"idn-email":return idn_email();case"hostname":return hostname();case"idn-hostname":return idn_hostname();case"ipv4":return ipv4();case"ipv6":return ipv6();case"uri":return uri();case"uri-reference":return uri_reference();case"iri":return iri();case"iri-reference":return iri_reference();case"uuid":return uuid();case"uri-template":return uri_template();case"json-pointer":return json_pointer();case"relative-json-pointer":return relative_json_pointer();case"date-time":return date_time();case"date":return date();case"time":return time();case"duration":return duration();case"password":return generators_password();case"regex":return regex()}return"string"})(i);else if(isJSONSchema(v)&&"string"==typeof m&&void 0!==s)$=Array.isArray(s)||"object"==typeof s?JSON.stringify(s):String(s);else if("string"==typeof m){const s=tT(m);"function"==typeof s&&($=s(i))}else $="string";return M(function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:u,minLength:m}=s;let v=i;if(Number.isInteger(u)&&u>0&&(v=v.slice(0,u)),Number.isInteger(m)&&m>0){let i=0;for(;v.length.1,generators_double=()=>.1,types_number=i=>{const{format:s}=i;let u;return u="string"==typeof s?(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"float":return generators_float();case"double":return generators_double()}return 0})(i):0,function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:u,maximum:m,exclusiveMinimum:v,exclusiveMaximum:_}=s,{multipleOf:j}=s,M=Number.isInteger(i)?1:Number.EPSILON;let $="number"==typeof u?u:null,W="number"==typeof m?m:null,X=i;if("number"==typeof v&&($=null!==$?Math.max($,v+M):v+M),"number"==typeof _&&(W=null!==W?Math.min(W,_-M):_-M),X=$>W&&i||$||W||X,"number"==typeof j&&j>0){const i=X%j;X=0===i?X:X+j-i}return X}(u,i)},int32=()=>2**30>>>0,int64=()=>2**53-1,types_integer=i=>{const{format:s}=i;return"string"==typeof s?(i=>{const{format:s}=i,u=api_formatAPI(s);if("function"==typeof u)return u(i);switch(s){case"int32":return int32();case"int64":return int64()}return 0})(i):0},types_boolean=i=>"boolean"!=typeof i.default||i.default,rT=new Proxy({array,object,string:types_string,number:types_number,integer:types_integer,boolean:types_boolean,null:()=>null},{get:(i,s)=>"string"==typeof s&&Object.hasOwn(i,s)?i[s]:()=>`Unknown Type: ${s}`}),nT=["array","object","number","integer","string","boolean","null"],hasExample=i=>{if(!isJSONSchemaObject(i))return!1;const{examples:s,example:u,default:m}=i;return!!(Array.isArray(s)&&s.length>=1)||(void 0!==m||void 0!==u)},extractExample=i=>{if(!isJSONSchemaObject(i))return null;const{examples:s,example:u,default:m}=i;return Array.isArray(s)&&s.length>=1?s.at(0):void 0!==m?m:void 0!==u?u:void 0},oT={array:["items","prefixItems","contains","maxContains","minContains","maxItems","minItems","uniqueItems","unevaluatedItems"],object:["properties","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","required","dependentSchemas","dependentRequired","unevaluatedProperties"],string:["pattern","format","minLength","maxLength","contentEncoding","contentMediaType","contentSchema"],integer:["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"]};oT.number=oT.integer;const aT="string",inferTypeFromValue=i=>void 0===i?null:null===i?"null":Array.isArray(i)?"array":Number.isInteger(i)?"integer":typeof i,foldType=i=>{if(Array.isArray(i)&&i.length>=1){if(i.includes("array"))return"array";if(i.includes("object"))return"object";{const s=random_pick(i);if(nT.includes(s))return s}}return nT.includes(i)?i:null},inferType=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;if(!isJSONSchemaObject(i))return aT;if(s.has(i))return aT;s.add(i);let{type:u,const:m}=i;if(u=foldType(u),"string"!=typeof u){const s=Object.keys(oT);e:for(let m=0;m{if(Array.isArray(i[u])){const m=i[u].map((i=>inferType(i,s)));return foldType(m)}return null},m=combineTypes("allOf"),v=combineTypes("anyOf"),_=combineTypes("oneOf"),j=i.not?inferType(i.not,s):null;(m||v||_||j)&&(u=foldType([m,v,_,j].filter(Boolean)))}if("string"!=typeof u&&hasExample(i)){const s=extractExample(i),m=inferTypeFromValue(s);u="string"==typeof m?m:u}return s.delete(i),u||aT},type_getType=i=>inferType(i),typeCast=i=>predicates_isBooleanJSONSchema(i)?(i=>!1===i?{not:{}}:{})(i):isJSONSchemaObject(i)?i:{},merge_merge=function(i,s){let u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(predicates_isBooleanJSONSchema(i)&&!0===i)return!0;if(predicates_isBooleanJSONSchema(i)&&!1===i)return!1;if(predicates_isBooleanJSONSchema(s)&&!0===s)return!0;if(predicates_isBooleanJSONSchema(s)&&!1===s)return!1;if(!isJSONSchema(i))return s;if(!isJSONSchema(s))return i;const m={...s,...i};if(s.type&&i.type&&Array.isArray(s.type)&&"string"==typeof s.type){const u=normalizeArray(s.type).concat(i.type);m.type=Array.from(new Set(u))}if(Array.isArray(s.required)&&Array.isArray(i.required)&&(m.required=[...new Set([...i.required,...s.required])]),s.properties&&i.properties){const v=new Set([...Object.keys(s.properties),...Object.keys(i.properties)]);m.properties={};for(const _ of v){const v=s.properties[_]||{},j=i.properties[_]||{};v.readOnly&&!u.includeReadOnly||v.writeOnly&&!u.includeWriteOnly?m.required=(m.required||[]).filter((i=>i!==_)):m.properties[_]=merge_merge(j,v,u)}}return isJSONSchema(s.items)&&isJSONSchema(i.items)&&(m.items=merge_merge(i.items,s.items,u)),isJSONSchema(s.contains)&&isJSONSchema(i.contains)&&(m.contains=merge_merge(i.contains,s.contains,u)),isJSONSchema(s.contentSchema)&&isJSONSchema(i.contentSchema)&&(m.contentSchema=merge_merge(i.contentSchema,s.contentSchema,u)),m},iT=merge_merge,main_sampleFromSchemaGeneric=function(i){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,m=arguments.length>3&&void 0!==arguments[3]&&arguments[3];"function"==typeof i?.toJS&&(i=i.toJS()),i=typeCast(i);let v=void 0!==u||hasExample(i);const _=!v&&Array.isArray(i.oneOf)&&i.oneOf.length>0,j=!v&&Array.isArray(i.anyOf)&&i.anyOf.length>0;if(!v&&(_||j)){const u=typeCast(random_pick(_?i.oneOf:i.anyOf));!(i=iT(i,u,s)).xml&&u.xml&&(i.xml=u.xml),hasExample(i)&&hasExample(u)&&(v=!0)}const M={};let{xml:$,properties:W,additionalProperties:X,items:Y,contains:Z}=i||{},ee=type_getType(i),{includeReadOnly:ae,includeWriteOnly:ie}=s;$=$||{};let le,{name:ce,prefix:pe,namespace:de}=$,fe={};if(Object.hasOwn(i,"type")||(i.type=ee),m&&(ce=ce||"notagname",le=(pe?`${pe}:`:"")+ce,de)){M[pe?`xmlns:${pe}`:"xmlns"]=de}m&&(fe[le]=[]);const ye=objectify(W);let be,_e=0;const hasExceededMaxProperties=()=>Number.isInteger(i.maxProperties)&&i.maxProperties>0&&_e>=i.maxProperties,canAddProperty=s=>!(Number.isInteger(i.maxProperties)&&i.maxProperties>0)||!hasExceededMaxProperties()&&(!(s=>!Array.isArray(i.required)||0===i.required.length||!i.required.includes(s))(s)||i.maxProperties-_e-(()=>{if(!Array.isArray(i.required)||0===i.required.length)return 0;let s=0;return m?i.required.forEach((i=>s+=void 0===fe[i]?0:1)):i.required.forEach((i=>{s+=void 0===fe[le]?.find((s=>void 0!==s[i]))?0:1})),i.required.length-s})()>0);if(be=m?function(u){let v=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(i&&ye[u]){if(ye[u].xml=ye[u].xml||{},ye[u].xml.attribute){const i=Array.isArray(ye[u].enum)?random_pick(ye[u].enum):void 0;if(hasExample(ye[u]))M[ye[u].xml.name||u]=extractExample(ye[u]);else if(void 0!==i)M[ye[u].xml.name||u]=i;else{const i=typeCast(ye[u]),s=type_getType(i),m=ye[u].xml.name||u;M[m]=rT[s](i)}return}ye[u].xml.name=ye[u].xml.name||u}else ye[u]||!1===X||(ye[u]={xml:{name:u}});let _=main_sampleFromSchemaGeneric(ye[u],s,v,m);canAddProperty(u)&&(_e++,Array.isArray(_)?fe[le]=fe[le].concat(_):fe[le].push(_))}:(u,v)=>{if(canAddProperty(u)){if(LN()(i.discriminator?.mapping)&&i.discriminator.propertyName===u&&"string"==typeof i.$$ref){for(const s in i.discriminator.mapping)if(-1!==i.$$ref.search(i.discriminator.mapping[s])){fe[u]=s;break}}else fe[u]=main_sampleFromSchemaGeneric(ye[u],s,v,m);_e++}},v){let v;if(v=void 0!==u?u:extractExample(i),!m){if("number"==typeof v&&"string"===ee)return`${v}`;if("string"!=typeof v||"string"===ee)return v;try{return JSON.parse(v)}catch{return v}}if("array"===ee){if(!Array.isArray(v)){if("string"==typeof v)return v;v=[v]}let u=[];return isJSONSchemaObject(Y)&&(Y.xml=Y.xml||$||{},Y.xml.name=Y.xml.name||$.name,u=v.map((i=>main_sampleFromSchemaGeneric(Y,s,i,m)))),isJSONSchemaObject(Z)&&(Z.xml=Z.xml||$||{},Z.xml.name=Z.xml.name||$.name,u=[main_sampleFromSchemaGeneric(Z,s,void 0,m),...u]),u=rT.array(i,{sample:u}),$.wrapped?(fe[le]=u,ja()(M)||fe[le].push({_attr:M})):fe=u,fe}if("object"===ee){if("string"==typeof v)return v;for(const i in v)Object.hasOwn(v,i)&&(ye[i]?.readOnly&&!ae||ye[i]?.writeOnly&&!ie||(ye[i]?.xml?.attribute?M[ye[i].xml.name||i]=v[i]:be(i,v[i])));return ja()(M)||fe[le].push({_attr:M}),fe}return fe[le]=ja()(M)?v:[{_attr:M},v],fe}if("array"===ee){let u=[];if(isJSONSchemaObject(Z))if(m&&(Z.xml=Z.xml||i.xml||{},Z.xml.name=Z.xml.name||$.name),Array.isArray(Z.anyOf))u.push(...Z.anyOf.map((i=>main_sampleFromSchemaGeneric(iT(i,Z,s),s,void 0,m))));else if(Array.isArray(Z.oneOf))u.push(...Z.oneOf.map((i=>main_sampleFromSchemaGeneric(iT(i,Z,s),s,void 0,m))));else{if(!(!m||m&&$.wrapped))return main_sampleFromSchemaGeneric(Z,s,void 0,m);u.push(main_sampleFromSchemaGeneric(Z,s,void 0,m))}if(isJSONSchemaObject(Y))if(m&&(Y.xml=Y.xml||i.xml||{},Y.xml.name=Y.xml.name||$.name),Array.isArray(Y.anyOf))u.push(...Y.anyOf.map((i=>main_sampleFromSchemaGeneric(iT(i,Y,s),s,void 0,m))));else if(Array.isArray(Y.oneOf))u.push(...Y.oneOf.map((i=>main_sampleFromSchemaGeneric(iT(i,Y,s),s,void 0,m))));else{if(!(!m||m&&$.wrapped))return main_sampleFromSchemaGeneric(Y,s,void 0,m);u.push(main_sampleFromSchemaGeneric(Y,s,void 0,m))}return u=rT.array(i,{sample:u}),m&&$.wrapped?(fe[le]=u,ja()(M)||fe[le].push({_attr:M}),fe):u}if("object"===ee){for(let i in ye)Object.hasOwn(ye,i)&&(ye[i]?.deprecated||ye[i]?.readOnly&&!ae||ye[i]?.writeOnly&&!ie||be(i));if(m&&M&&fe[le].push({_attr:M}),hasExceededMaxProperties())return fe;if(predicates_isBooleanJSONSchema(X)&&X)m?fe[le].push({additionalProp:"Anything can be here"}):fe.additionalProp1={},_e++;else if(isJSONSchemaObject(X)){const u=X,v=main_sampleFromSchemaGeneric(u,s,void 0,m);if(m&&"string"==typeof u?.xml?.name&&"notagname"!==u?.xml?.name)fe[le].push(v);else{const s=Number.isInteger(i.minProperties)&&i.minProperties>0&&_e{const m=main_sampleFromSchemaGeneric(i,s,u,!0);if(m)return"string"==typeof m?m:ka()(m,{declaration:!0,indent:"\t"})},main_sampleFromSchema=(i,s,u)=>main_sampleFromSchemaGeneric(i,s,u,!1),main_resolver=(i,s,u)=>[i,JSON.stringify(s),JSON.stringify(u)],sT=utils_memoizeN(main_createXMLExample,main_resolver),lT=utils_memoizeN(main_sampleFromSchema,main_resolver),cT=[{when:/json/,shouldStringifyTypes:["string"]}],uT=["object"],fn_get_json_sample_schema=i=>(s,u,m,v)=>{const{fn:_}=i(),j=_.jsonSchema202012.memoizedSampleFromSchema(s,u,v),M=typeof j,$=cT.reduce(((i,s)=>s.when.test(m)?[...i,...s.shouldStringifyTypes]:i),uT);return Et()($,(i=>i===M))?JSON.stringify(j,null,2):j},fn_get_yaml_sample_schema=i=>(s,u,m,v)=>{const{fn:_}=i(),j=_.jsonSchema202012.getJsonSampleSchema(s,u,m,v);let M;try{M=ao.dump(ao.load(j),{lineWidth:-1},{schema:Jn}),"\n"===M[M.length-1]&&(M=M.slice(0,M.length-1))}catch(i){return console.error(i),"error: could not generate yaml example"}return M.replace(/\t/g," ")},fn_get_xml_sample_schema=i=>(s,u,m)=>{const{fn:v}=i();if(s&&!s.xml&&(s.xml={}),s&&!s.xml.name){if(!s.$$ref&&(s.type||s.items||s.properties||s.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(s.$$ref){let i=s.$$ref.match(/\S*\/(\S+)$/);s.xml.name=i[1]}}return v.jsonSchema202012.memoizedCreateXMLExample(s,u,m)},fn_get_sample_schema=i=>function(s){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",m=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},v=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:_}=i();return"function"==typeof s?.toJS&&(s=s.toJS()),"function"==typeof v?.toJS&&(v=v.toJS()),/xml/.test(u)?_.jsonSchema202012.getXmlSampleSchema(s,m,v):/(yaml|yml)/.test(u)?_.jsonSchema202012.getYamlSampleSchema(s,m,u,v):_.jsonSchema202012.getJsonSampleSchema(s,m,u,v)},json_schema_2020_12_samples=i=>{let{getSystem:s}=i;const u=fn_get_json_sample_schema(s),m=fn_get_yaml_sample_schema(s),v=fn_get_xml_sample_schema(s),_=fn_get_sample_schema(s);return{fn:{jsonSchema202012:{sampleFromSchema:main_sampleFromSchema,sampleFromSchemaGeneric:main_sampleFromSchemaGeneric,sampleEncoderAPI:JN,sampleFormatAPI:api_formatAPI,sampleMediaTypeAPI:tT,createXMLExample:main_createXMLExample,memoizedSampleFromSchema:lT,memoizedCreateXMLExample:sT,getJsonSampleSchema:u,getYamlSampleSchema:m,getXmlSampleSchema:v,getSampleSchema:_}}}};function PresetApis(){return[base,oas3,json_schema_2020_12,json_schema_2020_12_samples,oas31]}const{GIT_DIRTY:pT,GIT_COMMIT:hT,PACKAGE_VERSION:dT,BUILD_TIME:fT}={PACKAGE_VERSION:"5.9.0",GIT_COMMIT:"gaa9cf563",GIT_DIRTY:!0,BUILD_TIME:"Fri, 29 Sep 2023 12:26:06 GMT"};function SwaggerUI(i){dt.versions=dt.versions||{},dt.versions.swaggerUi={version:dT,gitRevision:hT,gitDirty:pT,buildTimestamp:fT};const s={dom_id:null,domNode:null,spec:{},url:"",urls:null,layout:"BaseLayout",docExpansion:"list",maxDisplayedTags:null,filter:null,validatorUrl:"https://validator.swagger.io/validator",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:i=>i,responseInterceptor:i=>i,showMutatedRequest:!0,defaultModelRendering:"example",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:"cURL (bash)",syntax:"bash"},curl_powershell:{title:"cURL (PowerShell)",syntax:"powershell"},curl_cmd:{title:"cURL (CMD)",syntax:"bash"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:["get","put","post","delete","options","head","patch","trace"],queryConfigEnabled:!1,presets:[PresetApis],plugins:[],pluginsOptions:{pluginLoadType:"legacy"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:"agate"}};let u=i.queryConfigEnabled?(()=>{let i={},s=dt.location.search;if(!s)return{};if(""!=s){let u=s.substr(1).split("&");for(let s in u)Object.prototype.hasOwnProperty.call(u,s)&&(s=u[s].split("="),i[decodeURIComponent(s[0])]=s[1]&&decodeURIComponent(s[1])||"")}return i})():{};const m=i.domNode;delete i.domNode;const v=We()({},s,i,u),_={system:{configs:v.configs},plugins:v.presets,pluginsOptions:v.pluginsOptions,state:We()({layout:{layout:v.layout,filter:v.filter},spec:{spec:"",url:v.url},requestSnippets:v.requestSnippets},v.initialState)};if(v.initialState)for(var j in v.initialState)Object.prototype.hasOwnProperty.call(v.initialState,j)&&void 0===v.initialState[j]&&delete _.state[j];var M=new Store(_);M.register([v.plugins,()=>({fn:v.fn,components:v.components,state:v.state})]);var $=M.getSystem();const downloadSpec=i=>{let s=$.specSelectors.getLocalConfig?$.specSelectors.getLocalConfig():{},_=We()({},s,v,i||{},u);if(m&&(_.domNode=m),M.setConfigs(_),$.configsActions.loaded(),null!==i&&(!u.url&&"object"==typeof _.spec&&Object.keys(_.spec).length?($.specActions.updateUrl(""),$.specActions.updateLoadingStatus("success"),$.specActions.updateSpec(JSON.stringify(_.spec))):$.specActions.download&&_.url&&!_.urls&&($.specActions.updateUrl(_.url),$.specActions.download(_.url))),_.domNode)$.render(_.domNode,"App");else if(_.dom_id){let i=document.querySelector(_.dom_id);$.render(i,"App")}else null===_.dom_id||null===_.domNode||console.error("Skipped rendering: no `dom_id` or `domNode` was specified");return $},W=u.config||v.configUrl;return W&&$.specActions&&$.specActions.getConfigByUrl?($.specActions.getConfigByUrl({url:W,loadRemoteConfig:!0,requestInterceptor:v.requestInterceptor,responseInterceptor:v.responseInterceptor},downloadSpec),$):downloadSpec()}SwaggerUI.System=Store,SwaggerUI.presets={base,apis:PresetApis},SwaggerUI.plugins={Auth:auth,Configs:configsPlugin,DeepLining:deep_linking,Err:err,Filter:filter,Icons:icons,JSONSchema5Samples:json_schema_5_samples,JSONSchema202012:json_schema_2020_12,JSONSchema202012Samples:json_schema_2020_12_samples,Layout:plugins_layout,Logs:logs,OpenAPI30:oas3,OpenAPI31:oas3,OnComplete:on_complete,RequestSnippets:plugins_request_snippets,Spec:plugins_spec,SwaggerClient:swagger_client,Util:util,View:view,DownloadUrl:downloadUrlPlugin,SafeRender:safe_render};const mT=SwaggerUI})(),u=u.default})())); +//# sourceMappingURL=swagger-ui-bundle.js.map \ No newline at end of file diff --git a/app/static/swagger/swagger-ui-bundle.js.map b/app/static/swagger/swagger-ui-bundle.js.map new file mode 100644 index 0000000..aae06bb --- /dev/null +++ b/app/static/swagger/swagger-ui-bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"swagger-ui-bundle.js","mappings":";CAAA,SAAUA,iCAAiCC,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAyB,gBAAID,IAE7BD,EAAsB,gBAAIC,GAC3B,CATD,CASGK,MAAM,4CCPTJ,EAAQ,GAAcA,EAAQ,QAAY,EAC1C,IAAIK,EAAuB,wCACvBC,EAAoB,mBACpBC,EAAsB,oBACtBC,EAAsB,qDACtBC,EAAiB,oBACjBC,EAA0B,CAAC,IAAK,KACpCV,EAAQ,GAAY,cAmCpBA,EAAQ,GAxBR,SAASW,YAAYC,GACjB,IAAKA,EACD,OAAOZ,EAAQ,GAEnB,IAAIa,EAVR,SAASC,qBAAqBC,GAE1B,OADsBA,EAAIC,QAAQR,EAAqB,IAChCQ,QAAQV,GAAmB,SAAUW,EAAOC,GAC/D,OAAOC,OAAOC,aAAaF,EAC/B,GACJ,CAKuBJ,CAAqBF,GACnCI,QAAQT,EAAqB,IAC7BS,QAAQR,EAAqB,IAC7Ba,OACL,IAAKR,EACD,OAAOb,EAAQ,GAEnB,GArBJ,SAASsB,6BAA6BV,GAClC,OAAOF,EAAwBa,QAAQX,EAAI,KAAO,CACtD,CAmBQU,CAA6BT,GAC7B,OAAOA,EAEX,IAAIW,EAAwBX,EAAaI,MAAMR,GAC/C,IAAKe,EACD,OAAOX,EAEX,IAAIY,EAAYD,EAAsB,GACtC,OAAInB,EAAqBqB,KAAKD,GACnBzB,EAAQ,GAEZa,CACX,8BCzCAb,EAAQ2B,WAuCR,SAASA,WAAYC,GACnB,IAAIC,EAAOC,QAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAC3B,OAAuC,GAA9BE,EAAWC,GAAuB,EAAKA,CAClD,EA3CAhC,EAAQiC,YAiDR,SAASA,YAAaL,GACpB,IAAIM,EAcAC,EAbAN,EAAOC,QAAQF,GACfG,EAAWF,EAAK,GAChBG,EAAkBH,EAAK,GAEvBO,EAAM,IAAIC,EAVhB,SAASC,YAAaV,EAAKG,EAAUC,GACnC,OAAuC,GAA9BD,EAAWC,GAAuB,EAAKA,CAClD,CAQoBM,CAAYV,EAAKG,EAAUC,IAEzCO,EAAU,EAGVC,EAAMR,EAAkB,EACxBD,EAAW,EACXA,EAGJ,IAAKI,EAAI,EAAGA,EAAIK,EAAKL,GAAK,EACxBD,EACGO,EAAUb,EAAIc,WAAWP,KAAO,GAChCM,EAAUb,EAAIc,WAAWP,EAAI,KAAO,GACpCM,EAAUb,EAAIc,WAAWP,EAAI,KAAO,EACrCM,EAAUb,EAAIc,WAAWP,EAAI,IAC/BC,EAAIG,KAAcL,GAAO,GAAM,IAC/BE,EAAIG,KAAcL,GAAO,EAAK,IAC9BE,EAAIG,KAAmB,IAANL,EAGK,IAApBF,IACFE,EACGO,EAAUb,EAAIc,WAAWP,KAAO,EAChCM,EAAUb,EAAIc,WAAWP,EAAI,KAAO,EACvCC,EAAIG,KAAmB,IAANL,GAGK,IAApBF,IACFE,EACGO,EAAUb,EAAIc,WAAWP,KAAO,GAChCM,EAAUb,EAAIc,WAAWP,EAAI,KAAO,EACpCM,EAAUb,EAAIc,WAAWP,EAAI,KAAO,EACvCC,EAAIG,KAAcL,GAAO,EAAK,IAC9BE,EAAIG,KAAmB,IAANL,GAGnB,OAAOE,CACT,EA5FApC,EAAQ2C,cAkHR,SAASA,cAAeC,GAQtB,IAPA,IAAIV,EACAM,EAAMI,EAAMC,OACZC,EAAaN,EAAM,EACnBO,EAAQ,GACRC,EAAiB,MAGZb,EAAI,EAAGc,EAAOT,EAAMM,EAAYX,EAAIc,EAAMd,GAAKa,EACtDD,EAAMG,KAAKC,YAAYP,EAAOT,EAAIA,EAAIa,EAAkBC,EAAOA,EAAQd,EAAIa,IAI1D,IAAfF,GACFZ,EAAMU,EAAMJ,EAAM,GAClBO,EAAMG,KACJE,EAAOlB,GAAO,GACdkB,EAAQlB,GAAO,EAAK,IACpB,OAEsB,IAAfY,IACTZ,GAAOU,EAAMJ,EAAM,IAAM,GAAKI,EAAMJ,EAAM,GAC1CO,EAAMG,KACJE,EAAOlB,GAAO,IACdkB,EAAQlB,GAAO,EAAK,IACpBkB,EAAQlB,GAAO,EAAK,IACpB,MAIJ,OAAOa,EAAMM,KAAK,GACpB,EA1IA,IALA,IAAID,EAAS,GACTX,EAAY,GACZJ,EAA4B,oBAAfiB,WAA6BA,WAAaC,MAEvDC,EAAO,mEACFrB,EAAI,EAAsBA,EAAbqB,KAAwBrB,EAC5CiB,EAAOjB,GAAKqB,EAAKrB,GACjBM,EAAUe,EAAKd,WAAWP,IAAMA,EAQlC,SAASL,QAASF,GAChB,IAAIY,EAAMZ,EAAIiB,OAEd,GAAIL,EAAM,EAAI,EACZ,MAAM,IAAIiB,MAAM,kDAKlB,IAAI1B,EAAWH,EAAIL,QAAQ,KAO3B,OANkB,IAAdQ,IAAiBA,EAAWS,GAMzB,CAACT,EAJcA,IAAaS,EAC/B,EACA,EAAKT,EAAW,EAGtB,CAmEA,SAASoB,YAAaP,EAAOc,EAAOC,GAGlC,IAFA,IAAIzB,EARoB0B,EASpBC,EAAS,GACJ1B,EAAIuB,EAAOvB,EAAIwB,EAAKxB,GAAK,EAChCD,GACIU,EAAMT,IAAM,GAAM,WAClBS,EAAMT,EAAI,IAAM,EAAK,QACP,IAAfS,EAAMT,EAAI,IACb0B,EAAOX,KAdFE,GADiBQ,EAeM1B,IAdT,GAAK,IACxBkB,EAAOQ,GAAO,GAAK,IACnBR,EAAOQ,GAAO,EAAI,IAClBR,EAAa,GAANQ,IAaT,OAAOC,EAAOR,KAAK,GACrB,CAlGAZ,EAAU,IAAIC,WAAW,IAAM,GAC/BD,EAAU,IAAIC,WAAW,IAAM,iCCT/B,MAAMoB,EAAS,EAAQ,OACjBC,EAAU,EAAQ,OAClBC,EACe,mBAAXC,QAAkD,mBAAlBA,OAAY,IAChDA,OAAY,IAAE,8BACd,KAENjE,EAAQkE,OAASA,OACjBlE,EAAQmE,WAyTR,SAASA,WAAYtB,IACdA,GAAUA,IACbA,EAAS,GAEX,OAAOqB,OAAOE,OAAOvB,EACvB,EA7TA7C,EAAQqE,kBAAoB,GAE5B,MAAMC,EAAe,WAwDrB,SAASC,aAAc1B,GACrB,GAAIA,EAASyB,EACX,MAAM,IAAIE,WAAW,cAAgB3B,EAAS,kCAGhD,MAAM4B,EAAM,IAAInB,WAAWT,GAE3B,OADA6B,OAAOC,eAAeF,EAAKP,OAAOU,WAC3BH,CACT,CAYA,SAASP,OAAQW,EAAKC,EAAkBjC,GAEtC,GAAmB,iBAARgC,EAAkB,CAC3B,GAAgC,iBAArBC,EACT,MAAM,IAAIC,UACR,sEAGJ,OAAOC,YAAYH,EACrB,CACA,OAAOI,KAAKJ,EAAKC,EAAkBjC,EACrC,CAIA,SAASoC,KAAMC,EAAOJ,EAAkBjC,GACtC,GAAqB,iBAAVqC,EACT,OAqHJ,SAASC,WAAYC,EAAQC,GACH,iBAAbA,GAAsC,KAAbA,IAClCA,EAAW,QAGb,IAAKnB,OAAOoB,WAAWD,GACrB,MAAM,IAAIN,UAAU,qBAAuBM,GAG7C,MAAMxC,EAAwC,EAA/BlB,WAAWyD,EAAQC,GAClC,IAAIZ,EAAMF,aAAa1B,GAEvB,MAAM0C,EAASd,EAAIe,MAAMJ,EAAQC,GAE7BE,IAAW1C,IAIb4B,EAAMA,EAAIgB,MAAM,EAAGF,IAGrB,OAAOd,CACT,CA3IWU,CAAWD,EAAOJ,GAG3B,GAAIY,YAAYC,OAAOT,GACrB,OAkJJ,SAASU,cAAeC,GACtB,GAAIC,WAAWD,EAAWvC,YAAa,CACrC,MAAMyC,EAAO,IAAIzC,WAAWuC,GAC5B,OAAOG,gBAAgBD,EAAKE,OAAQF,EAAKG,WAAYH,EAAKpE,WAC5D,CACA,OAAOwE,cAAcN,EACvB,CAxJWD,CAAcV,GAGvB,GAAa,MAATA,EACF,MAAM,IAAIH,UACR,yHACiDG,GAIrD,GAAIY,WAAWZ,EAAOQ,cACjBR,GAASY,WAAWZ,EAAMe,OAAQP,aACrC,OAAOM,gBAAgBd,EAAOJ,EAAkBjC,GAGlD,GAAiC,oBAAtBuD,oBACNN,WAAWZ,EAAOkB,oBAClBlB,GAASY,WAAWZ,EAAMe,OAAQG,oBACrC,OAAOJ,gBAAgBd,EAAOJ,EAAkBjC,GAGlD,GAAqB,iBAAVqC,EACT,MAAM,IAAIH,UACR,yEAIJ,MAAMsB,EAAUnB,EAAMmB,SAAWnB,EAAMmB,UACvC,GAAe,MAAXA,GAAmBA,IAAYnB,EACjC,OAAOhB,OAAOe,KAAKoB,EAASvB,EAAkBjC,GAGhD,MAAMyD,EAkJR,SAASC,WAAYC,GACnB,GAAItC,OAAOuC,SAASD,GAAM,CACxB,MAAMhE,EAA4B,EAAtBkE,QAAQF,EAAI3D,QAClB4B,EAAMF,aAAa/B,GAEzB,OAAmB,IAAfiC,EAAI5B,QAIR2D,EAAIT,KAAKtB,EAAK,EAAG,EAAGjC,GAHXiC,CAKX,CAEA,QAAmBkC,IAAfH,EAAI3D,OACN,MAA0B,iBAAf2D,EAAI3D,QAAuB+D,YAAYJ,EAAI3D,QAC7C0B,aAAa,GAEf4B,cAAcK,GAGvB,GAAiB,WAAbA,EAAIK,MAAqBtD,MAAMuD,QAAQN,EAAIO,MAC7C,OAAOZ,cAAcK,EAAIO,KAE7B,CAzKYR,CAAWrB,GACrB,GAAIoB,EAAG,OAAOA,EAEd,GAAsB,oBAAXrC,QAAgD,MAAtBA,OAAO+C,aACH,mBAA9B9B,EAAMjB,OAAO+C,aACtB,OAAO9C,OAAOe,KAAKC,EAAMjB,OAAO+C,aAAa,UAAWlC,EAAkBjC,GAG5E,MAAM,IAAIkC,UACR,yHACiDG,EAErD,CAmBA,SAAS+B,WAAYC,GACnB,GAAoB,iBAATA,EACT,MAAM,IAAInC,UAAU,0CACf,GAAImC,EAAO,EAChB,MAAM,IAAI1C,WAAW,cAAgB0C,EAAO,iCAEhD,CA0BA,SAASlC,YAAakC,GAEpB,OADAD,WAAWC,GACJ3C,aAAa2C,EAAO,EAAI,EAAoB,EAAhBR,QAAQQ,GAC7C,CAuCA,SAASf,cAAegB,GACtB,MAAMtE,EAASsE,EAAMtE,OAAS,EAAI,EAA4B,EAAxB6D,QAAQS,EAAMtE,QAC9C4B,EAAMF,aAAa1B,GACzB,IAAK,IAAIV,EAAI,EAAGA,EAAIU,EAAQV,GAAK,EAC/BsC,EAAItC,GAAgB,IAAXgF,EAAMhF,GAEjB,OAAOsC,CACT,CAUA,SAASuB,gBAAiBmB,EAAOjB,EAAYrD,GAC3C,GAAIqD,EAAa,GAAKiB,EAAMxF,WAAauE,EACvC,MAAM,IAAI1B,WAAW,wCAGvB,GAAI2C,EAAMxF,WAAauE,GAAcrD,GAAU,GAC7C,MAAM,IAAI2B,WAAW,wCAGvB,IAAIC,EAYJ,OAVEA,OADiBkC,IAAfT,QAAuCS,IAAX9D,EACxB,IAAIS,WAAW6D,QACDR,IAAX9D,EACH,IAAIS,WAAW6D,EAAOjB,GAEtB,IAAI5C,WAAW6D,EAAOjB,EAAYrD,GAI1C6B,OAAOC,eAAeF,EAAKP,OAAOU,WAE3BH,CACT,CA2BA,SAASiC,QAAS7D,GAGhB,GAAIA,GAAUyB,EACZ,MAAM,IAAIE,WAAW,0DACaF,EAAa8C,SAAS,IAAM,UAEhE,OAAgB,EAATvE,CACT,CAsGA,SAASlB,WAAYyD,EAAQC,GAC3B,GAAInB,OAAOuC,SAASrB,GAClB,OAAOA,EAAOvC,OAEhB,GAAI6C,YAAYC,OAAOP,IAAWU,WAAWV,EAAQM,aACnD,OAAON,EAAOzD,WAEhB,GAAsB,iBAAXyD,EACT,MAAM,IAAIL,UACR,kGAC0BK,GAI9B,MAAM5C,EAAM4C,EAAOvC,OACbwE,EAAaC,UAAUzE,OAAS,IAAsB,IAAjByE,UAAU,GACrD,IAAKD,GAAqB,IAAR7E,EAAW,OAAO,EAGpC,IAAI+E,GAAc,EAClB,OACE,OAAQlC,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAO7C,EACT,IAAK,OACL,IAAK,QACH,OAAOgF,YAAYpC,GAAQvC,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAa,EAANL,EACT,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAOiF,cAAcrC,GAAQvC,OAC/B,QACE,GAAI0E,EACF,OAAOF,GAAa,EAAIG,YAAYpC,GAAQvC,OAE9CwC,GAAY,GAAKA,GAAUqC,cAC3BH,GAAc,EAGtB,CAGA,SAASI,aAActC,EAAU3B,EAAOC,GACtC,IAAI4D,GAAc,EAclB,SALcZ,IAAVjD,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQtD,KAAKyC,OACf,MAAO,GAOT,SAJY8D,IAARhD,GAAqBA,EAAMvD,KAAKyC,UAClCc,EAAMvD,KAAKyC,QAGTc,GAAO,EACT,MAAO,GAOT,IAHAA,KAAS,KACTD,KAAW,GAGT,MAAO,GAKT,IAFK2B,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,OAAOuC,SAASxH,KAAMsD,EAAOC,GAE/B,IAAK,OACL,IAAK,QACH,OAAOkE,UAAUzH,KAAMsD,EAAOC,GAEhC,IAAK,QACH,OAAOmE,WAAW1H,KAAMsD,EAAOC,GAEjC,IAAK,SACL,IAAK,SACH,OAAOoE,YAAY3H,KAAMsD,EAAOC,GAElC,IAAK,SACH,OAAOqE,YAAY5H,KAAMsD,EAAOC,GAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOsE,aAAa7H,KAAMsD,EAAOC,GAEnC,QACE,GAAI4D,EAAa,MAAM,IAAIxC,UAAU,qBAAuBM,GAC5DA,GAAYA,EAAW,IAAIqC,cAC3BH,GAAc,EAGtB,CAUA,SAASW,KAAM5B,EAAG6B,EAAGC,GACnB,MAAMjG,EAAImE,EAAE6B,GACZ7B,EAAE6B,GAAK7B,EAAE8B,GACT9B,EAAE8B,GAAKjG,CACT,CA2IA,SAASkG,qBAAsBpC,EAAQqC,EAAKpC,EAAYb,EAAUkD,GAEhE,GAAsB,IAAlBtC,EAAOpD,OAAc,OAAQ,EAmBjC,GAhB0B,iBAAfqD,GACTb,EAAWa,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAGZU,YADJV,GAAcA,KAGZA,EAAaqC,EAAM,EAAKtC,EAAOpD,OAAS,GAItCqD,EAAa,IAAGA,EAAaD,EAAOpD,OAASqD,GAC7CA,GAAcD,EAAOpD,OAAQ,CAC/B,GAAI0F,EAAK,OAAQ,EACZrC,EAAaD,EAAOpD,OAAS,CACpC,MAAO,GAAIqD,EAAa,EAAG,CACzB,IAAIqC,EACC,OAAQ,EADJrC,EAAa,CAExB,CAQA,GALmB,iBAARoC,IACTA,EAAMpE,OAAOe,KAAKqD,EAAKjD,IAIrBnB,OAAOuC,SAAS6B,GAElB,OAAmB,IAAfA,EAAIzF,QACE,EAEH2F,aAAavC,EAAQqC,EAAKpC,EAAYb,EAAUkD,GAClD,GAAmB,iBAARD,EAEhB,OADAA,GAAY,IACgC,mBAAjChF,WAAWsB,UAAUrD,QAC1BgH,EACKjF,WAAWsB,UAAUrD,QAAQkH,KAAKxC,EAAQqC,EAAKpC,GAE/C5C,WAAWsB,UAAU8D,YAAYD,KAAKxC,EAAQqC,EAAKpC,GAGvDsC,aAAavC,EAAQ,CAACqC,GAAMpC,EAAYb,EAAUkD,GAG3D,MAAM,IAAIxD,UAAU,uCACtB,CAEA,SAASyD,aAAcpG,EAAKkG,EAAKpC,EAAYb,EAAUkD,GACrD,IA0BIpG,EA1BAwG,EAAY,EACZC,EAAYxG,EAAIS,OAChBgG,EAAYP,EAAIzF,OAEpB,QAAiB8D,IAAbtB,IAEe,UADjBA,EAAWlE,OAAOkE,GAAUqC,gBACY,UAAbrC,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAIjD,EAAIS,OAAS,GAAKyF,EAAIzF,OAAS,EACjC,OAAQ,EAEV8F,EAAY,EACZC,GAAa,EACbC,GAAa,EACb3C,GAAc,CAChB,CAGF,SAAS4C,KAAMrE,EAAKtC,GAClB,OAAkB,IAAdwG,EACKlE,EAAItC,GAEJsC,EAAIsE,aAAa5G,EAAIwG,EAEhC,CAGA,GAAIJ,EAAK,CACP,IAAIS,GAAc,EAClB,IAAK7G,EAAI+D,EAAY/D,EAAIyG,EAAWzG,IAClC,GAAI2G,KAAK1G,EAAKD,KAAO2G,KAAKR,GAAqB,IAAhBU,EAAoB,EAAI7G,EAAI6G,IAEzD,IADoB,IAAhBA,IAAmBA,EAAa7G,GAChCA,EAAI6G,EAAa,IAAMH,EAAW,OAAOG,EAAaL,OAEtC,IAAhBK,IAAmB7G,GAAKA,EAAI6G,GAChCA,GAAc,CAGpB,MAEE,IADI9C,EAAa2C,EAAYD,IAAW1C,EAAa0C,EAAYC,GAC5D1G,EAAI+D,EAAY/D,GAAK,EAAGA,IAAK,CAChC,IAAI8G,GAAQ,EACZ,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAWK,IAC7B,GAAIJ,KAAK1G,EAAKD,EAAI+G,KAAOJ,KAAKR,EAAKY,GAAI,CACrCD,GAAQ,EACR,KACF,CAEF,GAAIA,EAAO,OAAO9G,CACpB,CAGF,OAAQ,CACV,CAcA,SAASgH,SAAU1E,EAAKW,EAAQgE,EAAQvG,GACtCuG,EAASC,OAAOD,IAAW,EAC3B,MAAME,EAAY7E,EAAI5B,OAASuG,EAC1BvG,GAGHA,EAASwG,OAAOxG,IACHyG,IACXzG,EAASyG,GAJXzG,EAASyG,EAQX,MAAMC,EAASnE,EAAOvC,OAKtB,IAAIV,EACJ,IAJIU,EAAS0G,EAAS,IACpB1G,EAAS0G,EAAS,GAGfpH,EAAI,EAAGA,EAAIU,IAAUV,EAAG,CAC3B,MAAMqH,EAASC,SAASrE,EAAOsE,OAAW,EAAJvH,EAAO,GAAI,IACjD,GAAIyE,YAAY4C,GAAS,OAAOrH,EAChCsC,EAAI2E,EAASjH,GAAKqH,CACpB,CACA,OAAOrH,CACT,CAEA,SAASwH,UAAWlF,EAAKW,EAAQgE,EAAQvG,GACvC,OAAO+G,WAAWpC,YAAYpC,EAAQX,EAAI5B,OAASuG,GAAS3E,EAAK2E,EAAQvG,EAC3E,CAEA,SAASgH,WAAYpF,EAAKW,EAAQgE,EAAQvG,GACxC,OAAO+G,WAypCT,SAASE,aAAc/I,GACrB,MAAMgJ,EAAY,GAClB,IAAK,IAAI5H,EAAI,EAAGA,EAAIpB,EAAI8B,SAAUV,EAEhC4H,EAAU7G,KAAyB,IAApBnC,EAAI2B,WAAWP,IAEhC,OAAO4H,CACT,CAhqCoBD,CAAa1E,GAASX,EAAK2E,EAAQvG,EACvD,CAEA,SAASmH,YAAavF,EAAKW,EAAQgE,EAAQvG,GACzC,OAAO+G,WAAWnC,cAAcrC,GAASX,EAAK2E,EAAQvG,EACxD,CAEA,SAASoH,UAAWxF,EAAKW,EAAQgE,EAAQvG,GACvC,OAAO+G,WA0pCT,SAASM,eAAgBnJ,EAAKoJ,GAC5B,IAAIC,EAAGC,EAAIC,EACX,MAAMP,EAAY,GAClB,IAAK,IAAI5H,EAAI,EAAGA,EAAIpB,EAAI8B,WACjBsH,GAAS,GAAK,KADahI,EAGhCiI,EAAIrJ,EAAI2B,WAAWP,GACnBkI,EAAKD,GAAK,EACVE,EAAKF,EAAI,IACTL,EAAU7G,KAAKoH,GACfP,EAAU7G,KAAKmH,GAGjB,OAAON,CACT,CAxqCoBG,CAAe9E,EAAQX,EAAI5B,OAASuG,GAAS3E,EAAK2E,EAAQvG,EAC9E,CA8EA,SAASmF,YAAavD,EAAKf,EAAOC,GAChC,OAAc,IAAVD,GAAeC,IAAQc,EAAI5B,OACtBiB,EAAOnB,cAAc8B,GAErBX,EAAOnB,cAAc8B,EAAIgB,MAAM/B,EAAOC,GAEjD,CAEA,SAASkE,UAAWpD,EAAKf,EAAOC,GAC9BA,EAAM4G,KAAKC,IAAI/F,EAAI5B,OAAQc,GAC3B,MAAM8G,EAAM,GAEZ,IAAItI,EAAIuB,EACR,KAAOvB,EAAIwB,GAAK,CACd,MAAM+G,EAAYjG,EAAItC,GACtB,IAAIwI,EAAY,KACZC,EAAoBF,EAAY,IAChC,EACCA,EAAY,IACT,EACCA,EAAY,IACT,EACA,EAEZ,GAAIvI,EAAIyI,GAAoBjH,EAAK,CAC/B,IAAIkH,EAAYC,EAAWC,EAAYC,EAEvC,OAAQJ,GACN,KAAK,EACCF,EAAY,MACdC,EAAYD,GAEd,MACF,KAAK,EACHG,EAAapG,EAAItC,EAAI,GACO,MAAV,IAAb0I,KACHG,GAA6B,GAAZN,IAAqB,EAAoB,GAAbG,EACzCG,EAAgB,MAClBL,EAAYK,IAGhB,MACF,KAAK,EACHH,EAAapG,EAAItC,EAAI,GACrB2I,EAAYrG,EAAItC,EAAI,GACQ,MAAV,IAAb0I,IAAsD,MAAV,IAAZC,KACnCE,GAA6B,GAAZN,IAAoB,IAAoB,GAAbG,IAAsB,EAAmB,GAAZC,EACrEE,EAAgB,OAAUA,EAAgB,OAAUA,EAAgB,SACtEL,EAAYK,IAGhB,MACF,KAAK,EACHH,EAAapG,EAAItC,EAAI,GACrB2I,EAAYrG,EAAItC,EAAI,GACpB4I,EAAatG,EAAItC,EAAI,GACO,MAAV,IAAb0I,IAAsD,MAAV,IAAZC,IAAsD,MAAV,IAAbC,KAClEC,GAA6B,GAAZN,IAAoB,IAAqB,GAAbG,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,EAClGC,EAAgB,OAAUA,EAAgB,UAC5CL,EAAYK,IAItB,CAEkB,OAAdL,GAGFA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACbF,EAAIvH,KAAKyH,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvBF,EAAIvH,KAAKyH,GACTxI,GAAKyI,CACP,CAEA,OAQF,SAASK,sBAAuBC,GAC9B,MAAM1I,EAAM0I,EAAWrI,OACvB,GAAIL,GAAO2I,EACT,OAAOhK,OAAOC,aAAagK,MAAMjK,OAAQ+J,GAI3C,IAAIT,EAAM,GACNtI,EAAI,EACR,KAAOA,EAAIK,GACTiI,GAAOtJ,OAAOC,aAAagK,MACzBjK,OACA+J,EAAWzF,MAAMtD,EAAGA,GAAKgJ,IAG7B,OAAOV,CACT,CAxBSQ,CAAsBR,EAC/B,CA3+BAzK,EAAQqL,WAAa/G,EAgBrBJ,OAAOoH,oBAUP,SAASC,oBAEP,IACE,MAAMnJ,EAAM,IAAIkB,WAAW,GACrBkI,EAAQ,CAAEC,IAAK,WAAc,OAAO,EAAG,GAG7C,OAFA/G,OAAOC,eAAe6G,EAAOlI,WAAWsB,WACxCF,OAAOC,eAAevC,EAAKoJ,GACN,KAAdpJ,EAAIqJ,KACb,CAAE,MAAOC,GACP,OAAO,CACT,CACF,CArB6BH,GAExBrH,OAAOoH,qBAA0C,oBAAZK,SACb,mBAAlBA,QAAQC,OACjBD,QAAQC,MACN,iJAkBJlH,OAAOmH,eAAe3H,OAAOU,UAAW,SAAU,CAChDkH,YAAY,EACZC,IAAK,WACH,GAAK7H,OAAOuC,SAASrG,MACrB,OAAOA,KAAK6F,MACd,IAGFvB,OAAOmH,eAAe3H,OAAOU,UAAW,SAAU,CAChDkH,YAAY,EACZC,IAAK,WACH,GAAK7H,OAAOuC,SAASrG,MACrB,OAAOA,KAAK8F,UACd,IAoCFhC,OAAO8H,SAAW,KA8DlB9H,OAAOe,KAAO,SAAUC,EAAOJ,EAAkBjC,GAC/C,OAAOoC,KAAKC,EAAOJ,EAAkBjC,EACvC,EAIA6B,OAAOC,eAAeT,OAAOU,UAAWtB,WAAWsB,WACnDF,OAAOC,eAAeT,OAAQZ,YA8B9BY,OAAOE,MAAQ,SAAU8C,EAAM+E,EAAM5G,GACnC,OArBF,SAASjB,MAAO8C,EAAM+E,EAAM5G,GAE1B,OADA4B,WAAWC,GACPA,GAAQ,EACH3C,aAAa2C,QAETP,IAATsF,EAIyB,iBAAb5G,EACVd,aAAa2C,GAAM+E,KAAKA,EAAM5G,GAC9Bd,aAAa2C,GAAM+E,KAAKA,GAEvB1H,aAAa2C,EACtB,CAOS9C,CAAM8C,EAAM+E,EAAM5G,EAC3B,EAUAnB,OAAOc,YAAc,SAAUkC,GAC7B,OAAOlC,YAAYkC,EACrB,EAIAhD,OAAOgI,gBAAkB,SAAUhF,GACjC,OAAOlC,YAAYkC,EACrB,EA6GAhD,OAAOuC,SAAW,SAASA,SAAUH,GACnC,OAAY,MAALA,IAA6B,IAAhBA,EAAE6F,WACpB7F,IAAMpC,OAAOU,SACjB,EAEAV,OAAOkI,QAAU,SAASA,QAASC,EAAG/F,GAGpC,GAFIR,WAAWuG,EAAG/I,cAAa+I,EAAInI,OAAOe,KAAKoH,EAAGA,EAAEjD,OAAQiD,EAAE1K,aAC1DmE,WAAWQ,EAAGhD,cAAagD,EAAIpC,OAAOe,KAAKqB,EAAGA,EAAE8C,OAAQ9C,EAAE3E,cACzDuC,OAAOuC,SAAS4F,KAAOnI,OAAOuC,SAASH,GAC1C,MAAM,IAAIvB,UACR,yEAIJ,GAAIsH,IAAM/F,EAAG,OAAO,EAEpB,IAAIgG,EAAID,EAAExJ,OACN0J,EAAIjG,EAAEzD,OAEV,IAAK,IAAIV,EAAI,EAAGK,EAAM+H,KAAKC,IAAI8B,EAAGC,GAAIpK,EAAIK,IAAOL,EAC/C,GAAIkK,EAAElK,KAAOmE,EAAEnE,GAAI,CACjBmK,EAAID,EAAElK,GACNoK,EAAIjG,EAAEnE,GACN,KACF,CAGF,OAAImK,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,CACT,EAEApI,OAAOoB,WAAa,SAASA,WAAYD,GACvC,OAAQlE,OAAOkE,GAAUqC,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,EAEb,EAEAxD,OAAOsI,OAAS,SAASA,OAAQC,EAAM5J,GACrC,IAAKU,MAAMuD,QAAQ2F,GACjB,MAAM,IAAI1H,UAAU,+CAGtB,GAAoB,IAAhB0H,EAAK5J,OACP,OAAOqB,OAAOE,MAAM,GAGtB,IAAIjC,EACJ,QAAewE,IAAX9D,EAEF,IADAA,EAAS,EACJV,EAAI,EAAGA,EAAIsK,EAAK5J,SAAUV,EAC7BU,GAAU4J,EAAKtK,GAAGU,OAItB,MAAMoD,EAAS/B,OAAOc,YAAYnC,GAClC,IAAI6J,EAAM,EACV,IAAKvK,EAAI,EAAGA,EAAIsK,EAAK5J,SAAUV,EAAG,CAChC,IAAIsC,EAAMgI,EAAKtK,GACf,GAAI2D,WAAWrB,EAAKnB,YACdoJ,EAAMjI,EAAI5B,OAASoD,EAAOpD,QACvBqB,OAAOuC,SAAShC,KAAMA,EAAMP,OAAOe,KAAKR,IAC7CA,EAAIsB,KAAKE,EAAQyG,IAEjBpJ,WAAWsB,UAAU+H,IAAIlE,KACvBxC,EACAxB,EACAiI,OAGC,KAAKxI,OAAOuC,SAAShC,GAC1B,MAAM,IAAIM,UAAU,+CAEpBN,EAAIsB,KAAKE,EAAQyG,EACnB,CACAA,GAAOjI,EAAI5B,MACb,CACA,OAAOoD,CACT,EAiDA/B,OAAOvC,WAAaA,WA8EpBuC,OAAOU,UAAUuH,WAAY,EAQ7BjI,OAAOU,UAAUgI,OAAS,SAASA,SACjC,MAAMpK,EAAMpC,KAAKyC,OACjB,GAAIL,EAAM,GAAM,EACd,MAAM,IAAIgC,WAAW,6CAEvB,IAAK,IAAIrC,EAAI,EAAGA,EAAIK,EAAKL,GAAK,EAC5B+F,KAAK9H,KAAM+B,EAAGA,EAAI,GAEpB,OAAO/B,IACT,EAEA8D,OAAOU,UAAUiI,OAAS,SAASA,SACjC,MAAMrK,EAAMpC,KAAKyC,OACjB,GAAIL,EAAM,GAAM,EACd,MAAM,IAAIgC,WAAW,6CAEvB,IAAK,IAAIrC,EAAI,EAAGA,EAAIK,EAAKL,GAAK,EAC5B+F,KAAK9H,KAAM+B,EAAGA,EAAI,GAClB+F,KAAK9H,KAAM+B,EAAI,EAAGA,EAAI,GAExB,OAAO/B,IACT,EAEA8D,OAAOU,UAAUkI,OAAS,SAASA,SACjC,MAAMtK,EAAMpC,KAAKyC,OACjB,GAAIL,EAAM,GAAM,EACd,MAAM,IAAIgC,WAAW,6CAEvB,IAAK,IAAIrC,EAAI,EAAGA,EAAIK,EAAKL,GAAK,EAC5B+F,KAAK9H,KAAM+B,EAAGA,EAAI,GAClB+F,KAAK9H,KAAM+B,EAAI,EAAGA,EAAI,GACtB+F,KAAK9H,KAAM+B,EAAI,EAAGA,EAAI,GACtB+F,KAAK9H,KAAM+B,EAAI,EAAGA,EAAI,GAExB,OAAO/B,IACT,EAEA8D,OAAOU,UAAUwC,SAAW,SAASA,WACnC,MAAMvE,EAASzC,KAAKyC,OACpB,OAAe,IAAXA,EAAqB,GACA,IAArByE,UAAUzE,OAAqBgF,UAAUzH,KAAM,EAAGyC,GAC/C8E,aAAayD,MAAMhL,KAAMkH,UAClC,EAEApD,OAAOU,UAAUmI,eAAiB7I,OAAOU,UAAUwC,SAEnDlD,OAAOU,UAAUoI,OAAS,SAASA,OAAQ1G,GACzC,IAAKpC,OAAOuC,SAASH,GAAI,MAAM,IAAIvB,UAAU,6BAC7C,OAAI3E,OAASkG,GACsB,IAA5BpC,OAAOkI,QAAQhM,KAAMkG,EAC9B,EAEApC,OAAOU,UAAUqI,QAAU,SAASA,UAClC,IAAIlM,EAAM,GACV,MAAMmM,EAAMlN,EAAQqE,kBAGpB,OAFAtD,EAAMX,KAAKgH,SAAS,MAAO,EAAG8F,GAAKlM,QAAQ,UAAW,OAAOK,OACzDjB,KAAKyC,OAASqK,IAAKnM,GAAO,SACvB,WAAaA,EAAM,GAC5B,EACIiD,IACFE,OAAOU,UAAUZ,GAAuBE,OAAOU,UAAUqI,SAG3D/I,OAAOU,UAAUwH,QAAU,SAASA,QAASe,EAAQzJ,EAAOC,EAAKyJ,EAAWC,GAI1E,GAHIvH,WAAWqH,EAAQ7J,cACrB6J,EAASjJ,OAAOe,KAAKkI,EAAQA,EAAO/D,OAAQ+D,EAAOxL,cAEhDuC,OAAOuC,SAAS0G,GACnB,MAAM,IAAIpI,UACR,wFAC2BoI,GAiB/B,QAbcxG,IAAVjD,IACFA,EAAQ,QAEEiD,IAARhD,IACFA,EAAMwJ,EAASA,EAAOtK,OAAS,QAEf8D,IAAdyG,IACFA,EAAY,QAEEzG,IAAZ0G,IACFA,EAAUjN,KAAKyC,QAGba,EAAQ,GAAKC,EAAMwJ,EAAOtK,QAAUuK,EAAY,GAAKC,EAAUjN,KAAKyC,OACtE,MAAM,IAAI2B,WAAW,sBAGvB,GAAI4I,GAAaC,GAAW3J,GAASC,EACnC,OAAO,EAET,GAAIyJ,GAAaC,EACf,OAAQ,EAEV,GAAI3J,GAASC,EACX,OAAO,EAQT,GAAIvD,OAAS+M,EAAQ,OAAO,EAE5B,IAAIb,GAJJe,KAAa,IADbD,KAAe,GAMXb,GAPJ5I,KAAS,IADTD,KAAW,GASX,MAAMlB,EAAM+H,KAAKC,IAAI8B,EAAGC,GAElBe,EAAWlN,KAAKqF,MAAM2H,EAAWC,GACjCE,EAAaJ,EAAO1H,MAAM/B,EAAOC,GAEvC,IAAK,IAAIxB,EAAI,EAAGA,EAAIK,IAAOL,EACzB,GAAImL,EAASnL,KAAOoL,EAAWpL,GAAI,CACjCmK,EAAIgB,EAASnL,GACboK,EAAIgB,EAAWpL,GACf,KACF,CAGF,OAAImK,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,CACT,EA2HApI,OAAOU,UAAU4I,SAAW,SAASA,SAAUlF,EAAKpC,EAAYb,GAC9D,OAAoD,IAA7CjF,KAAKmB,QAAQ+G,EAAKpC,EAAYb,EACvC,EAEAnB,OAAOU,UAAUrD,QAAU,SAASA,QAAS+G,EAAKpC,EAAYb,GAC5D,OAAOgD,qBAAqBjI,KAAMkI,EAAKpC,EAAYb,GAAU,EAC/D,EAEAnB,OAAOU,UAAU8D,YAAc,SAASA,YAAaJ,EAAKpC,EAAYb,GACpE,OAAOgD,qBAAqBjI,KAAMkI,EAAKpC,EAAYb,GAAU,EAC/D,EA4CAnB,OAAOU,UAAUY,MAAQ,SAASA,MAAOJ,EAAQgE,EAAQvG,EAAQwC,GAE/D,QAAesB,IAAXyC,EACF/D,EAAW,OACXxC,EAASzC,KAAKyC,OACduG,EAAS,OAEJ,QAAezC,IAAX9D,GAA0C,iBAAXuG,EACxC/D,EAAW+D,EACXvG,EAASzC,KAAKyC,OACduG,EAAS,MAEJ,KAAIqE,SAASrE,GAUlB,MAAM,IAAI3F,MACR,2EAVF2F,KAAoB,EAChBqE,SAAS5K,IACXA,KAAoB,OACH8D,IAAbtB,IAAwBA,EAAW,UAEvCA,EAAWxC,EACXA,OAAS8D,EAMb,CAEA,MAAM2C,EAAYlJ,KAAKyC,OAASuG,EAGhC,SAFezC,IAAX9D,GAAwBA,EAASyG,KAAWzG,EAASyG,GAEpDlE,EAAOvC,OAAS,IAAMA,EAAS,GAAKuG,EAAS,IAAOA,EAAShJ,KAAKyC,OACrE,MAAM,IAAI2B,WAAW,0CAGlBa,IAAUA,EAAW,QAE1B,IAAIkC,GAAc,EAClB,OACE,OAAQlC,GACN,IAAK,MACH,OAAO8D,SAAS/I,KAAMgF,EAAQgE,EAAQvG,GAExC,IAAK,OACL,IAAK,QACH,OAAO8G,UAAUvJ,KAAMgF,EAAQgE,EAAQvG,GAEzC,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAOgH,WAAWzJ,KAAMgF,EAAQgE,EAAQvG,GAE1C,IAAK,SAEH,OAAOmH,YAAY5J,KAAMgF,EAAQgE,EAAQvG,GAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOoH,UAAU7J,KAAMgF,EAAQgE,EAAQvG,GAEzC,QACE,GAAI0E,EAAa,MAAM,IAAIxC,UAAU,qBAAuBM,GAC5DA,GAAY,GAAKA,GAAUqC,cAC3BH,GAAc,EAGtB,EAEArD,OAAOU,UAAU8I,OAAS,SAASA,SACjC,MAAO,CACL7G,KAAM,SACNE,KAAMxD,MAAMqB,UAAUa,MAAMgD,KAAKrI,KAAKuN,MAAQvN,KAAM,GAExD,EAyFA,MAAM+K,EAAuB,KAoB7B,SAASrD,WAAYrD,EAAKf,EAAOC,GAC/B,IAAIiK,EAAM,GACVjK,EAAM4G,KAAKC,IAAI/F,EAAI5B,OAAQc,GAE3B,IAAK,IAAIxB,EAAIuB,EAAOvB,EAAIwB,IAAOxB,EAC7ByL,GAAOzM,OAAOC,aAAsB,IAATqD,EAAItC,IAEjC,OAAOyL,CACT,CAEA,SAAS7F,YAAatD,EAAKf,EAAOC,GAChC,IAAIiK,EAAM,GACVjK,EAAM4G,KAAKC,IAAI/F,EAAI5B,OAAQc,GAE3B,IAAK,IAAIxB,EAAIuB,EAAOvB,EAAIwB,IAAOxB,EAC7ByL,GAAOzM,OAAOC,aAAaqD,EAAItC,IAEjC,OAAOyL,CACT,CAEA,SAAShG,SAAUnD,EAAKf,EAAOC,GAC7B,MAAMnB,EAAMiC,EAAI5B,SAEXa,GAASA,EAAQ,KAAGA,EAAQ,KAC5BC,GAAOA,EAAM,GAAKA,EAAMnB,KAAKmB,EAAMnB,GAExC,IAAIqL,EAAM,GACV,IAAK,IAAI1L,EAAIuB,EAAOvB,EAAIwB,IAAOxB,EAC7B0L,GAAOC,EAAoBrJ,EAAItC,IAEjC,OAAO0L,CACT,CAEA,SAAS5F,aAAcxD,EAAKf,EAAOC,GACjC,MAAMoK,EAAQtJ,EAAIgB,MAAM/B,EAAOC,GAC/B,IAAI8G,EAAM,GAEV,IAAK,IAAItI,EAAI,EAAGA,EAAI4L,EAAMlL,OAAS,EAAGV,GAAK,EACzCsI,GAAOtJ,OAAOC,aAAa2M,EAAM5L,GAAqB,IAAf4L,EAAM5L,EAAI,IAEnD,OAAOsI,CACT,CAiCA,SAASuD,YAAa5E,EAAQ6E,EAAKpL,GACjC,GAAKuG,EAAS,GAAO,GAAKA,EAAS,EAAG,MAAM,IAAI5E,WAAW,sBAC3D,GAAI4E,EAAS6E,EAAMpL,EAAQ,MAAM,IAAI2B,WAAW,wCAClD,CAyQA,SAAS0J,SAAUzJ,EAAKS,EAAOkE,EAAQ6E,EAAKf,EAAK1C,GAC/C,IAAKtG,OAAOuC,SAAShC,GAAM,MAAM,IAAIM,UAAU,+CAC/C,GAAIG,EAAQgI,GAAOhI,EAAQsF,EAAK,MAAM,IAAIhG,WAAW,qCACrD,GAAI4E,EAAS6E,EAAMxJ,EAAI5B,OAAQ,MAAM,IAAI2B,WAAW,qBACtD,CA+FA,SAAS2J,eAAgB1J,EAAKS,EAAOkE,EAAQoB,EAAK0C,GAChDkB,WAAWlJ,EAAOsF,EAAK0C,EAAKzI,EAAK2E,EAAQ,GAEzC,IAAIkB,EAAKjB,OAAOnE,EAAQmJ,OAAO,aAC/B5J,EAAI2E,KAAYkB,EAChBA,IAAW,EACX7F,EAAI2E,KAAYkB,EAChBA,IAAW,EACX7F,EAAI2E,KAAYkB,EAChBA,IAAW,EACX7F,EAAI2E,KAAYkB,EAChB,IAAID,EAAKhB,OAAOnE,GAASmJ,OAAO,IAAMA,OAAO,aAQ7C,OAPA5J,EAAI2E,KAAYiB,EAChBA,IAAW,EACX5F,EAAI2E,KAAYiB,EAChBA,IAAW,EACX5F,EAAI2E,KAAYiB,EAChBA,IAAW,EACX5F,EAAI2E,KAAYiB,EACTjB,CACT,CAEA,SAASkF,eAAgB7J,EAAKS,EAAOkE,EAAQoB,EAAK0C,GAChDkB,WAAWlJ,EAAOsF,EAAK0C,EAAKzI,EAAK2E,EAAQ,GAEzC,IAAIkB,EAAKjB,OAAOnE,EAAQmJ,OAAO,aAC/B5J,EAAI2E,EAAS,GAAKkB,EAClBA,IAAW,EACX7F,EAAI2E,EAAS,GAAKkB,EAClBA,IAAW,EACX7F,EAAI2E,EAAS,GAAKkB,EAClBA,IAAW,EACX7F,EAAI2E,EAAS,GAAKkB,EAClB,IAAID,EAAKhB,OAAOnE,GAASmJ,OAAO,IAAMA,OAAO,aAQ7C,OAPA5J,EAAI2E,EAAS,GAAKiB,EAClBA,IAAW,EACX5F,EAAI2E,EAAS,GAAKiB,EAClBA,IAAW,EACX5F,EAAI2E,EAAS,GAAKiB,EAClBA,IAAW,EACX5F,EAAI2E,GAAUiB,EACPjB,EAAS,CAClB,CAkHA,SAASmF,aAAc9J,EAAKS,EAAOkE,EAAQ6E,EAAKf,EAAK1C,GACnD,GAAIpB,EAAS6E,EAAMxJ,EAAI5B,OAAQ,MAAM,IAAI2B,WAAW,sBACpD,GAAI4E,EAAS,EAAG,MAAM,IAAI5E,WAAW,qBACvC,CAEA,SAASgK,WAAY/J,EAAKS,EAAOkE,EAAQqF,EAAcC,GAOrD,OANAxJ,GAASA,EACTkE,KAAoB,EACfsF,GACHH,aAAa9J,EAAKS,EAAOkE,EAAQ,GAEnCrF,EAAQyB,MAAMf,EAAKS,EAAOkE,EAAQqF,EAAc,GAAI,GAC7CrF,EAAS,CAClB,CAUA,SAASuF,YAAalK,EAAKS,EAAOkE,EAAQqF,EAAcC,GAOtD,OANAxJ,GAASA,EACTkE,KAAoB,EACfsF,GACHH,aAAa9J,EAAKS,EAAOkE,EAAQ,GAEnCrF,EAAQyB,MAAMf,EAAKS,EAAOkE,EAAQqF,EAAc,GAAI,GAC7CrF,EAAS,CAClB,CAzkBAlF,OAAOU,UAAUa,MAAQ,SAASA,MAAO/B,EAAOC,GAC9C,MAAMnB,EAAMpC,KAAKyC,QACjBa,IAAUA,GAGE,GACVA,GAASlB,GACG,IAAGkB,EAAQ,GACdA,EAAQlB,IACjBkB,EAAQlB,IANVmB,OAAcgD,IAARhD,EAAoBnB,IAAQmB,GASxB,GACRA,GAAOnB,GACG,IAAGmB,EAAM,GACVA,EAAMnB,IACfmB,EAAMnB,GAGJmB,EAAMD,IAAOC,EAAMD,GAEvB,MAAMkL,EAASxO,KAAKyO,SAASnL,EAAOC,GAIpC,OAFAe,OAAOC,eAAeiK,EAAQ1K,OAAOU,WAE9BgK,CACT,EAUA1K,OAAOU,UAAUkK,WACjB5K,OAAOU,UAAUmK,WAAa,SAASA,WAAY3F,EAAQzH,EAAY+M,GACrEtF,KAAoB,EACpBzH,KAA4B,EACvB+M,GAAUV,YAAY5E,EAAQzH,EAAYvB,KAAKyC,QAEpD,IAAIyF,EAAMlI,KAAKgJ,GACX4F,EAAM,EACN7M,EAAI,EACR,OAASA,EAAIR,IAAeqN,GAAO,MACjC1G,GAAOlI,KAAKgJ,EAASjH,GAAK6M,EAG5B,OAAO1G,CACT,EAEApE,OAAOU,UAAUqK,WACjB/K,OAAOU,UAAUsK,WAAa,SAASA,WAAY9F,EAAQzH,EAAY+M,GACrEtF,KAAoB,EACpBzH,KAA4B,EACvB+M,GACHV,YAAY5E,EAAQzH,EAAYvB,KAAKyC,QAGvC,IAAIyF,EAAMlI,KAAKgJ,IAAWzH,GACtBqN,EAAM,EACV,KAAOrN,EAAa,IAAMqN,GAAO,MAC/B1G,GAAOlI,KAAKgJ,IAAWzH,GAAcqN,EAGvC,OAAO1G,CACT,EAEApE,OAAOU,UAAUuK,UACjBjL,OAAOU,UAAUwK,UAAY,SAASA,UAAWhG,EAAQsF,GAGvD,OAFAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QACpCzC,KAAKgJ,EACd,EAEAlF,OAAOU,UAAUyK,aACjBnL,OAAOU,UAAU0K,aAAe,SAASA,aAAclG,EAAQsF,GAG7D,OAFAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QACpCzC,KAAKgJ,GAAWhJ,KAAKgJ,EAAS,IAAM,CAC7C,EAEAlF,OAAOU,UAAU2K,aACjBrL,OAAOU,UAAUmE,aAAe,SAASA,aAAcK,EAAQsF,GAG7D,OAFAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QACnCzC,KAAKgJ,IAAW,EAAKhJ,KAAKgJ,EAAS,EAC7C,EAEAlF,OAAOU,UAAU4K,aACjBtL,OAAOU,UAAU6K,aAAe,SAASA,aAAcrG,EAAQsF,GAI7D,OAHAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,SAElCzC,KAAKgJ,GACThJ,KAAKgJ,EAAS,IAAM,EACpBhJ,KAAKgJ,EAAS,IAAM,IACD,SAAnBhJ,KAAKgJ,EAAS,EACrB,EAEAlF,OAAOU,UAAU8K,aACjBxL,OAAOU,UAAU+K,aAAe,SAASA,aAAcvG,EAAQsF,GAI7D,OAHAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QAEpB,SAAfzC,KAAKgJ,IACThJ,KAAKgJ,EAAS,IAAM,GACrBhJ,KAAKgJ,EAAS,IAAM,EACrBhJ,KAAKgJ,EAAS,GAClB,EAEAlF,OAAOU,UAAUgL,gBAAkBC,oBAAmB,SAASD,gBAAiBxG,GAE9E0G,eADA1G,KAAoB,EACG,UACvB,MAAM2G,EAAQ3P,KAAKgJ,GACb4G,EAAO5P,KAAKgJ,EAAS,QACbzC,IAAVoJ,QAAgCpJ,IAATqJ,GACzBC,YAAY7G,EAAQhJ,KAAKyC,OAAS,GAGpC,MAAMyH,EAAKyF,EACQ,IAAjB3P,OAAOgJ,GACU,MAAjBhJ,OAAOgJ,GACPhJ,OAAOgJ,GAAU,GAAK,GAElBiB,EAAKjK,OAAOgJ,GACC,IAAjBhJ,OAAOgJ,GACU,MAAjBhJ,OAAOgJ,GACP4G,EAAO,GAAK,GAEd,OAAO3B,OAAO/D,IAAO+D,OAAOhE,IAAOgE,OAAO,IAC5C,IAEAnK,OAAOU,UAAUsL,gBAAkBL,oBAAmB,SAASK,gBAAiB9G,GAE9E0G,eADA1G,KAAoB,EACG,UACvB,MAAM2G,EAAQ3P,KAAKgJ,GACb4G,EAAO5P,KAAKgJ,EAAS,QACbzC,IAAVoJ,QAAgCpJ,IAATqJ,GACzBC,YAAY7G,EAAQhJ,KAAKyC,OAAS,GAGpC,MAAMwH,EAAK0F,EAAQ,GAAK,GACL,MAAjB3P,OAAOgJ,GACU,IAAjBhJ,OAAOgJ,GACPhJ,OAAOgJ,GAEHkB,EAAKlK,OAAOgJ,GAAU,GAAK,GACd,MAAjBhJ,OAAOgJ,GACU,IAAjBhJ,OAAOgJ,GACP4G,EAEF,OAAQ3B,OAAOhE,IAAOgE,OAAO,KAAOA,OAAO/D,EAC7C,IAEApG,OAAOU,UAAUuL,UAAY,SAASA,UAAW/G,EAAQzH,EAAY+M,GACnEtF,KAAoB,EACpBzH,KAA4B,EACvB+M,GAAUV,YAAY5E,EAAQzH,EAAYvB,KAAKyC,QAEpD,IAAIyF,EAAMlI,KAAKgJ,GACX4F,EAAM,EACN7M,EAAI,EACR,OAASA,EAAIR,IAAeqN,GAAO,MACjC1G,GAAOlI,KAAKgJ,EAASjH,GAAK6M,EAM5B,OAJAA,GAAO,IAEH1G,GAAO0G,IAAK1G,GAAOiC,KAAK6F,IAAI,EAAG,EAAIzO,IAEhC2G,CACT,EAEApE,OAAOU,UAAUyL,UAAY,SAASA,UAAWjH,EAAQzH,EAAY+M,GACnEtF,KAAoB,EACpBzH,KAA4B,EACvB+M,GAAUV,YAAY5E,EAAQzH,EAAYvB,KAAKyC,QAEpD,IAAIV,EAAIR,EACJqN,EAAM,EACN1G,EAAMlI,KAAKgJ,IAAWjH,GAC1B,KAAOA,EAAI,IAAM6M,GAAO,MACtB1G,GAAOlI,KAAKgJ,IAAWjH,GAAK6M,EAM9B,OAJAA,GAAO,IAEH1G,GAAO0G,IAAK1G,GAAOiC,KAAK6F,IAAI,EAAG,EAAIzO,IAEhC2G,CACT,EAEApE,OAAOU,UAAU0L,SAAW,SAASA,SAAUlH,EAAQsF,GAGrD,OAFAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QACtB,IAAfzC,KAAKgJ,IAC0B,GAA5B,IAAOhJ,KAAKgJ,GAAU,GADKhJ,KAAKgJ,EAE3C,EAEAlF,OAAOU,UAAU2L,YAAc,SAASA,YAAanH,EAAQsF,GAC3DtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QAC3C,MAAMyF,EAAMlI,KAAKgJ,GAAWhJ,KAAKgJ,EAAS,IAAM,EAChD,OAAc,MAANd,EAAsB,WAANA,EAAmBA,CAC7C,EAEApE,OAAOU,UAAU4L,YAAc,SAASA,YAAapH,EAAQsF,GAC3DtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QAC3C,MAAMyF,EAAMlI,KAAKgJ,EAAS,GAAMhJ,KAAKgJ,IAAW,EAChD,OAAc,MAANd,EAAsB,WAANA,EAAmBA,CAC7C,EAEApE,OAAOU,UAAU6L,YAAc,SAASA,YAAarH,EAAQsF,GAI3D,OAHAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QAEnCzC,KAAKgJ,GACVhJ,KAAKgJ,EAAS,IAAM,EACpBhJ,KAAKgJ,EAAS,IAAM,GACpBhJ,KAAKgJ,EAAS,IAAM,EACzB,EAEAlF,OAAOU,UAAU8L,YAAc,SAASA,YAAatH,EAAQsF,GAI3D,OAHAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QAEnCzC,KAAKgJ,IAAW,GACrBhJ,KAAKgJ,EAAS,IAAM,GACpBhJ,KAAKgJ,EAAS,IAAM,EACpBhJ,KAAKgJ,EAAS,EACnB,EAEAlF,OAAOU,UAAU+L,eAAiBd,oBAAmB,SAASc,eAAgBvH,GAE5E0G,eADA1G,KAAoB,EACG,UACvB,MAAM2G,EAAQ3P,KAAKgJ,GACb4G,EAAO5P,KAAKgJ,EAAS,QACbzC,IAAVoJ,QAAgCpJ,IAATqJ,GACzBC,YAAY7G,EAAQhJ,KAAKyC,OAAS,GAGpC,MAAMyF,EAAMlI,KAAKgJ,EAAS,GACL,IAAnBhJ,KAAKgJ,EAAS,GACK,MAAnBhJ,KAAKgJ,EAAS,IACb4G,GAAQ,IAEX,OAAQ3B,OAAO/F,IAAQ+F,OAAO,KAC5BA,OAAO0B,EACU,IAAjB3P,OAAOgJ,GACU,MAAjBhJ,OAAOgJ,GACPhJ,OAAOgJ,GAAU,GAAK,GAC1B,IAEAlF,OAAOU,UAAUgM,eAAiBf,oBAAmB,SAASe,eAAgBxH,GAE5E0G,eADA1G,KAAoB,EACG,UACvB,MAAM2G,EAAQ3P,KAAKgJ,GACb4G,EAAO5P,KAAKgJ,EAAS,QACbzC,IAAVoJ,QAAgCpJ,IAATqJ,GACzBC,YAAY7G,EAAQhJ,KAAKyC,OAAS,GAGpC,MAAMyF,GAAOyH,GAAS,IACH,MAAjB3P,OAAOgJ,GACU,IAAjBhJ,OAAOgJ,GACPhJ,OAAOgJ,GAET,OAAQiF,OAAO/F,IAAQ+F,OAAO,KAC5BA,OAAOjO,OAAOgJ,GAAU,GAAK,GACZ,MAAjBhJ,OAAOgJ,GACU,IAAjBhJ,OAAOgJ,GACP4G,EACJ,IAEA9L,OAAOU,UAAUiM,YAAc,SAASA,YAAazH,EAAQsF,GAG3D,OAFAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QACpCkB,EAAQ+E,KAAK1I,KAAMgJ,GAAQ,EAAM,GAAI,EAC9C,EAEAlF,OAAOU,UAAUkM,YAAc,SAASA,YAAa1H,EAAQsF,GAG3D,OAFAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QACpCkB,EAAQ+E,KAAK1I,KAAMgJ,GAAQ,EAAO,GAAI,EAC/C,EAEAlF,OAAOU,UAAUmM,aAAe,SAASA,aAAc3H,EAAQsF,GAG7D,OAFAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QACpCkB,EAAQ+E,KAAK1I,KAAMgJ,GAAQ,EAAM,GAAI,EAC9C,EAEAlF,OAAOU,UAAUoM,aAAe,SAASA,aAAc5H,EAAQsF,GAG7D,OAFAtF,KAAoB,EACfsF,GAAUV,YAAY5E,EAAQ,EAAGhJ,KAAKyC,QACpCkB,EAAQ+E,KAAK1I,KAAMgJ,GAAQ,EAAO,GAAI,EAC/C,EAQAlF,OAAOU,UAAUqM,YACjB/M,OAAOU,UAAUsM,YAAc,SAASA,YAAahM,EAAOkE,EAAQzH,EAAY+M,GAI9E,GAHAxJ,GAASA,EACTkE,KAAoB,EACpBzH,KAA4B,GACvB+M,EAAU,CAEbR,SAAS9N,KAAM8E,EAAOkE,EAAQzH,EADb4I,KAAK6F,IAAI,EAAG,EAAIzO,GAAc,EACK,EACtD,CAEA,IAAIqN,EAAM,EACN7M,EAAI,EAER,IADA/B,KAAKgJ,GAAkB,IAARlE,IACN/C,EAAIR,IAAeqN,GAAO,MACjC5O,KAAKgJ,EAASjH,GAAM+C,EAAQ8J,EAAO,IAGrC,OAAO5F,EAASzH,CAClB,EAEAuC,OAAOU,UAAUuM,YACjBjN,OAAOU,UAAUwM,YAAc,SAASA,YAAalM,EAAOkE,EAAQzH,EAAY+M,GAI9E,GAHAxJ,GAASA,EACTkE,KAAoB,EACpBzH,KAA4B,GACvB+M,EAAU,CAEbR,SAAS9N,KAAM8E,EAAOkE,EAAQzH,EADb4I,KAAK6F,IAAI,EAAG,EAAIzO,GAAc,EACK,EACtD,CAEA,IAAIQ,EAAIR,EAAa,EACjBqN,EAAM,EAEV,IADA5O,KAAKgJ,EAASjH,GAAa,IAAR+C,IACV/C,GAAK,IAAM6M,GAAO,MACzB5O,KAAKgJ,EAASjH,GAAM+C,EAAQ8J,EAAO,IAGrC,OAAO5F,EAASzH,CAClB,EAEAuC,OAAOU,UAAUyM,WACjBnN,OAAOU,UAAU0M,WAAa,SAASA,WAAYpM,EAAOkE,EAAQsF,GAKhE,OAJAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,IAAM,GACtDhJ,KAAKgJ,GAAmB,IAARlE,EACTkE,EAAS,CAClB,EAEAlF,OAAOU,UAAU2M,cACjBrN,OAAOU,UAAU4M,cAAgB,SAASA,cAAetM,EAAOkE,EAAQsF,GAMtE,OALAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,MAAQ,GACxDhJ,KAAKgJ,GAAmB,IAARlE,EAChB9E,KAAKgJ,EAAS,GAAMlE,IAAU,EACvBkE,EAAS,CAClB,EAEAlF,OAAOU,UAAU6M,cACjBvN,OAAOU,UAAU8M,cAAgB,SAASA,cAAexM,EAAOkE,EAAQsF,GAMtE,OALAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,MAAQ,GACxDhJ,KAAKgJ,GAAWlE,IAAU,EAC1B9E,KAAKgJ,EAAS,GAAc,IAARlE,EACbkE,EAAS,CAClB,EAEAlF,OAAOU,UAAU+M,cACjBzN,OAAOU,UAAUgN,cAAgB,SAASA,cAAe1M,EAAOkE,EAAQsF,GAQtE,OAPAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,WAAY,GAC5DhJ,KAAKgJ,EAAS,GAAMlE,IAAU,GAC9B9E,KAAKgJ,EAAS,GAAMlE,IAAU,GAC9B9E,KAAKgJ,EAAS,GAAMlE,IAAU,EAC9B9E,KAAKgJ,GAAmB,IAARlE,EACTkE,EAAS,CAClB,EAEAlF,OAAOU,UAAUiN,cACjB3N,OAAOU,UAAUkN,cAAgB,SAASA,cAAe5M,EAAOkE,EAAQsF,GAQtE,OAPAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,WAAY,GAC5DhJ,KAAKgJ,GAAWlE,IAAU,GAC1B9E,KAAKgJ,EAAS,GAAMlE,IAAU,GAC9B9E,KAAKgJ,EAAS,GAAMlE,IAAU,EAC9B9E,KAAKgJ,EAAS,GAAc,IAARlE,EACbkE,EAAS,CAClB,EA8CAlF,OAAOU,UAAUmN,iBAAmBlC,oBAAmB,SAASkC,iBAAkB7M,EAAOkE,EAAS,GAChG,OAAO+E,eAAe/N,KAAM8E,EAAOkE,EAAQiF,OAAO,GAAIA,OAAO,sBAC/D,IAEAnK,OAAOU,UAAUoN,iBAAmBnC,oBAAmB,SAASmC,iBAAkB9M,EAAOkE,EAAS,GAChG,OAAOkF,eAAelO,KAAM8E,EAAOkE,EAAQiF,OAAO,GAAIA,OAAO,sBAC/D,IAEAnK,OAAOU,UAAUqN,WAAa,SAASA,WAAY/M,EAAOkE,EAAQzH,EAAY+M,GAG5E,GAFAxJ,GAASA,EACTkE,KAAoB,GACfsF,EAAU,CACb,MAAMwD,EAAQ3H,KAAK6F,IAAI,EAAI,EAAIzO,EAAc,GAE7CuM,SAAS9N,KAAM8E,EAAOkE,EAAQzH,EAAYuQ,EAAQ,GAAIA,EACxD,CAEA,IAAI/P,EAAI,EACJ6M,EAAM,EACNmD,EAAM,EAEV,IADA/R,KAAKgJ,GAAkB,IAARlE,IACN/C,EAAIR,IAAeqN,GAAO,MAC7B9J,EAAQ,GAAa,IAARiN,GAAsC,IAAzB/R,KAAKgJ,EAASjH,EAAI,KAC9CgQ,EAAM,GAER/R,KAAKgJ,EAASjH,IAAO+C,EAAQ8J,GAAQ,GAAKmD,EAAM,IAGlD,OAAO/I,EAASzH,CAClB,EAEAuC,OAAOU,UAAUwN,WAAa,SAASA,WAAYlN,EAAOkE,EAAQzH,EAAY+M,GAG5E,GAFAxJ,GAASA,EACTkE,KAAoB,GACfsF,EAAU,CACb,MAAMwD,EAAQ3H,KAAK6F,IAAI,EAAI,EAAIzO,EAAc,GAE7CuM,SAAS9N,KAAM8E,EAAOkE,EAAQzH,EAAYuQ,EAAQ,GAAIA,EACxD,CAEA,IAAI/P,EAAIR,EAAa,EACjBqN,EAAM,EACNmD,EAAM,EAEV,IADA/R,KAAKgJ,EAASjH,GAAa,IAAR+C,IACV/C,GAAK,IAAM6M,GAAO,MACrB9J,EAAQ,GAAa,IAARiN,GAAsC,IAAzB/R,KAAKgJ,EAASjH,EAAI,KAC9CgQ,EAAM,GAER/R,KAAKgJ,EAASjH,IAAO+C,EAAQ8J,GAAQ,GAAKmD,EAAM,IAGlD,OAAO/I,EAASzH,CAClB,EAEAuC,OAAOU,UAAUyN,UAAY,SAASA,UAAWnN,EAAOkE,EAAQsF,GAM9D,OALAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,KAAO,KACnDlE,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtC9E,KAAKgJ,GAAmB,IAARlE,EACTkE,EAAS,CAClB,EAEAlF,OAAOU,UAAU0N,aAAe,SAASA,aAAcpN,EAAOkE,EAAQsF,GAMpE,OALAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,OAAS,OACzDhJ,KAAKgJ,GAAmB,IAARlE,EAChB9E,KAAKgJ,EAAS,GAAMlE,IAAU,EACvBkE,EAAS,CAClB,EAEAlF,OAAOU,UAAU2N,aAAe,SAASA,aAAcrN,EAAOkE,EAAQsF,GAMpE,OALAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,OAAS,OACzDhJ,KAAKgJ,GAAWlE,IAAU,EAC1B9E,KAAKgJ,EAAS,GAAc,IAARlE,EACbkE,EAAS,CAClB,EAEAlF,OAAOU,UAAU4N,aAAe,SAASA,aAActN,EAAOkE,EAAQsF,GAQpE,OAPAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,YAAa,YAC7DhJ,KAAKgJ,GAAmB,IAARlE,EAChB9E,KAAKgJ,EAAS,GAAMlE,IAAU,EAC9B9E,KAAKgJ,EAAS,GAAMlE,IAAU,GAC9B9E,KAAKgJ,EAAS,GAAMlE,IAAU,GACvBkE,EAAS,CAClB,EAEAlF,OAAOU,UAAU6N,aAAe,SAASA,aAAcvN,EAAOkE,EAAQsF,GASpE,OARAxJ,GAASA,EACTkE,KAAoB,EACfsF,GAAUR,SAAS9N,KAAM8E,EAAOkE,EAAQ,EAAG,YAAa,YACzDlE,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C9E,KAAKgJ,GAAWlE,IAAU,GAC1B9E,KAAKgJ,EAAS,GAAMlE,IAAU,GAC9B9E,KAAKgJ,EAAS,GAAMlE,IAAU,EAC9B9E,KAAKgJ,EAAS,GAAc,IAARlE,EACbkE,EAAS,CAClB,EAEAlF,OAAOU,UAAU8N,gBAAkB7C,oBAAmB,SAAS6C,gBAAiBxN,EAAOkE,EAAS,GAC9F,OAAO+E,eAAe/N,KAAM8E,EAAOkE,GAASiF,OAAO,sBAAuBA,OAAO,sBACnF,IAEAnK,OAAOU,UAAU+N,gBAAkB9C,oBAAmB,SAAS8C,gBAAiBzN,EAAOkE,EAAS,GAC9F,OAAOkF,eAAelO,KAAM8E,EAAOkE,GAASiF,OAAO,sBAAuBA,OAAO,sBACnF,IAiBAnK,OAAOU,UAAUgO,aAAe,SAASA,aAAc1N,EAAOkE,EAAQsF,GACpE,OAAOF,WAAWpO,KAAM8E,EAAOkE,GAAQ,EAAMsF,EAC/C,EAEAxK,OAAOU,UAAUiO,aAAe,SAASA,aAAc3N,EAAOkE,EAAQsF,GACpE,OAAOF,WAAWpO,KAAM8E,EAAOkE,GAAQ,EAAOsF,EAChD,EAYAxK,OAAOU,UAAUkO,cAAgB,SAASA,cAAe5N,EAAOkE,EAAQsF,GACtE,OAAOC,YAAYvO,KAAM8E,EAAOkE,GAAQ,EAAMsF,EAChD,EAEAxK,OAAOU,UAAUmO,cAAgB,SAASA,cAAe7N,EAAOkE,EAAQsF,GACtE,OAAOC,YAAYvO,KAAM8E,EAAOkE,GAAQ,EAAOsF,EACjD,EAGAxK,OAAOU,UAAUmB,KAAO,SAASA,KAAMoH,EAAQ6F,EAAatP,EAAOC,GACjE,IAAKO,OAAOuC,SAAS0G,GAAS,MAAM,IAAIpI,UAAU,+BAQlD,GAPKrB,IAAOA,EAAQ,GACfC,GAAe,IAARA,IAAWA,EAAMvD,KAAKyC,QAC9BmQ,GAAe7F,EAAOtK,SAAQmQ,EAAc7F,EAAOtK,QAClDmQ,IAAaA,EAAc,GAC5BrP,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAG9BC,IAAQD,EAAO,OAAO,EAC1B,GAAsB,IAAlByJ,EAAOtK,QAAgC,IAAhBzC,KAAKyC,OAAc,OAAO,EAGrD,GAAImQ,EAAc,EAChB,MAAM,IAAIxO,WAAW,6BAEvB,GAAId,EAAQ,GAAKA,GAAStD,KAAKyC,OAAQ,MAAM,IAAI2B,WAAW,sBAC5D,GAAIb,EAAM,EAAG,MAAM,IAAIa,WAAW,2BAG9Bb,EAAMvD,KAAKyC,SAAQc,EAAMvD,KAAKyC,QAC9BsK,EAAOtK,OAASmQ,EAAcrP,EAAMD,IACtCC,EAAMwJ,EAAOtK,OAASmQ,EAActP,GAGtC,MAAMlB,EAAMmB,EAAMD,EAalB,OAXItD,OAAS+M,GAAqD,mBAApC7J,WAAWsB,UAAUqO,WAEjD7S,KAAK6S,WAAWD,EAAatP,EAAOC,GAEpCL,WAAWsB,UAAU+H,IAAIlE,KACvB0E,EACA/M,KAAKyO,SAASnL,EAAOC,GACrBqP,GAIGxQ,CACT,EAMA0B,OAAOU,UAAUqH,KAAO,SAASA,KAAM3D,EAAK5E,EAAOC,EAAK0B,GAEtD,GAAmB,iBAARiD,EAAkB,CAS3B,GARqB,iBAAV5E,GACT2B,EAAW3B,EACXA,EAAQ,EACRC,EAAMvD,KAAKyC,QACa,iBAARc,IAChB0B,EAAW1B,EACXA,EAAMvD,KAAKyC,aAEI8D,IAAbtB,GAA8C,iBAAbA,EACnC,MAAM,IAAIN,UAAU,6BAEtB,GAAwB,iBAAbM,IAA0BnB,OAAOoB,WAAWD,GACrD,MAAM,IAAIN,UAAU,qBAAuBM,GAE7C,GAAmB,IAAfiD,EAAIzF,OAAc,CACpB,MAAMW,EAAO8E,EAAI5F,WAAW,IACV,SAAb2C,GAAuB7B,EAAO,KAClB,WAAb6B,KAEFiD,EAAM9E,EAEV,CACF,KAA0B,iBAAR8E,EAChBA,GAAY,IACY,kBAARA,IAChBA,EAAMe,OAAOf,IAIf,GAAI5E,EAAQ,GAAKtD,KAAKyC,OAASa,GAAStD,KAAKyC,OAASc,EACpD,MAAM,IAAIa,WAAW,sBAGvB,GAAIb,GAAOD,EACT,OAAOtD,KAQT,IAAI+B,EACJ,GANAuB,KAAkB,EAClBC,OAAcgD,IAARhD,EAAoBvD,KAAKyC,OAASc,IAAQ,EAE3C2E,IAAKA,EAAM,GAGG,iBAARA,EACT,IAAKnG,EAAIuB,EAAOvB,EAAIwB,IAAOxB,EACzB/B,KAAK+B,GAAKmG,MAEP,CACL,MAAMyF,EAAQ7J,OAAOuC,SAAS6B,GAC1BA,EACApE,OAAOe,KAAKqD,EAAKjD,GACf7C,EAAMuL,EAAMlL,OAClB,GAAY,IAARL,EACF,MAAM,IAAIuC,UAAU,cAAgBuD,EAClC,qCAEJ,IAAKnG,EAAI,EAAGA,EAAIwB,EAAMD,IAASvB,EAC7B/B,KAAK+B,EAAIuB,GAASqK,EAAM5L,EAAIK,EAEhC,CAEA,OAAOpC,IACT,EAMA,MAAM8S,EAAS,CAAC,EAChB,SAASC,EAAGC,EAAKC,EAAYC,GAC3BJ,EAAOE,GAAO,MAAMG,kBAAkBD,EACpC,WAAAE,GACEC,QAEA/O,OAAOmH,eAAezL,KAAM,UAAW,CACrC8E,MAAOmO,EAAWjI,MAAMhL,KAAMkH,WAC9BoM,UAAU,EACVC,cAAc,IAIhBvT,KAAKwT,KAAO,GAAGxT,KAAKwT,SAASR,KAG7BhT,KAAKyT,aAEEzT,KAAKwT,IACd,CAEA,QAAIpQ,GACF,OAAO4P,CACT,CAEA,QAAI5P,CAAM0B,GACRR,OAAOmH,eAAezL,KAAM,OAAQ,CAClCuT,cAAc,EACd7H,YAAY,EACZ5G,QACAwO,UAAU,GAEd,CAEA,QAAAtM,GACE,MAAO,GAAGhH,KAAKwT,SAASR,OAAShT,KAAK0T,SACxC,EAEJ,CA+BA,SAASC,sBAAuBzL,GAC9B,IAAImC,EAAM,GACNtI,EAAImG,EAAIzF,OACZ,MAAMa,EAAmB,MAAX4E,EAAI,GAAa,EAAI,EACnC,KAAOnG,GAAKuB,EAAQ,EAAGvB,GAAK,EAC1BsI,EAAM,IAAInC,EAAI7C,MAAMtD,EAAI,EAAGA,KAAKsI,IAElC,MAAO,GAAGnC,EAAI7C,MAAM,EAAGtD,KAAKsI,GAC9B,CAYA,SAAS2D,WAAYlJ,EAAOsF,EAAK0C,EAAKzI,EAAK2E,EAAQzH,GACjD,GAAIuD,EAAQgI,GAAOhI,EAAQsF,EAAK,CAC9B,MAAMrC,EAAmB,iBAARqC,EAAmB,IAAM,GAC1C,IAAIwJ,EAWJ,MARIA,EAFArS,EAAa,EACH,IAAR6I,GAAaA,IAAQ6D,OAAO,GACtB,OAAOlG,YAAYA,QAA2B,GAAlBxG,EAAa,KAASwG,IAElD,SAASA,QAA2B,GAAlBxG,EAAa,GAAS,IAAIwG,iBACtB,GAAlBxG,EAAa,GAAS,IAAIwG,IAGhC,MAAMqC,IAAMrC,YAAY+E,IAAM/E,IAElC,IAAI+K,EAAOe,iBAAiB,QAASD,EAAO9O,EACpD,EAtBF,SAASgP,YAAazP,EAAK2E,EAAQzH,GACjCmO,eAAe1G,EAAQ,eACHzC,IAAhBlC,EAAI2E,SAAsDzC,IAA7BlC,EAAI2E,EAASzH,IAC5CsO,YAAY7G,EAAQ3E,EAAI5B,QAAUlB,EAAa,GAEnD,CAkBEuS,CAAYzP,EAAK2E,EAAQzH,EAC3B,CAEA,SAASmO,eAAgB5K,EAAO0O,GAC9B,GAAqB,iBAAV1O,EACT,MAAM,IAAIgO,EAAOiB,qBAAqBP,EAAM,SAAU1O,EAE1D,CAEA,SAAS+K,YAAa/K,EAAOrC,EAAQgE,GACnC,GAAI0D,KAAK6J,MAAMlP,KAAWA,EAExB,MADA4K,eAAe5K,EAAO2B,GAChB,IAAIqM,EAAOe,iBAAiBpN,GAAQ,SAAU,aAAc3B,GAGpE,GAAIrC,EAAS,EACX,MAAM,IAAIqQ,EAAOmB,yBAGnB,MAAM,IAAInB,EAAOe,iBAAiBpN,GAAQ,SACR,MAAMA,EAAO,EAAI,YAAYhE,IAC7BqC,EACpC,CAvFAiO,EAAE,4BACA,SAAUS,GACR,OAAIA,EACK,GAAGA,gCAGL,gDACT,GAAGpP,YACL2O,EAAE,wBACA,SAAUS,EAAMrO,GACd,MAAO,QAAQqO,4DAA+DrO,GAChF,GAAGR,WACLoO,EAAE,oBACA,SAAUpS,EAAKiT,EAAOM,GACpB,IAAIC,EAAM,iBAAiBxT,sBACvByT,EAAWF,EAWf,OAVIjL,OAAOoL,UAAUH,IAAU/J,KAAKmK,IAAIJ,GAAS,GAAK,GACpDE,EAAWT,sBAAsB5S,OAAOmT,IACd,iBAAVA,IAChBE,EAAWrT,OAAOmT,IACdA,EAAQjG,OAAO,IAAMA,OAAO,KAAOiG,IAAUjG,OAAO,IAAMA,OAAO,QACnEmG,EAAWT,sBAAsBS,IAEnCA,GAAY,KAEdD,GAAO,eAAeP,eAAmBQ,IAClCD,CACT,GAAG/P,YAiEL,MAAMmQ,EAAoB,oBAgB1B,SAASnN,YAAapC,EAAQ+E,GAE5B,IAAIQ,EADJR,EAAQA,GAASyK,IAEjB,MAAM/R,EAASuC,EAAOvC,OACtB,IAAIgS,EAAgB,KACpB,MAAM9G,EAAQ,GAEd,IAAK,IAAI5L,EAAI,EAAGA,EAAIU,IAAUV,EAAG,CAI/B,GAHAwI,EAAYvF,EAAO1C,WAAWP,GAG1BwI,EAAY,OAAUA,EAAY,MAAQ,CAE5C,IAAKkK,EAAe,CAElB,GAAIlK,EAAY,MAAQ,EAEjBR,GAAS,IAAM,GAAG4D,EAAM7K,KAAK,IAAM,IAAM,KAC9C,QACF,CAAO,GAAIf,EAAI,IAAMU,EAAQ,EAEtBsH,GAAS,IAAM,GAAG4D,EAAM7K,KAAK,IAAM,IAAM,KAC9C,QACF,CAGA2R,EAAgBlK,EAEhB,QACF,CAGA,GAAIA,EAAY,MAAQ,EACjBR,GAAS,IAAM,GAAG4D,EAAM7K,KAAK,IAAM,IAAM,KAC9C2R,EAAgBlK,EAChB,QACF,CAGAA,EAAkE,OAArDkK,EAAgB,OAAU,GAAKlK,EAAY,MAC1D,MAAWkK,IAEJ1K,GAAS,IAAM,GAAG4D,EAAM7K,KAAK,IAAM,IAAM,KAMhD,GAHA2R,EAAgB,KAGZlK,EAAY,IAAM,CACpB,IAAKR,GAAS,GAAK,EAAG,MACtB4D,EAAM7K,KAAKyH,EACb,MAAO,GAAIA,EAAY,KAAO,CAC5B,IAAKR,GAAS,GAAK,EAAG,MACtB4D,EAAM7K,KACJyH,GAAa,EAAM,IACP,GAAZA,EAAmB,IAEvB,MAAO,GAAIA,EAAY,MAAS,CAC9B,IAAKR,GAAS,GAAK,EAAG,MACtB4D,EAAM7K,KACJyH,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,IAEvB,KAAO,MAAIA,EAAY,SASrB,MAAM,IAAIlH,MAAM,sBARhB,IAAK0G,GAAS,GAAK,EAAG,MACtB4D,EAAM7K,KACJyH,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,IAIvB,CACF,CAEA,OAAOoD,CACT,CA2BA,SAAStG,cAAe1G,GACtB,OAAO+C,EAAO7B,YAxHhB,SAAS6S,YAAa/T,GAMpB,IAFAA,GAFAA,EAAMA,EAAIgU,MAAM,KAAK,IAEX1T,OAAOL,QAAQ2T,EAAmB,KAEpC9R,OAAS,EAAG,MAAO,GAE3B,KAAO9B,EAAI8B,OAAS,GAAM,GACxB9B,GAAY,IAEd,OAAOA,CACT,CA4G4B+T,CAAY/T,GACxC,CAEA,SAAS6I,WAAYoL,EAAKC,EAAK7L,EAAQvG,GACrC,IAAIV,EACJ,IAAKA,EAAI,EAAGA,EAAIU,KACTV,EAAIiH,GAAU6L,EAAIpS,QAAYV,GAAK6S,EAAInS,UADpBV,EAExB8S,EAAI9S,EAAIiH,GAAU4L,EAAI7S,GAExB,OAAOA,CACT,CAKA,SAAS2D,WAAYU,EAAKK,GACxB,OAAOL,aAAeK,GACZ,MAAPL,GAAkC,MAAnBA,EAAIgN,aAA+C,MAAxBhN,EAAIgN,YAAYI,MACzDpN,EAAIgN,YAAYI,OAAS/M,EAAK+M,IACpC,CACA,SAAShN,YAAaJ,GAEpB,OAAOA,GAAQA,CACjB,CAIA,MAAMsH,EAAsB,WAC1B,MAAMoH,EAAW,mBACXC,EAAQ,IAAI5R,MAAM,KACxB,IAAK,IAAIpB,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,MAAMiT,EAAU,GAAJjT,EACZ,IAAK,IAAI+G,EAAI,EAAGA,EAAI,KAAMA,EACxBiM,EAAMC,EAAMlM,GAAKgM,EAAS/S,GAAK+S,EAAShM,EAE5C,CACA,OAAOiM,CACR,CAV2B,GAa5B,SAAStF,mBAAoBwF,GAC3B,MAAyB,oBAAXhH,OAAyBiH,uBAAyBD,CAClE,CAEA,SAASC,yBACP,MAAM,IAAI7R,MAAM,uBAClB,gCCvjEA,IAAI8R,EAAe,EAAQ,OAEvBC,EAAW,EAAQ,OAEnBC,EAAWD,EAASD,EAAa,6BAErCtV,EAAOD,QAAU,SAAS0V,mBAAmB9B,EAAM+B,GAClD,IAAIC,EAAYL,EAAa3B,IAAQ+B,GACrC,MAAyB,mBAAdC,GAA4BH,EAAS7B,EAAM,gBAAkB,EAChE4B,EAASI,GAEVA,CACR,gCCZA,IAAIC,EAAO,EAAQ,OACfN,EAAe,EAAQ,OAEvBO,EAASP,EAAa,8BACtBQ,EAAQR,EAAa,6BACrBS,EAAgBT,EAAa,mBAAmB,IAASM,EAAKpN,KAAKsN,EAAOD,GAE1EG,EAAQV,EAAa,qCAAqC,GAC1DW,EAAkBX,EAAa,2BAA2B,GAC1DY,EAAOZ,EAAa,cAExB,GAAIW,EACH,IACCA,EAAgB,CAAC,EAAG,IAAK,CAAEhR,MAAO,GACnC,CAAE,MAAOwG,GAERwK,EAAkB,IACnB,CAGDjW,EAAOD,QAAU,SAASwV,SAASY,GAClC,IAAIC,EAAOL,EAAcH,EAAME,EAAOzO,WAClC2O,GAASC,IACDD,EAAMI,EAAM,UACd1C,cAERuC,EACCG,EACA,SACA,CAAEnR,MAAO,EAAIiR,EAAK,EAAGC,EAAiBvT,QAAUyE,UAAUzE,OAAS,OAItE,OAAOwT,CACR,EAEA,IAAIC,EAAY,SAASA,YACxB,OAAON,EAAcH,EAAMC,EAAQxO,UACpC,EAEI4O,EACHA,EAAgBjW,EAAOD,QAAS,QAAS,CAAEkF,MAAOoR,IAElDrW,EAAOD,QAAQoL,MAAQkL,iBC7CxB,OAOC,WACA,aAEA,IAAIC,EAAS,CAAC,EAAEC,eAGhB,SAASC,aAGR,IAFA,IAAIC,EAAU,GAELvU,EAAI,EAAGA,EAAImF,UAAUzE,OAAQV,IAAK,CAC1C,IAAI0C,EAAMyC,UAAUnF,GACpB,GAAK0C,EAAL,CAEA,IAAI8R,SAAiB9R,EAErB,GAAgB,WAAZ8R,GAAoC,WAAZA,EAC3BD,EAAQxT,KAAK2B,QACP,GAAItB,MAAMuD,QAAQjC,IACxB,GAAIA,EAAIhC,OAAQ,CACf,IAAI+T,EAAQH,WAAWrL,MAAM,KAAMvG,GAC/B+R,GACHF,EAAQxT,KAAK0T,EAEf,OACM,GAAgB,WAAZD,EAAsB,CAChC,GAAI9R,EAAIuC,WAAa1C,OAAOE,UAAUwC,WAAavC,EAAIuC,SAASA,WAAWoG,SAAS,iBAAkB,CACrGkJ,EAAQxT,KAAK2B,EAAIuC,YACjB,QACD,CAEA,IAAK,IAAIyP,KAAOhS,EACX0R,EAAO9N,KAAK5D,EAAKgS,IAAQhS,EAAIgS,IAChCH,EAAQxT,KAAK2T,EAGhB,CAxBkB,CAyBnB,CAEA,OAAOH,EAAQrT,KAAK,IACrB,CAEqCpD,EAAOD,SAC3CyW,WAAWK,QAAUL,WACrBxW,EAAOD,QAAUyW,iBAKhB,KAFwB,EAAF,WACtB,OAAOA,UACP,UAFoB,OAEpB,YAIH,CApDA,+BCOAzW,EAAQ+W,MAgCR,SAASA,MAAMhW,EAAKiW,GAClB,GAAmB,iBAARjW,EACT,MAAM,IAAIgE,UAAU,iCAGtB,IAAIyB,EAAM,CAAC,EAEPtF,GADM8V,GAAW,CAAC,GACRC,QAAUA,OAEpBC,EAAQ,EACZ,KAAOA,EAAQnW,EAAI8B,QAAQ,CACzB,IAAIsU,EAAQpW,EAAIQ,QAAQ,IAAK2V,GAG7B,IAAe,IAAXC,EACF,MAGF,IAAIC,EAASrW,EAAIQ,QAAQ,IAAK2V,GAE9B,IAAgB,IAAZE,EACFA,EAASrW,EAAI8B,YACR,GAAIuU,EAASD,EAAO,CAEzBD,EAAQnW,EAAI2H,YAAY,IAAKyO,EAAQ,GAAK,EAC1C,QACF,CAEA,IAAIN,EAAM9V,EAAI0E,MAAMyR,EAAOC,GAAO9V,OAGlC,QAAIsF,IAAcH,EAAIqQ,GAAM,CAC1B,IAAIvO,EAAMvH,EAAI0E,MAAM0R,EAAQ,EAAGC,GAAQ/V,OAGb,KAAtBiH,EAAI5F,WAAW,KACjB4F,EAAMA,EAAI7C,MAAM,GAAI,IAGtBe,EAAIqQ,GAAOQ,UAAU/O,EAAKpH,EAC5B,CAEAgW,EAAQE,EAAS,CACnB,CAEA,OAAO5Q,CACT,EA7EAxG,EAAQsX,UA+FR,SAASA,UAAU1D,EAAMtL,EAAK0O,GAC5B,IAAIO,EAAMP,GAAW,CAAC,EAClBQ,EAAMD,EAAIE,QAAUA,OAExB,GAAmB,mBAARD,EACT,MAAM,IAAIzS,UAAU,4BAGtB,IAAK2S,EAAmBhW,KAAKkS,GAC3B,MAAM,IAAI7O,UAAU,4BAGtB,IAAIG,EAAQsS,EAAIlP,GAEhB,GAAIpD,IAAUwS,EAAmBhW,KAAKwD,GACpC,MAAM,IAAIH,UAAU,2BAGtB,IAAIhE,EAAM6S,EAAO,IAAM1O,EAEvB,GAAI,MAAQqS,EAAII,OAAQ,CACtB,IAAIA,EAASJ,EAAII,OAAS,EAE1B,GAAIC,MAAMD,KAAYlK,SAASkK,GAC7B,MAAM,IAAI5S,UAAU,4BAGtBhE,GAAO,aAAewJ,KAAK6J,MAAMuD,EACnC,CAEA,GAAIJ,EAAIM,OAAQ,CACd,IAAKH,EAAmBhW,KAAK6V,EAAIM,QAC/B,MAAM,IAAI9S,UAAU,4BAGtBhE,GAAO,YAAcwW,EAAIM,MAC3B,CAEA,GAAIN,EAAIO,KAAM,CACZ,IAAKJ,EAAmBhW,KAAK6V,EAAIO,MAC/B,MAAM,IAAI/S,UAAU,0BAGtBhE,GAAO,UAAYwW,EAAIO,IACzB,CAEA,GAAIP,EAAIQ,QAAS,CACf,IAAIA,EAAUR,EAAIQ,QAElB,IA2FJ,SAASC,OAAQ1P,GACf,MAAgC,kBAAzB2P,EAAWxP,KAAKH,IACrBA,aAAe4P,IACnB,CA9FSF,CAAOD,IAAYH,MAAMG,EAAQ1R,WACpC,MAAM,IAAItB,UAAU,6BAGtBhE,GAAO,aAAegX,EAAQI,aAChC,CAEIZ,EAAIa,WACNrX,GAAO,cAGLwW,EAAIc,SACNtX,GAAO,YAGT,GAAIwW,EAAIe,SAAU,CAKhB,OAJuC,iBAAjBf,EAAIe,SACtBf,EAAIe,SAAS5Q,cACb6P,EAAIe,UAGN,IAAK,MACHvX,GAAO,iBACP,MACF,IAAK,SACHA,GAAO,oBACP,MACF,IAAK,OACHA,GAAO,kBACP,MACF,QACE,MAAM,IAAIgE,UAAU,8BAE1B,CAEA,GAAIwS,EAAIgB,SAAU,CAIhB,OAHuC,iBAAjBhB,EAAIgB,SACtBhB,EAAIgB,SAAS7Q,cAAgB6P,EAAIgB,UAGnC,KAAK,EACHxX,GAAO,oBACP,MACF,IAAK,MACHA,GAAO,iBACP,MACF,IAAK,SACHA,GAAO,oBACP,MACF,IAAK,OACHA,GAAO,kBACP,MACF,QACE,MAAM,IAAIgE,UAAU,8BAE1B,CAEA,OAAOhE,CACT,EAnMA,IAAIkX,EAAavT,OAAOE,UAAUwC,SAU9BsQ,EAAqB,wCAkMzB,SAAST,OAAQlW,GACf,OAA6B,IAAtBA,EAAIQ,QAAQ,KACfiX,mBAAmBzX,GACnBA,CACN,CASA,SAAS0W,OAAQnP,GACf,OAAOmQ,mBAAmBnQ,EAC5B,CAsBA,SAAS+O,UAAUtW,EAAKkW,GACtB,IACE,OAAOA,EAAOlW,EAChB,CAAE,MAAO2K,GACP,OAAO3K,CACT,CACF,gCC3QA,IAAI2X,EAAkB,EAAQ,OAE1BC,EAA4B,CAC9B,aAAc,OACd,YAAa,MACb,QAAW,QA2Gb1Y,EAAOD,QAjGP,SAAS+F,KAAK6S,EAAM5B,GAClB,IAAI6B,EACF/E,EACAgF,EACA9E,EACA+E,EACAC,EACAC,GAAU,EACPjC,IACHA,EAAU,CAAC,GAEb6B,EAAQ7B,EAAQ6B,QAAS,EACzB,IAkDE,GAjDAC,EAAmBJ,IAEnB1E,EAAQkF,SAASC,cACjBJ,EAAYG,SAASE,gBAErBJ,EAAOE,SAASG,cAAc,SACzBC,YAAcV,EAEnBI,EAAKO,WAAa,OAElBP,EAAKQ,MAAMC,IAAM,QAEjBT,EAAKQ,MAAME,SAAW,QACtBV,EAAKQ,MAAMG,IAAM,EACjBX,EAAKQ,MAAMI,KAAO,mBAElBZ,EAAKQ,MAAMK,WAAa,MAExBb,EAAKQ,MAAMM,iBAAmB,OAC9Bd,EAAKQ,MAAMO,cAAgB,OAC3Bf,EAAKQ,MAAMQ,aAAe,OAC1BhB,EAAKQ,MAAMS,WAAa,OACxBjB,EAAKkB,iBAAiB,QAAQ,SAASxO,GAErC,GADAA,EAAEyO,kBACEnD,EAAQoD,OAEV,GADA1O,EAAE2O,sBAC6B,IAApB3O,EAAE4O,cAA+B,CAC1CzB,GAASlN,QAAQ4O,KAAK,iCACtB1B,GAASlN,QAAQ4O,KAAK,4BACtBC,OAAOF,cAAcG,YACrB,IAAIL,EAASzB,EAA0B3B,EAAQoD,SAAWzB,EAAmC,QAC7F6B,OAAOF,cAAcI,QAAQN,EAAQxB,EACvC,MACElN,EAAE4O,cAAcG,YAChB/O,EAAE4O,cAAcI,QAAQ1D,EAAQoD,OAAQxB,GAGxC5B,EAAQ2D,SACVjP,EAAE2O,iBACFrD,EAAQ2D,OAAOjP,EAAE4O,eAErB,IAEApB,SAAS0B,KAAKC,YAAY7B,GAE1BhF,EAAM8G,mBAAmB9B,GACzBD,EAAUgC,SAAS/G,IAEFkF,SAAS8B,YAAY,QAEpC,MAAM,IAAIvX,MAAM,iCAElBwV,GAAU,CACZ,CAAE,MAAOgC,GACPpC,GAASlN,QAAQC,MAAM,qCAAsCqP,GAC7DpC,GAASlN,QAAQ4O,KAAK,4BACtB,IACEC,OAAOF,cAAcI,QAAQ1D,EAAQoD,QAAU,OAAQxB,GACvD5B,EAAQ2D,QAAU3D,EAAQ2D,OAAOH,OAAOF,eACxCrB,GAAU,CACZ,CAAE,MAAOgC,GACPpC,GAASlN,QAAQC,MAAM,uCAAwCqP,GAC/DpC,GAASlN,QAAQC,MAAM,0BACvBkI,EAjFN,SAASsG,OAAOtG,GACd,IAAIoH,GAAW,YAAYxZ,KAAKyZ,UAAUC,WAAa,IAAM,QAAU,KACvE,OAAOtH,EAAQ9S,QAAQ,gBAAiBka,EAC1C,CA8EgBd,CAAO,YAAapD,EAAUA,EAAQlD,QAnFjC,oCAoFf0G,OAAOa,OAAOvH,EAAS8E,EACzB,CACF,CAAE,QACIG,IACkC,mBAAzBA,EAAUuC,YACnBvC,EAAUuC,YAAYtH,GAEtB+E,EAAUwC,mBAIVvC,GACFE,SAAS0B,KAAKY,YAAYxC,GAE5BF,GACF,CAEA,OAAOG,CACT,mBChHA,IAAIwC,EAAS,EAAQ,OAErBxb,EAAOD,QAAUyb,mBCFjB,IAAIA,EAAS,EAAQ,OAErBxb,EAAOD,QAAUyb,mBCFjB,IAAIA,EAAS,EAAQ,OAErBxb,EAAOD,QAAUyb,mBCFjB,EAAQ,OACR,EAAQ,OACR,EAAQ,OACR,EAAQ,OACR,EAAQ,OACR,IAAI3D,EAAO,EAAQ,OAEnB7X,EAAOD,QAAU8X,EAAK4D,gCCPtB,EAAQ,OACR,IAAIC,EAAe,EAAQ,OAE3B1b,EAAOD,QAAU2b,EAAa,YAAY9F,sBCH1C,IAAI+F,EAAgB,EAAQ,MACxBC,EAAS,EAAQ,OAEjBC,EAAoBC,SAASnX,UAEjC3E,EAAOD,QAAU,SAAUgc,GACzB,IAAIC,EAAMD,EAAGnG,KACb,OAAOmG,IAAOF,GAAsBF,EAAcE,EAAmBE,IAAOC,IAAQH,EAAkBjG,KAAQgG,EAASI,CACzH,mBCRA,EAAQ,OACR,IAAInE,EAAO,EAAQ,OAEnB7X,EAAOD,QAAU8X,EAAKpT,OAAOwX,wBCH7Bjc,EAAOD,QAAU,EAAjB,wBCAAC,EAAOD,QAAU,EAAjB,wBCAAC,EAAOD,QAAU,EAAjB,wBCCA,EAAQ,OAER,IAAIyb,EAAS,EAAQ,OAErBxb,EAAOD,QAAUyb,mBCLjB,IAAIA,EAAS,EAAQ,OAErBxb,EAAOD,QAAUyb,mBCFjB,IAAIA,EAAS,EAAQ,OAErBxb,EAAOD,QAAUyb,mBCFjB,IAAIU,EAAa,EAAQ,OACrBC,EAAc,EAAQ,OAEtBC,EAAatX,UAGjB9E,EAAOD,QAAU,SAAUsc,GACzB,GAAIH,EAAWG,GAAW,OAAOA,EACjC,MAAMD,EAAWD,EAAYE,GAAY,qBAC3C,mBCTA,IAAIH,EAAa,EAAQ,OAErBI,EAAUpb,OACVkb,EAAatX,UAEjB9E,EAAOD,QAAU,SAAUsc,GACzB,GAAuB,iBAAZA,GAAwBH,EAAWG,GAAW,OAAOA,EAChE,MAAMD,EAAW,aAAeE,EAAQD,GAAY,kBACtD,aCRArc,EAAOD,QAAU,WAA0B,mBCA3C,IAAIwc,EAAW,EAAQ,OAEnBD,EAAUpb,OACVkb,EAAatX,UAGjB9E,EAAOD,QAAU,SAAUsc,GACzB,GAAIE,EAASF,GAAW,OAAOA,EAC/B,MAAMD,EAAWE,EAAQD,GAAY,oBACvC,mBCTA,IAAIG,EAAkB,EAAQ,OAC1BC,EAAkB,EAAQ,OAC1BC,EAAoB,EAAQ,OAG5BC,aAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAOC,EAAIC,GAC1B,IAGI9X,EAHA+X,EAAIR,EAAgBK,GACpBja,EAAS8Z,EAAkBM,GAC3B/F,EAAQwF,EAAgBM,EAAWna,GAIvC,GAAIga,GAAeE,GAAMA,GAAI,KAAOla,EAASqU,GAG3C,IAFAhS,EAAQ+X,EAAE/F,OAEGhS,EAAO,OAAO,OAEtB,KAAMrC,EAASqU,EAAOA,IAC3B,IAAK2F,GAAe3F,KAAS+F,IAAMA,EAAE/F,KAAW6F,EAAI,OAAOF,GAAe3F,GAAS,EACnF,OAAQ2F,IAAgB,CAC5B,CACF,EAEA5c,EAAOD,QAAU,CAGfwN,SAAUoP,cAAa,GAGvBrb,QAASqb,cAAa,qBC9BxB,IAAIM,EAAc,EAAQ,OAE1Bjd,EAAOD,QAAUkd,EAAY,GAAGzX,wBCFhC,IAAIyX,EAAc,EAAQ,OAEtB9V,EAAW8V,EAAY,CAAC,EAAE9V,UAC1B+V,EAAcD,EAAY,GAAGzX,OAEjCxF,EAAOD,QAAU,SAAUgc,GACzB,OAAOmB,EAAY/V,EAAS4U,GAAK,GAAI,EACvC,kBCPA,IAAIoB,EAAwB,EAAQ,OAChCjB,EAAa,EAAQ,OACrBkB,EAAa,EAAQ,OAGrBC,EAFkB,EAAQ,MAEVC,CAAgB,eAChCC,EAAU9Y,OAGV+Y,EAAuE,aAAnDJ,EAAW,WAAc,OAAO/V,SAAW,CAAhC,IAUnCrH,EAAOD,QAAUod,EAAwBC,EAAa,SAAUrB,GAC9D,IAAIiB,EAAGS,EAAKC,EACZ,YAAchX,IAAPqV,EAAmB,YAAqB,OAAPA,EAAc,OAEO,iBAAjD0B,EAXD,SAAU1B,EAAInF,GACzB,IACE,OAAOmF,EAAGnF,EACZ,CAAE,MAAOjL,GAAqB,CAChC,CAOoBgS,CAAOX,EAAIO,EAAQxB,GAAKsB,IAA8BI,EAEpED,EAAoBJ,EAAWJ,GAEH,WAA3BU,EAASN,EAAWJ,KAAmBd,EAAWc,EAAEY,QAAU,YAAcF,CACnF,mBC5BA,IAAIpH,EAAS,EAAQ,OACjBuH,EAAU,EAAQ,OAClBC,EAAiC,EAAQ,OACzCC,EAAuB,EAAQ,OAEnC/d,EAAOD,QAAU,SAAUmN,EAAQ8Q,EAAQC,GAIzC,IAHA,IAAIC,EAAOL,EAAQG,GACfpS,EAAiBmS,EAAqBI,EACtCC,EAA2BN,EAA+BK,EACrDjc,EAAI,EAAGA,EAAIgc,EAAKtb,OAAQV,IAAK,CACpC,IAAI0U,EAAMsH,EAAKhc,GACVoU,EAAOpJ,EAAQ0J,IAAUqH,GAAc3H,EAAO2H,EAAYrH,IAC7DhL,EAAesB,EAAQ0J,EAAKwH,EAAyBJ,EAAQpH,GAEjE,CACF,mBCfA,IAAIyH,EAAQ,EAAQ,OAEpBre,EAAOD,SAAWse,GAAM,WACtB,SAASC,IAAkB,CAG3B,OAFAA,EAAE3Z,UAAU4O,YAAc,KAEnB9O,OAAO8Z,eAAe,IAAID,KAASA,EAAE3Z,SAC9C,eCLA3E,EAAOD,QAAU,SAAUkF,EAAOuZ,GAChC,MAAO,CAAEvZ,MAAOA,EAAOuZ,KAAMA,EAC/B,mBCJA,IAAIC,EAAc,EAAQ,OACtBV,EAAuB,EAAQ,OAC/BW,EAA2B,EAAQ,OAEvC1e,EAAOD,QAAU0e,EAAc,SAAUE,EAAQ/H,EAAK3R,GACpD,OAAO8Y,EAAqBI,EAAEQ,EAAQ/H,EAAK8H,EAAyB,EAAGzZ,GACzE,EAAI,SAAU0Z,EAAQ/H,EAAK3R,GAEzB,OADA0Z,EAAO/H,GAAO3R,EACP0Z,CACT,aCTA3e,EAAOD,QAAU,SAAU6e,EAAQ3Z,GACjC,MAAO,CACL4G,aAAuB,EAAT+S,GACdlL,eAAyB,EAATkL,GAChBnL,WAAqB,EAATmL,GACZ3Z,MAAOA,EAEX,mBCPA,IAAI4Z,EAA8B,EAAQ,OAE1C7e,EAAOD,QAAU,SAAUmN,EAAQ0J,EAAK3R,EAAO8R,GAG7C,OAFIA,GAAWA,EAAQlL,WAAYqB,EAAO0J,GAAO3R,EAC5C4Z,EAA4B3R,EAAQ0J,EAAK3R,GACvCiI,CACT,mBCNA,IAAI4R,EAAS,EAAQ,OAGjBlT,EAAiBnH,OAAOmH,eAE5B5L,EAAOD,QAAU,SAAU6W,EAAK3R,GAC9B,IACE2G,EAAekT,EAAQlI,EAAK,CAAE3R,MAAOA,EAAOyO,cAAc,EAAMD,UAAU,GAC5E,CAAE,MAAO9H,GACPmT,EAAOlI,GAAO3R,CAChB,CAAE,OAAOA,CACX,mBCXA,IAAIoZ,EAAQ,EAAQ,OAGpBre,EAAOD,SAAWse,GAAM,WAEtB,OAA8E,GAAvE5Z,OAAOmH,eAAe,CAAC,EAAG,EAAG,CAAEE,IAAK,WAAc,OAAO,CAAG,IAAK,EAC1E,eCNA,IAAIiT,EAAiC,iBAAZ9F,UAAwBA,SAASO,IAItDwF,OAAmC,IAAfD,QAA8CrY,IAAhBqY,EAEtD/e,EAAOD,QAAU,CACfyZ,IAAKuF,EACLC,WAAYA,oBCRd,IAAIF,EAAS,EAAQ,OACjBvC,EAAW,EAAQ,OAEnBtD,EAAW6F,EAAO7F,SAElBgG,EAAS1C,EAAStD,IAAasD,EAAStD,EAASG,eAErDpZ,EAAOD,QAAU,SAAUgc,GACzB,OAAOkD,EAAShG,EAASG,cAAc2C,GAAM,CAAC,CAChD,aCPA/b,EAAOD,QAAU,CACfmf,YAAa,EACbC,oBAAqB,EACrBC,aAAc,EACdC,eAAgB,EAChBC,YAAa,EACbC,cAAe,EACfC,aAAc,EACdC,qBAAsB,EACtBC,SAAU,EACVC,kBAAmB,EACnBC,eAAgB,EAChBC,gBAAiB,EACjBC,kBAAmB,EACnBC,UAAW,EACXC,cAAe,EACfC,aAAc,EACdC,SAAU,EACVC,iBAAkB,EAClBC,OAAQ,EACRC,YAAa,EACbC,cAAe,EACfC,cAAe,EACfC,eAAgB,EAChBC,aAAc,EACdC,cAAe,EACfC,iBAAkB,EAClBC,iBAAkB,EAClBC,eAAgB,EAChBC,iBAAkB,EAClBC,cAAe,EACfC,UAAW,aCjCbhhB,EAAOD,QAA8B,oBAAbmb,WAA4Bha,OAAOga,UAAUC,YAAc,oBCAnF,IAOIna,EAAOigB,EAPPnC,EAAS,EAAQ,OACjB3D,EAAY,EAAQ,MAEpB+F,EAAUpC,EAAOoC,QACjBC,EAAOrC,EAAOqC,KACdC,EAAWF,GAAWA,EAAQE,UAAYD,GAAQA,EAAKF,QACvDI,EAAKD,GAAYA,EAASC,GAG1BA,IAIFJ,GAHAjgB,EAAQqgB,EAAGvM,MAAM,MAGD,GAAK,GAAK9T,EAAM,GAAK,EAAI,IAAMA,EAAM,GAAKA,EAAM,MAK7DigB,GAAW9F,MACdna,EAAQma,EAAUna,MAAM,iBACVA,EAAM,IAAM,MACxBA,EAAQma,EAAUna,MAAM,oBACbigB,GAAWjgB,EAAM,IAIhChB,EAAOD,QAAUkhB,mBC1BjB,IAAIpJ,EAAO,EAAQ,OAEnB7X,EAAOD,QAAU,SAAUuhB,GACzB,OAAOzJ,EAAKyJ,EAAc,YAC5B,aCHAthB,EAAOD,QAAU,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,4BCRF,IAAIkd,EAAc,EAAQ,OAEtBsE,EAAS/d,MACTzC,EAAUkc,EAAY,GAAGlc,SAEzBygB,EAAgCtgB,OAAOqgB,EAAuB,UAAX3N,OAEnD6N,EAA2B,uBAC3BC,EAAwBD,EAAyBhgB,KAAK+f,GAE1DxhB,EAAOD,QAAU,SAAU6T,EAAO+N,GAChC,GAAID,GAAyC,iBAAT9N,IAAsB2N,EAAOK,kBAC/D,KAAOD,KAAe/N,EAAQ7S,EAAQ6S,EAAO6N,EAA0B,IACvE,OAAO7N,CACX,mBCdA,IAAIiL,EAA8B,EAAQ,OACtCgD,EAAkB,EAAQ,OAC1BC,EAA0B,EAAQ,OAGlCC,EAAoBve,MAAMue,kBAE9B/hB,EAAOD,QAAU,SAAU4L,EAAOqW,EAAGpO,EAAO+N,GACtCG,IACEC,EAAmBA,EAAkBpW,EAAOqW,GAC3CnD,EAA4BlT,EAAO,QAASkW,EAAgBjO,EAAO+N,IAE5E,mBCZA,IAAItD,EAAQ,EAAQ,OAChBK,EAA2B,EAAQ,OAEvC1e,EAAOD,SAAWse,GAAM,WACtB,IAAI1S,EAAQnI,MAAM,KAClB,QAAM,UAAWmI,KAEjBlH,OAAOmH,eAAeD,EAAO,QAAS+S,EAAyB,EAAG,IAC3C,IAAhB/S,EAAMiI,MACf,kCCRA,IAAIkL,EAAS,EAAQ,OACjB3T,EAAQ,EAAQ,OAChB8R,EAAc,EAAQ,OACtBf,EAAa,EAAQ,OACrBkC,EAA2B,WAC3B6D,EAAW,EAAQ,OACnBpK,EAAO,EAAQ,OACfjC,EAAO,EAAQ,OACfiJ,EAA8B,EAAQ,OACtCvI,EAAS,EAAQ,OAEjB4L,gBAAkB,SAAUC,GAC9B,IAAIC,QAAU,SAAUhW,EAAG/F,EAAG8D,GAC5B,GAAIhK,gBAAgBiiB,QAAS,CAC3B,OAAQ/a,UAAUzE,QAChB,KAAK,EAAG,OAAO,IAAIuf,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAkB/V,GACrC,KAAK,EAAG,OAAO,IAAI+V,EAAkB/V,EAAG/F,GACxC,OAAO,IAAI8b,EAAkB/V,EAAG/F,EAAG8D,EACvC,CAAE,OAAOgB,EAAMgX,EAAmBhiB,KAAMkH,UAC1C,EAEA,OADA+a,QAAQzd,UAAYwd,EAAkBxd,UAC/Byd,OACT,EAiBApiB,EAAOD,QAAU,SAAUgX,EAASiH,GAClC,IAUIqE,EAAQC,EAAYC,GACpB3L,GAAK4L,GAAgBC,GAAgBC,GAAgBC,GAAgBC,GAXrEC,GAAS9L,EAAQ7J,OACjB4V,GAAS/L,EAAQ+H,OACjBiE,GAAShM,EAAQiM,KACjBC,GAAQlM,EAAQxL,MAEhB2X,GAAeJ,GAAShE,EAASiE,GAASjE,EAAO+D,KAAW/D,EAAO+D,KAAW,CAAC,GAAGle,UAElFuI,GAAS4V,GAASjL,EAAOA,EAAKgL,KAAWhE,EAA4BhH,EAAMgL,GAAQ,CAAC,GAAGA,IACvFM,GAAkBjW,GAAOvI,UAK7B,IAAKiS,MAAOoH,EAGVsE,IAFAD,EAASJ,EAASa,GAASlM,GAAMiM,IAAUE,GAAS,IAAM,KAAOnM,GAAKG,EAAQqM,UAEtDF,IAAgB5M,EAAO4M,GAActM,IAE7D6L,GAAiBvV,GAAO0J,IAEpB0L,IAEFI,GAFkB3L,EAAQsM,gBAC1BT,GAAaxE,EAAyB8E,GAActM,MACrBgM,GAAW3d,MACpBie,GAAatM,KAGrC4L,GAAkBF,GAAcI,GAAkBA,GAAiB1E,EAAOpH,IAEtE0L,UAAqBG,WAAyBD,KAGlBG,GAA5B5L,EAAQnB,MAAQ0M,EAA6B1M,EAAK4M,GAAgB1D,GAE7D/H,EAAQuM,MAAQhB,EAA6BJ,gBAAgBM,IAE7DS,IAAS/G,EAAWsG,IAAkCvF,EAAYuF,IAErDA,IAGlBzL,EAAQwM,MAASf,IAAkBA,GAAee,MAAUd,IAAkBA,GAAec,OAC/F1E,EAA4B8D,GAAgB,QAAQ,GAGtD9D,EAA4B3R,GAAQ0J,GAAK+L,IAErCM,KAEG3M,EAAOuB,EADZ0K,GAAoBM,GAAS,cAE3BhE,EAA4BhH,EAAM0K,GAAmB,CAAC,GAGxD1D,EAA4BhH,EAAK0K,IAAoB3L,GAAK4L,IAEtDzL,EAAQyM,MAAQL,KAAoBd,IAAWc,GAAgBvM,MACjEiI,EAA4BsE,GAAiBvM,GAAK4L,KAI1D,aCrGAxiB,EAAOD,QAAU,SAAU0jB,GACzB,IACE,QAASA,GACX,CAAE,MAAO9X,GACP,OAAO,CACT,CACF,mBCNA,IAAI+X,EAAc,EAAQ,OAEtB7H,EAAoBC,SAASnX,UAC7BwG,EAAQ0Q,EAAkB1Q,MAC1B3C,EAAOqT,EAAkBrT,KAG7BxI,EAAOD,QAA4B,iBAAX4jB,SAAuBA,QAAQxY,QAAUuY,EAAclb,EAAKoN,KAAKzK,GAAS,WAChG,OAAO3C,EAAK2C,MAAMA,EAAO9D,UAC3B,oBCTA,IAAI4V,EAAc,EAAQ,OACtB2G,EAAY,EAAQ,OACpBF,EAAc,EAAQ,OAEtB9N,EAAOqH,EAAYA,EAAYrH,MAGnC5V,EAAOD,QAAU,SAAUqV,EAAIyO,GAE7B,OADAD,EAAUxO,QACM1O,IAATmd,EAAqBzO,EAAKsO,EAAc9N,EAAKR,EAAIyO,GAAQ,WAC9D,OAAOzO,EAAGjK,MAAM0Y,EAAMxc,UACxB,CACF,mBCZA,IAAIgX,EAAQ,EAAQ,OAEpBre,EAAOD,SAAWse,GAAM,WAEtB,IAAI5c,EAAO,WAA4B,EAAEmU,OAEzC,MAAsB,mBAARnU,GAAsBA,EAAK8U,eAAe,YAC1D,kCCNA,IAAI0G,EAAc,EAAQ,OACtB2G,EAAY,EAAQ,OACpBrH,EAAW,EAAQ,OACnBjG,EAAS,EAAQ,OACjBwN,EAAa,EAAQ,OACrBJ,EAAc,EAAQ,OAEtBK,EAAYjI,SACZvP,EAAS0Q,EAAY,GAAG1Q,QACxBnJ,EAAO6Z,EAAY,GAAG7Z,MACtB4gB,EAAY,CAAC,EAYjBhkB,EAAOD,QAAU2jB,EAAcK,EAAUnO,KAAO,SAASA,KAAKiO,GAC5D,IAAIvF,EAAIsF,EAAUzjB,MACd8jB,EAAY3F,EAAE3Z,UACduf,EAAWJ,EAAWzc,UAAW,GACjC8c,EAAgB,SAASC,QAC3B,IAAIC,EAAO9X,EAAO2X,EAAUJ,EAAWzc,YACvC,OAAOlH,gBAAgBgkB,EAhBX,SAAUnC,EAAGsC,EAAYD,GACvC,IAAK/N,EAAO0N,EAAWM,GAAa,CAClC,IAAK,IAAI9X,EAAO,GAAItK,EAAI,EAAGA,EAAIoiB,EAAYpiB,IAAKsK,EAAKtK,GAAK,KAAOA,EAAI,IACrE8hB,EAAUM,GAAcP,EAAU,MAAO,gBAAkB3gB,EAAKoJ,EAAM,KAAO,IAC/E,CAAE,OAAOwX,EAAUM,GAAYtC,EAAGqC,EACpC,CAW2CE,CAAUjG,EAAG+F,EAAKzhB,OAAQyhB,GAAQ/F,EAAEnT,MAAM0Y,EAAMQ,EACzF,EAEA,OADI9H,EAAS0H,KAAYE,EAAcxf,UAAYsf,GAC5CE,CACT,mBCjCA,IAAIT,EAAc,EAAQ,OAEtBlb,EAAOsT,SAASnX,UAAU6D,KAE9BxI,EAAOD,QAAU2jB,EAAclb,EAAKoN,KAAKpN,GAAQ,WAC/C,OAAOA,EAAK2C,MAAM3C,EAAMnB,UAC1B,mBCNA,IAAIoX,EAAc,EAAQ,OACtBnI,EAAS,EAAQ,OAEjBuF,EAAoBC,SAASnX,UAE7B6f,EAAgB/F,GAAeha,OAAO2Z,yBAEtCa,EAAS3I,EAAOuF,EAAmB,QAEnC4I,EAASxF,GAA0D,cAAhD,SAAUyF,YAA2B,EAAE/Q,KAC1DgR,EAAe1F,KAAYR,GAAgBA,GAAe+F,EAAc3I,EAAmB,QAAQnI,cAEvG1T,EAAOD,QAAU,CACfkf,OAAQA,EACRwF,OAAQA,EACRE,aAAcA,oBCfhB,IAAI1H,EAAc,EAAQ,OACtB2G,EAAY,EAAQ,OAExB5jB,EAAOD,QAAU,SAAU4e,EAAQ/H,EAAKgF,GACtC,IAEE,OAAOqB,EAAY2G,EAAUnf,OAAO2Z,yBAAyBO,EAAQ/H,GAAKgF,IAC5E,CAAE,MAAOjQ,GAAqB,CAChC,mBCRA,IAAIyR,EAAa,EAAQ,OACrBH,EAAc,EAAQ,OAE1Bjd,EAAOD,QAAU,SAAUqV,GAIzB,GAAuB,aAAnBgI,EAAWhI,GAAoB,OAAO6H,EAAY7H,EACxD,mBCRA,IAAIsO,EAAc,EAAQ,OAEtB7H,EAAoBC,SAASnX,UAC7B6D,EAAOqT,EAAkBrT,KACzBoc,EAAsBlB,GAAe7H,EAAkBjG,KAAKA,KAAKpN,EAAMA,GAE3ExI,EAAOD,QAAU2jB,EAAckB,EAAsB,SAAUxP,GAC7D,OAAO,WACL,OAAO5M,EAAK2C,MAAMiK,EAAI/N,UACxB,CACF,iBCVA,IAAIwQ,EAAO,EAAQ,OACfiH,EAAS,EAAQ,OACjB5C,EAAa,EAAQ,OAErB2I,UAAY,SAAUC,GACxB,OAAO5I,EAAW4I,GAAYA,OAAWpe,CAC3C,EAEA1G,EAAOD,QAAU,SAAUglB,EAAWnJ,GACpC,OAAOvU,UAAUzE,OAAS,EAAIiiB,UAAUhN,EAAKkN,KAAeF,UAAU/F,EAAOiG,IACzElN,EAAKkN,IAAclN,EAAKkN,GAAWnJ,IAAWkD,EAAOiG,IAAcjG,EAAOiG,GAAWnJ,EAC3F,mBCXA,IAAIoJ,EAAU,EAAQ,MAClBC,EAAY,EAAQ,OACpBC,EAAoB,EAAQ,OAC5BC,EAAY,EAAQ,OAGpBC,EAFkB,EAAQ,MAEf9H,CAAgB,YAE/Btd,EAAOD,QAAU,SAAUgc,GACzB,IAAKmJ,EAAkBnJ,GAAK,OAAOkJ,EAAUlJ,EAAIqJ,IAC5CH,EAAUlJ,EAAI,eACdoJ,EAAUH,EAAQjJ,GACzB,mBCZA,IAAIvT,EAAO,EAAQ,OACfob,EAAY,EAAQ,OACpByB,EAAW,EAAQ,OACnBlJ,EAAc,EAAQ,OACtBmJ,EAAoB,EAAQ,OAE5BlJ,EAAatX,UAEjB9E,EAAOD,QAAU,SAAUsc,EAAUkJ,GACnC,IAAIC,EAAiBne,UAAUzE,OAAS,EAAI0iB,EAAkBjJ,GAAYkJ,EAC1E,GAAI3B,EAAU4B,GAAiB,OAAOH,EAAS7c,EAAKgd,EAAgBnJ,IACpE,MAAMD,EAAWD,EAAYE,GAAY,mBAC3C,mBCZA,IAAIuH,EAAY,EAAQ,OACpBsB,EAAoB,EAAQ,OAIhCllB,EAAOD,QAAU,SAAU0lB,EAAGC,GAC5B,IAAItP,EAAOqP,EAAEC,GACb,OAAOR,EAAkB9O,QAAQ1P,EAAYkd,EAAUxN,EACzD,yBCRA,IAAIuP,MAAQ,SAAU5J,GACpB,OAAOA,GAAMA,EAAGzR,MAAQA,MAAQyR,CAClC,EAGA/b,EAAOD,QAEL4lB,MAA2B,iBAAdC,YAA0BA,aACvCD,MAAuB,iBAAVpL,QAAsBA,SAEnCoL,MAAqB,iBAARE,MAAoBA,OACjCF,MAAuB,iBAAV,EAAAG,GAAsB,EAAAA,IAEnC,WAAe,OAAO3lB,IAAO,CAA7B,IAAoCA,MAAQ2b,SAAS,cAATA,oBCb9C,IAAImB,EAAc,EAAQ,OACtB8I,EAAW,EAAQ,OAEnBxP,EAAiB0G,EAAY,CAAC,EAAE1G,gBAKpCvW,EAAOD,QAAU0E,OAAO6R,QAAU,SAASA,OAAOyF,EAAInF,GACpD,OAAOL,EAAewP,EAAShK,GAAKnF,EACtC,aCVA5W,EAAOD,QAAU,CAAC,mBCAlB,IAAIimB,EAAa,EAAQ,KAEzBhmB,EAAOD,QAAUimB,EAAW,WAAY,mCCFxC,IAAIvH,EAAc,EAAQ,OACtBJ,EAAQ,EAAQ,OAChBjF,EAAgB,EAAQ,OAG5BpZ,EAAOD,SAAW0e,IAAgBJ,GAAM,WAEtC,OAEQ,GAFD5Z,OAAOmH,eAAewN,EAAc,OAAQ,IAAK,CACtDtN,IAAK,WAAc,OAAO,CAAG,IAC5BM,CACL,qBCVA,IAAI6Q,EAAc,EAAQ,OACtBoB,EAAQ,EAAQ,OAChB2G,EAAU,EAAQ,OAElBzH,EAAU9Y,OACVqQ,EAAQmI,EAAY,GAAGnI,OAG3B9U,EAAOD,QAAUse,GAAM,WAGrB,OAAQd,EAAQ,KAAK0I,qBAAqB,EAC5C,IAAK,SAAUlK,GACb,MAAsB,UAAfiJ,EAAQjJ,GAAkBjH,EAAMiH,EAAI,IAAMwB,EAAQxB,EAC3D,EAAIwB,mBCdJ,IAAIrB,EAAa,EAAQ,OACrBK,EAAW,EAAQ,OACnB7X,EAAiB,EAAQ,OAG7B1E,EAAOD,QAAU,SAAU8c,EAAOqJ,EAAO9D,GACvC,IAAI+D,EAAWC,EAUf,OAPE1hB,GAEAwX,EAAWiK,EAAYD,EAAM3S,cAC7B4S,IAAc/D,GACd7F,EAAS6J,EAAqBD,EAAUxhB,YACxCyhB,IAAuBhE,EAAQzd,WAC/BD,EAAemY,EAAOuJ,GACjBvJ,CACT,mBCjBA,IAAIN,EAAW,EAAQ,OACnBsC,EAA8B,EAAQ,OAI1C7e,EAAOD,QAAU,SAAUid,EAAGjG,GACxBwF,EAASxF,IAAY,UAAWA,GAClC8H,EAA4B7B,EAAG,QAASjG,EAAQsP,MAEpD,mBCTA,IAYI3Z,EAAKZ,EAAKwa,EAZVC,EAAkB,EAAQ,OAC1BzH,EAAS,EAAQ,OACjBvC,EAAW,EAAQ,OACnBsC,EAA8B,EAAQ,OACtCvI,EAAS,EAAQ,OACjBkQ,EAAS,EAAQ,OACjBC,EAAY,EAAQ,OACpBC,GAAa,EAAQ,OAErBC,GAA6B,6BAC7B7hB,GAAYga,EAAOha,UACnB8hB,GAAU9H,EAAO8H,QAgBrB,GAAIL,GAAmBC,EAAOK,MAAO,CACnC,IAAIC,GAAQN,EAAOK,QAAUL,EAAOK,MAAQ,IAAID,IAEhDE,GAAMhb,IAAMgb,GAAMhb,IAClBgb,GAAMR,IAAMQ,GAAMR,IAClBQ,GAAMpa,IAAMoa,GAAMpa,IAElBA,EAAM,SAAUqP,EAAIgL,GAClB,GAAID,GAAMR,IAAIvK,GAAK,MAAMjX,GAAU6hB,IAGnC,OAFAI,EAASC,OAASjL,EAClB+K,GAAMpa,IAAIqP,EAAIgL,GACPA,CACT,EACAjb,EAAM,SAAUiQ,GACd,OAAO+K,GAAMhb,IAAIiQ,IAAO,CAAC,CAC3B,EACAuK,EAAM,SAAUvK,GACd,OAAO+K,GAAMR,IAAIvK,EACnB,CACF,KAAO,CACL,IAAIkL,GAAQR,EAAU,SACtBC,GAAWO,KAAS,EACpBva,EAAM,SAAUqP,EAAIgL,GAClB,GAAIzQ,EAAOyF,EAAIkL,IAAQ,MAAMniB,GAAU6hB,IAGvC,OAFAI,EAASC,OAASjL,EAClB8C,EAA4B9C,EAAIkL,GAAOF,GAChCA,CACT,EACAjb,EAAM,SAAUiQ,GACd,OAAOzF,EAAOyF,EAAIkL,IAASlL,EAAGkL,IAAS,CAAC,CAC1C,EACAX,EAAM,SAAUvK,GACd,OAAOzF,EAAOyF,EAAIkL,GACpB,CACF,CAEAjnB,EAAOD,QAAU,CACf2M,IAAKA,EACLZ,IAAKA,EACLwa,IAAKA,EACLY,QArDY,SAAUnL,GACtB,OAAOuK,EAAIvK,GAAMjQ,EAAIiQ,GAAMrP,EAAIqP,EAAI,CAAC,EACtC,EAoDEoL,UAlDc,SAAUC,GACxB,OAAO,SAAUrL,GACf,IAAI8K,EACJ,IAAKtK,EAASR,KAAQ8K,EAAQ/a,EAAIiQ,IAAKnV,OAASwgB,EAC9C,MAAMtiB,GAAU,0BAA4BsiB,EAAO,aACnD,OAAOP,CACX,CACF,mBCzBA,IAAIvJ,EAAkB,EAAQ,OAC1B6H,EAAY,EAAQ,OAEpBC,EAAW9H,EAAgB,YAC3B+J,EAAiB/jB,MAAMqB,UAG3B3E,EAAOD,QAAU,SAAUgc,GACzB,YAAcrV,IAAPqV,IAAqBoJ,EAAU7hB,QAAUyY,GAAMsL,EAAejC,KAAcrJ,EACrF,mBCTA,IAAIuL,EAAe,EAAQ,OAEvBvI,EAAcuI,EAAa9N,IAI/BxZ,EAAOD,QAAUunB,EAAatI,WAAa,SAAU3C,GACnD,MAA0B,mBAAZA,GAA0BA,IAAa0C,CACvD,EAAI,SAAU1C,GACZ,MAA0B,mBAAZA,CAChB,mBCVA,IAAIgC,EAAQ,EAAQ,OAChBnC,EAAa,EAAQ,OAErBqL,EAAc,kBAEdtF,SAAW,SAAUuF,EAASC,GAChC,IAAIxiB,EAAQ6B,EAAK4gB,EAAUF,IAC3B,OAAOviB,GAAS0iB,GACZ1iB,GAAS2iB,IACT1L,EAAWuL,GAAapJ,EAAMoJ,KAC5BA,EACR,EAEIC,EAAYzF,SAASyF,UAAY,SAAUviB,GAC7C,OAAOjE,OAAOiE,GAAQpE,QAAQwmB,EAAa,KAAK9f,aAClD,EAEIX,EAAOmb,SAASnb,KAAO,CAAC,EACxB8gB,EAAS3F,SAAS2F,OAAS,IAC3BD,EAAW1F,SAAS0F,SAAW,IAEnC3nB,EAAOD,QAAUkiB,oBCnBjBjiB,EAAOD,QAAU,SAAUgc,GACzB,OAAOA,OACT,mBCJA,IAAIG,EAAa,EAAQ,OACrBoL,EAAe,EAAQ,OAEvBvI,EAAcuI,EAAa9N,IAE/BxZ,EAAOD,QAAUunB,EAAatI,WAAa,SAAUjD,GACnD,MAAoB,iBAANA,EAAwB,OAAPA,EAAcG,EAAWH,IAAOA,IAAOgD,CACxE,EAAI,SAAUhD,GACZ,MAAoB,iBAANA,EAAwB,OAAPA,EAAcG,EAAWH,EAC1D,aCTA/b,EAAOD,SAAU,mBCAjB,IAAIimB,EAAa,EAAQ,KACrB9J,EAAa,EAAQ,OACrBP,EAAgB,EAAQ,MACxBkM,EAAoB,EAAQ,OAE5BtK,EAAU9Y,OAEdzE,EAAOD,QAAU8nB,EAAoB,SAAU9L,GAC7C,MAAoB,iBAANA,CAChB,EAAI,SAAUA,GACZ,IAAI+L,EAAU9B,EAAW,UACzB,OAAO9J,EAAW4L,IAAYnM,EAAcmM,EAAQnjB,UAAW4Y,EAAQxB,GACzE,mBCZA,IAAInG,EAAO,EAAQ,OACfpN,EAAO,EAAQ,OACf6c,EAAW,EAAQ,OACnBlJ,EAAc,EAAQ,OACtB4L,EAAwB,EAAQ,MAChCrL,EAAoB,EAAQ,OAC5Bf,EAAgB,EAAQ,MACxBqM,EAAc,EAAQ,OACtB1C,EAAoB,EAAQ,OAC5B2C,EAAgB,EAAQ,MAExB7L,GAAatX,UAEbojB,OAAS,SAAUC,EAASzK,GAC9Bvd,KAAKgoB,QAAUA,EACfhoB,KAAKud,OAASA,CAChB,EAEI0K,GAAkBF,OAAOvjB,UAE7B3E,EAAOD,QAAU,SAAUsoB,EAAUC,EAAiBvR,GACpD,IAMIwR,GAAUC,GAAQvR,GAAOrU,GAAQ8a,GAAQ+K,GAAMC,GAN/C7E,GAAO9M,GAAWA,EAAQ8M,KAC1B8E,MAAgB5R,IAAWA,EAAQ4R,YACnCC,MAAe7R,IAAWA,EAAQ6R,WAClCC,MAAiB9R,IAAWA,EAAQ8R,aACpCC,MAAiB/R,IAAWA,EAAQ+R,aACpC1T,GAAKQ,EAAK0S,EAAiBzE,IAG3BkF,KAAO,SAAUC,GAEnB,OADIT,IAAUN,EAAcM,GAAU,SAAUS,GACzC,IAAId,QAAO,EAAMc,EAC1B,EAEIC,OAAS,SAAUhkB,GACrB,OAAI0jB,IACFtD,EAASpgB,GACF6jB,GAAc1T,GAAGnQ,EAAM,GAAIA,EAAM,GAAI8jB,MAAQ3T,GAAGnQ,EAAM,GAAIA,EAAM,KAChE6jB,GAAc1T,GAAGnQ,EAAO8jB,MAAQ3T,GAAGnQ,EAC9C,EAEA,GAAI2jB,GACFL,GAAWF,EAASE,cACf,GAAIM,GACTN,GAAWF,MACN,CAEL,KADAG,GAASlD,EAAkB+C,IACd,MAAMjM,GAAWD,EAAYkM,GAAY,oBAEtD,GAAIN,EAAsBS,IAAS,CACjC,IAAKvR,GAAQ,EAAGrU,GAAS8Z,EAAkB2L,GAAWzlB,GAASqU,GAAOA,KAEpE,IADAyG,GAASuL,OAAOZ,EAASpR,OACX0E,EAAcyM,GAAiB1K,IAAS,OAAOA,GAC7D,OAAO,IAAIwK,QAAO,EACtB,CACAK,GAAWP,EAAYK,EAAUG,GACnC,CAGA,IADAC,GAAOG,GAAYP,EAASI,KAAOF,GAASE,OACnCC,GAAOlgB,EAAKigB,GAAMF,KAAW/J,MAAM,CAC1C,IACEd,GAASuL,OAAOP,GAAKzjB,MACvB,CAAE,MAAO0G,GACPsc,EAAcM,GAAU,QAAS5c,EACnC,CACA,GAAqB,iBAAV+R,IAAsBA,IAAU/B,EAAcyM,GAAiB1K,IAAS,OAAOA,EAC5F,CAAE,OAAO,IAAIwK,QAAO,EACtB,kBCnEA,IAAI1f,EAAO,EAAQ,OACf6c,EAAW,EAAQ,OACnBJ,EAAY,EAAQ,OAExBjlB,EAAOD,QAAU,SAAUwoB,EAAUW,EAAMjkB,GACzC,IAAIkkB,EAAaC,EACjB/D,EAASkD,GACT,IAEE,KADAY,EAAclE,EAAUsD,EAAU,WAChB,CAChB,GAAa,UAATW,EAAkB,MAAMjkB,EAC5B,OAAOA,CACT,CACAkkB,EAAc3gB,EAAK2gB,EAAaZ,EAClC,CAAE,MAAO5c,GACPyd,GAAa,EACbD,EAAcxd,CAChB,CACA,GAAa,UAATud,EAAkB,MAAMjkB,EAC5B,GAAImkB,EAAY,MAAMD,EAEtB,OADA9D,EAAS8D,GACFlkB,CACT,gCCrBA,IAAIokB,EAAoB,2BACpBC,EAAS,EAAQ,OACjB5K,EAA2B,EAAQ,OACnC6K,EAAiB,EAAQ,OACzBpE,EAAY,EAAQ,OAEpBqE,WAAa,WAAc,OAAOrpB,IAAM,EAE5CH,EAAOD,QAAU,SAAU0pB,EAAqBC,EAAMjB,EAAMkB,GAC1D,IAAItM,EAAgBqM,EAAO,YAI3B,OAHAD,EAAoB9kB,UAAY2kB,EAAOD,EAAmB,CAAEZ,KAAM/J,IAA2BiL,EAAiBlB,KAC9Gc,EAAeE,EAAqBpM,GAAe,GAAO,GAC1D8H,EAAU9H,GAAiBmM,WACpBC,CACT,gCCdA,IAAIG,EAAI,EAAQ,OACZphB,EAAO,EAAQ,OACfqhB,EAAU,EAAQ,OAClBC,EAAe,EAAQ,OACvB5N,EAAa,EAAQ,OACrB6N,EAA4B,EAAQ,OACpCxL,EAAiB,EAAQ,KACzB7Z,EAAiB,EAAQ,OACzB6kB,EAAiB,EAAQ,OACzB1K,EAA8B,EAAQ,OACtCmL,GAAgB,EAAQ,OACxB1M,GAAkB,EAAQ,OAC1B6H,GAAY,EAAQ,OACpB8E,GAAgB,EAAQ,OAExBC,GAAuBJ,EAAarF,OACpC0F,GAA6BL,EAAanF,aAC1C0E,GAAoBY,GAAcZ,kBAClCe,GAAyBH,GAAcG,uBACvChF,GAAW9H,GAAgB,YAC3B+M,GAAO,OACPC,GAAS,SACTC,GAAU,UAEVf,WAAa,WAAc,OAAOrpB,IAAM,EAE5CH,EAAOD,QAAU,SAAUyqB,EAAUd,EAAMD,EAAqBhB,EAAMgC,GAASC,GAAQrI,IACrF0H,EAA0BN,EAAqBC,EAAMjB,GAErD,IAkBIkC,GAA0BC,GAASC,GAlBnCC,mBAAqB,SAAUC,GACjC,GAAIA,IAASN,IAAWO,GAAiB,OAAOA,GAChD,IAAKZ,IAA0BW,KAAQE,GAAmB,OAAOA,GAAkBF,GACnF,OAAQA,GACN,KAAKV,GAAM,OAAO,SAASnM,OAAS,OAAO,IAAIuL,EAAoBtpB,KAAM4qB,EAAO,EAChF,KAAKT,GAAQ,OAAO,SAASY,SAAW,OAAO,IAAIzB,EAAoBtpB,KAAM4qB,EAAO,EACpF,KAAKR,GAAS,OAAO,SAASY,UAAY,OAAO,IAAI1B,EAAoBtpB,KAAM4qB,EAAO,EACtF,OAAO,WAAc,OAAO,IAAItB,EAAoBtpB,KAAO,CAC/D,EAEIkd,GAAgBqM,EAAO,YACvB0B,IAAwB,EACxBH,GAAoBT,EAAS7lB,UAC7B0mB,GAAiBJ,GAAkB7F,KAClC6F,GAAkB,eAClBR,IAAWQ,GAAkBR,IAC9BO,IAAmBZ,IAA0BiB,IAAkBP,mBAAmBL,IAClFa,GAA4B,SAAR5B,GAAkBuB,GAAkBE,SAA4BE,GA+BxF,GA3BIC,KACFX,GAA2BpM,EAAe+M,GAAkB9iB,KAAK,IAAIgiB,OACpC/lB,OAAOE,WAAagmB,GAAyBlC,OACvEoB,GAAWtL,EAAeoM,MAA8BtB,KACvD3kB,EACFA,EAAeimB,GAA0BtB,IAC/BnN,EAAWyO,GAAyBvF,MAC9C4E,GAAcW,GAA0BvF,GAAUoE,aAItDD,EAAeoB,GAA0BtN,IAAe,GAAM,GAC1DwM,IAAS1E,GAAU9H,IAAiBmM,aAKxCU,IAAwBO,IAAWH,IAAUe,IAAkBA,GAAe1X,OAAS2W,MACpFT,GAAWM,GACdtL,EAA4BoM,GAAmB,OAAQX,KAEvDc,IAAwB,EACxBJ,GAAkB,SAASE,SAAW,OAAO1iB,EAAK6iB,GAAgBlrB,KAAO,IAKzEsqB,GAMF,GALAG,GAAU,CACRM,OAAQJ,mBAAmBR,IAC3BpM,KAAMwM,GAASM,GAAkBF,mBAAmBT,IACpDc,QAASL,mBAAmBP,KAE1BlI,GAAQ,IAAKwI,MAAOD,IAClBR,IAA0BgB,MAA2BP,MAAOI,MAC9DjB,GAAciB,GAAmBJ,GAAKD,GAAQC,UAE3CjB,EAAE,CAAE1c,OAAQwc,EAAMne,OAAO,EAAM6X,OAAQgH,IAA0BgB,IAAyBR,IASnG,OALMf,IAAWxH,IAAW4I,GAAkB7F,MAAc4F,IAC1DhB,GAAciB,GAAmB7F,GAAU4F,GAAiB,CAAErX,KAAM8W,KAEtEtF,GAAUuE,GAAQsB,GAEXJ,EACT,gCCjGA,IAcIvB,EAAmBkC,EAAmCC,EAdtDnN,EAAQ,EAAQ,OAChBnC,EAAa,EAAQ,OACrBK,EAAW,EAAQ,OACnB+M,EAAS,EAAQ,OACjB/K,EAAiB,EAAQ,KACzByL,EAAgB,EAAQ,OACxB1M,EAAkB,EAAQ,OAC1BuM,GAAU,EAAQ,OAElBzE,GAAW9H,EAAgB,YAC3B8M,IAAyB,EAOzB,GAAGlM,OAGC,SAFNsN,EAAgB,GAAGtN,SAIjBqN,EAAoChN,EAAeA,EAAeiN,OACxB/mB,OAAOE,YAAW0kB,EAAoBkC,GAHlDnB,IAAyB,IAO7B7N,EAAS8M,IAAsBhL,GAAM,WACjE,IAAI5c,EAAO,CAAC,EAEZ,OAAO4nB,EAAkBjE,IAAU5c,KAAK/G,KAAUA,CACpD,IAE4B4nB,EAAoB,CAAC,EACxCQ,KAASR,EAAoBC,EAAOD,IAIxCnN,EAAWmN,EAAkBjE,MAChC4E,EAAcX,EAAmBjE,IAAU,WACzC,OAAOjlB,IACT,IAGFH,EAAOD,QAAU,CACfspB,kBAAmBA,EACnBe,uBAAwBA,eC/C1BpqB,EAAOD,QAAU,CAAC,mBCAlB,IAAI0rB,EAAW,EAAQ,OAIvBzrB,EAAOD,QAAU,SAAUwG,GACzB,OAAOklB,EAASllB,EAAI3D,OACtB,aCNA,IAAI8oB,EAAOphB,KAAKohB,KACZvX,EAAQ7J,KAAK6J,MAKjBnU,EAAOD,QAAUuK,KAAKqhB,OAAS,SAASA,MAAMtf,GAC5C,IAAInE,GAAKmE,EACT,OAAQnE,EAAI,EAAIiM,EAAQuX,GAAMxjB,EAChC,mBCTA,IAAIf,EAAW,EAAQ,OAEvBnH,EAAOD,QAAU,SAAUsc,EAAUuP,GACnC,YAAoBllB,IAAb2V,EAAyBhV,UAAUzE,OAAS,EAAI,GAAKgpB,EAAWzkB,EAASkV,EAClF,gCCHA,IAAIoC,EAAc,EAAQ,OACtBxB,EAAc,EAAQ,OACtBzU,EAAO,EAAQ,OACf6V,EAAQ,EAAQ,OAChBwN,EAAa,EAAQ,OACrBC,EAA8B,EAAQ,OACtCC,EAA6B,EAAQ,OACrChG,EAAW,EAAQ,OACnBiG,EAAgB,EAAQ,OAGxBC,EAAUxnB,OAAOwX,OAEjBrQ,GAAiBnH,OAAOmH,eACxBW,GAAS0Q,EAAY,GAAG1Q,QAI5BvM,EAAOD,SAAWksB,GAAW5N,GAAM,WAEjC,GAAII,GAQiB,IARFwN,EAAQ,CAAE5lB,EAAG,GAAK4lB,EAAQrgB,GAAe,CAAC,EAAG,IAAK,CACnEC,YAAY,EACZC,IAAK,WACHF,GAAezL,KAAM,IAAK,CACxB8E,MAAO,EACP4G,YAAY,GAEhB,IACE,CAAExF,EAAG,KAAMA,EAAS,OAAO,EAE/B,IAAI6lB,EAAI,CAAC,EACLC,EAAI,CAAC,EAELC,EAASpoB,SACTiR,EAAW,uBAGf,OAFAiX,EAAEE,GAAU,EACZnX,EAASH,MAAM,IAAIuX,SAAQ,SAAUC,GAAOH,EAAEG,GAAOA,CAAK,IACzB,GAA1BL,EAAQ,CAAC,EAAGC,GAAGE,IAAgBP,EAAWI,EAAQ,CAAC,EAAGE,IAAI/oB,KAAK,KAAO6R,CAC/E,IAAK,SAASgH,OAAO/O,EAAQ8Q,GAM3B,IALA,IAAIuO,EAAIxG,EAAS7Y,GACbsf,EAAkBnlB,UAAUzE,OAC5BqU,EAAQ,EACRwV,EAAwBX,EAA4B3N,EACpD8H,GAAuB8F,EAA2B5N,EAC/CqO,EAAkBvV,GAMvB,IALA,IAIIL,GAJA8V,GAAIV,EAAc3kB,UAAU4P,MAC5BiH,GAAOuO,EAAwBlgB,GAAOsf,EAAWa,IAAID,EAAsBC,KAAMb,EAAWa,IAC5F9pB,GAASsb,GAAKtb,OACdqG,GAAI,EAEDrG,GAASqG,IACd2N,GAAMsH,GAAKjV,MACNwV,IAAejW,EAAKyd,GAAsByG,GAAG9V,MAAM2V,EAAE3V,IAAO8V,GAAE9V,KAErE,OAAO2V,CACX,EAAIN,mBCvDJ,IAmDIU,EAnDAtH,EAAW,EAAQ,OACnBuH,EAAyB,EAAQ,OACjCC,EAAc,EAAQ,OACtBnG,EAAa,EAAQ,OACrBoG,EAAO,EAAQ,OACfC,EAAwB,EAAQ,OAChCtG,EAAY,EAAQ,OAIpBuG,EAAY,YACZC,EAAS,SACTC,GAAWzG,EAAU,YAErB0G,iBAAmB,WAA0B,EAE7CC,UAAY,SAAUC,GACxB,MARO,IAQKJ,EATL,IASmBI,EAAnBC,KAAwCL,EATxC,GAUT,EAGIM,0BAA4B,SAAUZ,GACxCA,EAAgBpnB,MAAM6nB,UAAU,KAChCT,EAAgBa,QAChB,IAAIC,EAAOd,EAAgBe,aAAajpB,OAExC,OADAkoB,EAAkB,KACXc,CACT,EAyBIE,gBAAkB,WACpB,IACEhB,EAAkB,IAAIiB,cAAc,WACtC,CAAE,MAAOjiB,GAAsB,CAzBF,IAIzBkiB,EAFAC,EACAC,EAuBJJ,gBAAqC,oBAAZ1U,SACrBA,SAASrB,QAAU+U,EACjBY,0BAA0BZ,IA1B5BmB,EAASf,EAAsB,UAC/BgB,EAAK,OAASd,EAAS,IAE3Ba,EAAOvU,MAAMyU,QAAU,OACvBlB,EAAKlS,YAAYkT,GAEjBA,EAAO/Y,IAAM7T,OAAO6sB,IACpBF,EAAiBC,EAAOG,cAAchV,UACvBiV,OACfL,EAAetoB,MAAM6nB,UAAU,sBAC/BS,EAAeL,QACRK,EAAevP,GAiBlBiP,0BAA0BZ,GAE9B,IADA,IAAI/pB,EAASiqB,EAAYjqB,OAClBA,YAAiB+qB,gBAAgBX,GAAWH,EAAYjqB,IAC/D,OAAO+qB,iBACT,EAEAjH,EAAWwG,KAAY,EAKvBltB,EAAOD,QAAU0E,OAAO6kB,QAAU,SAASA,OAAOtM,EAAGmR,GACnD,IAAIzQ,EAQJ,OAPU,OAANV,GACFmQ,iBAAiBH,GAAa3H,EAASrI,GACvCU,EAAS,IAAIyP,iBACbA,iBAAiBH,GAAa,KAE9BtP,EAAOwP,IAAYlQ,GACdU,EAASiQ,uBACMjnB,IAAfynB,EAA2BzQ,EAASkP,EAAuBzO,EAAET,EAAQyQ,EAC9E,mBClFA,IAAI1P,EAAc,EAAQ,OACtB2P,EAA0B,EAAQ,OAClCrQ,EAAuB,EAAQ,OAC/BsH,EAAW,EAAQ,OACnB7I,EAAkB,EAAQ,OAC1BqP,EAAa,EAAQ,OAKzB9rB,EAAQoe,EAAIM,IAAgB2P,EAA0B3pB,OAAO4pB,iBAAmB,SAASA,iBAAiBrR,EAAGmR,GAC3G9I,EAASrI,GAMT,IALA,IAIIpG,EAJA0X,EAAQ9R,EAAgB2R,GACxBjQ,EAAO2N,EAAWsC,GAClBvrB,EAASsb,EAAKtb,OACdqU,EAAQ,EAELrU,EAASqU,GAAO8G,EAAqBI,EAAEnB,EAAGpG,EAAMsH,EAAKjH,KAAUqX,EAAM1X,IAC5E,OAAOoG,CACT,mBCnBA,IAAIyB,EAAc,EAAQ,OACtB8P,EAAiB,EAAQ,MACzBH,EAA0B,EAAQ,OAClC/I,EAAW,EAAQ,OACnBmJ,EAAgB,EAAQ,OAExBpS,EAAatX,UAEbmR,EAAkBxR,OAAOmH,eAEzB6iB,EAA4BhqB,OAAO2Z,yBACnCsQ,EAAa,aACb/J,EAAe,eACfgK,GAAW,WAIf5uB,EAAQoe,EAAIM,EAAc2P,EAA0B,SAASxiB,eAAeoR,EAAG0I,EAAGkJ,GAIhF,GAHAvJ,EAASrI,GACT0I,EAAI8I,EAAc9I,GAClBL,EAASuJ,GACQ,mBAAN5R,GAA0B,cAAN0I,GAAqB,UAAWkJ,GAAcD,MAAYC,IAAeA,EAAWD,IAAW,CAC5H,IAAIE,EAAUJ,EAA0BzR,EAAG0I,GACvCmJ,GAAWA,EAAQF,MACrB3R,EAAE0I,GAAKkJ,EAAW3pB,MAClB2pB,EAAa,CACXlb,aAAciR,KAAgBiK,EAAaA,EAAWjK,GAAgBkK,EAAQlK,GAC9E9Y,WAAY6iB,KAAcE,EAAaA,EAAWF,GAAcG,EAAQH,GACxEjb,UAAU,GAGhB,CAAE,OAAOwC,EAAgB+G,EAAG0I,EAAGkJ,EACjC,EAAI3Y,EAAkB,SAASrK,eAAeoR,EAAG0I,EAAGkJ,GAIlD,GAHAvJ,EAASrI,GACT0I,EAAI8I,EAAc9I,GAClBL,EAASuJ,GACLL,EAAgB,IAClB,OAAOtY,EAAgB+G,EAAG0I,EAAGkJ,EAC/B,CAAE,MAAOjjB,GAAqB,CAC9B,GAAI,QAASijB,GAAc,QAASA,EAAY,MAAMxS,EAAW,2BAEjE,MADI,UAAWwS,IAAY5R,EAAE0I,GAAKkJ,EAAW3pB,OACtC+X,CACT,mBC1CA,IAAIyB,EAAc,EAAQ,OACtBjW,EAAO,EAAQ,OACfujB,EAA6B,EAAQ,OACrCrN,EAA2B,EAAQ,OACnClC,EAAkB,EAAQ,OAC1BgS,EAAgB,EAAQ,OACxBlY,EAAS,EAAQ,OACjBiY,EAAiB,EAAQ,MAGzBE,EAA4BhqB,OAAO2Z,yBAIvCre,EAAQoe,EAAIM,EAAcgQ,EAA4B,SAASrQ,yBAAyBpB,EAAG0I,GAGzF,GAFA1I,EAAIR,EAAgBQ,GACpB0I,EAAI8I,EAAc9I,GACd6I,EAAgB,IAClB,OAAOE,EAA0BzR,EAAG0I,EACtC,CAAE,MAAO/Z,GAAqB,CAC9B,GAAI2K,EAAO0G,EAAG0I,GAAI,OAAOhH,GAA0BlW,EAAKujB,EAA2B5N,EAAGnB,EAAG0I,GAAI1I,EAAE0I,GACjG,mBCrBA,IAAIoJ,EAAqB,EAAQ,OAG7BpI,EAFc,EAAQ,OAEGna,OAAO,SAAU,aAK9CxM,EAAQoe,EAAI1Z,OAAOsqB,qBAAuB,SAASA,oBAAoB/R,GACrE,OAAO8R,EAAmB9R,EAAG0J,EAC/B,iBCTA3mB,EAAQoe,EAAI1Z,OAAOgoB,qCCDnB,IAAInW,EAAS,EAAQ,OACjB4F,EAAa,EAAQ,OACrB6J,EAAW,EAAQ,OACnBU,EAAY,EAAQ,OACpBuI,EAA2B,EAAQ,OAEnC9B,EAAWzG,EAAU,YACrBlJ,EAAU9Y,OACVwqB,EAAkB1R,EAAQ5Y,UAK9B3E,EAAOD,QAAUivB,EAA2BzR,EAAQgB,eAAiB,SAAUvB,GAC7E,IAAI2B,EAASoH,EAAS/I,GACtB,GAAI1G,EAAOqI,EAAQuO,GAAW,OAAOvO,EAAOuO,GAC5C,IAAI3Z,EAAcoL,EAAOpL,YACzB,OAAI2I,EAAW3I,IAAgBoL,aAAkBpL,EACxCA,EAAY5O,UACZga,aAAkBpB,EAAU0R,EAAkB,IACzD,kBCpBA,IAAIhS,EAAc,EAAQ,OAE1Bjd,EAAOD,QAAUkd,EAAY,CAAC,EAAEtB,gCCFhC,IAAIsB,EAAc,EAAQ,OACtB3G,EAAS,EAAQ,OACjBkG,EAAkB,EAAQ,OAC1Blb,EAAU,iBACVolB,EAAa,EAAQ,OAErBzjB,EAAOga,EAAY,GAAGha,MAE1BjD,EAAOD,QAAU,SAAU4e,EAAQuQ,GACjC,IAGItY,EAHAoG,EAAIR,EAAgBmC,GACpBzc,EAAI,EACJwb,EAAS,GAEb,IAAK9G,KAAOoG,GAAI1G,EAAOoQ,EAAY9P,IAAQN,EAAO0G,EAAGpG,IAAQ3T,EAAKya,EAAQ9G,GAE1E,KAAOsY,EAAMtsB,OAASV,GAAOoU,EAAO0G,EAAGpG,EAAMsY,EAAMhtB,SAChDZ,EAAQoc,EAAQ9G,IAAQ3T,EAAKya,EAAQ9G,IAExC,OAAO8G,CACT,mBCnBA,IAAIoR,EAAqB,EAAQ,OAC7BjC,EAAc,EAAQ,OAK1B7sB,EAAOD,QAAU0E,OAAOyZ,MAAQ,SAASA,KAAKlB,GAC5C,OAAO8R,EAAmB9R,EAAG6P,EAC/B,8BCPA,IAAIsC,EAAwB,CAAC,EAAElJ,qBAE3B7H,EAA2B3Z,OAAO2Z,yBAGlCgR,EAAchR,IAA6B+Q,EAAsB3mB,KAAK,CAAE,EAAG,GAAK,GAIpFzI,EAAQoe,EAAIiR,EAAc,SAASnJ,qBAAqBR,GACtD,IAAI7C,EAAaxE,EAAyBje,KAAMslB,GAChD,QAAS7C,GAAcA,EAAW/W,UACpC,EAAIsjB,mBCZJ,IAAIE,EAAsB,EAAQ,OAC9BhK,EAAW,EAAQ,OACnBiK,EAAqB,EAAQ,OAMjCtvB,EAAOD,QAAU0E,OAAOC,iBAAmB,aAAe,CAAC,EAAI,WAC7D,IAEI6qB,EAFAC,GAAiB,EACjB/tB,EAAO,CAAC,EAEZ,KACE8tB,EAASF,EAAoB5qB,OAAOE,UAAW,YAAa,QACrDlD,EAAM,IACb+tB,EAAiB/tB,aAAgB6B,KACnC,CAAE,MAAOqI,GAAqB,CAC9B,OAAO,SAASjH,eAAesY,EAAGzR,GAKhC,OAJA8Z,EAASrI,GACTsS,EAAmB/jB,GACfikB,EAAgBD,EAAOvS,EAAGzR,GACzByR,EAAEyS,UAAYlkB,EACZyR,CACT,CACF,CAhB+D,QAgBzDtW,iCCxBN,IAAIyW,EAAwB,EAAQ,OAChC6H,EAAU,EAAQ,MAItBhlB,EAAOD,QAAUod,EAAwB,CAAC,EAAEhW,SAAW,SAASA,WAC9D,MAAO,WAAa6d,EAAQ7kB,MAAQ,GACtC,mBCRA,IAAIqI,EAAO,EAAQ,OACf0T,EAAa,EAAQ,OACrBK,EAAW,EAAQ,OAEnBH,EAAatX,UAIjB9E,EAAOD,QAAU,SAAUsU,EAAOqb,GAChC,IAAIta,EAAI/M,EACR,GAAa,WAATqnB,GAAqBxT,EAAW9G,EAAKf,EAAMlN,YAAcoV,EAASlU,EAAMG,EAAK4M,EAAIf,IAAS,OAAOhM,EACrG,GAAI6T,EAAW9G,EAAKf,EAAMjO,WAAamW,EAASlU,EAAMG,EAAK4M,EAAIf,IAAS,OAAOhM,EAC/E,GAAa,WAATqnB,GAAqBxT,EAAW9G,EAAKf,EAAMlN,YAAcoV,EAASlU,EAAMG,EAAK4M,EAAIf,IAAS,OAAOhM,EACrG,MAAM+T,EAAW,0CACnB,mBCdA,IAAI4J,EAAa,EAAQ,KACrB/I,EAAc,EAAQ,OACtB0S,EAA4B,EAAQ,OACpC7D,EAA8B,EAAQ,OACtCzG,EAAW,EAAQ,OAEnB9Y,EAAS0Q,EAAY,GAAG1Q,QAG5BvM,EAAOD,QAAUimB,EAAW,UAAW,YAAc,SAASnI,QAAQ9B,GACpE,IAAImC,EAAOyR,EAA0BxR,EAAEkH,EAAStJ,IAC5C0Q,EAAwBX,EAA4B3N,EACxD,OAAOsO,EAAwBlgB,EAAO2R,EAAMuO,EAAsB1Q,IAAOmC,CAC3E,aCbAle,EAAOD,QAAU,CAAC,kBCAlB,IAAI6L,EAAiB,WAErB5L,EAAOD,QAAU,SAAU6vB,EAAQC,EAAQjZ,GACzCA,KAAOgZ,GAAUhkB,EAAegkB,EAAQhZ,EAAK,CAC3ClD,cAAc,EACd5H,IAAK,WAAc,OAAO+jB,EAAOjZ,EAAM,EACvClK,IAAK,SAAUqP,GAAM8T,EAAOjZ,GAAOmF,CAAI,GAE3C,mBCRA,IAAImJ,EAAoB,EAAQ,OAE5B9I,EAAatX,UAIjB9E,EAAOD,QAAU,SAAUgc,GACzB,GAAImJ,EAAkBnJ,GAAK,MAAMK,EAAW,wBAA0BL,GACtE,OAAOA,CACT,mBCTA,IAAIoB,EAAwB,EAAQ,OAChCvR,EAAiB,WACjBiT,EAA8B,EAAQ,OACtCvI,EAAS,EAAQ,OACjBnP,EAAW,EAAQ,OAGnBkW,EAFkB,EAAQ,MAEVC,CAAgB,eAEpCtd,EAAOD,QAAU,SAAUgc,EAAI+T,EAAK/M,EAAQgN,GAC1C,GAAIhU,EAAI,CACN,IAAI7O,EAAS6V,EAAShH,EAAKA,EAAGpX,UACzB2R,EAAOpJ,EAAQmQ,IAClBzR,EAAesB,EAAQmQ,EAAe,CAAE3J,cAAc,EAAMzO,MAAO6qB,IAEjEC,IAAe5S,GACjB0B,EAA4B3R,EAAQ,WAAY/F,EAEpD,CACF,mBCnBA,IAAIqf,EAAS,EAAQ,OACjBwJ,EAAM,EAAQ,OAEd9R,EAAOsI,EAAO,QAElBxmB,EAAOD,QAAU,SAAU6W,GACzB,OAAOsH,EAAKtH,KAASsH,EAAKtH,GAAOoZ,EAAIpZ,GACvC,mBCPA,IAAIkI,EAAS,EAAQ,OACjBmR,EAAuB,EAAQ,OAE/BC,EAAS,qBACTpJ,EAAQhI,EAAOoR,IAAWD,EAAqBC,EAAQ,CAAC,GAE5DlwB,EAAOD,QAAU+mB,mBCNjB,IAAI+C,EAAU,EAAQ,OAClB/C,EAAQ,EAAQ,QAEnB9mB,EAAOD,QAAU,SAAU6W,EAAK3R,GAC/B,OAAO6hB,EAAMlQ,KAASkQ,EAAMlQ,QAAiBlQ,IAAVzB,EAAsBA,EAAQ,CAAC,EACpE,GAAG,WAAY,IAAIhC,KAAK,CACtBge,QAAS,SACTkP,KAAMtG,EAAU,OAAS,SACzBuG,UAAW,4CACXC,QAAS,2DACTrS,OAAQ,yDCVV,IAAIf,EAAc,EAAQ,OACtBqT,EAAsB,EAAQ,OAC9BnpB,EAAW,EAAQ,OACnBopB,EAAyB,EAAQ,OAEjCC,EAASvT,EAAY,GAAGuT,QACxB/tB,EAAawa,EAAY,GAAGxa,YAC5Bya,EAAcD,EAAY,GAAGzX,OAE7BmX,aAAe,SAAU8T,GAC3B,OAAO,SAAU5T,EAAOpQ,GACtB,IAGIqD,EAAO4gB,EAHPhE,EAAIvlB,EAASopB,EAAuB1T,IACpCpD,EAAW6W,EAAoB7jB,GAC/BxF,GAAOylB,EAAE9pB,OAEb,OAAI6W,EAAW,GAAKA,GAAYxS,GAAawpB,EAAoB,QAAK/pB,GACtEoJ,EAAQrN,EAAWiqB,EAAGjT,IACP,OAAU3J,EAAQ,OAAU2J,EAAW,IAAMxS,KACtDypB,EAASjuB,EAAWiqB,EAAGjT,EAAW,IAAM,OAAUiX,EAAS,MAC3DD,EACED,EAAO9D,EAAGjT,GACV3J,EACF2gB,EACEvT,EAAYwP,EAAGjT,EAAUA,EAAW,GACViX,EAAS,OAAlC5gB,EAAQ,OAAU,IAA0B,KACvD,CACF,EAEA9P,EAAOD,QAAU,CAGf4wB,OAAQhU,cAAa,GAGrB6T,OAAQ7T,cAAa,qBCjCvB,IAAIiU,EAAa,EAAQ,OACrBvS,EAAQ,EAAQ,OAGhB/B,EAFS,EAAQ,OAEApb,OAGrBlB,EAAOD,UAAY0E,OAAOgoB,wBAA0BpO,GAAM,WACxD,IAAI+N,EAASpoB,SAKb,OAAQsY,EAAQ8P,MAAa3nB,OAAO2nB,aAAmBpoB,UAEpDA,OAAOuf,MAAQqN,GAAcA,EAAa,EAC/C,qBCjBA,IAAIN,EAAsB,EAAQ,OAE9BrjB,EAAM3C,KAAK2C,IACX1C,EAAMD,KAAKC,IAKfvK,EAAOD,QAAU,SAAUkX,EAAOrU,GAChC,IAAIiuB,EAAUP,EAAoBrZ,GAClC,OAAO4Z,EAAU,EAAI5jB,EAAI4jB,EAAUjuB,EAAQ,GAAK2H,EAAIsmB,EAASjuB,EAC/D,mBCVA,IAAIopB,EAAgB,EAAQ,OACxBuE,EAAyB,EAAQ,OAErCvwB,EAAOD,QAAU,SAAUgc,GACzB,OAAOiQ,EAAcuE,EAAuBxU,GAC9C,mBCNA,IAAI4P,EAAQ,EAAQ,OAIpB3rB,EAAOD,QAAU,SAAUsc,GACzB,IAAIyU,GAAUzU,EAEd,OAAOyU,GAAWA,GAAqB,IAAXA,EAAe,EAAInF,EAAMmF,EACvD,mBCRA,IAAIR,EAAsB,EAAQ,OAE9B/lB,EAAMD,KAAKC,IAIfvK,EAAOD,QAAU,SAAUsc,GACzB,OAAOA,EAAW,EAAI9R,EAAI+lB,EAAoBjU,GAAW,kBAAoB,CAC/E,mBCRA,IAAIkU,EAAyB,EAAQ,OAEjChT,EAAU9Y,OAIdzE,EAAOD,QAAU,SAAUsc,GACzB,OAAOkB,EAAQgT,EAAuBlU,GACxC,mBCRA,IAAI7T,EAAO,EAAQ,OACf+T,EAAW,EAAQ,OACnBwU,EAAW,EAAQ,OACnB9L,EAAY,EAAQ,OACpB+L,EAAsB,EAAQ,OAC9B1T,EAAkB,EAAQ,OAE1BlB,EAAatX,UACbmsB,EAAe3T,EAAgB,eAInCtd,EAAOD,QAAU,SAAUsU,EAAOqb,GAChC,IAAKnT,EAASlI,IAAU0c,EAAS1c,GAAQ,OAAOA,EAChD,IACIqJ,EADAwT,EAAejM,EAAU5Q,EAAO4c,GAEpC,GAAIC,EAAc,CAGhB,QAFaxqB,IAATgpB,IAAoBA,EAAO,WAC/BhS,EAASlV,EAAK0oB,EAAc7c,EAAOqb,IAC9BnT,EAASmB,IAAWqT,EAASrT,GAAS,OAAOA,EAClD,MAAMtB,EAAW,0CACnB,CAEA,YADa1V,IAATgpB,IAAoBA,EAAO,UACxBsB,EAAoB3c,EAAOqb,EACpC,mBCxBA,IAAI3oB,EAAc,EAAQ,OACtBgqB,EAAW,EAAQ,OAIvB/wB,EAAOD,QAAU,SAAUsc,GACzB,IAAIzF,EAAM7P,EAAYsV,EAAU,UAChC,OAAO0U,EAASna,GAAOA,EAAMA,EAAM,EACrC,mBCRA,IAGInV,EAAO,CAAC,EAEZA,EALsB,EAAQ,MAEV6b,CAAgB,gBAGd,IAEtBtd,EAAOD,QAA2B,eAAjBmB,OAAOO,oBCPxB,IAAIujB,EAAU,EAAQ,MAElB1I,EAAUpb,OAEdlB,EAAOD,QAAU,SAAUsc,GACzB,GAA0B,WAAtB2I,EAAQ3I,GAAwB,MAAMvX,UAAU,6CACpD,OAAOwX,EAAQD,EACjB,aCPA,IAAIC,EAAUpb,OAEdlB,EAAOD,QAAU,SAAUsc,GACzB,IACE,OAAOC,EAAQD,EACjB,CAAE,MAAO1Q,GACP,MAAO,QACT,CACF,mBCRA,IAAIsR,EAAc,EAAQ,OAEtBkU,EAAK,EACLC,EAAU9mB,KAAK+mB,SACflqB,EAAW8V,EAAY,GAAI9V,UAE/BnH,EAAOD,QAAU,SAAU6W,GACzB,MAAO,gBAAqBlQ,IAARkQ,EAAoB,GAAKA,GAAO,KAAOzP,IAAWgqB,EAAKC,EAAS,GACtF,mBCPA,IAAIE,EAAgB,EAAQ,OAE5BtxB,EAAOD,QAAUuxB,IACXttB,OAAOuf,MACkB,iBAAnBvf,OAAOukB,0BCLnB,IAAI9J,EAAc,EAAQ,OACtBJ,EAAQ,EAAQ,OAIpBre,EAAOD,QAAU0e,GAAeJ,GAAM,WAEpC,OAGgB,IAHT5Z,OAAOmH,gBAAe,WAA0B,GAAG,YAAa,CACrE3G,MAAO,GACPwO,UAAU,IACT9O,SACL,qBCXA,IAAIma,EAAS,EAAQ,OACjB5C,EAAa,EAAQ,OAErB0K,EAAU9H,EAAO8H,QAErB5mB,EAAOD,QAAUmc,EAAW0K,IAAY,cAAcnlB,KAAKP,OAAO0lB,qBCLlE,IAAI9H,EAAS,EAAQ,OACjB0H,EAAS,EAAQ,OACjBlQ,EAAS,EAAQ,OACjB0Z,EAAM,EAAQ,OACdsB,EAAgB,EAAQ,OACxBzJ,EAAoB,EAAQ,OAE5B7jB,EAAS8a,EAAO9a,OAChButB,EAAwB/K,EAAO,OAC/BgL,EAAwB3J,EAAoB7jB,EAAY,KAAKA,EAASA,GAAUA,EAAOytB,eAAiBzB,EAE5GhwB,EAAOD,QAAU,SAAU4T,GAKvB,OAJG2C,EAAOib,EAAuB5d,KACjC4d,EAAsB5d,GAAQ2d,GAAiBhb,EAAOtS,EAAQ2P,GAC1D3P,EAAO2P,GACP6d,EAAsB,UAAY7d,IAC/B4d,EAAsB5d,EACjC,gCChBA,IAAIqS,EAAa,EAAQ,KACrB1P,EAAS,EAAQ,OACjBuI,EAA8B,EAAQ,OACtClD,EAAgB,EAAQ,MACxBjX,EAAiB,EAAQ,OACzBgtB,EAA4B,EAAQ,OACpCC,EAAgB,EAAQ,MACxBC,EAAoB,EAAQ,OAC5BC,EAA0B,EAAQ,OAClCC,EAAoB,EAAQ,OAC5BC,GAAoB,EAAQ,OAC5BtT,GAAc,EAAQ,OACtBoL,GAAU,EAAQ,OAEtB7pB,EAAOD,QAAU,SAAUiyB,EAAWC,EAAS5P,EAAQ6P,IACrD,IAAIC,GAAoB,kBACpBC,GAAmBF,GAAqB,EAAI,EAC5Cra,GAAOma,EAAUld,MAAM,KACvBud,GAAaxa,GAAKA,GAAKjV,OAAS,GAChC0vB,GAAgBtM,EAAW7a,MAAM,KAAM0M,IAE3C,GAAKya,GAAL,CAEA,IAAIC,GAAyBD,GAAc3tB,UAK3C,IAFKklB,IAAWvT,EAAOic,GAAwB,iBAAiBA,GAAuBlM,OAElFhE,EAAQ,OAAOiQ,GAEpB,IAAIE,GAAYxM,EAAW,SAEvByM,GAAeR,GAAQ,SAAU7lB,EAAG/F,GACtC,IAAIwN,EAAUge,EAAwBK,GAAqB7rB,EAAI+F,OAAG1F,GAC9DgX,EAASwU,GAAqB,IAAII,GAAclmB,GAAK,IAAIkmB,GAK7D,YAJgB5rB,IAAZmN,GAAuBgL,EAA4BnB,EAAQ,UAAW7J,GAC1Eke,GAAkBrU,EAAQ+U,GAAc/U,EAAO9J,MAAO,GAClDzT,MAAQwb,EAAc4W,GAAwBpyB,OAAOyxB,EAAkBlU,EAAQvd,KAAMsyB,IACrFprB,UAAUzE,OAASwvB,IAAkBN,EAAkBpU,EAAQrW,UAAU+qB,KACtE1U,CACT,IAcA,GAZA+U,GAAa9tB,UAAY4tB,GAEN,UAAfF,GACE3tB,EAAgBA,EAAe+tB,GAAcD,IAC5Cd,EAA0Be,GAAcD,GAAW,CAAE7e,MAAM,IACvD8K,IAAe0T,MAAqBG,KAC7CX,EAAcc,GAAcH,GAAeH,IAC3CR,EAAcc,GAAcH,GAAe,sBAG7CZ,EAA0Be,GAAcH,KAEnCzI,GAAS,IAER0I,GAAuB5e,OAAS0e,IAClCxT,EAA4B0T,GAAwB,OAAQF,IAE9DE,GAAuBhf,YAAckf,EACvC,CAAE,MAAO9mB,GAAqB,CAE9B,OAAO8mB,EAzCmB,CA0C5B,mBChEA,IAAI7I,EAAI,EAAQ,OACZ5D,EAAa,EAAQ,KACrB7a,EAAQ,EAAQ,OAChBkT,EAAQ,EAAQ,OAChBqU,EAAgC,EAAQ,OAExCC,EAAkB,iBAClBC,EAAkB5M,EAAW2M,GAE7BtQ,GAAUhE,GAAM,WAClB,OAA0C,IAAnCuU,EAAgB,CAAC,IAAI3f,OAAO,EACrC,KAAMoL,GAAM,WACV,OAAqE,IAA9DuU,EAAgB,CAAC,GAAID,EAAiB,CAAEtM,MAAO,IAAKA,KAC7D,IAGAuD,EAAE,CAAE9K,QAAQ,EAAMvL,aAAa,EAAMsf,MAAO,EAAGzP,OAAQf,GAAU,CAC/D5G,eAAgBiX,EAA8BC,GAAiB,SAAUG,GAEvE,OAAO,SAASrX,eAAexI,EAAQY,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CACzF,GAAGgb,GAAQ,mCCnBb,IAAIuH,EAAI,EAAQ,OACZjO,EAAgB,EAAQ,MACxB4C,EAAiB,EAAQ,KACzB7Z,EAAiB,EAAQ,OACzBgtB,EAA4B,EAAQ,OACpCpI,EAAS,EAAQ,OACjBzK,EAA8B,EAAQ,OACtCH,EAA2B,EAAQ,OACnCoT,EAAoB,EAAQ,OAC5BC,EAAoB,EAAQ,OAC5BgB,GAAU,EAAQ,OAClBlB,GAA0B,EAAQ,OAGlCxU,GAFkB,EAAQ,MAEVC,CAAgB,eAChCiE,GAAS/d,MACTP,GAAO,GAAGA,KAEV2vB,GAAkB,SAASnX,eAAexI,EAAQY,GACpD,IACIgQ,EADAhe,EAAa8V,EAAcqX,GAAyB7yB,MAEpDuE,EACFmf,EAAOnf,EAAe6c,KAAU1b,EAAa0Y,EAAepe,MAAQ6yB,KAEpEnP,EAAOhe,EAAa1F,KAAOmpB,EAAO0J,IAClCnU,EAA4BgF,EAAMxG,GAAe,eAEnC3W,IAAZmN,GAAuBgL,EAA4BgF,EAAM,UAAWgO,GAAwBhe,IAChGke,EAAkBlO,EAAM+O,GAAiB/O,EAAKjQ,MAAO,GACjDvM,UAAUzE,OAAS,GAAGkvB,EAAkBjO,EAAMxc,UAAU,IAC5D,IAAI4rB,EAAc,GAGlB,OAFAF,GAAQ9f,EAAQhQ,GAAM,CAAE4gB,KAAMoP,IAC9BpU,EAA4BgF,EAAM,SAAUoP,GACrCpP,CACT,EAEInf,EAAgBA,EAAekuB,GAAiBrR,IAC/CmQ,EAA0BkB,GAAiBrR,GAAQ,CAAE5N,MAAM,IAEhE,IAAIqf,GAA0BJ,GAAgBjuB,UAAY2kB,EAAO/H,GAAO5c,UAAW,CACjF4O,YAAamL,EAAyB,EAAGkU,IACzC/e,QAAS6K,EAAyB,EAAG,IACrC/K,KAAM+K,EAAyB,EAAG,oBAKpCkL,EAAE,CAAE9K,QAAQ,EAAMvL,aAAa,EAAMsf,MAAO,GAAK,CAC/CpX,eAAgBmX,sBChDlB,EAAQ,qCCAR,IAAIpW,EAAkB,EAAQ,OAC1B0W,EAAmB,EAAQ,OAC3B/N,EAAY,EAAQ,OACpBgO,EAAsB,EAAQ,OAC9BvnB,EAAiB,WACjBwnB,EAAiB,EAAQ,OACzBC,EAAyB,EAAQ,OACjCxJ,EAAU,EAAQ,OAClBpL,EAAc,EAAQ,OAEtB6U,EAAiB,iBACjBC,GAAmBJ,EAAoBzmB,IACvC8mB,GAAmBL,EAAoBhM,UAAUmM,GAYrDtzB,EAAOD,QAAUqzB,EAAe9vB,MAAO,SAAS,SAAUmwB,EAAUvK,GAClEqK,GAAiBpzB,KAAM,CACrByG,KAAM0sB,EACNpmB,OAAQsP,EAAgBiX,GACxBxc,MAAO,EACPiS,KAAMA,GAIV,IAAG,WACD,IAAIrC,EAAQ2M,GAAiBrzB,MACzB+M,EAAS2Z,EAAM3Z,OACfgc,EAAOrC,EAAMqC,KACbjS,EAAQ4P,EAAM5P,QAClB,OAAK/J,GAAU+J,GAAS/J,EAAOtK,QAC7BikB,EAAM3Z,YAASxG,EACR2sB,OAAuB3sB,GAAW,IAEhB2sB,EAAf,QAARnK,EAA8CjS,EACtC,UAARiS,EAAgDhc,EAAO+J,GAC7B,CAACA,EAAO/J,EAAO+J,KAFY,EAG3D,GAAG,UAKH,IAAIiU,GAAS/F,EAAUuO,UAAYvO,EAAU7hB,MAQ7C,GALA4vB,EAAiB,QACjBA,EAAiB,UACjBA,EAAiB,YAGZrJ,GAAWpL,GAA+B,WAAhByM,GAAOvX,KAAmB,IACvD/H,EAAesf,GAAQ,OAAQ,CAAEjmB,MAAO,UAC1C,CAAE,MAAO0G,GAAqB,mBC5D9B,IAAIie,EAAI,EAAQ,OACZ9K,EAAS,EAAQ,OACjB3T,EAAQ,EAAQ,OAChBunB,EAAgC,EAAQ,OAExCiB,EAAe,cACfC,EAAc9U,EAAO6U,GAErBtR,EAA4C,IAAnC7e,MAAM,IAAK,CAAE6iB,MAAO,IAAKA,MAElCwN,8BAAgC,SAAUxB,EAAYJ,GACxD,IAAIjV,EAAI,CAAC,EACTA,EAAEqV,GAAcK,EAA8BL,EAAYJ,EAAS5P,GACnEuH,EAAE,CAAE9K,QAAQ,EAAMvL,aAAa,EAAMsf,MAAO,EAAGzP,OAAQf,GAAUrF,EACnE,EAEI8W,mCAAqC,SAAUzB,EAAYJ,GAC7D,GAAI2B,GAAeA,EAAYvB,GAAa,CAC1C,IAAIrV,EAAI,CAAC,EACTA,EAAEqV,GAAcK,EAA8BiB,EAAe,IAAMtB,EAAYJ,EAAS5P,GACxFuH,EAAE,CAAE1c,OAAQymB,EAAc3Q,MAAM,EAAMzP,aAAa,EAAMsf,MAAO,EAAGzP,OAAQf,GAAUrF,EACvF,CACF,EAGA6W,8BAA8B,SAAS,SAAUf,GAC/C,OAAO,SAAStvB,MAAMqQ,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CACxE,IACAwsB,8BAA8B,aAAa,SAAUf,GACnD,OAAO,SAASiB,UAAUlgB,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CAC5E,IACAwsB,8BAA8B,cAAc,SAAUf,GACpD,OAAO,SAASvuB,WAAWsP,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CAC7E,IACAwsB,8BAA8B,kBAAkB,SAAUf,GACxD,OAAO,SAASkB,eAAengB,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CACjF,IACAwsB,8BAA8B,eAAe,SAAUf,GACrD,OAAO,SAASmB,YAAYpgB,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CAC9E,IACAwsB,8BAA8B,aAAa,SAAUf,GACnD,OAAO,SAAShuB,UAAU+O,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CAC5E,IACAwsB,8BAA8B,YAAY,SAAUf,GAClD,OAAO,SAASoB,SAASrgB,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CAC3E,IACAysB,mCAAmC,gBAAgB,SAAUhB,GAC3D,OAAO,SAASqB,aAAatgB,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CAC/E,IACAysB,mCAAmC,aAAa,SAAUhB,GACxD,OAAO,SAASsB,UAAUvgB,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CAC5E,IACAysB,mCAAmC,gBAAgB,SAAUhB,GAC3D,OAAO,SAASuB,aAAaxgB,GAAW,OAAO1I,EAAM2nB,EAAM3yB,KAAMkH,UAAY,CAC/E,qBCtDA,IAAIuiB,EAAI,EAAQ,OACZhU,EAAO,EAAQ,OAKnBgU,EAAE,CAAE1c,OAAQ,WAAY3B,OAAO,EAAM6X,OAAQtH,SAASlG,OAASA,GAAQ,CACrEA,KAAMA,qBCRR,IAAIgU,EAAI,EAAQ,OACZ3N,EAAS,EAAQ,OAKrB2N,EAAE,CAAE1c,OAAQ,SAAU8V,MAAM,EAAM6P,MAAO,EAAGzP,OAAQ3e,OAAOwX,SAAWA,GAAU,CAC9EA,OAAQA,kCCNV,IAAIuU,EAAS,gBACTrpB,EAAW,EAAQ,OACnBgsB,EAAsB,EAAQ,OAC9BC,EAAiB,EAAQ,OACzBC,EAAyB,EAAQ,OAEjCiB,EAAkB,kBAClBf,EAAmBJ,EAAoBzmB,IACvC8mB,EAAmBL,EAAoBhM,UAAUmN,GAIrDlB,EAAelyB,OAAQ,UAAU,SAAUuyB,GACzCF,EAAiBpzB,KAAM,CACrByG,KAAM0tB,EACNnvB,OAAQgC,EAASssB,GACjBxc,MAAO,GAIX,IAAG,SAASwR,OACV,IAGI8L,EAHA1N,EAAQ2M,EAAiBrzB,MACzBgF,EAAS0hB,EAAM1hB,OACf8R,EAAQ4P,EAAM5P,MAElB,OAAIA,GAAS9R,EAAOvC,OAAeywB,OAAuB3sB,GAAW,IACrE6tB,EAAQ/D,EAAOrrB,EAAQ8R,GACvB4P,EAAM5P,OAASsd,EAAM3xB,OACdywB,EAAuBkB,GAAO,GACvC,qBC7BA,EAAQ,uBCDR,EAAQ,OACR,IAAIC,EAAe,EAAQ,OACvB1V,EAAS,EAAQ,OACjBkG,EAAU,EAAQ,MAClBnG,EAA8B,EAAQ,OACtCsG,EAAY,EAAQ,OAGpB9H,EAFkB,EAAQ,MAEVC,CAAgB,eAEpC,IAAK,IAAImX,KAAmBD,EAAc,CACxC,IAAIE,EAAa5V,EAAO2V,GACpBE,EAAsBD,GAAcA,EAAW/vB,UAC/CgwB,GAAuB3P,EAAQ2P,KAAyBtX,GAC1DwB,EAA4B8V,EAAqBtX,EAAeoX,GAElEtP,EAAUsP,GAAmBtP,EAAU7hB,KACzC,mBChBA,EAAQ,OAER,IAAIkY,EAAS,EAAQ,OACrB,EAAQ,MAERxb,EAAOD,QAAUyb,mBCNjB,IAAIA,EAAS,EAAQ,OAErBxb,EAAOD,QAAUyb,mBCFjB,IAAIA,EAAS,EAAQ,OAErBxb,EAAOD,QAAUyb,wBCDf,IAAS3b,SAYQ,IAAV,EAAAimB,EAAwB,EAAAA,EAAS3lB,KARxCH,EAAOD,QAQuC,SAASF,GAExD,GAAIA,EAAK+0B,KAAO/0B,EAAK+0B,IAAIC,OACxB,OAAOh1B,EAAK+0B,IAAIC,OAIjB,IAAIC,UAAY,SAAS7vB,GACxB,GAAwB,GAApBoC,UAAUzE,OACb,MAAM,IAAIkC,UAAU,sCAQrB,IANA,IAGIiwB,EAHA5vB,EAASjE,OAAO+D,GAChBrC,EAASuC,EAAOvC,OAChBqU,GAAS,EAETyG,EAAS,GACTsX,EAAgB7vB,EAAO1C,WAAW,KAC7BwU,EAAQrU,GAOA,IANhBmyB,EAAW5vB,EAAO1C,WAAWwU,IA2B5ByG,GAbCqX,GAAY,GAAUA,GAAY,IAAuB,KAAZA,GAGpC,GAAT9d,GAAc8d,GAAY,IAAUA,GAAY,IAIvC,GAAT9d,GACA8d,GAAY,IAAUA,GAAY,IACjB,IAAjBC,EAIS,KAAOD,EAAS5tB,SAAS,IAAM,IAOhC,GAAT8P,GACU,GAAVrU,GACY,IAAZmyB,KAWAA,GAAY,KACA,IAAZA,GACY,IAAZA,GACAA,GAAY,IAAUA,GAAY,IAClCA,GAAY,IAAUA,GAAY,IAClCA,GAAY,IAAUA,GAAY,KAdxB,KAAO5vB,EAAOqrB,OAAOvZ,GAiBrB9R,EAAOqrB,OAAOvZ,GAhDxByG,GAAU,IAyDZ,OAAOA,CACR,EAOA,OALK7d,EAAK+0B,MACT/0B,EAAK+0B,IAAM,CAAC,GAGb/0B,EAAK+0B,IAAIC,OAASC,UACXA,SAER,CApGmBh1B,CAAQD,uDCwB3B,SAASo1B,gBAAgB5sB,GACxB,OACCA,aAAepE,GACZoE,aAAe4P,MACf5P,aAAe6sB,MAEpB,CAEA,SAASC,mBAAmB9sB,GAC3B,GAAIA,aAAepE,EAAQ,CAC1B,IAAIoI,EAAIpI,EAAOE,MACZF,EAAOE,MAAMkE,EAAIzF,QACjB,IAAIqB,EAAOoE,EAAIzF,QAElB,OADAyF,EAAIvC,KAAKuG,GACFA,CACR,CAAO,GAAIhE,aAAe4P,KACzB,OAAO,IAAIA,KAAK5P,EAAI+sB,WACd,GAAI/sB,aAAe6sB,OACzB,OAAO,IAAIA,OAAO7sB,GAElB,MAAM,IAAI7E,MAAM,uBAElB,CAKA,SAAS6xB,eAAelzB,GACvB,IAAImzB,EAAQ,GAcZ,OAbAnzB,EAAIkqB,SAAQ,SAAUkJ,EAAMte,GACP,iBAATse,GAA8B,OAATA,EAC3BjyB,MAAMuD,QAAQ0uB,GACjBD,EAAMre,GAASoe,eAAeE,GACpBN,gBAAgBM,GAC1BD,EAAMre,GAASke,mBAAmBI,GAElCD,EAAMre,GAASue,EAAW,CAAC,EAAGD,GAG/BD,EAAMre,GAASse,CAEjB,IACOD,CACR,CAEA,SAASG,gBAAgB9W,EAAQ+W,GAChC,MAAoB,cAAbA,OAA2BhvB,EAAYiY,EAAO+W,EACtD,CAWA,IAAIF,EAAax1B,EAAOD,QAAU,WACjC,GAAIsH,UAAUzE,OAAS,GAA6B,iBAAjByE,UAAU,GAC5C,OAAO,EAGR,GAAIA,UAAUzE,OAAS,EACtB,OAAOyE,UAAU,GAGlB,IAKIgB,EAAK0M,EALL7H,EAAS7F,UAAU,GAoDvB,OAjDW/D,MAAMqB,UAAUa,MAAMgD,KAAKnB,UAAW,GAI5CglB,SAAQ,SAAU9lB,GAEH,iBAARA,GAA4B,OAARA,GAAgBjD,MAAMuD,QAAQN,IAI7D9B,OAAOyZ,KAAK3X,GAAK8lB,SAAQ,SAAUzV,GAKlC,OAJA7B,EAAM0gB,gBAAgBvoB,EAAQ0J,IAC9BvO,EAAMotB,gBAAgBlvB,EAAKqQ,MAGf1J,OACX,EAMyB,iBAAR7E,GAA4B,OAARA,OACrC6E,EAAO0J,GAAOvO,GAIJ/E,MAAMuD,QAAQwB,QACxB6E,EAAO0J,GAAOye,eAAehtB,IAInB4sB,gBAAgB5sB,QAC1B6E,EAAO0J,GAAOue,mBAAmB9sB,IAIR,iBAAR0M,GAA4B,OAARA,GAAgBzR,MAAMuD,QAAQkO,QACnE7H,EAAO0J,GAAO4e,EAAW,CAAC,EAAGntB,SAK7B6E,EAAO0J,GAAO4e,EAAWzgB,EAAK1M,GAGhC,GACD,IAEO6E,CACR,yBCnJA,IAAIyoB,EAAoB,SAASA,kBAAkB1wB,GAClD,OAID,SAAS2wB,gBAAgB3wB,GACxB,QAASA,GAA0B,iBAAVA,CAC1B,CANQ2wB,CAAgB3wB,KAQxB,SAAS4wB,UAAU5wB,GAClB,IAAI6wB,EAAcrxB,OAAOE,UAAUwC,SAASqB,KAAKvD,GAEjD,MAAuB,oBAAhB6wB,GACa,kBAAhBA,GAQL,SAASC,eAAe9wB,GACvB,OAAOA,EAAM+wB,WAAaC,CAC3B,CATKF,CAAe9wB,EACpB,CAbM4wB,CAAU5wB,EAChB,EAeA,IACIgxB,EADiC,mBAAXjyB,QAAyBA,OAAOkyB,IAClBlyB,OAAOkyB,IAAI,iBAAmB,MAUtE,SAASC,8BAA8BlxB,EAAO8R,GAC7C,OAA0B,IAAlBA,EAAQue,OAAmBve,EAAQ4e,kBAAkB1wB,GAC1DmxB,UANJ,SAASC,YAAYhuB,GACpB,OAAO/E,MAAMuD,QAAQwB,GAAO,GAAK,CAAC,CACnC,CAIcguB,CAAYpxB,GAAQA,EAAO8R,GACrC9R,CACJ,CAEA,SAASqxB,kBAAkBppB,EAAQ8Q,EAAQjH,GAC1C,OAAO7J,EAAOX,OAAOyR,GAAQuY,KAAI,SAASC,GACzC,OAAOL,8BAA8BK,EAASzf,EAC/C,GACD,CAkBA,SAAS0f,QAAQvpB,GAChB,OAAOzI,OAAOyZ,KAAKhR,GAAQX,OAT5B,SAASmqB,gCAAgCxpB,GACxC,OAAOzI,OAAOgoB,sBACXhoB,OAAOgoB,sBAAsBvf,GAAQypB,QAAO,SAASvK,GACtD,OAAO3nB,OAAOwhB,qBAAqBzd,KAAK0E,EAAQkf,EACjD,IACE,EACJ,CAGmCsK,CAAgCxpB,GACnE,CAEA,SAAS0pB,mBAAmBjY,EAAQ+W,GACnC,IACC,OAAOA,KAAY/W,CACpB,CAAE,MAAMkY,GACP,OAAO,CACR,CACD,CASA,SAASC,YAAY5pB,EAAQ8Q,EAAQjH,GACpC,IAAIggB,EAAc,CAAC,EAiBnB,OAhBIhgB,EAAQ4e,kBAAkBzoB,IAC7BupB,QAAQvpB,GAAQmf,SAAQ,SAASzV,GAChCmgB,EAAYngB,GAAOuf,8BAA8BjpB,EAAO0J,GAAMG,EAC/D,IAED0f,QAAQzY,GAAQqO,SAAQ,SAASzV,IAblC,SAASogB,iBAAiB9pB,EAAQ0J,GACjC,OAAOggB,mBAAmB1pB,EAAQ0J,MAC5BnS,OAAO8R,eAAe/N,KAAK0E,EAAQ0J,IACpCnS,OAAOwhB,qBAAqBzd,KAAK0E,EAAQ0J,GAC/C,EAUMogB,CAAiB9pB,EAAQ0J,KAIzBggB,mBAAmB1pB,EAAQ0J,IAAQG,EAAQ4e,kBAAkB3X,EAAOpH,IACvEmgB,EAAYngB,GAhDf,SAASqgB,iBAAiBrgB,EAAKG,GAC9B,IAAKA,EAAQmgB,YACZ,OAAOd,UAER,IAAIc,EAAcngB,EAAQmgB,YAAYtgB,GACtC,MAA8B,mBAAhBsgB,EAA6BA,EAAcd,SAC1D,CA0CsBa,CAAiBrgB,EAAKG,EAAtBkgB,CAA+B/pB,EAAO0J,GAAMoH,EAAOpH,GAAMG,GAE5EggB,EAAYngB,GAAOuf,8BAA8BnY,EAAOpH,GAAMG,GAEhE,IACOggB,CACR,CAEA,SAASX,UAAUlpB,EAAQ8Q,EAAQjH,IAClCA,EAAUA,GAAW,CAAC,GACdogB,WAAapgB,EAAQogB,YAAcb,kBAC3Cvf,EAAQ4e,kBAAoB5e,EAAQ4e,mBAAqBA,EAGzD5e,EAAQof,8BAAgCA,8BAExC,IAAIiB,EAAgB9zB,MAAMuD,QAAQmX,GAIlC,OAFgCoZ,IADZ9zB,MAAMuD,QAAQqG,GAKvBkqB,EACHrgB,EAAQogB,WAAWjqB,EAAQ8Q,EAAQjH,GAEnC+f,YAAY5pB,EAAQ8Q,EAAQjH,GAJ5Bof,8BAA8BnY,EAAQjH,EAM/C,CAEAqf,UAAU5c,IAAM,SAAS6d,aAAanwB,EAAO6P,GAC5C,IAAKzT,MAAMuD,QAAQK,GAClB,MAAM,IAAI1D,MAAM,qCAGjB,OAAO0D,EAAMowB,QAAO,SAASC,EAAM9O,GAClC,OAAO2N,UAAUmB,EAAM9O,EAAM1R,EAC9B,GAAG,CAAC,EACL,EAEA,IAAIygB,EAAcpB,UAElBp2B,EAAOD,QAAUy3B,qBCjIgDx3B,EAAOD,QAG/D,WAAe,aAEtB,MAAM,QACJorB,EAAO,eACPzmB,EAAc,SACd+yB,EAAQ,eACRlZ,EAAc,yBACdH,GACE3Z,OACJ,IAAI,OACFizB,EAAM,KACNC,EAAI,OACJrO,GACE7kB,QAEA,MACF0G,EAAK,UACLoZ,GACqB,oBAAZZ,SAA2BA,QAEjC+T,IACHA,EAAS,SAASA,OAAOrrB,GACvB,OAAOA,CACT,GAGGsrB,IACHA,EAAO,SAASA,KAAKtrB,GACnB,OAAOA,CACT,GAGGlB,IACHA,EAAQ,SAASA,MAAMysB,EAAKC,EAAWxT,GACrC,OAAOuT,EAAIzsB,MAAM0sB,EAAWxT,EAC9B,GAGGE,IACHA,EAAY,SAASA,UAAUuT,EAAMzT,GACnC,OAAO,IAAIyT,KAAQzT,EACrB,GAGF,MAAM0T,EAAeC,QAAQ10B,MAAMqB,UAAU0nB,SACvC4L,EAAWD,QAAQ10B,MAAMqB,UAAUuzB,KACnCC,EAAYH,QAAQ10B,MAAMqB,UAAU1B,MACpCm1B,GAAoBJ,QAAQ92B,OAAOyD,UAAU8C,aAC7C4wB,GAAiBL,QAAQ92B,OAAOyD,UAAUwC,UAC1CmxB,GAAcN,QAAQ92B,OAAOyD,UAAU3D,OACvCu3B,GAAgBP,QAAQ92B,OAAOyD,UAAU5D,SACzCy3B,GAAgBR,QAAQ92B,OAAOyD,UAAUrD,SACzCm3B,GAAaT,QAAQ92B,OAAOyD,UAAUvD,MACtCs3B,GAAaV,QAAQ9C,OAAOvwB,UAAUlD,MACtCk3B,GAAkBC,YAAY9zB,WAQpC,SAASkzB,QAAQ5hB,GACf,OAAO,SAAUyiB,GACf,IAAK,IAAIC,EAAOzxB,UAAUzE,OAAQyhB,EAAO,IAAI/gB,MAAMw1B,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IAClG1U,EAAK0U,EAAO,GAAK1xB,UAAU0xB,GAG7B,OAAO5tB,EAAMiL,EAAMyiB,EAASxU,EAC9B,CACF,CASA,SAASuU,YAAYxiB,GACnB,OAAO,WACL,IAAK,IAAI4iB,EAAQ3xB,UAAUzE,OAAQyhB,EAAO,IAAI/gB,MAAM01B,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF5U,EAAK4U,GAAS5xB,UAAU4xB,GAG1B,OAAO1U,EAAUnO,EAAMiO,EACzB,CACF,CAWA,SAAS6U,SAASxsB,EAAKxF,GACrB,IAAIiyB,EAAoB9xB,UAAUzE,OAAS,QAAsB8D,IAAjBW,UAAU,GAAmBA,UAAU,GAAK+wB,GAExF1zB,GAIFA,EAAegI,EAAK,MAGtB,IAAI0sB,EAAIlyB,EAAMtE,OAEd,KAAOw2B,KAAK,CACV,IAAI5C,EAAUtvB,EAAMkyB,GAEpB,GAAuB,iBAAZ5C,EAAsB,CAC/B,MAAM6C,EAAYF,EAAkB3C,GAEhC6C,IAAc7C,IAEXiB,EAASvwB,KACZA,EAAMkyB,GAAKC,GAGb7C,EAAU6C,EAEd,CAEA3sB,EAAI8pB,IAAW,CACjB,CAEA,OAAO9pB,CACT,CASA,SAAS4oB,MAAM3W,GACb,MAAM2a,EAAYhQ,EAAO,MAEzB,IAAK,MAAOoM,EAAUzwB,KAAUkmB,EAAQxM,QACajY,IAA/C0X,EAAyBO,EAAQ+W,KACnC4D,EAAU5D,GAAYzwB,GAI1B,OAAOq0B,CACT,CASA,SAASC,aAAa5a,EAAQ6a,GAC5B,KAAkB,OAAX7a,GAAiB,CACtB,MAAM8a,EAAOrb,EAAyBO,EAAQ6a,GAE9C,GAAIC,EAAM,CACR,GAAIA,EAAK3tB,IACP,OAAOksB,QAAQyB,EAAK3tB,KAGtB,GAA0B,mBAAf2tB,EAAKx0B,MACd,OAAO+yB,QAAQyB,EAAKx0B,MAExB,CAEA0Z,EAASJ,EAAeI,EAC1B,CAEA,SAAS+a,cAAclD,GAErB,OADA9qB,QAAQ4O,KAAK,qBAAsBkc,GAC5B,IACT,CAEA,OAAOkD,aACT,CAEA,MAAMC,GAASjC,EAAO,CAAC,IAAK,OAAQ,UAAW,UAAW,OAAQ,UAAW,QAAS,QAAS,IAAK,MAAO,MAAO,MAAO,QAAS,aAAc,OAAQ,KAAM,SAAU,SAAU,UAAW,SAAU,OAAQ,OAAQ,MAAO,WAAY,UAAW,OAAQ,WAAY,KAAM,YAAa,MAAO,UAAW,MAAO,SAAU,MAAO,MAAO,KAAM,KAAM,UAAW,KAAM,WAAY,aAAc,SAAU,OAAQ,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,SAAU,SAAU,KAAM,OAAQ,IAAK,MAAO,QAAS,MAAO,MAAO,QAAS,SAAU,KAAM,OAAQ,MAAO,OAAQ,UAAW,OAAQ,WAAY,QAAS,MAAO,OAAQ,KAAM,WAAY,SAAU,SAAU,IAAK,UAAW,MAAO,WAAY,IAAK,KAAM,KAAM,OAAQ,IAAK,OAAQ,UAAW,SAAU,SAAU,QAAS,SAAU,SAAU,OAAQ,SAAU,SAAU,QAAS,MAAO,UAAW,MAAO,QAAS,QAAS,KAAM,WAAY,WAAY,QAAS,KAAM,QAAS,OAAQ,KAAM,QAAS,KAAM,IAAK,KAAM,MAAO,QAAS,QAEn+BkC,GAAQlC,EAAO,CAAC,MAAO,IAAK,WAAY,cAAe,eAAgB,eAAgB,gBAAiB,mBAAoB,SAAU,WAAY,OAAQ,OAAQ,UAAW,SAAU,OAAQ,IAAK,QAAS,WAAY,QAAS,QAAS,OAAQ,iBAAkB,SAAU,OAAQ,WAAY,QAAS,OAAQ,UAAW,UAAW,WAAY,iBAAkB,OAAQ,OAAQ,QAAS,SAAU,SAAU,OAAQ,WAAY,QAAS,OAAQ,QAAS,OAAQ,UAC3cmC,GAAanC,EAAO,CAAC,UAAW,gBAAiB,sBAAuB,cAAe,mBAAoB,oBAAqB,oBAAqB,iBAAkB,eAAgB,UAAW,UAAW,UAAW,UAAW,UAAW,iBAAkB,UAAW,UAAW,cAAe,eAAgB,WAAY,eAAgB,qBAAsB,cAAe,SAAU,iBAKhYoC,GAAgBpC,EAAO,CAAC,UAAW,gBAAiB,SAAU,UAAW,YAAa,mBAAoB,iBAAkB,gBAAiB,gBAAiB,gBAAiB,QAAS,YAAa,OAAQ,eAAgB,YAAa,UAAW,gBAAiB,SAAU,MAAO,aAAc,UAAW,QAChTqC,GAAWrC,EAAO,CAAC,OAAQ,WAAY,SAAU,UAAW,QAAS,SAAU,KAAM,aAAc,gBAAiB,KAAM,KAAM,QAAS,UAAW,WAAY,QAAS,OAAQ,KAAM,SAAU,QAAS,SAAU,OAAQ,OAAQ,UAAW,SAAU,MAAO,QAAS,MAAO,SAAU,aAAc,gBAGxSsC,GAAmBtC,EAAO,CAAC,UAAW,cAAe,aAAc,WAAY,YAAa,UAAW,UAAW,SAAU,SAAU,QAAS,YAAa,aAAc,iBAAkB,cAAe,SAC3M/e,GAAO+e,EAAO,CAAC,UAEf5K,GAAO4K,EAAO,CAAC,SAAU,SAAU,QAAS,MAAO,iBAAkB,eAAgB,uBAAwB,WAAY,aAAc,UAAW,SAAU,UAAW,cAAe,cAAe,UAAW,OAAQ,QAAS,QAAS,QAAS,OAAQ,UAAW,WAAY,eAAgB,SAAU,cAAe,WAAY,WAAY,UAAW,MAAO,WAAY,0BAA2B,wBAAyB,WAAY,YAAa,UAAW,eAAgB,OAAQ,MAAO,UAAW,SAAU,SAAU,OAAQ,OAAQ,WAAY,KAAM,YAAa,YAAa,QAAS,OAAQ,QAAS,OAAQ,OAAQ,UAAW,OAAQ,MAAO,MAAO,YAAa,QAAS,SAAU,MAAO,YAAa,WAAY,QAAS,OAAQ,QAAS,UAAW,aAAc,SAAU,OAAQ,UAAW,UAAW,cAAe,cAAe,SAAU,UAAW,UAAW,aAAc,WAAY,MAAO,WAAY,MAAO,WAAY,OAAQ,OAAQ,UAAW,aAAc,QAAS,WAAY,QAAS,OAAQ,QAAS,OAAQ,UAAW,QAAS,MAAO,SAAU,OAAQ,QAAS,UAAW,WAAY,QAAS,YAAa,OAAQ,SAAU,SAAU,QAAS,QAAS,QAAS,SACjqCuC,GAAMvC,EAAO,CAAC,gBAAiB,aAAc,WAAY,qBAAsB,SAAU,gBAAiB,gBAAiB,UAAW,gBAAiB,iBAAkB,QAAS,OAAQ,KAAM,QAAS,OAAQ,gBAAiB,YAAa,YAAa,QAAS,sBAAuB,8BAA+B,gBAAiB,kBAAmB,KAAM,KAAM,IAAK,KAAM,KAAM,kBAAmB,YAAa,UAAW,UAAW,MAAO,WAAY,YAAa,MAAO,OAAQ,eAAgB,YAAa,SAAU,cAAe,cAAe,gBAAiB,cAAe,YAAa,mBAAoB,eAAgB,aAAc,eAAgB,cAAe,KAAM,KAAM,KAAM,KAAM,aAAc,WAAY,gBAAiB,oBAAqB,SAAU,OAAQ,KAAM,kBAAmB,KAAM,MAAO,IAAK,KAAM,KAAM,KAAM,KAAM,UAAW,YAAa,aAAc,WAAY,OAAQ,eAAgB,iBAAkB,eAAgB,mBAAoB,iBAAkB,QAAS,aAAc,aAAc,eAAgB,eAAgB,cAAe,cAAe,mBAAoB,YAAa,MAAO,OAAQ,QAAS,SAAU,OAAQ,MAAO,OAAQ,aAAc,SAAU,WAAY,UAAW,QAAS,SAAU,cAAe,SAAU,WAAY,cAAe,OAAQ,aAAc,sBAAuB,mBAAoB,eAAgB,SAAU,gBAAiB,sBAAuB,iBAAkB,IAAK,KAAM,KAAM,SAAU,OAAQ,OAAQ,cAAe,YAAa,UAAW,SAAU,SAAU,QAAS,OAAQ,kBAAmB,mBAAoB,mBAAoB,eAAgB,cAAe,eAAgB,cAAe,aAAc,eAAgB,mBAAoB,oBAAqB,iBAAkB,kBAAmB,oBAAqB,iBAAkB,SAAU,eAAgB,QAAS,eAAgB,iBAAkB,WAAY,UAAW,UAAW,YAAa,mBAAoB,cAAe,kBAAmB,iBAAkB,aAAc,OAAQ,KAAM,KAAM,UAAW,SAAU,UAAW,aAAc,UAAW,aAAc,gBAAiB,gBAAiB,QAAS,eAAgB,OAAQ,eAAgB,mBAAoB,mBAAoB,IAAK,KAAM,KAAM,QAAS,IAAK,KAAM,KAAM,IAAK,eAC9vEwC,GAASxC,EAAO,CAAC,SAAU,cAAe,QAAS,WAAY,QAAS,eAAgB,cAAe,aAAc,aAAc,QAAS,MAAO,UAAW,eAAgB,WAAY,QAAS,QAAS,SAAU,OAAQ,KAAM,UAAW,SAAU,gBAAiB,SAAU,SAAU,iBAAkB,YAAa,WAAY,cAAe,UAAW,UAAW,gBAAiB,WAAY,WAAY,OAAQ,WAAY,WAAY,aAAc,UAAW,SAAU,SAAU,cAAe,gBAAiB,uBAAwB,YAAa,YAAa,aAAc,WAAY,iBAAkB,iBAAkB,YAAa,UAAW,QAAS,UACrpByC,GAAMzC,EAAO,CAAC,aAAc,SAAU,cAAe,YAAa,gBAElE0C,GAAgBzC,EAAK,6BAErB0C,GAAW1C,EAAK,yBAChB2C,GAAc3C,EAAK,iBACnB4C,GAAY5C,EAAK,8BAEjB6C,GAAY7C,EAAK,kBAEjB8C,GAAiB9C,EAAK,6FAEtB+C,GAAoB/C,EAAK,yBACzBgD,GAAkBhD,EAAK,+DAEvBiD,GAAejD,EAAK,WAE1B,IAAIkD,GAA2Bp2B,OAAOizB,OAAO,CAC3CjI,UAAW,KACX2K,cAAeA,GACfC,SAAUA,GACVC,YAAaA,GACbC,UAAWA,GACXC,UAAWA,GACXC,eAAgBA,GAChBC,kBAAmBA,GACnBC,gBAAiBA,GACjBC,aAAcA,KAGhB,MAAME,GAAY,SAASA,YACzB,MAAyB,oBAAXvgB,OAAyB,KAAOA,MAChD,EAWMwgB,GAA4B,SAASA,0BAA0BC,EAAcC,GACjF,GAA4B,iBAAjBD,GAAkE,mBAA9BA,EAAaE,aAC1D,OAAO,KAMT,IAAIC,EAAS,KACb,MAAMC,EAAY,wBAEdH,GAAqBA,EAAkBI,aAAaD,KACtDD,EAASF,EAAkBK,aAAaF,IAG1C,MAAMG,EAAa,aAAeJ,EAAS,IAAMA,EAAS,IAE1D,IACE,OAAOH,EAAaE,aAAaK,EAAY,CAC3CC,WAAW1O,GACFA,EAGT2O,gBAAgBC,GACPA,GAIb,CAAE,MAAO7E,GAKP,OADAnrB,QAAQ4O,KAAK,uBAAyBihB,EAAa,0BAC5C,IACT,CACF,EAEA,SAASI,kBACP,IAAIphB,EAASlT,UAAUzE,OAAS,QAAsB8D,IAAjBW,UAAU,GAAmBA,UAAU,GAAKyzB,KAEjF,MAAMc,UAAY/7B,GAAQ87B,gBAAgB97B,GAe1C,GARA+7B,UAAU3a,QAAU,QAMpB2a,UAAUC,QAAU,IAEfthB,IAAWA,EAAOtB,UAAyC,IAA7BsB,EAAOtB,SAAS6iB,SAIjD,OADAF,UAAUG,aAAc,EACjBH,UAGT,IAAI,SACF3iB,GACEsB,EACJ,MAAMyhB,EAAmB/iB,EACnBgjB,EAAgBD,EAAiBC,eACjC,iBACJC,EAAgB,oBAChBC,EAAmB,KACnBC,EAAI,QACJC,GAAO,WACPC,GAAU,aACVrc,GAAe1F,EAAO0F,cAAgB1F,EAAOgiB,gBAAe,gBAC5D1c,GAAe,UACf2c,GAAS,aACTxB,IACEzgB,EACEkiB,GAAmBJ,GAAQ13B,UAC3B+3B,GAAYnD,aAAakD,GAAkB,aAC3CE,GAAiBpD,aAAakD,GAAkB,eAChDG,GAAgBrD,aAAakD,GAAkB,cAC/CI,GAAgBtD,aAAakD,GAAkB,cAOrD,GAAmC,mBAAxBN,EAAoC,CAC7C,MAAMW,EAAW7jB,EAASG,cAAc,YAEpC0jB,EAASzP,SAAWyP,EAASzP,QAAQ0P,gBACvC9jB,EAAW6jB,EAASzP,QAAQ0P,cAEhC,CAEA,IAAIC,GACAC,GAAY,GAChB,MAAM,eACJC,GAAc,mBACdC,GAAkB,uBAClBC,GAAsB,qBACtBC,IACEpkB,GACE,WACJqkB,IACEtB,EACJ,IAAIuB,GAAQ,CAAC,EAKb3B,UAAUG,YAAiC,mBAAZ5Q,GAAmD,mBAAlB0R,IAAgCK,SAAwDx2B,IAAtCw2B,GAAeM,mBACjI,MAAM,cACJpD,GAAa,SACbC,GAAQ,YACRC,GAAW,UACXC,GAAS,UACTC,GAAS,kBACTE,GAAiB,gBACjBC,IACEE,GACJ,IACEJ,eAAgBgD,IACd5C,GAQA6C,GAAe,KACnB,MAAMC,GAAuBzE,SAAS,CAAC,EAAG,IAAIS,MAAWC,MAAUC,MAAeE,MAAaphB,KAG/F,IAAIilB,GAAe,KACnB,MAAMC,GAAuB3E,SAAS,CAAC,EAAG,IAAIpM,MAASmN,MAAQC,MAAWC,KAQ1E,IAAI2D,GAA0Br5B,OAAOkzB,KAAKrO,EAAO,KAAM,CACrDyU,aAAc,CACZtqB,UAAU,EACVC,cAAc,EACd7H,YAAY,EACZ5G,MAAO,MAET+4B,mBAAoB,CAClBvqB,UAAU,EACVC,cAAc,EACd7H,YAAY,EACZ5G,MAAO,MAETg5B,+BAAgC,CAC9BxqB,UAAU,EACVC,cAAc,EACd7H,YAAY,EACZ5G,OAAO,MAKPi5B,GAAc,KAGdC,GAAc,KAGdC,IAAkB,EAGlBC,IAAkB,EAGlBC,IAA0B,EAI1BC,IAA2B,EAK3BC,IAAqB,EAGrBC,IAAiB,EAGjBC,IAAa,EAIbC,IAAa,EAMbC,IAAa,EAIbC,IAAsB,EAItBC,IAAsB,EAKtBC,IAAe,EAefC,IAAuB,EAC3B,MAAMC,GAA8B,gBAGpC,IAAIC,IAAe,EAIfC,IAAW,EAGXC,GAAe,CAAC,EAGhBC,GAAkB,KACtB,MAAMC,GAA0BpG,SAAS,CAAC,EAAG,CAAC,iBAAkB,QAAS,WAAY,OAAQ,gBAAiB,OAAQ,SAAU,OAAQ,KAAM,KAAM,KAAM,KAAM,QAAS,UAAW,WAAY,WAAY,YAAa,SAAU,QAAS,MAAO,WAAY,QAAS,QAAS,QAAS,QAG1R,IAAIqG,GAAgB,KACpB,MAAMC,GAAwBtG,SAAS,CAAC,EAAG,CAAC,QAAS,QAAS,MAAO,SAAU,QAAS,UAGxF,IAAIuG,GAAsB,KAC1B,MAAMC,GAA8BxG,SAAS,CAAC,EAAG,CAAC,MAAO,QAAS,MAAO,KAAM,QAAS,OAAQ,UAAW,cAAe,OAAQ,UAAW,QAAS,QAAS,QAAS,UAClKyG,GAAmB,qCACnBC,GAAgB,6BAChBC,GAAiB,+BAGvB,IAAIC,GAAYD,GACZE,IAAiB,EAGjBC,GAAqB,KACzB,MAAMC,GAA6B/G,SAAS,CAAC,EAAG,CAACyG,GAAkBC,GAAeC,IAAiBxH,IAGnG,IAAI6H,GAAoB,KACxB,MAAMC,GAA+B,CAAC,wBAAyB,aACzDC,GAA4B,YAClC,IAAIjH,GAAoB,KAGpBkH,GAAS,KAKb,MAAMC,GAAcrnB,EAASG,cAAc,QAErCmnB,GAAoB,SAASA,kBAAkBC,GACnD,OAAOA,aAAqBtL,QAAUsL,aAAqB1kB,QAC7D,EASM2kB,GAAe,SAASA,eAC5B,IAAIC,EAAMr5B,UAAUzE,OAAS,QAAsB8D,IAAjBW,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAE/E,IAAIg5B,IAAUA,KAAWK,EAAzB,CAuKA,GAjKKA,GAAsB,iBAARA,IACjBA,EAAM,CAAC,GAKTA,EAAMpL,MAAMoL,GACZR,GACqEA,IAAJ,IAAjEC,GAA6B7+B,QAAQo/B,EAAIR,mBAAgDE,GAAgDM,EAAIR,kBAE7I/G,GAA0C,0BAAtB+G,GAAgD7H,GAAiBD,GAGrFsF,GAAe,iBAAkBgD,EAAMxH,SAAS,CAAC,EAAGwH,EAAIhD,aAAcvE,IAAqBwE,GAC3FC,GAAe,iBAAkB8C,EAAMxH,SAAS,CAAC,EAAGwH,EAAI9C,aAAczE,IAAqB0E,GAC3FmC,GAAqB,uBAAwBU,EAAMxH,SAAS,CAAC,EAAGwH,EAAIV,mBAAoB3H,IAAkB4H,GAC1GR,GAAsB,sBAAuBiB,EAAMxH,SAAS5D,MAAMoK,IAClEgB,EAAIC,kBACJxH,IAEEuG,GACFH,GAAgB,sBAAuBmB,EAAMxH,SAAS5D,MAAMkK,IAC5DkB,EAAIE,kBACJzH,IAEEqG,GACFH,GAAkB,oBAAqBqB,EAAMxH,SAAS,CAAC,EAAGwH,EAAIrB,gBAAiBlG,IAAqBmG,GACpGpB,GAAc,gBAAiBwC,EAAMxH,SAAS,CAAC,EAAGwH,EAAIxC,YAAa/E,IAAqB,CAAC,EACzFgF,GAAc,gBAAiBuC,EAAMxH,SAAS,CAAC,EAAGwH,EAAIvC,YAAahF,IAAqB,CAAC,EACzFiG,GAAe,iBAAkBsB,GAAMA,EAAItB,aAC3ChB,IAA0C,IAAxBsC,EAAItC,gBAEtBC,IAA0C,IAAxBqC,EAAIrC,gBAEtBC,GAA0BoC,EAAIpC,0BAA2B,EAEzDC,IAA4D,IAAjCmC,EAAInC,yBAE/BC,GAAqBkC,EAAIlC,qBAAsB,EAE/CC,GAAiBiC,EAAIjC,iBAAkB,EAEvCG,GAAa8B,EAAI9B,aAAc,EAE/BC,GAAsB6B,EAAI7B,sBAAuB,EAEjDC,GAAsB4B,EAAI5B,sBAAuB,EAEjDH,GAAa+B,EAAI/B,aAAc,EAE/BI,IAAoC,IAArB2B,EAAI3B,aAEnBC,GAAuB0B,EAAI1B,uBAAwB,EAEnDE,IAAoC,IAArBwB,EAAIxB,aAEnBC,GAAWuB,EAAIvB,WAAY,EAE3B1B,GAAmBiD,EAAIG,oBAAsBpG,GAC7CqF,GAAYY,EAAIZ,WAAaD,GAC7B/B,GAA0B4C,EAAI5C,yBAA2B,CAAC,EAEtD4C,EAAI5C,yBAA2ByC,GAAkBG,EAAI5C,wBAAwBC,gBAC/ED,GAAwBC,aAAe2C,EAAI5C,wBAAwBC,cAGjE2C,EAAI5C,yBAA2ByC,GAAkBG,EAAI5C,wBAAwBE,sBAC/EF,GAAwBE,mBAAqB0C,EAAI5C,wBAAwBE,oBAGvE0C,EAAI5C,yBAAiG,kBAA/D4C,EAAI5C,wBAAwBG,iCACpEH,GAAwBG,+BAAiCyC,EAAI5C,wBAAwBG,gCAGnFO,KACFH,IAAkB,GAGhBQ,KACFD,IAAa,GAKXQ,KACF1B,GAAexE,SAAS,CAAC,EAAG,IAAIvgB,KAChCilB,GAAe,IAEW,IAAtBwB,GAAatS,OACfoM,SAASwE,GAAc/D,IACvBT,SAAS0E,GAAc9Q,MAGA,IAArBsS,GAAanF,MACff,SAASwE,GAAc9D,IACvBV,SAAS0E,GAAc3D,IACvBf,SAAS0E,GAAczD,MAGO,IAA5BiF,GAAavF,aACfX,SAASwE,GAAc7D,IACvBX,SAAS0E,GAAc3D,IACvBf,SAAS0E,GAAczD,MAGG,IAAxBiF,GAAalF,SACfhB,SAASwE,GAAc3D,IACvBb,SAAS0E,GAAc1D,IACvBhB,SAAS0E,GAAczD,MAMvBuG,EAAII,WACFpD,KAAiBC,KACnBD,GAAepI,MAAMoI,KAGvBxE,SAASwE,GAAcgD,EAAII,SAAU3H,KAGnCuH,EAAIK,WACFnD,KAAiBC,KACnBD,GAAetI,MAAMsI,KAGvB1E,SAAS0E,GAAc8C,EAAIK,SAAU5H,KAGnCuH,EAAIC,mBACNzH,SAASuG,GAAqBiB,EAAIC,kBAAmBxH,IAGnDuH,EAAIrB,kBACFA,KAAoBC,KACtBD,GAAkB/J,MAAM+J,KAG1BnG,SAASmG,GAAiBqB,EAAIrB,gBAAiBlG,KAK7C+F,KACFxB,GAAa,UAAW,GAKtBe,IACFvF,SAASwE,GAAc,CAAC,OAAQ,OAAQ,SAKtCA,GAAaxoB,QACfgkB,SAASwE,GAAc,CAAC,iBACjBQ,GAAY8C,OAGjBN,EAAIO,qBAAsB,CAC5B,GAAmD,mBAAxCP,EAAIO,qBAAqBzF,WAClC,MAAM7C,GAAgB,+EAGxB,GAAwD,mBAA7C+H,EAAIO,qBAAqBxF,gBAClC,MAAM9C,GAAgB,oFAIxBqE,GAAqB0D,EAAIO,qBAEzBhE,GAAYD,GAAmBxB,WAAW,GAC5C,WAE6B90B,IAAvBs2B,KACFA,GAAqBjC,GAA0BC,GAAciB,IAIpC,OAAvBe,IAAoD,iBAAdC,KACxCA,GAAYD,GAAmBxB,WAAW,KAM1C9D,GACFA,EAAOgJ,GAGTL,GAASK,CApMT,CAqMF,EAEMQ,GAAiChI,SAAS,CAAC,EAAG,CAAC,KAAM,KAAM,KAAM,KAAM,UACvEiI,GAA0BjI,SAAS,CAAC,EAAG,CAAC,gBAAiB,OAAQ,QAAS,mBAK1EkI,GAA+BlI,SAAS,CAAC,EAAG,CAAC,QAAS,QAAS,OAAQ,IAAK,WAK5EmI,GAAenI,SAAS,CAAC,EAAGU,IAClCV,SAASmI,GAAcxH,IACvBX,SAASmI,GAAcvH,IACvB,MAAMwH,GAAkBpI,SAAS,CAAC,EAAGa,IACrCb,SAASoI,GAAiBtH,IAQ1B,MAAMuH,GAAuB,SAASA,qBAAqB/K,GACzD,IAAIhb,EAASqhB,GAAcrG,GAGtBhb,GAAWA,EAAOgmB,UACrBhmB,EAAS,CACPimB,aAAc3B,GACd0B,QAAS,aAIb,MAAMA,EAAUpJ,GAAkB5B,EAAQgL,SACpCE,EAAgBtJ,GAAkB5c,EAAOgmB,SAE/C,QAAKxB,GAAmBxJ,EAAQiL,gBAI5BjL,EAAQiL,eAAiB7B,GAIvBpkB,EAAOimB,eAAiB5B,GACP,QAAZ2B,EAMLhmB,EAAOimB,eAAiB9B,GACP,QAAZ6B,IAAwC,mBAAlBE,GAAsCR,GAA+BQ,IAK7FC,QAAQN,GAAaG,IAG1BhL,EAAQiL,eAAiB9B,GAIvBnkB,EAAOimB,eAAiB5B,GACP,SAAZ2B,EAKLhmB,EAAOimB,eAAiB7B,GACP,SAAZ4B,GAAsBL,GAAwBO,GAKhDC,QAAQL,GAAgBE,IAG7BhL,EAAQiL,eAAiB5B,KAIvBrkB,EAAOimB,eAAiB7B,KAAkBuB,GAAwBO,OAIlElmB,EAAOimB,eAAiB9B,KAAqBuB,GAA+BQ,MAMxEJ,GAAgBE,KAAaJ,GAA6BI,KAAaH,GAAaG,MAIpE,0BAAtBtB,KAAiDF,GAAmBxJ,EAAQiL,eASlF,EAQMG,GAAe,SAASA,aAAaC,GACzC1J,EAAUyD,UAAUC,QAAS,CAC3BrF,QAASqL,IAGX,IAEEA,EAAKC,WAAWvmB,YAAYsmB,EAC9B,CAAE,MAAOhL,GACPgL,EAAKE,QACP,CACF,EASMC,GAAmB,SAASA,iBAAiBruB,EAAMkuB,GACvD,IACE1J,EAAUyD,UAAUC,QAAS,CAC3BoG,UAAWJ,EAAKK,iBAAiBvuB,GACjC3O,KAAM68B,GAEV,CAAE,MAAOhL,GACPsB,EAAUyD,UAAUC,QAAS,CAC3BoG,UAAW,KACXj9B,KAAM68B,GAEV,CAIA,GAFAA,EAAKM,gBAAgBxuB,GAER,OAATA,IAAkBiqB,GAAajqB,GACjC,GAAIirB,IAAcC,GAChB,IACE+C,GAAaC,EACf,CAAE,MAAOhL,GAAI,MAEb,IACEgL,EAAKO,aAAazuB,EAAM,GAC1B,CAAE,MAAOkjB,GAAI,CAGnB,EASMwL,GAAgB,SAASA,cAAcC,GAE3C,IAAIC,EAAM,KACNC,EAAoB,KAExB,GAAI7D,GACF2D,EAAQ,oBAAsBA,MACzB,CAEL,MAAMG,EAAUnK,GAAYgK,EAAO,eACnCE,EAAoBC,GAAWA,EAAQ,EACzC,CAE0B,0BAAtBvC,IAAiDJ,KAAcD,KAEjEyC,EAAQ,iEAAmEA,EAAQ,kBAGrF,MAAMI,EAAe1F,GAAqBA,GAAmBxB,WAAW8G,GAASA,EAMjF,GAAIxC,KAAcD,GAChB,IACE0C,GAAM,IAAI/F,IAAYmG,gBAAgBD,EAAcxC,GACtD,CAAE,MAAOrJ,GAAI,CAKf,IAAK0L,IAAQA,EAAIK,gBAAiB,CAChCL,EAAMrF,GAAe2F,eAAe/C,GAAW,WAAY,MAE3D,IACEyC,EAAIK,gBAAgBE,UAAY/C,GAAiB9C,GAAYyF,CAC/D,CAAE,MAAO7L,GACT,CACF,CAEA,MAAMlc,EAAO4nB,EAAI5nB,MAAQ4nB,EAAIK,gBAQ7B,OANIN,GAASE,GACX7nB,EAAKooB,aAAa9pB,EAAS+pB,eAAeR,GAAoB7nB,EAAKsoB,WAAW,IAAM,MAKlFnD,KAAcD,GACTxC,GAAqB70B,KAAK+5B,EAAK9D,GAAiB,OAAS,QAAQ,GAGnEA,GAAiB8D,EAAIK,gBAAkBjoB,CAChD,EASMuoB,GAAsB,SAASA,oBAAoBrjC,GACvD,OAAOs9B,GAAmB30B,KAAK3I,EAAKk9B,eAAiBl9B,EAAMA,EAC3Dy8B,GAAW6G,aAAe7G,GAAW8G,aAAe9G,GAAW+G,UAAW,KAC5E,EASMC,GAAe,SAASA,aAAaC,GACzC,OAAOA,aAAe1jB,KAA4C,iBAAjB0jB,EAAIC,UAAoD,iBAApBD,EAAIlqB,aAAuD,mBAApBkqB,EAAIhoB,eAAgCgoB,EAAIE,sBAAsBxjB,KAAgD,mBAAxBsjB,EAAIpB,iBAA8D,mBAArBoB,EAAInB,cAA2D,iBAArBmB,EAAI9B,cAAyD,mBAArB8B,EAAIR,cAA4D,mBAAtBQ,EAAIG,cACjY,EASMC,GAAU,SAASA,QAAQhlB,GAC/B,MAAuB,mBAATyd,GAAuBzd,aAAkByd,CACzD,EAWMwH,GAAe,SAASA,aAAaC,EAAYC,EAAah9B,GAC7Dy2B,GAAMsG,IAIX9L,EAAawF,GAAMsG,IAAaE,IAC9BA,EAAKv7B,KAAKozB,UAAWkI,EAAah9B,EAAMu5B,GAAO,GAEnD,EAaM2D,GAAoB,SAASA,kBAAkBF,GACnD,IAAIzW,EAAU,KAOd,GAJAuW,GAAa,yBAA0BE,EAAa,MAIhDR,GAAaQ,GAGf,OAFAlC,GAAakC,IAEN,EAKT,MAAMtC,EAAUrI,GAAkB2K,EAAYN,UAU9C,GAPAI,GAAa,sBAAuBE,EAAa,CAC/CtC,UACAyC,YAAavG,KAKXoG,EAAYJ,kBAAoBC,GAAQG,EAAYI,oBAAsBxL,GAAW,UAAWoL,EAAYhB,YAAcpK,GAAW,UAAWoL,EAAYzqB,aAG9J,OAFAuoB,GAAakC,IAEN,EAKT,IAAKpG,GAAa8D,IAAYtD,GAAYsD,GAAU,CAElD,IAAKtD,GAAYsD,IAAY2C,GAAsB3C,GAAU,CAC3D,GAAI1D,GAAwBC,wBAAwB7I,QAAUwD,GAAWoF,GAAwBC,aAAcyD,GAC7G,OAAO,EAGT,GAAI1D,GAAwBC,wBAAwBjiB,UAAYgiB,GAAwBC,aAAayD,GACnG,OAAO,CAEX,CAIA,GAAItC,KAAiBG,GAAgBmC,GAAU,CAC7C,MAAMM,EAAajF,GAAciH,IAAgBA,EAAYhC,WACvDmB,EAAarG,GAAckH,IAAgBA,EAAYb,WAE7D,GAAIA,GAAcnB,EAGhB,IAAK,IAAI5/B,EAFU+gC,EAAWrgC,OAEJ,EAAGV,GAAK,IAAKA,EACrC4/B,EAAWiB,aAAarG,GAAUuG,EAAW/gC,IAAI,GAAOy6B,GAAemH,GAG7E,CAIA,OAFAlC,GAAakC,IAEN,CACT,CAIA,OAAIA,aAAuBzH,KAAYkF,GAAqBuC,IAC1DlC,GAAakC,IAEN,GAKQ,aAAZtC,GAAsC,YAAZA,GAAqC,aAAZA,IAA2B9I,GAAW,8BAA+BoL,EAAYhB,YAQrItE,IAA+C,IAAzBsF,EAAYhI,WAEpCzO,EAAUyW,EAAYzqB,YACtB0e,EAAa,CAACqC,GAAeC,GAAUC,KAAc8J,IACnD/W,EAAUkL,GAAclL,EAAS+W,EAAM,IAAI,IAGzCN,EAAYzqB,cAAgBgU,IAC9B8K,EAAUyD,UAAUC,QAAS,CAC3BrF,QAASsN,EAAYpH,cAEvBoH,EAAYzqB,YAAcgU,IAM9BuW,GAAa,wBAAyBE,EAAa,OAE5C,IA1BLlC,GAAakC,IAEN,EAyBX,EAYMO,GAAoB,SAASA,kBAAkBC,EAAOC,EAAQt/B,GAElE,GAAI85B,KAA4B,OAAXwF,GAA8B,SAAXA,KAAuBt/B,KAASgU,GAAYhU,KAASq7B,IAC3F,OAAO,EAQT,GAAIjC,KAAoBF,GAAYoG,IAAW7L,GAAW6B,GAAWgK,SAAgB,GAAInG,IAAmB1F,GAAW8B,GAAW+J,SAAgB,IAAK3G,GAAa2G,IAAWpG,GAAYoG,IACzL,KAGAJ,GAAsBG,KAAWxG,GAAwBC,wBAAwB7I,QAAUwD,GAAWoF,GAAwBC,aAAcuG,IAAUxG,GAAwBC,wBAAwBjiB,UAAYgiB,GAAwBC,aAAauG,MAAYxG,GAAwBE,8BAA8B9I,QAAUwD,GAAWoF,GAAwBE,mBAAoBuG,IAAWzG,GAAwBE,8BAA8BliB,UAAYgiB,GAAwBE,mBAAmBuG,KAEve,OAAXA,GAAmBzG,GAAwBG,iCAAmCH,GAAwBC,wBAAwB7I,QAAUwD,GAAWoF,GAAwBC,aAAc94B,IAAU64B,GAAwBC,wBAAwBjiB,UAAYgiB,GAAwBC,aAAa94B,KAClS,OAAO,OAIJ,GAAIw6B,GAAoB8E,SAAgB,GAAI7L,GAAW+E,GAAkBlF,GAActzB,EAAO01B,GAAiB,WAAa,GAAgB,QAAX4J,GAA+B,eAAXA,GAAsC,SAAXA,GAAgC,WAAVD,GAAwD,IAAlC9L,GAAcvzB,EAAO,WAAkBs6B,GAAc+E,GAAe,GAAIhG,KAA4B5F,GAAWgC,GAAmBnC,GAActzB,EAAO01B,GAAiB,WAAa,GAAI11B,EAC1Z,OAAO,EAGT,OAAO,CACT,EAWMk/B,GAAwB,SAASA,sBAAsB3C,GAC3D,OAAOA,EAAQlgC,QAAQ,KAAO,CAChC,EAaMkjC,GAAsB,SAASA,oBAAoBV,GAEvDF,GAAa,2BAA4BE,EAAa,MAEtD,MAAM,WACJL,GACEK,EAGJ,IAAKL,EACH,OAGF,MAAMgB,EAAY,CAChBC,SAAU,GACVC,UAAW,GACXC,UAAU,EACVC,kBAAmBjH,IAErB,IAAIxE,EAAIqK,EAAW7gC,OAGnB,KAAOw2B,KAAK,CACV,MAAM0L,EAAOrB,EAAWrK,IAClB,KACJzlB,EAAI,aACJ8tB,EACAx8B,MAAO0/B,GACLG,EACEP,EAASpL,GAAkBxlB,GACjC,IAAI1O,EAAiB,UAAT0O,EAAmBgxB,EAAYlM,GAAWkM,GAatD,GAVAF,EAAUC,SAAWH,EACrBE,EAAUE,UAAY1/B,EACtBw/B,EAAUG,UAAW,EACrBH,EAAUM,mBAAgBr+B,EAE1Bk9B,GAAa,wBAAyBE,EAAaW,GAEnDx/B,EAAQw/B,EAAUE,UAGdF,EAAUM,cACZ,SASF,GAJA/C,GAAiBruB,EAAMmwB,IAIlBW,EAAUG,SACb,SAKF,IAAKrG,IAA4B7F,GAAW,OAAQzzB,GAAQ,CAC1D+8B,GAAiBruB,EAAMmwB,GAEvB,QACF,CAIItF,IACFzG,EAAa,CAACqC,GAAeC,GAAUC,KAAc8J,IACnDn/B,EAAQszB,GAActzB,EAAOm/B,EAAM,IAAI,IAM3C,MAAME,EAAQnL,GAAkB2K,EAAYN,UAE5C,GAAKa,GAAkBC,EAAOC,EAAQt/B,GAAtC,CAkBA,IAVI+5B,IAAoC,OAAXuF,GAA8B,SAAXA,IAE9CvC,GAAiBruB,EAAMmwB,GAGvB7+B,EAAQg6B,GAA8Bh6B,GAKpC+3B,IAA8C,iBAAjBhC,IAAsE,mBAAlCA,GAAagK,iBAChF,GAAIvD,QACF,OAAQzG,GAAagK,iBAAiBV,EAAOC,IAC3C,IAAK,cAEDt/B,EAAQ+3B,GAAmBxB,WAAWv2B,GACtC,MAGJ,IAAK,mBAEDA,EAAQ+3B,GAAmBvB,gBAAgBx2B,GASrD,IACMw8B,EACFqC,EAAYmB,eAAexD,EAAc9tB,EAAM1O,GAG/C6+B,EAAY1B,aAAazuB,EAAM1O,GAGjCgzB,EAAS2D,UAAUC,QACrB,CAAE,MAAOhF,GAAI,CA7Cb,CA8CF,CAIA+M,GAAa,0BAA2BE,EAAa,KACvD,EAQMoB,GAAqB,SAASA,mBAAmBC,GACrD,IAAIC,EAAa,KAEjB,MAAMC,EAAiBnC,GAAoBiC,GAM3C,IAFAvB,GAAa,0BAA2BuB,EAAU,MAE3CC,EAAaC,EAAeC,YAEjC1B,GAAa,yBAA0BwB,EAAY,MAI/CpB,GAAkBoB,KAMlBA,EAAW/X,mBAAmB6O,GAChCgJ,mBAAmBE,EAAW/X,SAKhCmX,GAAoBY,IAKtBxB,GAAa,yBAA0BuB,EAAU,KACnD,EA8RA,OAnRAvJ,UAAU2J,SAAW,SAAUjD,GAC7B,IAAI5B,EAAMr5B,UAAUzE,OAAS,QAAsB8D,IAAjBW,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC3EsT,EAAO,KACP6qB,EAAe,KACf1B,EAAc,KACd2B,EAAa,KAajB,GARA1F,IAAkBuC,EAEdvC,KACFuC,EAAQ,eAKW,iBAAVA,IAAuBqB,GAAQrB,GAAQ,CAChD,GAA8B,mBAAnBA,EAAMn7B,SAOf,MAAMwxB,GAAgB,8BAJtB,GAAqB,iBAFrB2J,EAAQA,EAAMn7B,YAGZ,MAAMwxB,GAAgB,kCAK5B,CAIA,IAAKiD,UAAUG,YACb,OAAOuG,EAkBT,GAbK5D,IACH+B,GAAaC,GAKf9E,UAAUC,QAAU,GAGC,iBAAVyG,IACTnD,IAAW,GAGTA,IAEF,GAAImD,EAAMkB,SAAU,CAClB,MAAMhC,EAAUrI,GAAkBmJ,EAAMkB,UAExC,IAAK9F,GAAa8D,IAAYtD,GAAYsD,GACxC,MAAM7I,GAAgB,0DAE1B,OACK,GAAI2J,aAAiBlG,EAG1BzhB,EAAO0nB,GAAc,iBACrBmD,EAAe7qB,EAAKoiB,cAAcO,WAAWgF,GAAO,GAEtB,IAA1BkD,EAAa1J,UAA4C,SAA1B0J,EAAahC,UAGX,SAA1BgC,EAAahC,SADtB7oB,EAAO6qB,EAKP7qB,EAAKC,YAAY4qB,OAEd,CAEL,IAAK5G,KAAeJ,KAAuBC,KACnB,IAAxB6D,EAAMhhC,QAAQ,KACZ,OAAO07B,IAAsB8B,GAAsB9B,GAAmBxB,WAAW8G,GAASA,EAQ5F,GAHA3nB,EAAO0nB,GAAcC,IAGhB3nB,EACH,OAAOikB,GAAa,KAAOE,GAAsB7B,GAAY,EAEjE,CAIItiB,GAAQgkB,IACViD,GAAajnB,EAAK+qB,YAKpB,MAAMC,EAAezC,GAAoB/D,GAAWmD,EAAQ3nB,GAI5D,KAAOmpB,EAAc6B,EAAaL,YAE5BtB,GAAkBF,KAMlBA,EAAYzW,mBAAmB6O,GACjCgJ,GAAmBpB,EAAYzW,SAKjCmX,GAAoBV,IAKtB,GAAI3E,GACF,OAAOmD,EAKT,GAAI1D,GAAY,CACd,GAAIC,GAGF,IAFA4G,EAAarI,GAAuB50B,KAAKmS,EAAKoiB,eAEvCpiB,EAAK+qB,YAEVD,EAAW7qB,YAAYD,EAAK+qB,iBAG9BD,EAAa9qB,EAcf,OAXIijB,GAAagI,YAAchI,GAAaiI,kBAQ1CJ,EAAanI,GAAW90B,KAAKwzB,EAAkByJ,GAAY,IAGtDA,CACT,CAEA,IAAIK,EAAiBrH,GAAiB9jB,EAAKorB,UAAYprB,EAAKmoB,UAe5D,OAZIrE,IAAkBf,GAAa,aAAe/iB,EAAKoiB,eAAiBpiB,EAAKoiB,cAAciJ,SAAWrrB,EAAKoiB,cAAciJ,QAAQryB,MAAQ+kB,GAAWkC,GAAcjgB,EAAKoiB,cAAciJ,QAAQryB,QAC3LmyB,EAAiB,aAAenrB,EAAKoiB,cAAciJ,QAAQryB,KAAO,MAAQmyB,GAKxEtH,IACFzG,EAAa,CAACqC,GAAeC,GAAUC,KAAc8J,IACnD0B,EAAiBvN,GAAcuN,EAAgB1B,EAAM,IAAI,IAItDpH,IAAsB8B,GAAsB9B,GAAmBxB,WAAWsK,GAAkBA,CACrG,EASAlK,UAAUqK,UAAY,WAGpBxF,GAFUp5B,UAAUzE,OAAS,QAAsB8D,IAAjBW,UAAU,GAAmBA,UAAU,GAAK,CAAC,GAI/Eq3B,IAAa,CACf,EAQA9C,UAAUsK,YAAc,WACtB7F,GAAS,KACT3B,IAAa,CACf,EAaA9C,UAAUuK,iBAAmB,SAAU1oB,EAAKqnB,EAAM7/B,GAE3Co7B,IACHI,GAAa,CAAC,GAGhB,MAAM6D,EAAQnL,GAAkB1b,GAC1B8mB,EAASpL,GAAkB2L,GACjC,OAAOT,GAAkBC,EAAOC,EAAQt/B,EAC1C,EAUA22B,UAAUwK,QAAU,SAAUvC,EAAYwC,GACZ,mBAAjBA,IAIX9I,GAAMsG,GAActG,GAAMsG,IAAe,GACzC1L,EAAUoF,GAAMsG,GAAawC,GAC/B,EAWAzK,UAAU0K,WAAa,SAAUzC,GAC/B,GAAItG,GAAMsG,GACR,OAAO5L,EAASsF,GAAMsG,GAE1B,EASAjI,UAAU2K,YAAc,SAAU1C,GAC5BtG,GAAMsG,KACRtG,GAAMsG,GAAc,GAExB,EAOAjI,UAAU4K,eAAiB,WACzBjJ,GAAQ,CAAC,CACX,EAEO3B,SACT,CAIA,OAFaD,iBAId,CApoDiF77B,2BCElF,MAAM2mC,SACF,WAAAlzB,CAAYmzB,EAAKC,GACbxmC,KAAKumC,IAAMA,EACXvmC,KAAKwmC,KAAOA,EACZxmC,KAAKyC,OAAS,EAAI+jC,EAAOD,CAC7B,CAEA,QAAAE,CAAS7yB,GACL,QAAS5T,KAAKwmC,KAAO5yB,EAAM2yB,KAAOvmC,KAAKumC,IAAM3yB,EAAM4yB,KACvD,CAEA,OAAAE,CAAQ9yB,GACJ,QAAS5T,KAAKwmC,KAAO,EAAI5yB,EAAM2yB,KAAOvmC,KAAKumC,IAAM,EAAI3yB,EAAM4yB,KAC/D,CAGA,GAAAG,CAAI/yB,GACA,OAAO,IAAI0yB,SACPn8B,KAAKC,IAAIpK,KAAKumC,IAAK3yB,EAAM2yB,KACzBp8B,KAAK2C,IAAI9M,KAAKwmC,KAAM5yB,EAAM4yB,MAElC,CAIA,QAAAI,CAAShzB,GACL,OAAIA,EAAM2yB,KAAOvmC,KAAKumC,KAAO3yB,EAAM4yB,MAAQxmC,KAAKwmC,KACrC,GACA5yB,EAAM2yB,IAAMvmC,KAAKumC,KAAO3yB,EAAM4yB,KAAOxmC,KAAKwmC,KAC1C,CACH,IAAIF,SAAStmC,KAAKumC,IAAK3yB,EAAM2yB,IAAM,GACnC,IAAID,SAAS1yB,EAAM4yB,KAAO,EAAGxmC,KAAKwmC,OAE/B5yB,EAAM2yB,KAAOvmC,KAAKumC,IAClB,CAAC,IAAID,SAAS1yB,EAAM4yB,KAAO,EAAGxmC,KAAKwmC,OAEnC,CAAC,IAAIF,SAAStmC,KAAKumC,IAAK3yB,EAAM2yB,IAAM,GAEnD,CAEA,QAAAv/B,GACI,OAAOhH,KAAKumC,KAAOvmC,KAAKwmC,KACpBxmC,KAAKumC,IAAIv/B,WAAahH,KAAKumC,IAAM,IAAMvmC,KAAKwmC,IACpD,EAIJ,MAAMK,OACF,WAAAzzB,CAAYnH,EAAG/F,GACXlG,KAAK8mC,OAAS,GACd9mC,KAAKyC,OAAS,EACL,MAALwJ,GAAWjM,KAAK2mC,IAAI16B,EAAG/F,EAC/B,CAEA,cAAA6gC,GACI/mC,KAAKyC,OAASzC,KAAK8mC,OAAO3P,QAAO,CAAC6P,EAAUpzB,IACjCozB,EAAWpzB,EAAMnR,QACzB,EACP,CAEA,GAAAkkC,CAAI16B,EAAG/F,GACH,IAAI+gC,KAAQC,IAER,IADA,IAAInlC,EAAI,EACDA,EAAI/B,KAAK8mC,OAAOrkC,SAAWykC,EAASR,QAAQ1mC,KAAK8mC,OAAO/kC,KAC3DA,IAGJ,IADA,IAAIolC,EAAYnnC,KAAK8mC,OAAOzhC,MAAM,EAAGtD,GAC9BA,EAAI/B,KAAK8mC,OAAOrkC,QAAUykC,EAASR,QAAQ1mC,KAAK8mC,OAAO/kC,KAC1DmlC,EAAWA,EAASP,IAAI3mC,KAAK8mC,OAAO/kC,IACpCA,IAEJolC,EAAUrkC,KAAKokC,GACflnC,KAAK8mC,OAASK,EAAU/6B,OAAOpM,KAAK8mC,OAAOzhC,MAAMtD,IACjD/B,KAAK+mC,gBAAgB,EASzB,OANI96B,aAAa46B,OACb56B,EAAE66B,OAAO5a,QAAQ+a,OAER,MAAL/gC,IAAWA,EAAI+F,GACnBg7B,KAAK,IAAIX,SAASr6B,EAAG/F,KAElBlG,IACX,CAEA,QAAA4mC,CAAS36B,EAAG/F,GACR,IAAIkhC,UAAaF,IAEb,IADA,IAAInlC,EAAI,EACDA,EAAI/B,KAAK8mC,OAAOrkC,SAAWykC,EAAST,SAASzmC,KAAK8mC,OAAO/kC,KAC5DA,IAGJ,IADA,IAAIolC,EAAYnnC,KAAK8mC,OAAOzhC,MAAM,EAAGtD,GAC9BA,EAAI/B,KAAK8mC,OAAOrkC,QAAUykC,EAAST,SAASzmC,KAAK8mC,OAAO/kC,KAC3DolC,EAAYA,EAAU/6B,OAAOpM,KAAK8mC,OAAO/kC,GAAG6kC,SAASM,IACrDnlC,IAEJ/B,KAAK8mC,OAASK,EAAU/6B,OAAOpM,KAAK8mC,OAAOzhC,MAAMtD,IACjD/B,KAAK+mC,gBAAgB,EASzB,OANI96B,aAAa46B,OACb56B,EAAE66B,OAAO5a,QAAQkb,YAER,MAALlhC,IAAWA,EAAI+F,GACnBm7B,UAAU,IAAId,SAASr6B,EAAG/F,KAEvBlG,IACX,CAEA,SAAAqnC,CAAUp7B,EAAG/F,GACT,IAAIihC,EAAY,GACZG,WAAcJ,IAEd,IADA,IAAInlC,EAAI,EACDA,EAAI/B,KAAK8mC,OAAOrkC,SAAWykC,EAAST,SAASzmC,KAAK8mC,OAAO/kC,KAC5DA,IAEJ,KAAOA,EAAI/B,KAAK8mC,OAAOrkC,QAAUykC,EAAST,SAASzmC,KAAK8mC,OAAO/kC,KAAK,CAChE,IAAIwkC,EAAMp8B,KAAK2C,IAAI9M,KAAK8mC,OAAO/kC,GAAGwkC,IAAKW,EAASX,KAC5CC,EAAOr8B,KAAKC,IAAIpK,KAAK8mC,OAAO/kC,GAAGykC,KAAMU,EAASV,MAClDW,EAAUrkC,KAAK,IAAIwjC,SAASC,EAAKC,IACjCzkC,GACJ,GAWJ,OARIkK,aAAa46B,OACb56B,EAAE66B,OAAO5a,QAAQob,aAER,MAALphC,IAAWA,EAAI+F,GACnBq7B,WAAW,IAAIhB,SAASr6B,EAAG/F,KAE/BlG,KAAK8mC,OAASK,EACdnnC,KAAK+mC,iBACE/mC,IACX,CAEA,KAAA8W,CAAMA,GAEF,IADA,IAAI/U,EAAI,EACDA,EAAI/B,KAAK8mC,OAAOrkC,QAAUzC,KAAK8mC,OAAO/kC,GAAGU,QAAUqU,GACtDA,GAAS9W,KAAK8mC,OAAO/kC,GAAGU,OACxBV,IAEJ,OAAO/B,KAAK8mC,OAAO/kC,GAAGwkC,IAAMzvB,CAChC,CAEA,QAAA9P,GACI,MAAO,KAAOhH,KAAK8mC,OAAO7jC,KAAK,MAAQ,IAC3C,CAEA,KAAAkyB,GACI,OAAO,IAAI0R,OAAO7mC,KACtB,CAEA,OAAAunC,GACI,OAAOvnC,KAAK8mC,OAAO3P,QAAO,CAAC5Z,EAAQ2pB,KAE/B,IADA,IAAInlC,EAAImlC,EAASX,IACVxkC,GAAKmlC,EAASV,MACjBjpB,EAAOza,KAAKf,GACZA,IAEJ,OAAOwb,CAAM,GACd,GACP,CAEA,SAAAiqB,GACI,OAAOxnC,KAAK8mC,OAAO1Q,KAAK8Q,IAAa,CACjCX,IAAKW,EAASX,IACdC,KAAMU,EAASV,KACf/jC,OAAQ,EAAIykC,EAASV,KAAOU,EAASX,OAE7C,EAGJ1mC,EAAOD,QAAUinC,+BC1JjB,IAOIY,EAPAC,EAAuB,iBAAZlkB,QAAuBA,QAAU,KAC5CmkB,EAAeD,GAAwB,mBAAZA,EAAE18B,MAC7B08B,EAAE18B,MACF,SAAS28B,aAAa56B,EAAQ66B,EAAU1jB,GACxC,OAAOvI,SAASnX,UAAUwG,MAAM3C,KAAK0E,EAAQ66B,EAAU1jB,EACzD,EAIAujB,EADEC,GAA0B,mBAAdA,EAAEhqB,QACCgqB,EAAEhqB,QACVpZ,OAAOgoB,sBACC,SAASmb,eAAe16B,GACvC,OAAOzI,OAAOsqB,oBAAoB7hB,GAC/BX,OAAO9H,OAAOgoB,sBAAsBvf,GACzC,EAEiB,SAAS06B,eAAe16B,GACvC,OAAOzI,OAAOsqB,oBAAoB7hB,EACpC,EAOF,IAAI86B,EAAc5+B,OAAOuO,OAAS,SAASqwB,YAAY/iC,GACrD,OAAOA,GAAUA,CACnB,EAEA,SAASgjC,eACPA,aAAanV,KAAKtqB,KAAKrI,KACzB,CACAH,EAAOD,QAAUkoC,aACjBjoC,EAAOD,QAAQmoC,KAwYf,SAASA,KAAKC,EAASx0B,GACrB,OAAO,IAAIy0B,SAAQ,SAAUC,EAASC,GACpC,SAASC,cAAcvtB,GACrBmtB,EAAQK,eAAe70B,EAAM80B,UAC7BH,EAAOttB,EACT,CAEA,SAASytB,WAC+B,mBAA3BN,EAAQK,gBACjBL,EAAQK,eAAe,QAASD,eAElCF,EAAQ,GAAG7iC,MAAMgD,KAAKnB,WACxB,CAEAqhC,+BAA+BP,EAASx0B,EAAM80B,SAAU,CAAEP,MAAM,IACnD,UAATv0B,GAMR,SAASg1B,8BAA8BR,EAASS,EAASC,GAC7B,mBAAfV,EAAQW,IACjBJ,+BAA+BP,EAAS,QAASS,EAASC,EAE9D,CATMF,CAA8BR,EAASI,cAAe,CAAEL,MAAM,GAElE,GACF,EAxZAD,aAAaA,aAAeA,aAE5BA,aAAatjC,UAAUokC,aAAUriC,EACjCuhC,aAAatjC,UAAUqkC,aAAe,EACtCf,aAAatjC,UAAUskC,mBAAgBviC,EAIvC,IAAIwiC,EAAsB,GAE1B,SAASC,cAAcC,GACrB,GAAwB,mBAAbA,EACT,MAAM,IAAItkC,UAAU,0EAA4EskC,EAEpG,CAoCA,SAASC,iBAAiBxlB,GACxB,YAA2Bnd,IAAvBmd,EAAKolB,cACAhB,aAAaiB,oBACfrlB,EAAKolB,aACd,CAkDA,SAASK,aAAap8B,EAAQtG,EAAMwiC,EAAUG,GAC5C,IAAIphC,EACAqhC,EACAC,EAsBJ,GApBAN,cAAcC,QAGC1iC,KADf8iC,EAASt8B,EAAO67B,UAEdS,EAASt8B,EAAO67B,QAAUtkC,OAAO6kB,OAAO,MACxCpc,EAAO87B,aAAe,SAIKtiC,IAAvB8iC,EAAOE,cACTx8B,EAAOy8B,KAAK,cAAe/iC,EACfwiC,EAASA,SAAWA,EAASA,SAAWA,GAIpDI,EAASt8B,EAAO67B,SAElBU,EAAWD,EAAO5iC,SAGHF,IAAb+iC,EAEFA,EAAWD,EAAO5iC,GAAQwiC,IACxBl8B,EAAO87B,kBAeT,GAbwB,mBAAbS,EAETA,EAAWD,EAAO5iC,GAChB2iC,EAAU,CAACH,EAAUK,GAAY,CAACA,EAAUL,GAErCG,EACTE,EAASG,QAAQR,GAEjBK,EAASxmC,KAAKmmC,IAIhBjhC,EAAIkhC,iBAAiBn8B,IACb,GAAKu8B,EAAS7mC,OAASuF,IAAMshC,EAASI,OAAQ,CACpDJ,EAASI,QAAS,EAGlB,IAAIC,EAAI,IAAItmC,MAAM,+CACEimC,EAAS7mC,OAAS,IAAM1B,OAAO0F,GADjC,qEAIlBkjC,EAAEn2B,KAAO,8BACTm2B,EAAE3B,QAAUj7B,EACZ48B,EAAEljC,KAAOA,EACTkjC,EAAEC,MAAQN,EAAS7mC,OA7KzB,SAASonC,mBAAmBC,GACtBv+B,SAAWA,QAAQ4O,MAAM5O,QAAQ4O,KAAK2vB,EAC5C,CA4KMD,CAAmBF,EACrB,CAGF,OAAO58B,CACT,CAaA,SAASg9B,cACP,IAAK/pC,KAAKgqC,MAGR,OAFAhqC,KAAK+M,OAAOs7B,eAAeroC,KAAKyG,KAAMzG,KAAKiqC,QAC3CjqC,KAAKgqC,OAAQ,EACY,IAArB9iC,UAAUzE,OACLzC,KAAKipC,SAAS5gC,KAAKrI,KAAK+M,QAC1B/M,KAAKipC,SAASj+B,MAAMhL,KAAK+M,OAAQ7F,UAE5C,CAEA,SAASgjC,UAAUn9B,EAAQtG,EAAMwiC,GAC/B,IAAIviB,EAAQ,CAAEsjB,OAAO,EAAOC,YAAQ1jC,EAAWwG,OAAQA,EAAQtG,KAAMA,EAAMwiC,SAAUA,GACjFkB,EAAUJ,YAAYt0B,KAAKiR,GAG/B,OAFAyjB,EAAQlB,SAAWA,EACnBviB,EAAMujB,OAASE,EACRA,CACT,CAyHA,SAASC,WAAWr9B,EAAQtG,EAAM4jC,GAChC,IAAIhB,EAASt8B,EAAO67B,QAEpB,QAAeriC,IAAX8iC,EACF,MAAO,GAET,IAAIiB,EAAajB,EAAO5iC,GACxB,YAAmBF,IAAf+jC,EACK,GAEiB,mBAAfA,EACFD,EAAS,CAACC,EAAWrB,UAAYqB,GAAc,CAACA,GAElDD,EAsDT,SAASE,gBAAgBvoC,GAEvB,IADA,IAAIwL,EAAM,IAAIrK,MAAMnB,EAAIS,QACfV,EAAI,EAAGA,EAAIyL,EAAI/K,SAAUV,EAChCyL,EAAIzL,GAAKC,EAAID,GAAGknC,UAAYjnC,EAAID,GAElC,OAAOyL,CACT,CA3DI+8B,CAAgBD,GAAcE,WAAWF,EAAYA,EAAW7nC,OACpE,CAmBA,SAASgoC,cAAchkC,GACrB,IAAI4iC,EAASrpC,KAAK4oC,QAElB,QAAeriC,IAAX8iC,EAAsB,CACxB,IAAIiB,EAAajB,EAAO5iC,GAExB,GAA0B,mBAAf6jC,EACT,OAAO,EACF,QAAmB/jC,IAAf+jC,EACT,OAAOA,EAAW7nC,MAEtB,CAEA,OAAO,CACT,CAMA,SAAS+nC,WAAWxoC,EAAK+F,GAEvB,IADA,IAAIpC,EAAO,IAAIxC,MAAM4E,GACZhG,EAAI,EAAGA,EAAIgG,IAAKhG,EACvB4D,EAAK5D,GAAKC,EAAID,GAChB,OAAO4D,CACT,CA2CA,SAAS4iC,+BAA+BP,EAASx0B,EAAMy1B,EAAUP,GAC/D,GAA0B,mBAAfV,EAAQW,GACbD,EAAMX,KACRC,EAAQD,KAAKv0B,EAAMy1B,GAEnBjB,EAAQW,GAAGn1B,EAAMy1B,OAEd,IAAwC,mBAA7BjB,EAAQluB,iBAYxB,MAAM,IAAInV,UAAU,6EAA+EqjC,GATnGA,EAAQluB,iBAAiBtG,GAAM,SAASk3B,aAAajmC,GAG/CikC,EAAMX,MACRC,EAAQ2C,oBAAoBn3B,EAAMk3B,cAEpCzB,EAASxkC,EACX,GAGF,CACF,CAraAH,OAAOmH,eAAeq8B,aAAc,sBAAuB,CACzDp8B,YAAY,EACZC,IAAK,WACH,OAAOo9B,CACT,EACAx8B,IAAK,SAAS9H,GACZ,GAAmB,iBAARA,GAAoBA,EAAM,GAAKojC,EAAYpjC,GACpD,MAAM,IAAIL,WAAW,kGAAoGK,EAAM,KAEjIskC,EAAsBtkC,CACxB,IAGFqjC,aAAanV,KAAO,gBAEGpsB,IAAjBvG,KAAK4oC,SACL5oC,KAAK4oC,UAAYtkC,OAAO8Z,eAAepe,MAAM4oC,UAC/C5oC,KAAK4oC,QAAUtkC,OAAO6kB,OAAO,MAC7BnpB,KAAK6oC,aAAe,GAGtB7oC,KAAK8oC,cAAgB9oC,KAAK8oC,oBAAiBviC,CAC7C,EAIAuhC,aAAatjC,UAAUomC,gBAAkB,SAASA,gBAAgB7iC,GAChE,GAAiB,iBAANA,GAAkBA,EAAI,GAAK8/B,EAAY9/B,GAChD,MAAM,IAAI3D,WAAW,gFAAkF2D,EAAI,KAG7G,OADA/H,KAAK8oC,cAAgB/gC,EACd/H,IACT,EAQA8nC,aAAatjC,UAAUqmC,gBAAkB,SAASA,kBAChD,OAAO3B,iBAAiBlpC,KAC1B,EAEA8nC,aAAatjC,UAAUglC,KAAO,SAASA,KAAK/iC,GAE1C,IADA,IAAIyd,EAAO,GACFniB,EAAI,EAAGA,EAAImF,UAAUzE,OAAQV,IAAKmiB,EAAKphB,KAAKoE,UAAUnF,IAC/D,IAAI+oC,EAAoB,UAATrkC,EAEX4iC,EAASrpC,KAAK4oC,QAClB,QAAeriC,IAAX8iC,EACFyB,EAAWA,QAA4BvkC,IAAjB8iC,EAAO79B,WAC1B,IAAKs/B,EACR,OAAO,EAGT,GAAIA,EAAS,CACX,IAAIC,EAGJ,GAFI7mB,EAAKzhB,OAAS,IAChBsoC,EAAK7mB,EAAK,IACR6mB,aAAc1nC,MAGhB,MAAM0nC,EAGR,IAAIlwB,EAAM,IAAIxX,MAAM,oBAAsB0nC,EAAK,KAAOA,EAAGr3B,QAAU,IAAM,KAEzE,MADAmH,EAAImwB,QAAUD,EACRlwB,CACR,CAEA,IAAI4tB,EAAUY,EAAO5iC,GAErB,QAAgBF,IAAZkiC,EACF,OAAO,EAET,GAAuB,mBAAZA,EACTd,EAAac,EAASzoC,KAAMkkB,OAE5B,KAAI9hB,EAAMqmC,EAAQhmC,OACdwoC,EAAYT,WAAW/B,EAASrmC,GACpC,IAASL,EAAI,EAAGA,EAAIK,IAAOL,EACzB4lC,EAAasD,EAAUlpC,GAAI/B,KAAMkkB,EAHX,CAM1B,OAAO,CACT,EAgEA4jB,aAAatjC,UAAU0mC,YAAc,SAASA,YAAYzkC,EAAMwiC,GAC9D,OAAOE,aAAanpC,KAAMyG,EAAMwiC,GAAU,EAC5C,EAEAnB,aAAatjC,UAAUmkC,GAAKb,aAAatjC,UAAU0mC,YAEnDpD,aAAatjC,UAAU2mC,gBACnB,SAASA,gBAAgB1kC,EAAMwiC,GAC7B,OAAOE,aAAanpC,KAAMyG,EAAMwiC,GAAU,EAC5C,EAoBJnB,aAAatjC,UAAUujC,KAAO,SAASA,KAAKthC,EAAMwiC,GAGhD,OAFAD,cAAcC,GACdjpC,KAAK2oC,GAAGliC,EAAMyjC,UAAUlqC,KAAMyG,EAAMwiC,IAC7BjpC,IACT,EAEA8nC,aAAatjC,UAAU4mC,oBACnB,SAASA,oBAAoB3kC,EAAMwiC,GAGjC,OAFAD,cAAcC,GACdjpC,KAAKmrC,gBAAgB1kC,EAAMyjC,UAAUlqC,KAAMyG,EAAMwiC,IAC1CjpC,IACT,EAGJ8nC,aAAatjC,UAAU6jC,eACnB,SAASA,eAAe5hC,EAAMwiC,GAC5B,IAAI58B,EAAMg9B,EAAQ/vB,EAAUvX,EAAGspC,EAK/B,GAHArC,cAAcC,QAGC1iC,KADf8iC,EAASrpC,KAAK4oC,SAEZ,OAAO5oC,KAGT,QAAauG,KADb8F,EAAOg9B,EAAO5iC,IAEZ,OAAOzG,KAET,GAAIqM,IAAS48B,GAAY58B,EAAK48B,WAAaA,EACb,KAAtBjpC,KAAK6oC,aACT7oC,KAAK4oC,QAAUtkC,OAAO6kB,OAAO,cAEtBkgB,EAAO5iC,GACV4iC,EAAOhB,gBACTroC,KAAKwpC,KAAK,iBAAkB/iC,EAAM4F,EAAK48B,UAAYA,SAElD,GAAoB,mBAAT58B,EAAqB,CAGrC,IAFAiN,GAAY,EAEPvX,EAAIsK,EAAK5J,OAAS,EAAGV,GAAK,EAAGA,IAChC,GAAIsK,EAAKtK,KAAOknC,GAAY58B,EAAKtK,GAAGknC,WAAaA,EAAU,CACzDoC,EAAmBh/B,EAAKtK,GAAGknC,SAC3B3vB,EAAWvX,EACX,KACF,CAGF,GAAIuX,EAAW,EACb,OAAOtZ,KAEQ,IAAbsZ,EACFjN,EAAKi/B,QAiIf,SAASC,UAAUl/B,EAAMyK,GACvB,KAAOA,EAAQ,EAAIzK,EAAK5J,OAAQqU,IAC9BzK,EAAKyK,GAASzK,EAAKyK,EAAQ,GAC7BzK,EAAK0rB,KACP,CAnIUwT,CAAUl/B,EAAMiN,GAGE,IAAhBjN,EAAK5J,SACP4mC,EAAO5iC,GAAQ4F,EAAK,SAEQ9F,IAA1B8iC,EAAOhB,gBACTroC,KAAKwpC,KAAK,iBAAkB/iC,EAAM4kC,GAAoBpC,EAC1D,CAEA,OAAOjpC,IACT,EAEJ8nC,aAAatjC,UAAUgnC,IAAM1D,aAAatjC,UAAU6jC,eAEpDP,aAAatjC,UAAUinC,mBACnB,SAASA,mBAAmBhlC,GAC1B,IAAIwkC,EAAW5B,EAAQtnC,EAGvB,QAAewE,KADf8iC,EAASrpC,KAAK4oC,SAEZ,OAAO5oC,KAGT,QAA8BuG,IAA1B8iC,EAAOhB,eAUT,OATyB,IAArBnhC,UAAUzE,QACZzC,KAAK4oC,QAAUtkC,OAAO6kB,OAAO,MAC7BnpB,KAAK6oC,aAAe,QACMtiC,IAAjB8iC,EAAO5iC,KACY,KAAtBzG,KAAK6oC,aACT7oC,KAAK4oC,QAAUtkC,OAAO6kB,OAAO,aAEtBkgB,EAAO5iC,IAEXzG,KAIT,GAAyB,IAArBkH,UAAUzE,OAAc,CAC1B,IACIgU,EADAsH,EAAOzZ,OAAOyZ,KAAKsrB,GAEvB,IAAKtnC,EAAI,EAAGA,EAAIgc,EAAKtb,SAAUV,EAEjB,oBADZ0U,EAAMsH,EAAKhc,KAEX/B,KAAKyrC,mBAAmBh1B,GAK1B,OAHAzW,KAAKyrC,mBAAmB,kBACxBzrC,KAAK4oC,QAAUtkC,OAAO6kB,OAAO,MAC7BnpB,KAAK6oC,aAAe,EACb7oC,IACT,CAIA,GAAyB,mBAFzBirC,EAAY5B,EAAO5iC,IAGjBzG,KAAKqoC,eAAe5hC,EAAMwkC,QACrB,QAAkB1kC,IAAd0kC,EAET,IAAKlpC,EAAIkpC,EAAUxoC,OAAS,EAAGV,GAAK,EAAGA,IACrC/B,KAAKqoC,eAAe5hC,EAAMwkC,EAAUlpC,IAIxC,OAAO/B,IACT,EAmBJ8nC,aAAatjC,UAAUymC,UAAY,SAASA,UAAUxkC,GACpD,OAAO2jC,WAAWpqC,KAAMyG,GAAM,EAChC,EAEAqhC,aAAatjC,UAAUknC,aAAe,SAASA,aAAajlC,GAC1D,OAAO2jC,WAAWpqC,KAAMyG,GAAM,EAChC,EAEAqhC,aAAa2C,cAAgB,SAASzC,EAASvhC,GAC7C,MAAqC,mBAA1BuhC,EAAQyC,cACVzC,EAAQyC,cAAchkC,GAEtBgkC,cAAcpiC,KAAK2/B,EAASvhC,EAEvC,EAEAqhC,aAAatjC,UAAUimC,cAAgBA,cAiBvC3C,aAAatjC,UAAUmnC,WAAa,SAASA,aAC3C,OAAO3rC,KAAK6oC,aAAe,EAAIpB,EAAeznC,KAAK4oC,SAAW,EAChE,gCCvaA,IAAIgD,EAAY,EAAQ,OAEpBC,EAAQ1iB,OAAO9lB,OAcnB,SAAS8lB,OAAO2iB,GAGd,OAFAC,eAAeC,YAAcF,EAAaE,aAAeF,EAAat4B,KAE/Du4B,eAEP,SAASA,eAAe/xB,GAKtB,OAJIA,IACFA,EAAS4xB,EAAU5gC,MAAM,KAAM9D,YAG1B,IAAI4kC,EAAa9xB,EAC1B,CACF,CAxBAna,EAAOD,QAAUisC,EAEjBA,EAAMI,KAAO9iB,OAAOyK,WACpBiY,EAAMj4B,MAAQuV,OAAO/kB,YACrBynC,EAAMK,UAAY/iB,OAAO0K,gBACzBgY,EAAMM,OAAShjB,OAAO2K,aACtB+X,EAAMplC,KAAO0iB,OAAOxkB,WACpBknC,EAAMO,IAAMjjB,OAAO4K,UAEnB8X,EAAM1iB,OAASA,mBCJb,WAGA,IAAIvE,EA4BJ,SAAS5K,OAAOqyB,GAsBd,IArBA,IAKIriC,EAEAvF,EACA3C,EAEAwqC,EAVAC,EAAW,EACXroB,EAAO,GAAG7e,MAAMgD,KAAKnB,WACrBnF,EAAI,EACJgG,EAAIskC,EAAI5pC,OACR8a,EAAS,GAETivB,GAAU,EAGVC,GAAc,EAEdC,QAAU,WAAa,OAAOxoB,EAAKqoB,IAAa,EAChDI,YAAc,WAEZ,IADA,IAAIC,EAAS,GACN,KAAKtrC,KAAK+qC,EAAItqC,KACnB6qC,GAAUP,EAAItqC,KACdiI,EAAIqiC,EAAItqC,GAEV,OAAO6qC,EAAOnqC,OAAS,EAAI4G,SAASujC,GAAU,IAChD,EAEG7qC,EAAIgG,IAAKhG,EAEd,GADAiI,EAAIqiC,EAAItqC,GACJyqC,EAeF,OAdAA,GAAU,EACD,KAALxiC,GACFyiC,GAAc,EACdziC,EAAIqiC,IAAMtqC,IAEE,KAALiI,GAA0B,KAAdqiC,EAAItqC,EAAI,IAC3B0qC,GAAc,EAEdziC,EAAIqiC,EADJtqC,GAAK,IAIL0qC,GAAc,EAEhBH,EAAYK,cACJ3iC,GACR,IAAK,IACHuT,GAAUlU,SAASqjC,UAAW,IAAI1lC,SAAS,GAC3C,MACF,IAAK,IAGDuW,GADiB,iBADnB9Y,EAAMioC,YACyBjoC,aAAe1D,OAClC0D,EAEA1D,OAAOC,aAAaqI,SAAS5E,EAAK,KAC9C,MACF,IAAK,IACH8Y,GAAUlU,SAASqjC,UAAW,IAC9B,MACF,IAAK,IACH5qC,EAAMf,OAAO8rC,WAAWH,WAAWI,QAAQR,GAAa,IACxD/uB,GAAUkvB,EAAc3qC,EAAMA,EAAIlB,QAAQ,KAAM,IAChD,MACF,IAAK,IACH2c,GAAUwvB,KAAKC,UAAUN,WACzB,MACF,IAAK,IACHnvB,GAAU,IAAMlU,SAASqjC,UAAW,IAAI1lC,SAAS,GACjD,MACF,IAAK,IACHuW,GAAUmvB,UACV,MACF,IAAK,IACHnvB,GAAU,KAAOlU,SAASqjC,UAAW,IAAI1lC,SAAS,IAClD,MACF,IAAK,IACHuW,GAAU,KAAOlU,SAASqjC,UAAW,IAAI1lC,SAAS,IAAIimC,cACtD,MACF,QACE1vB,GAAUvT,MAGG,MAANA,EACTwiC,GAAU,EAEVjvB,GAAUvT,EAGd,OAAOuT,CACT,EA3GEqH,EAAY/kB,EAAOD,QAAUoa,QASrBA,OAASA,OACnB4K,EAAUsoB,SAUV,SAASA,SAASb,EAAKc,GACrB,OAAOnzB,OAAOhP,MAAM,KAAM,CAACqhC,GAAKjgC,OAAO+gC,GACzC,EAVuB,oBAAZ5hC,SAAkD,mBAAhBA,QAAQ6hC,MACnDxoB,EAAUyoB,OAGZ,SAASA,SACP9hC,QAAQ6hC,IAAIpzB,OAAOhP,MAAM,KAAM9D,WACjC,EA2FF,CApHC,2BCPD,IACI7B,EAAQlC,MAAMqB,UAAUa,MACxBioC,EAAQhpC,OAAOE,UAAUwC,SAG7BnH,EAAOD,QAAU,SAAS6V,KAAKiO,GAC3B,IAAI3W,EAAS/M,KACb,GAAsB,mBAAX+M,GAJA,sBAIyBugC,EAAMjlC,KAAK0E,GAC3C,MAAM,IAAIpI,UARE,kDAQwBoI,GAyBxC,IAvBA,IAEIkX,EAFAC,EAAO7e,EAAMgD,KAAKnB,UAAW,GAqB7BqmC,EAAcpjC,KAAK2C,IAAI,EAAGC,EAAOtK,OAASyhB,EAAKzhB,QAC/C+qC,EAAY,GACPzrC,EAAI,EAAGA,EAAIwrC,EAAaxrC,IAC7ByrC,EAAU1qC,KAAK,IAAMf,GAKzB,GAFAkiB,EAAQtI,SAAS,SAAU,oBAAsB6xB,EAAUvqC,KAAK,KAAO,4CAA/D0Y,EAxBK,WACT,GAAI3b,gBAAgBikB,EAAO,CACvB,IAAI1G,EAASxQ,EAAO/B,MAChBhL,KACAkkB,EAAK9X,OAAO/G,EAAMgD,KAAKnB,aAE3B,OAAI5C,OAAOiZ,KAAYA,EACZA,EAEJvd,IACX,CACI,OAAO+M,EAAO/B,MACV0Y,EACAQ,EAAK9X,OAAO/G,EAAMgD,KAAKnB,YAGnC,IAUI6F,EAAOvI,UAAW,CAClB,IAAIipC,EAAQ,SAASA,QAAS,EAC9BA,EAAMjpC,UAAYuI,EAAOvI,UACzByf,EAAMzf,UAAY,IAAIipC,EACtBA,EAAMjpC,UAAY,IACtB,CAEA,OAAOyf,CACX,gCCjDA,IAAI8Y,EAAiB,EAAQ,OAE7Bl9B,EAAOD,QAAU+b,SAASnX,UAAUiR,MAAQsnB,gCCF5C,IAAIx2B,EAEAmnC,EAAe5Z,YACflQ,EAAYjI,SACZM,EAAatX,UAGbgpC,sBAAwB,SAAUC,GACrC,IACC,OAAOhqB,EAAU,yBAA2BgqB,EAAmB,iBAAxDhqB,EACR,CAAE,MAAOtY,GAAI,CACd,EAEIuK,EAAQvR,OAAO2Z,yBACnB,GAAIpI,EACH,IACCA,EAAM,CAAC,EAAG,GACX,CAAE,MAAOvK,GACRuK,EAAQ,IACT,CAGD,IAAIg4B,eAAiB,WACpB,MAAM,IAAI5xB,CACX,EACI6xB,EAAiBj4B,EACjB,WACF,IAGC,OAAOg4B,cACR,CAAE,MAAOE,GACR,IAEC,OAAOl4B,EAAM3O,UAAW,UAAUyE,GACnC,CAAE,MAAOqiC,GACR,OAAOH,cACR,CACD,CACD,CAbE,GAcAA,eAECI,EAAa,EAAQ,MAAR,GACbC,EAAW,EAAQ,MAAR,GAEXC,EAAW7pC,OAAO8Z,iBACrB8vB,EACG,SAAUhiC,GAAK,OAAOA,EAAEojB,SAAW,EACnC,MAGA8e,EAAY,CAAC,EAEbC,GAAmC,oBAAfnrC,YAA+BirC,EAAuBA,EAASjrC,YAArBqD,EAE9D+nC,GAAa,CAChB,mBAA8C,oBAAnBhzB,eAAiC/U,EAAY+U,eACxE,UAAWnY,MACX,gBAAwC,oBAAhBmC,YAA8BiB,EAAYjB,YAClE,2BAA4B2oC,GAAcE,EAAWA,EAAS,GAAGtqC,OAAOukB,aAAe7hB,EACvF,mCAAoCA,EACpC,kBAAmB6nC,EACnB,mBAAoBA,EACpB,2BAA4BA,EAC5B,2BAA4BA,EAC5B,YAAgC,oBAAZG,QAA0BhoC,EAAYgoC,QAC1D,WAA8B,oBAAXtgC,OAAyB1H,EAAY0H,OACxD,kBAA4C,oBAAlBugC,cAAgCjoC,EAAYioC,cACtE,mBAA8C,oBAAnBC,eAAiCloC,EAAYkoC,eACxE,YAAajN,QACb,aAAkC,oBAAbkN,SAA2BnoC,EAAYmoC,SAC5D,SAAU52B,KACV,cAAe62B,UACf,uBAAwBv2B,mBACxB,cAAew2B,UACf,uBAAwBv2B,mBACxB,UAAWhV,MACX,SAAU4oC,KACV,cAAerY,UACf,iBAA0C,oBAAjBib,aAA+BtoC,EAAYsoC,aACpE,iBAA0C,oBAAjBC,aAA+BvoC,EAAYuoC,aACpE,yBAA0D,oBAAzBC,qBAAuCxoC,EAAYwoC,qBACpF,aAAcnrB,EACd,sBAAuBwqB,EACvB,cAAoC,oBAAdY,UAA4BzoC,EAAYyoC,UAC9D,eAAsC,oBAAfC,WAA6B1oC,EAAY0oC,WAChE,eAAsC,oBAAfC,WAA6B3oC,EAAY2oC,WAChE,aAAc7hC,SACd,UAAWmK,MACX,sBAAuBy2B,GAAcE,EAAWA,EAASA,EAAS,GAAGtqC,OAAOukB,cAAgB7hB,EAC5F,SAA0B,iBAATwmC,KAAoBA,KAAOxmC,EAC5C,QAAwB,oBAAR4oC,IAAsB5oC,EAAY4oC,IAClD,yBAAyC,oBAARA,KAAwBlB,GAAeE,EAAuBA,GAAS,IAAIgB,KAAMtrC,OAAOukB,aAAtC7hB,EACnF,SAAU4D,KACV,WAAYlB,OACZ,WAAY3E,OACZ,eAAgBuoC,WAChB,aAAcxjC,SACd,YAAgC,oBAAZ4+B,QAA0B1hC,EAAY0hC,QAC1D,UAA4B,oBAAVmH,MAAwB7oC,EAAY6oC,MACtD,eAAgBhrC,WAChB,mBAAoByvB,eACpB,YAAgC,oBAAZrQ,QAA0Bjd,EAAYid,QAC1D,WAAYuR,OACZ,QAAwB,oBAARsa,IAAsB9oC,EAAY8oC,IAClD,yBAAyC,oBAARA,KAAwBpB,GAAeE,EAAuBA,GAAS,IAAIkB,KAAMxrC,OAAOukB,aAAtC7hB,EACnF,sBAAoD,oBAAtBP,kBAAoCO,EAAYP,kBAC9E,WAAYjF,OACZ,4BAA6BktC,GAAcE,EAAWA,EAAS,GAAGtqC,OAAOukB,aAAe7hB,EACxF,WAAY0nC,EAAapqC,OAAS0C,EAClC,gBAAiBmnC,EACjB,mBAAoBI,EACpB,eAAgBO,GAChB,cAAepyB,EACf,eAAsC,oBAAf/Y,WAA6BqD,EAAYrD,WAChE,sBAAoD,oBAAtBosC,kBAAoC/oC,EAAY+oC,kBAC9E,gBAAwC,oBAAhBC,YAA8BhpC,EAAYgpC,YAClE,gBAAwC,oBAAhBC,YAA8BjpC,EAAYipC,YAClE,aAAczb,SACd,YAAgC,oBAAZtN,QAA0BlgB,EAAYkgB,QAC1D,YAAgC,oBAAZgpB,QAA0BlpC,EAAYkpC,QAC1D,YAAgC,oBAAZC,QAA0BnpC,EAAYmpC,SAG3D,GAAIvB,EACH,IACC,KAAK3iC,KACN,CAAE,MAAOF,GAER,IAAIqkC,GAAaxB,EAASA,EAAS7iC,IACnCgjC,GAAW,qBAAuBqB,EACnC,CAGD,IAAIC,GAAS,SAASA,OAAOp8B,GAC5B,IAAI1O,EACJ,GAAa,oBAAT0O,EACH1O,EAAQ6oC,sBAAsB,6BACxB,GAAa,wBAATn6B,EACV1O,EAAQ6oC,sBAAsB,wBACxB,GAAa,6BAATn6B,EACV1O,EAAQ6oC,sBAAsB,8BACxB,GAAa,qBAATn6B,EAA6B,CACvC,IAAIyB,EAAK26B,OAAO,4BACZ36B,IACHnQ,EAAQmQ,EAAGzQ,UAEb,MAAO,GAAa,6BAATgP,EAAqC,CAC/C,IAAIq8B,EAAMD,OAAO,oBACbC,GAAO1B,IACVrpC,EAAQqpC,EAAS0B,EAAIrrC,WAEvB,CAIA,OAFA8pC,GAAW96B,GAAQ1O,EAEZA,CACR,EAEIgrC,GAAiB,CACpB,yBAA0B,CAAC,cAAe,aAC1C,mBAAoB,CAAC,QAAS,aAC9B,uBAAwB,CAAC,QAAS,YAAa,WAC/C,uBAAwB,CAAC,QAAS,YAAa,WAC/C,oBAAqB,CAAC,QAAS,YAAa,QAC5C,sBAAuB,CAAC,QAAS,YAAa,UAC9C,2BAA4B,CAAC,gBAAiB,aAC9C,mBAAoB,CAAC,yBAA0B,aAC/C,4BAA6B,CAAC,yBAA0B,YAAa,aACrE,qBAAsB,CAAC,UAAW,aAClC,sBAAuB,CAAC,WAAY,aACpC,kBAAmB,CAAC,OAAQ,aAC5B,mBAAoB,CAAC,QAAS,aAC9B,uBAAwB,CAAC,YAAa,aACtC,0BAA2B,CAAC,eAAgB,aAC5C,0BAA2B,CAAC,eAAgB,aAC5C,sBAAuB,CAAC,WAAY,aACpC,cAAe,CAAC,oBAAqB,aACrC,uBAAwB,CAAC,oBAAqB,YAAa,aAC3D,uBAAwB,CAAC,YAAa,aACtC,wBAAyB,CAAC,aAAc,aACxC,wBAAyB,CAAC,aAAc,aACxC,cAAe,CAAC,OAAQ,SACxB,kBAAmB,CAAC,OAAQ,aAC5B,iBAAkB,CAAC,MAAO,aAC1B,oBAAqB,CAAC,SAAU,aAChC,oBAAqB,CAAC,SAAU,aAChC,sBAAuB,CAAC,SAAU,YAAa,YAC/C,qBAAsB,CAAC,SAAU,YAAa,WAC9C,qBAAsB,CAAC,UAAW,aAClC,sBAAuB,CAAC,UAAW,YAAa,QAChD,gBAAiB,CAAC,UAAW,OAC7B,mBAAoB,CAAC,UAAW,UAChC,oBAAqB,CAAC,UAAW,WACjC,wBAAyB,CAAC,aAAc,aACxC,4BAA6B,CAAC,iBAAkB,aAChD,oBAAqB,CAAC,SAAU,aAChC,iBAAkB,CAAC,MAAO,aAC1B,+BAAgC,CAAC,oBAAqB,aACtD,oBAAqB,CAAC,SAAU,aAChC,oBAAqB,CAAC,SAAU,aAChC,yBAA0B,CAAC,cAAe,aAC1C,wBAAyB,CAAC,aAAc,aACxC,uBAAwB,CAAC,YAAa,aACtC,wBAAyB,CAAC,aAAc,aACxC,+BAAgC,CAAC,oBAAqB,aACtD,yBAA0B,CAAC,cAAe,aAC1C,yBAA0B,CAAC,cAAe,aAC1C,sBAAuB,CAAC,WAAY,aACpC,qBAAsB,CAAC,UAAW,aAClC,qBAAsB,CAAC,UAAW,cAG/Br6B,GAAO,EAAQ,OACfU,GAAS,EAAQ,OACjB45B,GAAUt6B,GAAKpN,KAAKsT,SAAStT,KAAMlF,MAAMqB,UAAU4H,QACnD4jC,GAAev6B,GAAKpN,KAAKsT,SAAS3Q,MAAO7H,MAAMqB,UAAUyrC,QACzDC,GAAWz6B,GAAKpN,KAAKsT,SAAStT,KAAMtH,OAAOyD,UAAU5D,SACrDuvC,GAAY16B,GAAKpN,KAAKsT,SAAStT,KAAMtH,OAAOyD,UAAUa,OACtD+qC,GAAQ36B,GAAKpN,KAAKsT,SAAStT,KAAM0sB,OAAOvwB,UAAU8e,MAGlD+sB,GAAa,qGACbC,GAAe,WAiBfC,GAAmB,SAASA,iBAAiB/8B,EAAM+B,GACtD,IACIi7B,EADAC,EAAgBj9B,EAOpB,GALI2C,GAAO25B,GAAgBW,KAE1BA,EAAgB,KADhBD,EAAQV,GAAeW,IACK,GAAK,KAG9Bt6B,GAAOm4B,GAAYmC,GAAgB,CACtC,IAAI3rC,EAAQwpC,GAAWmC,GAIvB,GAHI3rC,IAAUspC,IACbtpC,EAAQ8qC,GAAOa,SAEK,IAAV3rC,IAA0ByQ,EACpC,MAAM,IAAI0G,EAAW,aAAezI,EAAO,wDAG5C,MAAO,CACNg9B,MAAOA,EACPh9B,KAAMi9B,EACN3rC,MAAOA,EAET,CAEA,MAAM,IAAI4oC,EAAa,aAAel6B,EAAO,mBAC9C,EAEA3T,EAAOD,QAAU,SAASuV,aAAa3B,EAAM+B,GAC5C,GAAoB,iBAAT/B,GAAqC,IAAhBA,EAAK/Q,OACpC,MAAM,IAAIwZ,EAAW,6CAEtB,GAAI/U,UAAUzE,OAAS,GAA6B,kBAAjB8S,EAClC,MAAM,IAAI0G,EAAW,6CAGtB,GAAmC,OAA/Bm0B,GAAM,cAAe58B,GACxB,MAAM,IAAIk6B,EAAa,sFAExB,IAAI/qC,EAtDc,SAAS+tC,aAAa1rC,GACxC,IAAI2K,EAAQwgC,GAAUnrC,EAAQ,EAAG,GAC7B4K,EAAOugC,GAAUnrC,GAAS,GAC9B,GAAc,MAAV2K,GAA0B,MAATC,EACpB,MAAM,IAAI89B,EAAa,kDACjB,GAAa,MAAT99B,GAA0B,MAAVD,EAC1B,MAAM,IAAI+9B,EAAa,kDAExB,IAAInwB,EAAS,GAIb,OAHA2yB,GAASlrC,EAAQqrC,IAAY,SAAUxvC,EAAO8vB,EAAQggB,EAAOC,GAC5DrzB,EAAOA,EAAO9a,QAAUkuC,EAAQT,GAASU,EAAWN,GAAc,MAAQ3f,GAAU9vB,CACrF,IACO0c,CACR,CAyCamzB,CAAal9B,GACrBq9B,EAAoBluC,EAAMF,OAAS,EAAIE,EAAM,GAAK,GAElD6S,EAAY+6B,GAAiB,IAAMM,EAAoB,IAAKt7B,GAC5Du7B,EAAoBt7B,EAAUhC,KAC9B1O,EAAQ0Q,EAAU1Q,MAClBisC,GAAqB,EAErBP,EAAQh7B,EAAUg7B,MAClBA,IACHK,EAAoBL,EAAM,GAC1BR,GAAartC,EAAOotC,GAAQ,CAAC,EAAG,GAAIS,KAGrC,IAAK,IAAIzuC,EAAI,EAAGivC,IAAQ,EAAMjvC,EAAIY,EAAMF,OAAQV,GAAK,EAAG,CACvD,IAAIkvC,GAAOtuC,EAAMZ,GACb4N,GAAQwgC,GAAUc,GAAM,EAAG,GAC3BrhC,GAAOugC,GAAUc,IAAO,GAC5B,IAEa,MAAVthC,IAA2B,MAAVA,IAA2B,MAAVA,IACtB,MAATC,IAAyB,MAATA,IAAyB,MAATA,KAElCD,KAAUC,GAEb,MAAM,IAAI89B,EAAa,wDASxB,GAPa,gBAATuD,IAA2BD,KAC9BD,GAAqB,GAMlB56B,GAAOm4B,GAFXwC,EAAoB,KADpBD,GAAqB,IAAMI,IACmB,KAG7CnsC,EAAQwpC,GAAWwC,QACb,GAAa,MAAThsC,EAAe,CACzB,KAAMmsC,MAAQnsC,GAAQ,CACrB,IAAKyQ,EACJ,MAAM,IAAI0G,EAAW,sBAAwBzI,EAAO,+CAErD,MACD,CACA,GAAIqC,GAAU9T,EAAI,GAAMY,EAAMF,OAAQ,CACrC,IAAI62B,GAAOzjB,EAAM/Q,EAAOmsC,IAWvBnsC,GAVDksC,KAAU1X,KASG,QAASA,MAAU,kBAAmBA,GAAK3tB,KAC/C2tB,GAAK3tB,IAEL7G,EAAMmsC,GAEhB,MACCD,GAAQ76B,GAAOrR,EAAOmsC,IACtBnsC,EAAQA,EAAMmsC,IAGXD,KAAUD,IACbzC,GAAWwC,GAAqBhsC,EAElC,CACD,CACA,OAAOA,CACR,0BC5VA,IAAIxD,EAAO,CACV+J,IAAK,CAAC,GAGH+R,EAAU9Y,OAEdzE,EAAOD,QAAU,SAASsuC,WACzB,MAAO,CAAE5e,UAAWhuB,GAAO+J,MAAQ/J,EAAK+J,OAAS,CAAEikB,UAAW,gBAAkBlS,EACjF,gCCRA,IAAI8zB,EAA+B,oBAAXrtC,QAA0BA,OAC9CstC,EAAgB,EAAQ,OAE5BtxC,EAAOD,QAAU,SAASwxC,mBACzB,MAA0B,mBAAfF,IACW,mBAAXrtC,SACsB,iBAAtBqtC,EAAW,SACO,iBAAlBrtC,OAAO,QAEXstC,MACR,0BCTAtxC,EAAOD,QAAU,SAASquC,aACzB,GAAsB,mBAAXpqC,QAAiE,mBAAjCS,OAAOgoB,sBAAwC,OAAO,EACjG,GAA+B,iBAApBzoB,OAAOukB,SAAyB,OAAO,EAElD,IAAIhiB,EAAM,CAAC,EACP4M,EAAMnP,OAAO,QACbwtC,EAAS/sC,OAAO0O,GACpB,GAAmB,iBAARA,EAAoB,OAAO,EAEtC,GAA4C,oBAAxC1O,OAAOE,UAAUwC,SAASqB,KAAK2K,GAA8B,OAAO,EACxE,GAA+C,oBAA3C1O,OAAOE,UAAUwC,SAASqB,KAAKgpC,GAAiC,OAAO,EAY3E,IAAKr+B,KADL5M,EAAI4M,GADS,GAED5M,EAAO,OAAO,EAC1B,GAA2B,mBAAhB9B,OAAOyZ,MAAmD,IAA5BzZ,OAAOyZ,KAAK3X,GAAK3D,OAAgB,OAAO,EAEjF,GAA0C,mBAA/B6B,OAAOsqB,qBAAiF,IAA3CtqB,OAAOsqB,oBAAoBxoB,GAAK3D,OAAgB,OAAO,EAE/G,IAAI6uC,EAAOhtC,OAAOgoB,sBAAsBlmB,GACxC,GAAoB,IAAhBkrC,EAAK7uC,QAAgB6uC,EAAK,KAAOt+B,EAAO,OAAO,EAEnD,IAAK1O,OAAOE,UAAUshB,qBAAqBzd,KAAKjC,EAAK4M,GAAQ,OAAO,EAEpE,GAA+C,mBAApC1O,OAAO2Z,yBAAyC,CAC1D,IAAIwE,EAAane,OAAO2Z,yBAAyB7X,EAAK4M,GACtD,GAdY,KAcRyP,EAAW3d,QAA8C,IAA1B2d,EAAW/W,WAAuB,OAAO,CAC7E,CAEA,OAAO,CACR,gCCvCA,IAAI+J,EAAO,EAAQ,OAEnB5V,EAAOD,QAAU6V,EAAKpN,KAAKsT,SAAStT,KAAM/D,OAAOE,UAAU4R,2BCJ3D,SAASm7B,WAAWnrC,GAuBhB,OAtBIA,aAAe+oC,IACf/oC,EAAIorC,MAAQprC,EAAIqrC,OAASrrC,EAAImG,IAAM,WAC/B,MAAM,IAAIlJ,MAAM,mBACpB,EACO+C,aAAeipC,MACtBjpC,EAAIugC,IAAMvgC,EAAIorC,MAAQprC,EAAIqrC,OAAS,WAC/B,MAAM,IAAIpuC,MAAM,mBACpB,GAIJiB,OAAOizB,OAAOnxB,GAEd9B,OAAOsqB,oBAAoBxoB,GAAK8lB,SAAQ,SAAU1Y,GAC9C,IAAI6lB,EAAOjzB,EAAIoN,GAGI,iBAAR6lB,GAAqB/0B,OAAOgzB,SAAS+B,IAC5CkY,WAAWlY,EAEnB,IAEOjzB,CACX,CAEA,IAAIsrC,EAAgBH,WAChBI,EAAWJ,WACfG,EAAch7B,QAAUi7B,EAGxB,MAAMC,SAIJ,WAAAx+B,CAAY4c,QAEQzpB,IAAdypB,EAAKrpB,OAAoBqpB,EAAKrpB,KAAO,CAAC,GAE1C3G,KAAK2G,KAAOqpB,EAAKrpB,KACjB3G,KAAK6xC,gBAAiB,CACxB,CAEA,WAAAC,GACE9xC,KAAK6xC,gBAAiB,CACxB,EAOF,SAASE,WAAWjtC,GAClB,OAAOA,EACJlE,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,SACnB,CAUA,SAASoxC,QAAQC,KAAaC,GAE5B,MAAM30B,EAASjZ,OAAO6kB,OAAO,MAE7B,IAAK,MAAM1S,KAAOw7B,EAChB10B,EAAO9G,GAAOw7B,EAASx7B,GAOzB,OALAy7B,EAAQhmB,SAAQ,SAAS9lB,GACvB,IAAK,MAAMqQ,KAAOrQ,EAChBmX,EAAO9G,GAAOrQ,EAAIqQ,EAEtB,IACwB,CAC1B,CAcA,MAMM07B,kBAAqBzQ,KAChBA,EAAK3Y,KAIhB,MAAMqpB,aAOJ,WAAAh/B,CAAYi/B,EAAWz7B,GACrB5W,KAAK6F,OAAS,GACd7F,KAAKsyC,YAAc17B,EAAQ07B,YAC3BD,EAAUE,KAAKvyC,KACjB,CAMA,OAAAwyC,CAAQh6B,GACNxY,KAAK6F,QAAUksC,WAAWv5B,EAC5B,CAMA,QAAAi6B,CAAS/Q,GACP,IAAKyQ,kBAAkBzQ,GAAO,OAE9B,IAAIgR,EAAYhR,EAAK3Y,KAChB2Y,EAAKiR,cACRD,EAAY,GAAG1yC,KAAKsyC,cAAcI,KAEpC1yC,KAAK4yC,KAAKF,EACZ,CAMA,SAAAG,CAAUnR,GACHyQ,kBAAkBzQ,KAEvB1hC,KAAK6F,QArDU,UAsDjB,CAKA,KAAAf,GACE,OAAO9E,KAAK6F,MACd,CAQA,IAAA+sC,CAAKF,GACH1yC,KAAK6F,QAAU,gBAAgB6sC,KACjC,EAOF,MAAMI,UACJ,WAAA1/B,GAEEpT,KAAK+yC,SAAW,CAAEC,SAAU,IAC5BhzC,KAAKyT,MAAQ,CAACzT,KAAK+yC,SACrB,CAEA,OAAIx5B,GACF,OAAOvZ,KAAKyT,MAAMzT,KAAKyT,MAAMhR,OAAS,EACxC,CAEA,QAAI/C,GAAS,OAAOM,KAAK+yC,QAAU,CAGnC,GAAApM,CAAIjF,GACF1hC,KAAKuZ,IAAIy5B,SAASlwC,KAAK4+B,EACzB,CAGA,QAAA+Q,CAAS1pB,GAEP,MAAM2Y,EAAO,CAAE3Y,OAAMiqB,SAAU,IAC/BhzC,KAAK2mC,IAAIjF,GACT1hC,KAAKyT,MAAM3Q,KAAK4+B,EAClB,CAEA,SAAAmR,GACE,GAAI7yC,KAAKyT,MAAMhR,OAAS,EACtB,OAAOzC,KAAKyT,MAAMskB,KAItB,CAEA,aAAAkb,GACE,KAAOjzC,KAAK6yC,cACd,CAEA,MAAAvlC,GACE,OAAOy/B,KAAKC,UAAUhtC,KAAK+yC,SAAU,KAAM,EAC7C,CAMA,IAAAR,CAAKW,GAEH,OAAOlzC,KAAKoT,YAAY+/B,MAAMD,EAASlzC,KAAK+yC,SAG9C,CAMA,YAAOI,CAAMD,EAASxR,GAQpB,MAPoB,iBAATA,EACTwR,EAAQV,QAAQ9Q,GACPA,EAAKsR,WACdE,EAAQT,SAAS/Q,GACjBA,EAAKsR,SAAS9mB,SAASknB,GAAUpzC,KAAKmzC,MAAMD,EAASE,KACrDF,EAAQL,UAAUnR,IAEbwR,CACT,CAKA,gBAAOG,CAAU3R,GACK,iBAATA,GACNA,EAAKsR,WAENtR,EAAKsR,SAASM,OAAM32B,GAAoB,iBAAPA,IAGnC+kB,EAAKsR,SAAW,CAACtR,EAAKsR,SAAS/vC,KAAK,KAEpCy+B,EAAKsR,SAAS9mB,SAASknB,IACrBN,UAAUO,UAAUD,EAAM,IAGhC,EAuBF,MAAMG,yBAAyBT,UAI7B,WAAA1/B,CAAYwD,GACVvD,QACArT,KAAK4W,QAAUA,CACjB,CAMA,UAAA48B,CAAWh7B,EAAMuQ,GACF,KAATvQ,IAEJxY,KAAKyyC,SAAS1pB,GACd/oB,KAAKwyC,QAAQh6B,GACbxY,KAAK6yC,YACP,CAKA,OAAAL,CAAQh6B,GACO,KAATA,GAEJxY,KAAK2mC,IAAInuB,EACX,CAMA,cAAAi7B,CAAezL,EAASx0B,GAEtB,MAAMkuB,EAAOsG,EAAQtoC,KACrBgiC,EAAK3Y,KAAOvV,EACZkuB,EAAKiR,aAAc,EACnB3yC,KAAK2mC,IAAIjF,EACX,CAEA,MAAAgS,GAEE,OADiB,IAAItB,aAAapyC,KAAMA,KAAK4W,SAC7B9R,OAClB,CAEA,QAAA6uC,GACE,OAAO,CACT,EAeF,SAAS91B,OAAO+1B,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAE5BA,EAAG/1B,OAHM,IAIlB,CAgDA,MAAMg2B,EAAa,iDA4CnB,MACMC,EAAW,eACXC,EAAsB,gBACtBC,EAAY,oBACZC,EAAc,yEACdC,EAAmB,eA4BnBC,EAAmB,CACvBC,MAAO,eAAgBC,UAAW,GAE9BC,EAAmB,CACvB5B,UAAW,SACX0B,MAAO,IACP7wC,IAAK,IACLgxC,QAAS,MACTC,SAAU,CAACL,IAEPM,EAAoB,CACxB/B,UAAW,SACX0B,MAAO,IACP7wC,IAAK,IACLgxC,QAAS,MACTC,SAAU,CAACL,IAEPO,EAAqB,CACzBN,MAAO,8IAUHO,QAAU,SAASP,EAAO7wC,EAAKqxC,EAAc,CAAC,GAClD,MAAM5kB,EAAOgiB,QACX,CACEU,UAAW,UACX0B,QACA7wC,MACAixC,SAAU,IAEZI,GAQF,OANA5kB,EAAKwkB,SAAS1xC,KAAK4xC,GACnB1kB,EAAKwkB,SAAS1xC,KAAK,CACjB4vC,UAAW,SACX0B,MAAO,6CACPC,UAAW,IAENrkB,CACT,EACM6kB,GAAsBF,QAAQ,KAAM,KACpCG,GAAuBH,QAAQ,OAAQ,QACvCI,GAAoBJ,QAAQ,IAAK,KACjCK,GAAc,CAClBtC,UAAW,SACX0B,MAAOJ,EACPK,UAAW,GAEPY,GAAgB,CACpBvC,UAAW,SACX0B,MAAOH,EACPI,UAAW,GAEPa,GAAqB,CACzBxC,UAAW,SACX0B,MAAOF,EACPG,UAAW,GAEPc,GAAkB,CACtBzC,UAAW,SACX0B,MAAOJ,oGASPK,UAAW,GAEPe,GAAc,CAOlBhB,MAAO,kBACPI,SAAU,CAAC,CACT9B,UAAW,SACX0B,MAAO,KACP7wC,IAAK,aACLgxC,QAAS,KACTC,SAAU,CACRL,EACA,CACEC,MAAO,KACP7wC,IAAK,KACL8wC,UAAW,EACXG,SAAU,CAACL,QAKbkB,GAAa,CACjB3C,UAAW,QACX0B,MAAON,EACPO,UAAW,GAEPiB,GAAwB,CAC5B5C,UAAW,QACX0B,MAAOL,EACPM,UAAW,GAEPkB,GAAe,CAEnBnB,MAAO,UAAYL,EACnBM,UAAW,GAoBb,IAAImB,GAAqBlxC,OAAOizB,OAAO,CACnCjI,UAAW,KACXmmB,iBAzKqB,OA0KrB3B,SAAUA,EACVC,oBAAqBA,EACrBC,UAAWA,EACXC,YAAaA,EACbC,iBAAkBA,EAClBwB,eAzKmB,+IA0KnBC,QArKY,CAACC,EAAO,CAAC,KACvB,MAAMC,EAAe,YAQrB,OAPID,EAAKE,SACPF,EAAKxB,MApGT,SAAShoC,UAAU8X,GAEjB,OADeA,EAAKkS,KAAKlqB,GAAM2R,OAAO3R,KAAIjJ,KAAK,GAEjD,CAiGiBmJ,CACXypC,EACA,OACAD,EAAKE,OACL,SAEG9D,QAAQ,CACbU,UAAW,OACX0B,MAAOyB,EACPtyC,IAAK,IACL8wC,UAAW,EAEX,WAAY,CAACrsC,EAAG+tC,KACE,IAAZ/tC,EAAE8O,OAAai/B,EAAKjE,aAAa,GAEtC8D,EAAK,EAoJNzB,iBAAkBA,EAClBG,iBAAkBA,EAClBG,kBAAmBA,EACnBC,mBAAoBA,EACpBC,QACAE,oBAAqBA,GACrBC,qBAAsBA,GACtBC,kBAAmBA,GACnBC,YAAaA,GACbC,cAAeA,GACfC,mBAAoBA,GACpBC,gBAAiBA,GACjBC,YAAaA,GACbC,WAAYA,GACZC,sBAAuBA,GACvBC,aAAcA,GACdS,kBApCsB,SAAShmB,GACjC,OAAO1rB,OAAOwX,OAAOkU,EACnB,CAEE,WAAY,CAAChoB,EAAG+tC,KAAWA,EAAKpvC,KAAKsvC,YAAcjuC,EAAE,EAAE,EAEvD,SAAU,CAACA,EAAG+tC,KAAeA,EAAKpvC,KAAKsvC,cAAgBjuC,EAAE,IAAI+tC,EAAKjE,aAAa,GAErF,IAuDA,SAASoE,sBAAsBr1C,EAAOs1C,GAErB,MADAt1C,EAAMqT,MAAMrT,EAAMiW,MAAQ,IAEvCq/B,EAASrE,aAEb,CAOA,SAASsE,cAAcpmB,EAAM3U,GACtBA,GACA2U,EAAKomB,gBAOVpmB,EAAKokB,MAAQ,OAASpkB,EAAKomB,cAAczhC,MAAM,KAAK1R,KAAK,KAAO,sBAChE+sB,EAAKqmB,cAAgBH,sBACrBlmB,EAAKsmB,SAAWtmB,EAAKsmB,UAAYtmB,EAAKomB,qBAC/BpmB,EAAKomB,mBAKW7vC,IAAnBypB,EAAKqkB,YAAyBrkB,EAAKqkB,UAAY,GACrD,CAMA,SAASkC,eAAevmB,EAAMwmB,GACvBrzC,MAAMuD,QAAQspB,EAAKukB,WAExBvkB,EAAKukB,QA7UP,SAASkC,UAAUvyB,GAEjB,MADe,IAAMA,EAAKkS,KAAKlqB,GAAM2R,OAAO3R,KAAIjJ,KAAK,KAAO,GAE9D,CA0UiBwzC,IAAUzmB,EAAKukB,SAChC,CAMA,SAASmC,aAAa1mB,EAAMwmB,GAC1B,GAAKxmB,EAAKnvB,MAAV,CACA,GAAImvB,EAAKokB,OAASpkB,EAAKzsB,IAAK,MAAM,IAAIF,MAAM,4CAE5C2sB,EAAKokB,MAAQpkB,EAAKnvB,aACXmvB,EAAKnvB,KAJW,CAKzB,CAMA,SAAS81C,iBAAiB3mB,EAAMwmB,QAEPjwC,IAAnBypB,EAAKqkB,YAAyBrkB,EAAKqkB,UAAY,EACrD,CAGA,MAAMuC,GAAkB,CACtB,KACA,MACA,MACA,KACA,MACA,KACA,KACA,OACA,SACA,OACA,SAGIC,GAA4B,UAQlC,SAASC,gBAAgBC,EAAaC,EAAiBtE,EAAYmE,IAEjE,MAAMI,EAAmB,CAAC,EAiB1B,MAb2B,iBAAhBF,EACTG,YAAYxE,EAAWqE,EAAYpiC,MAAM,MAChCxR,MAAMuD,QAAQqwC,GACvBG,YAAYxE,EAAWqE,GAEvBzyC,OAAOyZ,KAAKg5B,GAAa7qB,SAAQ,SAASwmB,GAExCpuC,OAAOwX,OACLm7B,EACAH,gBAAgBC,EAAYrE,GAAYsE,EAAiBtE,GAE7D,IAEKuE,EAYP,SAASC,YAAYxE,EAAWyE,GAC1BH,IACFG,EAAcA,EAAY/gB,KAAIlqB,GAAKA,EAAE5E,iBAEvC6vC,EAAYjrB,SAAQ,SAASkrB,GAC3B,MAAMC,EAAOD,EAAQziC,MAAM,KAC3BsiC,EAAiBI,EAAK,IAAM,CAAC3E,EAAW4E,gBAAgBD,EAAK,GAAIA,EAAK,IACxE,GACF,CACF,CAUA,SAASC,gBAAgBF,EAASG,GAGhC,OAAIA,EACKtuC,OAAOsuC,GAUlB,SAASC,cAAcJ,GACrB,OAAOR,GAAgBxpC,SAASgqC,EAAQ9vC,cAC1C,CATSkwC,CAAcJ,GAAW,EAAI,CACtC,CAqBA,SAASK,gBAAgBC,GAAU,QAAEC,IAOnC,SAASC,OAAO9yC,EAAO6Z,GACrB,OAAO,IAAIoW,OACTlX,OAAO/Y,GACP,KAAO4yC,EAASG,iBAAmB,IAAM,KAAOl5B,EAAS,IAAM,IAEnE,CAeA,MAAMm5B,WACJ,WAAA1kC,GACEpT,KAAK+3C,aAAe,CAAC,EAErB/3C,KAAKg4C,QAAU,GACfh4C,KAAKi4C,QAAU,EACfj4C,KAAKsZ,SAAW,CAClB,CAGA,OAAA4+B,CAAQtE,EAAIgC,GACVA,EAAKt8B,SAAWtZ,KAAKsZ,WAErBtZ,KAAK+3C,aAAa/3C,KAAKi4C,SAAWrC,EAClC51C,KAAKg4C,QAAQl1C,KAAK,CAAC8yC,EAAMhC,IACzB5zC,KAAKi4C,SA5eX,SAASE,iBAAiBvE,GACxB,OAAO,IAAK7e,OAAO6e,EAAG5sC,WAAa,KAAMsc,KAAK,IAAI7gB,OAAS,CAC7D,CA0esB01C,CAAiBvE,GAAM,CACzC,CAEA,OAAAwE,GAC8B,IAAxBp4C,KAAKg4C,QAAQv1C,SAGfzC,KAAKsjB,KAAO,IAAM,MAEpB,MAAM+0B,EAAcr4C,KAAKg4C,QAAQ5hB,KAAIzZ,GAAMA,EAAG,KAC9C3c,KAAKs4C,UAAYV,OArdvB,SAAS30C,KAAKs1C,EAASC,EAAY,KACjC,IAAIC,EAAc,EAElB,OAAOF,EAAQniB,KAAKsiB,IAClBD,GAAe,EACf,MAAMzvC,EAASyvC,EACf,IAAI7E,EAAK/1B,OAAO66B,GACZjrC,EAAM,GAEV,KAAOmmC,EAAGnxC,OAAS,GAAG,CACpB,MAAM5B,EAAQgzC,EAAWvwB,KAAKswB,GAC9B,IAAK/yC,EAAO,CACV4M,GAAOmmC,EACP,KACF,CACAnmC,GAAOmmC,EAAG+E,UAAU,EAAG93C,EAAMiW,OAC7B88B,EAAKA,EAAG+E,UAAU93C,EAAMiW,MAAQjW,EAAM,GAAG4B,QACrB,OAAhB5B,EAAM,GAAG,IAAeA,EAAM,GAEhC4M,GAAO,KAAO1M,OAAOkI,OAAOpI,EAAM,IAAMmI,IAExCyE,GAAO5M,EAAM,GACI,MAAbA,EAAM,IACR43C,IAGN,CACA,OAAOhrC,CAAG,IACT2oB,KAAIwd,GAAM,IAAIA,OAAO3wC,KAAKu1C,EAC/B,CAwb8Bv1C,CAAKo1C,IAAc,GAC3Cr4C,KAAK44C,UAAY,CACnB,CAGA,IAAAt1B,CAAKu1B,GACH74C,KAAKs4C,UAAUM,UAAY54C,KAAK44C,UAChC,MAAM/3C,EAAQb,KAAKs4C,UAAUh1B,KAAKu1B,GAClC,IAAKh4C,EAAS,OAAO,KAGrB,MAAMkB,EAAIlB,EAAMi4C,WAAU,CAACn8B,EAAI5a,IAAMA,EAAI,QAAYwE,IAAPoW,IAExCo8B,EAAY/4C,KAAK+3C,aAAah2C,GAKpC,OAFAlB,EAAMovC,OAAO,EAAGluC,GAETuC,OAAOwX,OAAOjb,EAAOk4C,EAC9B,EAkCF,MAAMC,oBACJ,WAAA5lC,GAEEpT,KAAKi5C,MAAQ,GAEbj5C,KAAKk5C,aAAe,GACpBl5C,KAAK4pC,MAAQ,EAEb5pC,KAAK44C,UAAY,EACjB54C,KAAKm5C,WAAa,CACpB,CAGA,UAAAC,CAAWtiC,GACT,GAAI9W,KAAKk5C,aAAapiC,GAAQ,OAAO9W,KAAKk5C,aAAapiC,GAEvD,MAAMuiC,EAAU,IAAIvB,WAIpB,OAHA93C,KAAKi5C,MAAM5zC,MAAMyR,GAAOoV,SAAQ,EAAE0nB,EAAIgC,KAAUyD,EAAQnB,QAAQtE,EAAIgC,KACpEyD,EAAQjB,UACRp4C,KAAKk5C,aAAapiC,GAASuiC,EACpBA,CACT,CAEA,0BAAAC,GACE,OAA2B,IAApBt5C,KAAKm5C,UACd,CAEA,WAAAI,GACEv5C,KAAKm5C,WAAa,CACpB,CAGA,OAAAjB,CAAQtE,EAAIgC,GACV51C,KAAKi5C,MAAMn2C,KAAK,CAAC8wC,EAAIgC,IACH,UAAdA,EAAKnvC,MAAkBzG,KAAK4pC,OAClC,CAGA,IAAAtmB,CAAKu1B,GACH,MAAM7wC,EAAIhI,KAAKo5C,WAAWp5C,KAAKm5C,YAC/BnxC,EAAE4wC,UAAY54C,KAAK44C,UACnB,IAAIr7B,EAASvV,EAAEsb,KAAKu1B,GAiCpB,GAAI74C,KAAKs5C,6BACP,GAAI/7B,GAAUA,EAAOzG,QAAU9W,KAAK44C,eAAkB,CACpD,MAAMY,EAAKx5C,KAAKo5C,WAAW,GAC3BI,EAAGZ,UAAY54C,KAAK44C,UAAY,EAChCr7B,EAASi8B,EAAGl2B,KAAKu1B,EACnB,CAWF,OARIt7B,IACFvd,KAAKm5C,YAAc57B,EAAOjE,SAAW,EACjCtZ,KAAKm5C,aAAen5C,KAAK4pC,OAE3B5pC,KAAKu5C,eAIFh8B,CACT,EA4IF,GAHKm6B,EAAS+B,qBAAoB/B,EAAS+B,mBAAqB,IAG5D/B,EAASlD,UAAYkD,EAASlD,SAASpnC,SAAS,QAClD,MAAM,IAAI/J,MAAM,6FAMlB,OAFAq0C,EAASgC,iBAAmB1H,QAAQ0F,EAASgC,kBAAoB,CAAC,GAjFlE,SAASC,YAAY3pB,EAAM3U,GACzB,MAAMu+B,EAAkC,EACxC,GAAI5pB,EAAK6pB,WAAY,OAAOD,EAE5B,CAGElD,cACAxqB,SAAQre,GAAOA,EAAImiB,EAAM3U,KAE3Bq8B,EAAS+B,mBAAmBvtB,SAAQre,GAAOA,EAAImiB,EAAM3U,KAGrD2U,EAAKqmB,cAAgB,KAErB,CACED,cAGAG,eAEAI,kBACAzqB,SAAQre,GAAOA,EAAImiB,EAAM3U,KAE3B2U,EAAK6pB,YAAa,EAElB,IAAIC,EAAiB,KAWrB,GAV6B,iBAAlB9pB,EAAKsmB,WACdwD,EAAiB9pB,EAAKsmB,SAASyD,gBACxB/pB,EAAKsmB,SAASyD,UAGnB/pB,EAAKsmB,WACPtmB,EAAKsmB,SAAWQ,gBAAgB9mB,EAAKsmB,SAAUoB,EAASG,mBAItD7nB,EAAKgqB,SAAWF,EAClB,MAAM,IAAIz2C,MAAM,kGAgClB,OA3BAy2C,EAAiBA,GAAkB9pB,EAAKgqB,SAAW,MACnDJ,EAAMK,iBAAmBrC,OAAOkC,GAAgB,GAE5Cz+B,IACG2U,EAAKokB,QAAOpkB,EAAKokB,MAAQ,SAC9BwF,EAAMM,QAAUtC,OAAO5nB,EAAKokB,OACxBpkB,EAAKmqB,iBAAgBnqB,EAAKzsB,IAAMysB,EAAKokB,OACpCpkB,EAAKzsB,KAAQysB,EAAKoqB,iBAAgBpqB,EAAKzsB,IAAM,SAC9CysB,EAAKzsB,MAAKq2C,EAAMS,MAAQzC,OAAO5nB,EAAKzsB,MACxCq2C,EAAMU,cAAgBz8B,OAAOmS,EAAKzsB,MAAQ,GACtCysB,EAAKoqB,gBAAkB/+B,EAAOi/B,gBAChCV,EAAMU,gBAAkBtqB,EAAKzsB,IAAM,IAAM,IAAM8X,EAAOi/B,gBAGtDtqB,EAAKukB,UAASqF,EAAMW,UAAY3C,OAAuC5nB,EAAY,UAClFA,EAAKwkB,WAAUxkB,EAAKwkB,SAAW,IAEpCxkB,EAAKwkB,SAAW,GAAGpoC,UAAU4jB,EAAKwkB,SAASpe,KAAI,SAASpsB,GACtD,OAoDN,SAASwwC,kBAAkBxqB,GACrBA,EAAKyqB,WAAazqB,EAAK0qB,iBACzB1qB,EAAK0qB,eAAiB1qB,EAAKyqB,SAASrkB,KAAI,SAASukB,GAC/C,OAAO3I,QAAQhiB,EAAM,CAAEyqB,SAAU,MAAQE,EAC3C,KAMF,GAAI3qB,EAAK0qB,eACP,OAAO1qB,EAAK0qB,eAOd,GAAIE,mBAAmB5qB,GACrB,OAAOgiB,QAAQhiB,EAAM,CAAE6qB,OAAQ7qB,EAAK6qB,OAAS7I,QAAQhiB,EAAK6qB,QAAU,OAGtE,GAAIv2C,OAAOgzB,SAAStH,GAClB,OAAOgiB,QAAQhiB,GAIjB,OAAOA,CACT,CAhFawqB,CAAwB,SAANxwC,EAAegmB,EAAOhmB,EACjD,KACAgmB,EAAKwkB,SAAStoB,SAAQ,SAASliB,GAAK2vC,YAA8B,EAAKC,EAAQ,IAE3E5pB,EAAK6qB,QACPlB,YAAY3pB,EAAK6qB,OAAQx/B,GAG3Bu+B,EAAMP,QA3HR,SAASyB,eAAe9qB,GACtB,MAAM+qB,EAAK,IAAI/B,oBAWf,OATAhpB,EAAKwkB,SAAStoB,SAAQ8uB,GAAQD,EAAG7C,QAAQ8C,EAAK5G,MAAO,CAAE6G,KAAMD,EAAMv0C,KAAM,YAErEupB,EAAKsqB,eACPS,EAAG7C,QAAQloB,EAAKsqB,cAAe,CAAE7zC,KAAM,QAErCupB,EAAKukB,SACPwG,EAAG7C,QAAQloB,EAAKukB,QAAS,CAAE9tC,KAAM,YAG5Bs0C,CACT,CA8GkBD,CAAelB,GACxBA,CACT,CAYOD,CAA8B,EACvC,CAaA,SAASiB,mBAAmB5qB,GAC1B,QAAKA,IAEEA,EAAKoqB,gBAAkBQ,mBAAmB5qB,EAAK6qB,QACxD,CAkDA,SAASK,eAAeC,GACtB,MAAMC,EAAY,CAChBjtB,MAAO,CAAC,WAAY,OAAQ,cAC5BxnB,KAAM,WACJ,MAAO,CACL00C,iBAAkB,GAClBC,iBAAiB,EAErB,EACAC,SAAU,CACR,SAAA7I,GACE,OAAI1yC,KAAKs7C,gBAAwB,GAE1B,QAAUt7C,KAAKq7C,gBACxB,EACA,WAAAG,GAEE,IAAKx7C,KAAKy7C,aAAeN,EAAKO,YAAY17C,KAAK03C,UAG7C,OAFAnsC,QAAQ4O,KAAK,iBAAiBna,KAAK03C,+CACnC13C,KAAKs7C,iBAAkB,EAChBvJ,WAAW/xC,KAAKoD,MAGzB,IAAIma,EAAS,CAAC,EAQd,OAPIvd,KAAKy7C,YACPl+B,EAAS49B,EAAKQ,cAAc37C,KAAKoD,MACjCpD,KAAKq7C,iBAAmB99B,EAAOm6B,WAE/Bn6B,EAAS49B,EAAKS,UAAU57C,KAAK03C,SAAU13C,KAAKoD,KAAMpD,KAAK67C,gBACvD77C,KAAKq7C,iBAAmBr7C,KAAK03C,UAExBn6B,EAAOzY,KAChB,EACA,UAAA22C,GACE,OAAQz7C,KAAK03C,UAtCrB,SAASoE,yBAAyBh3C,GAChC,OAAO08B,QAAQ18B,GAAmB,KAAVA,EAC1B,CAoCiCg3C,CAAyB97C,KAAK+7C,WACzD,EACAF,eAAc,KACL,GAKX,MAAAG,CAAO/iC,GACL,OAAOA,EAAc,MAAO,CAAC,EAAG,CAC9BA,EAAc,OAAQ,CACpBgjC,MAAOj8C,KAAK0yC,UACZwJ,SAAU,CAAEvZ,UAAW3iC,KAAKw7C,gBAGlC,GAUF,MAAO,CAAEJ,YAAWe,UANF,CAChB,OAAAC,CAAQC,GACNA,EAAIC,UAAU,cAAelB,EAC/B,GAIJ,CAKA,MAAMmB,GAAkB,CACtB,yBAA0B,EAAG5/B,KAAIY,SAAQ/E,WACvC,MAAMgkC,EAAiBC,WAAW9/B,GAClC,IAAK6/B,EAAe/5C,OAAQ,OAE5B,MAAMi6C,EAAa5jC,SAASG,cAAc,OAC1CyjC,EAAW/Z,UAAYplB,EAAOzY,MAC9ByY,EAAOzY,MA2DX,SAAS63C,aAAa1K,EAAUuJ,EAAa12C,GAC3C,IAAI83C,EAAY,EACZr/B,EAAS,GACb,MAAMs/B,EAAY,GAElB,SAASC,eACP,OAAK7K,EAASxvC,QAAW+4C,EAAY/4C,OAGjCwvC,EAAS,GAAGjpC,SAAWwyC,EAAY,GAAGxyC,OAChCipC,EAAS,GAAGjpC,OAASwyC,EAAY,GAAGxyC,OAAUipC,EAAWuJ,EAkBnC,UAAzBA,EAAY,GAAGuB,MAAoB9K,EAAWuJ,EArB5CvJ,EAASxvC,OAASwvC,EAAWuJ,CAsBxC,CAKA,SAASztB,KAAK2T,GAEZ,SAASsb,gBAAgBrY,GACvB,MAAO,IAAMA,EAAKtB,SAAW,KAAO0O,WAAWpN,EAAK7/B,OAAS,GAC/D,CAEAyY,GAAU,IAAMD,IAAIokB,GAAQ,GAAGtL,IAAI/tB,KAAKq5B,EAAK4B,WAAY0Z,iBAAiB/5C,KAAK,IAAM,GACvF,CAKA,SAASoqB,MAAMqU,GACbnkB,GAAU,KAAOD,IAAIokB,GAAQ,GAC/B,CAKA,SAASsa,OAAOe,IACG,UAAhBA,EAAMA,MAAoBhvB,KAAOV,OAAO0vB,EAAMrb,KACjD,CAEA,KAAOuQ,EAASxvC,QAAU+4C,EAAY/4C,QAAQ,CAC5C,IAAIw6C,EAASH,eAGb,GAFAv/B,GAAUw0B,WAAWjtC,EAAM6zC,UAAUiE,EAAWK,EAAO,GAAGj0C,SAC1D4zC,EAAYK,EAAO,GAAGj0C,OAClBi0C,IAAWhL,EAAU,CAOvB4K,EAAUK,UAAUhxB,QAAQmB,OAC5B,GACE2uB,OAAOiB,EAAOhN,OAAO,EAAG,GAAG,IAC3BgN,EAASH,qBACFG,IAAWhL,GAAYgL,EAAOx6C,QAAUw6C,EAAO,GAAGj0C,SAAW4zC,GACtEC,EAAUK,UAAUhxB,QAAQ6B,KAC9B,KAC0B,UAApBkvB,EAAO,GAAGF,MACZF,EAAU/5C,KAAKm6C,EAAO,GAAGvb,MAEzBmb,EAAU9kB,MAEZikB,OAAOiB,EAAOhN,OAAO,EAAG,GAAG,GAE/B,CACA,OAAO1yB,EAASw0B,WAAWjtC,EAAMwE,OAAOszC,GAC1C,CA/ImBD,CAAaH,EAAgBC,WAAWC,GAAalkC,EAAK,GAgB7E,SAAS8E,IAAIokB,GACX,OAAOA,EAAK2B,SAAS/7B,aACvB,CAKA,SAASm1C,WAAW/a,GAElB,MAAMnkB,EAAS,GA0Bf,OAzBA,SAAU4/B,YAAYzb,EAAM14B,GAC1B,IAAK,IAAIoqC,EAAQ1R,EAAK6D,WAAY6N,EAAOA,EAAQA,EAAMgK,YAC9B,IAAnBhK,EAAMzX,SACR3yB,GAAUoqC,EAAMiK,UAAU56C,OACE,IAAnB2wC,EAAMzX,WACfpe,EAAOza,KAAK,CACVi6C,MAAO,QACP/zC,OAAQA,EACR04B,KAAM0R,IAERpqC,EAASm0C,YAAY/J,EAAOpqC,GAIvBsU,IAAI81B,GAAOvyC,MAAM,oBACpB0c,EAAOza,KAAK,CACVi6C,MAAO,OACP/zC,OAAQA,EACR04B,KAAM0R,KAKd,OAAOpqC,CACR,CAxBD,CAwBG04B,EAAM,GACFnkB,CACT,CAuGA,MAAM+/B,GAAmB,CAAC,EAKpB9xC,MAASkI,IACbnI,QAAQC,MAAMkI,EAAQ,EAOlByG,KAAO,CAACzG,KAAYwQ,KACxB3Y,QAAQ6hC,IAAI,SAAS15B,OAAcwQ,EAAK,EAOpCq5B,WAAa,CAACz8B,EAASpN,KACvB4pC,GAAiB,GAAGx8B,KAAWpN,OAEnCnI,QAAQ6hC,IAAI,oBAAoBtsB,MAAYpN,KAC5C4pC,GAAiB,GAAGx8B,KAAWpN,MAAa,EAAI,EAQ5C8pC,GAAWzL,WACX0L,GAAYzL,QACZ0L,GAAW75C,OAAO,WAs/BxB,IAAI+3C,GAh/BS,SAAST,GAGpB,MAAMwC,EAAYr5C,OAAO6kB,OAAO,MAE1By0B,EAAUt5C,OAAO6kB,OAAO,MAExBwuB,EAAU,GAIhB,IAAIkG,GAAY,EAChB,MAAMC,EAAc,yBACdC,EAAqB,sFAErBC,EAAqB,CAAEC,mBAAmB,EAAMzqC,KAAM,aAAcghC,SAAU,IAKpF,IAAI59B,EAAU,CACZsnC,cAAe,qBACfC,iBAAkB,8BAClB7L,YAAa,QACb8L,WAAY,KACZC,OAAO,EACPV,UAAW,KAGXW,UAAW/K,kBASb,SAASgL,mBAAmBC,GAC1B,OAAO5nC,EAAQsnC,cAAc58C,KAAKk9C,EACpC,CAgDA,SAAS5C,UAAU6C,EAAoBC,EAAe7C,EAAgB8C,GACpE,IAAIv7C,EAAO,GACPo7C,EAAe,GACU,iBAAlBE,GACTt7C,EAAOq7C,EACP5C,EAAiB6C,EAAc7C,eAC/B2C,EAAeE,EAAchH,SAG7BiH,OAAep4C,IAGfg3C,WAAW,SAAU,uDACrBA,WAAW,SAAU,yGACrBiB,EAAeC,EACfr7C,EAAOs7C,GAIT,MAAM1T,EAAU,CACd5nC,OACAs0C,SAAU8G,GAIZI,KAAK,mBAAoB5T,GAIzB,MAAMztB,EAASytB,EAAQztB,OACnBytB,EAAQztB,OACRshC,WAAW7T,EAAQ0M,SAAU1M,EAAQ5nC,KAAMy4C,EAAgB8C,GAM/D,OAJAphC,EAAOna,KAAO4nC,EAAQ5nC,KAEtBw7C,KAAK,kBAAmBrhC,GAEjBA,CACT,CAWA,SAASshC,WAAWL,EAAcM,EAAiBjD,EAAgB8C,GAOjE,SAASI,YAAY/uB,EAAMnvB,GACzB,MAAMm+C,EAAYtH,EAASG,iBAAmBh3C,EAAM,GAAGyG,cAAgBzG,EAAM,GAC7E,OAAOyD,OAAOE,UAAU4R,eAAe/N,KAAK2nB,EAAKsmB,SAAU0I,IAAchvB,EAAKsmB,SAAS0I,EACzF,CAkEA,SAASC,gBACgB,MAAnB1lC,GAAI2lC,YA3BV,SAASC,qBACP,GAAmB,KAAfC,GAAmB,OAEvB,IAAI7hC,EAAS,KAEb,GAA+B,iBAApBhE,GAAI2lC,YAA0B,CACvC,IAAKvB,EAAUpkC,GAAI2lC,aAEjB,YADAlX,GAAQwK,QAAQ4M,IAGlB7hC,EAASshC,WAAWtlC,GAAI2lC,YAAaE,IAAY,EAAMC,GAAc9lC,GAAI2lC,cACzEG,GAAc9lC,GAAI2lC,aAA4C3hC,EAAU,GAC1E,MACEA,EAASo+B,cAAcyD,GAAY7lC,GAAI2lC,YAAYz8C,OAAS8W,GAAI2lC,YAAc,MAO5E3lC,GAAI86B,UAAY,IAClBA,IAAa92B,EAAO82B,WAEtBrM,GAAQyL,eAAel2B,EAAOyqB,QAASzqB,EAAOm6B,SAChD,CAIIyH,GAlEJ,SAASG,kBACP,IAAK/lC,GAAI+8B,SAEP,YADAtO,GAAQwK,QAAQ4M,IAIlB,IAAIxG,EAAY,EAChBr/B,GAAI0gC,iBAAiBrB,UAAY,EACjC,IAAI/3C,EAAQ0Y,GAAI0gC,iBAAiB32B,KAAK87B,IAClC/6C,EAAM,GAEV,KAAOxD,GAAO,CACZwD,GAAO+6C,GAAWzG,UAAUC,EAAW/3C,EAAMiW,OAC7C,MAAMnQ,EAAOo4C,YAAYxlC,GAAK1Y,GAC9B,GAAI8F,EAAM,CACR,MAAOoiB,EAAMw2B,GAAoB54C,EAKjC,GAJAqhC,GAAQwK,QAAQnuC,GAChBA,EAAM,GAENgwC,IAAakL,EACTx2B,EAAKy2B,WAAW,KAGlBn7C,GAAOxD,EAAM,OACR,CACL,MAAM4+C,EAAW/H,EAASgC,iBAAiB3wB,IAASA,EACpDif,GAAQwL,WAAW3yC,EAAM,GAAI4+C,EAC/B,CACF,MACEp7C,GAAOxD,EAAM,GAEf+3C,EAAYr/B,GAAI0gC,iBAAiBrB,UACjC/3C,EAAQ0Y,GAAI0gC,iBAAiB32B,KAAK87B,GACpC,CACA/6C,GAAO+6C,GAAW91C,OAAOsvC,GACzB5Q,GAAQwK,QAAQnuC,EAClB,CAgCIi7C,GAEFF,GAAa,EACf,CAKA,SAASM,aAAa1vB,GAKpB,OAJIA,EAAK0iB,WACP1K,GAAQyK,SAASiF,EAASgC,iBAAiB1pB,EAAK0iB,YAAc1iB,EAAK0iB,WAErEn5B,GAAMjV,OAAO6kB,OAAO6G,EAAM,CAAE3U,OAAQ,CAAEvW,MAAOyU,MACtCA,EACT,CAQA,SAASomC,UAAU3vB,EAAMnvB,EAAO++C,GAC9B,IAAIC,EAh1CV,SAASL,WAAW5L,EAAIkM,GACtB,MAAMj/C,EAAQ+yC,GAAMA,EAAGtwB,KAAKw8B,GAC5B,OAAOj/C,GAAyB,IAAhBA,EAAMiW,KACxB,CA60CoB0oC,CAAWxvB,EAAKqqB,MAAOuF,GAErC,GAAIC,EAAS,CACX,GAAI7vB,EAAK,UAAW,CAClB,MAAM+lB,EAAO,IAAInE,SAAS5hB,GAC1BA,EAAK,UAAUnvB,EAAOk1C,GAClBA,EAAKlE,iBAAgBgO,GAAU,EACrC,CAEA,GAAIA,EAAS,CACX,KAAO7vB,EAAK+vB,YAAc/vB,EAAK3U,QAC7B2U,EAAOA,EAAK3U,OAEd,OAAO2U,CACT,CACF,CAGA,GAAIA,EAAKoqB,eACP,OAAOuF,UAAU3vB,EAAK3U,OAAQxa,EAAO++C,EAEzC,CAOA,SAASI,SAASF,GAChB,OAA+B,IAA3BvmC,GAAI8/B,QAAQF,YAGdiG,IAAcU,EAAO,GACd,IAIPG,IAA2B,EACpB,EAEX,CAQA,SAASC,aAAar/C,GACpB,MAAMi/C,EAASj/C,EAAM,GACfs/C,EAAUt/C,EAAMo6C,KAEhBlF,EAAO,IAAInE,SAASuO,GAEpBC,EAAkB,CAACD,EAAQ9J,cAAe8J,EAAQ,aACxD,IAAK,MAAME,KAAMD,EACf,GAAKC,IACLA,EAAGx/C,EAAOk1C,GACNA,EAAKlE,gBAAgB,OAAOmO,SAASF,GAuB3C,OApBIK,GAAWA,EAAQhG,iBACrBgG,EAAQ9F,MA/7ChB,SAAS3lB,OAAO5vB,GACd,OAAO,IAAIiwB,OAAOjwB,EAAMlE,QAAQ,wBAAyB,QAAS,IACpE,CA67CwB8zB,CAAOorB,IAGrBK,EAAQG,KACVlB,IAAcU,GAEVK,EAAQI,eACVnB,IAAcU,GAEhBb,gBACKkB,EAAQK,aAAgBL,EAAQI,eACnCnB,GAAaU,IAGjBJ,aAAaS,GAKNA,EAAQK,YAAc,EAAIV,EAAOr9C,MAC1C,CAOA,SAASg+C,WAAW5/C,GAClB,MAAMi/C,EAASj/C,EAAM,GACf++C,EAAqBd,EAAgBx1C,OAAOzI,EAAMiW,OAElD4pC,EAAUf,UAAUpmC,GAAK1Y,EAAO++C,GACtC,IAAKc,EAAW,OAAOhD,GAEvB,MAAMiD,EAASpnC,GACXonC,EAAOL,KACTlB,IAAcU,GAERa,EAAOC,WAAaD,EAAOE,aAC/BzB,IAAcU,GAEhBb,gBACI0B,EAAOE,aACTzB,GAAaU,IAGjB,GACMvmC,GAAIm5B,WACN1K,GAAQ6K,YAELt5B,GAAI+mC,MAAS/mC,GAAI2lC,cACpB7K,IAAa96B,GAAI86B,WAEnB96B,GAAMA,GAAI8B,aACH9B,KAAQmnC,EAAQrlC,QAOzB,OANIqlC,EAAQ7F,SACN6F,EAAQvG,iBACVuG,EAAQ7F,OAAOR,MAAQqG,EAAQrG,OAEjCqF,aAAagB,EAAQ7F,SAEhB8F,EAAOC,UAAY,EAAId,EAAOr9C,MACvC,CAaA,IAAIq+C,EAAY,CAAC,EAQjB,SAASC,cAAcC,EAAiBngD,GACtC,MAAMi/C,EAASj/C,GAASA,EAAM,GAK9B,GAFAu+C,IAAc4B,EAEA,MAAVlB,EAEF,OADAb,gBACO,EAOT,GAAuB,UAAnB6B,EAAUr6C,MAAmC,QAAf5F,EAAM4F,MAAkBq6C,EAAUhqC,QAAUjW,EAAMiW,OAAoB,KAAXgpC,EAAe,CAG1G,GADAV,IAAcN,EAAgBz5C,MAAMxE,EAAMiW,MAAOjW,EAAMiW,MAAQ,IAC1D+mC,EAAW,CAEd,MAAMhjC,EAAM,IAAIxX,MAAM,uBAGtB,MAFAwX,EAAI2jC,aAAeA,EACnB3jC,EAAIomC,QAAUH,EAAU7F,KAClBpgC,CACR,CACA,OAAO,CACT,CAGA,GAFAimC,EAAYjgD,EAEO,UAAfA,EAAM4F,KACR,OAAOy5C,aAAar/C,GACf,GAAmB,YAAfA,EAAM4F,OAAuBo1C,EAAgB,CAGtD,MAAMhhC,EAAM,IAAIxX,MAAM,mBAAqBy8C,EAAS,gBAAkBvmC,GAAIm5B,WAAa,aAAe,KAEtG,MADA73B,EAAImV,KAAOzW,GACLsB,CACR,CAAO,GAAmB,QAAfha,EAAM4F,KAAgB,CAC/B,MAAMm2C,EAAY6D,WAAW5/C,GAC7B,GAAI+7C,IAAcc,GAChB,OAAOd,CAEX,CAKA,GAAmB,YAAf/7C,EAAM4F,MAAiC,KAAXq5C,EAE9B,OAAO,EAOT,GAAIoB,GAAa,KAAUA,GAA2B,EAAdrgD,EAAMiW,MAAW,CAEvD,MADY,IAAIzT,MAAM,4DAExB,CAeA,OADA+7C,IAAcU,EACPA,EAAOr9C,MAChB,CAEA,MAAMi1C,EAAWgE,YAAY8C,GAC7B,IAAK9G,EAEH,MADAlsC,MAAMuyC,EAAmBn9C,QAAQ,KAAM49C,IACjC,IAAIn7C,MAAM,sBAAwBm7C,EAAe,KAGzD,MAAM2C,EAAK1J,gBAAgBC,EAAU,CAAEC,YACvC,IAAIp6B,EAAS,GAEThE,GAAMolC,GAAgBwC,EAE1B,MAAM9B,GAAgB,CAAC,EACjBrX,GAAU,IAAIpxB,EAAQ0nC,UAAU1nC,IA5GtC,SAASwqC,uBACP,MAAM/0C,EAAO,GACb,IAAK,IAAIqiB,EAAUnV,GAAKmV,IAAYgpB,EAAUhpB,EAAUA,EAAQrT,OAC1DqT,EAAQgkB,WACVrmC,EAAKo9B,QAAQ/a,EAAQgkB,WAGzBrmC,EAAK6f,SAAQkJ,GAAQ4S,GAAQyK,SAASrd,IACxC,CAqGAgsB,GACA,IAAIhC,GAAa,GACb/K,GAAY,EACZv9B,GAAQ,EACRoqC,GAAa,EACbjB,IAA2B,EAE/B,IAGE,IAFA1mC,GAAI8/B,QAAQE,gBAEH,CACP2H,KACIjB,GAGFA,IAA2B,EAE3B1mC,GAAI8/B,QAAQE,cAEdhgC,GAAI8/B,QAAQT,UAAY9hC,GAExB,MAAMjW,EAAQ0Y,GAAI8/B,QAAQ/1B,KAAKw7B,GAG/B,IAAKj+C,EAAO,MAEZ,MACMwgD,EAAiBN,cADHjC,EAAgBnG,UAAU7hC,GAAOjW,EAAMiW,OACTjW,GAClDiW,GAAQjW,EAAMiW,MAAQuqC,CACxB,CAMA,OALAN,cAAcjC,EAAgBx1C,OAAOwN,KACrCkxB,GAAQiL,gBACRjL,GAAQ2L,WACRp2B,EAASyqB,GAAQ0L,SAEV,CAGLW,UAAWlqC,KAAK6J,MAAMqgC,IACtBvvC,MAAOyY,EACPm6B,SAAU8G,EACVjK,SAAS,EACTvM,QAASA,GACTzuB,IAAKA,GAET,CAAE,MAAOsB,GACP,GAAIA,EAAInH,SAAWmH,EAAInH,QAAQtG,SAAS,WACtC,MAAO,CACLmnC,SAAS,EACT+M,UAAW,CACTntC,IAAK0G,EAAInH,QACTs3B,QAAS8T,EAAgBz5C,MAAMyR,GAAQ,IAAKA,GAAQ,KACpDkZ,KAAMnV,EAAImV,MAEZuxB,MAAOhkC,EACP82B,UAAW,EACXvvC,MAAO04C,GAASsB,GAChB9W,QAASA,IAEN,GAAI6V,EACT,MAAO,CACLtJ,SAAS,EACTF,UAAW,EACXvvC,MAAO04C,GAASsB,GAChB9W,QAASA,GACT0P,SAAU8G,EACVjlC,IAAKA,GACLioC,YAAa3mC,GAGf,MAAMA,CAEV,CACF,CAmCA,SAAS8gC,cAAcv4C,EAAMq+C,GAC3BA,EAAiBA,GAAkB7qC,EAAQ+mC,WAAar5C,OAAOyZ,KAAK4/B,GACpE,MAAM+D,EA5BR,SAASC,wBAAwBv+C,GAC/B,MAAMma,EAAS,CACb82B,UAAW,EACXrM,QAAS,IAAIpxB,EAAQ0nC,UAAU1nC,GAC/B9R,MAAO04C,GAASp6C,GAChBmxC,SAAS,EACTh7B,IAAKykC,GAGP,OADAzgC,EAAOyqB,QAAQwK,QAAQpvC,GAChBma,CACT,CAkBoBokC,CAAwBv+C,GAEpCw+C,EAAUH,EAAejrB,OAAOklB,aAAallB,OAAOqrB,eAAezrB,KAAI5iB,GAC3EqrC,WAAWrrC,EAAMpQ,GAAM,KAEzBw+C,EAAQnY,QAAQiY,GAEhB,MAAMI,EAASF,EAAQG,MAAK,CAAC91C,EAAG/F,KAE9B,GAAI+F,EAAEooC,YAAcnuC,EAAEmuC,UAAW,OAAOnuC,EAAEmuC,UAAYpoC,EAAEooC,UAIxD,GAAIpoC,EAAEyrC,UAAYxxC,EAAEwxC,SAAU,CAC5B,GAAIgE,YAAYzvC,EAAEyrC,UAAUsK,aAAe97C,EAAEwxC,SAC3C,OAAO,EACF,GAAIgE,YAAYx1C,EAAEwxC,UAAUsK,aAAe/1C,EAAEyrC,SAClD,OAAQ,CAEZ,CAMA,OAAO,CAAC,KAGHuK,EAAMC,GAAcJ,EAGrBvkC,EAAS0kC,EAGf,OAFA1kC,EAAO4kC,YAAcD,EAEd3kC,CACT,CAyCA,MAAM6kC,EAAW,CACf,0BAA2B,EAAGzlC,SACxB/F,EAAQynC,QACV1hC,EAAGgmB,UAAYhmB,EAAGgmB,UAAU/hC,QAAQ,MAAO,IAAIA,QAAQ,aAAc,MACvE,EAEF,yBAA0B,EAAG2c,aACvB3G,EAAQynC,QACV9gC,EAAOzY,MAAQyY,EAAOzY,MAAMlE,QAAQ,MAAO,QAC7C,GAIEyhD,EAAiB,mBAEjBC,EAAmB,CACvB,yBAA0B,EAAG/kC,aACvB3G,EAAQwnC,aACV7gC,EAAOzY,MAAQyY,EAAOzY,MAAMlE,QAAQyhD,GAAiBr6C,GACnDA,EAAEpH,QAAQ,MAAOgW,EAAQwnC,cAE7B,GAUJ,SAASmE,iBAAiBlsB,GAExB,IAAIqL,EAAO,KACX,MAAMgW,EA1oBR,SAAS8K,cAAcC,GACrB,IAAInsC,EAAUmsC,EAAM/P,UAAY,IAEhCp8B,GAAWmsC,EAAM9gB,WAAa8gB,EAAM9gB,WAAW+Q,UAAY,GAG3D,MAAM7xC,EAAQ+V,EAAQunC,iBAAiB76B,KAAKhN,GAC5C,GAAIzV,EAAO,CACT,MAAM62C,EAAWgE,YAAY76C,EAAM,IAKnC,OAJK62C,IACHv9B,KAAK4jC,EAAmBn9C,QAAQ,KAAMC,EAAM,KAC5CsZ,KAAK,oDAAqDsoC,IAErD/K,EAAW72C,EAAM,GAAK,cAC/B,CAEA,OAAOyV,EACJ3B,MAAM,OACN+tC,MAAMC,GAAWpE,mBAAmBoE,IAAWjH,YAAYiH,IAChE,CAunBmBH,CAAcnsB,GAE/B,GAAIkoB,mBAAmB7G,GAAW,OAGlCkH,KAAK,0BACH,CAAEjiC,GAAI0Z,EAASqhB,SAAUA,IAE3BhW,EAAOrL,EACP,MAAM7d,EAAOkpB,EAAKxoB,YACZqE,EAASm6B,EAAWkE,UAAUpjC,EAAM,CAAEk/B,WAAUmE,gBAAgB,IAAUF,cAAcnjC,GAG9FomC,KAAK,yBAA0B,CAAEjiC,GAAI0Z,EAAS9Y,SAAQ/E,SAEtD6d,EAAQsM,UAAYplB,EAAOzY,MAzD7B,SAAS89C,gBAAgBvsB,EAASwsB,EAAaC,GAC7C,MAAMpL,EAAWmL,EAAcjF,EAAQiF,GAAeC,EAEtDzsB,EAAQ0sB,UAAUpc,IAAI,QAClB+Q,GAAUrhB,EAAQ0sB,UAAUpc,IAAI+Q,EACtC,CAqDEkL,CAAgBvsB,EAASqhB,EAAUn6B,EAAOm6B,UAC1CrhB,EAAQ9Y,OAAS,CACfm6B,SAAUn6B,EAAOm6B,SAEjB9D,GAAIr2B,EAAO82B,UACX2O,UAAWzlC,EAAO82B,WAEhB92B,EAAO4kC,cACT9rB,EAAQ8rB,YAAc,CACpBzK,SAAUn6B,EAAO4kC,YAAYzK,SAE7B9D,GAAIr2B,EAAO4kC,YAAY9N,UACvB2O,UAAWzlC,EAAO4kC,YAAY9N,WAGpC,CAqBA,MAAM4O,iBAAmB,KACvB,GAAIA,iBAAiBC,OAAQ,OAC7BD,iBAAiBC,QAAS,EAE1B3F,WAAW,SAAU,kEAENzkC,SAASqqC,iBAAiB,YAClCj3B,QAAQq2B,iBAAiB,EAUlC,IAAIa,IAAiB,EAKrB,SAASC,eAEP,GAA4B,YAAxBvqC,SAASwqC,WAEX,YADAF,IAAiB,GAIJtqC,SAASqqC,iBAAiB,YAClCj3B,QAAQq2B,iBACjB,CAuFA,SAAS7G,YAAYloC,GAEnB,OADAA,GAAQA,GAAQ,IAAIlM,cACbq2C,EAAUnqC,IAASmqC,EAAUC,EAAQpqC,GAC9C,CAOA,SAAS+vC,gBAAgBC,GAAW,aAAEhF,IACX,iBAAdgF,IACTA,EAAY,CAACA,IAEfA,EAAUt3B,SAAQskB,IAAWoN,EAAQpN,EAAMlpC,eAAiBk3C,CAAY,GAC1E,CAMA,SAASqD,cAAcruC,GACrB,MAAMiwC,EAAO/H,YAAYloC,GACzB,OAAOiwC,IAASA,EAAKxF,iBACvB,CAsCA,SAASW,KAAK7B,EAAO74B,GACnB,MAAMm8B,EAAKtD,EACXpF,EAAQzrB,SAAQ,SAASw3B,GACnBA,EAAOrD,IACTqD,EAAOrD,GAAIn8B,EAEf,GACF,CApJsB,oBAAX9J,QAA0BA,OAAON,kBAC1CM,OAAON,iBAAiB,oBAP1B,SAAS6pC,OAEHP,IAAgBC,cACtB,IAIoD,GA8KpD/+C,OAAOwX,OAAOq/B,EAAM,CAClBS,UACAD,cACA0H,aACAO,UAvBF,SAASC,mBAAmBp/C,GAI1B,OAHA84C,WAAW,SAAU,+CACrBA,WAAW,SAAU,sEAzTvB,SAASqG,UAAUj3B,GACjB,OAAM/V,EAAQwnC,YAAcxnC,EAAQynC,MAI7B1xB,EAAK/rB,QAAQk9C,GAAaj9C,GACjB,OAAVA,EACK+V,EAAQynC,MAAQ,OAASx9C,EACvB+V,EAAQwnC,WACVv9C,EAAMD,QAAQ,MAAOgW,EAAQwnC,YAE/Bv9C,IATA8rB,CAWX,CA8SSi3B,CAAUn/C,EACnB,EAmBE89C,iBAEAuB,eAfF,SAASC,wBAAwBpnC,GAI/B,OAHA4gC,WAAW,SAAU,oDACrBA,WAAW,SAAU,oCAEdgF,iBAAiB5lC,EAC1B,EAWEqnC,UA5OF,SAASA,UAAUC,GACbA,EAAY5F,QACdd,WAAW,SAAU,6CACrBA,WAAW,SAAU,uEAEvB3mC,EAAU6mC,GAAU7mC,EAASqtC,EAC/B,EAuOEhB,iBACAiB,uBApNF,SAASA,yBACP3G,WAAW,SAAU,wEACrB6F,IAAiB,CACnB,EAkNEe,iBAhLF,SAASA,iBAAiB3F,EAAc4F,GACtC,IAAIX,EAAO,KACX,IACEA,EAAOW,EAAmBjJ,EAC5B,CAAE,MAAOkJ,GAGP,GAFA74C,MAAM,wDAAwD5K,QAAQ,KAAM49C,KAEvEX,EAAa,MAAMwG,EAAkB74C,MAAM64C,GAKhDZ,EAAOzF,CACT,CAEKyF,EAAKjwC,OAAMiwC,EAAKjwC,KAAOgrC,GAC5Bb,EAAUa,GAAgBiF,EAC1BA,EAAKa,cAAgBF,EAAmB3uC,KAAK,KAAM0lC,GAE/CsI,EAAK7F,SACP2F,gBAAgBE,EAAK7F,QAAS,CAAEY,gBAEpC,EA2JE+F,mBApJF,SAASA,mBAAmB/F,UACnBb,EAAUa,GACjB,IAAK,MAAMhO,KAASlsC,OAAOyZ,KAAK6/B,GAC1BA,EAAQpN,KAAWgO,UACdZ,EAAQpN,EAGrB,EA8IEgU,cAzIF,SAASA,gBACP,OAAOlgD,OAAOyZ,KAAK4/B,EACrB,EAwIEjC,YACA6H,gBACAkB,gBA/HF,SAASA,gBAAgBjxC,GACvB+pC,WAAW,SAAU,oDACrBA,WAAW,SAAU,oEAErB,MAAMkG,EAAO/H,YAAYloC,GACzB,GAAIiwC,EAAQ,OAAOA,EAGnB,MADY,IAAIpgD,MAAM,iDAAmDzC,QAAQ,KAAM4S,GAEzF,EAuHEquC,cACA7P,QAASyL,GACTiH,UA/DF,SAASA,UAAUhB,IArBnB,SAASiB,iBAAiBjB,GAEpBA,EAAO,2BAA6BA,EAAO,6BAC7CA,EAAO,2BAA8B/8C,IACnC+8C,EAAO,yBACLp/C,OAAOwX,OAAO,CAAE2mC,MAAO97C,EAAKgW,IAAMhW,GACnC,GAGD+8C,EAAO,0BAA4BA,EAAO,4BAC5CA,EAAO,0BAA6B/8C,IAClC+8C,EAAO,wBACLp/C,OAAOwX,OAAO,CAAE2mC,MAAO97C,EAAKgW,IAAMhW,GACnC,EAGP,CAMEg+C,CAAiBjB,GACjB/L,EAAQ70C,KAAK4gD,EACf,EA8DEkB,UAAW1J,eAAeC,GAAMgB,YAGlChB,EAAK0J,UAAY,WAAahH,GAAY,CAAO,EACjD1C,EAAK2J,SAAW,WAAajH,GAAY,CAAM,EAC/C1C,EAAK4J,cA/uCO,SAivCZ,IAAK,MAAMtuC,KAAO++B,GAEU,iBAAfA,GAAM/+B,IAEfi7B,EAAc8D,GAAM/+B,IAWxB,OANAnS,OAAOwX,OAAOq/B,EAAM3F,IAGpB2F,EAAKuJ,UAAUtC,GACfjH,EAAKuJ,UAAUnI,IACfpB,EAAKuJ,UAAUpC,GACRnH,CACT,CAGgB6J,CAAK,CAAC,GAEtBnlD,EAAOD,QAAUg8C,cCh8EjB,SAASxvC,UAAU8X,GAEjB,OADeA,EAAKkS,KAAKlqB,GAZ3B,SAAS2R,OAAO+1B,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAE5BA,EAAG/1B,OAHM,IAIlB,CAOiCA,CAAO3R,KAAIjJ,KAAK,GAEjD,CAiJApD,EAAOD,QAtIP,SAASqlD,KAAK9J,GACZ,MAAM+J,EAAM,CAAC,EACPC,EAAa,CACjB/Q,MAAO,OACP7wC,IAAI,KACJixC,SAAU,CACR,OACA,CACEJ,MAAO,KACPI,SAAU,CAAE0Q,MAIlB5gD,OAAOwX,OAAOopC,EAAI,CAChBxS,UAAW,WACX+H,SAAU,CACR,CAACrG,MAAOhoC,OAAO,qBAGb,wBACF+4C,KAIJ,MAAMC,EAAQ,CACZ1S,UAAW,QACX0B,MAAO,OAAQ7wC,IAAK,KACpBixC,SAAU,CAAC2G,EAAKhH,mBAEZkR,EAAW,CACfjR,MAAO,iBACPyG,OAAQ,CACNrG,SAAU,CACR2G,EAAKnF,kBAAkB,CACrB5B,MAAO,QACP7wC,IAAK,QACLmvC,UAAW,cAKb4S,EAAe,CACnB5S,UAAW,SACX0B,MAAO,IAAK7wC,IAAK,IACjBixC,SAAU,CACR2G,EAAKhH,iBACL+Q,EACAE,IAGJA,EAAM5Q,SAAS1xC,KAAKwiD,GACpB,MASMC,EAAa,CACjBnR,MAAO,SACP7wC,IAAK,OACLixC,SAAU,CACR,CAAEJ,MAAO,gBAAiB1B,UAAW,UACrCyI,EAAKnG,YACLkQ,IAcEM,EAAgBrK,EAAKxF,QAAQ,CACjCG,OAAQ,IAZa,CACrB,OACA,OACA,MACA,KACA,MACA,MACA,OACA,OACA,QAG2B7yC,KAAK,QAChCoxC,UAAW,KAEPoR,EAAW,CACf/S,UAAW,WACX0B,MAAO,4BACPoM,aAAa,EACbhM,SAAU,CAAC2G,EAAKnJ,QAAQmJ,EAAK9F,WAAY,CAACjB,MAAO,gBACjDC,UAAW,GAGb,MAAO,CACL7gC,KAAM,OACNoqC,QAAS,CAAC,KAAM,OAChBtH,SAAU,CACRyD,SAAU,gBACV3C,QACE,+DACFsO,QACE,aACFC,SAGE,6uBAeJnR,SAAU,CACRgR,EACArK,EAAKxF,UACL8P,EACAF,EACApK,EAAKpG,kBACLsQ,EACAC,EA3EkB,CACpB5S,UAAW,GACX0B,MAAO,OAGW,CAClB1B,UAAW,SACX0B,MAAO,IAAK7wC,IAAK,KAuEf2hD,GAGN,aClJA,SAAS94C,UAAU8X,GAEjB,OADeA,EAAKkS,KAAKlqB,GAZ3B,SAAS2R,OAAO+1B,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAE5BA,EAAG/1B,OAHM,IAIlB,CAOiCA,CAAO3R,KAAIjJ,KAAK,GAEjD,CAiGApD,EAAOD,QAvFP,SAASgmD,KAAKzK,GACZ,MAAM0K,EAAU,oBAEVC,EAAS,CACbpT,UAAW,YACX0B,MAAOhoC,OAAO,IAHI,wBAGc,cAChCyuC,OAAQ,CACNrG,SAAU,CACR,CACE9B,UAAW,cACX0B,MAAO,KACPC,UAAW,EACXwG,OAAQ,CACNt3C,IAAK,IACL8wC,UAAW,OAMf0R,EAAmB,CACvBD,EACA,CACE1R,MAAO,SACPyG,OAAQ,CAAEqE,YAAa,GAAI9E,gBAAgB,KAI/C,MAAO,CACL5mC,KAAM,OACNoqC,QAAS,CAAC,SACVrJ,QAAS,KACTC,SAAU,CAER,CACEJ,MAAO,OAASyR,EAAU,WAC1BtiD,IAAK,IACLixC,SAAU,CACR,CACE9B,UAAW,OACX0B,MAAOyR,GAET,CACEnT,UAAW,SAAU0B,MAAO,iBAGhCyG,OAAQ,CACNt3C,IAAK,OACLgxC,QAAS,KACTC,SAAUuR,IAId,CACE3R,MAAO,oBAAsByR,EAAU,KACvCtiD,IAAK,IACLixC,SAAU,CACR,CACE9B,UAAW,SACX0B,MAAO,IACP7wC,IAAK,IACLg9C,cAAc,EACdM,YAAY,GAEd,CACEnO,UAAW,OACX0B,MAAOyR,GAET,CACEnT,UAAW,UACX0B,MAAO,WAGXyG,OAAQ,CACNt3C,IAAK,OACLgxC,QAAS,KACTC,SAAUuR,IAId5K,EAAKnJ,QAAQ8T,EAAQ,CACnBzR,UAAW,KAInB,aCtHA,MAAMP,EAAW,2BACXkS,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,WAEIC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAoFIC,EAAY,GAAG95C,OAlCI,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAGyB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,SACA,UA9EY,CACZ,OACA,WACA,SACA,OACA,OACA,SACA,SACA,SACA,WACA,UACA,QACA,SACA,MACA,MACA,UACA,UACA,QACA,UACA,OACA,UACA,eACA,aACA,aACA,YACA,cACA,cACA,eACA,QACA,aACA,oBACA,cACA,gBACA,iBACA,UAGkB,CAClB,YACA,gBACA,aACA,iBACA,cACA,YACA,aAgEF,SAAS+5C,UAAUvS,GACjB,OAAOxnC,OAAO,MAAOwnC,EAAI,IAC3B,CAMA,SAASxnC,UAAU8X,GAEjB,OADeA,EAAKkS,KAAKlqB,GApB3B,SAAS2R,OAAO+1B,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAE5BA,EAAG/1B,OAHM,IAIlB,CAeiCA,CAAO3R,KAAIjJ,KAAK,GAEjD,CA+aApD,EAAOD,QAraP,SAASwmD,WAAWjL,GAQlB,MAMMkL,EAAavS,EACbwS,EACG,KADHA,EAEC,MAEDC,EAAU,CACdnS,MAAO,sBACP7wC,IAAK,4BAKLijD,kBAAmB,CAAC3lD,EAAOs1C,KACzB,MAAMsQ,EAAkB5lD,EAAM,GAAG4B,OAAS5B,EAAMiW,MAC1C4vC,EAAW7lD,EAAMqT,MAAMuyC,GAIZ,MAAbC,EAMa,MAAbA,IA9Bc,EAAC7lD,GAAS8lD,YAC9B,MAAMrpC,EAAM,KAA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AI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,IAAK,GAAGoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GAAI,KAAKoK,OAAOpK,EAAI,GA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GAKN,MAHjBnyN,EAAWp6C,EAAMQ,EAAM4Z,EAAM9R,IAAItS,WAAWgK,IAAQ,IAGd,KAAbo6C,IAAqBkyN,GAAW,GACxC,KAAbjtH,GAAkC,KAAbA,IAAqBktH,GAAY,GAE3C,KAAXx5K,IAEEq5K,WAAW/sH,KAAaitH,GAAW,GACnCF,WAAWhyN,KAAamyN,GAAY,KAIrC,CACLD,SAAUA,EACVC,UAAWA,EACXC,OAAQlvO,EAEZ,CA7XA,qCACGj1B,MAAM,IAAIuX,SAAQ,SAASoqG,GAAMmiJ,GAAQniJ,EAAGh0H,WAAW,IAAM,CAAG,IAqenE,IAAIy2Q,GAAc,8CAyDlB,IAAIC,GAAgB,8CA2UpB,IAAIC,GAAc,CAChB,OACA,MACA,aACA,MACA,OACA,QACA,OACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,KACA,SACA,OACA,OACA,QACA,MACA,OACA,KACA,OACA,OACA,MACA,OACA,YACA,WACA,YACA,WACA,OACA,SACA,MACA,OACA,QACA,OACA,UACA,OACA,MACA,KACA,MACA,OACA,kBACA,MACA,OACA,OACA,UACA,UACA,QACA,QACA,MACA,OACA,MACA,OACA,YACA,aACA,MACA,MACA,SACA,OACA,cACA,SACA,MACA,KACA,MACA,QACA,KACA,MACA,OACA,cACA,cACA,eACA,OACA,UACA,UACA,YACA,MACA,MACA,MACA,MACA,aACA,KACA,UACA,UACA,OACA,SACA,SACA,mBACA,0BACA,UACA,MACA,kBACA,qBACA,MACA,MACA,OACA,WACA,OACA,SACA,OACA,KACA,MACA,eACA,QACA,MACA,OACA,MACA,MACA,OACA,OACA,OACA,MACA,MACA,UACA,SACA,QACA,SACA,OACA,SACA,UACA,MACA,UACA,QACA,SACA,MACA,QACA,MACA,OACA,YACA,WACA,QACA,OACA,QACA,MACA,WACA,MACA,QACA,OACA,aACA,OACA,MACA,QACA,MACA,SACA,UACA,MACA,QACA,MACA,YACA,SACA,MACA,SACA,SACA,WACA,cACA,SACA,OACA,UAC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","sources":["webpack://SwaggerUIBundle/webpack/universalModuleDefinition","webpack://SwaggerUIBundle/./node_modules/@braintree/sanitize-url/dist/index.js","webpack://SwaggerUIBundle/./node_modules/base64-js/index.js","webpack://SwaggerUIBundle/./node_modules/buffer/index.js","webpack://SwaggerUIBundle/./node_modules/call-bind/callBound.js","webpack://SwaggerUIBundle/./node_modules/call-bind/index.js","webpack://SwaggerUIBundle/./node_modules/classnames/index.js","webpack://SwaggerUIBundle/./node_modules/cookie/index.js","webpack://SwaggerUIBundle/./node_modules/copy-to-clipboard/index.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/actual/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/function/virtual/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/es/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/features/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/full/object/assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/a-callable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/a-possible-prototype.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/add-to-unscopables.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/an-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/array-includes.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/array-slice.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/classof-raw.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/classof.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/copy-constructor-properties.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/correct-prototype-getter.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-iter-result-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-non-enumerable-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/create-property-descriptor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/define-built-in.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/define-global-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/descriptors.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/document-all.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/document-create-element.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/dom-iterables.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/engine-user-agent.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/engine-v8-version.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/entry-virtual.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/enum-bug-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-clear.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-install.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/error-stack-installable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/export.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/fails.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-apply.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind-context.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind-native.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-call.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-name.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this-accessor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this-clause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/function-uncurry-this.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-built-in.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-iterator-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/get-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/global.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/has-own-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/hidden-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/html.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/ie8-dom-define.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/indexed-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/inherit-if-required.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/install-error-cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/internal-state.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-array-iterator-method.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-callable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-forced.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-null-or-undefined.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-pure.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/is-symbol.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterate.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-close.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-create-constructor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterator-define.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterators-core.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/iterators.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/length-of-array-like.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/math-trunc.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/normalize-string-argument.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-create.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-define-properties.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-define-property.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-names.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-own-property-symbols.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-get-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-is-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-keys-internal.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-property-is-enumerable.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-set-prototype-of.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/object-to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/ordinary-to-primitive.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/own-keys.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/path.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/proxy-accessor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/require-object-coercible.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/set-to-string-tag.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared-key.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared-store.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/shared.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/string-multibyte.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/symbol-constructor-detection.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-absolute-index.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-indexed-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-integer-or-infinity.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-length.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-object.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-primitive.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-property-key.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-string-tag-support.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/try-to-string.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/uid.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/use-symbol-as-uid.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/v8-prototype-define-bug.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/weak-map-basic-detection.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/well-known-symbol.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/internals/wrap-error-constructor-with-cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.constructor.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.array.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.error.cause.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.function.bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.object.assign.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/es.string.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/esnext.aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/modules/web.dom-collections.iterator.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/instance/bind.js","webpack://SwaggerUIBundle/./node_modules/core-js-pure/stable/object/assign.js","webpack://SwaggerUIBundle/./node_modules/css.escape/css.escape.js","webpack://SwaggerUIBundle/./node_modules/deep-extend/lib/deep-extend.js","webpack://SwaggerUIBundle/./node_modules/deepmerge/dist/cjs.js","webpack://SwaggerUIBundle/./node_modules/dompurify/dist/purify.js","webpack://SwaggerUIBundle/./node_modules/drange/lib/index.js","webpack://SwaggerUIBundle/./node_modules/events/events.js","webpack://SwaggerUIBundle/./node_modules/fault/index.js","webpack://SwaggerUIBundle/./node_modules/format/format.js","webpack://SwaggerUIBundle/./node_modules/function-bind/implementation.js","webpack://SwaggerUIBundle/./node_modules/function-bind/index.js","webpack://SwaggerUIBundle/./node_modules/get-intrinsic/index.js","webpack://SwaggerUIBundle/./node_modules/has-proto/index.js","webpack://SwaggerUIBundle/./node_modules/has-symbols/index.js","webpack://SwaggerUIBundle/./node_modules/has-symbols/shams.js","webpack://SwaggerUIBundle/./node_modules/has/src/index.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/core.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/bash.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/http.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/javascript.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/json.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/powershell.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/xml.js","webpack://SwaggerUIBundle/./node_modules/highlight.js/lib/languages/yaml.js","webpack://SwaggerUIBundle/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://SwaggerUIBundle/./node_modules/ieee754/index.js","webpack://SwaggerUIBundle/./node_modules/immutable/dist/immutable.js","webpack://SwaggerUIBundle/./node_modules/inherits/inherits_browser.js","webpack://SwaggerUIBundle/./node_modules/js-file-download/file-download.js","webpack://SwaggerUIBundle/./node_modules/lodash.debounce/index.js","webpack://SwaggerUIBundle/./node_modules/lodash/_DataView.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Hash.js","webpack://SwaggerUIBundle/./node_modules/lodash/_LazyWrapper.js","webpack://SwaggerUIBundle/./node_modules/lodash/_ListCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_LodashWrapper.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Map.js","webpack://SwaggerUIBundle/./node_modules/lodash/_MapCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Promise.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Set.js","webpack://SwaggerUIBundle/./node_modules/lodash/_SetCache.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Stack.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Symbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/_Uint8Array.js","webpack://SwaggerUIBundle/./node_modules/lodash/_WeakMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_apply.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayFilter.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayIncludes.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayLikeKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayPush.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arrayReduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/_arraySome.js","webpack://SwaggerUIBundle/./node_modules/lodash/_asciiToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_asciiWords.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assignMergeValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assignValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_assocIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssign.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssignIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseAssignValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseCreate.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFindIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFlatten.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseFor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseForOwn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGetAllKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseGetTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseHasIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsArguments.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsEqual.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsEqualDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsMatch.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsNaN.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsNative.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIsTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseIteratee.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseLodash.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMatches.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMatchesProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMerge.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseMergeDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_basePropertyDeep.js","webpack://SwaggerUIBundle/./node_modules/lodash/_basePropertyOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseReduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSetData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSetToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSlice.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseSome.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseTimes.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseTrim.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseUnary.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseUnset.js","webpack://SwaggerUIBundle/./node_modules/lodash/_baseZipObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_castPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_castSlice.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneArrayBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneDataView.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneRegExp.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneSymbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/_cloneTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_composeArgs.js","webpack://SwaggerUIBundle/./node_modules/lodash/_composeArgsRight.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copyArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copyObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copySymbols.js","webpack://SwaggerUIBundle/./node_modules/lodash/_copySymbolsIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_coreJsData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_countHolders.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createAssigner.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBaseEach.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBaseFor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createBind.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCaseFirst.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCompounder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCtor.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createCurry.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createFind.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createHybrid.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createPartial.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createRecurry.js","webpack://SwaggerUIBundle/./node_modules/lodash/_createWrap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_customOmitClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/_deburrLetter.js","webpack://SwaggerUIBundle/./node_modules/lodash/_defineProperty.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalArrays.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalByTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_equalObjects.js","webpack://SwaggerUIBundle/./node_modules/lodash/_flatRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_freeGlobal.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getAllKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getAllKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getFuncName.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getHolder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getMapData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getMatchData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getNative.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getPrototype.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getRawTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getSymbols.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getSymbolsIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getValue.js","webpack://SwaggerUIBundle/./node_modules/lodash/_getWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasUnicode.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hasUnicodeWord.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_hashSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneByTag.js","webpack://SwaggerUIBundle/./node_modules/lodash/_initCloneObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/_insertWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isFlattenable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isIterateeCall.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isKey.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isKeyable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isLaziable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isMasked.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isPrototype.js","webpack://SwaggerUIBundle/./node_modules/lodash/_isStrictComparable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_listCacheSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapCacheSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mapToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_matchesStrictComparable.js","webpack://SwaggerUIBundle/./node_modules/lodash/_memoizeCapped.js","webpack://SwaggerUIBundle/./node_modules/lodash/_mergeData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_metaMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeCreate.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeKeys.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nativeKeysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/_nodeUtil.js","webpack://SwaggerUIBundle/./node_modules/lodash/_objectToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_overArg.js","webpack://SwaggerUIBundle/./node_modules/lodash/_overRest.js","webpack://SwaggerUIBundle/./node_modules/lodash/_parent.js","webpack://SwaggerUIBundle/./node_modules/lodash/_realNames.js","webpack://SwaggerUIBundle/./node_modules/lodash/_reorder.js","webpack://SwaggerUIBundle/./node_modules/lodash/_replaceHolders.js","webpack://SwaggerUIBundle/./node_modules/lodash/_root.js","webpack://SwaggerUIBundle/./node_modules/lodash/_safeGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setCacheAdd.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setCacheHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setData.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_setWrapToString.js","webpack://SwaggerUIBundle/./node_modules/lodash/_shortOut.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackClear.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackDelete.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackGet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackHas.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stackSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/_strictIndexOf.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stringToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_stringToPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/_toKey.js","webpack://SwaggerUIBundle/./node_modules/lodash/_toSource.js","webpack://SwaggerUIBundle/./node_modules/lodash/_trimmedEndIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/_unicodeToArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/_unicodeWords.js","webpack://SwaggerUIBundle/./node_modules/lodash/_updateWrapDetails.js","webpack://SwaggerUIBundle/./node_modules/lodash/_wrapperClone.js","webpack://SwaggerUIBundle/./node_modules/lodash/ary.js","webpack://SwaggerUIBundle/./node_modules/lodash/camelCase.js","webpack://SwaggerUIBundle/./node_modules/lodash/capitalize.js","webpack://SwaggerUIBundle/./node_modules/lodash/clone.js","webpack://SwaggerUIBundle/./node_modules/lodash/constant.js","webpack://SwaggerUIBundle/./node_modules/lodash/curry.js","webpack://SwaggerUIBundle/./node_modules/lodash/debounce.js","webpack://SwaggerUIBundle/./node_modules/lodash/deburr.js","webpack://SwaggerUIBundle/./node_modules/lodash/eq.js","webpack://SwaggerUIBundle/./node_modules/lodash/find.js","webpack://SwaggerUIBundle/./node_modules/lodash/findIndex.js","webpack://SwaggerUIBundle/./node_modules/lodash/flatten.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_baseConvert.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_mapping.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/_util.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/assocPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/convert.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/placeholder.js","webpack://SwaggerUIBundle/./node_modules/lodash/fp/set.js","webpack://SwaggerUIBundle/./node_modules/lodash/get.js","webpack://SwaggerUIBundle/./node_modules/lodash/hasIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/identity.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArguments.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArrayLike.js","webpack://SwaggerUIBundle/./node_modules/lodash/isArrayLikeObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isBoolean.js","webpack://SwaggerUIBundle/./node_modules/lodash/isBuffer.js","webpack://SwaggerUIBundle/./node_modules/lodash/isEmpty.js","webpack://SwaggerUIBundle/./node_modules/lodash/isEqual.js","webpack://SwaggerUIBundle/./node_modules/lodash/isError.js","webpack://SwaggerUIBundle/./node_modules/lodash/isFunction.js","webpack://SwaggerUIBundle/./node_modules/lodash/isLength.js","webpack://SwaggerUIBundle/./node_modules/lodash/isMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/isNull.js","webpack://SwaggerUIBundle/./node_modules/lodash/isNumber.js","webpack://SwaggerUIBundle/./node_modules/lodash/isObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isObjectLike.js","webpack://SwaggerUIBundle/./node_modules/lodash/isPlainObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/isSet.js","webpack://SwaggerUIBundle/./node_modules/lodash/isString.js","webpack://SwaggerUIBundle/./node_modules/lodash/isSymbol.js","webpack://SwaggerUIBundle/./node_modules/lodash/isTypedArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/isWeakMap.js","webpack://SwaggerUIBundle/./node_modules/lodash/iteratee.js","webpack://SwaggerUIBundle/./node_modules/lodash/keys.js","webpack://SwaggerUIBundle/./node_modules/lodash/keysIn.js","webpack://SwaggerUIBundle/./node_modules/lodash/last.js","webpack://SwaggerUIBundle/./node_modules/lodash/memoize.js","webpack://SwaggerUIBundle/./node_modules/lodash/merge.js","webpack://SwaggerUIBundle/./node_modules/lodash/negate.js","webpack://SwaggerUIBundle/./node_modules/lodash/noop.js","webpack://SwaggerUIBundle/./node_modules/lodash/now.js","webpack://SwaggerUIBundle/./node_modules/lodash/omit.js","webpack://SwaggerUIBundle/./node_modules/lodash/property.js","webpack://SwaggerUIBundle/./node_modules/lodash/rearg.js","webpack://SwaggerUIBundle/./node_modules/lodash/reduce.js","webpack://SwaggerUIBundle/./node_modules/lodash/set.js","webpack://SwaggerUIBundle/./node_modules/lodash/some.js","webpack://SwaggerUIBundle/./node_modules/lodash/stubArray.js","webpack://SwaggerUIBundle/./node_modules/lodash/stubFalse.js","webpack://SwaggerUIBundle/./node_modules/lodash/toFinite.js","webpack://SwaggerUIBundle/./node_modules/lodash/toInteger.js","webpack://SwaggerUIBundle/./node_modules/lodash/toLower.js","webpack://SwaggerUIBundle/./node_modules/lodash/toNumber.js","webpack://SwaggerUIBundle/./node_modules/lodash/toPath.js","webpack://SwaggerUIBundle/./node_modules/lodash/toPlainObject.js","webpack://SwaggerUIBundle/./node_modules/lodash/toString.js","webpack://SwaggerUIBundle/./node_modules/lodash/upperFirst.js","webpack://SwaggerUIBundle/./node_modules/lodash/words.js","webpack://SwaggerUIBundle/./node_modules/lodash/wrapperLodash.js","webpack://SwaggerUIBundle/./node_modules/lodash/zipObject.js","webpack://SwaggerUIBundle/./node_modules/lowlight/lib/core.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/ArraySlice.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/KeyValuePair.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/Namespace.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/ObjectSlice.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements/LinkElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/elements/RefElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/minim.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/ArrayElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/BooleanElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/Element.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/MemberElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/NullElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/NumberElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/ObjectElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/primitives/StringElement.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/serialisers/JSON06Serialiser.js","webpack://SwaggerUIBundle/./node_modules/minim/lib/serialisers/JSONSerialiser.js","webpack://SwaggerUIBundle/./node_modules/object-assign/index.js","webpack://SwaggerUIBundle/./node_modules/object-inspect/index.js","webpack://SwaggerUIBundle/./node_modules/process/browser.js","webpack://SwaggerUIBundle/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://SwaggerUIBundle/./node_modules/prop-types/index.js","webpack://SwaggerUIBundle/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/formats.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/index.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/parse.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/stringify.js","webpack://SwaggerUIBundle/./node_modules/qs/lib/utils.js","webpack://SwaggerUIBundle/./node_modules/querystringify/index.js","webpack://SwaggerUIBundle/./node_modules/randexp/lib/randexp.js","webpack://SwaggerUIBundle/./node_modules/randombytes/browser.js","webpack://SwaggerUIBundle/./node_modules/react-copy-to-clipboard/lib/Component.js","webpack://SwaggerUIBundle/./node_modules/react-copy-to-clipboard/lib/index.js","webpack://SwaggerUIBundle/./node_modules/react-debounce-input/lib/Component.js","webpack://SwaggerUIBundle/./node_modules/react-debounce-input/lib/index.js","webpack://SwaggerUIBundle/./node_modules/react-dom/cjs/react-dom.production.min.js","webpack://SwaggerUIBundle/./node_modules/react-dom/index.js","webpack://SwaggerUIBundle/./node_modules/react-immutable-proptypes/dist/ImmutablePropTypes.js","webpack://SwaggerUIBundle/./node_modules/react-is/cjs/react-is.production.min.js","webpack://SwaggerUIBundle/./node_modules/react-is/index.js","webpack://SwaggerUIBundle/./node_modules/react/cjs/react.production.min.js","webpack://SwaggerUIBundle/./node_modules/react/index.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/errors-browser.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_readable.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_transform.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/_stream_writable.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://SwaggerUIBundle/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/combineReducers.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/index.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/getStateName.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/getUnexpectedInvocationParameterMessage.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/index.js","webpack://SwaggerUIBundle/./node_modules/redux-immutable/dist/utilities/validateNextState.js","webpack://SwaggerUIBundle/./node_modules/repeat-string/index.js","webpack://SwaggerUIBundle/./node_modules/requires-port/index.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/index.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/positions.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/sets.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/types.js","webpack://SwaggerUIBundle/./node_modules/ret/lib/util.js","webpack://SwaggerUIBundle/./node_modules/safe-buffer/index.js","webpack://SwaggerUIBundle/./node_modules/scheduler/cjs/scheduler.production.min.js","webpack://SwaggerUIBundle/./node_modules/scheduler/index.js","webpack://SwaggerUIBundle/./node_modules/serialize-error/index.js","webpack://SwaggerUIBundle/./node_modules/sha.js/hash.js","webpack://SwaggerUIBundle/./node_modules/sha.js/index.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha1.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha224.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha256.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha384.js","webpack://SwaggerUIBundle/./node_modules/sha.js/sha512.js","webpack://SwaggerUIBundle/./node_modules/side-channel/index.js","webpack://SwaggerUIBundle/./node_modules/stampit/dist/stampit.min.js","webpack://SwaggerUIBundle/./node_modules/stream-browserify/index.js","webpack://SwaggerUIBundle/./node_modules/string_decoder/lib/string_decoder.js","webpack://SwaggerUIBundle/./node_modules/toggle-selection/index.js","webpack://SwaggerUIBundle/./node_modules/traverse/index.js","webpack://SwaggerUIBundle/./node_modules/url-parse/index.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/shim/index.js","webpack://SwaggerUIBundle/./node_modules/use-sync-external-store/shim/with-selector.js","webpack://SwaggerUIBundle/./node_modules/util-deprecate/browser.js","webpack://SwaggerUIBundle/./node_modules/xml-but-prettier/dist/index.js","webpack://SwaggerUIBundle/./node_modules/xml/lib/escapeForXML.js","webpack://SwaggerUIBundle/./node_modules/xml/lib/xml.js","webpack://SwaggerUIBundle/./node_modules/zenscroll/zenscroll.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime-corejs3/core-js/aggregate-error.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime-corejs3/helpers/extends.js","webpack://SwaggerUIBundle/webpack/bootstrap","webpack://SwaggerUIBundle/webpack/runtime/compat get default export","webpack://SwaggerUIBundle/webpack/runtime/define property getters","webpack://SwaggerUIBundle/webpack/runtime/global","webpack://SwaggerUIBundle/webpack/runtime/hasOwnProperty shorthand","webpack://SwaggerUIBundle/webpack/runtime/make namespace object","webpack://SwaggerUIBundle/webpack/runtime/node module decorator","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://SwaggerUIBundle/./node_modules/redux/es/redux.js","webpack://SwaggerUIBundle/./src/core/plugins/err/actions.js","webpack://SwaggerUIBundle/./src/core/window.js","webpack://SwaggerUIBundle/./src/core/utils/get-parameter-schema.js","webpack://SwaggerUIBundle/./src/core/utils/index.js","webpack://SwaggerUIBundle/./src/core/system.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/reducers.js","webpack://SwaggerUIBundle/./node_modules/reselect/es/defaultMemoize.js","webpack://SwaggerUIBundle/./node_modules/reselect/es/index.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/spec-extensions/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/configs-extensions/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/auth/components/lock-auth-icon.jsx","webpack://SwaggerUIBundle/./src/core/plugins/auth/components/unlock-auth-icon.jsx","webpack://SwaggerUIBundle/./src/core/plugins/auth/index.js","webpack://SwaggerUIBundle/./node_modules/js-yaml/dist/js-yaml.mjs","webpack://SwaggerUIBundle/./src/core/plugins/configs/helpers.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/spec-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/configs/index.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/helpers.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/layout.js","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/operation-wrapper.jsx","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/operation-tag-wrapper.jsx","webpack://SwaggerUIBundle/./src/core/plugins/deep-linking/index.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/transformers/not-of-type.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/transformers/parameter-oneof.js","webpack://SwaggerUIBundle/./src/core/plugins/err/error-transformers/hook.js","webpack://SwaggerUIBundle/./src/core/plugins/err/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/err/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/err/index.js","webpack://SwaggerUIBundle/./src/core/plugins/filter/opsFilter.js","webpack://SwaggerUIBundle/./src/core/plugins/filter/index.js","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow-up.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow-down.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/arrow.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/close.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/copy.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/lock.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/components/unlock.jsx","webpack://SwaggerUIBundle/./src/core/plugins/icons/index.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/spec-extensions/wrap-selector.js","webpack://SwaggerUIBundle/./src/core/plugins/layout/index.js","webpack://SwaggerUIBundle/./src/core/plugins/logs/index.js","webpack://SwaggerUIBundle/./src/core/plugins/on-complete/index.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/selectors.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/create-element.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/checkForListedLanguage.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/highlight.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/light.js","webpack://SwaggerUIBundle/./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/javascript.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/json.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/xml.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/bash.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/yaml.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/http.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/powershell.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/agate.js","webpack://SwaggerUIBundle/./src/core/syntax-highlighting.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/arta.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/monokai.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/nord.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/obsidian.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night.js","webpack://SwaggerUIBundle/./node_modules/react-syntax-highlighter/dist/esm/styles/hljs/idea.js","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/request-snippets.jsx","webpack://SwaggerUIBundle/./src/core/plugins/request-snippets/index.js","webpack://SwaggerUIBundle/./src/core/utils/memoizeN.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-json-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-yaml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-xml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/fn/get-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-5-samples/index.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/spec/index.js","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/helpers.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/core.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/module/duplex.mjs","webpack://SwaggerUIBundle/./node_modules/fast-json-patch/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/index.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/F.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/T.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isPlaceholder.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry1.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry2.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArray.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_dispatchable.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isTransformer.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_reduced.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xfBase.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xall.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/all.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arity.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curryN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/curryN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arrayFromIterator.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_includesWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_has.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_objectIs.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArguments.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/keys.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/type.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_equals.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_functionName.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/equals.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_includes.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_indexOf.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_map.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_quote.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_toISOString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_complement.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_arrayReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isObject.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xfilter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/filter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_filter.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reject.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_toString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/toString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/max.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xmap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/map.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isString.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/nth.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/prop.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pluck.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_curry3.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isArrayLike.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_createReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xArrayReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/bind.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xReduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xwrap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/allPass.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/always.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/anyPass.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_reduce.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/ap.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_concat.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/apply.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/values.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/isNil.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/assocPath.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_assoc.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/and.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/liftN.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/lift.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/both.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/comparator.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/complement.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/not.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_pipe.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_checkForMethod.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/slice.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/tail.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pipe.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/converge.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_cloneRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_clone.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xreduceBy.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduceBy.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/curry.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/defaultTo.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_Set.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/difference.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xtake.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/take.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_dropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xdropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/dropLastWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xdropWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/dropWhile.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/or.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/either.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/empty.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isTypedArray.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/flip.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/groupBy.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/hasPath.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/has.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/hasIn.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/head.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/identical.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_identity.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/identity.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/ifElse.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/includes.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/init.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_objectAssign.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/invoker.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/isEmpty.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/join.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/last.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/lens.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/paths.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/path.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mapObjIndexed.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeWithKey.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeDeepWithKey.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/mergeDeepRight.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/none.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/omit.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/over.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pathOr.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pathSatisfies.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/pick.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/propEq.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/propOr.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/propSatisfies.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isNumber.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/range.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/reduced.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/replace.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/sort.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/split.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/startsWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/test.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_isRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/trim.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/internal/_xuniqWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/uniqWith.js","webpack://SwaggerUIBundle/./node_modules/ramda/es/when.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/included.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/trimCharsEnd.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/stubUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotUndefined.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isGeneratorFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isAsyncFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isString.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/escapeRegExp.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/String.replaceAll.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/replaceAll.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/url.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/fetch-ponyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/create-error.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/fetch-polyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/constants.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/helpers.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/refs.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/all-of.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/parameters.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/properties.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/lib/context-tree.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/specmap/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/replace-special-chars-with-underscore.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/op-id.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/id-from-path-method/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/normalize.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/utils/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/style-serializer.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/http/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/utils/options.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/resolve.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/generic/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/openapi-predicates.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-2/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-2/resolve.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-0/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-0/resolve.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/Annotation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/Comment.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/ParseResult.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/elements/SourceMap.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotFunction.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isEmptyArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/invokeArgs.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/predicates/helpers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/predicates/index.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNull.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotNull.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/isOfTypeObject.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isObjLike.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isPlainObj.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMAggregateError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ast/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/plugins/utils/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transcluder/Transcluder.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/serializers/value/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/serializers/value/ast/ephemeral-array.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/serializers/value/ast/ephemeral-object.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/serializers/value/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/escape.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/ApiDOMStructuredError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/JsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/CompilationJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/compile.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/Number.isFinite.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNumber.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isFinite.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/internal/ponyfills/Number.isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isInteger.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isEmptyString.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/trimCharsStart.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/unescape.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/InvalidJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/parse.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/errors/EvaluationJsonPointerError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-json-pointer/es/evaluate.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Callback.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Components.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Contact.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Discriminator.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Encoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Example.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/ExternalDocumentation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Header.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Info.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/License.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Link.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/MediaType.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OAuthFlow.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OAuthFlows.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Openapi.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/OpenApi3-0.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Operation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Parameter.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/PathItem.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Paths.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/RequestBody.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Response.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Responses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/JSONSchema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/JSONReference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/Media.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/elements/LinkDescription.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/Visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/FallbackVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/noop.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/SpecificationVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/FixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/IdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/$schemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MultipleOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ExclusiveMaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ExclusiveMinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PatternVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ParentSchemaAwareVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/UniqueItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MaxPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/MinPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotObj.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isObj.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotEmpty.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNonEmptyString.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/PatternedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/MapVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/PatternPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DependenciesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DefinitionsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/FormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/BaseVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/ReadOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/json-reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/json-reference/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNotNil.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/isNonEmptyArray.js","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/dispatch.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/generics/AlternatingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/JSONSchemaOrJSONReferenceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/BinaryEncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/media/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/HrefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/RelVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/MediaTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/MethodVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/visitors/json-schema/link-description/EncTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-json-schema-draft-4/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Schema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/SecurityRequirement.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/SecurityScheme.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Server.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/ServerVariable.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Tag.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/Xml.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/Visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/SpecificationVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/FixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/FallbackVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/OpenapiVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/SpecificationExtensionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/TermsOfServiceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/info/VersionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/contact/EmailVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/license/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/OperationRefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/OperationIdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/PatternedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/MapVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/LinkParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/RequestBodyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/link/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Servers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server-variable/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ServerVariables.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/server/VariablesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/AlternatingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/MediaTypeExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/MediaTypeEncoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/media-type/EncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-requirement/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Security.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/SecurityVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/tag/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/reference/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/InVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/AllowEmptyValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/AllowEmptyValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/SchemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/HeaderExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/HeaderContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/header/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/DefinitionsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/DependenciesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/ItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/PatternPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/NullableVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/WriteOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/SchemaOrReferenceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/schema/inherited-fixed-fields.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/PropertyNameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/DiscriminatorMapping.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/distriminator/MappingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/NamespaceVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/PrefixVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/AttributeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/xml/WrappedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ParameterExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ParameterContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/parameter/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsSchemas.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/SchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsResponses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ResponsesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsExamples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsRequestBodies.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/RequestBodiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsSecuritySchemes.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/SecuritySchemesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsLinks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ComponentsCallbacks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/components/CallbacksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/ValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/example/ExternalValueVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/external-documentation/UrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/ContentTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/EncodingHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/StyleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/ExplodeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/encoding/AllowReservedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/paths/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/RequestBodyContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/request-body/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/callback/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseHeaders.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/HeadersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseContent.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/ContentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/ResponseLinks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/response/LinksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/generics/MixedFieldsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/responses/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/responses/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationTags.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/TagsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/OperationIdVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/RequestBodyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationCallbacks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/CallbacksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationSecurity.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/SecurityVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OperationServers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/operation/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/$RefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/PathItemServers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/ServersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/PathItemParameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/path-item/ParametersVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/NameVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/InVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/SchemeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/BearerFormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/security-scheme/OpenIdConnectUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flows/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/AuthorizationUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/TokenUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/RefreshUrlVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/OAuthFlowScopes.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/oauth-flow/ScopesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/elements/nces/Tags.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/visitors/open-api-3-0/TagsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-0/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Callback.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Components.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Contact.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Discriminator.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Encoding.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Example.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/ExternalDocumentation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Header.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Info.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/JsonSchemaDialect.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/License.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Link.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/MediaType.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OAuthFlow.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OAuthFlows.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Openapi.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/OpenApi3-1.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Operation.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Parameter.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/PathItem.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Paths.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/RequestBody.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Response.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Responses.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Schema.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/SecurityRequirement.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/SecurityScheme.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Server.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/ServerVariable.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Tag.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/Xml.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/info/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/info/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/contact/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/license/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/license/IdentifierVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/link/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/server/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/server-variable/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/media-type/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/security-requirement/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/tag/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/SummaryVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/reference/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/parameter/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/header/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/predicates.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ParentSchemaAwareVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$schemaVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$vocabularyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$idVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$anchorVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$dynamicAnchorVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$dynamicRefVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$refVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$defsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/$commentVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/AllOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/OneOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PatternProperties.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/TypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/EnumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ConstVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MultipleOfVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExclusiveMaximumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExclusiveMinimumVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinLengthVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/PatternVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/UniqueItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxContainsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinContainsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MaxPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/MinPropertiesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/RequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/TitleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DescriptionVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DefaultVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/DeprecatedVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ReadOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/WriteOnlyVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/FormatVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ContentEncodingVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ContentMediaTypeVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/schema/ExampleVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/distriminator/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/xml/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/SchemasVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/nces/ComponentsPathItems.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/components/PathItemsVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/example/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/external-documentation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/encoding/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/paths/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/request-body/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/callback/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/response/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/responses/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/operation/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/path-item/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/security-scheme/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/oauth-flows/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/oauth-flow/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/elements/nces/Webhooks.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/visitors/open-api-3-1/WebhooksVisitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/specification.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/traversal/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/namespace.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/toolbox.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/registration.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/UnsupportedOperationError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-error/es/NotImplementedError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/media-types.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/media-types.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/Reference.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/ReferenceSet.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/options/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/options/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/File.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/PluginError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/plugins.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/ParserError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/UnmatchedDereferenceStrategyError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/DereferenceError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/NotImplementedError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/parsers/Parser.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/parsers/binary/index-browser.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/ResolveStrategy.mjs","webpack://SwaggerUIBundle/./node_modules/ramda-adjunct/es/allP.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/ResolverError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/MaximumResolverDepthError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/MaximumDereferenceDepthError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/UnmatchedResolverError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/parse/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/filter.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/uri/errors/EvaluationJsonSchemaUriError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/traversal/find.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/util/errors/InvalidSelectorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/$anchor/errors/InvalidJsonSchema$anchorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/$anchor/errors/EvaluationJsonSchema$anchorError.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/$anchor/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/util.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/selectors/uri/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/strategies/openapi-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-operation-ids.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-parameters.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-security-requirements.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-servers.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-parameter-examples.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-ns-openapi-3-1/es/refractor/plugins/normalize-header-examples.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/normalize.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/resolvers/Resolver.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/resolve/resolvers/HttpResolver.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/abortcontroller-ponyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/abortcontroller-polyfill.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/resolve/resolvers/http-swagger-client/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/json/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/yaml-1-2/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/openapi-json-3-1/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/parse/parsers/openapi-yaml-3-1/index.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/DereferenceStrategy.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/visitor.mjs","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-reference/es/dereference/strategies/openapi-3-1/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/to-path.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/get-root-cause.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/errors/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/dereference.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/utils/compose.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/parameters.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/properties.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/deepmerge.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/visitors/all-of.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/resolve.js","webpack://SwaggerUIBundle/./node_modules/@swagger-api/apidom-core/es/transcluder/index.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/strategies/openapi-3-1-apidom/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/resolver/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/node_modules/is-plain-object/dist/is-plain-object.mjs","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/swagger2/parameter-builders.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/content-serializer.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/parameter-builders.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/btoa.browser.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/oas3/build-request.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/swagger2/build-request.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/id-from-path-method/legacy.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/execute/index.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/get-operation-raw.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/find-operation.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/helpers/each-operation.js","webpack://SwaggerUIBundle/./node_modules/swagger-client/es/subtree-resolver/index.js","webpack://SwaggerUIBundle/./src/core/plugins/swagger-client/configs-wrap-actions.js","webpack://SwaggerUIBundle/./src/core/plugins/swagger-client/index.js","webpack://SwaggerUIBundle/./src/core/plugins/util/index.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/batch.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/Context.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/hooks/useSelector.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/selectorFactory.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/invalidArgFactory.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mergeProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/Subscription.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/shallowEqual.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/useSyncExternalStore.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/connect.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mapStateToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/utils/bindActionCreators.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/components/Provider.js","webpack://SwaggerUIBundle/./node_modules/react-redux/es/index.js","webpack://SwaggerUIBundle/./src/core/plugins/view/root-injects.jsx","webpack://SwaggerUIBundle/./src/core/plugins/view/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/view/index.js","webpack://SwaggerUIBundle/./src/core/plugins/download-url/index.js","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/fn.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/components/fallback.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/components/error-boundary.jsx","webpack://SwaggerUIBundle/./src/core/plugins/safe-render/index.js","webpack://SwaggerUIBundle/./src/core/components/app.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorization-popup.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorize-btn.jsx","webpack://SwaggerUIBundle/./src/core/containers/authorize-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/authorize-operation-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/auths.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/error.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/api-key-auth.jsx","webpack://SwaggerUIBundle/./src/core/components/auth/basic-auth.jsx","webpack://SwaggerUIBundle/./src/core/components/example.jsx","webpack://SwaggerUIBundle/./src/core/components/examples-select.jsx","webpack://SwaggerUIBundle/./src/core/components/examples-select-value-retainer.jsx","webpack://SwaggerUIBundle/./src/core/oauth2-authorize.js","webpack://SwaggerUIBundle/./src/core/components/auth/oauth2.jsx","webpack://SwaggerUIBundle/./src/core/components/clear.jsx","webpack://SwaggerUIBundle/./src/core/components/live-response.jsx","webpack://SwaggerUIBundle/./src/core/components/online-validator-badge.jsx","webpack://SwaggerUIBundle/./src/core/components/operations.jsx","webpack://SwaggerUIBundle/./src/core/utils/url.js","webpack://SwaggerUIBundle/./src/core/components/operation-tag.jsx","webpack://SwaggerUIBundle/./src/core/assets/rolling-load.svg","webpack://SwaggerUIBundle/./src/core/components/operation.jsx","webpack://SwaggerUIBundle/./src/core/containers/OperationContainer.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary-method.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-summary-path.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-extensions.jsx","webpack://SwaggerUIBundle/./src/core/components/operation-extension-row.jsx","webpack://SwaggerUIBundle/./src/core/components/highlight-code.jsx","webpack://SwaggerUIBundle/./src/core/components/responses.jsx","webpack://SwaggerUIBundle/./src/core/utils/create-html-ready-id.js","webpack://SwaggerUIBundle/./src/core/utils/jsonParse.js","webpack://SwaggerUIBundle/./src/core/components/response.jsx","webpack://SwaggerUIBundle/./src/core/components/response-extension.jsx","webpack://SwaggerUIBundle/./src/core/components/response-body.jsx","webpack://SwaggerUIBundle/./src/core/components/parameters/parameters.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-extension.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-include-empty.jsx","webpack://SwaggerUIBundle/./src/core/components/parameter-row.jsx","webpack://SwaggerUIBundle/./src/core/components/execute.jsx","webpack://SwaggerUIBundle/./src/core/components/headers.jsx","webpack://SwaggerUIBundle/./src/core/components/errors.jsx","webpack://SwaggerUIBundle/./src/core/components/content-type.jsx","webpack://SwaggerUIBundle/./src/core/components/layout-utils.jsx","webpack://SwaggerUIBundle/./src/core/components/overview.jsx","webpack://SwaggerUIBundle/./src/core/components/initialized-input.jsx","webpack://SwaggerUIBundle/./src/core/components/info.jsx","webpack://SwaggerUIBundle/./src/core/containers/info.jsx","webpack://SwaggerUIBundle/./src/core/components/contact.jsx","webpack://SwaggerUIBundle/./src/core/components/license.jsx","webpack://SwaggerUIBundle/./src/core/components/jump-to-path.jsx","webpack://SwaggerUIBundle/./src/core/components/copy-to-clipboard-btn.jsx","webpack://SwaggerUIBundle/./src/core/components/footer.jsx","webpack://SwaggerUIBundle/./src/core/containers/filter.jsx","webpack://SwaggerUIBundle/./src/core/components/param-body.jsx","webpack://SwaggerUIBundle/./src/core/components/curl.jsx","webpack://SwaggerUIBundle/./src/core/components/schemes.jsx","webpack://SwaggerUIBundle/./src/core/containers/schemes.jsx","webpack://SwaggerUIBundle/./src/core/components/model-collapse.jsx","webpack://SwaggerUIBundle/./src/core/components/model-example.jsx","webpack://SwaggerUIBundle/./src/core/components/model-wrapper.jsx","webpack://SwaggerUIBundle/./node_modules/react-immutable-pure-component/lib/react-immutable-pure-component.es.js","webpack://SwaggerUIBundle/./src/core/components/model.jsx","webpack://SwaggerUIBundle/./src/core/components/models.jsx","webpack://SwaggerUIBundle/./src/core/components/enum-model.jsx","webpack://SwaggerUIBundle/./src/core/components/object-model.jsx","webpack://SwaggerUIBundle/./src/core/components/array-model.jsx","webpack://SwaggerUIBundle/./src/core/components/primitive-model.jsx","webpack://SwaggerUIBundle/./src/core/components/property.jsx","webpack://SwaggerUIBundle/./src/core/components/try-it-out-button.jsx","webpack://SwaggerUIBundle/./src/core/components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/components/version-stamp.jsx","webpack://SwaggerUIBundle/./src/core/components/openapi-version.jsx","webpack://SwaggerUIBundle/./src/core/components/deep-link.jsx","webpack://SwaggerUIBundle/./src/core/components/svg-assets.jsx","webpack://SwaggerUIBundle/./node_modules/remarkable/dist/esm/index.browser.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/utils.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/html-tag.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/anchor-tag-builder.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-smart.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-middle.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/truncate/truncate-end.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/match.js","webpack://SwaggerUIBundle/./node_modules/tslib/tslib.es6.mjs","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/email-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/url-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/hashtag-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/mention-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/phone-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/match/url-match.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/regex-lib.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/tld-regex.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/email-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/url-match-validator.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/hashtag-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/phone-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/matcher/mention-matcher.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/htmlParser/parse-html.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/autolinker.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/version.js","webpack://SwaggerUIBundle/./node_modules/autolinker/dist/es2015/index.js","webpack://SwaggerUIBundle/./node_modules/remarkable/dist/esm/linkify.js","webpack://SwaggerUIBundle/./src/core/components/providers/markdown.jsx","webpack://SwaggerUIBundle/./src/core/components/layouts/base.jsx","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/core-components/index.js","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/form-components/index.js","webpack://SwaggerUIBundle/./src/core/components/json-schema-components.jsx","webpack://SwaggerUIBundle/./src/core/presets/base/plugins/json-schema-components/index.js","webpack://SwaggerUIBundle/./src/core/presets/base/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/spec-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/auth-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/helpers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/spec-extensions/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/callbacks.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/request-body.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/operation-link.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/servers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/servers-container.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/request-body-editor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/auth/http-auth.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/operation-servers.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/components/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/markdown.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/online-validator-badge.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/json-schema-string.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/openapi-version.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas3/wrap-components/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/actions.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/reducers.js","webpack://SwaggerUIBundle/./src/core/plugins/oas3/index.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/webhooks.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/license.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/contact.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/info.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/json-schema-dialect.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/model/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/models/models.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/auth/mutual-tls-auth.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/components/auth/auths.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/license.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/contact.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/info.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/model.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/models.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/version-pragma-filter.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/auth/auth-item.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/wrap-components/auths.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/spec-extensions/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/spec-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/auth-extensions/wrap-selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/selectors.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/oas31/after-load.js","webpack://SwaggerUIBundle/./src/core/plugins/oas31/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/prop-types.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/context.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/hooks.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$schema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$id.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$ref.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$defs.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/$comment.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Not.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/If.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Then.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Else.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Items.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Type.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Const.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Default.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/fn.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/hoc.jsx","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/array.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/object.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/random.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/predicates.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/email.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-email.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/hostname.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-hostname.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv4.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv6.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-reference.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri-reference.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uuid.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-template.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/json-pointer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/relative-json-pointer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date-time.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/time.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/duration.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/password.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/regex.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/Registry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/formatAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/7bit.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/8bit.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/binary.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/quoted-printable.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base16.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base32.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base64.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/EncoderRegistry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/encoderAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/text.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/image.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/audio.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/video.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/application.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/class/MediaTypeRegistry.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/api/mediaTypeAPI.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/string.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/float.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/double.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/number.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int32.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int64.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/integer.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/boolean.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/index.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/types/null.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/constants.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/example.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/type.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/utils.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/core/merge.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/main.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-json-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-yaml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-xml-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/fn/get-sample-schema.js","webpack://SwaggerUIBundle/./src/core/plugins/json-schema-2020-12-samples/index.js","webpack://SwaggerUIBundle/./src/core/presets/apis/index.js","webpack://SwaggerUIBundle/./src/core/index.js","webpack://SwaggerUIBundle/./src/index.js"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","define","amd","this","invalidProtocolRegex","htmlEntitiesRegex","htmlCtrlEntityRegex","ctrlCharactersRegex","urlSchemeRegex","relativeFirstCharacters","sanitizeUrl","url","sanitizedUrl","decodeHtmlCharacters","str","replace","match","dec","String","fromCharCode","trim","isRelativeUrlWithoutProtocol","indexOf","urlSchemeParseResults","urlScheme","test","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","i","arr","Arr","_byteLength","curByte","len","revLookup","charCodeAt","fromByteArray","uint8","length","extraBytes","parts","maxChunkLength","len2","push","encodeChunk","lookup","join","Uint8Array","Array","code","Error","start","end","num","output","base64","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","buf","Object","setPrototypeOf","prototype","arg","encodingOrOffset","TypeError","allocUnsafe","from","value","fromString","string","encoding","isEncoding","actual","write","slice","ArrayBuffer","isView","fromArrayView","arrayView","isInstance","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","SharedArrayBuffer","valueOf","b","fromObject","obj","isBuffer","checked","undefined","numberIsNaN","type","isArray","data","toPrimitive","assertSize","size","array","toString","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","val","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","byteArray","base64Write","ucs2Write","utf16leToBytes","units","c","hi","lo","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","apply","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","proto","foo","e","console","error","defineProperty","enumerable","get","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","pos","set","swap16","swap32","swap64","toLocaleString","equals","inspect","max","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","NodeError","constructor","super","writable","configurable","name","stack","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","split","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","GetIntrinsic","callBind","$indexOf","callBoundIntrinsic","allowMissing","intrinsic","bind","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","func","applyBind","hasOwn","hasOwnProperty","classNames","classes","argType","inner","key","default","parse","options","decode","index","eqIdx","endIdx","tryDecode","serialize","opt","enc","encode","fieldContentRegExp","maxAge","isNaN","domain","path","expires","isDate","__toString","Date","toUTCString","httpOnly","secure","priority","sameSite","decodeURIComponent","encodeURIComponent","deselectCurrent","clipboardToIE11Formatting","text","debug","reselectPrevious","selection","mark","success","document","createRange","getSelection","createElement","textContent","ariaHidden","style","all","position","top","clip","whiteSpace","webkitUserSelect","MozUserSelect","msUserSelect","userSelect","addEventListener","stopPropagation","format","preventDefault","clipboardData","warn","window","clearData","setData","onCopy","body","appendChild","selectNodeContents","addRange","execCommand","err","copyKey","navigator","userAgent","prompt","removeRange","removeAllRanges","removeChild","parent","AggregateError","entryVirtual","isPrototypeOf","method","FunctionPrototype","Function","it","own","assign","isCallable","tryToString","$TypeError","argument","$String","isObject","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","createMethod","IS_INCLUDES","$this","el","fromIndex","O","uncurryThis","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","wellKnownSymbol","$Object","CORRECT_ARGUMENTS","tag","result","tryGet","callee","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","source","exceptions","keys","f","getOwnPropertyDescriptor","fails","F","getPrototypeOf","done","DESCRIPTORS","createPropertyDescriptor","object","bitmap","createNonEnumerableProperty","global","documentAll","IS_HTMLDDA","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","version","process","Deno","versions","v8","CONSTRUCTOR","$Error","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","dropEntries","prepareStackTrace","clearErrorStack","ERROR_STACK_INSTALLABLE","captureStackTrace","C","isForced","wrapConstructor","NativeConstructor","Wrapper","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","sourceProperty","targetProperty","nativeProperty","resultProperty","descriptor","TARGET","GLOBAL","STATIC","stat","PROTO","nativeSource","targetPrototype","forced","dontCallGetSet","wrap","sham","real","exec","NATIVE_BIND","Reflect","aCallable","that","arraySlice","$Function","factories","Prototype","partArgs","boundFunction","bound","args","argsLength","construct","getDescriptor","PROPER","something","CONFIGURABLE","uncurryThisWithBind","aFunction","variable","namespace","classof","getMethod","isNullOrUndefined","Iterators","ITERATOR","anObject","getIteratorMethod","usingIterator","iteratorMethod","V","P","check","globalThis","self","g","toObject","getBuiltIn","propertyIsEnumerable","dummy","NewTarget","NewTargetPrototype","cause","has","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","state","store","metadata","facade","STATE","enforce","getterFor","TYPE","ArrayPrototype","$documentAll","replacement","feature","detection","normalize","POLYFILL","NATIVE","USE_SYMBOL_AS_UID","$Symbol","isArrayIteratorMethod","getIterator","iteratorClose","Result","stopped","ResultPrototype","iterable","unboundFunction","iterator","iterFn","next","step","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","kind","innerResult","innerError","IteratorPrototype","create","setToStringTag","returnThis","IteratorConstructor","NAME","ENUMERABLE_NEXT","$","IS_PURE","FunctionName","createIteratorConstructor","defineBuiltIn","IteratorsCore","PROPER_FUNCTION_NAME","CONFIGURABLE_FUNCTION_NAME","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","values","entries","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","PrototypeOfArrayIteratorPrototype","arrayIterator","toLength","ceil","trunc","$default","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","IndexedObject","$assign","A","B","symbol","forEach","chr","T","argumentsLength","getOwnPropertySymbols","S","activeXDocument","definePropertiesModule","enumBugKeys","html","documentCreateElement","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","JS","display","contentWindow","open","Properties","V8_PROTOTYPE_DEFINE_BUG","defineProperties","props","IE8_DOM_DEFINE","toPropertyKey","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","current","internalObjectKeys","getOwnPropertyNames","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","$propertyIsEnumerable","NASHORN_BUG","uncurryThisAccessor","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","pref","getOwnPropertyNamesModule","Target","Source","TAG","SET_METHOD","uid","defineGlobalProperty","SHARED","mode","copyright","license","toIntegerOrInfinity","requireObjectCoercible","charAt","CONVERT_TO_STRING","second","codeAt","V8_VERSION","integer","number","isSymbol","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","id","postfix","random","NATIVE_SYMBOL","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","copyConstructorProperties","proxyAccessor","inheritIfRequired","normalizeStringArgument","installErrorCause","installErrorStack","FULL_NAME","wrapper","IS_AGGREGATE_ERROR","STACK_TRACE_LIMIT","OPTIONS_POSITION","ERROR_NAME","OriginalError","OriginalErrorPrototype","BaseError","WrappedError","wrapErrorConstructorWithCause","AGGREGATE_ERROR","$AggregateError","arity","init","iterate","AggregateErrorPrototype","errorsArray","addToUnscopables","InternalStateModule","defineIterator","createIterResultObject","ARRAY_ITERATOR","setInternalState","getInternalState","iterated","Arguments","WEB_ASSEMBLY","WebAssembly","exportGlobalErrorCauseWrapper","exportWebAssemblyErrorCauseWrapper","EvalError","ReferenceError","SyntaxError","URIError","CompileError","LinkError","RuntimeError","STRING_ITERATOR","point","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","CSS","escape","cssEscape","codeUnit","firstCodeUnit","isSpecificValue","RegExp","cloneSpecificValue","getTime","deepCloneArray","clone","item","deepExtend","safeGetProperty","property","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","$$typeof","REACT_ELEMENT_TYPE","for","cloneUnlessOtherwiseSpecified","deepmerge","emptyTarget","defaultArrayMerge","map","element","getKeys","getEnumerableOwnPropertySymbols","filter","propertyIsOnObject","_","mergeObject","destination","propertyIsUnsafe","getMergeFunction","customMerge","arrayMerge","sourceIsArray","deepmergeAll","reduce","prev","deepmerge_1","isFrozen","freeze","seal","fun","thisValue","Func","arrayForEach","unapply","arrayPop","pop","arrayPush","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","typeErrorCreate","unconstruct","thisArg","_len","_key","_len2","_key2","addToSet","transformCaseFunc","l","lcElement","newObject","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","EXPRESSIONS","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","createPolicy","suffix","ATTR_NAME","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","createDOMPurify","DOMPurify","removed","nodeType","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","MozNamedAttrMap","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","ownerDocument","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","createHTMLDocument","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","tbody","TRUSTED_TYPES_POLICY","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","node","parentNode","remove","_removeAttribute","attribute","getAttributeNode","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","insertBefore","createTextNode","childNodes","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isClobbered","elm","nodeName","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","allowedTags","firstElementChild","_isBasicCustomElement","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","firstChild","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","SubRange","low","high","overlaps","touches","add","subtract","DRange","ranges","_update_length","previous","_add","subrange","newRanges","_subtract","intersect","_intersect","numbers","subranges","ReflectOwnKeys","R","ReflectApply","receiver","NumberIsNaN","EventEmitter","once","emitter","Promise","resolve","reject","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","handler","flags","on","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","newListener","emit","unshift","warned","w","count","ProcessEmitWarning","warning","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","er","context","listeners","addListener","prependListener","prependOnceListener","originalListener","shift","spliceOne","off","removeAllListeners","rawListeners","eventNames","formatter","fault","EConstructor","FormattedError","displayName","eval","reference","syntax","uri","fmt","precision","argIndex","escaped","leadingZero","nextArg","slurpNumber","digits","parseFloat","toFixed","JSON","stringify","toUpperCase","vsprintf","replacements","log","printf","toStr","boundLength","boundArgs","Empty","$SyntaxError","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasSymbols","hasProto","getProto","needsEval","TypedArray","INTRINSICS","Atomics","BigInt64Array","BigUint64Array","DataView","decodeURI","encodeURI","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","Map","Proxy","Set","Uint8ClampedArray","Uint16Array","Uint32Array","WeakRef","WeakSet","errorProto","doEval","gen","LEGACY_ALIASES","$concat","$spliceApply","splice","$replace","$strSlice","$exec","rePropName","reEscapeChar","getBaseIntrinsic","alias","intrinsicName","stringToPath","quote","subString","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","part","origSymbol","hasSymbolSham","hasNativeSymbols","symObj","syms","deepFreeze","clear","delete","deepFreezeEs6","_default","Response","isMatchIgnored","ignoreMatch","escapeHTML","inherit","original","objects","emitsWrappingTags","HTMLRenderer","parseTree","classPrefix","walk","addText","openNode","className","sublanguage","span","closeNode","TokenTree","rootNode","children","closeAllNodes","builder","_walk","child","_collapse","every","TokenTreeEmitter","addKeyword","addSublanguage","toHTML","finalize","re","BACKREF_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","BACKSLASH_ESCAPE","begin","relevance","APOS_STRING_MODE","illegal","contains","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","modeOptions","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","CSS_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","MATCH_NOTHING_RE","RE_STARTERS_RE","SHEBANG","opts","beginShebang","binary","resp","END_SAME_AS_BEGIN","_beginMatch","skipIfhasPrecedingDot","response","beginKeywords","__beforeBegin","keywords","compileIllegal","_parent","either","compileMatch","compileRelevance","COMMON_KEYWORDS","DEFAULT_KEYWORD_CLASSNAME","compileKeywords","rawKeywords","caseInsensitive","compiledKeywords","compileList","keywordList","keyword","pair","scoreForKeyword","providedScore","commonKeyword","compileLanguage","language","plugins","langRe","case_insensitive","MultiRegex","matchIndexes","regexes","matchAt","addRule","countMatchGroups","compile","terminators","matcherRe","regexps","separator","numCaptures","regex","substring","lastIndex","s","findIndex","matchData","ResumableMultiRegex","rules","multiRegexes","regexIndex","getMatcher","matcher","resumingScanAtSamePosition","considerAll","m2","compilerExtensions","classNameAliases","compileMode","cmode","isCompiled","keywordPattern","$pattern","lexemes","keywordPatternRe","beginRe","endSameAsBegin","endsWithParent","endRe","terminatorEnd","illegalRe","expandOrCloneMode","variants","cachedVariants","variant","dependencyOnParent","starts","buildModeRegex","mm","term","rule","BuildVuePlugin","hljs","Component","detectedLanguage","unknownLanguage","computed","highlighted","autoDetect","getLanguage","highlightAuto","highlight","ignoreIllegals","hasValueOrEmptyAttribute","autodetect","render","class","domProps","VuePlugin","install","Vue","component","mergeHTMLPlugin","originalStream","nodeStream","resultNode","mergeStreams","processed","nodeStack","selectStream","event","attributeString","stream","reverse","_nodeStream","nextSibling","nodeValue","seenDeprecations","deprecated","escape$1","inherit$1","NO_MATCH","languages","aliases","SAFE_MODE","fixMarkupRe","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","disableAutodetect","noHighlightRe","languageDetectRe","tabReplace","useBR","__emitter","shouldNotHighlight","languageName","codeOrlanguageName","optionsOrCode","continuation","fire","_highlight","codeToHighlight","keywordData","matchText","processBuffer","subLanguage","processSubLanguage","modeBuffer","continuations","processKeywords","keywordRelevance","startsWith","cssClass","startNewMode","endOfMode","matchPlusRemainder","matched","lexeme","endsParent","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","cb","skip","excludeBegin","returnBegin","doEndMatch","endMode","origin","returnEnd","excludeEnd","lastMatch","processLexeme","textBeforeMatch","badRule","iterations","md","processContinuations","processedCount","illegalBy","sofar","errorRaised","languageSubset","plaintext","justTextHighlightResult","results","autoDetection","sorted","sort","supersetOf","best","secondBest","second_best","brPlugin","TAB_REPLACE_RE","tabReplacePlugin","highlightElement","blockLanguage","block","find","_class","updateClassName","currentLang","resultLang","classList","relavance","initHighlighting","called","querySelectorAll","wantsHighlight","highlightAll","readyState","registerAliases","aliasList","lang","plugin","boot","fixMarkup","deprecateFixMarkup","highlightBlock","deprecateHighlightBlock","configure","userOptions","initHighlightingOnLoad","registerLanguage","languageDefinition","error$1","rawDefinition","unregisterLanguage","listLanguages","requireLanguage","addPlugin","upgradePluginAPI","vuePlugin","debugMode","safeMode","versionString","HLJS","bash","VAR","BRACED_VAR","SUBST","HERE_DOC","QUOTE_STRING","ARITHMETIC","KNOWN_SHEBANG","FUNCTION","literal","built_in","http","VERSION","HEADER","HEADERS_AND_BODY","KEYWORDS","LITERALS","BUILT_INS","lookahead","javascript","IDENT_RE$1","FRAGMENT","XML_TAG","isTrulyOpeningTag","afterMatchIndex","nextChar","after","hasClosingTag","KEYWORDS$1","decimalDigits","frac","decimalInteger","NUMBER","HTML_TEMPLATE","CSS_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","PARAMS","label","json","ALLOWED_COMMENTS","TYPES","VALUE_CONTAINER","OBJECT","ARRAY","powershell","BACKTICK_ESCAPE","APOS_STRING","PS_COMMENT","CMDLETS","PS_CLASS","PS_FUNCTION","PS_USING","PS_ARGUMENTS","PS_METHODS","GENTLEMANS_SET","PS_TYPE","TAG_NAME_RE","optional","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","yaml","URI_CHARACTERS","STRING","CONTAINER_STRING","TIMESTAMP","VALUE_MODES","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","d","NaN","rt","LN2","SLICE$0","createClass","ctor","superClass","isIterable","Seq","KeyedIterable","isKeyed","KeyedSeq","IndexedIterable","isIndexed","IndexedSeq","SetIterable","isAssociative","SetSeq","maybeIterable","IS_ITERABLE_SENTINEL","maybeKeyed","IS_KEYED_SENTINEL","maybeIndexed","IS_INDEXED_SENTINEL","maybeAssociative","isOrdered","maybeOrdered","IS_ORDERED_SENTINEL","Keyed","Indexed","DELETE","SHIFT","SIZE","MASK","NOT_SET","CHANGE_LENGTH","DID_ALTER","MakeRef","ref","SetRef","OwnerID","arrCopy","newArr","ii","ensureSize","iter","__iterate","returnTrue","wrapIndex","uint32Index","wholeSlice","resolveBegin","resolveIndex","resolveEnd","defaultIndex","ITERATE_KEYS","ITERATE_VALUES","ITERATE_ENTRIES","REAL_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","iteratorValue","k","v","iteratorResult","iteratorDone","hasIterator","getIteratorFn","isIterator","maybeIterator","iteratorFn","isArrayLike","emptySequence","toSeq","seqFromValue","toKeyedSeq","fromEntrySeq","keyedSeqFromValue","entrySeq","toIndexedSeq","indexedSeqFromValue","toSetSeq","toSource","of","cacheResult","_cache","__iterateUncached","toArray","seqIterate","__iterator","seqIterator","isSeq","EMPTY_SEQ","EMPTY_REPEAT","EMPTY_RANGE","IS_SEQ_SENTINEL","ArraySeq","_array","ObjectSeq","_object","_keys","IterableSeq","_iterable","IteratorSeq","_iterator","_iteratorCache","maybeSeq","seq","maybeIndexedSeqFromValue","useKeys","cache","maxIndex","entry","__iteratorUncached","fromJS","converter","fromJSWith","fromJSDefault","parentJSON","isPlainObj","toList","toMap","is","valueA","valueB","deepEqual","__hash","notAssociative","flipped","allEqual","bSize","Repeat","times","_value","invariant","Range","_start","_end","_step","KeyedCollection","IndexedCollection","SetCollection","notSetValue","searchValue","this$0","other","possibleIndex","offsetValue","imul","smi","i32","hash","o","h","STRING_HASH_CACHE_MIN_STRLEN","cachedHashString","hashString","hashCode","hashJSObj","stringHashCache","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","getIENodeHash","objHashUID","isExtensible","uniqueID","assertNotInfinite","emptyMap","isMap","withMutations","maybeMap","IS_MAP_SENTINEL","keyValues","_root","updateMap","setIn","keyPath","updateIn","deleteIn","update","updater","updatedValue","updateInDeepMap","forceIterator","__ownerID","__altered","merge","mergeIntoMapWith","mergeWith","merger","mergeIn","iters","mergeDeep","deepMerger","mergeDeepWith","deepMergerWith","mergeDeepIn","comparator","OrderedMap","sortFactory","sortBy","mapper","mutable","asMutable","wasAltered","__ensureOwner","asImmutable","MapIterator","ownerID","makeMap","EMPTY_MAP","MapPrototype","ArrayMapNode","BitmapIndexedNode","nodes","HashArrayMapNode","HashCollisionNode","keyHash","ValueNode","_type","_reverse","_stack","mapIteratorFrame","mapIteratorValue","__prev","newRoot","newSize","didChangeSize","didAlter","updateNode","isLeafNode","mergeIntoNode","newNode","idx1","idx2","createNodes","packNodes","excluding","packedII","packedNodes","bit","expandNodes","including","expandedNodes","iterables","mergeIntoCollectionWith","nextValue","collection","mergeIntoMap","keyPathIter","isNotSet","existingValue","newValue","nextExisting","nextUpdated","popCount","idx","canEdit","newArray","spliceIn","newLen","spliceOut","removeIn","exists","MAX_ARRAY_MAP_SIZE","isEditable","newEntries","keyHashFrag","MAX_BITMAP_INDEXED_SIZE","newBitmap","newNodes","newCount","MIN_HASH_ARRAY_MAP_SIZE","keyMatch","subNode","List","empty","emptyList","isList","makeList","VNode","setSize","maybeList","IS_LIST_SENTINEL","listNodeFor","_origin","updateList","insert","_capacity","_level","_tail","oldSize","setListBounds","mergeIntoListWith","iterateList","DONE","ListPrototype","removeBefore","level","originIndex","newChild","removingFirst","oldChild","editable","editableVNode","removeAfter","sizeIndex","EMPTY_LIST","EMPTY_ORDERED_MAP","left","right","tailPos","getTailOffset","tail","iterateNodeOrLeaf","iterateLeaf","iterateNode","to","capacity","newTail","updateVNode","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","maxSize","emptyOrderedMap","isOrderedMap","maybeOrderedMap","makeOrderedMap","omap","_map","_list","updateOrderedMap","newMap","newList","flip","ToKeyedSequence","indexed","_iter","_useKeys","ToIndexedSequence","ToSetSequence","FromEntriesSequence","flipFactory","flipSequence","makeSequence","reversedSequence","cacheResultThrough","mapFactory","mappedSequence","reverseFactory","filterFactory","predicate","filterSequence","countByFactory","grouper","groups","groupByFactory","isKeyedIter","coerce","iterableClass","reify","sliceFactory","originalSize","resolvedBegin","resolvedEnd","sliceSize","resolvedSize","sliceSeq","skipped","isSkipping","takeWhileFactory","takeSequence","iterating","skipWhileFactory","skipSequence","skipping","concatFactory","isKeyedIterable","singleton","concatSeq","flatten","sum","flattenFactory","depth","flatSequence","flatDeep","currentDepth","flatMapFactory","interposeFactory","interposedSequence","defaultComparator","maxFactory","maxCompare","comp","zipWithFactory","keyIter","zipper","zipSequence","iterators","isDone","steps","some","validateEntry","resolveSize","Record","defaultValues","hasInitialized","RecordType","setProps","RecordTypePrototype","_name","_defaultValues","RecordPrototype","valueSeq","indexedIterable","recordName","defaultVal","_empty","makeRecord","likeRecord","record","setProp","emptySet","isSet","maybeSet","IS_SET_SENTINEL","fromKeys","keySeq","updateSet","union","originalSet","OrderedSet","__make","EMPTY_SET","SetPrototype","__empty","makeSet","emptyOrderedSet","isOrderedSet","maybeOrderedSet","EMPTY_ORDERED_SET","OrderedSetPrototype","makeOrderedSet","Stack","emptyStack","isStack","unshiftAll","maybeStack","IS_STACK_SENTINEL","head","_head","peek","makeStack","pushAll","EMPTY_STACK","StackPrototype","mixin","keyCopier","toJS","__toJS","toOrderedMap","toOrderedSet","toSet","toStack","__toStringMapper","returnValue","findEntry","sideEffect","joined","isFirst","reducer","initialReduction","reduction","useFirst","reduceRight","reversed","not","butLast","isEmpty","countBy","entriesSequence","entryMapper","filterNot","findKey","findLast","findLastEntry","findLastKey","flatMap","searchKey","getIn","searchKeyPath","nested","groupBy","hasIn","isSubset","isSuperset","keyOf","keyMapper","lastKeyOf","maxBy","neg","defaultNegComparator","minBy","rest","amount","skipLast","skipWhile","skipUntil","take","takeLast","takeWhile","takeUntil","hashIterable","quoteString","chain","mapEntries","mapKeys","KeyedIterablePrototype","defaultZipper","ordered","keyed","murmurHashOfSize","hashMerge","removeNum","numArgs","spliced","findLastIndex","interpose","interleave","zipped","interleaved","zip","zipWith","inherits","superCtor","super_","TempCtor","filename","mime","bom","blob","Blob","msSaveBlob","blobURL","URL","createObjectURL","webkitURL","tempLink","href","download","click","setTimeout","revokeObjectURL","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","objectToString","nativeMax","nativeMin","now","toNumber","isObjectLike","isBinary","debounce","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remainingWait","debounced","isInvoking","leadingEdge","cancel","clearTimeout","flush","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","baseCreate","baseLodash","LazyWrapper","__wrapped__","__actions__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","LodashWrapper","chainAll","__chain__","__index__","__values__","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","setCacheAdd","setCacheHas","SetCache","__data__","stackClear","stackDelete","stackGet","stackHas","stackSet","arrayEach","iteratee","arrayFilter","resIndex","baseIndexOf","arrayIncludes","baseTimes","isArguments","isIndex","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","arrayMap","arrayReduce","accumulator","initAccum","arraySome","asciiToArray","reAsciiWord","asciiWords","baseAssignValue","eq","assignMergeValue","assignValue","objValue","assocIndexOf","copyObject","baseAssign","keysIn","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","isDeep","isFlat","isFull","isFunc","stacked","subValue","objectCreate","baseForOwn","baseEach","createBaseEach","baseFindIndex","fromRight","isFlattenable","baseFlatten","isStrict","baseFor","createBaseFor","castPath","toKey","baseGet","baseGetAllKeys","keysFunc","symbolsFunc","getRawTag","symToStringTag","toStringTag","baseGetTag","baseHasIn","baseIsNaN","strictIndexOf","baseIsArguments","baseIsEqualDeep","baseIsEqual","equalArrays","equalByTag","equalObjects","arrayTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsMap","baseIsMatch","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isFunction","isMasked","reIsHostCtor","funcProto","objectProto","funcToString","reIsNative","baseIsNative","baseIsSet","isLength","typedArrayTags","baseIsTypedArray","baseMatches","baseMatchesProperty","identity","baseIteratee","isPrototype","nativeKeys","baseKeys","nativeKeysIn","baseKeysIn","isProto","getMatchData","matchesStrictComparable","isKey","isStrictComparable","baseMergeDeep","safeGet","baseMerge","srcIndex","cloneTypedArray","isArrayLikeObject","isPlainObject","toPlainObject","mergeFunc","isCommon","isTyped","baseProperty","basePropertyDeep","basePropertyOf","baseReduce","eachFunc","overRest","setToString","baseRest","baseSet","metaMap","baseSetData","constant","baseSetToString","baseSlice","baseSome","symbolProto","symbolToString","baseToString","trimmedEndIndex","reTrimStart","baseTrim","baseUnary","baseUnset","baseZipObject","assignFunc","valsLength","cacheHas","castSlice","cloneArrayBuffer","arrayBuffer","freeExports","freeModule","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolValueOf","cloneSymbol","typedArray","composeArgs","partials","holders","isCurried","argsIndex","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbols","getSymbolsIn","coreJsData","countHolders","placeholder","isIterateeCall","createAssigner","assigner","sources","guard","createCtor","createBind","isBind","Ctor","hasUnicode","stringToArray","createCaseFirst","methodName","strSymbols","deburr","words","reApos","createCompounder","callback","thisBinding","createHybrid","createRecurry","getHolder","replaceHolders","createCurry","createFind","findIndexFunc","reorder","partialsRight","holdersRight","argPos","ary","isAry","isBindKey","isFlip","holdersCount","newHolders","createPartial","isLaziable","setWrapToString","wrapFunc","isCurry","newData","getData","mergeData","toInteger","createWrap","customOmitClone","deburrLetter","isPartial","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","convert","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","flatRest","noop","realNames","getFuncName","otherFunc","isKeyable","getMapData","getValue","getPrototype","overArg","nativeObjectToString","unmasked","stubArray","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ctorString","reWrapDetails","reSplitDetails","getWrapDetails","hasPath","hasFunc","reHasUnicode","reHasUnicodeWord","hasUnicodeWord","nativeCreate","reWrapComment","insertWrapDetails","details","spreadableSymbol","isConcatSpreadable","reIsUint","reIsDeepProp","reIsPlainProp","lodash","funcName","maskSrcKey","memoize","memoizeCapped","PLACEHOLDER","WRAP_ARY_FLAG","srcBitmask","newBitmask","isCombo","freeProcess","nodeUtil","types","require","binding","transform","otherArgs","indexes","oldArray","shortOut","updateWrapDetails","nativeNow","lastCalled","stamp","pairs","LARGE_ARRAY_SIZE","unicodeToArray","reWhitespace","rsAstralRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsSeq","rsSymbol","reUnicode","rsDingbatRange","rsLowerRange","rsUpperRange","rsBreakRange","rsMathOpRange","rsBreak","rsDigits","rsDingbat","rsLower","rsMisc","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","rsModifier","rsEmoji","reUnicodeWord","unicodeWords","wrapFlags","wrapperClone","capitalize","camelCase","word","upperFirst","curry","timeWaiting","reLatin","reComboMark","mapping","fallbackHolder","baseAry","cloneArray","wrapImmutable","cloner","baseConvert","util","isLib","isObj","config","cap","fixed","immutable","rearg","defaultHolder","forceCurry","forceFixed","forceRearg","pristine","runInContext","helpers","isError","isWeakMap","toPath","each","aryMethodKeys","aryMethod","wrappers","castArray","nthArg","castCap","iterateeRearg","baseArity","iterateeAry","castFixed","skipFixed","methodSpread","flatSpread","castRearg","skipRearg","methodRearg","aryRearg","cloneByPath","createConverter","realName","aliasToReal","remap","oldOptions","newUtil","newFunc","newOptions","mutate","createCloner","aryKey","otherName","afterRearg","castCurry","convertLib","realToAlias","defaultValue","isBoolean","stubFalse","isEqual","nodeIsMap","isNull","isNumber","objectCtorString","nodeIsSet","isString","nodeIsTypedArray","memoized","Cache","negate","omit","paths","CLONE_DEEP_FLAG","INFINITY","toFinite","remainder","toLower","pattern","zipObject","settings","subset","prefix","defaultPrefix","registerAlias","Emitter","properties","toHtmlNoop","before","coerceElementMatchingCallback","extend","ArraySlice","elements","toValue","compactMap","initialValue","refract","KeyValuePair","JSONSerialiser","Namespace","elementMap","elementDetection","noDefault","useDefault","_attributeElementKeys","_attributeElementArrayKeys","use","base","load","register","NullElement","StringElement","NumberElement","BooleanElement","ArrayElement","ObjectElement","MemberElement","RefElement","LinkElement","detect","ElementClass","_elements","unregister","givenPrepend","toElement","getElementClass","fromRefract","serialiser","deserialise","toRefract","serialise","pascal","ObjectSlice","member","meta","relation","primitive","indexOrKey","getIndex","startIndex","memo","findElements","givenOptions","recursive","keyOrIndex","findByElement","findByClass","getById","_meta","_attributes","toRef","findRecursive","elementNames","elementName","append","checkElement","items","parentElements","parents","namesIndex","getMetaProperty","hasKey","setMetaProperty","_storedElement","_content","title","description","links","recursiveChildren","getMember","getKey","keyOrObject","objectKey","JSON06Serialiser","payload","serialiseObject","isEnum","enumSerialiseAttributes","enumSerialiseContent","serialiseContent","shouldSerialiseContent","refSerialiseContent","sourceMapSerialiseContent","dataStructureSerialiseContent","enumerations","samples","sample","enumeration","Null","deserialiseObject","deserialiseContent","existingSamples","existingSample","enumElement","defaultElement","shouldRefract","convertKeyToRefract","serialiseEnum","subItem","subSubItem","keyValue","propIsEnumerable","shouldUseNative","test1","test2","test3","letter","symbols","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setForEach","weakMapHas","weakSetHas","weakRefDeref","deref","booleanValueOf","functionToString","$match","$slice","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","bigIntValueOf","gOPS","symToString","hasShammedSymbols","isEnumerable","gPO","addNumericSeparator","sepRegex","int","intStr","utilInspect","inspectCustom","custom","inspectSymbol","wrapQuotes","defaultStyle","quoteChar","quoteStyle","isRegExp","inspect_","maxStringLength","customInspect","indent","numericSeparator","inspectString","bigIntStr","maxDepth","getIndent","baseIndent","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","isElement","HTMLElement","attrs","xs","singleLineValues","indentedJoin","mapParts","collectionOf","setParts","weakCollectionOf","isWeakSet","isWeakRef","isBigInt","ys","protoTag","stringTag","trailer","lowbyte","lineJoiner","symMap","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","runClearTimeout","marker","Item","nextTick","browser","env","argv","cwd","chdir","umask","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","location","propFullName","secret","getShim","isRequired","ReactPropTypes","bigint","bool","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","percentTwenties","Format","formatters","RFC1738","RFC3986","formats","utils","defaults","allowDots","allowPrototypes","allowSparse","arrayLimit","charset","charsetSentinel","comma","decoder","delimiter","ignoreQueryPrefix","interpretNumericEntities","parameterLimit","parseArrays","plainObjects","strictNullHandling","$0","numberStr","parseArrayValue","parseKeys","parseQueryStringKeys","givenKey","valuesParsed","segment","leaf","cleanRoot","parseObject","normalizeParseOptions","tempObj","parseQueryStringValues","cleanStr","skipIndex","bracketEqualsPos","encodedVal","combine","parseValues","newObj","compact","getSideChannel","arrayPrefixGenerators","brackets","indices","repeat","pushToArray","valueOrArray","toISO","toISOString","defaultFormat","addQueryPrefix","encoder","encodeValuesOnly","serializeDate","date","skipNulls","sentinel","generateArrayPrefix","commaRoundTrip","sideChannel","tmpSc","findFlag","isNonNullishPrimitive","valuesArray","valuesJoined","objKeys","adjustedPrefix","keyPrefix","valueSideChannel","normalizeStringifyOptions","arrayFormat","hexTable","arrayToObject","assignSingleSource","acc","refs","compactQueue","compacted","strWithoutPlus","unescape","defaultEncoder","mapped","mergeTarget","targetItem","querystringify","querystring","query","parser","RandExp","_setDefaults","ignoreCase","multiline","tokens","defaultRange","randInt","_gen","token","ROOT","GROUP","followedBy","notFollowedBy","remember","groupNumber","_randSelect","POSITION","SET","expandedSet","_expand","REPETITION","REFERENCE","CHAR","_randBool","_toOtherCase","RANGE","drange","otherCaseCode","_range","randexp","_randexp","sugar","MAX_BYTES","MAX_UINT32","crypto","msCrypto","getRandomValues","randomBytes","generated","oldBrowser","_typeof","CopyToClipboard","_react","_interopRequireDefault","_copyToClipboard","_excluded","__esModule","enumerableOnly","_objectSpread","_defineProperty","getOwnPropertyDescriptors","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceKeys","sourceSymbolKeys","_defineProperties","_setPrototypeOf","p","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","_React$PureComponent","_inherits","subClass","_super","_this","_classCallCheck","instance","Constructor","_this$props","elem","Children","only","onClick","_createClass","protoProps","staticProps","_this$props2","cloneElement","PureComponent","DebounceInput","_lodash","persist","oldValue","minLength","setState","notify","forceNotify","onKeyDown","onBlur","debounceTimeout","doNotify","debouncedChangeFunc","isDebouncing","onChange","_debounceTimeout2","createNotifier","componentDidUpdate","prevProps","oldTimeout","stateValue","componentWillUnmount","maybeOnKeyDown","maybeOnBlur","forceNotifyByEnter","forceNotifyOnBlur","inputRef","maybeRef","aa","r","ba","ca","da","ea","fa","ha","ia","ja","ka","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","D","oa","pa","qa","na","ma","la","xlinkHref","ra","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","sa","ta","ua","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ma","Ka","La","Na","Oa","Pa","Qa","_render","Ra","_context","_payload","_init","Sa","Ta","Va","_valueTracker","Ua","setValue","stopTracking","Wa","Xa","activeElement","Ya","defaultChecked","_wrapperState","initialChecked","Za","controlled","$a","ab","bb","eb","db","fb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","hb","ib","jb","kb","mathml","lb","mb","nb","ob","MSApp","execUnsafeLocalFunction","pb","lastChild","qb","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","rb","sb","tb","setProperty","ub","menuitem","area","br","col","embed","hr","img","keygen","link","param","track","wbr","vb","wb","xb","srcElement","correspondingUseElement","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Ob","Pb","Qb","Rb","onError","Sb","Tb","Ub","Vb","Wb","Xb","Zb","alternate","return","$b","memoizedState","dehydrated","ac","cc","bc","sibling","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","nc","oc","pc","qc","rc","blockedOn","domEventName","eventSystemFlags","nativeEvent","targetContainers","sc","pointerId","tc","vc","wc","lanePriority","unstable_runWithPriority","hydrate","containerInfo","xc","yc","zc","Ac","Bc","unstable_scheduleCallback","unstable_NormalPriority","Cc","Dc","Ec","animationend","animationiteration","animationstart","transitionend","Fc","Gc","Hc","animation","transition","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","unstable_now","Rc","Uc","pendingLanes","expiredLanes","suspendedLanes","pingedLanes","Vc","entangledLanes","entanglements","Wc","Xc","Yc","Zc","$c","eventTimes","clz32","ad","bd","cd","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","uc","jd","kd","ld","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","cancelBubble","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","locale","which","Rd","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","color","datetime","email","month","password","search","tel","week","me","ne","oe","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ge","Ie","Je","Ke","Le","Me","compareDocumentPosition","Ne","HTMLIFrameElement","Oe","contentEditable","Pe","Qe","Re","Se","Te","Ue","selectionStart","selectionEnd","anchorNode","defaultView","anchorOffset","focusNode","focusOffset","Ve","We","Xe","Ye","Ze","Yb","G","$e","af","bf","cf","df","capture","passive","Nb","z","u","q","t","ef","ff","gf","hf","J","K","Q","L","je","ke","char","jf","kf","lf","mf","autoFocus","nf","__html","pf","qf","rf","sf","previousSibling","tf","vf","wf","xf","yf","zf","Af","Bf","H","I","Cf","M","N","Df","Ef","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","Gf","Hf","If","getChildContext","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","Of","Pf","unstable_cancelCallback","Qf","unstable_shouldYield","Rf","unstable_requestPaint","Sf","Tf","unstable_getCurrentPriorityLevel","Uf","unstable_ImmediatePriority","Vf","Wf","Xf","unstable_LowPriority","Yf","unstable_IdlePriority","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","ReactCurrentBatchConfig","lg","mg","ng","og","pg","qg","rg","_currentValue","sg","childLanes","tg","dependencies","firstContext","lanes","ug","vg","observedBits","responders","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","pending","effects","yg","zg","eventTime","lane","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Kg","isMounted","_reactInternals","enqueueSetState","Hg","Ig","Jg","enqueueReplaceState","enqueueForceUpdate","Lg","shouldComponentUpdate","isPureReactComponent","Mg","Ng","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Og","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Pg","Qg","_owner","_stringRef","Rg","Sg","lastEffect","nextEffect","firstEffect","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","memoizedProps","revealOrder","jh","kh","lh","mh","nh","oh","pendingProps","ph","qh","rh","sh","th","uh","_workInProgressVersionPrimary","vh","ReactCurrentDispatcher","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","baseQueue","Ih","Jh","Kh","lastRenderedReducer","action","eagerReducer","eagerState","lastRenderedState","dispatch","Lh","Mh","_getVersion","_source","mutableReadLanes","Nh","U","useState","getSnapshot","subscribe","useEffect","setSnapshot","Oh","Ph","Qh","Rh","destroy","deps","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","readContext","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useMutableSource","useOpaqueIdentifier","unstable_isNewReconciler","uf","ei","ReactCurrentOwner","fi","gi","ji","ki","li","mi","baseLanes","ni","oi","pi","UNSAFE_componentWillUpdate","componentWillUpdate","qi","ri","pendingContext","Bi","Ci","Di","Ei","si","retryLane","ti","fallback","unstable_avoidThisFallback","ui","unstable_expectedLoadTime","vi","wi","xi","yi","zi","isBackwards","rendering","renderingStartTime","tailMode","Ai","Fi","Gi","wasMultiple","multiple","onclick","createElementNS","Hi","Ii","W","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","componentDidCatch","Ti","componentStack","Ui","Vi","Wi","Xi","__reactInternalSnapshotBeforeUpdate","Yi","Zi","$i","focus","aj","bj","onCommitFiberUnmount","cj","dj","ej","fj","gj","hj","_reactRootContainer","ij","jj","kj","lj","then","mj","nj","oj","pj","X","Y","qj","rj","sj","tj","uj","vj","wj","ck","Z","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Sc","Kj","Lj","Mj","callbackNode","expirationTimes","callbackPriority","Tc","Nj","Oj","Pj","Qj","Rj","Sj","Tj","finishedWork","finishedLanes","Uj","timeoutHandle","Wj","Xj","pingCache","Yj","Zj","va","ak","bk","dk","rangeCount","focusedElem","selectionRange","ek","setStart","setEnd","scrollLeft","scrollTop","onCommitFiberRoot","fk","gk","ik","isReactComponent","pendingChildren","jk","mutableSourceEagerHydrationData","lk","mk","nk","ok","qk","hydrationOptions","mutableSources","_internalRoot","rk","tk","sk","uk","kk","hk","_calculateChangedBits","unstable_observedBits","unmount","form","Vj","vk","Events","wk","findFiberByHostInstance","bundleType","rendererPackageName","xk","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","pk","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","__REACT_DEVTOOLS_GLOBAL_HOOK__","yk","isDisabled","supportsFiber","inject","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","checkDCE","ImmutablePropTypes","Immutable","ANONYMOUS","productionTypeChecker","getProductionTypeChecker","getPropType","propValue","propType","createChainableTypeChecker","validate","checkType","chainedCheckType","createIterableSubclassTypeChecker","subclassName","validator","createImmutableTypeChecker","immutableClassName","immutableClassTypeValidator","listOf","mapOf","orderedMapOf","setOf","orderedSetOf","stackOf","iterableOf","recordOf","mapContains","orderedMapContains","orderedMap","orderedSet","ContextConsumer","ContextProvider","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","forceUpdate","__self","__source","_status","_result","IsSomeRendererActing","createContext","_currentValue2","_threadCount","Provider","Consumer","createFactory","createRef","forwardRef","isValidElement","lazy","codes","createErrorType","_Base","arg1","arg2","arg3","_inheritsLoose","expected","thing","determiner","endsWith","this_len","Duplex","Readable","Writable","allowHalfOpen","readable","onend","_writableState","ended","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","PassThrough","Transform","_transform","chunk","ReadableState","EElistenerCount","Stream","OurUint8Array","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_read","_destroy","readableAddChunk","addToFront","skipChunkCheck","onEofChunk","emitReadable","emitReadable_","chunkInvalid","_isUint8Array","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","nOrig","doRead","pipe","dest","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","cleanup","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","pipeOnDrain","pipeOnDrainFunctionResult","pause","dests","ev","methodWrap","methodWrapReturnFunction","asyncIterator","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","_flush","prefinish","_write","err2","CorkedRequest","finish","onCorkedFinish","corkReq","pendingcb","corkedRequestsFree","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","onwriteStateUpdate","writelen","onwriteError","finishMaybe","errorEmitted","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","writableStateBufferGetter","hasInstance","writeAfterEnd","validChunk","writeOrBuffer","newChunk","decodeChunk","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_toPropertyKey","_toPrimitive","hint","prim","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","promise","lastPromise","wrapForNext","_return","_this2","_Object$create","hasStrings","_getString","_getBuffer","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","req","isRequest","setHeader","abort","ERR_MISSING_ARGS","pipeline","streams","popCallback","destroys","destroyer","closed","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","_immutable2","_utilities","reducers","getDefaultState","reducerKeys","inputState","temporaryState","reducerName","nextDomainState","validateNextState","_combineReducers3","_getStateName2","reducerNames","stateName","isImmutable","unexpectedStatePropertyNames","getUnexpectedInvocationParameterMessage","getStateName","_getStateName3","_getUnexpectedInvocationParameterMessage3","_validateNextState3","nextState","required","port","protocol","sets","positions","regexpStr","lastGroup","groupStack","repeatErr","strToChars","wordBoundary","nonWordBoundary","notWords","ints","notInts","whitespace","notWhitespace","classTokens","tokenizeClass","anyChar","group","INTS","WORDS","WHITESPACE","SLSH","lbs","a16","b16","c8","dctrl","eslsh","copyProps","SafeBuffer","performance","MessageChannel","unstable_forceFrameRate","cancelAnimationFrame","requestAnimationFrame","port2","port1","onmessage","postMessage","sortIndex","startTime","expirationTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","delay","unstable_wrapCallback","NonError","_prepareSuperMessage","commonProperties","isCalled","destroyCircular","to_","forceEnumerable","serializeError","POSITIVE_INFINITY","deserializeError","newError","blockSize","finalSize","_block","_finalSize","_blockSize","accum","assigned","_update","digest","rem","bits","lowBits","highBits","_hash","SHA","algorithm","Algorithm","sha","sha1","sha224","sha256","sha384","sha512","Sha","_w","rotl30","ft","_a","_b","_c","_d","_e","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","T1","T2","SHA512","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","al","bl","cl","dl","fl","gl","hl","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","callBound","$WeakMap","$Map","$weakMapGet","$weakMapSet","$weakMapHas","$mapGet","$mapSet","$mapHas","listGetNode","curr","$wm","$m","$o","channel","assert","listGet","listHas","listSet","statics","conf","composables","stampit","EE","_isStdio","didOnEnd","normalizeEncoding","nenc","_normalizeEncoding","retried","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8End","utf8Text","total","utf8CheckIncomplete","active","getRangeAt","blur","toS","alive","walker","node_","modifiers","keepGoing","isRoot","circular","stopHere","pre","post","updateState","isLeaf","notLeaf","notRoot","isLast","Traverse","traverse","ps","qs","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","address","ignore","lolcation","loc","finaldestination","Url","pathname","scheme","extractProtocol","forwardSlashes","otherSlashes","slashesCount","relative","extracted","instruction","instructions","up","host","hostname","username","auth","ins","inst","useSyncExternalStore","useSyncExternalStoreWithSelector","hasValue","localStorage","trace","isClosingTag","isSelfClosingTag","isOpeningTag","isTag","getType","indentor","textNodesOnSameLine","indicesToRemove","rawResult","lexer","xmlStr","splitOnTags","line","indentation","oneBefore","twoBefore","XML_CHARACTER_MAP","escapeForXML","indent_count","indent_spaces","create_indent","character","_elem","icount","indents","interrupt","isStringContent","get_attributes","_attr","_cdata","proceed","interrupted","instant","declaration","addXmlDeclaration","standalone","isNativeSmoothScrollEnabledOn","getComputedStyle","makeScroller","container","defaultDuration","edgeOffset","scrollTimeoutId","setScrollTimeoutId","stopScroll","getTopWithEdgeOffset","getTopOf","scrollToY","targetY","duration","onDone","toY","startY","getY","distance","loopScroll","getHeight","scrollHeight","scrollToElem","scrollIntoView","elemHeight","getBoundingClientRect","elemBottom","containerHeight","containerBottom","scrollToCenterOf","setup","newDefaultDuration","newEdgeOffset","intoView","center","moving","docElem","getDocY","scrollY","zenscroll","scrollingElement","scrollTo","innerHeight","clientHeight","offsetTop","createScroller","scrollContainer","noZensmooth","isHistorySupported","history","isScrollRestorationSupported","scrollRestoration","zenscrollY","targetElem","getElementById","diff","RE_noZensmooth","anchor","historyState","replaceState","pushState","_Object$assign","_bindInstanceProperty","_extends","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","definition","nmd","_objectSpread2","formatProdErrorMessage","$$observable","observable","randomString","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","createStore","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","getState","isSubscribed","unsubscribe","replaceReducer","nextReducer","_ref","outerSubscribe","observer","observeState","bindActionCreator","actionCreator","funcs","NEW_THROWN_ERR","NEW_THROWN_ERR_BATCH","NEW_SPEC_ERR","NEW_SPEC_ERR_BATCH","NEW_AUTH_ERR","CLEAR","CLEAR_BY","newThrownErr","newThrownErrBatch","newSpecErr","newSpecErrBatch","errArray","newAuthErr","clearBy","makeWindow","win","File","FormData","swagger2SchemaKeys","Im","getParameterSchema","parameter","isOAS3","schema","parameterContentMediaType","DEFAULT_RESPONSE_KEY","maybe","objectify","fromJSOrdered","js","objWithHashedKeys","createObjWithHashedKeys","fdObj","hashIdx","trackKeys","containsMultiple","normalizeArray","isFn","_memoize","objMap","objReduce","systemThunkMiddleware","getSystem","validateValueBySchema","requiredByParam","bypassRequiredCheck","nullable","requiredBySchema","maximum","minimum","maxLength","uniqueItems","maxItems","minItems","schemaRequiresValue","stringCheck","arrayCheck","arrayListCheck","passedAnyCheck","objectVal","propKey","errs","validatePattern","rxPattern","validateMinItems","validateMaxItems","needRemove","errorPerItem","validateUniqueItems","errorsPerIndex","validateMaxLength","validateMinLength","validateMaximum","validateMinimum","validateDateTime","validateGuid","validateString","validateBoolean","validateInteger","validateFile","btoa","sorters","operationsSorter","alpha","localeCompare","tagsSorter","buildFormData","formArr","shallowEqualKeys","braintreeSanitizeUrl","requiresValidationURL","createDeepLinkPath","escapeDeepLinkPath","getExtensions","defObj","getCommonExtensions","deeplyStripKey","keyToStrip","paramToIdentifier","returnAll","allowHashes","paramName","paramIn","generatedIdentifiers","paramToValue","paramValues","b64toB64UrlEncoded","isEmptyValue","idFn","createStoreWithMiddleware","rootReducer","initialState","middlwares","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","middlewares","_dispatch","middlewareAPI","middleware","Store","pluginsOptions","system","configs","components","rootInjects","statePlugins","boundSystem","toolbox","_getSystem","configureStore","buildSystem","getStore","rebuild","pluginSystem","combinePlugins","systemExtend","callAfterLoad","buildReducer","getRootInjects","getWrappedAndBoundActions","getWrappedAndBoundSelectors","getStateThunks","getFn","getConfigs","rebuildReducer","getComponents","_getConfigs","React","setConfigs","states","allReducers","reducerSystem","makeReducer","reducerObj","redFn","wrapWithTryCatch","combineReducers","upName","getSelectors","getActions","actions","actionName","getBoundActions","actionGroupName","wrapActions","newAction","getBoundSelectors","selectors","selectorGroupName","wrapSelectors","selector","selectorName","wrappedSelector","getStates","ori","creator","bindActionCreators","actionCreators","boundActionCreators","getMapStateToProps","getMapDispatchToProps","extras","pluginOptions","pluginLoadType","hasLoaded","calledSomething","afterLoad","wrapComponents","wrapperFn","namespaceObj","logErrors","_len3","_key3","SHOW_AUTH_POPUP","AUTHORIZE","LOGOUT","PRE_AUTHORIZE_OAUTH2","AUTHORIZE_OAUTH2","VALIDATE","CONFIGURE_AUTH","RESTORE_AUTHORIZATION","showDefinitions","authorize","authorizeWithPersistOption","authActions","persistAuthorizationIfNeeded","logout","logoutWithPersistOption","preAuthorizeImplicit","_ref3","errActions","isValid","swaggerUIRedirectOauth2","authId","authorizeOauth2WithPersistOption","authorizeOauth2","_ref4","authorizePassword","_ref5","passwordType","clientId","clientSecret","grant_type","scope","scopes","headers","setClientIdAndSecret","client_id","client_secret","Authorization","authorizeRequest","authorizeApplication","_ref6","authorizeAccessCodeWithFormParams","_ref7","redirectUrl","_ref8","codeVerifier","redirect_uri","code_verifier","authorizeAccessCodeWithBasicAuthentication","_ref9","_ref10","_ref11","parsedUrl","oas3Selectors","specSelectors","authSelectors","additionalQueryStringParams","finalServerUrl","serverEffectiveValue","selectedServer","parseUrl","fetchUrl","_headers","fetch","requestInterceptor","responseInterceptor","parseError","statusText","catch","errData","jsonResponse","error_description","jsonError","configureAuth","restoreAuthorization","_ref12","persistAuthorization","authorized","setItem","authPopup","securities","security","header","parsedAuth","NOT_FOUND","defaultEqualityCheck","defaultMemoize","equalityCheckOrOptions","providedOptions","equalityCheck","_providedOptions$equa","_providedOptions$maxS","resultEqualityCheck","createCacheKeyComparator","areArgumentsShallowlyEqual","createSingletonCache","put","getEntries","createLruCache","cacheIndex","matchingEntry","clearCache","createSelectorCreator","memoizeOptionsFromArgs","createSelector","_lastResult","_recomputations","directlyPassedOptions","memoizeOptions","resultFunc","_directlyPassedOption2","finalMemoizeOptions","getDependencies","dep","dependencyTypes","memoizedResultFunc","recomputationWrapper","dependenciesChecker","params","lastResult","recomputations","resetRecomputations","shownDefinitions","definitionsToAuthorize","definitions","securityDefinitions","getDefinitionsByNames","allowedScopes","definitionsForRequirements","allDefinitions","sec","securityScopes","definitionScopes","isAuthorized","execute","oriAction","operation","specSecurity","getItem","isApiKeyAuth","isInCookie","cookie","authorizedName","cookieName","LockAuthIcon","mapStateToProps","ownProps","getComponent","LockIcon","UnlockAuthIcon","UnlockIcon","initOAuth","preauthorizeApiKey","preauthorizeBasic","LockAuthOperationIcon","UnlockAuthOperationIcon","wrappedAuthorizeAction","wrappedLogoutAction","spec","specJson","definitionBase","isNothing","subject","repeat_1","cycle","isNegativeZero_1","isNegativeZero","NEGATIVE_INFINITY","common","sequence","formatError","exception","where","reason","column","snippet","YAMLException$1","getLine","lineStart","lineEnd","maxLineLength","maxHalfLength","padStart","makeSnippet","linesBefore","linesAfter","lineStarts","lineEnds","foundLineNo","lineNoLength","TYPE_CONSTRUCTOR_OPTIONS","YAML_NODE_KINDS","Type$1","represent","representName","multi","styleAliases","compileStyleAliases","currentType","newIndex","previousType","previousIndex","Schema$1","implicit","explicit","type$1","loadKind","compiledImplicit","compiledExplicit","compiledTypeMap","compileMap","scalar","collectType","failsafe","_null","resolveYamlNull","constructYamlNull","canonical","lowercase","uppercase","camelcase","resolveYamlBoolean","constructYamlBoolean","isOctCode","isDecCode","resolveYamlInteger","hasDigits","constructYamlInteger","sign","octal","decimal","hexadecimal","YAML_FLOAT_PATTERN","SCIENTIFIC_WITHOUT_DOT","resolveYamlFloat","constructYamlFloat","isFloat","representYamlFloat","core","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","timestamp","resolveYamlTimestamp","constructYamlTimestamp","year","day","hour","minute","fraction","delta","UTC","setTime","representYamlTimestamp","resolveYamlMerge","BASE64_MAP","resolveYamlBinary","bitlen","constructYamlBinary","tailbits","representYamlBinary","_hasOwnProperty$3","_toString$2","resolveYamlOmap","pairKey","pairHasKey","constructYamlOmap","_toString$1","resolveYamlPairs","constructYamlPairs","_hasOwnProperty$2","resolveYamlSet","constructYamlSet","_hasOwnProperty$1","CONTEXT_FLOW_IN","CONTEXT_FLOW_OUT","CONTEXT_BLOCK_IN","CONTEXT_BLOCK_OUT","CHOMPING_CLIP","CHOMPING_STRIP","CHOMPING_KEEP","PATTERN_NON_PRINTABLE","PATTERN_NON_ASCII_LINE_BREAKS","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","PATTERN_TAG_URI","is_EOL","is_WHITE_SPACE","is_WS_OR_EOL","is_FLOW_INDICATOR","fromHexCode","simpleEscapeSequence","charFromCodepoint","simpleEscapeCheck","simpleEscapeMap","State$1","onWarning","legacy","implicitTypes","typeMap","lineIndent","firstTabInLine","documents","generateError","throwError","throwWarning","directiveHandlers","YAML","handleYamlDirective","major","minor","checkLineBreaks","handleTagDirective","handle","tagMap","captureSegment","checkJson","_position","_length","_character","mergeMappings","overridableKeys","quantity","storeMappingPair","keyTag","keyNode","valueNode","startLine","startLineStart","startPos","readLineBreak","skipSeparationSpace","allowComments","checkIndent","lineBreaks","testDocumentSeparator","writeFoldedLines","readBlockSequence","nodeIndent","_line","_tag","_anchor","detected","anchorMap","composeNode","readTagProperty","tagHandle","isVerbatim","isNamed","readAnchorProperty","parentIndent","nodeContext","allowToSeek","allowCompact","allowBlockStyles","allowBlockScalars","allowBlockCollections","typeIndex","typeQuantity","typeList","flowIndent","blockIndent","indentStatus","atNewLine","hasContent","readBlockMapping","following","_keyLine","_keyLineStart","_keyPos","atExplicitKey","readFlowCollection","_lineStart","_pos","terminator","isPair","isExplicitPair","isMapping","readNext","readBlockScalar","captureStart","folding","chomping","didReadContent","detectedIndent","textIndent","emptyLines","atMoreIndented","readSingleQuotedScalar","captureEnd","readDoubleQuotedScalar","hexLength","hexResult","readAlias","readPlainScalar","withinFlowCollection","hasPendingContent","_lineIndent","_kind","readDocument","directiveName","directiveArgs","documentStart","hasDirectives","loadDocuments","nullpos","loader","loadAll","loadAll$1","load$1","_hasOwnProperty","CHAR_BOM","CHAR_TAB","CHAR_LINE_FEED","CHAR_CARRIAGE_RETURN","CHAR_SPACE","CHAR_EXCLAMATION","CHAR_DOUBLE_QUOTE","CHAR_SHARP","CHAR_PERCENT","CHAR_AMPERSAND","CHAR_SINGLE_QUOTE","CHAR_ASTERISK","CHAR_COMMA","CHAR_MINUS","CHAR_COLON","CHAR_EQUALS","CHAR_GREATER_THAN","CHAR_QUESTION","CHAR_COMMERCIAL_AT","CHAR_LEFT_SQUARE_BRACKET","CHAR_RIGHT_SQUARE_BRACKET","CHAR_GRAVE_ACCENT","CHAR_LEFT_CURLY_BRACKET","CHAR_VERTICAL_LINE","CHAR_RIGHT_CURLY_BRACKET","ESCAPE_SEQUENCES","DEPRECATED_BOOLEANS_SYNTAX","DEPRECATED_BASE60_SYNTAX","encodeHex","QUOTING_TYPE_SINGLE","QUOTING_TYPE_DOUBLE","State","noArrayIndent","skipInvalid","flowLevel","styleMap","compileStyleMap","sortKeys","lineWidth","noRefs","noCompatMode","condenseFlow","quotingType","forceQuotes","replacer","explicitTypes","duplicates","usedDuplicates","indentString","spaces","ind","generateNextLine","isWhitespace","isPrintable","isNsCharOrWhitespace","isPlainSafe","inblock","cIsNsCharOrWhitespace","cIsNsChar","codePointAt","needIndentIndicator","STYLE_PLAIN","STYLE_SINGLE","STYLE_LITERAL","STYLE_FOLDED","STYLE_DOUBLE","chooseScalarStyle","singleLineOnly","indentPerLevel","testAmbiguousType","prevChar","hasLineBreak","hasFoldableLine","shouldTrackWidth","previousLineBreak","plain","isPlainSafeFirst","isPlainSafeLast","writeScalar","iskey","dump","testAmbiguity","testImplicitResolving","blockHeader","dropEndingNewline","foldString","moreIndented","lineRe","nextLF","foldLine","prevMoreIndented","escapeString","escapeSeq","indentIndicator","breakRe","writeBlockSequence","writeNode","detectType","isblockseq","tagStr","duplicateIndex","duplicate","objectOrArray","writeBlockMapping","objectValue","explicitPair","pairBuffer","objectKeyList","writeFlowMapping","writeFlowSequence","getDuplicateReferences","duplicatesIndexes","inspectNode","dump_1","dump$1","renamed","Type","Schema","FAILSAFE_SCHEMA","JSON_SCHEMA","CORE_SCHEMA","DEFAULT_SCHEMA","YAMLException","float","null","safeLoad","safeLoadAll","safeDump","parseYamlConfig","UPDATE_CONFIGS","TOGGLE_CONFIGS","configName","configValue","toggle","downloadConfig","getConfigByUrl","specActions","status","updateLoadingStatus","updateUrl","oriVal","getLocalConfig","configsPlugin","setHash","SCROLL_TO","CLEAR_SCROLL_TO","getScrollParent","includeHidden","LAST_RESORT","excludeStaticParent","overflowRegex","parentElement","overflow","overflowY","overflowX","layout","scrollToElement","clearScrollTo","readyToScroll","isShownKey","scrollToKey","layoutSelectors","getScrollToKey","layoutActions","parseDeepLinkHash","rawHash","deepLinking","hashArray","isShownKeyFromUrlHashArray","tagId","maybeOperationId","tagIsShownKey","show","urlHashArray","operationId","urlHashArrayFromIsShownKey","tokenArray","shown","assetName","Ori","OperationWrapper","onLoad","OperationTagWrapper","OperationTag","seekStr","makeNewMessage","jsSpec","errorTransformers","NotOfType","ParameterOneOf","transformErrors","inputs","transformedErrors","transformer","DEFAULT_ERROR_STRUCTURE","allErrors","lastError","newErrors","errValue","filterValue","taggedOps","phrase","tagObj","opsFilter","ArrowUp","xmlns","viewBox","focusable","ArrowDown","Arrow","Close","Copy","fillRule","Lock","Unlock","IconsPlugin","ArrowUpIcon","ArrowDownIcon","ArrowIcon","CloseIcon","CopyIcon","UPDATE_LAYOUT","UPDATE_FILTER","UPDATE_MODE","SHOW","updateLayout","updateFilter","changeMode","isShown","thingToShow","currentFilter","def","whatMode","showSummary","taggedOperations","oriSelector","maxDisplayedTags","levels","getLevel","logLevel","logLevelInt","info","engaged","updateSpec","updateJsonSpec","onComplete","extractKey","escapeShell","escapeCMD","escapePowershell","curlify","request","newLine","isMultipartFormDataRequest","curlified","addWords","addWordsWithoutLeadingSpace","addNewLine","addIndent","extractedKey","reqBody","getStringBodyOfMap","curlifyToJoin","requestSnippetGenerator_curl_powershell","requestSnippetGenerator_curl_bash","requestSnippetGenerator_curl_cmd","getGenerators","languageKeys","generators","getSnippetGenerators","genFn","getGenFn","getActiveLanguage","getDefaultExpanded","_arrayLikeToArray","arr2","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","minLen","_nonIterableSpread","classNameCombinations","createStyleObject","elementStyle","stylesheet","getClassNameCombinations","powerSetPermutations","styleObject","createClassNameString","_ref$style","useInlineStyles","TagName","childrenCreator","createChildren","childrenCount","allStylesheetSelectors","startingClassName","astGenerator","newLineRegex","AllLineNumbers","codeString","codeStyle","_ref2$containerStyle","containerStyle","paddingRight","_ref2$numberStyle","numberStyle","startingLineNumber","getAllLineNumbers","lines","getInlineLineNumber","lineNumber","inlineLineNumberStyle","assembleLineNumberStyles","lineNumberStyle","largestLineNumber","defaultLineNumberStyle","minWidth","textAlign","customLineNumberStyle","createLineElement","showInlineLineNumbers","_ref3$lineProps","lineProps","_ref3$className","showLineNumbers","wrapLongLines","flattenCodeTree","tree","newTree","processLines","codeTree","wrapLines","lastLineBreakIndex","createLine","createWrappedLine","createUnwrappedLine","_loop","newLines","getNewLines","splitValue","stringChild","lastLineInPreviousSpan","newElem","_line2","_line3","defaultRenderer","rows","isHighlightJs","SyntaxHighlighter","defaultAstGenerator","_ref7$style","_ref7$customStyle","customStyle","_ref7$codeTagProps","codeTagProps","_ref7$useInlineStyles","_ref7$showLineNumbers","_ref7$showInlineLineN","_ref7$startingLineNum","lineNumberContainerStyle","_ref7$lineNumberStyle","_ref7$wrapLongLines","_ref7$lineProps","renderer","_ref7$PreTag","PreTag","_ref7$CodeTag","CodeTag","_ref7$code","allLineNumbers","defaultPreStyle","backgroundColor","generatorClassName","preProps","defaultCodeValue","getCodeTree","hasLanguage","checkForListedLanguage","styles","agate","arta","monokai","nord","obsidian","idea","availableStyles","getStyle","cursor","paddingBottom","paddingTop","border","borderRadius","boxShadow","borderBottom","activeStyle","marginTop","marginRight","marginLeft","requestSnippetsSelectors","canSyntaxHighlight","rootRef","activeLanguage","setActiveLanguage","isExpanded","setIsExpanded","handlePreventYScrollingBeyondElement","snippetGenerators","activeGenerator","handleSetIsExpanded","handleGetBtnStyle","contentHeight","offsetHeight","visibleHeight","SnippetComponent","readOnly","justifyContent","alignItems","marginBottom","background","paddingLeft","handleGenChange","RequestSnippets","requestSnippets","shallowArrayEquals","foundKey","OriginalCache","primitives","generateStringFromRegex","string_email","string_date-time","string_date","string_uuid","string_hostname","string_ipv4","string_ipv6","number_float","sanitizeRef","objectContracts","arrayContracts","numberContracts","stringContracts","liftSampleHelper","oldSchema","setIfNotDefinedInTarget","includeReadOnly","writeOnly","includeWriteOnly","sampleFromSchemaGeneric","exampleOverride","respectXML","usePlainValue","example","hasOneOf","hasAnyOf","anyOf","schemaToAdd","additionalProperties","schemaHasAny","enum","handleMinMaxItems","sampleArray","addPropertyToResult","propertyAddedCounter","hasExceededMaxProperties","maxProperties","canAddProperty","isOptionalProperty","requiredPropertiesToAdd","addedCount","overrideE","enumAttrVal","attrExample","attrDefault","discriminator","$$ref","itemSchema","itemSamples","additionalProp","additionalProp1","additionalProps","additionalPropSample","toGenerateCount","minProperties","exclusiveMinimum","exclusiveMaximum","inferSchema","createXMLExample","XML","sampleFromSchema","memoizedCreateXMLExample","memoizeN","memoizedSampleFromSchema","shouldStringifyTypesConfig","when","shouldStringifyTypes","defaultStringifyTypes","contentType","resType","typesToStringify","nextConfig","jsonExample","getJsonSampleSchema","yamlString","getXmlSampleSchema","getYamlSampleSchema","makeGetJsonSampleSchema","makeGetYamlSampleSchema","makeGetXmlSampleSchema","getSampleSchema","makeGetSampleSchema","jsonSchema5","OPERATION_METHODS","specStr","specSource","specJS","specResolved","specResolvedSubtree","mergerFn","oldVal","newVal","specJsonWithResolvedSubtrees","returnSelfOrNewMap","externalDocs","semver","validOperationMethods","operations","pathName","consumes","produces","findDefinition","resolvedRes","unresolvedRes","basePath","schemes","operationsWithRootInherited","ops","op","tags","tagDetails","operationsWithTags","taggedMap","ar","tagA","tagB","sortFn","responses","requests","mutatedRequests","responseFor","requestFor","mutatedRequestFor","allowTryItOutFor","parameterWithMetaByIdentity","pathMethod","opParams","metaParams","currentParam","inNameKeyedMeta","hashKeyedMeta","parameterInclusionSettingFor","paramKey","parameterWithMeta","operationWithMeta","mergedParams","getParameter","inType","hasHost","parameterValues","isXml","parametersIncludeIn","parameters","inValue","parametersIncludeType","typeValue","contentTypeValues","producesValue","currentProducesFor","requestContentType","responseContentType","currentProducesValue","firstProducesArrayItem","producesOptionsFor","operationProduces","pathItemProduces","globalProduces","consumesOptionsFor","operationConsumes","pathItemConsumes","globalConsumes","operationScheme","matchResult","canExecuteScheme","validationErrors","validateBeforeExecute","getOAS3RequiredRequestBodyContentType","requiredObj","requestBody","isMediaTypeSchemaPropertiesEqual","currentMediaType","targetMediaType","requestBodyContent","currentMediaTypeSchemaProperties","targetMediaTypeSchemaProperties","UPDATE_SPEC","UPDATE_URL","UPDATE_JSON","UPDATE_PARAM","UPDATE_EMPTY_PARAM_INCLUSION","VALIDATE_PARAMS","SET_RESPONSE","SET_REQUEST","SET_MUTATED_REQUEST","LOG_REQUEST","CLEAR_RESPONSE","CLEAR_REQUEST","CLEAR_VALIDATE_PARAMS","UPDATE_OPERATION_META_VALUE","UPDATE_RESOLVED","UPDATE_RESOLVED_SUBTREE","SET_SCHEME","cleanSpec","updateResolved","parseToJson","hasWarnedAboutResolveSpecDeprecation","resolveSpec","AST","modelPropertyMacro","parameterMacro","getLineNumberForPath","baseDoc","baseURI","preparedErrors","fullPath","requestBatch","debResolveSubtrees","systemPartitionedBatches","async","systemRequestBatch","resolveSubtree","errSelectors","batchResult","resultMap","specWithCurrentSubtrees","oidcScheme","openIdConnectUrl","openIdConnectData","assocPath","ImmutableMap","updateResolvedSubtree","requestResolvedSubtree","batchedPath","batchedSystem","changeParam","changeParamByIdentity","invalidateResolvedSubtreeCache","validateParams","updateEmptyParamInclusion","includeEmptyValue","clearValidateParams","changeConsumesValue","changeProducesValue","setResponse","setRequest","setMutatedRequest","logRequest","executeRequest","paramValue","contextUrl","opId","server","namespaceVariables","serverVariables","globalVariables","requestBodyValue","requestBodyInclusionSetting","parsedRequest","buildRequest","mutatedRequest","parsedMutatedRequest","clearResponse","clearRequest","setScheme","valueKey","paramMeta","isEmptyValueIncluded","paramRequired","paramDetails","validateParam","statusCode","newState","operationPath","metaPath","pathItems","$ref","SpecPlugin","__extends","extendStatics","__","_objectKeys","keys_1","_deepClone","escapePathComponent","unescapePathComponent","hasUndefined","i_1","objKeysLength","patchErrorMessageFormatter","messageParts","PatchError","_newTarget","JsonPatchError","deepClone","objOps","newDocument","move","getValueByPointer","originalValue","applyOperation","valueToCopy","_areEquals","_get","arrOps","pointer","getOriginalDestination","validateOperation","mutateDocument","banPrototypeModifications","existingPathFragment","validateFunction","applyPatch","patch","length_1","applyReducer","operationResult","pathLen","existingPathLen","externalValidator","arrA","arrB","beforeDict","Mirror","observers","ObserverInfo","unobserve","observe","mirror","getMirror","observerInfo","getObserverFromMirror","dirtyCheck","generate","fastCheck","patches","removeObserverFromMirror","invertible","_generate","newKeys","oldKeys","deleted","tree1","tree2","normalizeJSONPath","getInByJsonPath","currentValue","allowMetaPatches","isAdditiveMutation","parentPathMatch","fullyNormalizeArray","cleanArray","isPromise","forEachNew","mutations","forEachNewPatch","forEachNewPrimitive","forEachPrimitive","isJsonPatch","isContextPatch","isPatch","isMutation","isGenerator","mutation","newResults","arrayResults","moreResults","jsonPath","_isPlaceholder","f1","f2","_isArray","methodNames","transducerCreator","transducer","XAll","_xall","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","combined","argsIdx","combinedIdx","curryN","_arrayFromIterator","_includesWith","pred","_objectIs","_isArguments","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","nIdx","ks","checkArgsLength","_uniqContentEquals","aIterator","bIterator","stackA","stackB","_equals","aItem","typeA","_functionName","sticky","unicode","keysA","extendedStackA","extendedStackB","_includes","inf","functor","_quote","pad","_toISOString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","_complement","_arrayReduce","XFilter","_xfilter","filterable","recur","mapPairs","repr","safeMax","maxByValue","maxByType","stringA","maxByStringValue","XMap","_xmap","_isInteger","nth","pluck","f3","symIterator","_createReduce","methodReduce","iterableReduce","_reduce","thisObj","_xIterableReduce","_xMethodReduce","XWrap","allPass","preds","always","anyPass","_iterableReduce","_methodReduce","ap","applyF","applyX","set1","set2","len1","vals","isNil","nextObj","and","liftN","lifted","lift","both","_both","_pipe","methodname","toIndex","converge","fns","_cloneRegExp","dotAll","_clone","deep","_ObjectMap","_isPrimitive","copiedValue","cachedCopy","hashedKey","bucket","XReduceBy","valueFn","valueAcc","keyFn","_xreduceBy","reduceBy","elt","defaultTo","hasOrAdd","shouldAdd","prevSize","_items","_nativeSet","bIdx","_Set","difference","firstLen","secondLen","toFilterOut","XTake","_xtake","dropLastWhile","XDropLastWhile","retained","retain","_xdropLastWhile","XDropWhile","_xdropWhile","dropWhile","or","_either","_isTypedArray","_path","identical","unaryIdentical","ifElse","onTrue","onFalse","_ifElse","invoker","toFunctorFn","pathsArray","pathAr","mapObjIndexed","mergeWithKey","mergeDeepWithKey","lObj","rObj","lVal","rVal","mergeDeepRight","none","Identity","over","pathOr","pathSatisfies","propPath","pick","propEq","propOr","propSatisfies","_isNumber","_isRegExp","ws","XUniqWith","_xuniqWith","whenTrueFn","trimCharsEnd","chars","checkValue","valueName","replaceAll","replaceValue","checkArguments","checkSearchValue","replaceAllPonyfill","replaceAllInvoker","isWindows","getProtocol","isFileSystemPath","isHttpUrl","toFileSystemPath","urlDecodePatterns","keepFileProtocol","isWindowsPredicate","isFileUrl","getHash","hashIndex","stripHash","hashStrippedUri","resolvedUrl","urlEncodePatterns","fromFileSystemPath","unsanitize","Headers","Request","ACCEPT_HEADER_VALUE_FOR_DOCUMENTS","DEFAULT_BASE_URL","freelyNamedKeyParents","nonFreelyNamedKeyGrandparents","freelyNamedPaths","freelyNamedAncestors","isFreelyNamed","parentPath","parentKey","grandparentKey","parentStr","absolutifyPointer","baseUrl","urlPart","fragmentPart","safeBaseUrl","safeUrlPart","newRefUrlPart","absoluteBaseUrl","rawRefUrlPart","ABSOLUTE_URL_REGEXP","JSONRefError","extra","oriError","originalError","docCache","specmapRefs","skipResolutionTestFns","specmap","specmapInstance","getInstance","shouldSkipResolution","getContext","splitString","refPath","promOrVal","absoluteify","wrapError","pointerAlreadyInPath","parentPointer","arrayToJsonPointer","escapeJsonPointerToken","fullyQualifiedPointer","safeParentPointer","rootDoc","contextTree","pointerIsAParent","currPath","hasIndirectCycle","useCircularStructures","absolutifiedRef","jsonPointerToArray","extractFromDoc","__value","patchValueAlreadyInPath","ancestors","pointToAncestor","mod","getDoc","fetchJSON","docPath","Accept","loadSpec","extract","unescapeJsonPointerToken","_doc","URLSearchParams","pointerBoundaryChar","lastParentChar","alreadyAddError","originalDefinitionObj","allOf","toMerge","absoluteRefPatches","generateAbsoluteRefPatches","getBaseUrlForNodePath","targetKeys","nodePath","absolutifiedRefValue","opPath","ContextTree","createNode","getParent","branch","protoValue","ensureExists","SpecMap","getPluginName","pluginName","getPatchesOfType","debugLevel","pluginHistory","promisedPatches","showDebug","allPatches","pluginProp","libMethods","_getContext","hasRun","_hasRun","wrappedPlugins","wrapPlugin","updatePatches","verbose","pathDiscriminator","ctx","createKeyBasedPlugin","pluginObj","isSubPath","tested","generator","refCache","parentIndex","indexOfFirstProperties","isRootProperties","traversed","updatedPath","objRef","isWithinPathDiscriminator","nextPlugin","getMutationsForPlugin","nextPromisedPatch","race","getPluginHistory","getPluginRunCount","getPluginHistoryTip","getPluginMutationIndex","mutationIndex","updatePluginHistory","promisedPatchThen","setContext","updateMutations","removePromisedPatch","promisedPatch","getMutations","getCurrentMutations","getCurrentPlugin","tip","currentPlugin","getLib","nextPromise","pluginCount","promises","executePlugin","lastMutationIndex","yieldedPatches","v2OperationIdCompatibilityMode","idFromPathMethod","parsedSpec","$$normalized","pathParameters","oid","opList","__originalOperationId","inheritsList","toBeInherit","inheritName","opParam","makeFetchJSON","credentials","withCredentials","isRfc3986Reserved","isRrc3986Unreserved","encodeDisallowedCharacters","TextEncoder","encodedByte","stylize","encodeArray","explode","valueEncoder","encodeObject","valueKeys","encodePrimitive","serializeRes","mergeInQueryOrForm","headerName","userFetch","resError","responseError","shouldDownloadAsText","oriRes","serializeHeaders","useText","parseBody","serializeHeaderValue","isFile","navigatorObj","product","isArrayOfFile","STYLE_SEPARATORS","spaceDelimited","pipeDelimited","SEPARATORS","csv","ssv","tsv","FileWithData","formatKeyValue","skipEncoding","collectionFormat","allowEmptyValue","serializationOption","encodeFn","encodedKey","formatKeyValueBySerializationOption","allowReserved","encodedJson","encodedData","encodeKeyFn","encodeFormOrQuery","encodedQuery","parameterName","hasFile","formdata","reqForm","formData","oriSearch","newStr","oriQuery","finalStr","strs","joinSearch","resolveGenericStrategy","skipNormalization","retrievalURI","httpClient","doResolve","_spec","plugs","mapSpec","genericStrategy","normalized","isOpenAPI30","openapi","isOpenAPI31","isOpenAPI3","openApi2Strategy","swagger","isOpenAPI2","resolveOpenAPI2Strategy","openApi30Strategy","resolveOpenAPI30Strategy","Annotation","Comment","ParseResult","api","annotations","warnings","replaceResult","searchIndex","SourceMap","positionStart","positionEnd","row","invokeArgs","mpath","boundMethod","hasMethod","hasBasicElementProps","primitiveEq","_obj$primitive","hasClass","cls","_obj$classes","_obj$classes$includes","isElementType","predicateCreator","isStringElement","isNumberElement","isNullElement","isBooleanElement","isObjectElement","isArrayElement","isMemberElement","isLinkElement","isRefElement","isAnnotationElement","isCommentElement","isParseResultElement","isSourceMapElement","isPrimitiveElement","hasElementSourceMap","_element$meta","_element$meta$get","includesSymbols","elementSymbols","includesClasses","isOfTypeObject","isObjectConstructor","hasObjectConstructor","createNamespace","namespacePlugin","namespaceInstance","predicates","ApiDOMAggregateError","ApiDOMError","getVisitFn","visitor","isLeaving","typeVisitor","typeSpecificVisitor","leave","enter","specificVisitor","specificTypeVisitor","BREAK","getNodeType","isNode","visitors","visitFnGetter","nodeTypeGetter","visit","keyMap","breakSymbol","deleteNodeSymbol","skipVisitingNodeSymbol","nodePredicate","detectCycles","visitorKeys","inArray","edits","isEdited","editOffset","editKey","editValue","visitFn","stateKey","keyMapDefault","ParseResultElement","PredicateVisitor","returnOnTrue","returnOnFalse","dispatchPlugins","toolboxCreator","visitorOptions","pluginsSpecs","pluginsVisitor","newElement","createRefractor","computeEdges","edges","childElement","TranscluderConstructor","transclude","_edges","objectElement","transcludeChildOfObjectElement","arrayElement","transcludeChildOfArrayElement","memberElement","transcludeChildOfMemberElement","EphemeralObject","EphemeralArray","toReference","fromEntries","Visitor","_Visitor","references","_BooleanElement","_NumberElement","_StringElement","_NullElement","ephemeral","ApiDOMStructuredError","structuredOptions","JsonPointerError","CompilationJsonPointerError","isFinitePonyfill","isIntegerPonyfill","trimCharsStart","encodedURIComponent","InvalidJsonPointerError","uriToPointer","EvaluationJsonPointerError","failedToken","failedTokenPosition","elementSourceMap","tokenPosition","Callback","Components","schemas","examples","requestBodies","securitySchemes","callbacks","Contact","Discriminator","Encoding","allowedReserved","Example","summary","externalValue","ExternalDocumentation","Header","contentProp","Info","termsOfService","tos","contact","contactElement","licenseElement","License","Link","operationRef","_this$operationRef","_this$operationId","MediaType","OAuthFlow","authorizationUrl","tokenUrl","refreshUrl","OAuthFlows","clientCredentials","authorizationCode","Openapi","OpenApi3_0","servers","Operation","Parameter","PathItem","GET","PUT","POST","OPTIONS","HEAD","PATCH","TRACE","Paths","Reference","RequestBody","Responses","JSONSchema","idProp","$schema","multipleOf","additionalItems","patternProperties","enumValue","media","JSONReference","Media","binaryEncoding","LinkDescription","rel","targetSchema","mediaType","encType","dereference","rootObject","copyMetaAndAttributes","JSONSchemaDraft4Element","JSONReferenceElement","MediaElement","LinkDescriptionElement","specObj","passingOptionsNames","retrievePassingOptions","retrieveFixedFields","specPath","retrieveVisitor","retrieveVisitorInstance","passingOpts","toRefractedElement","visitorPrototype","fallbackVisitorPrototype","FixedFieldsVisitor","ignoredFields","fields","fixedFieldElement","newMemberElement","isJSONReferenceLikeElement","PatternedFieldsJsonObjectVisitor","fieldPatternPredicate","patternedFieldElement","stringElement","linkDescriptionElement","getMaxArity","dispatchImpl","functions","AlternatingVisitor","alternator","JSONSchemaOrJSONReferenceVisitor","$visitor","fixedFields","isJSONSchemaElement","isJSONReferenceElement","isMediaElement","isLinkDescriptionElement","jsonSchemaDraft4","specificationObj","resolvedSpec","rootVisitor","SecurityRequirement","SecurityScheme","inVal","bearerFormat","flows","Server","variables","ServerVariable","Tag","Xml","CallbackElement","ComponentsElement","ContactElement","DiscriminatorElement","ExternalDocumentationElement","HeaderElement","InfoElement","LicenseElement","MediaTypeElement","OAuthFlowElement","OAuthFlowsElement","OpenApi3_0Element","OperationElement","ParameterElement","PathItemElement","PathsElement","ReferenceElement","RequestBodyElement","ResponseElement","ResponsesElement","SchemaElement","SecurityRequirementElement","SecuritySchemeElement","ServerElement","ServerVariableElement","TagElement","openApiGenericElement","openApiSemanticElement","isOpenApi3_0LikeElement","isParameterLikeElement","isReferenceLikeElement","isRequestBodyLikeElement","isResponseLikeElement","isServerLikeElement","isTagLikeElement","isOpenApiExtension","canSupportSpecificationExtensions","specificationExtensionPredicate","extensionElement","unrefractedElement","openapiElement","LinkParameters","static","primaryClass","Servers","ServerVariables","isCallbackElement","isComponentsElement","isContactElement","isExampleElement","isExternalDocumentationElement","isHeaderElement","isInfoElement","isLicenseElement","isLinkElementExternal","isOpenapiElement","isOpenApi3_0Element","isOperationElement","isParameterElement","isPathItemElement","isPathItemElementExternal","isPathsElement","isReferenceElement","isReferenceElementExternal","isRequestBodyElement","isResponseElement","isResponsesElement","isSchemaElement","isBooleanJsonSchemaElement","isSecurityRequirementElement","isServerElement","isServerVariableElement","isMediaTypeElement","referenceElement","MediaTypeExamples","MediaTypeEncoding","Security","mediaTypeElement","HeaderExamples","HeaderContent","JSONSchemaAllOfVisitor","JSONSchemaAnyOfVisitor","JSONSchemaOneOfVisitor","JSONSchemaDefinitionsVisitor","JSONSchemaDependenciesVisitor","JSONSchemaItemsVisitor","JSONSchemaPropertiesVisitor","JSONSchemaPatternPropertiesVisitor","JSONSchemaTypeVisitor","fieldName","DiscriminatorMapping","ParameterExamples","ParameterContent","ComponentsSchemas","ComponentsResponses","ResponsesVisitor","ComponentsParameters","ComponentsExamples","ComponentsRequestBodies","ComponentsHeaders","HeadersVisitor","ComponentsSecuritySchemes","ComponentsLinks","ComponentsCallbacks","headerElement","EncodingHeaders","pathItemElement","RequestBodyContent","ResponseHeaders","ResponseContent","ResponseLinks","specPathFixedFields","specPathPatternedFields","httpStatusCode","OperationTags","OperationParameters","OperationCallbacks","OperationSecurity","OperationServers","operationElement","httpMethodElementCI","httpMethodElementCS","PathItemServers","PathItemParameters","OAuthFlowScopes","Tags","ReferenceSpecification","SchemaSpecification","OpenApi","in","extension","openApi3_0","JsonSchemaDialect","identifier","OpenApi3_1","jsonSchemaDialect","webhooks","$vocabulary","$id","$anchor","$dynamicAnchor","$dynamicRef","$defs","$comment","ifSchema","thenSchema","elseSchema","dependentSchemas","prefixItems","containsProp","propertyNames","unevaluatedItems","unevaluatedProperties","enumVal","constVal","maxContains","minContains","dependentRequired","contentEncoding","contentMediaType","contentSchema","BaseInfoVisitor","BaseContactVisitor","BaseLicenseVisitor","BaseLinkVisitor","jsonSchemaDialectElement","BaseServerVisitor","BaseServerVariableVisitor","BaseMediaTypeVisitor","BaseSecurityRequirementVisitor","BaseComponentsVisitor","BaseTagVisitor","BaseReferenceVisitor","BaseParameterVisitor","BaseHeaderVisitor","isJsonSchemaDialectElement","isOpenApi3_1Element","getJsonSchemaDialect","handle$schema","_this$parent$meta$get","_this$parent$$schema","inherited$schema","handle$id","_objectElement$get","inherited$id","_ObjectElement","booleanElement","schemaElement","BaseDiscriminatorVisitor","BaseXMLVisitor","ComponentsPathItems","BaseExampleVisitor","BaseExternalDocumentationVisitor","BaseEncodingVisitor","BasePathsVisitor","BaseRequestBodyVisitor","BaseCallbackVisitor","BaseResponseVisitor","BaseResponsesVisitor","BaseOperationVisitor","BasePathItemVisitor","BaseSecuritySchemeVisitor","BaseOAuthFlowsVisitor","BaseOAuthFlowVisitor","Webhooks","if","else","const","OpenApi3_1Element","openApi3_1","UnsupportedOperationError","NotImplementedError","MediaTypes","unknownMediaType","filterByFormat","findBy","latest","OpenAPIMediaTypes","effectiveFormat","refSet","ReferenceSet","anotherRefSet","clean","parsers","parserOpts","resolvers","resolverOpts","strategies","external","baseURILens","baseURIDefault","parseResult","lastDotPosition","TextDecoder","PluginError","file","pluginResults","ParserError","UnmatchedDereferenceStrategyError","DereferenceError","dereferenceApiDOM","surrogateWrapping","elementClone","dereferenceStrategies","mergedOptions","withoutDefaults","Parser","allowEmpty","sourceMap","fileExtensions","mediaTypes","canParse","binaryString","base64String","parseResultElement","base64StringElement","canResolve","ResolverError","MaximumResolverDepthError","MaximumDereferenceDepthError","UnmatchedResolverError","optsBoundResolvers","clonedResolver","optsBoundParsers","clonedParser","parseFile","EvaluationJsonSchemaUriError","InvalidSelectorError","InvalidJsonSchema$anchorError","EvaluationJsonSchema$anchorError","isAnchor","uriToAnchor","_e$$anchor","resolveSchema$refField","$refBaseURI","refractToSchemaElement","refracted","maybeRefractToSchemaElement","uriStrippedHash","isSchemaElementWith$id","schemaObjectElements","$idBaseURI","resolveSchema$idField","fragmentEvaluate","visitAsync","OpenApi3_1ResolveVisitor","indirections","crawledElements","crawlingMap","visited","toBaseURI","_referenceElement$$re","_pathItemElement$$ref","linkElement","_linkElement$operatio","ExampleElement","exampleElement","_exampleElement$exter","$refBaseURIStrippedHash","isUnknownURI","canRead","isURL","isExternal","crawlReferenceElement","_referenceElement$$re2","jsonPointer","referencedElementType","crawl","crawlPathItemElement","_pathItemElement$$ref2","referencedElement","crawlSchemaElement","referencingElement","OpenApi3_1ResolveStrategy","_file$parseResult","removeSpaces","normalizeOperationId","withoutSpaces","createNormalizedOperationId","operationIdNormalizer","normalizedOperations","normalizedOperationGroups","normalizedOperationId","operationElements","indexedNormalizedOperationId","_operationElement$ope","linkOperationId","normalizedOperationElement","originalOperationId","parameterEquals","parameter1","parameter2","pathItemParameters","parentPathItemParameters","operationParameters","mergedParameters","topLevelSecurity","_topLevelSecurity","openAPIServers","pathItemServers","_openapiElement$serve","parentPathItemServers","parameterElement","_parameterElement$sch","_parameterElement$sch2","_example$value","_headerElement$schema","_headerElement$schema2","pojoAdapter","normalizeFn","openApiElement","Resolver","redirects","getHttpClient","AbortController","AbortSignal","swaggerHTTPClient","swaggerHTTPClientConfig","client","controller","signal","timeoutID","redirect","follow","resource","hasSupportedFileExtension","hasSupportedMediaType","pojo","detectionRegExp","refractorOpts","canDereference","OpenApi3_1DereferenceVisitor","toAncestorLineage","directAncestors","_referencingElement$$","_referencingElement$$2","_referencingElement$$3","_referencingElement$d","_referencingElement$s","ancestorsLineage","ancs","hasDescription","hasSummary","_referencingElement$$4","_referencingElement$$5","_referencingElement$$6","mergedResult","keyElement","_linkElement$operatio2","_linkElement$operatio3","_linkElement$operatio4","_linkElement$operatio5","valueElement","_referencingElement$$8","_referencingElement$$7","referencedElementClone","OpenApi3_1DereferenceStrategy","dereferencedElement","elementPath","elementPathSanitized","trimParseResult","SchemaRefError","OpenApi3_1SwaggerClientDereferenceVisitor","_this$basePath","_referenceElement$des","_referenceElement$sum","cycledReferenceElement","objectFragment","_this$basePath2","_this$options$derefer","_this$options$derefer2","rootCause","wrappedError","dereferenceOpts","_this$basePath3","cycledPathItemElement","mergedPathItemElement","_this$basePath4","_this$options$derefer3","_this$options$derefer4","_this$basePath5","cycledSchemaElement","mergeVisitor","jsonSchemaBooleanElement","mergedSchemaElement","memberValue","memberKey","_this$basePath6","_this$options$derefer5","_this$options$derefer6","_this$basePath7","_this$options$derefer7","_this$options$derefer8","macroOperation","pojoOperation","pojoParameter","macroValue","macroError","ModelPropertyMacroVisitor","emptyElement","cloneMemberElement","isMergeableElement","mergeArrayElement","targetElement","sourceElement","mergeObjectElement","clonedMember","targetValue","_mergedOptions$isMerg","_mergedOptions$arrayE","_mergedOptions$object","defaultOptions","arrayElementMerge","objectElementMerge","sourceIsArrayElement","OpenApi3_1SwaggerClientDereferenceStrategy","_options$dereference$","dereferenceVisitor","parameterMacroVisitor","modelPropertyMacroVisitor","allOfVisitor","resolveOpenAPI31Strategy","openApiParseResultElement","jsonPointerURI","fragmentElement","openApiElementReference","transcluded","openApi31ApiDOMStrategy","makeResolve","retrievedSpec","strategyOptions","strg","generic","prot","bodyBuilder","headerBuilder","queryBuilder","pathBuilder","formDataBuilder","effectiveMediaType","styledValue","serializedValue","PARAMETER_HEADER_BLACKLIST","Cookie","globalObject","attachContentTypeForEmptyPayload","applySecurities","_spec$components","securityDef","securityObj","cookies","encoded","tokenValue","tokenType","token_type","requestBodyDef","requestBodyMediaTypes","isExplicitContentTypeValid","firstMediaType","accept","_requestBodyDef$conte","_requestBodyDef$conte2","tokenName","oauthToken","authorization","isBodyParamPresent","isFormDataParamPresent","idFromPathMethodLegacy","arrayOrEmpty","parseURIReference","uriReference","parsedURL","searchParams","OperationNotFoundError","findParametersWithName","deduplicateParameters","paramsMap","dedupedParameters","userHttp","parameterBuilders","specIsOAS3","operationRaw","getOperationRaw","findOperation","eachOperation","operationObj","cbValue","rawOperationId","oas3BaseUrl","_spec$paths","_spec$paths2","selectedServerUrl","selectedServerObj","serverUrls","srv","varNames","getVariableTemplateNames","vari","variableDefinition","variableValue","buildOas3UrlWithContext","ourUrl","parsedContextUrl","computedScheme","stripNonAlpha","computedHost","computedPath","swagger2BaseUrl","firstSchemeInSpec","combinedParameters","versionSpecificOptions","cookieString","cookieValue","makeResolveSubtree","returnEntireTree","resolveOptions","pathSegment","httpFn","Http","preFetch","postFetch","openApi31ApiDOMResolveStrategy","openApi30ResolveStrategy","openApi2ResolveStrategy","genericResolveStrategy","freshConfigs","batch","defaultNoopBatch","getBatch","ContextKey","gT","_gT$ContextKey","contextMap","realContext","pureFinalPropsSelectorFactory","mapDispatchToProps","mergeProps","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","stateProps","dispatchProps","mergedProps","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","handleNewPropsAndNewState","dependsOnOwnProps","handleNewProps","handleNewState","nextStateProps","statePropsChanged","pureFinalPropsSelector","handleFirstCall","firstState","firstOwnProps","wrapMapToPropsConstant","getConstant","initConstantSelector","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","initProxySelector","proxy","mapToPropsProxy","stateOrDispatch","detectFactoryAndVerify","createInvalidArgFactory","wrappedComponentName","defaultMergeProps","nullListeners","createSubscription","parentSub","handleChangeWrapper","subscription","onStateChange","trySubscribe","addNestedSub","createListenerCollection","notifyNestedSubs","tryUnsubscribe","getListeners","useIsomorphicLayoutEffect","shallowEqual","objA","objB","keysB","NO_SUBSCRIPTION_ARRAY","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","childPropsFromStoreUpdate","strictEqual","connect","pure","areMergedPropsEqual","Context","initMapStateToProps","mapStateToPropsFactory","initMapDispatchToProps","mapDispatchToPropsFactory","initMergeProps","mergePropsFactory","wrapMergePropsFunc","initMergePropsProxy","hasRunOnce","mergePropsProxy","nextMergedProps","shouldHandleStateChanges","WrappedComponent","selectorFactoryOptions","ConnectFunction","propsContext","reactReduxForwardedRef","ContextToUse","contextValue","didStoreComeFromProps","didStoreComeFromContext","getServerState","childPropsSelector","finalPropsSelectorFactory","overriddenContextValue","latestSubscriptionCallbackError","actualChildPropsSelector","subscribeForReact","reactListener","subscribeUpdates","additionalSubscribeListener","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","actualChildProps","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","renderedWrappedComponent","Connect","_forwarded","forwardConnectRef","forwarded","serverState","stabilityCheck","noopCheck","previousState","newBatch","initializeConnect","withSystem","WithSystem","getDisplayName","withRoot","reduxStore","WithRoot","withConnect","customMapStateToProps","handleProps","oldProps","withMappedContainer","memGetComponent","WithMappedContainer","nextProps","cleanProps","domNode","App","ReactDOM","failSilently","memoizeForGetComponent","memMakeMappedContainer","memoizeForWithMappedContainer","makeMappedContainer","downloadUrlPlugin","checkPossibleFailReasons","specUrl","enums","loadingStatus","spec_update_loading_status","withErrorBoundary","ErrorBoundary","targetName","WithErrorBoundary","isClassComponent","hasError","errorInfo","FallbackComponent","Fallback","componentList","fullOverride","mergedComponentList","wrapFactory","Original","getLayout","layoutName","Layout","AuthorizationPopup","Auths","AuthorizeBtn","showPopup","AuthorizeBtnContainer","authorizableDefinitions","AuthorizeOperationBtn","onAuthChange","submitAuth","logoutClick","auths","AuthItem","Oauth2","Button","authorizedAuth","nonOauthDefinitions","oauthDefinitions","onSubmit","ApiKeyAuth","BasicAuth","authEl","AuthError","Input","Row","Col","Markdown","JumpToPath","autoComplete","showValue","HighlightCode","ExamplesSelect","onSelect","currentExampleKey","showLabels","_onSelect","isSyntheticChange","_onDomSelect","selectedOptions","getCurrentExample","currentExamplePerProps","firstExamplesKey","firstExample","firstExampleKey","isValueModified","isModifiedValueAvailable","exampleName","stringifyUnlessList","ExamplesSelectValueRetainer","userHasEditedBody","currentNamespace","setRetainRequestBodyValueFlag","updateValue","valueFromExample","_getCurrentExampleValue","lastUserEditedValue","currentUserInputValue","lastDownstreamValue","isModifiedValueSelected","_getStateForCurrentNamespace","_setStateForCurrentNamespace","_setStateForNamespace","newStateForNamespace","_isCurrentUserInputSameAsExampleValue","_getValueForExample","exampleKey","currentKey","_onExamplesSelect","valueFromCurrentExample","examplesMatchingNewValue","authConfigs","currentServer","oauth2RedirectUrl","scopesArray","scopeSeparator","realm","usePkceWithAuthorizationCodeGrant","generateCodeVerifier","codeChallenge","createCodeChallenge","shaJs","sanitizedAuthorizationUrl","useBasicAuthenticationWithAccessCodeGrant","errCb","appName","oauth2Authorize","onScopeChange","dataset","newScopes","onInputChange","selectScopes","InitializedInput","oidcUrl","AUTH_FLOW_IMPLICIT","AUTH_FLOW_PASSWORD","AUTH_FLOW_ACCESS_CODE","AUTH_FLOW_APPLICATION","isPkceCodeGrant","flowToDisplay","htmlFor","tablet","desktop","Clear","Duration","LiveResponse","displayRequestDuration","showMutatedRequest","requestSnippetsEnabled","curlRequest","notDocumented","headersKeys","ResponseBody","returnObject","joinedHeaders","hasHeaders","Curl","OnlineValidatorBadge","validatorUrl","getDefinitionUrl","sanitizedValidatorUrl","ValidatorImage","alt","Image","onload","Operations","renderOperationTag","OperationContainer","isAbsoluteUrl","buildBaseUrl","addProtocol","safeBuildUrl","buildUrl","docExpansion","isDeepLinkingEnabled","Collapse","DeepLink","tagExternalDocsUrl","tagDescription","tagExternalDocsDescription","rawTagExternalDocsUrl","showTag","enabled","isOpened","_circle","preserveAspectRatio","backgroundImage","backgroundPosition","backgroundRepeat","cx","cy","stroke","calcMode","dur","keyTimes","repeatCount","toggleShown","onTryoutClick","onResetClick","onCancelClick","onExecute","oas3Actions","operationProps","allowTryItOut","tryItOutEnabled","executeInProgress","externalDocsUrl","getList","extensions","Parameters","Execute","Schemes","OperationExt","OperationSummary","showExtensions","onChangeKey","RollingLoadSVG","operationServers","pathServers","getSelectedServer","setSelectedServer","setServerVariableValue","getServerVariable","serverVariableValue","getEffectiveServerValue","currentScheme","tryItOutResponse","displayOperationId","supportedSubmitMethods","jumpToKey","resolvedSubtree","getResolvedSubtree","defaultRequestBodyValue","selectDefaultRequestBodyValue","setRequestBodyValue","unresolvedOp","resolvedSummary","OperationSummaryMethod","OperationSummaryPath","CopyToClipboardBtn","hasSecurity","securityIsOptional","allowAnonymous","textToCopy","applicableDefinitions","tabIndex","pathParts","OperationExtRow","xKey","xVal","xNormalizedValue","fileName","downloadable","canCopy","handleDownload","saveAs","onChangeProducesWrapper","onResponseContentTypeChange","controlsAcceptHeader","setResponseContentType","defaultCode","defaultStatusCode","ContentType","acceptControllingResponse","getAcceptControllingResponse","suitable2xxResponse","defaultResponse","suitableDefaultResponse","regionId","createHtmlReadyId","controlId","ariaControls","ariaLabel","contentTypes","role","isDefault","onContentTypeChange","activeExamplesKey","activeExamplesMember","getKnownSyntaxHighlighterLanguage","isValidJson","canJsonParse","_onContentTypeChange","getTargetExamplesKey","activeContentType","ResponseExtension","ModelExample","OperationLink","specPathWithPossibleSchema","activeMediaType","examplesForMediaType","oas3SchemaForContentType","mediaTypeExample","sampleSchema","shouldOverrideSchemaExample","sampleGenConfig","targetExamplesKey","getMediaTypeExample","targetExample","oldOASMediaTypeExample","getExampleComponent","sampleResponse","setActiveExamplesMember","contextName","omitValue","parsedContent","updateParsedContent","prevContent","reader","FileReader","readAsText","downloadName","bodyEl","disposition","responseFilename","extractFileNameFromContentDispositionHeader","msSaveOrOpenBlob","formatXml","controls","callbackVisible","parametersVisible","onChangeConsumesWrapper","toggleTab","tab","onChangeMediaType","hasUserEditedBody","shouldRetainRequestBodyValue","setRequestContentType","initRequestBodyValidateError","ParameterRow","TryItOutButton","Callbacks","isExecute","groupedParametersArr","rawParam","onChangeConsumes","requestBodyErrors","updateActiveExamplesKey","lastValue","usableValue","onChangeIncludeEmpty","setRequestBodyInclusion","ParameterIncludeEmptyDefaultProps","isIncludedOptions","ParameterIncludeEmpty","shouldDispatchInit","onCheckboxChange","isIncluded","setDefaultValue","onChangeWrapper","numberToString","valueForUpstream","_onExampleSelect","getParamKey","paramWithMeta","parameterMediaType","generatedSampleValue","isSwagger2","showCommonExtensions","JsonSchemaForm","ParamBody","bodyParam","consumesValue","ParameterExt","paramItems","paramEnum","paramDefaultValue","paramExample","itemType","isFormData","isFormDataSupported","commonExt","isDisplayParamEnum","defaultToFirstExample","handleValidateParameters","handleValidateRequestBody","missingBodyValue","missingRequiredKeys","clearRequestBodyValidateError","oas3RequiredRequestBodyContentType","oas3RequestBodyValue","oas3ValidateBeforeExecuteSuccess","oas3RequestContentType","setRequestBodyValidateError","validateShallowRequired","missingKey","handleValidationResultPass","handleValidationResultFail","handleValidationResult","isPass","paramsResult","requestBodyResult","Property","schemaExample","propVal","propClass","Errors","editorActions","jumpToLine","allErrorsToDisplay","isVisible","sortedJSErrors","toggleVisibility","animated","ThrownErrorItem","SpecErrorItem","errorLine","toTitleCase","locationMessage","xclass","Container","fullscreen","full","containerClass","DEVICES","hide","keepContents","mobile","large","classesAr","device","deviceClass","TextArea","Select","option","allowedValues","NoMargin","renderNotAnimated","Overview","setTagShown","_setTagShown","showTagId","showOp","toggleShow","showOpIdPrefix","showOpId","_onClick","otherProps","InfoBasePath","InfoUrl","termsOfServiceUrl","contactData","licenseData","externalDocsDescription","VersionStamp","OpenAPIVersion","oasVersion","InfoContainer","Footer","FilterContainer","onFilterChange","isLoading","isFailed","NOOP","isEditBox","updateValues","isJson","_onChange","handleOnChange","inputValue","toggleIsEditBox","defaultProp","curl","curlBlock","SchemesContainer","ModelCollapse","collapsedContent","expanded","onToggle","hideSelfOnExpand","modelName","toggleCollapsed","defaultModelRendering","activeTab","defaultModelExpandDepth","ModelWrapper","exampleTabId","examplePanelId","modelTabId","modelPanelId","inactive","expandDepth","Model","isInvalid","isMapLike","checkItem","createChecker","checklist","_React$Component","ImmutablePureComponent","updateOnProps","updateOnStates","decodeRefName","unescaped","ImPropTypes","isRef","getModelName","getRefSchema","model","ObjectModel","ArrayModel","PrimitiveModel","Models","getSchemaBasePath","getCollapsedContent","handleToggle","onLoadModels","onLoadModel","defaultModelsExpandDepth","specPathBase","showModels","schemaValue","rawSchemaValue","rawSchema","requiredProperties","infoProperties","JumpToPathSection","titleEl","isDeprecated","normalizedValue","Primitive","enumArray","EnumModel","showReset","VersionPragmaFilter","alsoShow","bypass","SvgAssets","xmlnsXlink","decodeEntity","UNESCAPE_MD_RE","unescapeMd","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","NAMED_ENTITY_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","decoded","replaceEntities","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","escapeHtml","nextToken","tight","blockquote_open","blockquote_close","getBreak","fence","fences","fenceName","langClass","langPrefix","fence_custom","heading_open","hLevel","heading_close","xhtmlOut","bullet_list_open","bullet_list_close","list_item_open","list_item_close","ordered_list_open","ordered_list_close","paragraph_open","paragraph_close","addBreak","link_open","linkTarget","link_close","image","table_open","table_close","thead_open","thead_close","tbody_open","tbody_close","tr_open","tr_close","th_open","align","th_close","td_open","td_close","strong_open","strong_close","em_open","em_close","del_open","del_close","ins_open","ins_close","mark_open","mark_close","sup","hardbreak","softbreak","breaks","htmlblock","htmltag","abbr_open","abbr_close","footnote_ref","subId","footnote_block_open","footnote_block_close","footnote_open","footnote_close","footnote_anchor","dl_open","dt_open","dd_open","dl_close","dt_close","dd_close","Renderer","Ruler","__rules__","__cache__","StateInline","parserInline","outTokens","posMax","pendingLevel","isInLabel","linkLevel","linkContent","labelUnmatchedScopes","parseLinkLabel","labelEnd","oldPos","oldFlag","skipToken","parseAbbr","abbreviations","normalizeLink","parseLinkDestination","validateLink","parseLinkTitle","normalizeReference","parseReference","renderInline","_rules","__find__","__compile__","chains","altName","at","beforeName","ruleName","afterName","enable","strict","disable","getRules","chainName","pushPending","cacheSet","cacheGet","PUNCT_CHARS","regEscape","RARE_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceScopedAbbr","QUOTE_TEST_RE","QUOTE_RE","PUNCT_RE","isLetter","replaceAt","inlineMode","abbr","inline","tok","footnote_block","lastParagraph","currentLabel","insideRef","refTokens","footnotes","abbr2","reg","regText","blockTokens","abbrRegExp","inlineTokens","blkIdx","typographer","smartquotes","thisLevel","lastSpace","nextSpace","canOpen","canClose","isSingle","OUTER","single","quotes","Core","ruler","StateBlock","indent_found","bMarks","eMarks","tShift","blkIndent","lineMax","parentType","ddIndent","skipBulletListMarker","skipOrderedListMarker","skipEmptyLines","skipSpaces","skipChars","skipCharsBack","getLines","keepLastLF","html_blocks","HTML_TAG_OPEN_RE","HTML_TAG_CLOSE_RE","skipMarker","_rules$1","endLine","nextLine","silent","mem","haveEndMarker","blockquote","lastLineEmpty","oldTShift","oldBMarks","oldIndent","oldParentType","terminatorRules","terminate","maxNesting","tokenize","cnt","oldTight","posAfterMarker","indentAfterMarker","markerValue","markerCharCode","contentStart","listTokIdx","prevEmptyEnd","listLines","itemLines","markTightParagraphs","footnote","oldBMark","heading","lheading","isLetter$1","lineText","cell","aligns","tableLines","tbodyLines","deflist","ddLine","dtLine","oldDDIndent","markTightParagraphs$1","paragraph","ParserBlock","hasEmptyLines","TABS_SCAN_RE","NEWLINES_RE","SPACES_RE","isTerminatorChar","lastTabPos","ESCAPED","isAlphaNum","scanDelims","can_open","can_close","delims","UNESCAPE_RE","UNESCAPE_RE$1","url_schemas","EMAIL_RE","AUTOLINK_RE","replace$1","attr_value","open_tag","HTML_TAG_RE","DIGITAL_RE","NAMED_RE","_rules$2","newline","pmax","backticks","matchStart","matchEnd","del","emphasis","startCount","oldCount","labelStart","isImage","footnote_inline","footnoteId","oldLength","footnoteSubId","autolink","linkMatch","emailMatch","fullUrl","isLetter$2","entity","ParserInline","cached_pos","StateCore","Remarkable","preset","linkify","presets","parseInline","throwUnhandledCaseError","theValue","HtmlTag","whitespaceRegex","innerHtml","setTagName","getTagName","setAttr","getAttrs","getAttr","setAttrs","setClass","addClass","newClass","classAttr","getClass","newClasses","removeClass","removeClasses","setInnerHTML","setInnerHtml","getInnerHTML","getInnerHtml","toAnchorString","attrsStr","buildAttrsStr","attrsArr","AnchorTagBuilder","newWindow","truncate","build","createAttrs","processAnchorText","getAnchorText","getAnchorHref","createCssClass","returnClasses","cssClassSuffixes","getCssClassSuffixes","anchorText","doTruncate","truncateLength","truncateLocation","truncateSmart","truncateLen","ellipsisChars","ellipsisLengthBeforeParsing","ellipsisLength","urlObj","buildSegment","remainingAvailableLength","remainingAvailableLengthHalf","startOffset","endOffset","availableLength","urlSub","parse_url","matchQuery","pathAndQuery","truncateMiddle","truncateEnd","ellipsis","Match","__jsduckDummyDocProp","matchedText","tagBuilder","getMatchedText","setOffset","getOffset","buildTag","__assign","SuppressedError","urlSuffixRegex","EmailMatch","getEmail","HashtagMatch","serviceName","hashtag","getServiceName","getHashtag","MentionMatch","mention","getMention","PhoneMatch","plusSign","getPhoneNumber","getNumber","UrlMatch","urlMatchType","protocolUrlMatch","protocolRelativeMatch","stripPrefix","www","stripTrailingSlash","decodePercentEncoding","schemePrefixRegex","wwwPrefixRegex","protocolRelativeRegex","protocolPrepended","getUrlMatchType","getUrl","stripProtocolRelativePrefix","stripSchemePrefix","stripWwwPrefix","removeTrailingSlash","removePercentEncoding","preProcessedEntityAnchorText","Matcher","letterRe","digitRe","nonDigitRe","whitespaceRe","quoteRe","controlCharsRe","alphaCharsStr","alphaCharsAndMarksStr","decimalNumbersStr","alphaNumericCharsStr","alphaNumericAndMarksCharsStr","alphaNumericAndMarksCharRe","ipStr","domainLabelStr","getDomainLabelStr","getDomainNameStr","domainNameCharRegex","tldRegex","localPartCharRegex","strictTldRegex","EmailMatcher","parseMatches","noCurrentEmailMatch","CurrentEmailMatch","mailtoTransitions","charIdx","currentEmailMatch","stateNonEmailAddress","stateMailTo","stateLocalPart","stateLocalPartDot","stateAtSign","stateDomainChar","stateDomainHyphen","stateDomainDot","captureMatchIfValidAndReset","beginEmailMatch","hasMailtoPrefix","resetToNonEmailMatchState","hasDomainDot","emailAddress","doesEmailHaveValidTld","emailAddressTld","emailAddressNormalized","UrlMatchValidator","urlMatch","isValidUriScheme","urlMatchDoesNotHaveProtocolOrDot","urlMatchDoesNotHaveAtLeastOneWordChar","isValidIpAddress","containsMultipleDots","uriSchemeMatch","newRegex","hasFullProtocolRegex","ipRegex","stringBeforeSlash","uriSchemeMatchArr","uriSchemeRegex","uriScheme","hasWordCharAfterProtocolRegex","matcherRegex","wordCharRegExp","UrlMatcher","_loop_1","matchStr","schemeUrlMatch","wwwUrlMatch","wwwProtocolRelativeMatch","tldProtocolRelativeMatch","this_1","matchHasUnbalancedClosingParen","matchHasInvalidCharAfterTld","foundCommonScheme","commonScheme","indexOfSchemeStart","startChar","endChar","numOpenBraces","hashtagTextCharRe","HashtagMatcher","hashCharIdx","stateNone","stateNonHashtagWordChar","stateHashtagHashChar","stateHashtagTextChar","captureMatchIfValid","hashtagServices","phoneMatcherRegex","PhoneMatcher","cleanNumber","contextClear","testMatch","twitterRegex","instagramRegex","soundcloudRegex","tiktokRegex","nonWordCharRegex","MentionMatcher","matcherRegexes","twitter","instagram","soundcloud","tiktok","parseHtml","onOpenTag","onCloseTag","onText","onComment","onDoctype","noCurrentTag","CurrentTag","currentDataIdx","currentTag","stateData","stateTagOpen","stateEndTagOpen","stateTagName","stateBeforeAttributeName","stateAttributeName","stateAfterAttributeName","stateBeforeAttributeValue","stateAttributeValueDoubleQuoted","stateAttributeValueSingleQuoted","stateAttributeValueUnquoted","stateAfterAttributeValueQuoted","stateSelfClosingStartTag","stateMarkupDeclarationOpen","stateCommentStart","stateCommentStartDash","stateComment","stateCommentEndDash","stateCommentEnd","stateCommentEndBang","stateDoctype","startNewTag","isClosing","isOpening","captureTagName","emitTagAndPreviousTextNode","resetToDataState","reconsumeCurrentCharacter","textBeforeTag","startIdx","emitText","Autolinker","urls","phone","replaceFn","sanitizeHtml","matchers","normalizeUrlsCfg","normalizeStripPrefixCfg","normalizeTruncateCfg","textOrHtml","schemeMatches","wwwMatches","tldMatches","skipTagNames","skipTagsStackCount","textSplit","splitAndCapture","splitRegex","lastIdx","currentOffset_1","splitText","textNodeMatches","parseText","compactMatches","removeUnwantedMatches","matchedTextLength","removeIdx","getMatchers","numMatchers","textMatches","numTextMatches","newHtml","createMatchReturnVal","replaceFnResult","getTagBuilder","Email","Hashtag","Mention","Phone","LINK_SCAN_RE","isLinkOpen","isLinkClose","createLinkifier","autolinker","parseTokens","ln","htmlLinkLevel","linkifier","useUnsafeMarkdown","sanitized","sanitizer","DomPurify","hasWarnedAboutDeprecation","BaseLayout","ServersContainer","isOAS31","isSpecEmpty","loadingMessage","lastErr","lastErrMsg","hasServers","hasSchemes","hasSecurityDefinitions","CoreComponentsPlugin","authorizationPopup","authorizeBtn","authorizeOperationBtn","authError","oauth2","apiKeyAuth","basicAuth","liveResponse","onlineValidatorBadge","highlightCode","responseBody","parameterRow","overview","footer","modelExample","FormComponentsPlugin","LayoutUtils","JsonSchemaDefaultProps","keyName","dispatchInitialValue","getComponentSilently","Comp","JsonSchema_string","files","onEnumChange","schemaIn","JsonSchema_array","valueOrEmptyList","onItemChange","itemVal","removeItem","addItem","arrayErrors","needsRemoveError","shouldRenderValue","schemaItemsEnum","schemaItemsType","schemaItemsFormat","schemaItemsSchema","ArrayItemsComponent","isArrayItemText","isArrayItemFile","itemErrors","JsonSchemaArrayItemFile","JsonSchemaArrayItemText","onFileChange","JsonSchema_boolean","booleanValue","stringifyObjectErrors","stringError","currentError","JsonSchema_object","invalid","JSONSchemaComponentsPlugin","JSONSchemaComponents","BasePreset","ConfigsPlugin","UtilPlugin","LogsPlugin","ViewPlugin","ErrPlugin","LayoutPlugin","JSONSchema5SamplesPlugin","SwaggerClientPlugin","AuthPlugin","DownloadUrlPlugin","DeepLinkingPlugin","FilterPlugin","OnCompletePlugin","RequestSnippetsPlugin","SafeRenderPlugin","onlyOAS3","OAS3NullSelector","resolvedSchemes","defName","flowKey","flowVal","translatedDef","oidcData","grant","translatedScopes","cur","OAS3ComponentWrapFactory","swaggerVersion","isSwagger2Helper","isOAS30","isOAS30Helper","selectedValue","callbacksOperations","allOperations","callbackName","callbackOperations","callbackOps","pathItem","expression","pathItemOperations","operationDTO","operationDTOs","callbackNames","getDefaultRequestBodyValue","mediaTypeValue","hasExamplesKey","exampleSchema","handleFile","setIsIncludedOptions","RequestBodyEditor","requestBodyDescription","schemaForMediaType","rawExamplesOfMediaType","sampleForMediaType","isObjectContent","isBinaryFormat","isBase64Format","bodyProperties","currentErrors","included","useInitialValFromSchemaSamples","useInitialValFromEnum","useInitialValue","sampleRequestBody","targetOp","padString","setServer","currentServerDefinition","prevServerDefinition","prevServerVariableDefaultValue","currentServerVariableDefs","currentServerVariableDefaultValue","onServerChange","onServerVariableValueChange","variableName","newVariableValue","shouldShowVariableUI","applyDefaultValue","onDomChange","HttpAuth","serversToDisplay","displaying","operationLink","trimmed","ModelComponent","OAS30ComponentWrapFactory","UPDATE_SELECTED_SERVER","UPDATE_REQUEST_BODY_VALUE","UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG","UPDATE_REQUEST_BODY_INCLUSION","UPDATE_ACTIVE_EXAMPLES_MEMBER","UPDATE_REQUEST_CONTENT_TYPE","UPDATE_RESPONSE_CONTENT_TYPE","UPDATE_SERVER_VARIABLE_VALUE","SET_REQUEST_BODY_VALIDATE_ERROR","CLEAR_REQUEST_BODY_VALIDATE_ERROR","CLEAR_REQUEST_BODY_VALUE","clearRequestBodyValue","userEditedRequestBody","kv","currentMediaTypeDefaultBodyValue","locationData","varValues","serverValue","validateRequestBodyIsRequired","validateRequestBodyValueExists","requiredKeys","requiredKey","currentVal","valueKeyVal","missingKeyValues","bodyValue","currentMissingKey","bodyValues","specWrapSelectors","authWrapSelectors","oas3","selectWebhooksOperations","pathItemNames","pathItemName","selectLicenseNameField","selectLicenseUrl","selectContactNameField","selectContactUrl","selectContactEmailField","selectInfoSummaryField","selectInfoDescriptionField","selectInfoTitleField","selectInfoTermsOfServiceUrl","selectExternalDocsUrl","externalDocsDesc","selectExternalDocsDescriptionField","selectJsonSchemaDialectField","jsonSchemaDialectDefault","selectJsonSchemaDialectDefault","JSONSchema202012","handleExpand","onExpand","selectSchemas","hasSchemas","schemasPath","isOpenDefault","isOpen","isOpenAndExpanded","isResolved","handleModelsExpand","handleModelsRef","handleJSONSchema202012Ref","schemaName","handleJSONSchema202012Expand","schemaPath","mutualTLSDefinitions","createOnlyOAS31Selector","createOnlyOAS31SelectorWrapper","createSystemSelector","createOnlyOAS31ComponentWrapper","originalComponent","OAS31License","OAS31Contact","OAS31Info","makeIsExpandable","hasKeyword","jsonSchema202012","getProperties","filteredProperties","Keyword$schema","Keyword$vocabulary","Keyword$id","Keyword$anchor","Keyword$dynamicAnchor","Keyword$ref","Keyword$dynamicRef","Keyword$defs","Keyword$comment","KeywordAllOf","KeywordAnyOf","KeywordOneOf","KeywordNot","KeywordIf","KeywordThen","KeywordElse","KeywordDependentSchemas","KeywordPrefixItems","KeywordItems","KeywordContains","KeywordProperties","KeywordPatternProperties","KeywordAdditionalProperties","KeywordPropertyNames","KeywordUnevaluatedItems","KeywordUnevaluatedProperties","KeywordType","KeywordEnum","KeywordConst","KeywordConstraint","KeywordDependentRequired","KeywordContentSchema","KeywordTitle","KeywordDescription","KeywordDefault","KeywordDeprecated","KeywordReadOnly","KeywordWriteOnly","Accordion","ExpandDeepButton","ChevronRightIcon","ModelWithJSONSchemaContext","withSchemaContext","default$schema","defaultExpandedLevels","isExpandable","ModelsWrapper","ModelsWithJSONSchemaContext","VersionPragmaFilterWrapper","OAS31VersionPragmaFilter","MutualTLSAuth","AuthsWrapper","OAS31Auths","isOAS31Fn","selectLicenseUrlField","selectLicenseIdentifierField","selectContactUrlField","selectInfoTermsOfServiceField","selectExternalDocsUrlField","rawSchemas","resolvedSchemas","resolvedSchema","oas31Selectors","useFn","useIsExpandedDeeply","useComponent","isExpandedDeeply","setExpanded","expandedDeeply","setExpandedDeeply","JSONSchemaDeepExpansionContext","handleExpansion","handleExpansionDeep","expandedDeepNew","MarkDown","DescriptionKeyword","DefaultWrapper","KeywordDiscriminator","KeywordXml","KeywordExample","KeywordExternalDocs","getDependentRequired","useConfig","propertySchema","PropertiesKeyword","wrappedFns","wrapOAS31Fn","systemFn","newImpl","oriImpl","createSystemSelectorFn","createOnlyOAS31SelectorFn","OAS31Model","OAS31Models","JSONSchema202012KeywordExample","JSONSchema202012KeywordXml","JSONSchema202012KeywordDiscriminator","JSONSchema202012KeywordExternalDocs","InfoWrapper","LicenseWrapper","ContactWrapper","AuthItemWrapper","JSONSchema202012KeywordDescription","JSONSchema202012KeywordDescriptionWrapper","JSONSchema202012KeywordDefault","JSONSchema202012KeywordDefaultWrapper","JSONSchema202012KeywordProperties","JSONSchema202012KeywordPropertiesWrapper","definitionsToAuthorizeWrapper","selectIsOAS31","selectLicense","selectContact","selectWebhooks","isOAS3SelectorWrapper","selectLicenseUrlWrapper","oas31","selectOAS31LicenseUrl","objectSchema","booleanSchema","JSONSchemaContext","JSONSchemaLevelContext","JSONSchemaCyclesContext","fnName","useLevel","useRenderedSchemas","renderedSchemas","useIsExpanded","nextLevel","isEmbedded","useIsEmbedded","isCircular","useIsCircular","constraints","stringifyConstraints","expandedNew","constraint","getTitle","circularSuffix","strigifiedElement","Constraint","Title","ChevronRight","processedSchemas","isBooleanJSONSchema","getArrayType","prefixItemsTypes","itemsType","handleCombiningKeywords","subSchema","combinedStrings","inferType","stringifyConstraintRange","hasMin","hasMax","stringifyConstraintMultipleOf","factor","numberRange","stringifyConstraintNumberRange","hasMinimum","hasMaximum","hasExclusiveMinimum","hasExclusiveMaximum","isMinExclusive","isMaxExclusive","stringRange","arrayRange","hasUniqueItems","containsRange","objectRange","withJSONSchemaContext","overrides","HOC","contexts","JSONSchema202012Plugin","JSONSchema202012Keyword$schema","JSONSchema202012Keyword$vocabulary","JSONSchema202012Keyword$id","JSONSchema202012Keyword$anchor","JSONSchema202012Keyword$dynamicAnchor","JSONSchema202012Keyword$ref","JSONSchema202012Keyword$dynamicRef","JSONSchema202012Keyword$defs","JSONSchema202012Keyword$comment","JSONSchema202012KeywordAllOf","JSONSchema202012KeywordAnyOf","JSONSchema202012KeywordOneOf","JSONSchema202012KeywordNot","JSONSchema202012KeywordIf","JSONSchema202012KeywordThen","JSONSchema202012KeywordElse","JSONSchema202012KeywordDependentSchemas","JSONSchema202012KeywordPrefixItems","JSONSchema202012KeywordItems","JSONSchema202012KeywordContains","JSONSchema202012KeywordPatternProperties","JSONSchema202012KeywordAdditionalProperties","JSONSchema202012KeywordPropertyNames","JSONSchema202012KeywordUnevaluatedItems","JSONSchema202012KeywordUnevaluatedProperties","JSONSchema202012KeywordType","JSONSchema202012KeywordEnum","JSONSchema202012KeywordConst","JSONSchema202012KeywordConstraint","JSONSchema202012KeywordDependentRequired","JSONSchema202012KeywordContentSchema","JSONSchema202012KeywordTitle","JSONSchema202012KeywordDeprecated","JSONSchema202012KeywordReadOnly","JSONSchema202012KeywordWriteOnly","JSONSchema202012Accordion","JSONSchema202012ExpandDeepButton","JSONSchema202012ChevronRightIcon","withJSONSchema202012Context","JSONSchema202012DeepExpansionContext","arrayType","constrainedArray","containsItem","applyArrayConstraints","objectType","isJSONSchemaObject","isJSONSchema","emailGenerator","idnEmailGenerator","hostnameGenerator","idnHostnameGenerator","ipv4Generator","ipv6Generator","uriGenerator","uriReferenceGenerator","iriGenerator","iriReferenceGenerator","uuidGenerator","uriTemplateGenerator","jsonPointerGenerator","relativeJsonPointerGenerator","dateTimeGenerator","dateGenerator","timeGenerator","durationGenerator","passwordGenerator","regexGenerator","Registry","registry","formatAPI","quotedPrintable","utf8","utf8Value","base32Alphabet","paddingCount","base32Str","bufferLength","EncoderRegistry","encode7bit","encode8bit","encodeBinary","encodeQuotedPrintable","base16","base32","encoderAPI","encodingName","getDefaults","text/plain","text/css","text/csv","text/html","text/calendar","text/javascript","text/xml","text/*","image/*","audio/*","video/*","application/json","application/ld+json","application/x-httpd-php","application/rtf","raw","application/x-sh","application/xhtml+xml","application/*","MediaTypeRegistry","textMediaTypesGenerators","imageMediaTypesGenerators","audioMediaTypesGenerators","videoMediaTypesGenerators","applicationMediaTypesGenerators","mediaTypeAPI","mediaTypeNoParams","topLevelMediaType","generatedString","generateFormat","formatGenerator","mediaTypeGenerator","constrainedString","applyStringConstraints","floatGenerator","doubleGenerator","generatedNumber","epsilon","EPSILON","minValue","maxValue","constrainedNumber","applyNumberConstraints","int32Generator","int64Generator","stringType","numberType","integerType","boolean","booleanType","nullType","ALL_TYPES","hasExample","extractExample","inferringKeywords","fallbackType","inferTypeFromValue","foldType","pickedType","randomPick","inferringTypes","inferringType","inferringTypeKeywords","inferringKeyword","constType","combineTypes","combinedTypes","exampleType","typeCast","fromJSONBooleanSchema","merged","mergedType","ensureArray","allPropertyNames","propSchema","propSchemaType","anyOfSchema","oneOfSchema","contentSample","sampleEncoderAPI","sampleFormatAPI","sampleMediaTypeAPI","PresetApis","OpenAPI30Plugin","JSONSchema202012SamplesPlugin","OpenAPI31Plugin","GIT_DIRTY","GIT_COMMIT","PACKAGE_VERSION","BUILD_TIME","buildInfo","SwaggerUI","swaggerUi","gitRevision","gitDirty","buildTimestamp","dom_id","defaultExpanded","queryConfigEnabled","ApisPreset","syntaxHighlight","activated","theme","queryConfig","parseSearch","constructorConfig","storeConfigs","System","inlinePlugin","downloadSpec","fetchedConfig","localConfig","mergedConfig","configsActions","querySelector","configUrl","loadRemoteConfig","apis","Auth","Configs","DeepLining","Err","Filter","Icons","JSONSchema5Samples","JSONSchema202012Samples","Logs","OpenAPI30","OpenAPI31","OnComplete","Spec","SwaggerClient","Util","View","DownloadUrl","SafeRender"],"sourceRoot":""} \ No newline at end of file diff --git a/app/static/swagger/swagger-ui-es-bundle-core.js b/app/static/swagger/swagger-ui-es-bundle-core.js new file mode 100644 index 0000000..c99791f --- /dev/null +++ b/app/static/swagger/swagger-ui-es-bundle-core.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-es-bundle-core.js.LICENSE.txt */ +import*as e from"base64-js";import*as t from"ieee754";import*as r from"repeat-string";import*as n from"react";import*as a from"redux";import*as o from"immutable";import*as s from"redux-immutable";import*as l from"serialize-error";import*as i from"lodash/merge";import*as c from"@braintree/sanitize-url";import*as u from"lodash/camelCase";import*as d from"lodash/upperFirst";import*as p from"lodash/memoize";import*as m from"lodash/find";import*as f from"lodash/some";import*as h from"lodash/eq";import*as g from"lodash/isFunction";import*as y from"css.escape";import*as v from"url-parse";import*as S from"reselect";import*as _ from"prop-types";import*as b from"lodash/omit";import*as w from"js-yaml";import*as C from"zenscroll";import*as x from"react-immutable-proptypes";import*as O from"lodash/reduce";import*as k from"lodash/get";import*as N from"@babel/runtime-corejs3/helpers/extends";import*as A from"react-copy-to-clipboard";import*as I from"react-syntax-highlighter/dist/esm/light";import*as R from"react-syntax-highlighter/dist/esm/languages/hljs/javascript";import*as T from"react-syntax-highlighter/dist/esm/languages/hljs/json";import*as B from"react-syntax-highlighter/dist/esm/languages/hljs/bash";import*as j from"react-syntax-highlighter/dist/esm/languages/hljs/yaml";import*as P from"react-syntax-highlighter/dist/esm/languages/hljs/http";import*as M from"react-syntax-highlighter/dist/esm/languages/hljs/powershell";import*as q from"react-syntax-highlighter/dist/esm/styles/hljs/agate";import*as L from"react-syntax-highlighter/dist/esm/styles/hljs/arta";import*as D from"react-syntax-highlighter/dist/esm/styles/hljs/monokai";import*as U from"react-syntax-highlighter/dist/esm/styles/hljs/nord";import*as $ from"react-syntax-highlighter/dist/esm/styles/hljs/obsidian";import*as J from"react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night";import*as V from"react-syntax-highlighter/dist/esm/styles/hljs/idea";import*as K from"randexp";import*as z from"lodash/isEmpty";import*as F from"lodash/isString";import*as W from"lodash/debounce";import*as H from"lodash/set";import*as G from"lodash/fp/assocPath";import*as X from"lodash/constant";import*as Y from"swagger-client/es/resolver/strategies/generic";import*as Q from"swagger-client/es/resolver/strategies/openapi-2";import*as Z from"swagger-client/es/resolver/strategies/openapi-3-0";import*as ee from"swagger-client/es/resolver/strategies/openapi-3-1-apidom";import*as te from"swagger-client/es/resolver";import*as re from"swagger-client/es/execute";import*as ne from"swagger-client/es/http";import*as ae from"swagger-client/es/subtree-resolver";import*as oe from"swagger-client/es/helpers";import*as se from"react-dom";import*as le from"react-redux";import*as ie from"lodash/identity";import*as ce from"lodash/zipObject";import*as ue from"lodash/toString";import*as de from"classnames";import*as pe from"js-file-download";import*as me from"lodash/toLower";import*as fe from"react-immutable-pure-component";import*as he from"remarkable";import*as ge from"remarkable/linkify";import*as ye from"dompurify";import*as Ee from"react-debounce-input";import*as ve from"lodash/isPlainObject";var Se={764:function(e,t,r){const n=r(780),a=r(294),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=Buffer,t.SlowBuffer=function SlowBuffer(e){+e!=e&&(e=0);return Buffer.alloc(+e)},t.INSPECT_MAX_BYTES=50;const s=2147483647;function createBuffer(e){if(e>s)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,Buffer.prototype),t}function Buffer(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return allocUnsafe(e)}return from(e,t,r)}function from(e,t,r){if("string"==typeof e)return function fromString(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!Buffer.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|byteLength(e,t);let n=createBuffer(r);const a=n.write(e,t);a!==r&&(n=n.slice(0,a));return n}(e,t);if(ArrayBuffer.isView(e))return function fromArrayView(e){if(isInstance(e,Uint8Array)){const t=new Uint8Array(e);return fromArrayBuffer(t.buffer,t.byteOffset,t.byteLength)}return fromArrayLike(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(isInstance(e,ArrayBuffer)||e&&isInstance(e.buffer,ArrayBuffer))return fromArrayBuffer(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(isInstance(e,SharedArrayBuffer)||e&&isInstance(e.buffer,SharedArrayBuffer)))return fromArrayBuffer(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return Buffer.from(n,t,r);const a=function fromObject(e){if(Buffer.isBuffer(e)){const t=0|checked(e.length),r=createBuffer(t);return 0===r.length||e.copy(r,0,0,t),r}if(void 0!==e.length)return"number"!=typeof e.length||numberIsNaN(e.length)?createBuffer(0):fromArrayLike(e);if("Buffer"===e.type&&Array.isArray(e.data))return fromArrayLike(e.data)}(e);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return Buffer.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function assertSize(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function allocUnsafe(e){return assertSize(e),createBuffer(e<0?0:0|checked(e))}function fromArrayLike(e){const t=e.length<0?0:0|checked(e.length),r=createBuffer(t);for(let n=0;n=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return 0|e}function byteLength(e,t){if(Buffer.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||isInstance(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let a=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return utf8ToBytes(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(e).length;default:if(a)return n?-1:utf8ToBytes(e).length;t=(""+t).toLowerCase(),a=!0}}function slowToString(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return hexSlice(this,t,r);case"utf8":case"utf-8":return utf8Slice(this,t,r);case"ascii":return asciiSlice(this,t,r);case"latin1":case"binary":return latin1Slice(this,t,r);case"base64":return base64Slice(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function swap(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function bidirectionalIndexOf(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),numberIsNaN(r=+r)&&(r=a?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=Buffer.from(t,n)),Buffer.isBuffer(t))return 0===t.length?-1:arrayIndexOf(e,t,r,n,a);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):arrayIndexOf(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(e,t,r,n,a){let o,s=1,l=e.length,i=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;s=2,l/=2,i/=2,r/=2}function read(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(a){let n=-1;for(o=r;ol&&(r=l-i),o=r;o>=0;o--){let r=!0;for(let n=0;na&&(n=a):n=a;const o=t.length;let s;for(n>o/2&&(n=o/2),s=0;s>8,a=r%256,o.push(a),o.push(n);return o}(t,e.length-r),e,r,n)}function base64Slice(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function utf8Slice(e,t,r){r=Math.min(e.length,r);const n=[];let a=t;for(;a239?4:t>223?3:t>191?2:1;if(a+s<=r){let r,n,l,i;switch(s){case 1:t<128&&(o=t);break;case 2:r=e[a+1],128==(192&r)&&(i=(31&t)<<6|63&r,i>127&&(o=i));break;case 3:r=e[a+1],n=e[a+2],128==(192&r)&&128==(192&n)&&(i=(15&t)<<12|(63&r)<<6|63&n,i>2047&&(i<55296||i>57343)&&(o=i));break;case 4:r=e[a+1],n=e[a+2],l=e[a+3],128==(192&r)&&128==(192&n)&&128==(192&l)&&(i=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&l,i>65535&&i<1114112&&(o=i))}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),a+=s}return function decodeCodePointsArray(e){const t=e.length;if(t<=l)return String.fromCharCode.apply(String,e);let r="",n=0;for(;nn.length?(Buffer.isBuffer(t)||(t=Buffer.from(t)),t.copy(n,a)):Uint8Array.prototype.set.call(n,t,a);else{if(!Buffer.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,a)}a+=t.length}return n},Buffer.byteLength=byteLength,Buffer.prototype._isBuffer=!0,Buffer.prototype.swap16=function swap16(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tr&&(e+=" ... "),""},o&&(Buffer.prototype[o]=Buffer.prototype.inspect),Buffer.prototype.compare=function compare(e,t,r,n,a){if(isInstance(e,Uint8Array)&&(e=Buffer.from(e,e.offset,e.byteLength)),!Buffer.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(n>=a&&t>=r)return 0;if(n>=a)return-1;if(t>=r)return 1;if(this===e)return 0;let o=(a>>>=0)-(n>>>=0),s=(r>>>=0)-(t>>>=0);const l=Math.min(o,s),i=this.slice(n,a),c=e.slice(t,r);for(let e=0;e>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const a=this.length-t;if((void 0===r||r>a)&&(r=a),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return hexWrite(this,e,t,r);case"utf8":case"utf-8":return utf8Write(this,e,t,r);case"ascii":case"latin1":case"binary":return asciiWrite(this,e,t,r);case"base64":return base64Write(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const l=4096;function asciiSlice(e,t,r){let n="";r=Math.min(e.length,r);for(let a=t;an)&&(r=n);let a="";for(let n=t;nr)throw new RangeError("Trying to access beyond buffer length")}function checkInt(e,t,r,n,a,o){if(!Buffer.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>a||te.length)throw new RangeError("Index out of range")}function wrtBigUInt64LE(e,t,r,n,a){checkIntBI(t,n,a,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=s,s>>=8,e[r++]=s,s>>=8,e[r++]=s,s>>=8,e[r++]=s,r}function wrtBigUInt64BE(e,t,r,n,a){checkIntBI(t,n,a,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o>>=8,e[r+6]=o,o>>=8,e[r+5]=o,o>>=8,e[r+4]=o;let s=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=s,s>>=8,e[r+2]=s,s>>=8,e[r+1]=s,s>>=8,e[r]=s,r+8}function checkIEEE754(e,t,r,n,a,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function writeFloat(e,t,r,n,o){return t=+t,r>>>=0,o||checkIEEE754(e,0,r,4),a.write(e,t,r,n,23,4),r+4}function writeDouble(e,t,r,n,o){return t=+t,r>>>=0,o||checkIEEE754(e,0,r,8),a.write(e,t,r,n,52,8),r+8}Buffer.prototype.slice=function slice(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e],a=1,o=0;for(;++o>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e+--t],a=1;for(;t>0&&(a*=256);)n+=this[e+--t]*a;return n},Buffer.prototype.readUint8=Buffer.prototype.readUInt8=function readUInt8(e,t){return e>>>=0,t||checkOffset(e,1,this.length),this[e]},Buffer.prototype.readUint16LE=Buffer.prototype.readUInt16LE=function readUInt16LE(e,t){return e>>>=0,t||checkOffset(e,2,this.length),this[e]|this[e+1]<<8},Buffer.prototype.readUint16BE=Buffer.prototype.readUInt16BE=function readUInt16BE(e,t){return e>>>=0,t||checkOffset(e,2,this.length),this[e]<<8|this[e+1]},Buffer.prototype.readUint32LE=Buffer.prototype.readUInt32LE=function readUInt32LE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},Buffer.prototype.readUint32BE=Buffer.prototype.readUInt32BE=function readUInt32BE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},Buffer.prototype.readBigUInt64LE=defineBigIntMethod((function readBigUInt64LE(e){validateNumber(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,a=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(a)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],a=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=this[e],a=1,o=0;for(;++o=a&&(n-=Math.pow(2,8*t)),n},Buffer.prototype.readIntBE=function readIntBE(e,t,r){e>>>=0,t>>>=0,r||checkOffset(e,t,this.length);let n=t,a=1,o=this[e+--n];for(;n>0&&(a*=256);)o+=this[e+--n]*a;return a*=128,o>=a&&(o-=Math.pow(2,8*t)),o},Buffer.prototype.readInt8=function readInt8(e,t){return e>>>=0,t||checkOffset(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},Buffer.prototype.readInt16LE=function readInt16LE(e,t){e>>>=0,t||checkOffset(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function readInt16BE(e,t){e>>>=0,t||checkOffset(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function readInt32LE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},Buffer.prototype.readBigInt64LE=defineBigIntMethod((function readBigInt64LE(e){validateNumber(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||boundsError(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<>>=0,t||checkOffset(e,4,this.length),a.read(this,e,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(e,t){return e>>>=0,t||checkOffset(e,4,this.length),a.read(this,e,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(e,t){return e>>>=0,t||checkOffset(e,8,this.length),a.read(this,e,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(e,t){return e>>>=0,t||checkOffset(e,8,this.length),a.read(this,e,!1,52,8)},Buffer.prototype.writeUintLE=Buffer.prototype.writeUIntLE=function writeUIntLE(e,t,r,n){if(e=+e,t>>>=0,r>>>=0,!n){checkInt(this,e,t,r,Math.pow(2,8*r)-1,0)}let a=1,o=0;for(this[t]=255&e;++o>>=0,r>>>=0,!n){checkInt(this,e,t,r,Math.pow(2,8*r)-1,0)}let a=r-1,o=1;for(this[t+a]=255&e;--a>=0&&(o*=256);)this[t+a]=e/o&255;return t+r},Buffer.prototype.writeUint8=Buffer.prototype.writeUInt8=function writeUInt8(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,1,255,0),this[t]=255&e,t+1},Buffer.prototype.writeUint16LE=Buffer.prototype.writeUInt16LE=function writeUInt16LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},Buffer.prototype.writeUint16BE=Buffer.prototype.writeUInt16BE=function writeUInt16BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},Buffer.prototype.writeUint32LE=Buffer.prototype.writeUInt32LE=function writeUInt32LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},Buffer.prototype.writeUint32BE=Buffer.prototype.writeUInt32BE=function writeUInt32BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},Buffer.prototype.writeBigUInt64LE=defineBigIntMethod((function writeBigUInt64LE(e,t=0){return wrtBigUInt64LE(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeBigUInt64BE=defineBigIntMethod((function writeBigUInt64BE(e,t=0){return wrtBigUInt64BE(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),Buffer.prototype.writeIntLE=function writeIntLE(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);checkInt(this,e,t,r,n-1,-n)}let a=0,o=1,s=0;for(this[t]=255&e;++a>0)-s&255;return t+r},Buffer.prototype.writeIntBE=function writeIntBE(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);checkInt(this,e,t,r,n-1,-n)}let a=r-1,o=1,s=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===s&&0!==this[t+a+1]&&(s=1),this[t+a]=(e/o>>0)-s&255;return t+r},Buffer.prototype.writeInt8=function writeInt8(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},Buffer.prototype.writeInt16LE=function writeInt16LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},Buffer.prototype.writeInt16BE=function writeInt16BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},Buffer.prototype.writeInt32LE=function writeInt32LE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},Buffer.prototype.writeInt32BE=function writeInt32BE(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},Buffer.prototype.writeBigInt64LE=defineBigIntMethod((function writeBigInt64LE(e,t=0){return wrtBigUInt64LE(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeBigInt64BE=defineBigIntMethod((function writeBigInt64BE(e,t=0){return wrtBigUInt64BE(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),Buffer.prototype.writeFloatLE=function writeFloatLE(e,t,r){return writeFloat(this,e,t,!0,r)},Buffer.prototype.writeFloatBE=function writeFloatBE(e,t,r){return writeFloat(this,e,t,!1,r)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(e,t,r){return writeDouble(this,e,t,!0,r)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(e,t,r){return writeDouble(this,e,t,!1,r)},Buffer.prototype.copy=function copy(e,t,r,n){if(!Buffer.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(a=t;a=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function checkIntBI(e,t,r,n,a,o){if(e>r||e3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new i.ERR_OUT_OF_RANGE("value",a,e)}!function checkBounds(e,t,r){validateNumber(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||boundsError(t,e.length-(r+1))}(n,a,o)}function validateNumber(e,t){if("number"!=typeof e)throw new i.ERR_INVALID_ARG_TYPE(t,"number",e)}function boundsError(e,t,r){if(Math.floor(e)!==e)throw validateNumber(e,r),new i.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new i.ERR_BUFFER_OUT_OF_BOUNDS;throw new i.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}E("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),E("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),E("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,a=r;return Number.isInteger(r)&&Math.abs(r)>2**32?a=addNumericalSeparator(String(r)):"bigint"==typeof r&&(a=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(a=addNumericalSeparator(a)),a+="n"),n+=` It must be ${t}. Received ${a}`,n}),RangeError);const c=/[^+/0-9A-Za-z-_]/g;function utf8ToBytes(e,t){let r;t=t||1/0;const n=e.length;let a=null;const o=[];for(let s=0;s55295&&r<57344){if(!a){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}a=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),a=r;continue}r=65536+(a-55296<<10|r-56320)}else a&&(t-=3)>-1&&o.push(239,191,189);if(a=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function base64ToBytes(e){return n.toByteArray(function base64clean(e){if((e=(e=e.split("=")[0]).trim().replace(c,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function blitBuffer(e,t,r,n){let a;for(a=0;a=t.length||a>=e.length);++a)t[a+r]=e[a];return a}function isInstance(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function numberIsNaN(e){return e!=e}const u=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let a=0;a<16;++a)t[n+a]=e[r]+e[a]}return t}();function defineBigIntMethod(e){return"undefined"==typeof BigInt?BufferBigIntNotDefined:e}function BufferBigIntNotDefined(){throw new Error("BigInt not supported")}},698:function(e,t,r){var n=r(764).Buffer;function isSpecificValue(e){return e instanceof n||e instanceof Date||e instanceof RegExp}function cloneSpecificValue(e){if(e instanceof n){var t=n.alloc?n.alloc(e.length):new n(e.length);return e.copy(t),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function deepCloneArray(e){var t=[];return e.forEach((function(e,r){"object"==typeof e&&null!==e?Array.isArray(e)?t[r]=deepCloneArray(e):isSpecificValue(e)?t[r]=cloneSpecificValue(e):t[r]=a({},e):t[r]=e})),t}function safeGetProperty(e,t){return"__proto__"===t?void 0:e[t]}var a=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,r=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(n){"object"!=typeof n||null===n||Array.isArray(n)||Object.keys(n).forEach((function(o){return t=safeGetProperty(r,o),(e=safeGetProperty(n,o))===r?void 0:"object"!=typeof e||null===e?void(r[o]=e):Array.isArray(e)?void(r[o]=deepCloneArray(e)):isSpecificValue(e)?void(r[o]=cloneSpecificValue(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(r[o]=a({},e)):void(r[o]=a(t,e))}))})),r}},187:function(e){var t,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function ReflectApply(e,t,r){return Function.prototype.apply.call(e,t,r)};t=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function ReflectOwnKeys(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function ReflectOwnKeys(e){return Object.getOwnPropertyNames(e)};var a=Number.isNaN||function NumberIsNaN(e){return e!=e};function EventEmitter(){EventEmitter.init.call(this)}e.exports=EventEmitter,e.exports.once=function once(e,t){return new Promise((function(r,n){function errorListener(r){e.removeListener(t,resolver),n(r)}function resolver(){"function"==typeof e.removeListener&&e.removeListener("error",errorListener),r([].slice.call(arguments))}eventTargetAgnosticAddListener(e,t,resolver,{once:!0}),"error"!==t&&function addErrorHandlerIfEventEmitter(e,t,r){"function"==typeof e.on&&eventTargetAgnosticAddListener(e,"error",t,r)}(e,errorListener,{once:!0})}))},EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._eventsCount=0,EventEmitter.prototype._maxListeners=void 0;var o=10;function checkListener(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function _getMaxListeners(e){return void 0===e._maxListeners?EventEmitter.defaultMaxListeners:e._maxListeners}function _addListener(e,t,r,n){var a,o,s;if(checkListener(r),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),o=e._events),s=o[t]),void 0===s)s=o[t]=r,++e._eventsCount;else if("function"==typeof s?s=o[t]=n?[r,s]:[s,r]:n?s.unshift(r):s.push(r),(a=_getMaxListeners(e))>0&&s.length>a&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,function ProcessEmitWarning(e){console&&console.warn&&console.warn(e)}(l)}return e}function onceWrapper(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function _onceWrap(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},a=onceWrapper.bind(n);return a.listener=r,n.wrapFn=a,a}function _listeners(e,t,r){var n=e._events;if(void 0===n)return[];var a=n[t];return void 0===a?[]:"function"==typeof a?r?[a.listener||a]:[a]:r?function unwrapListeners(e){for(var t=new Array(e.length),r=0;r0&&(s=t[0]),s instanceof Error)throw s;var l=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw l.context=s,l}var i=o[e];if(void 0===i)return!1;if("function"==typeof i)n(i,this,t);else{var c=i.length,u=arrayClone(i,c);for(r=0;r=0;o--)if(r[o]===t||r[o].listener===t){s=r[o].listener,a=o;break}if(a<0)return this;0===a?r.shift():function spliceOne(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},EventEmitter.prototype.listeners=function listeners(e){return _listeners(this,e,!0)},EventEmitter.prototype.rawListeners=function rawListeners(e){return _listeners(this,e,!1)},EventEmitter.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):listenerCount.call(e,t)},EventEmitter.prototype.listenerCount=listenerCount,EventEmitter.prototype.eventNames=function eventNames(){return this._eventsCount>0?t(this._events):[]}},157:function(e){function source(e){return e?"string"==typeof e?e:e.source:null}function lookahead(e){return concat("(?=",e,")")}function concat(...e){return e.map((e=>source(e))).join("")}function either(...e){return"("+e.map((e=>source(e))).join("|")+")"}e.exports=function xml(e){const t=concat(/[A-Z_]/,function optional(e){return concat("(",e,")?")}(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),r={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},n={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},a=e.inherit(n,{begin:/\(/,end:/\)/}),o=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),s=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),l={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[n,s,o,a,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[n,a,s,o]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},r,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{className:"tag",begin:concat(/<\//,lookahead(concat(t,/>/))),contains:[{className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},717:function(e){"function"==typeof Object.create?e.exports=function inherits(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function inherits(e,t){if(t){e.super_=t;var TempCtor=function(){};TempCtor.prototype=t.prototype,e.prototype=new TempCtor,e.prototype.constructor=e}}},155:function(e){var t,r,n=e.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(e){if(t===setTimeout)return setTimeout(e,0);if((t===defaultSetTimout||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){t=defaultSetTimout}try{r="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){r=defaultClearTimeout}}();var a,o=[],s=!1,l=-1;function cleanUpNextTick(){s&&a&&(s=!1,a.length?o=a.concat(o):l=-1,o.length&&drainQueue())}function drainQueue(){if(!s){var e=runTimeout(cleanUpNextTick);s=!0;for(var t=o.length;t;){for(a=o,o=[];++l1)for(var r=1;ro)throw new RangeError("requested too many random bytes");var r=s.allocUnsafe(e);if(e>0)if(e>a)for(var i=0;i2?"one of ".concat(t," ").concat(e.slice(0,r-1).join(", "),", or ")+e[r-1]:2===r?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}createErrorType("ERR_INVALID_OPT_VALUE",(function(e,t){return'The value "'+t+'" is invalid for option "'+e+'"'}),TypeError),createErrorType("ERR_INVALID_ARG_TYPE",(function(e,t,r){var n,a;if("string"==typeof t&&function startsWith(e,t,r){return e.substr(!r||r<0?0:+r,t.length)===t}(t,"not ")?(n="must not be",t=t.replace(/^not /,"")):n="must be",function endsWith(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e," argument"))a="The ".concat(e," ").concat(n," ").concat(oneOf(t,"type"));else{var o=function includes(e,t,r){return"number"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,".")?"property":"argument";a='The "'.concat(e,'" ').concat(o," ").concat(n," ").concat(oneOf(t,"type"))}return a+=". Received type ".concat(typeof r)}),TypeError),createErrorType("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),createErrorType("ERR_METHOD_NOT_IMPLEMENTED",(function(e){return"The "+e+" method is not implemented"})),createErrorType("ERR_STREAM_PREMATURE_CLOSE","Premature close"),createErrorType("ERR_STREAM_DESTROYED",(function(e){return"Cannot call "+e+" after a stream was destroyed"})),createErrorType("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),createErrorType("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),createErrorType("ERR_STREAM_WRITE_AFTER_END","write after end"),createErrorType("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),createErrorType("ERR_UNKNOWN_ENCODING",(function(e){return"Unknown encoding: "+e}),TypeError),createErrorType("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),e.exports.q=t},753:function(e,t,r){var n=r(155),a=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};e.exports=Duplex;var o=r(481),s=r(229);r(717)(Duplex,o);for(var l=a(s.prototype),i=0;i0)if("string"==typeof t||s.objectMode||Object.getPrototypeOf(t)===l.prototype||(t=function _uint8ArrayToBuffer(e){return l.from(e)}(t)),n)s.endEmitted?w(e,new b):addChunk(e,s,t,!0);else if(s.ended)w(e,new S);else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(t=s.decoder.write(t),s.objectMode||0!==t.length?addChunk(e,s,t,!1):maybeReadMore(e,s)):addChunk(e,s,t,!1)}else n||(s.reading=!1,maybeReadMore(e,s));return!s.ended&&(s.lengtht.highWaterMark&&(t.highWaterMark=function computeNewHighWaterMark(e){return e>=x?e=x:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function emitReadable(e){var t=e._readableState;c("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(c("emitReadable",t.flowing),t.emittedReadable=!0,a.nextTick(emitReadable_,e))}function emitReadable_(e){var t=e._readableState;c("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,flow(e)}function maybeReadMore(e,t){t.readingMore||(t.readingMore=!0,a.nextTick(maybeReadMore_,e,t))}function maybeReadMore_(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function nReadingNextTick(e){c("readable nexttick read 0"),e.read(0)}function resume_(e,t){c("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),flow(e),t.flowing&&!t.reading&&e.read(0)}function flow(e){var t=e._readableState;for(c("flow",t.flowing);t.flowing&&null!==e.read(););}function fromList(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function endReadable(e){var t=e._readableState;c("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,a.nextTick(endReadableNT,t,e))}function endReadableNT(e,t){if(c("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit("end"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function indexOf(e,t){for(var r=0,n=e.length;r=t.highWaterMark:t.length>0)||t.ended))return c("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?endReadable(this):emitReadable(this),null;if(0===(e=howMuchToRead(e,t))&&t.ended)return 0===t.length&&endReadable(this),null;var n,a=t.needReadable;return c("need readable",a),(0===t.length||t.length-e0?fromList(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&endReadable(this)),null!==n&&this.emit("data",n),n},Readable.prototype._read=function(e){w(this,new _("_read()"))},Readable.prototype.pipe=function(e,t){var r=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=e;break;case 1:n.pipes=[n.pipes,e];break;default:n.pipes.push(e)}n.pipesCount+=1,c("pipe count=%d opts=%j",n.pipesCount,t);var s=(!t||!1!==t.end)&&e!==a.stdout&&e!==a.stderr?onend:unpipe;function onunpipe(t,a){c("onunpipe"),t===r&&a&&!1===a.hasUnpiped&&(a.hasUnpiped=!0,function cleanup(){c("cleanup"),e.removeListener("close",onclose),e.removeListener("finish",onfinish),e.removeListener("drain",l),e.removeListener("error",onerror),e.removeListener("unpipe",onunpipe),r.removeListener("end",onend),r.removeListener("end",unpipe),r.removeListener("data",ondata),i=!0,!n.awaitDrain||e._writableState&&!e._writableState.needDrain||l()}())}function onend(){c("onend"),e.end()}n.endEmitted?a.nextTick(s):r.once("end",s),e.on("unpipe",onunpipe);var l=function pipeOnDrain(e){return function pipeOnDrainFunctionResult(){var t=e._readableState;c("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&o(e,"data")&&(t.flowing=!0,flow(e))}}(r);e.on("drain",l);var i=!1;function ondata(t){c("ondata");var a=e.write(t);c("dest.write",a),!1===a&&((1===n.pipesCount&&n.pipes===e||n.pipesCount>1&&-1!==indexOf(n.pipes,e))&&!i&&(c("false write response, pause",n.awaitDrain),n.awaitDrain++),r.pause())}function onerror(t){c("onerror",t),unpipe(),e.removeListener("error",onerror),0===o(e,"error")&&w(e,t)}function onclose(){e.removeListener("finish",onfinish),unpipe()}function onfinish(){c("onfinish"),e.removeListener("close",onclose),unpipe()}function unpipe(){c("unpipe"),r.unpipe(e)}return r.on("data",ondata),function prependListener(e,t,r){if("function"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,"error",onerror),e.once("close",onclose),e.once("finish",onfinish),e.emit("pipe",r),n.flowing||(c("pipe resume"),r.resume()),e},Readable.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,r)),this;if(!e){var n=t.pipes,a=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o0,!1!==n.flowing&&this.resume()):"readable"===e&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,c("on readable",n.length,n.reading),n.length?emitReadable(this):n.reading||a.nextTick(nReadingNextTick,this))),r},Readable.prototype.addListener=Readable.prototype.on,Readable.prototype.removeListener=function(e,t){var r=s.prototype.removeListener.call(this,e,t);return"readable"===e&&a.nextTick(updateReadableListening,this),r},Readable.prototype.removeAllListeners=function(e){var t=s.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||a.nextTick(updateReadableListening,this),t},Readable.prototype.resume=function(){var e=this._readableState;return e.flowing||(c("resume"),e.flowing=!e.readableListening,function resume(e,t){t.resumeScheduled||(t.resumeScheduled=!0,a.nextTick(resume_,e,t))}(this,e)),e.paused=!1,this},Readable.prototype.pause=function(){return c("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(c("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},Readable.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var a in e.on("end",(function(){if(c("wrapped end"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(a){(c("wrapped data"),r.decoder&&(a=r.decoder.write(a)),r.objectMode&&null==a)||(r.objectMode||a&&a.length)&&(t.push(a)||(n=!0,e.pause()))})),e)void 0===this[a]&&"function"==typeof e[a]&&(this[a]=function methodWrap(t){return function methodWrapReturnFunction(){return e[t].apply(e,arguments)}}(a));for(var o=0;o-1))throw new _(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(Writable.prototype,"writableBuffer",{enumerable:!1,get:function get(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(Writable.prototype,"writableHighWaterMark",{enumerable:!1,get:function get(){return this._writableState.highWaterMark}}),Writable.prototype._write=function(e,t,r){r(new f("_write()"))},Writable.prototype._writev=null,Writable.prototype.end=function(e,t,r){var n=this._writableState;return"function"==typeof e?(r=e,e=null,t=null):"function"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||function endWritable(e,t,r){t.ending=!0,finishMaybe(e,t),r&&(t.finished?a.nextTick(r):e.once("finish",r));t.ended=!0,e.writable=!1}(this,n,r),this},Object.defineProperty(Writable.prototype,"writableLength",{enumerable:!1,get:function get(){return this._writableState.length}}),Object.defineProperty(Writable.prototype,"destroyed",{enumerable:!1,get:function get(){return void 0!==this._writableState&&this._writableState.destroyed},set:function set(e){this._writableState&&(this._writableState.destroyed=e)}}),Writable.prototype.destroy=u.destroy,Writable.prototype._undestroy=u.undestroy,Writable.prototype._destroy=function(e,t){t(e)}},850:function(e,t,r){var n,a=r(155);function _defineProperty(e,t,r){return(t=function _toPropertyKey(e){var t=function _toPrimitive(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var o=r(610),s=Symbol("lastResolve"),l=Symbol("lastReject"),i=Symbol("error"),c=Symbol("ended"),u=Symbol("lastPromise"),d=Symbol("handlePromise"),p=Symbol("stream");function createIterResult(e,t){return{value:e,done:t}}function readAndResolve(e){var t=e[s];if(null!==t){var r=e[p].read();null!==r&&(e[u]=null,e[s]=null,e[l]=null,t(createIterResult(r,!1)))}}function onReadable(e){a.nextTick(readAndResolve,e)}var m=Object.getPrototypeOf((function(){})),f=Object.setPrototypeOf((_defineProperty(n={get stream(){return this[p]},next:function next(){var e=this,t=this[i];if(null!==t)return Promise.reject(t);if(this[c])return Promise.resolve(createIterResult(void 0,!0));if(this[p].destroyed)return new Promise((function(t,r){a.nextTick((function(){e[i]?r(e[i]):t(createIterResult(void 0,!0))}))}));var r,n=this[u];if(n)r=new Promise(function wrapForNext(e,t){return function(r,n){e.then((function(){t[c]?r(createIterResult(void 0,!0)):t[d](r,n)}),n)}}(n,this));else{var o=this[p].read();if(null!==o)return Promise.resolve(createIterResult(o,!1));r=new Promise(this[d])}return this[u]=r,r}},Symbol.asyncIterator,(function(){return this})),_defineProperty(n,"return",(function _return(){var e=this;return new Promise((function(t,r){e[p].destroy(null,(function(e){e?r(e):t(createIterResult(void 0,!0))}))}))})),n),m);e.exports=function createReadableStreamAsyncIterator(e){var t,r=Object.create(f,(_defineProperty(t={},p,{value:e,writable:!0}),_defineProperty(t,s,{value:null,writable:!0}),_defineProperty(t,l,{value:null,writable:!0}),_defineProperty(t,i,{value:null,writable:!0}),_defineProperty(t,c,{value:e._readableState.endEmitted,writable:!0}),_defineProperty(t,d,{value:function value(e,t){var n=r[p].read();n?(r[u]=null,r[s]=null,r[l]=null,e(createIterResult(n,!1))):(r[s]=e,r[l]=t)},writable:!0}),t));return r[u]=null,o(e,(function(e){if(e&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code){var t=r[l];return null!==t&&(r[u]=null,r[s]=null,r[l]=null,t(e)),void(r[i]=e)}var n=r[s];null!==n&&(r[u]=null,r[s]=null,r[l]=null,n(createIterResult(void 0,!0))),r[c]=!0})),e.on("readable",onReadable.bind(null,r)),r}},327:function(e,t,r){function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function _objectSpread(e){for(var t=1;t0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:"unshift",value:function unshift(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:"shift",value:function shift(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function clear(){this.head=this.tail=null,this.length=0}},{key:"join",value:function join(e){if(0===this.length)return"";for(var t=this.head,r=""+t.data;t=t.next;)r+=e+t.data;return r}},{key:"concat",value:function concat(e){if(0===this.length)return n.alloc(0);for(var t,r,a,o=n.allocUnsafe(e>>>0),s=this.head,l=0;s;)t=s.data,r=o,a=l,n.prototype.copy.call(t,r,a),l+=s.data.length,s=s.next;return o}},{key:"consume",value:function consume(e,t){var r;return ea.length?a.length:e;if(o===a.length?n+=a:n+=a.slice(0,e),0===(e-=o)){o===a.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=a.slice(o));break}++r}return this.length-=r,n}},{key:"_getBuffer",value:function _getBuffer(e){var t=n.allocUnsafe(e),r=this.head,a=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var o=r.data,s=e>o.length?o.length:e;if(o.copy(t,t.length-e,0,s),0===(e-=s)){s===o.length?(++a,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(s));break}++a}return this.length-=a,t}},{key:o,value:function value(e,t){return a(this,_objectSpread(_objectSpread({},t),{},{depth:0,customInspect:!1}))}}]),BufferList}()},195:function(e,t,r){var n=r(155);function emitErrorAndCloseNT(e,t){emitErrorNT(e,t),emitCloseNT(e)}function emitCloseNT(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function emitErrorNT(e,t){e.emit("error",t)}e.exports={destroy:function destroy(e,t){var r=this,a=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return a||o?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,n.nextTick(emitErrorNT,this,e)):n.nextTick(emitErrorNT,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?r._writableState?r._writableState.errorEmitted?n.nextTick(emitCloseNT,r):(r._writableState.errorEmitted=!0,n.nextTick(emitErrorAndCloseNT,r,e)):n.nextTick(emitErrorAndCloseNT,r,e):t?(n.nextTick(emitCloseNT,r),t(e)):n.nextTick(emitCloseNT,r)})),this)},undestroy:function undestroy(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function errorOrDestroy(e,t){var r=e._readableState,n=e._writableState;r&&r.autoDestroy||n&&n.autoDestroy?e.destroy(t):e.emit("error",t)}}},610:function(e,t,r){var n=r(281).q.ERR_STREAM_PREMATURE_CLOSE;function noop(){}e.exports=function eos(e,t,r){if("function"==typeof t)return eos(e,null,t);t||(t={}),r=function once(e){var t=!1;return function(){if(!t){t=!0;for(var r=arguments.length,n=new Array(r),a=0;a0,(function(e){l||(l=e),e&&c.forEach(call),o||(c.forEach(call),i(l))}))}));return t.reduce(pipe)}},457:function(e,t,r){var n=r(281).q.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function getHighWaterMark(e,t,r,a){var o=function highWaterMarkFrom(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,a,r);if(null!=o){if(!isFinite(o)||Math.floor(o)!==o||o<0)throw new n(a?r:"highWaterMark",o);return Math.floor(o)}return e.objectMode?16:16384}}},503:function(e,t,r){e.exports=r(187).EventEmitter},509:function(e,t,r){var n=r(764),a=n.Buffer;function copyProps(e,t){for(var r in e)t[r]=e[r]}function SafeBuffer(e,t,r){return a(e,t,r)}a.from&&a.alloc&&a.allocUnsafe&&a.allocUnsafeSlow?e.exports=n:(copyProps(n,t),t.Buffer=SafeBuffer),SafeBuffer.prototype=Object.create(a.prototype),copyProps(a,SafeBuffer),SafeBuffer.from=function(e,t,r){if("number"==typeof e)throw new TypeError("Argument must not be a number");return a(e,t,r)},SafeBuffer.alloc=function(e,t,r){if("number"!=typeof e)throw new TypeError("Argument must be a number");var n=a(e);return void 0!==t?"string"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},SafeBuffer.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return a(e)},SafeBuffer.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return n.SlowBuffer(e)}},189:function(e,t,r){var n=r(509).Buffer;function Hash(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}Hash.prototype.update=function(e,t){"string"==typeof e&&(t=t||"utf8",e=n.from(e,t));for(var r=this._block,a=this._blockSize,o=e.length,s=this._len,l=0;l=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,a=(r-n)/4294967296;this._block.writeUInt32BE(a,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return e?o.toString(e):o},Hash.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=Hash},72:function(e,t,r){var n=e.exports=function SHA(e){e=e.toLowerCase();var t=n[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};n.sha=r(448),n.sha1=r(336),n.sha224=r(432),n.sha256=r(499),n.sha384=r(686),n.sha512=r(816)},448:function(e,t,r){var n=r(717),a=r(189),o=r(509).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],l=new Array(80);function Sha(){this.init(),this._w=l,a.call(this,64,56)}function rotl30(e){return e<<30|e>>>2}function ft(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(Sha,a),Sha.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Sha.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,a=0|this._b,o=0|this._c,l=0|this._d,i=0|this._e,c=0;c<16;++c)r[c]=e.readInt32BE(4*c);for(;c<80;++c)r[c]=r[c-3]^r[c-8]^r[c-14]^r[c-16];for(var u=0;u<80;++u){var d=~~(u/20),p=0|((t=n)<<5|t>>>27)+ft(d,a,o,l)+i+r[u]+s[d];i=l,l=o,o=rotl30(a),a=n,n=p}this._a=n+this._a|0,this._b=a+this._b|0,this._c=o+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0},Sha.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=Sha},336:function(e,t,r){var n=r(717),a=r(189),o=r(509).Buffer,s=[1518500249,1859775393,-1894007588,-899497514],l=new Array(80);function Sha1(){this.init(),this._w=l,a.call(this,64,56)}function rotl5(e){return e<<5|e>>>27}function rotl30(e){return e<<30|e>>>2}function ft(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(Sha1,a),Sha1.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},Sha1.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,a=0|this._b,o=0|this._c,l=0|this._d,i=0|this._e,c=0;c<16;++c)r[c]=e.readInt32BE(4*c);for(;c<80;++c)r[c]=(t=r[c-3]^r[c-8]^r[c-14]^r[c-16])<<1|t>>>31;for(var u=0;u<80;++u){var d=~~(u/20),p=rotl5(n)+ft(d,a,o,l)+i+r[u]+s[d]|0;i=l,l=o,o=rotl30(a),a=n,n=p}this._a=n+this._a|0,this._b=a+this._b|0,this._c=o+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0},Sha1.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=Sha1},432:function(e,t,r){var n=r(717),a=r(499),o=r(189),s=r(509).Buffer,l=new Array(64);function Sha224(){this.init(),this._w=l,o.call(this,64,56)}n(Sha224,a),Sha224.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},Sha224.prototype._hash=function(){var e=s.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=Sha224},499:function(e,t,r){var n=r(717),a=r(189),o=r(509).Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],l=new Array(64);function Sha256(){this.init(),this._w=l,a.call(this,64,56)}function ch(e,t,r){return r^e&(t^r)}function maj(e,t,r){return e&t|r&(e|t)}function sigma0(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function sigma1(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function gamma0(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(Sha256,a),Sha256.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},Sha256.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,a=0|this._b,o=0|this._c,l=0|this._d,i=0|this._e,c=0|this._f,u=0|this._g,d=0|this._h,p=0;p<16;++p)r[p]=e.readInt32BE(4*p);for(;p<64;++p)r[p]=0|(((t=r[p-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[p-7]+gamma0(r[p-15])+r[p-16];for(var m=0;m<64;++m){var f=d+sigma1(i)+ch(i,c,u)+s[m]+r[m]|0,h=sigma0(n)+maj(n,a,o)|0;d=u,u=c,c=i,i=l+f|0,l=o,o=a,a=n,n=f+h|0}this._a=n+this._a|0,this._b=a+this._b|0,this._c=o+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0,this._f=c+this._f|0,this._g=u+this._g|0,this._h=d+this._h|0},Sha256.prototype._hash=function(){var e=o.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=Sha256},686:function(e,t,r){var n=r(717),a=r(816),o=r(189),s=r(509).Buffer,l=new Array(160);function Sha384(){this.init(),this._w=l,o.call(this,128,112)}n(Sha384,a),Sha384.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},Sha384.prototype._hash=function(){var e=s.allocUnsafe(48);function writeInt64BE(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return writeInt64BE(this._ah,this._al,0),writeInt64BE(this._bh,this._bl,8),writeInt64BE(this._ch,this._cl,16),writeInt64BE(this._dh,this._dl,24),writeInt64BE(this._eh,this._el,32),writeInt64BE(this._fh,this._fl,40),e},e.exports=Sha384},816:function(e,t,r){var n=r(717),a=r(189),o=r(509).Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],l=new Array(160);function Sha512(){this.init(),this._w=l,a.call(this,128,112)}function Ch(e,t,r){return r^e&(t^r)}function maj(e,t,r){return e&t|r&(e|t)}function sigma0(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function sigma1(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function Gamma0(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function Gamma0l(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function Gamma1(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function Gamma1l(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function getCarry(e,t){return e>>>0>>0?1:0}n(Sha512,a),Sha512.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},Sha512.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,a=0|this._ch,o=0|this._dh,l=0|this._eh,i=0|this._fh,c=0|this._gh,u=0|this._hh,d=0|this._al,p=0|this._bl,m=0|this._cl,f=0|this._dl,h=0|this._el,g=0|this._fl,y=0|this._gl,v=0|this._hl,S=0;S<32;S+=2)t[S]=e.readInt32BE(4*S),t[S+1]=e.readInt32BE(4*S+4);for(;S<160;S+=2){var _=t[S-30],b=t[S-30+1],w=Gamma0(_,b),C=Gamma0l(b,_),x=Gamma1(_=t[S-4],b=t[S-4+1]),O=Gamma1l(b,_),k=t[S-14],N=t[S-14+1],A=t[S-32],I=t[S-32+1],R=C+N|0,T=w+k+getCarry(R,C)|0;T=(T=T+x+getCarry(R=R+O|0,O)|0)+A+getCarry(R=R+I|0,I)|0,t[S]=T,t[S+1]=R}for(var B=0;B<160;B+=2){T=t[B],R=t[B+1];var j=maj(r,n,a),P=maj(d,p,m),M=sigma0(r,d),q=sigma0(d,r),L=sigma1(l,h),D=sigma1(h,l),U=s[B],$=s[B+1],J=Ch(l,i,c),V=Ch(h,g,y),K=v+D|0,z=u+L+getCarry(K,v)|0;z=(z=(z=z+J+getCarry(K=K+V|0,V)|0)+U+getCarry(K=K+$|0,$)|0)+T+getCarry(K=K+R|0,R)|0;var F=q+P|0,W=M+j+getCarry(F,q)|0;u=c,v=y,c=i,y=g,i=l,g=h,l=o+z+getCarry(h=f+K|0,f)|0,o=a,f=m,a=n,m=p,n=r,p=d,r=z+W+getCarry(d=K+F|0,K)|0}this._al=this._al+d|0,this._bl=this._bl+p|0,this._cl=this._cl+m|0,this._dl=this._dl+f|0,this._el=this._el+h|0,this._fl=this._fl+g|0,this._gl=this._gl+y|0,this._hl=this._hl+v|0,this._ah=this._ah+r+getCarry(this._al,d)|0,this._bh=this._bh+n+getCarry(this._bl,p)|0,this._ch=this._ch+a+getCarry(this._cl,m)|0,this._dh=this._dh+o+getCarry(this._dl,f)|0,this._eh=this._eh+l+getCarry(this._el,h)|0,this._fh=this._fh+i+getCarry(this._fl,g)|0,this._gh=this._gh+c+getCarry(this._gl,y)|0,this._hh=this._hh+u+getCarry(this._hl,v)|0},Sha512.prototype._hash=function(){var e=o.allocUnsafe(64);function writeInt64BE(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return writeInt64BE(this._ah,this._al,0),writeInt64BE(this._bh,this._bl,8),writeInt64BE(this._ch,this._cl,16),writeInt64BE(this._dh,this._dl,24),writeInt64BE(this._eh,this._el,32),writeInt64BE(this._fh,this._fl,40),writeInt64BE(this._gh,this._gl,48),writeInt64BE(this._hh,this._hl,56),e},e.exports=Sha512},830:function(e,t,r){e.exports=Stream;var n=r(187).EventEmitter;function Stream(){n.call(this)}r(717)(Stream,n),Stream.Readable=r(481),Stream.Writable=r(229),Stream.Duplex=r(753),Stream.Transform=r(605),Stream.PassThrough=r(725),Stream.finished=r(610),Stream.pipeline=r(946),Stream.Stream=Stream,Stream.prototype.pipe=function(e,t){var r=this;function ondata(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function ondrain(){r.readable&&r.resume&&r.resume()}r.on("data",ondata),e.on("drain",ondrain),e._isStdio||t&&!1===t.end||(r.on("end",onend),r.on("close",onclose));var a=!1;function onend(){a||(a=!0,e.end())}function onclose(){a||(a=!0,"function"==typeof e.destroy&&e.destroy())}function onerror(e){if(cleanup(),0===n.listenerCount(this,"error"))throw e}function cleanup(){r.removeListener("data",ondata),e.removeListener("drain",ondrain),r.removeListener("end",onend),r.removeListener("close",onclose),r.removeListener("error",onerror),e.removeListener("error",onerror),r.removeListener("end",cleanup),r.removeListener("close",cleanup),e.removeListener("close",cleanup)}return r.on("error",onerror),e.on("error",onerror),r.on("end",cleanup),r.on("close",cleanup),e.on("close",cleanup),e.emit("pipe",r),e}},553:function(e,t,r){var n=r(509).Buffer,a=n.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function StringDecoder(e){var t;switch(this.encoding=function normalizeEncoding(e){var t=function _normalizeEncoding(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(n.isEncoding===a||!a(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=utf16Text,this.end=utf16End,t=4;break;case"utf8":this.fillLast=utf8FillLast,t=4;break;case"base64":this.text=base64Text,this.end=base64End,t=3;break;default:return this.write=simpleWrite,void(this.end=simpleEnd)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function utf8CheckByte(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function utf8FillLast(e){var t=this.lastTotal-this.lastNeed,r=function utf8CheckExtraBytes(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function utf16Text(e,t){if((e.length-t)%2==0){var r=e.toString("utf16le",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function utf16End(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,r)}return t}function base64Text(e,t){var r=(e.length-t)%3;return 0===r?e.toString("base64",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-r))}function base64End(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function simpleWrite(e){return e.toString(this.encoding)}function simpleEnd(e){return e&&e.length?this.write(e):""}t.s=StringDecoder,StringDecoder.prototype.write=function(e){if(0===e.length)return"";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return a>0&&(e.lastNeed=a-1),a;if(--n=0)return a>0&&(e.lastNeed=a-2),a;if(--n=0)return a>0&&(2===a?a=0:e.lastNeed=a-3),a;return 0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)},StringDecoder.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},927:function(e,t,r){function config(e){try{if(!r.g.localStorage)return!1}catch(e){return!1}var t=r.g.localStorage[e];return null!=t&&"true"===String(t).toLowerCase()}e.exports=function deprecate(e,t){if(config("noDeprecation"))return e;var r=!1;return function deprecated(){if(!r){if(config("throwDeprecation"))throw new Error(t);config("traceDeprecation")?console.trace(t):console.warn(t),r=!0}return e.apply(this,arguments)}}},131:function(e,t,r){var n=r(70),a=function isClosingTag(e){return/<\/+[^>]+>/.test(e)},o=function isSelfClosingTag(e){return/<[^>]+\/>/.test(e)},s=function isOpeningTag(e){return function isTag(e){return/<[^>!]+>/.test(e)}(e)&&!a(e)&&!o(e)};function getType(e){return a(e)?"ClosingTag":s(e)?"OpeningTag":o(e)?"SelfClosingTag":"Text"}e.exports=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.indentor,a=t.textNodesOnSameLine,o=0,s=[];r=r||" ";var l=function lexer(e){return function splitOnTags(e){return e.split(/(<\/?[^>]+>)/g).filter((function(e){return""!==e.trim()}))}(e).map((function(e){return{value:e,type:getType(e)}}))}(e).map((function(e,t,l){var i=e.value,c=e.type;"ClosingTag"===c&&o--;var u=n(r,o),d=u+i;if("OpeningTag"===c&&o++,a){var p=l[t-1],m=l[t-2];"ClosingTag"===c&&"Text"===p.type&&"OpeningTag"===m.type&&(d=""+u+m.value+p.value+i,s.push(t-2,t-1))}return d}));return s.forEach((function(e){return l[e]=null})),l.filter((function(e){return!!e})).join("\n")}},255:function(e){var t={"&":"&",'"':""","'":"'","<":"<",">":">"};e.exports=function escapeForXML(e){return e&&e.replace?e.replace(/([&"<>'])/g,(function(e,r){return t[r]})):e}},479:function(e,t,r){var n=r(155),a=r(255),o=r(830).Stream;function resolve(e,t,r){var n,o=function create_indent(e,t){return new Array(t||0).join(e||"")}(t,r=r||0),s=e;if("object"==typeof e&&((s=e[n=Object.keys(e)[0]])&&s._elem))return s._elem.name=n,s._elem.icount=r,s._elem.indent=t,s._elem.indents=o,s._elem.interrupt=s,s._elem;var l,i=[],c=[];function get_attributes(e){Object.keys(e).forEach((function(t){i.push(function attribute(e,t){return e+'="'+a(t)+'"'}(t,e[t]))}))}switch(typeof s){case"object":if(null===s)break;s._attr&&get_attributes(s._attr),s._cdata&&c.push(("/g,"]]]]>")+"]]>"),s.forEach&&(l=!1,c.push(""),s.forEach((function(e){"object"==typeof e?"_attr"==Object.keys(e)[0]?get_attributes(e._attr):c.push(resolve(e,t,r+1)):(c.pop(),l=!0,c.push(a(e)))})),l||c.push(""));break;default:c.push(a(s))}return{name:n,interrupt:!1,attributes:i,content:c,icount:r,indents:o,indent:t}}function format(e,t,r){if("object"!=typeof t)return e(!1,t);var n=t.interrupt?1:t.content.length;function proceed(){for(;t.content.length;){var a=t.content.shift();if(void 0!==a){if(interrupt(a))return;format(e,a)}}e(!1,(n>1?t.indents:"")+(t.name?"":"")+(t.indent&&!r?"\n":"")),r&&r()}function interrupt(t){return!!t.interrupt&&(t.interrupt.append=e,t.interrupt.end=proceed,t.interrupt=!1,e(!0),!0)}if(e(!1,t.indents+(t.name?"<"+t.name:"")+(t.attributes.length?" "+t.attributes.join(" "):"")+(n?t.name?">":"":t.name?"/>":"")+(t.indent&&n>1?"\n":"")),!n)return e(!1,t.indent?"\n":"");interrupt(t)||proceed()}e.exports=function xml(e,t){"object"!=typeof t&&(t={indent:t});var r=t.stream?new o:null,a="",s=!1,l=t.indent?!0===t.indent?" ":t.indent:"",i=!0;function delay(e){i?n.nextTick(e):e()}function append(e,t){if(void 0!==t&&(a+=t),e&&!s&&(r=r||new o,s=!0),e&&s){var n=a;delay((function(){r.emit("data",n)})),a=""}}function add(e,t){format(append,resolve(e,l,l?1:0),t)}function end(){if(r){var e=a;delay((function(){r.emit("data",e),r.emit("end"),r.readable=!1,r.emit("close")}))}}return delay((function(){i=!1})),t.declaration&&function addXmlDeclaration(e){var t={version:"1.0",encoding:e.encoding||"UTF-8"};e.standalone&&(t.standalone=e.standalone),add({"?xml":{_attr:t}}),a=a.replace("/>","?>")}(t.declaration),e&&e.forEach?e.forEach((function(t,r){var n;r+1===e.length&&(n=end),add(t,n)})):add(e,end),r?(r.readable=!0,r):a},e.exports.element=e.exports.Element=function element(){var e={_elem:resolve(Array.prototype.slice.call(arguments)),push:function(e){if(!this.append)throw new Error("not assigned to a parent!");var t=this,r=this._elem.indent;format(this.append,resolve(e,r,this._elem.icount+(r?1:0)),(function(){t.append(!0)}))},close:function(e){void 0!==e&&this.push(e),this.end&&this.end()}};return e}},780:function(t){t.exports=e},294:function(e){e.exports=t},70:function(e){e.exports=r},361:function(){},616:function(){}},_e={};function __webpack_require__(e){var t=_e[e];if(void 0!==t)return t.exports;var r=_e[e]={exports:{}};return Se[e](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(e,t){for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var be={};!function(){__webpack_require__.d(be,{Z:function(){return rl}});var e={};__webpack_require__.r(e),__webpack_require__.d(e,{CLEAR:function(){return Ze},CLEAR_BY:function(){return et},NEW_AUTH_ERR:function(){return Qe},NEW_SPEC_ERR:function(){return Xe},NEW_SPEC_ERR_BATCH:function(){return Ye},NEW_THROWN_ERR:function(){return He},NEW_THROWN_ERR_BATCH:function(){return Ge},clear:function(){return clear},clearBy:function(){return clearBy},newAuthErr:function(){return newAuthErr},newSpecErr:function(){return newSpecErr},newSpecErrBatch:function(){return newSpecErrBatch},newThrownErr:function(){return newThrownErr},newThrownErrBatch:function(){return newThrownErrBatch}});var t={};__webpack_require__.r(t),__webpack_require__.d(t,{AUTHORIZE:function(){return _t},AUTHORIZE_OAUTH2:function(){return Ct},CONFIGURE_AUTH:function(){return Ot},LOGOUT:function(){return bt},PRE_AUTHORIZE_OAUTH2:function(){return wt},RESTORE_AUTHORIZATION:function(){return kt},SHOW_AUTH_POPUP:function(){return St},VALIDATE:function(){return xt},authPopup:function(){return authPopup},authorize:function(){return authorize},authorizeAccessCodeWithBasicAuthentication:function(){return authorizeAccessCodeWithBasicAuthentication},authorizeAccessCodeWithFormParams:function(){return authorizeAccessCodeWithFormParams},authorizeApplication:function(){return authorizeApplication},authorizeOauth2:function(){return authorizeOauth2},authorizeOauth2WithPersistOption:function(){return authorizeOauth2WithPersistOption},authorizePassword:function(){return authorizePassword},authorizeRequest:function(){return authorizeRequest},authorizeWithPersistOption:function(){return authorizeWithPersistOption},configureAuth:function(){return configureAuth},logout:function(){return logout},logoutWithPersistOption:function(){return logoutWithPersistOption},persistAuthorizationIfNeeded:function(){return persistAuthorizationIfNeeded},preAuthorizeImplicit:function(){return preAuthorizeImplicit},restoreAuthorization:function(){return restoreAuthorization},showDefinitions:function(){return showDefinitions}});var r={};__webpack_require__.r(r),__webpack_require__.d(r,{authorized:function(){return Tt},definitionsForRequirements:function(){return definitionsForRequirements},definitionsToAuthorize:function(){return Rt},getConfigs:function(){return Bt},getDefinitionsByNames:function(){return getDefinitionsByNames},isAuthorized:function(){return isAuthorized},shownDefinitions:function(){return It}});var u={};__webpack_require__.r(u),__webpack_require__.d(u,{TOGGLE_CONFIGS:function(){return Ut},UPDATE_CONFIGS:function(){return Dt},loaded:function(){return actions_loaded},toggle:function(){return toggle},update:function(){return update}});var d={};__webpack_require__.r(d),__webpack_require__.d(d,{downloadConfig:function(){return downloadConfig},getConfigByUrl:function(){return getConfigByUrl}});var Se={};__webpack_require__.r(Se),__webpack_require__.d(Se,{get:function(){return get}});var _e={};__webpack_require__.r(_e),__webpack_require__.d(_e,{transform:function(){return transform}});var we={};__webpack_require__.r(we),__webpack_require__.d(we,{transform:function(){return parameter_oneof_transform}});var Ce={};__webpack_require__.r(Ce),__webpack_require__.d(Ce,{allErrors:function(){return Qt},lastError:function(){return Zt}});var xe={};__webpack_require__.r(xe),__webpack_require__.d(xe,{SHOW:function(){return dr},UPDATE_FILTER:function(){return cr},UPDATE_LAYOUT:function(){return ir},UPDATE_MODE:function(){return ur},changeMode:function(){return changeMode},show:function(){return actions_show},updateFilter:function(){return updateFilter},updateLayout:function(){return updateLayout}});var Oe={};__webpack_require__.r(Oe),__webpack_require__.d(Oe,{current:function(){return current},currentFilter:function(){return currentFilter},isShown:function(){return isShown},showSummary:function(){return mr},whatMode:function(){return whatMode}});var ke={};__webpack_require__.r(ke),__webpack_require__.d(ke,{taggedOperations:function(){return taggedOperations}});var Ne={};__webpack_require__.r(Ne),__webpack_require__.d(Ne,{requestSnippetGenerator_curl_bash:function(){return requestSnippetGenerator_curl_bash},requestSnippetGenerator_curl_cmd:function(){return requestSnippetGenerator_curl_cmd},requestSnippetGenerator_curl_powershell:function(){return requestSnippetGenerator_curl_powershell}});var Ae={};__webpack_require__.r(Ae),__webpack_require__.d(Ae,{getActiveLanguage:function(){return gr},getDefaultExpanded:function(){return yr},getGenerators:function(){return hr},getSnippetGenerators:function(){return getSnippetGenerators}});var Ie={};__webpack_require__.r(Ie),__webpack_require__.d(Ie,{allowTryItOutFor:function(){return allowTryItOutFor},basePath:function(){return _n},canExecuteScheme:function(){return canExecuteScheme},consumes:function(){return gn},consumesOptionsFor:function(){return consumesOptionsFor},contentTypeValues:function(){return contentTypeValues},currentProducesFor:function(){return currentProducesFor},definitions:function(){return Sn},externalDocs:function(){return un},findDefinition:function(){return findDefinition},getOAS3RequiredRequestBodyContentType:function(){return getOAS3RequiredRequestBodyContentType},getParameter:function(){return getParameter},hasHost:function(){return In},host:function(){return bn},info:function(){return cn},isMediaTypeSchemaPropertiesEqual:function(){return isMediaTypeSchemaPropertiesEqual},isOAS3:function(){return ln},lastError:function(){return Zr},mutatedRequestFor:function(){return mutatedRequestFor},mutatedRequests:function(){return An},operationScheme:function(){return operationScheme},operationWithMeta:function(){return operationWithMeta},operations:function(){return hn},operationsWithRootInherited:function(){return Cn},operationsWithTags:function(){return On},parameterInclusionSettingFor:function(){return parameterInclusionSettingFor},parameterValues:function(){return parameterValues},parameterWithMeta:function(){return parameterWithMeta},parameterWithMetaByIdentity:function(){return parameterWithMetaByIdentity},parametersIncludeIn:function(){return parametersIncludeIn},parametersIncludeType:function(){return parametersIncludeType},paths:function(){return mn},produces:function(){return yn},producesOptionsFor:function(){return producesOptionsFor},requestFor:function(){return requestFor},requests:function(){return Nn},responseFor:function(){return responseFor},responses:function(){return kn},schemes:function(){return wn},security:function(){return En},securityDefinitions:function(){return vn},semver:function(){return pn},spec:function(){return spec},specJS:function(){return an},specJson:function(){return nn},specJsonWithResolvedSubtrees:function(){return sn},specResolved:function(){return on},specResolvedSubtree:function(){return specResolvedSubtree},specSource:function(){return rn},specStr:function(){return tn},tagDetails:function(){return tagDetails},taggedOperations:function(){return selectors_taggedOperations},tags:function(){return xn},url:function(){return en},validOperationMethods:function(){return fn},validateBeforeExecute:function(){return validateBeforeExecute},validationErrors:function(){return validationErrors},version:function(){return dn}});var Re={};__webpack_require__.r(Re),__webpack_require__.d(Re,{CLEAR_REQUEST:function(){return Wn},CLEAR_RESPONSE:function(){return Fn},CLEAR_VALIDATE_PARAMS:function(){return Hn},LOG_REQUEST:function(){return zn},SET_MUTATED_REQUEST:function(){return Kn},SET_REQUEST:function(){return Vn},SET_RESPONSE:function(){return Jn},SET_SCHEME:function(){return Qn},UPDATE_EMPTY_PARAM_INCLUSION:function(){return Un},UPDATE_JSON:function(){return Ln},UPDATE_OPERATION_META_VALUE:function(){return Gn},UPDATE_PARAM:function(){return Dn},UPDATE_RESOLVED:function(){return Xn},UPDATE_RESOLVED_SUBTREE:function(){return Yn},UPDATE_SPEC:function(){return Mn},UPDATE_URL:function(){return qn},VALIDATE_PARAMS:function(){return $n},changeConsumesValue:function(){return changeConsumesValue},changeParam:function(){return changeParam},changeParamByIdentity:function(){return changeParamByIdentity},changeProducesValue:function(){return changeProducesValue},clearRequest:function(){return clearRequest},clearResponse:function(){return clearResponse},clearValidateParams:function(){return clearValidateParams},execute:function(){return actions_execute},executeRequest:function(){return executeRequest},invalidateResolvedSubtreeCache:function(){return invalidateResolvedSubtreeCache},logRequest:function(){return logRequest},parseToJson:function(){return parseToJson},requestResolvedSubtree:function(){return requestResolvedSubtree},resolveSpec:function(){return resolveSpec},setMutatedRequest:function(){return setMutatedRequest},setRequest:function(){return setRequest},setResponse:function(){return setResponse},setScheme:function(){return setScheme},updateEmptyParamInclusion:function(){return updateEmptyParamInclusion},updateJsonSpec:function(){return updateJsonSpec},updateResolved:function(){return updateResolved},updateResolvedSubtree:function(){return updateResolvedSubtree},updateSpec:function(){return updateSpec},updateUrl:function(){return updateUrl},validateParams:function(){return validateParams}});var Te={};__webpack_require__.r(Te),__webpack_require__.d(Te,{executeRequest:function(){return wrap_actions_executeRequest},updateJsonSpec:function(){return wrap_actions_updateJsonSpec},updateSpec:function(){return wrap_actions_updateSpec},validateParams:function(){return wrap_actions_validateParams}});var Be={};__webpack_require__.r(Be),__webpack_require__.d(Be,{Button:function(){return Button},Col:function(){return Col},Collapse:function(){return Collapse},Container:function(){return Container},Input:function(){return Input},Link:function(){return Link},Row:function(){return Row},Select:function(){return Select},TextArea:function(){return TextArea}});var je={};__webpack_require__.r(je),__webpack_require__.d(je,{JsonSchemaArrayItemFile:function(){return JsonSchemaArrayItemFile},JsonSchemaArrayItemText:function(){return JsonSchemaArrayItemText},JsonSchemaForm:function(){return JsonSchemaForm},JsonSchema_array:function(){return JsonSchema_array},JsonSchema_boolean:function(){return JsonSchema_boolean},JsonSchema_object:function(){return JsonSchema_object},JsonSchema_string:function(){return JsonSchema_string}});var Pe={};__webpack_require__.r(Pe),__webpack_require__.d(Pe,{basePath:function(){return Fa},consumes:function(){return Wa},definitions:function(){return Ja},hasHost:function(){return Va},host:function(){return za},produces:function(){return Ha},schemes:function(){return Ga},securityDefinitions:function(){return Ka},validOperationMethods:function(){return wrap_selectors_validOperationMethods}});var Me={};__webpack_require__.r(Me),__webpack_require__.d(Me,{definitionsToAuthorize:function(){return Xa}});var qe={};__webpack_require__.r(qe),__webpack_require__.d(qe,{callbacksOperations:function(){return Za},isOAS3:function(){return selectors_isOAS3},isOAS30:function(){return selectors_isOAS30},isSwagger2:function(){return selectors_isSwagger2},servers:function(){return Qa}});var Le={};__webpack_require__.r(Le),__webpack_require__.d(Le,{CLEAR_REQUEST_BODY_VALIDATE_ERROR:function(){return So},CLEAR_REQUEST_BODY_VALUE:function(){return _o},SET_REQUEST_BODY_VALIDATE_ERROR:function(){return vo},UPDATE_ACTIVE_EXAMPLES_MEMBER:function(){return ho},UPDATE_REQUEST_BODY_INCLUSION:function(){return fo},UPDATE_REQUEST_BODY_VALUE:function(){return po},UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:function(){return mo},UPDATE_REQUEST_CONTENT_TYPE:function(){return go},UPDATE_RESPONSE_CONTENT_TYPE:function(){return yo},UPDATE_SELECTED_SERVER:function(){return uo},UPDATE_SERVER_VARIABLE_VALUE:function(){return Eo},clearRequestBodyValidateError:function(){return clearRequestBodyValidateError},clearRequestBodyValue:function(){return clearRequestBodyValue},initRequestBodyValidateError:function(){return initRequestBodyValidateError},setActiveExamplesMember:function(){return setActiveExamplesMember},setRequestBodyInclusion:function(){return setRequestBodyInclusion},setRequestBodyValidateError:function(){return setRequestBodyValidateError},setRequestBodyValue:function(){return setRequestBodyValue},setRequestContentType:function(){return setRequestContentType},setResponseContentType:function(){return setResponseContentType},setRetainRequestBodyValueFlag:function(){return setRetainRequestBodyValueFlag},setSelectedServer:function(){return setSelectedServer},setServerVariableValue:function(){return setServerVariableValue}});var De={};__webpack_require__.r(De),__webpack_require__.d(De,{activeExamplesMember:function(){return No},hasUserEditedBody:function(){return xo},requestBodyErrors:function(){return ko},requestBodyInclusionSetting:function(){return Oo},requestBodyValue:function(){return wo},requestContentType:function(){return Ao},responseContentType:function(){return Io},selectDefaultRequestBodyValue:function(){return selectDefaultRequestBodyValue},selectedServer:function(){return bo},serverEffectiveValue:function(){return Bo},serverVariableValue:function(){return Ro},serverVariables:function(){return To},shouldRetainRequestBodyValue:function(){return Co},validOperationMethods:function(){return Po},validateBeforeExecute:function(){return jo},validateShallowRequired:function(){return validateShallowRequired}});var Ue=__webpack_require__(698),$e=__webpack_require__.n(Ue),Je=(e=>{var t={};return __webpack_require__.d(t,e),t})({Component:()=>n.Component,PureComponent:()=>n.PureComponent,createContext:()=>n.createContext,createElement:()=>n.createElement,default:()=>n.default,forwardRef:()=>n.forwardRef,useCallback:()=>n.useCallback,useContext:()=>n.useContext,useEffect:()=>n.useEffect,useRef:()=>n.useRef,useState:()=>n.useState}),Ve=(e=>{var t={};return __webpack_require__.d(t,e),t})({applyMiddleware:()=>a.applyMiddleware,bindActionCreators:()=>a.bindActionCreators,compose:()=>a.compose,createStore:()=>a.createStore}),Ke=(e=>{var t={};return __webpack_require__.d(t,e),t})({List:()=>o.List,Map:()=>o.Map,OrderedMap:()=>o.OrderedMap,Seq:()=>o.Seq,Set:()=>o.Set,default:()=>o.default,fromJS:()=>o.fromJS}),ze=(e=>{var t={};return __webpack_require__.d(t,e),t})({combineReducers:()=>s.combineReducers}),Fe=(e=>{var t={};return __webpack_require__.d(t,e),t})({serializeError:()=>l.serializeError}),We=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>i.default});const He="err_new_thrown_err",Ge="err_new_thrown_err_batch",Xe="err_new_spec_err",Ye="err_new_spec_err_batch",Qe="err_new_auth_err",Ze="err_clear",et="err_clear_by";function newThrownErr(e){return{type:He,payload:(0,Fe.serializeError)(e)}}function newThrownErrBatch(e){return{type:Ge,payload:e}}function newSpecErr(e){return{type:Xe,payload:e}}function newSpecErrBatch(e){return{type:Ye,payload:e}}function newAuthErr(e){return{type:Qe,payload:e}}function clear(){return{type:Ze,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function clearBy(){return{type:et,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0}}var tt=function makeWindow(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){},FormData:function(){}};if("undefined"==typeof window)return e;try{e=window;for(var t of["File","Blob","FormData"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}(),rt=(e=>{var t={};return __webpack_require__.d(t,e),t})({sanitizeUrl:()=>c.sanitizeUrl}),nt=((e=>{var t={};__webpack_require__.d(t,e)})({}),(e=>{var t={};__webpack_require__.d(t,e)})({}),(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>p.default})),at=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>m.default}),ot=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>f.default}),st=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>h.default}),lt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>g.default}),it=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>y.default}),ct=__webpack_require__(798),ut=__webpack_require__.n(ct),dt=__webpack_require__(72),pt=__webpack_require__.n(dt);const mt=Ke.default.Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");function getParameterSchema(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Ke.default.Map.isMap(e))return{schema:Ke.default.Map(),parameterContentMediaType:null};if(!t)return"body"===e.get("in")?{schema:e.get("schema",Ke.default.Map()),parameterContentMediaType:null}:{schema:e.filter(((e,t)=>mt.includes(t))),parameterContentMediaType:null};if(e.get("content")){const t=e.get("content",Ke.default.Map({})).keySeq().first();return{schema:e.getIn(["content",t,"schema"],Ke.default.Map()),parameterContentMediaType:t}}return{schema:e.get("schema")?e.get("schema",Ke.default.Map()):Ke.default.Map(),parameterContentMediaType:null}}var ht=__webpack_require__(764).Buffer;const gt="default",isImmutable=e=>Ke.default.Iterable.isIterable(e);function objectify(e){return isObject(e)?isImmutable(e)?e.toJS():e:{}}function fromJSOrdered(e){if(isImmutable(e))return e;if(e instanceof tt.File)return e;if(!isObject(e))return e;if(Array.isArray(e))return Ke.default.Seq(e).map(fromJSOrdered).toList();if((0,lt.default)(e.entries)){const t=function createObjWithHashedKeys(e){if(!(0,lt.default)(e.entries))return e;const t={},r="_**[]",n={};for(let a of e.entries())if(t[a[0]]||n[a[0]]&&n[a[0]].containsMultiple){if(!n[a[0]]){n[a[0]]={containsMultiple:!0,length:1},t[`${a[0]}${r}${n[a[0]].length}`]=t[a[0]],delete t[a[0]]}n[a[0]].length+=1,t[`${a[0]}${r}${n[a[0]].length}`]=a[1]}else t[a[0]]=a[1];return t}(e);return Ke.default.OrderedMap(t).map(fromJSOrdered)}return Ke.default.OrderedMap(e).map(fromJSOrdered)}function normalizeArray(e){return Array.isArray(e)?e:[e]}function isFn(e){return"function"==typeof e}function isObject(e){return!!e&&"object"==typeof e}function isFunc(e){return"function"==typeof e}function isArray(e){return Array.isArray(e)}const yt=nt.default;function objMap(e,t){return Object.keys(e).reduce(((r,n)=>(r[n]=t(e[n],n),r)),{})}function objReduce(e,t){return Object.keys(e).reduce(((r,n)=>{let a=t(e[n],n);return a&&"object"==typeof a&&Object.assign(r,a),r}),{})}function systemThunkMiddleware(e){return t=>{let{dispatch:r,getState:n}=t;return t=>r=>"function"==typeof r?r(e()):t(r)}}function validateValueBySchema(e,t,r,n,a){if(!t)return[];let o=[],s=t.get("nullable"),l=t.get("required"),i=t.get("maximum"),c=t.get("minimum"),u=t.get("type"),d=t.get("format"),p=t.get("maxLength"),m=t.get("minLength"),f=t.get("uniqueItems"),h=t.get("maxItems"),g=t.get("minItems"),y=t.get("pattern");const v=r||!0===l,S=null!=e;if(s&&null===e||!u||!(v||S&&"array"===u||!(!v&&!S)))return[];let _="string"===u&&e,b="array"===u&&Array.isArray(e)&&e.length,w="array"===u&&Ke.default.List.isList(e)&&e.count();const C=[_,b,w,"array"===u&&"string"==typeof e&&e,"file"===u&&e instanceof tt.File,"boolean"===u&&(e||!1===e),"number"===u&&(e||0===e),"integer"===u&&(e||0===e),"object"===u&&"object"==typeof e&&null!==e,"object"===u&&"string"==typeof e&&e].some((e=>!!e));if(v&&!C&&!n)return o.push("Required field is not provided"),o;if("object"===u&&(null===a||"application/json"===a)){let r=e;if("string"==typeof e)try{r=JSON.parse(e)}catch(e){return o.push("Parameter string value must be valid JSON"),o}t&&t.has("required")&&isFunc(l.isList)&&l.isList()&&l.forEach((e=>{void 0===r[e]&&o.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties")&&t.get("properties").forEach(((e,t)=>{const s=validateValueBySchema(r[t],e,!1,n,a);o.push(...s.map((e=>({propKey:t,error:e}))))}))}if(y){let t=((e,t)=>{if(!new RegExp(t).test(e))return"Value must follow pattern "+t})(e,y);t&&o.push(t)}if(g&&"array"===u){let t=((e,t)=>{if(!e&&t>=1||e&&e.length{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?"":"s"}`})(e,h);t&&o.push({needRemove:!0,error:t})}if(f&&"array"===u){let t=((e,t)=>{if(e&&("true"===t||!0===t)){const t=(0,Ke.fromJS)(e),r=t.toSet();if(e.length>r.size){let e=(0,Ke.Set)();if(t.forEach(((r,n)=>{t.filter((e=>isFunc(e.equals)?e.equals(r):e===r)).size>1&&(e=e.add(n))})),0!==e.size)return e.map((e=>({index:e,error:"No duplicates allowed."}))).toArray()}}})(e,f);t&&o.push(...t)}if(p||0===p){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?"s":""}`})(e,p);t&&o.push(t)}if(m){let t=((e,t)=>{if(e.length{if(e>t)return`Value must be less than ${t}`})(e,i);t&&o.push(t)}if(c||0===c){let t=((e,t)=>{if(e{if(isNaN(Date.parse(e)))return"Value must be a DateTime"})(e):"uuid"===d?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return"Value must be a Guid"})(e):(e=>{if(e&&"string"!=typeof e)return"Value must be a string"})(e),!t)return o;o.push(t)}else if("boolean"===u){let t=(e=>{if("true"!==e&&"false"!==e&&!0!==e&&!1!==e)return"Value must be a boolean"})(e);if(!t)return o;o.push(t)}else if("number"===u){let t=(e=>{if(!/^-?\d+(\.?\d+)?$/.test(e))return"Value must be a number"})(e);if(!t)return o;o.push(t)}else if("integer"===u){let t=(e=>{if(!/^-?\d+$/.test(e))return"Value must be an integer"})(e);if(!t)return o;o.push(t)}else if("array"===u){if(!b&&!w)return o;e&&e.forEach(((e,r)=>{const s=validateValueBySchema(e,t.get("items"),!1,n,a);o.push(...s.map((e=>({index:r,error:e}))))}))}else if("file"===u){let t=(e=>{if(e&&!(e instanceof tt.File))return"Value must be a file"})(e);if(!t)return o;o.push(t)}return o}const btoa=e=>{let t;return t=e instanceof ht?e:ht.from(e.toString(),"utf-8"),t.toString("base64")},Et={operationsSorter:{alpha:(e,t)=>e.get("path").localeCompare(t.get("path")),method:(e,t)=>e.get("method").localeCompare(t.get("method"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},buildFormData=e=>{let t=[];for(let r in e){let n=e[r];void 0!==n&&""!==n&&t.push([r,"=",encodeURIComponent(n).replace(/%20/g,"+")].join(""))}return t.join("&")},shallowEqualKeys=(e,t,r)=>!!(0,at.default)(r,(r=>(0,st.default)(e[r],t[r])));function sanitizeUrl(e){return"string"!=typeof e||""===e?"":(0,rt.sanitizeUrl)(e)}function requiresValidationURL(e){return!(!e||e.indexOf("localhost")>=0||e.indexOf("127.0.0.1")>=0||"none"===e)}const createDeepLinkPath=e=>"string"==typeof e||e instanceof String?e.trim().replace(/\s/g,"%20"):"",escapeDeepLinkPath=e=>(0,it.default)(createDeepLinkPath(e).replace(/%20/g,"_")),getExtensions=e=>e.filter(((e,t)=>/^x-/.test(t))),getCommonExtensions=e=>e.filter(((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function deeplyStripKey(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if("object"!=typeof e||Array.isArray(e)||null===e||!t)return e;const n=Object.assign({},e);return Object.keys(n).forEach((e=>{e===t&&r(n[e],e)?delete n[e]:n[e]=deeplyStripKey(n[e],t,r)})),n}function stringify(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"==typeof e&&null!==e)try{return JSON.stringify(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function paramToIdentifier(e){let{returnAll:t=!1,allowHashes:r=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Ke.default.Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");const n=e.get("name"),a=e.get("in");let o=[];return e&&e.hashCode&&a&&n&&r&&o.push(`${a}.${n}.hash-${e.hashCode()}`),a&&n&&o.push(`${a}.${n}`),o.push(n),t?o:o[0]||""}function paramToValue(e,t){return paramToIdentifier(e,{returnAll:!0}).map((e=>t[e])).filter((e=>void 0!==e))[0]}function b64toB64UrlEncoded(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}const isEmptyValue=e=>!e||!(!isImmutable(e)||!e.isEmpty()),idFn=e=>e;class Store{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};$e()(this,{state:{},plugins:[],pluginsOptions:{},system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},e),this.getSystem=this._getSystem.bind(this),this.store=function configureStore(e,t,r){return function createStoreWithMiddleware(e,t,r){let n=[systemThunkMiddleware(r)];const a=tt.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||Ve.compose;return(0,Ve.createStore)(e,t,a((0,Ve.applyMiddleware)(...n)))}(e,t,r)}(idFn,(0,Ke.fromJS)(this.state),this.getSystem),this.buildSystem(!1),this.register(this.plugins)}getStore(){return this.store}register(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var r=combinePlugins(e,this.getSystem(),this.pluginsOptions);systemExtend(this.system,r),t&&this.buildSystem();callAfterLoad.call(this.system,e,this.getSystem())&&this.buildSystem()}buildSystem(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.getStore().dispatch,r=this.getStore().getState;this.boundSystem=Object.assign({},this.getRootInjects(),this.getWrappedAndBoundActions(t),this.getWrappedAndBoundSelectors(r,this.getSystem),this.getStateThunks(r),this.getFn(),this.getConfigs()),e&&this.rebuildReducer()}_getSystem(){return this.boundSystem}getRootInjects(){return Object.assign({getSystem:this.getSystem,getStore:this.getStore.bind(this),getComponents:this.getComponents.bind(this),getState:this.getStore().getState,getConfigs:this._getConfigs.bind(this),Im:Ke.default,React:Je.default},this.system.rootInjects||{})}_getConfigs(){return this.system.configs}getConfigs(){return{configs:this.system.configs}}setConfigs(e){this.system.configs=e}rebuildReducer(){this.store.replaceReducer(function buildReducer(e){return function allReducers(e){let t=Object.keys(e).reduce(((t,r)=>(t[r]=function makeReducer(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Ke.Map,r=arguments.length>1?arguments[1]:void 0;if(!e)return t;let n=e[r.type];if(n){const e=wrapWithTryCatch(n)(t,r);return null===e?t:e}return t}}(e[r]),t)),{});if(!Object.keys(t).length)return idFn;return(0,ze.combineReducers)(t)}(objMap(e,(e=>e.reducers)))}(this.system.statePlugins))}getType(e){let t=e[0].toUpperCase()+e.slice(1);return objReduce(this.system.statePlugins,((r,n)=>{let a=r[e];if(a)return{[n+t]:a}}))}getSelectors(){return this.getType("selectors")}getActions(){return objMap(this.getType("actions"),(e=>objReduce(e,((e,t)=>{if(isFn(e))return{[t]:e}}))))}getWrappedAndBoundActions(e){var t=this;return objMap(this.getBoundActions(e),((e,r)=>{let n=this.system.statePlugins[r.slice(0,-7)].wrapActions;return n?objMap(e,((e,r)=>{let a=n[r];return a?(Array.isArray(a)||(a=[a]),a.reduce(((e,r)=>{let newAction=function(){return r(e,t.getSystem())(...arguments)};if(!isFn(newAction))throw new TypeError("wrapActions needs to return a function that returns a new function (ie the wrapped action)");return wrapWithTryCatch(newAction)}),e||Function.prototype)):e})):e}))}getWrappedAndBoundSelectors(e,t){var r=this;return objMap(this.getBoundSelectors(e,t),((t,n)=>{let a=[n.slice(0,-9)],o=this.system.statePlugins[a].wrapSelectors;return o?objMap(t,((t,n)=>{let s=o[n];return s?(Array.isArray(s)||(s=[s]),s.reduce(((t,n)=>{let wrappedSelector=function(){for(var o=arguments.length,s=new Array(o),l=0;l(t[r]=e.get(r),t)),{})}getStateThunks(e){return Object.keys(this.system.statePlugins).reduce(((t,r)=>(t[r]=()=>e().get(r),t)),{})}getFn(){return{fn:this.system.fn}}getComponents(e){const t=this.system.components[e];return Array.isArray(t)?t.reduce(((e,t)=>t(e,this.getSystem()))):void 0!==e?this.system.components[e]:this.system.components}getBoundSelectors(e,t){return objMap(this.getSelectors(),((r,n)=>{let a=[n.slice(0,-9)];return objMap(r,(r=>function(){for(var n=arguments.length,o=new Array(n),s=0;s"function"!=typeof e?objMap(e,(e=>process(e))):function(){var t=null;try{t=e(...arguments)}catch(e){t={type:He,error:!0,payload:(0,Fe.serializeError)(e)}}finally{return t}};return objMap(t,(t=>(0,Ve.bindActionCreators)(process(t),e)))}getMapStateToProps(){return()=>Object.assign({},this.getSystem())}getMapDispatchToProps(e){return t=>$e()({},this.getWrappedAndBoundActions(t),this.getFn(),e)}}function combinePlugins(e,t,r){if(isObject(e)&&!isArray(e))return(0,We.default)({},e);if(isFunc(e))return combinePlugins(e(t),t,r);if(isArray(e)){const n="chain"===r.pluginLoadType?t.getComponents():{};return e.map((e=>combinePlugins(e,t,r))).reduce(systemExtend,n)}return{}}function callAfterLoad(e,t){let{hasLoaded:r}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=r;return isObject(e)&&!isArray(e)&&"function"==typeof e.afterLoad&&(n=!0,wrapWithTryCatch(e.afterLoad).call(this,t)),isFunc(e)?callAfterLoad.call(this,e(t),t,{hasLoaded:n}):isArray(e)?e.map((e=>callAfterLoad.call(this,e,t,{hasLoaded:n}))):n}function systemExtend(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!isObject(e))return{};if(!isObject(t))return e;t.wrapComponents&&(objMap(t.wrapComponents,((r,n)=>{const a=e.components&&e.components[n];a&&Array.isArray(a)?(e.components[n]=a.concat([r]),delete t.wrapComponents[n]):a&&(e.components[n]=[a,r],delete t.wrapComponents[n])})),Object.keys(t.wrapComponents).length||delete t.wrapComponents);const{statePlugins:r}=e;if(isObject(r))for(let e in r){const n=r[e];if(!isObject(n))continue;const{wrapActions:a,wrapSelectors:o}=n;if(isObject(a))for(let r in a){let n=a[r];Array.isArray(n)||(n=[n],a[r]=n),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapActions&&t.statePlugins[e].wrapActions[r]&&(t.statePlugins[e].wrapActions[r]=a[r].concat(t.statePlugins[e].wrapActions[r]))}if(isObject(o))for(let r in o){let n=o[r];Array.isArray(n)||(n=[n],o[r]=n),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapSelectors&&t.statePlugins[e].wrapSelectors[r]&&(t.statePlugins[e].wrapSelectors[r]=o[r].concat(t.statePlugins[e].wrapSelectors[r]))}}return $e()(e,t)}function wrapWithTryCatch(e){let{logErrors:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"function"!=typeof e?e:function(){try{for(var r=arguments.length,n=new Array(r),a=0;a{var t={};return __webpack_require__.d(t,e),t})({default:()=>v.default});const St="show_popup",_t="authorize",bt="logout",wt="pre_authorize_oauth2",Ct="authorize_oauth2",xt="validate",Ot="configure_auth",kt="restore_authorization";function showDefinitions(e){return{type:St,payload:e}}function authorize(e){return{type:_t,payload:e}}const authorizeWithPersistOption=e=>t=>{let{authActions:r}=t;r.authorize(e),r.persistAuthorizationIfNeeded()};function logout(e){return{type:bt,payload:e}}const logoutWithPersistOption=e=>t=>{let{authActions:r}=t;r.logout(e),r.persistAuthorizationIfNeeded()},preAuthorizeImplicit=e=>t=>{let{authActions:r,errActions:n}=t,{auth:a,token:o,isValid:s}=e,{schema:l,name:i}=a,c=l.get("flow");delete tt.swaggerUIRedirectOauth2,"accessCode"===c||s||n.newAuthErr({authId:i,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),o.error?n.newAuthErr({authId:i,source:"auth",level:"error",message:JSON.stringify(o)}):r.authorizeOauth2WithPersistOption({auth:a,token:o})};function authorizeOauth2(e){return{type:Ct,payload:e}}const authorizeOauth2WithPersistOption=e=>t=>{let{authActions:r}=t;r.authorizeOauth2(e),r.persistAuthorizationIfNeeded()},authorizePassword=e=>t=>{let{authActions:r}=t,{schema:n,name:a,username:o,password:s,passwordType:l,clientId:i,clientSecret:c}=e,u={grant_type:"password",scope:e.scopes.join(" "),username:o,password:s},d={};switch(l){case"request-body":!function setClientIdAndSecret(e,t,r){t&&Object.assign(e,{client_id:t});r&&Object.assign(e,{client_secret:r})}(u,i,c);break;case"basic":d.Authorization="Basic "+btoa(i+":"+c);break;default:console.warn(`Warning: invalid passwordType ${l} was passed, not including client id and secret`)}return r.authorizeRequest({body:buildFormData(u),url:n.get("tokenUrl"),name:a,headers:d,query:{},auth:e})};const authorizeApplication=e=>t=>{let{authActions:r}=t,{schema:n,scopes:a,name:o,clientId:s,clientSecret:l}=e,i={Authorization:"Basic "+btoa(s+":"+l)},c={grant_type:"client_credentials",scope:a.join(" ")};return r.authorizeRequest({body:buildFormData(c),name:o,url:n.get("tokenUrl"),auth:e,headers:i})},authorizeAccessCodeWithFormParams=e=>{let{auth:t,redirectUrl:r}=e;return e=>{let{authActions:n}=e,{schema:a,name:o,clientId:s,clientSecret:l,codeVerifier:i}=t,c={grant_type:"authorization_code",code:t.code,client_id:s,client_secret:l,redirect_uri:r,code_verifier:i};return n.authorizeRequest({body:buildFormData(c),name:o,url:a.get("tokenUrl"),auth:t})}},authorizeAccessCodeWithBasicAuthentication=e=>{let{auth:t,redirectUrl:r}=e;return e=>{let{authActions:n}=e,{schema:a,name:o,clientId:s,clientSecret:l,codeVerifier:i}=t,c={Authorization:"Basic "+btoa(s+":"+l)},u={grant_type:"authorization_code",code:t.code,client_id:s,redirect_uri:r,code_verifier:i};return n.authorizeRequest({body:buildFormData(u),name:o,url:a.get("tokenUrl"),auth:t,headers:c})}},authorizeRequest=e=>t=>{let r,{fn:n,getConfigs:a,authActions:o,errActions:s,oas3Selectors:l,specSelectors:i,authSelectors:c}=t,{body:u,query:d={},headers:p={},name:m,url:f,auth:h}=e,{additionalQueryStringParams:g}=c.getConfigs()||{};if(i.isOAS3()){let e=l.serverEffectiveValue(l.selectedServer());r=(0,vt.default)(f,e,!0)}else r=(0,vt.default)(f,i.url(),!0);"object"==typeof g&&(r.query=Object.assign({},r.query,g));const y=r.toString();let v=Object.assign({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},p);n.fetch({url:y,method:"post",headers:v,query:d,body:u,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),r=t&&(t.error||""),n=t&&(t.parseError||"");e.ok?r||n?s.newAuthErr({authId:m,level:"error",source:"auth",message:JSON.stringify(t)}):o.authorizeOauth2WithPersistOption({auth:h,token:t}):s.newAuthErr({authId:m,level:"error",source:"auth",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const r=e.response.data;try{const e="string"==typeof r?JSON.parse(r):r;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}s.newAuthErr({authId:m,level:"error",source:"auth",message:t})}))};function configureAuth(e){return{type:Ot,payload:e}}function restoreAuthorization(e){return{type:kt,payload:e}}const persistAuthorizationIfNeeded=()=>e=>{let{authSelectors:t,getConfigs:r}=e;if(!r().persistAuthorization)return;const n=t.authorized().toJS();localStorage.setItem("authorized",JSON.stringify(n))},authPopup=(e,t)=>()=>{tt.swaggerUIRedirectOauth2=t,tt.open(e)};var Nt={[St]:(e,t)=>{let{payload:r}=t;return e.set("showDefinitions",r)},[_t]:(e,t)=>{let{payload:r}=t,n=(0,Ke.fromJS)(r),a=e.get("authorized")||(0,Ke.Map)();return n.entrySeq().forEach((t=>{let[r,n]=t;if(!isFunc(n.getIn))return e.set("authorized",a);let o=n.getIn(["schema","type"]);if("apiKey"===o||"http"===o)a=a.set(r,n);else if("basic"===o){let e=n.getIn(["value","username"]),t=n.getIn(["value","password"]);a=a.setIn([r,"value"],{username:e,header:"Basic "+btoa(e+":"+t)}),a=a.setIn([r,"schema"],n.get("schema"))}})),e.set("authorized",a)},[Ct]:(e,t)=>{let r,{payload:n}=t,{auth:a,token:o}=n;a.token=Object.assign({},o),r=(0,Ke.fromJS)(a);let s=e.get("authorized")||(0,Ke.Map)();return s=s.set(r.get("name"),r),e.set("authorized",s)},[bt]:(e,t)=>{let{payload:r}=t,n=e.get("authorized").withMutations((e=>{r.forEach((t=>{e.delete(t)}))}));return e.set("authorized",n)},[Ot]:(e,t)=>{let{payload:r}=t;return e.set("configs",r)},[kt]:(e,t)=>{let{payload:r}=t;return e.set("authorized",(0,Ke.fromJS)(r.authorized))}},At=(e=>{var t={};return __webpack_require__.d(t,e),t})({createSelector:()=>S.createSelector});const state=e=>e,It=(0,At.createSelector)(state,(e=>e.get("showDefinitions"))),Rt=(0,At.createSelector)(state,(()=>e=>{let{specSelectors:t}=e,r=t.securityDefinitions()||(0,Ke.Map)({}),n=(0,Ke.List)();return r.entrySeq().forEach((e=>{let[t,r]=e,a=(0,Ke.Map)();a=a.set(t,r),n=n.push(a)})),n})),getDefinitionsByNames=(e,t)=>e=>{let{specSelectors:r}=e;console.warn("WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.");let n=r.securityDefinitions(),a=(0,Ke.List)();return t.valueSeq().forEach((e=>{let t=(0,Ke.Map)();e.entrySeq().forEach((e=>{let r,[a,o]=e,s=n.get(a);"oauth2"===s.get("type")&&o.size&&(r=s.get("scopes"),r.keySeq().forEach((e=>{o.contains(e)||(r=r.delete(e))})),s=s.set("allowedScopes",r)),t=t.set(a,s)})),a=a.push(t)})),a},definitionsForRequirements=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,Ke.List)();return e=>{let{authSelectors:r}=e;const n=r.definitionsToAuthorize()||(0,Ke.List)();let a=(0,Ke.List)();return n.forEach((e=>{let r=t.find((t=>t.get(e.keySeq().first())));r&&(e.forEach(((t,n)=>{if("oauth2"===t.get("type")){const a=r.get(n);let o=t.get("scopes");Ke.List.isList(a)&&Ke.Map.isMap(o)&&(o.keySeq().forEach((e=>{a.contains(e)||(o=o.delete(e))})),e=e.set(n,t.set("scopes",o)))}})),a=a.push(e))})),a}},Tt=(0,At.createSelector)(state,(e=>e.get("authorized")||(0,Ke.Map)())),isAuthorized=(e,t)=>e=>{let{authSelectors:r}=e,n=r.authorized();return Ke.List.isList(t)?!!t.toJS().filter((e=>-1===Object.keys(e).map((e=>!!n.get(e))).indexOf(!1))).length:null},Bt=(0,At.createSelector)(state,(e=>e.get("configs"))),execute=(e,t)=>{let{authSelectors:r,specSelectors:n}=t;return t=>{let{path:a,method:o,operation:s,extras:l}=t,i={authorized:r.authorized()&&r.authorized().toJS(),definitions:n.securityDefinitions()&&n.securityDefinitions().toJS(),specSecurity:n.security()&&n.security().toJS()};return e({path:a,method:o,operation:s,securities:i,...l})}},loaded=(e,t)=>r=>{const{getConfigs:n,authActions:a}=t,o=n();if(e(r),o.persistAuthorization){const e=localStorage.getItem("authorized");e&&a.restoreAuthorization({authorized:JSON.parse(e)})}},wrap_actions_authorize=(e,t)=>r=>{e(r);if(t.getConfigs().persistAuthorization)try{const[{schema:e,value:t}]=Object.values(r),n="apiKey"===e.get("type"),a="cookie"===e.get("in");n&&a&&(document.cookie=`${e.get("name")}=${t}; SameSite=None; Secure`)}catch(e){console.error("Error persisting cookie based apiKey in document.cookie.",e)}},wrap_actions_logout=(e,t)=>r=>{const n=t.getConfigs(),a=t.authSelectors.authorized();try{n.persistAuthorization&&Array.isArray(r)&&r.forEach((e=>{const t=a.get(e,{}),r="apiKey"===t.getIn(["schema","type"]),n="cookie"===t.getIn(["schema","in"]);if(r&&n){const e=t.getIn(["schema","name"]);document.cookie=`${e}=; Max-Age=-99999999`}}))}catch(e){console.error("Error deleting cookie based apiKey from document.cookie.",e)}e(r)};var jt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>_.default}),Pt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>b.default});class LockAuthIcon extends Je.default.Component{mapStateToProps(e,t){return{state:e,ownProps:(0,Pt.default)(t,Object.keys(t.getSystem()))}}render(){const{getComponent:e,ownProps:t}=this.props,r=e("LockIcon");return Je.default.createElement(r,t)}}var Mt=LockAuthIcon;class UnlockAuthIcon extends Je.default.Component{mapStateToProps(e,t){return{state:e,ownProps:(0,Pt.default)(t,Object.keys(t.getSystem()))}}render(){const{getComponent:e,ownProps:t}=this.props,r=e("UnlockIcon");return Je.default.createElement(r,t)}}var qt=UnlockAuthIcon;function auth(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=preauthorizeApiKey.bind(null,e),this.rootInjects.preauthorizeBasic=preauthorizeBasic.bind(null,e)},components:{LockAuthIcon:Mt,UnlockAuthIcon:qt,LockAuthOperationIcon:Mt,UnlockAuthOperationIcon:qt},statePlugins:{auth:{reducers:Nt,actions:t,selectors:r,wrapActions:{authorize:wrap_actions_authorize,logout:wrap_actions_logout}},configs:{wrapActions:{loaded}},spec:{wrapActions:{execute}}}}}function preauthorizeBasic(e,t,r,n){const{authActions:{authorize:a},specSelectors:{specJson:o,isOAS3:s}}=e,l=s()?["components","securitySchemes"]:["securityDefinitions"],i=o().getIn([...l,t]);return i?a({[t]:{value:{username:r,password:n},schema:i.toJS()}}):null}function preauthorizeApiKey(e,t,r){const{authActions:{authorize:n},specSelectors:{specJson:a,isOAS3:o}}=e,s=o()?["components","securitySchemes"]:["securityDefinitions"],l=a().getIn([...s,t]);return l?n({[t]:{value:r,schema:l.toJS()}}):null}var Lt=(e=>{var t={};return __webpack_require__.d(t,e),t})({JSON_SCHEMA:()=>w.JSON_SCHEMA,default:()=>w.default});const parseYamlConfig=(e,t)=>{try{return Lt.default.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}},Dt="configs_update",Ut="configs_toggle";function update(e,t){return{type:Dt,payload:{[e]:t}}}function toggle(e){return{type:Ut,payload:e}}const actions_loaded=()=>()=>{},downloadConfig=e=>t=>{const{fn:{fetch:r}}=t;return r(e)},getConfigByUrl=(e,t)=>r=>{let{specActions:n}=r;if(e)return n.downloadConfig(e).then(next,next);function next(r){r instanceof Error||r.status>=400?(n.updateLoadingStatus("failedConfig"),n.updateLoadingStatus("failedConfig"),n.updateUrl(""),console.error(r.statusText+" "+e.url),t(null)):t(parseYamlConfig(r.text))}},get=(e,t)=>e.getIn(Array.isArray(t)?t:[t]);var $t={[Dt]:(e,t)=>e.merge((0,Ke.fromJS)(t.payload)),[Ut]:(e,t)=>{const r=t.payload,n=e.get(r);return e.set(r,!n)}};const Jt={getLocalConfig:()=>parseYamlConfig('---\nurl: "https://petstore.swagger.io/v2/swagger.json"\ndom_id: "#swagger-ui"\nvalidatorUrl: "https://validator.swagger.io/validator"\n')};function configsPlugin(){return{statePlugins:{spec:{actions:d,selectors:Jt},configs:{reducers:$t,actions:u,selectors:Se}}}}const setHash=e=>e?history.pushState(null,null,`#${e}`):window.location.hash="";var Vt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>C.default});const Kt="layout_scroll_to",zt="layout_clear_scroll";var Ft={fn:{getScrollParent:function getScrollParent(e,t){const r=document.documentElement;let n=getComputedStyle(e);const a="absolute"===n.position,o=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if("fixed"===n.position)return r;for(let t=e;t=t.parentElement;)if(n=getComputedStyle(t),(!a||"static"!==n.position)&&o.test(n.overflow+n.overflowY+n.overflowX))return t;return r}},statePlugins:{layout:{actions:{scrollToElement:(e,t)=>r=>{try{t=t||r.fn.getScrollParent(e),Vt.default.createScroller(t).to(e)}catch(e){console.error(e)}},scrollTo:e=>({type:Kt,payload:Array.isArray(e)?e:[e]}),clearScrollTo:()=>({type:zt}),readyToScroll:(e,t)=>r=>{const n=r.layoutSelectors.getScrollToKey();Ke.default.is(n,(0,Ke.fromJS)(e))&&(r.layoutActions.scrollToElement(t),r.layoutActions.clearScrollTo())},parseDeepLinkHash:e=>t=>{let{layoutActions:r,layoutSelectors:n,getConfigs:a}=t;if(a().deepLinking&&e){let t=e.slice(1);"!"===t[0]&&(t=t.slice(1)),"/"===t[0]&&(t=t.slice(1));const a=t.split("/").map((e=>e||"")),o=n.isShownKeyFromUrlHashArray(a),[s,l="",i=""]=o;if("operations"===s){const e=n.isShownKeyFromUrlHashArray([l]);l.indexOf("_")>-1&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),r.show(e.map((e=>e.replace(/_/g," "))),!0)),r.show(e,!0)}(l.indexOf("_")>-1||i.indexOf("_")>-1)&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),r.show(o.map((e=>e.replace(/_/g," "))),!0)),r.show(o,!0),r.scrollTo(o)}}},selectors:{getScrollToKey:e=>e.get("scrollToKey"),isShownKeyFromUrlHashArray(e,t){const[r,n]=t;return n?["operations",r,n]:r?["operations-tag",r]:[]},urlHashArrayFromIsShownKey(e,t){let[r,n,a]=t;return"operations"==r?[n,a]:"operations-tag"==r?[n]:[]}},reducers:{[Kt]:(e,t)=>e.set("scrollToKey",Ke.default.fromJS(t.payload)),[zt]:e=>e.delete("scrollToKey")},wrapActions:{show:(e,t)=>{let{getConfigs:r,layoutSelectors:n}=t;return function(){for(var t=arguments.length,a=new Array(t),o=0;o{var t={};return __webpack_require__.d(t,e),t})({default:()=>x.default});var operation_wrapper=(e,t)=>class OperationWrapper extends Je.default.Component{onLoad=e=>{const{operation:r}=this.props,{tag:n,operationId:a}=r.toObject();let{isShownKey:o}=r.toObject();o=o||["operations",n,a],t.layoutActions.readyToScroll(o,e)};render(){return Je.default.createElement("span",{ref:this.onLoad},Je.default.createElement(e,this.props))}};var operation_tag_wrapper=(e,t)=>class OperationTagWrapper extends Je.default.Component{onLoad=e=>{const{tag:r}=this.props,n=["operations-tag",r];t.layoutActions.readyToScroll(n,e)};render(){return Je.default.createElement("span",{ref:this.onLoad},Je.default.createElement(e,this.props))}};function deep_linking(){return[Ft,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const r=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(r)}}}},wrapComponents:{operation:operation_wrapper,OperationTag:operation_tag_wrapper}}]}var Ht=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>O.default});function transform(e){return e.map((e=>{let t="is not of a type(s)",r=e.get("message").indexOf(t);if(r>-1){let t=e.get("message").slice(r+19).split(",");return e.set("message",e.get("message").slice(0,r)+function makeNewMessage(e){return e.reduce(((e,t,r,n)=>r===n.length-1&&n.length>1?e+"or "+t:n[r+1]&&n.length>2?e+t+", ":n[r+1]?e+t+" ":e+t),"should be a")}(t))}return e}))}var Gt=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>k.default});function parameter_oneof_transform(e,t){let{jsSpec:r}=t;return e}const Xt=[_e,we];function transformErrors(e){let t={jsSpec:{}},r=(0,Ht.default)(Xt,((e,r)=>{try{return r.transform(e,t).filter((e=>!!e))}catch(t){return console.error("Transformer error:",t),e}}),e);return r.filter((e=>!!e)).map((e=>(!e.get("line")&&e.get("path"),e)))}let Yt={line:0,level:"error",message:"Unknown error"};const Qt=(0,At.createSelector)((e=>e),(e=>e.get("errors",(0,Ke.List)()))),Zt=(0,At.createSelector)(Qt,(e=>e.last()));function err(t){return{statePlugins:{err:{reducers:{[He]:(e,t)=>{let{payload:r}=t,n=Object.assign(Yt,r,{type:"thrown"});return e.update("errors",(e=>(e||(0,Ke.List)()).push((0,Ke.fromJS)(n)))).update("errors",(e=>transformErrors(e)))},[Ge]:(e,t)=>{let{payload:r}=t;return r=r.map((e=>(0,Ke.fromJS)(Object.assign(Yt,e,{type:"thrown"})))),e.update("errors",(e=>(e||(0,Ke.List)()).concat((0,Ke.fromJS)(r)))).update("errors",(e=>transformErrors(e)))},[Xe]:(e,t)=>{let{payload:r}=t,n=(0,Ke.fromJS)(r);return n=n.set("type","spec"),e.update("errors",(e=>(e||(0,Ke.List)()).push((0,Ke.fromJS)(n)).sortBy((e=>e.get("line"))))).update("errors",(e=>transformErrors(e)))},[Ye]:(e,t)=>{let{payload:r}=t;return r=r.map((e=>(0,Ke.fromJS)(Object.assign(Yt,e,{type:"spec"})))),e.update("errors",(e=>(e||(0,Ke.List)()).concat((0,Ke.fromJS)(r)))).update("errors",(e=>transformErrors(e)))},[Qe]:(e,t)=>{let{payload:r}=t,n=(0,Ke.fromJS)(Object.assign({},r));return n=n.set("type","auth"),e.update("errors",(e=>(e||(0,Ke.List)()).push((0,Ke.fromJS)(n)))).update("errors",(e=>transformErrors(e)))},[Ze]:(e,t)=>{let{payload:r}=t;if(!r||!e.get("errors"))return e;let n=e.get("errors").filter((e=>e.keySeq().every((t=>{const n=e.get(t),a=r[t];return!a||n!==a}))));return e.merge({errors:n})},[et]:(e,t)=>{let{payload:r}=t;if(!r||"function"!=typeof r)return e;let n=e.get("errors").filter((e=>r(e)));return e.merge({errors:n})}},actions:e,selectors:Ce}}}}function opsFilter(e,t){return e.filter(((e,r)=>-1!==r.indexOf(t)))}function filter(){return{fn:{opsFilter}}}var er=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>N.default});const ArrowUp=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z"}))};ArrowUp.defaultProps={className:null,width:20,height:20};var tr=ArrowUp;const ArrowDown=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"}))};ArrowDown.defaultProps={className:null,width:20,height:20};var rr=ArrowDown;const Arrow=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"}))};Arrow.defaultProps={className:null,width:20,height:20};var nr=Arrow;const Close=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"}))};Close.defaultProps={className:null,width:20,height:20};var ar=Close;const Copy=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 15 16",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("g",{transform:"translate(2, -1)"},Je.default.createElement("path",{fill:"#ffffff",fillRule:"evenodd",d:"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z"})))};Copy.defaultProps={className:null,width:15,height:16};var or=Copy;const Lock=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"}))};Lock.defaultProps={className:null,width:20,height:20};var sr=Lock;const Unlock=e=>{let{className:t,width:r,height:n,...a}=e;return Je.default.createElement("svg",(0,er.default)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",className:t,width:r,height:n,"aria-hidden":"true",focusable:"false"},a),Je.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"}))};Unlock.defaultProps={className:null,width:20,height:20};var lr=Unlock;var icons=()=>({components:{ArrowUpIcon:tr,ArrowDownIcon:rr,ArrowIcon:nr,CloseIcon:ar,CopyIcon:or,LockIcon:sr,UnlockIcon:lr}});const ir="layout_update_layout",cr="layout_update_filter",ur="layout_update_mode",dr="layout_show";function updateLayout(e){return{type:ir,payload:e}}function updateFilter(e){return{type:cr,payload:e}}function actions_show(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=normalizeArray(e),{type:dr,payload:{thing:e,shown:t}}}function changeMode(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e=normalizeArray(e),{type:ur,payload:{thing:e,mode:t}}}var pr={[ir]:(e,t)=>e.set("layout",t.payload),[cr]:(e,t)=>e.set("filter",t.payload),[dr]:(e,t)=>{const r=t.payload.shown,n=(0,Ke.fromJS)(t.payload.thing);return e.update("shown",(0,Ke.fromJS)({}),(e=>e.set(n,r)))},[ur]:(e,t)=>{let r=t.payload.thing,n=t.payload.mode;return e.setIn(["modes"].concat(r),(n||"")+"")}};const current=e=>e.get("layout"),currentFilter=e=>e.get("filter"),isShown=(e,t,r)=>(t=normalizeArray(t),e.get("shown",(0,Ke.fromJS)({})).get((0,Ke.fromJS)(t),r)),whatMode=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return t=normalizeArray(t),e.getIn(["modes",...t],r)},mr=(0,At.createSelector)((e=>e),(e=>!isShown(e,"editor"))),taggedOperations=(e,t)=>function(r){for(var n=arguments.length,a=new Array(n>1?n-1:0),o=1;o=0&&(s=s.slice(0,d)),s};function plugins_layout(){return{statePlugins:{layout:{reducers:pr,actions:xe,selectors:Oe},spec:{wrapSelectors:ke}}}}function logs(e){let{configs:t}=e;const r={debug:0,info:1,log:2,warn:3,error:4},getLevel=e=>r[e]||-1;let{logLevel:n}=t,a=getLevel(n);function log(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n=a&&console[e](...r)}return log.warn=log.bind(null,"warn"),log.error=log.bind(null,"error"),log.info=log.bind(null,"info"),log.debug=log.bind(null,"debug"),{rootInjects:{log}}}let fr=!1;function on_complete(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return fr=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const r=t.getConfigs().onComplete;return fr&&"function"==typeof r&&(setTimeout(r,0),fr=!1),e(...arguments)}}}}}}const extractKey=e=>{const t="_**[]";return e.indexOf(t)<0?e:e.split(t)[0].trim()},escapeShell=e=>"-d "===e||/^[_\/-]/g.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'",escapeCMD=e=>"-d "===(e=e.replace(/\^/g,"^^").replace(/\\"/g,'\\\\"').replace(/"/g,'""').replace(/\n/g,"^\n"))?e.replace(/-d /g,"-d ^\n"):/^[_\/-]/g.test(e)?e:'"'+e+'"',escapePowershell=e=>"-d "===e?e:/\n/.test(e)?'@"\n'+e.replace(/"/g,'\\"').replace(/`/g,"``").replace(/\$/,"`$")+'\n"@':/^[_\/-]/g.test(e)?e:"'"+e.replace(/"/g,'""').replace(/'/g,"''")+"'";const curlify=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",a=!1,o="";const addWords=function(){for(var e=arguments.length,r=new Array(e),n=0;no+=` ${r}`,addIndent=function(){return o+=" ".repeat(arguments.length>0&&void 0!==arguments[0]?arguments[0]:1)};let s=e.get("headers");if(o+="curl"+n,e.has("curlOptions")&&addWords(...e.get("curlOptions")),addWords("-X",e.get("method")),addNewLine(),addIndent(),addWordsWithoutLeadingSpace(`${e.get("url")}`),s&&s.size)for(let t of e.get("headers").entries()){addNewLine(),addIndent();let[e,r]=t;addWordsWithoutLeadingSpace("-H",`${e}: ${r}`),a=a||/^content-type$/i.test(e)&&/^multipart\/form-data$/i.test(r)}const l=e.get("body");if(l)if(a&&["POST","PUT","PATCH"].includes(e.get("method")))for(let[e,t]of l.entrySeq()){let r=extractKey(e);addNewLine(),addIndent(),addWordsWithoutLeadingSpace("-F"),t instanceof tt.File&&"string"==typeof t.valueOf()?addWords(`${r}=${t.data}${t.type?`;type=${t.type}`:""}`):t instanceof tt.File?addWords(`${r}=@${t.name}${t.type?`;type=${t.type}`:""}`):addWords(`${r}=${t}`)}else if(l instanceof tt.File)addNewLine(),addIndent(),addWordsWithoutLeadingSpace(`--data-binary '@${l.name}'`);else{addNewLine(),addIndent(),addWordsWithoutLeadingSpace("-d ");let t=l;Ke.Map.isMap(t)?addWordsWithoutLeadingSpace(function getStringBodyOfMap(e){let t=[];for(let[r,n]of e.get("body").entrySeq()){let e=extractKey(r);n instanceof tt.File?t.push(` "${e}": {\n "name": "${n.name}"${n.type?`,\n "type": "${n.type}"`:""}\n }`):t.push(` "${e}": ${JSON.stringify(n,null,2).replace(/(\r\n|\r|\n)/g,"\n ")}`)}return`{\n${t.join(",\n")}\n}`}(e)):("string"!=typeof t&&(t=JSON.stringify(t)),addWordsWithoutLeadingSpace(t))}else l||"POST"!==e.get("method")||(addNewLine(),addIndent(),addWordsWithoutLeadingSpace("-d ''"));return o},requestSnippetGenerator_curl_powershell=e=>curlify(e,escapePowershell,"`\n",".exe"),requestSnippetGenerator_curl_bash=e=>curlify(e,escapeShell,"\\\n"),requestSnippetGenerator_curl_cmd=e=>curlify(e,escapeCMD,"^\n"),request_snippets_selectors_state=e=>e||(0,Ke.Map)(),hr=(0,At.createSelector)(request_snippets_selectors_state,(e=>{const t=e.get("languages"),r=e.get("generators",(0,Ke.Map)());return!t||t.isEmpty()?r:r.filter(((e,r)=>t.includes(r)))})),getSnippetGenerators=e=>t=>{let{fn:r}=t;return hr(e).map(((e,t)=>{const n=(e=>r[`requestSnippetGenerator_${e}`])(t);return"function"!=typeof n?null:e.set("fn",n)})).filter((e=>e))},gr=(0,At.createSelector)(request_snippets_selectors_state,(e=>e.get("activeLanguage"))),yr=(0,At.createSelector)(request_snippets_selectors_state,(e=>e.get("defaultExpanded")));var Er=(e=>{var t={};return __webpack_require__.d(t,e),t})({CopyToClipboard:()=>A.CopyToClipboard}),vr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>I.default}),Sr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>R.default}),_r=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>T.default}),br=__webpack_require__(157),wr=__webpack_require__.n(br)(),Cr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>B.default}),xr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>j.default}),Or=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>P.default}),kr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>M.default}),Nr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>q.default}),Ar=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>L.default}),Ir=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>D.default}),Rr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>U.default}),Tr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>$.default}),Br=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>J.default}),jr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>V.default});vr.default.registerLanguage("json",_r.default),vr.default.registerLanguage("js",Sr.default),vr.default.registerLanguage("xml",wr),vr.default.registerLanguage("yaml",xr.default),vr.default.registerLanguage("http",Or.default),vr.default.registerLanguage("bash",Cr.default),vr.default.registerLanguage("powershell",kr.default),vr.default.registerLanguage("javascript",Sr.default);const Pr={agate:Nr.default,arta:Ar.default,monokai:Ir.default,nord:Rr.default,obsidian:Tr.default,"tomorrow-night":Br.default,idea:jr.default},Mr=Object.keys(Pr),getStyle=e=>Mr.includes(e)?Pr[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),Nr.default),qr={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(250, 250, 250)",paddingBottom:"0",paddingTop:"0",border:"1px solid rgb(51, 51, 51)",borderRadius:"4px 4px 0 0",boxShadow:"none",borderBottom:"none"},Lr={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(51, 51, 51)",boxShadow:"none",border:"1px solid rgb(51, 51, 51)",paddingBottom:"0",paddingTop:"0",borderRadius:"4px 4px 0 0",marginTop:"-5px",marginRight:"-5px",marginLeft:"-5px",zIndex:"9999",borderBottom:"none"};var request_snippets=e=>{let{request:t,requestSnippetsSelectors:r,getConfigs:n,getComponent:a}=e;const o=(0,lt.default)(n)?n():null,s=!1!==(0,Gt.default)(o,"syntaxHighlight")&&(0,Gt.default)(o,"syntaxHighlight.activated",!0),l=(0,Je.useRef)(null),i=a("ArrowUpIcon"),c=a("ArrowDownIcon"),[u,d]=(0,Je.useState)(r.getSnippetGenerators()?.keySeq().first()),[p,m]=(0,Je.useState)(r?.getDefaultExpanded());(0,Je.useEffect)((()=>{}),[]),(0,Je.useEffect)((()=>{const e=Array.from(l.current.childNodes).filter((e=>!!e.nodeType&&e.classList?.contains("curl-command")));return e.forEach((e=>e.addEventListener("mousewheel",handlePreventYScrollingBeyondElement,{passive:!1}))),()=>{e.forEach((e=>e.removeEventListener("mousewheel",handlePreventYScrollingBeyondElement)))}}),[t]);const f=r.getSnippetGenerators(),h=f.get(u),g=h.get("fn")(t),handleSetIsExpanded=()=>{m(!p)},handleGetBtnStyle=e=>e===u?Lr:qr,handlePreventYScrollingBeyondElement=e=>{const{target:t,deltaY:r}=e,{scrollHeight:n,offsetHeight:a,scrollTop:o}=t;n>a&&(0===o&&r<0||a+o>=n&&r>0)&&e.preventDefault()},y=s?Je.default.createElement(vr.default,{language:h.get("syntax"),className:"curl microlight",style:getStyle((0,Gt.default)(o,"syntaxHighlight.theme"))},g):Je.default.createElement("textarea",{readOnly:!0,className:"curl",value:g});return Je.default.createElement("div",{className:"request-snippets",ref:l},Je.default.createElement("div",{style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"center",marginBottom:"15px"}},Je.default.createElement("h4",{onClick:()=>handleSetIsExpanded(),style:{cursor:"pointer"}},"Snippets"),Je.default.createElement("button",{onClick:()=>handleSetIsExpanded(),style:{border:"none",background:"none"},title:p?"Collapse operation":"Expand operation"},p?Je.default.createElement(c,{className:"arrow",width:"10",height:"10"}):Je.default.createElement(i,{className:"arrow",width:"10",height:"10"}))),p&&Je.default.createElement("div",{className:"curl-command"},Je.default.createElement("div",{style:{paddingLeft:"15px",paddingRight:"10px",width:"100%",display:"flex"}},f.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement("div",{style:handleGetBtnStyle(t),className:"btn",key:t,onClick:()=>(e=>{u!==e&&d(e)})(t)},Je.default.createElement("h4",{style:t===u?{color:"white"}:{}},r.get("title")))}))),Je.default.createElement("div",{className:"copy-to-clipboard"},Je.default.createElement(Er.CopyToClipboard,{text:g},Je.default.createElement("button",null))),Je.default.createElement("div",null,y)))},plugins_request_snippets=()=>({components:{RequestSnippets:request_snippets},fn:Ne,statePlugins:{requestSnippets:{selectors:Ae}}}),Dr=__webpack_require__(479),Ur=__webpack_require__.n(Dr),$r=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>K.default}),Jr=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>z.default});const shallowArrayEquals=e=>t=>Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every(((e,r)=>e===t[r])),list=function(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:list;const{Cache:r}=nt.default;nt.default.Cache=Cache;const n=(0,nt.default)(e,t);return nt.default.Cache=r,n};const Vr={string:e=>e.pattern?(e=>{try{return new $r.default(e).gen()}catch(e){return"string"}})(e.pattern):"string",string_email:()=>"user@example.com","string_date-time":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",string_hostname:()=>"example.com",string_ipv4:()=>"198.51.100.42",string_ipv6:()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>"boolean"!=typeof e.default||e.default},primitive=e=>{e=objectify(e);let{type:t,format:r}=e,n=Vr[`${t}_${r}`]||Vr[t];return isFunc(n)?n(e):"Unknown Type: "+e.type},sanitizeRef=e=>deeplyStripKey(e,"$$ref",(e=>"string"==typeof e&&e.indexOf("#")>-1)),Kr=["maxProperties","minProperties"],zr=["minItems","maxItems"],Fr=["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],Wr=["minLength","maxLength"],liftSampleHelper=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(["example","default","enum","xml","type",...Kr,...zr,...Fr,...Wr].forEach((r=>(r=>{void 0===t[r]&&void 0!==e[r]&&(t[r]=e[r])})(r))),void 0!==e.required&&Array.isArray(e.required)&&(void 0!==t.required&&t.required.length||(t.required=[]),e.required.forEach((e=>{t.required.includes(e)||t.required.push(e)}))),e.properties){t.properties||(t.properties={});let n=objectify(e.properties);for(let a in n)Object.prototype.hasOwnProperty.call(n,a)&&(n[a]&&n[a].deprecated||n[a]&&n[a].readOnly&&!r.includeReadOnly||n[a]&&n[a].writeOnly&&!r.includeWriteOnly||t.properties[a]||(t.properties[a]=n[a],!e.required&&Array.isArray(e.required)&&-1!==e.required.indexOf(a)&&(t.required?t.required.push(a):t.required=[a])))}return e.items&&(t.items||(t.items={}),t.items=liftSampleHelper(e.items,t.items,r)),t},sampleFromSchemaGeneric=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&isFunc(e.toJS)&&(e=e.toJS());let a=void 0!==r||e&&void 0!==e.example||e&&void 0!==e.default;const o=!a&&e&&e.oneOf&&e.oneOf.length>0,s=!a&&e&&e.anyOf&&e.anyOf.length>0;if(!a&&(o||s)){const r=objectify(o?e.oneOf[0]:e.anyOf[0]);if(liftSampleHelper(r,e,t),!e.xml&&r.xml&&(e.xml=r.xml),void 0!==e.example&&void 0!==r.example)a=!0;else if(r.properties){e.properties||(e.properties={});let n=objectify(r.properties);for(let a in n)Object.prototype.hasOwnProperty.call(n,a)&&(n[a]&&n[a].deprecated||n[a]&&n[a].readOnly&&!t.includeReadOnly||n[a]&&n[a].writeOnly&&!t.includeWriteOnly||e.properties[a]||(e.properties[a]=n[a],!r.required&&Array.isArray(r.required)&&-1!==r.required.indexOf(a)&&(e.required?e.required.push(a):e.required=[a])))}}const l={};let{xml:i,type:c,example:u,properties:d,additionalProperties:p,items:m}=e||{},{includeReadOnly:f,includeWriteOnly:h}=t;i=i||{};let g,{name:y,prefix:v,namespace:S}=i,_={};if(n&&(y=y||"notagname",g=(v?v+":":"")+y,S)){l[v?"xmlns:"+v:"xmlns"]=S}n&&(_[g]=[]);const schemaHasAny=t=>t.some((t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!c&&(d||p||schemaHasAny(Kr)?c="object":m||schemaHasAny(zr)?c="array":schemaHasAny(Fr)?(c="number",e.type="number"):a||e.enum||(c="string",e.type="string"));const handleMinMaxItems=t=>{if(null!=e?.maxItems&&(t=t.slice(0,e?.maxItems)),null!=e?.minItems){let r=0;for(;t.lengthe&&null!==e.maxProperties&&void 0!==e.maxProperties&&C>=e.maxProperties,canAddProperty=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!hasExceededMaxProperties()&&(!(t=>!(e&&e.required&&e.required.length&&e.required.includes(t)))(t)||e.maxProperties-C-(()=>{if(!e||!e.required)return 0;let t=0;return n?e.required.forEach((e=>t+=void 0===_[e]?0:1)):e.required.forEach((e=>t+=void 0===_[g]?.find((t=>void 0!==t[e]))?0:1)),e.required.length-t})()>0);if(w=n?function(r){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&b[r]){if(b[r].xml=b[r].xml||{},b[r].xml.attribute){const e=Array.isArray(b[r].enum)?b[r].enum[0]:void 0,t=b[r].example,n=b[r].default;return void(l[b[r].xml.name||r]=void 0!==t?t:void 0!==n?n:void 0!==e?e:primitive(b[r]))}b[r].xml.name=b[r].xml.name||r}else b[r]||!1===p||(b[r]={xml:{name:r}});let o=sampleFromSchemaGeneric(e&&b[r]||void 0,t,a,n);canAddProperty(r)&&(C++,Array.isArray(o)?_[g]=_[g].concat(o):_[g].push(o))}:(r,a)=>{if(canAddProperty(r)){if(Object.prototype.hasOwnProperty.call(e,"discriminator")&&e.discriminator&&Object.prototype.hasOwnProperty.call(e.discriminator,"mapping")&&e.discriminator.mapping&&Object.prototype.hasOwnProperty.call(e,"$$ref")&&e.$$ref&&e.discriminator.propertyName===r){for(let t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){_[r]=t;break}}else _[r]=sampleFromSchemaGeneric(b[r],t,a,n);C++}},a){let a;if(a=sanitizeRef(void 0!==r?r:void 0!==u?u:e.default),!n){if("number"==typeof a&&"string"===c)return`${a}`;if("string"!=typeof a||"string"===c)return a;try{return JSON.parse(a)}catch(e){return a}}if(e||(c=Array.isArray(a)?"array":typeof a),"array"===c){if(!Array.isArray(a)){if("string"==typeof a)return a;a=[a]}const r=e?e.items:void 0;r&&(r.xml=r.xml||i||{},r.xml.name=r.xml.name||i.name);let o=a.map((e=>sampleFromSchemaGeneric(r,t,e,n)));return o=handleMinMaxItems(o),i.wrapped?(_[g]=o,(0,Jr.default)(l)||_[g].push({_attr:l})):_=o,_}if("object"===c){if("string"==typeof a)return a;for(let t in a)Object.prototype.hasOwnProperty.call(a,t)&&(e&&b[t]&&b[t].readOnly&&!f||e&&b[t]&&b[t].writeOnly&&!h||(e&&b[t]&&b[t].xml&&b[t].xml.attribute?l[b[t].xml.name||t]=a[t]:w(t,a[t])));return(0,Jr.default)(l)||_[g].push({_attr:l}),_}return _[g]=(0,Jr.default)(l)?a:[{_attr:l},a],_}if("object"===c){for(let e in b)Object.prototype.hasOwnProperty.call(b,e)&&(b[e]&&b[e].deprecated||b[e]&&b[e].readOnly&&!f||b[e]&&b[e].writeOnly&&!h||w(e));if(n&&l&&_[g].push({_attr:l}),hasExceededMaxProperties())return _;if(!0===p)n?_[g].push({additionalProp:"Anything can be here"}):_.additionalProp1={},C++;else if(p){const r=objectify(p),a=sampleFromSchemaGeneric(r,t,void 0,n);if(n&&r.xml&&r.xml.name&&"notagname"!==r.xml.name)_[g].push(a);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&CsampleFromSchemaGeneric(liftSampleHelper(m,e,t),t,void 0,n)));else if(Array.isArray(m.oneOf))r=m.oneOf.map((e=>sampleFromSchemaGeneric(liftSampleHelper(m,e,t),t,void 0,n)));else{if(!(!n||n&&i.wrapped))return sampleFromSchemaGeneric(m,t,void 0,n);r=[sampleFromSchemaGeneric(m,t,void 0,n)]}return r=handleMinMaxItems(r),n&&i.wrapped?(_[g]=r,(0,Jr.default)(l)||_[g].push({_attr:l}),_):r}let x;if(e&&Array.isArray(e.enum))x=normalizeArray(e.enum)[0];else{if(!e)return;if(x=primitive(e),"number"==typeof x){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,x=t);let r=e.maximum;null!=r&&(e.exclusiveMaximum&&r--,x=r)}if("string"==typeof x&&(null!==e.maxLength&&void 0!==e.maxLength&&(x=x.slice(0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;x.length(e.schema&&(e=e.schema),e.properties&&(e.type="object"),e),createXMLExample=(e,t,r)=>{const n=sampleFromSchemaGeneric(e,t,r,!0);if(n)return"string"==typeof n?n:Ur()(n,{declaration:!0,indent:"\t"})},sampleFromSchema=(e,t,r)=>sampleFromSchemaGeneric(e,t,r,!1),resolver=(e,t,r)=>[e,JSON.stringify(t),JSON.stringify(r)],Hr=utils_memoizeN(createXMLExample,resolver),Gr=utils_memoizeN(sampleFromSchema,resolver),Xr=[{when:/json/,shouldStringifyTypes:["string"]}],Yr=["object"];var get_json_sample_schema=e=>(t,r,n,a)=>{const{fn:o}=e(),s=o.memoizedSampleFromSchema(t,r,a),l=typeof s,i=Xr.reduce(((e,t)=>t.when.test(n)?[...e,...t.shouldStringifyTypes]:e),Yr);return(0,ot.default)(i,(e=>e===l))?JSON.stringify(s,null,2):s};var get_yaml_sample_schema=e=>(t,r,n,a)=>{const{fn:o}=e(),s=o.getJsonSampleSchema(t,r,n,a);let l;try{l=Lt.default.dump(Lt.default.load(s),{lineWidth:-1},{schema:Lt.JSON_SCHEMA}),"\n"===l[l.length-1]&&(l=l.slice(0,l.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return l.replace(/\t/g," ")};var get_xml_sample_schema=e=>(t,r,n)=>{const{fn:a}=e();if(t&&!t.xml&&(t.xml={}),t&&!t.xml.name){if(!t.$$ref&&(t.type||t.items||t.properties||t.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(t.$$ref){let e=t.$$ref.match(/\S*\/(\S+)$/);t.xml.name=e[1]}}return a.memoizedCreateXMLExample(t,r,n)};var get_sample_schema=e=>function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:o}=e();return"function"==typeof t?.toJS&&(t=t.toJS()),"function"==typeof a?.toJS&&(a=a.toJS()),/xml/.test(r)?o.getXmlSampleSchema(t,n,a):/(yaml|yml)/.test(r)?o.getYamlSampleSchema(t,n,r,a):o.getJsonSampleSchema(t,n,r,a)};var json_schema_5_samples=e=>{let{getSystem:t}=e;const r=get_json_sample_schema(t),n=get_yaml_sample_schema(t),a=get_xml_sample_schema(t),o=get_sample_schema(t);return{fn:{jsonSchema5:{inferSchema,sampleFromSchema,sampleFromSchemaGeneric,createXMLExample,memoizedSampleFromSchema:Gr,memoizedCreateXMLExample:Hr,getJsonSampleSchema:r,getYamlSampleSchema:n,getXmlSampleSchema:a,getSampleSchema:o},inferSchema,sampleFromSchema,sampleFromSchemaGeneric,createXMLExample,memoizedSampleFromSchema:Gr,memoizedCreateXMLExample:Hr,getJsonSampleSchema:r,getYamlSampleSchema:n,getXmlSampleSchema:a,getSampleSchema:o}}};const Qr=["get","put","post","delete","options","head","patch","trace"],spec_selectors_state=e=>e||(0,Ke.Map)(),Zr=(0,At.createSelector)(spec_selectors_state,(e=>e.get("lastError"))),en=(0,At.createSelector)(spec_selectors_state,(e=>e.get("url"))),tn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("spec")||"")),rn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("specSource")||"not-editor")),nn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("json",(0,Ke.Map)()))),an=(0,At.createSelector)(nn,(e=>e.toJS())),on=(0,At.createSelector)(spec_selectors_state,(e=>e.get("resolved",(0,Ke.Map)()))),specResolvedSubtree=(e,t)=>e.getIn(["resolvedSubtrees",...t],void 0),mergerFn=(e,t)=>Ke.Map.isMap(e)&&Ke.Map.isMap(t)?t.get("$$ref")?t:(0,Ke.OrderedMap)().mergeWith(mergerFn,e,t):t,sn=(0,At.createSelector)(spec_selectors_state,(e=>(0,Ke.OrderedMap)().mergeWith(mergerFn,e.get("json"),e.get("resolvedSubtrees")))),spec=e=>nn(e),ln=(0,At.createSelector)(spec,(()=>!1)),cn=(0,At.createSelector)(spec,(e=>returnSelfOrNewMap(e&&e.get("info")))),un=(0,At.createSelector)(spec,(e=>returnSelfOrNewMap(e&&e.get("externalDocs")))),dn=(0,At.createSelector)(cn,(e=>e&&e.get("version"))),pn=(0,At.createSelector)(dn,(e=>/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e).slice(1))),mn=(0,At.createSelector)(sn,(e=>e.get("paths"))),fn=(0,At.createSelector)((()=>["get","put","post","delete","options","head","patch"])),hn=(0,At.createSelector)(mn,(e=>{if(!e||e.size<1)return(0,Ke.List)();let t=(0,Ke.List)();return e&&e.forEach?(e.forEach(((e,r)=>{if(!e||!e.forEach)return{};e.forEach(((e,n)=>{Qr.indexOf(n)<0||(t=t.push((0,Ke.fromJS)({path:r,method:n,operation:e,id:`${n}-${r}`})))}))})),t):(0,Ke.List)()})),gn=(0,At.createSelector)(spec,(e=>(0,Ke.Set)(e.get("consumes")))),yn=(0,At.createSelector)(spec,(e=>(0,Ke.Set)(e.get("produces")))),En=(0,At.createSelector)(spec,(e=>e.get("security",(0,Ke.List)()))),vn=(0,At.createSelector)(spec,(e=>e.get("securityDefinitions"))),findDefinition=(e,t)=>{const r=e.getIn(["resolvedSubtrees","definitions",t],null),n=e.getIn(["json","definitions",t],null);return r||n||null},Sn=(0,At.createSelector)(spec,(e=>{const t=e.get("definitions");return Ke.Map.isMap(t)?t:(0,Ke.Map)()})),_n=(0,At.createSelector)(spec,(e=>e.get("basePath"))),bn=(0,At.createSelector)(spec,(e=>e.get("host"))),wn=(0,At.createSelector)(spec,(e=>e.get("schemes",(0,Ke.Map)()))),Cn=(0,At.createSelector)(hn,gn,yn,((e,t,r)=>e.map((e=>e.update("operation",(e=>{if(e){if(!Ke.Map.isMap(e))return;return e.withMutations((e=>(e.get("consumes")||e.update("consumes",(e=>(0,Ke.Set)(e).merge(t))),e.get("produces")||e.update("produces",(e=>(0,Ke.Set)(e).merge(r))),e)))}return(0,Ke.Map)()})))))),xn=(0,At.createSelector)(spec,(e=>{const t=e.get("tags",(0,Ke.List)());return Ke.List.isList(t)?t.filter((e=>Ke.Map.isMap(e))):(0,Ke.List)()})),tagDetails=(e,t)=>(xn(e)||(0,Ke.List)()).filter(Ke.Map.isMap).find((e=>e.get("name")===t),(0,Ke.Map)()),On=(0,At.createSelector)(Cn,xn,((e,t)=>e.reduce(((e,t)=>{let r=(0,Ke.Set)(t.getIn(["operation","tags"]));return r.count()<1?e.update("default",(0,Ke.List)(),(e=>e.push(t))):r.reduce(((e,r)=>e.update(r,(0,Ke.List)(),(e=>e.push(t)))),e)}),t.reduce(((e,t)=>e.set(t.get("name"),(0,Ke.List)())),(0,Ke.OrderedMap)())))),selectors_taggedOperations=e=>t=>{let{getConfigs:r}=t,{tagsSorter:n,operationsSorter:a}=r();return On(e).sortBy(((e,t)=>t),((e,t)=>{let r="function"==typeof n?n:Et.tagsSorter[n];return r?r(e,t):null})).map(((t,r)=>{let n="function"==typeof a?a:Et.operationsSorter[a],o=n?t.sort(n):t;return(0,Ke.Map)({tagDetails:tagDetails(e,r),operations:o})}))},kn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("responses",(0,Ke.Map)()))),Nn=(0,At.createSelector)(spec_selectors_state,(e=>e.get("requests",(0,Ke.Map)()))),An=(0,At.createSelector)(spec_selectors_state,(e=>e.get("mutatedRequests",(0,Ke.Map)()))),responseFor=(e,t,r)=>kn(e).getIn([t,r],null),requestFor=(e,t,r)=>Nn(e).getIn([t,r],null),mutatedRequestFor=(e,t,r)=>An(e).getIn([t,r],null),allowTryItOutFor=()=>!0,parameterWithMetaByIdentity=(e,t,r)=>{const n=sn(e).getIn(["paths",...t,"parameters"],(0,Ke.OrderedMap)()),a=e.getIn(["meta","paths",...t,"parameters"],(0,Ke.OrderedMap)());return n.map((e=>{const t=a.get(`${r.get("in")}.${r.get("name")}`),n=a.get(`${r.get("in")}.${r.get("name")}.hash-${r.hashCode()}`);return(0,Ke.OrderedMap)().merge(e,t,n)})).find((e=>e.get("in")===r.get("in")&&e.get("name")===r.get("name")),(0,Ke.OrderedMap)())},parameterInclusionSettingFor=(e,t,r,n)=>{const a=`${n}.${r}`;return e.getIn(["meta","paths",...t,"parameter_inclusions",a],!1)},parameterWithMeta=(e,t,r,n)=>{const a=sn(e).getIn(["paths",...t,"parameters"],(0,Ke.OrderedMap)()).find((e=>e.get("in")===n&&e.get("name")===r),(0,Ke.OrderedMap)());return parameterWithMetaByIdentity(e,t,a)},operationWithMeta=(e,t,r)=>{const n=sn(e).getIn(["paths",t,r],(0,Ke.OrderedMap)()),a=e.getIn(["meta","paths",t,r],(0,Ke.OrderedMap)()),o=n.get("parameters",(0,Ke.List)()).map((n=>parameterWithMetaByIdentity(e,[t,r],n)));return(0,Ke.OrderedMap)().merge(n,a).set("parameters",o)};function getParameter(e,t,r,n){return t=t||[],e.getIn(["meta","paths",...t,"parameters"],(0,Ke.fromJS)([])).find((e=>Ke.Map.isMap(e)&&e.get("name")===r&&e.get("in")===n))||(0,Ke.Map)()}const In=(0,At.createSelector)(spec,(e=>{const t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function parameterValues(e,t,r){return t=t||[],operationWithMeta(e,...t).get("parameters",(0,Ke.List)()).reduce(((e,t)=>{let n=r&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set(paramToIdentifier(t,{allowHashes:!1}),n)}),(0,Ke.fromJS)({}))}function parametersIncludeIn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(Ke.List.isList(e))return e.some((e=>Ke.Map.isMap(e)&&e.get("in")===t))}function parametersIncludeType(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(Ke.List.isList(e))return e.some((e=>Ke.Map.isMap(e)&&e.get("type")===t))}function contentTypeValues(e,t){t=t||[];let r=sn(e).getIn(["paths",...t],(0,Ke.fromJS)({})),n=e.getIn(["meta","paths",...t],(0,Ke.fromJS)({})),a=currentProducesFor(e,t);const o=r.get("parameters")||new Ke.List,s=n.get("consumes_value")?n.get("consumes_value"):parametersIncludeType(o,"file")?"multipart/form-data":parametersIncludeType(o,"formData")?"application/x-www-form-urlencoded":void 0;return(0,Ke.fromJS)({requestContentType:s,responseContentType:a})}function currentProducesFor(e,t){t=t||[];const r=sn(e).getIn(["paths",...t],null);if(null===r)return;const n=e.getIn(["meta","paths",...t,"produces_value"],null),a=r.getIn(["produces",0],null);return n||a||"application/json"}function producesOptionsFor(e,t){t=t||[];const r=sn(e),n=r.getIn(["paths",...t],null);if(null===n)return;const[a]=t,o=n.get("produces",null),s=r.getIn(["paths",a,"produces"],null),l=r.getIn(["produces"],null);return o||s||l}function consumesOptionsFor(e,t){t=t||[];const r=sn(e),n=r.getIn(["paths",...t],null);if(null===n)return;const[a]=t,o=n.get("consumes",null),s=r.getIn(["paths",a,"consumes"],null),l=r.getIn(["consumes"],null);return o||s||l}const operationScheme=(e,t,r)=>{let n=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),a=Array.isArray(n)?n[1]:null;return e.getIn(["scheme",t,r])||e.getIn(["scheme","_defaultScheme"])||a||""},canExecuteScheme=(e,t,r)=>["http","https"].indexOf(operationScheme(e,t,r))>-1,validationErrors=(e,t)=>{t=t||[];let r=e.getIn(["meta","paths",...t,"parameters"],(0,Ke.fromJS)([]));const n=[];return r.forEach((e=>{let t=e.get("errors");t&&t.count()&&t.forEach((e=>n.push(e)))})),n},validateBeforeExecute=(e,t)=>0===validationErrors(e,t).length,getOAS3RequiredRequestBodyContentType=(e,t)=>{let r={requestBody:!1,requestContentType:{}},n=e.getIn(["resolvedSubtrees","paths",...t,"requestBody"],(0,Ke.fromJS)([]));return n.size<1||(n.getIn(["required"])&&(r.requestBody=n.getIn(["required"])),n.getIn(["content"]).entrySeq().forEach((e=>{const t=e[0];if(e[1].getIn(["schema","required"])){const n=e[1].getIn(["schema","required"]).toJS();r.requestContentType[t]=n}}))),r},isMediaTypeSchemaPropertiesEqual=(e,t,r,n)=>{if((r||n)&&r===n)return!0;let a=e.getIn(["resolvedSubtrees","paths",...t,"requestBody","content"],(0,Ke.fromJS)([]));if(a.size<2||!r||!n)return!1;let o=a.getIn([r,"schema","properties"],(0,Ke.fromJS)([])),s=a.getIn([n,"schema","properties"],(0,Ke.fromJS)([]));return!!o.equals(s)};function returnSelfOrNewMap(e){return Ke.Map.isMap(e)?e:new Ke.Map}var Rn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>F.default}),Tn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>W.default}),Bn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>H.default}),jn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>G.default}),Pn=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>X.default});const Mn="spec_update_spec",qn="spec_update_url",Ln="spec_update_json",Dn="spec_update_param",Un="spec_update_empty_param_inclusion",$n="spec_validate_param",Jn="spec_set_response",Vn="spec_set_request",Kn="spec_set_mutated_request",zn="spec_log_request",Fn="spec_clear_response",Wn="spec_clear_request",Hn="spec_clear_validate_param",Gn="spec_update_operation_meta_value",Xn="spec_update_resolved",Yn="spec_update_resolved_subtree",Qn="set_scheme",toStr=e=>(0,Rn.default)(e)?e:"";function updateSpec(e){const t=toStr(e).replace(/\t/g," ");if("string"==typeof e)return{type:Mn,payload:t}}function updateResolved(e){return{type:Xn,payload:e}}function updateUrl(e){return{type:qn,payload:e}}function updateJsonSpec(e){return{type:Ln,payload:e}}const parseToJson=e=>t=>{let{specActions:r,specSelectors:n,errActions:a}=t,{specStr:o}=n,s=null;try{e=e||o(),a.clear({source:"parser"}),s=Lt.default.load(e,{schema:Lt.JSON_SCHEMA})}catch(e){return console.error(e),a.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return s&&"object"==typeof s?r.updateJsonSpec(s):{}};let Zn=!1;const resolveSpec=(e,t)=>r=>{let{specActions:n,specSelectors:a,errActions:o,fn:{fetch:s,resolve:l,AST:i={}},getConfigs:c}=r;Zn||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),Zn=!0);const{modelPropertyMacro:u,parameterMacro:d,requestInterceptor:p,responseInterceptor:m}=c();void 0===e&&(e=a.specJson()),void 0===t&&(t=a.url());let f=i.getLineNumberForPath?i.getLineNumberForPath:()=>{},h=a.specStr();return l({fetch:s,spec:e,baseDoc:String(new URL(t,document.baseURI)),modelPropertyMacro:u,parameterMacro:d,requestInterceptor:p,responseInterceptor:m}).then((e=>{let{spec:t,errors:r}=e;if(o.clear({type:"thrown"}),Array.isArray(r)&&r.length>0){let e=r.map((e=>(console.error(e),e.line=e.fullPath?f(h,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",Object.defineProperty(e,"message",{enumerable:!0,value:e.message}),e)));o.newThrownErrBatch(e)}return n.updateResolved(t)}))};let ea=[];const ta=(0,Tn.default)((()=>{const e=ea.reduce(((e,t)=>{let{path:r,system:n}=t;return e.has(n)||e.set(n,[]),e.get(n).push(r),e}),new Map);ea=[],e.forEach((async(e,t)=>{if(!t)return void console.error("debResolveSubtrees: don't have a system to operate on, aborting.");if(!t.fn.resolveSubtree)return void console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.");const{errActions:r,errSelectors:n,fn:{resolveSubtree:a,fetch:o,AST:s={}},specSelectors:l,specActions:i}=t,c=s.getLineNumberForPath??(0,Pn.default)(void 0),u=l.specStr(),{modelPropertyMacro:d,parameterMacro:p,requestInterceptor:m,responseInterceptor:f}=t.getConfigs();try{const t=await e.reduce((async(e,t)=>{let{resultMap:s,specWithCurrentSubtrees:i}=await e;const{errors:h,spec:g}=await a(i,t,{baseDoc:String(new URL(l.url(),document.baseURI)),modelPropertyMacro:d,parameterMacro:p,requestInterceptor:m,responseInterceptor:f});if(n.allErrors().size&&r.clearBy((e=>"thrown"!==e.get("type")||"resolver"!==e.get("source")||!e.get("fullPath").every(((e,r)=>e===t[r]||void 0===t[r])))),Array.isArray(h)&&h.length>0){let e=h.map((e=>(e.line=e.fullPath?c(u,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",Object.defineProperty(e,"message",{enumerable:!0,value:e.message}),e)));r.newThrownErrBatch(e)}return g&&l.isOAS3()&&"components"===t[0]&&"securitySchemes"===t[1]&&await Promise.all(Object.values(g).filter((e=>"openIdConnect"===e.type)).map((async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:m,responseInterceptor:f};try{const r=await o(t);r instanceof Error||r.status>=400?console.error(r.statusText+" "+t.url):e.openIdConnectData=JSON.parse(r.text)}catch(e){console.error(e)}}))),(0,Bn.default)(s,t,g),i=(0,jn.default)(t,g,i),{resultMap:s,specWithCurrentSubtrees:i}}),Promise.resolve({resultMap:(l.specResolvedSubtree([])||(0,Ke.Map)()).toJS(),specWithCurrentSubtrees:l.specJS()}));i.updateResolvedSubtree([],t.resultMap)}catch(e){console.error(e)}}))}),35),requestResolvedSubtree=e=>t=>{ea.find((r=>{let{path:n,system:a}=r;return a===t&&n.toString()===e.toString()}))||(ea.push({path:e,system:t}),ta())};function changeParam(e,t,r,n,a){return{type:Dn,payload:{path:e,value:n,paramName:t,paramIn:r,isXml:a}}}function changeParamByIdentity(e,t,r,n){return{type:Dn,payload:{path:e,param:t,value:r,isXml:n}}}const updateResolvedSubtree=(e,t)=>({type:Yn,payload:{path:e,value:t}}),invalidateResolvedSubtreeCache=()=>({type:Yn,payload:{path:[],value:(0,Ke.Map)()}}),validateParams=(e,t)=>({type:$n,payload:{pathMethod:e,isOAS3:t}}),updateEmptyParamInclusion=(e,t,r,n)=>({type:Un,payload:{pathMethod:e,paramName:t,paramIn:r,includeEmptyValue:n}});function clearValidateParams(e){return{type:Hn,payload:{pathMethod:e}}}function changeConsumesValue(e,t){return{type:Gn,payload:{path:e,value:t,key:"consumes_value"}}}function changeProducesValue(e,t){return{type:Gn,payload:{path:e,value:t,key:"produces_value"}}}const setResponse=(e,t,r)=>({payload:{path:e,method:t,res:r},type:Jn}),setRequest=(e,t,r)=>({payload:{path:e,method:t,req:r},type:Vn}),setMutatedRequest=(e,t,r)=>({payload:{path:e,method:t,req:r},type:Kn}),logRequest=e=>({payload:e,type:zn}),executeRequest=e=>t=>{let{fn:r,specActions:n,specSelectors:a,getConfigs:o,oas3Selectors:s}=t,{pathName:l,method:i,operation:c}=e,{requestInterceptor:u,responseInterceptor:d}=o(),p=c.toJS();if(c&&c.get("parameters")&&c.get("parameters").filter((e=>e&&!0===e.get("allowEmptyValue"))).forEach((t=>{if(a.parameterInclusionSettingFor([l,i],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};const r=paramToValue(t,e.parameters);(!r||r&&0===r.size)&&(e.parameters[t.get("name")]="")}})),e.contextUrl=(0,vt.default)(a.url()).toString(),p&&p.operationId?e.operationId=p.operationId:p&&l&&i&&(e.operationId=r.opId(p,l,i)),a.isOAS3()){const t=`${l}:${i}`;e.server=s.selectedServer(t)||s.selectedServer();const r=s.serverVariables({server:e.server,namespace:t}).toJS(),n=s.serverVariables({server:e.server}).toJS();e.serverVariables=Object.keys(r).length?r:n,e.requestContentType=s.requestContentType(l,i),e.responseContentType=s.responseContentType(l,i)||"*/*";const a=s.requestBodyValue(l,i),o=s.requestBodyInclusionSetting(l,i);a&&a.toJS?e.requestBody=a.map((e=>Ke.Map.isMap(e)?e.get("value"):e)).filter(((e,t)=>(Array.isArray(e)?0!==e.length:!isEmptyValue(e))||o.get(t))).toJS():e.requestBody=a}let m=Object.assign({},e);m=r.buildRequest(m),n.setRequest(e.pathName,e.method,m);e.requestInterceptor=async t=>{let r=await u.apply(void 0,[t]),a=Object.assign({},r);return n.setMutatedRequest(e.pathName,e.method,a),r},e.responseInterceptor=d;const f=Date.now();return r.execute(e).then((t=>{t.duration=Date.now()-f,n.setResponse(e.pathName,e.method,t)})).catch((t=>{"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),n.setResponse(e.pathName,e.method,{error:!0,err:(0,Fe.serializeError)(t)})}))},actions_execute=function(){let{path:e,method:t,...r}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{let{fn:{fetch:a},specSelectors:o,specActions:s}=n,l=o.specJsonWithResolvedSubtrees().toJS(),i=o.operationScheme(e,t),{requestContentType:c,responseContentType:u}=o.contentTypeValues([e,t]).toJS(),d=/xml/i.test(c),p=o.parameterValues([e,t],d).toJS();return s.executeRequest({...r,fetch:a,spec:l,pathName:e,method:t,parameters:p,requestContentType:c,scheme:i,responseContentType:u})}};function clearResponse(e,t){return{type:Fn,payload:{path:e,method:t}}}function clearRequest(e,t){return{type:Wn,payload:{path:e,method:t}}}function setScheme(e,t,r){return{type:Qn,payload:{scheme:e,path:t,method:r}}}var ra={[Mn]:(e,t)=>"string"==typeof t.payload?e.set("spec",t.payload):e,[qn]:(e,t)=>e.set("url",t.payload+""),[Ln]:(e,t)=>e.set("json",fromJSOrdered(t.payload)),[Xn]:(e,t)=>e.setIn(["resolved"],fromJSOrdered(t.payload)),[Yn]:(e,t)=>{const{value:r,path:n}=t.payload;return e.setIn(["resolvedSubtrees",...n],fromJSOrdered(r))},[Dn]:(e,t)=>{let{payload:r}=t,{path:n,paramName:a,paramIn:o,param:s,value:l,isXml:i}=r,c=s?paramToIdentifier(s):`${o}.${a}`;const u=i?"value_xml":"value";return e.setIn(["meta","paths",...n,"parameters",c,u],l)},[Un]:(e,t)=>{let{payload:r}=t,{pathMethod:n,paramName:a,paramIn:o,includeEmptyValue:s}=r;if(!a||!o)return console.warn("Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey."),e;const l=`${o}.${a}`;return e.setIn(["meta","paths",...n,"parameter_inclusions",l],s)},[$n]:(e,t)=>{let{payload:{pathMethod:r,isOAS3:n}}=t;const a=sn(e).getIn(["paths",...r]),o=parameterValues(e,r).toJS();return e.updateIn(["meta","paths",...r,"parameters"],(0,Ke.fromJS)({}),(t=>a.get("parameters",(0,Ke.List)()).reduce(((t,a)=>{const s=paramToValue(a,o),l=parameterInclusionSettingFor(e,r,a.get("name"),a.get("in")),i=function(e,t){let{isOAS3:r=!1,bypassRequiredCheck:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=e.get("required"),{schema:o,parameterContentMediaType:s}=getParameterSchema(e,{isOAS3:r});return validateValueBySchema(t,o,a,n,s)}(a,s,{bypassRequiredCheck:l,isOAS3:n});return t.setIn([paramToIdentifier(a),"errors"],(0,Ke.fromJS)(i))}),t)))},[Hn]:(e,t)=>{let{payload:{pathMethod:r}}=t;return e.updateIn(["meta","paths",...r,"parameters"],(0,Ke.fromJS)([]),(e=>e.map((e=>e.set("errors",(0,Ke.fromJS)([]))))))},[Jn]:(e,t)=>{let r,{payload:{res:n,path:a,method:o}}=t;r=n.error?Object.assign({error:!0,name:n.err.name,message:n.err.message,statusCode:n.err.statusCode},n.err.response):n,r.headers=r.headers||{};let s=e.setIn(["responses",a,o],fromJSOrdered(r));return tt.Blob&&n.data instanceof tt.Blob&&(s=s.setIn(["responses",a,o,"text"],n.data)),s},[Vn]:(e,t)=>{let{payload:{req:r,path:n,method:a}}=t;return e.setIn(["requests",n,a],fromJSOrdered(r))},[Kn]:(e,t)=>{let{payload:{req:r,path:n,method:a}}=t;return e.setIn(["mutatedRequests",n,a],fromJSOrdered(r))},[Gn]:(e,t)=>{let{payload:{path:r,value:n,key:a}}=t,o=["paths",...r],s=["meta","paths",...r];return e.getIn(["json",...o])||e.getIn(["resolved",...o])||e.getIn(["resolvedSubtrees",...o])?e.setIn([...s,a],(0,Ke.fromJS)(n)):e},[Fn]:(e,t)=>{let{payload:{path:r,method:n}}=t;return e.deleteIn(["responses",r,n])},[Wn]:(e,t)=>{let{payload:{path:r,method:n}}=t;return e.deleteIn(["requests",r,n])},[Qn]:(e,t)=>{let{payload:{scheme:r,path:n,method:a}}=t;return n&&a?e.setIn(["scheme",n,a],r):n||a?void 0:e.setIn(["scheme","_defaultScheme"],r)}};const wrap_actions_updateSpec=(e,t)=>{let{specActions:r}=t;return function(){e(...arguments),r.parseToJson(...arguments)}},wrap_actions_updateJsonSpec=(e,t)=>{let{specActions:r}=t;return function(){for(var t=arguments.length,n=new Array(t),a=0;a{(0,Gt.default)(s,[e]).$ref&&r.requestResolvedSubtree(["paths",e])})),r.requestResolvedSubtree(["components","securitySchemes"])}},wrap_actions_executeRequest=(e,t)=>{let{specActions:r}=t;return t=>(r.logRequest(t),e(t))},wrap_actions_validateParams=(e,t)=>{let{specSelectors:r}=t;return t=>e(t,r.isOAS3())};var plugins_spec=()=>({statePlugins:{spec:{wrapActions:{...Te},reducers:{...ra},actions:{...Re},selectors:{...Ie}}}}),na=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>Y.default}),aa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>Q.default}),oa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>Z.default}),sa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ee.default}),la=(e=>{var t={};return __webpack_require__.d(t,e),t})({makeResolve:()=>te.makeResolve}),ia=(e=>{var t={};return __webpack_require__.d(t,e),t})({buildRequest:()=>re.buildRequest,execute:()=>re.execute}),ca=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ne.default,makeHttp:()=>ne.makeHttp,serializeRes:()=>ne.serializeRes}),ua=(e=>{var t={};return __webpack_require__.d(t,e),t})({makeResolveSubtree:()=>ae.makeResolveSubtree}),da=(e=>{var t={};return __webpack_require__.d(t,e),t})({opId:()=>oe.opId});const configs_wrap_actions_loaded=(e,t)=>function(){e(...arguments);const r=t.getConfigs().withCredentials;void 0!==r&&(t.fn.fetch.withCredentials="string"==typeof r?"true"===r:!!r)};function swagger_client(e){let{configs:t,getConfigs:r}=e;return{fn:{fetch:(0,ca.makeHttp)(ca.default,t.preFetch,t.postFetch),buildRequest:ia.buildRequest,execute:ia.execute,resolve:(0,la.makeResolve)({strategies:[sa.default,oa.default,aa.default,na.default]}),resolveSubtree:async function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=r(),o={modelPropertyMacro:a.modelPropertyMacro,parameterMacro:a.parameterMacro,requestInterceptor:a.requestInterceptor,responseInterceptor:a.responseInterceptor,strategies:[sa.default,oa.default,aa.default,na.default]};return(0,ua.makeResolveSubtree)(o)(e,t,n)},serializeRes:ca.serializeRes,opId:da.opId},statePlugins:{configs:{wrapActions:{loaded:configs_wrap_actions_loaded}}}}}function util(){return{fn:{shallowEqualKeys}}}var pa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>se.default}),ma=(e=>{var t={};return __webpack_require__.d(t,e),t})({Provider:()=>le.Provider,connect:()=>le.connect}),fa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ie.default});const withSystem=e=>t=>{const{fn:r}=e();class WithSystem extends Je.Component{render(){return Je.default.createElement(t,(0,er.default)({},e(),this.props,this.context))}}return WithSystem.displayName=`WithSystem(${r.getDisplayName(t)})`,WithSystem},withRoot=(e,t)=>r=>{const{fn:n}=e();class WithRoot extends Je.Component{render(){return Je.default.createElement(ma.Provider,{store:t},Je.default.createElement(r,(0,er.default)({},this.props,this.context)))}}return WithRoot.displayName=`WithRoot(${n.getDisplayName(r)})`,WithRoot},withConnect=(e,t,r)=>(0,Ve.compose)(r?withRoot(e,r):fa.default,(0,ma.connect)(((r,n)=>{const a={...n,...e()},o=t.prototype?.mapStateToProps||(e=>({state:e}));return o(r,a)})),withSystem(e))(t),handleProps=(e,t,r,n)=>{for(const a in t){const o=t[a];"function"==typeof o&&o(r[a],n[a],e())}},withMappedContainer=(e,t,r)=>(t,n)=>{const{fn:a}=e(),o=r(t,"root");class WithMappedContainer extends Je.Component{constructor(t,r){super(t,r),handleProps(e,n,t,{})}UNSAFE_componentWillReceiveProps(t){handleProps(e,n,t,this.props)}render(){const e=(0,Pt.default)(this.props,n?Object.keys(n):[]);return Je.default.createElement(o,e)}}return WithMappedContainer.displayName=`WithMappedContainer(${a.getDisplayName(o)})`,WithMappedContainer},render=(e,t,r,n)=>a=>{const o=r(e,t,n)("App","root");pa.default.render(Je.default.createElement(o,null),a)},getComponent=(e,t,r)=>function(n,a){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"!=typeof n)throw new TypeError("Need a string, to fetch a component. Was given a "+typeof n);const s=r(n);return s?a?"root"===a?withConnect(e,s,t()):withConnect(e,s):s:(o.failSilently||e().log.warn("Could not find component:",n),null)},getDisplayName=e=>e.displayName||e.name||"Component";var view=e=>{let{getComponents:t,getStore:r,getSystem:n}=e;const a=(o=getComponent(n,r,t),yt(o,(function(){for(var e=arguments.length,t=new Array(e),r=0;rutils_memoizeN(e,(function(){for(var e=arguments.length,t=new Array(e),r=0;rr=>{let{errActions:n,specSelectors:a,specActions:o,getConfigs:s}=r,{fetch:l}=t;const i=s();function next(t){if(t instanceof Error||t.status>=400)return o.updateLoadingStatus("failed"),n.newThrownErr(Object.assign(new Error((t.message||t.statusText)+" "+e),{source:"fetch"})),void(!t.status&&t instanceof Error&&function checkPossibleFailReasons(){try{let t;if("URL"in tt?t=new URL(e):(t=document.createElement("a"),t.href=e),"https:"!==t.protocol&&"https:"===tt.location.protocol){const e=Object.assign(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:"fetch"});return void n.newThrownErr(e)}if(t.origin!==tt.location.origin){const e=Object.assign(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${tt.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:"fetch"});n.newThrownErr(e)}}catch(e){return}}());o.updateLoadingStatus("success"),o.updateSpec(t.text),a.url()!==e&&o.updateUrl(e)}e=e||a.url(),o.updateLoadingStatus("loading"),n.clear({source:"fetch"}),l({url:e,loadSpec:!0,requestInterceptor:i.requestInterceptor||(e=>e),responseInterceptor:i.responseInterceptor||(e=>e),credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(next,next)},updateLoadingStatus:e=>{let t=[null,"loading","failed","success","failedConfig"];return-1===t.indexOf(e)&&console.error(`Error: ${e} is not one of ${JSON.stringify(t)}`),{type:"spec_update_loading_status",payload:e}}};let n={loadingStatus:(0,At.createSelector)((e=>e||(0,Ke.Map)()),(e=>e.get("loadingStatus")||null))};return{statePlugins:{spec:{actions:r,reducers:{spec_update_loading_status:(e,t)=>"string"==typeof t.payload?e.set("loadingStatus",t.payload):e},selectors:n}}}}var ha=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ce.default});const ga=console.error,withErrorBoundary=e=>t=>{const{getComponent:r,fn:n}=e(),a=r("ErrorBoundary"),o=n.getDisplayName(t);class WithErrorBoundary extends Je.Component{render(){return Je.default.createElement(a,{targetName:o,getComponent:r,fn:n},Je.default.createElement(t,(0,er.default)({},this.props,this.context)))}}var s;return WithErrorBoundary.displayName=`WithErrorBoundary(${o})`,(s=t).prototype&&s.prototype.isReactComponent&&(WithErrorBoundary.prototype.mapStateToProps=t.prototype.mapStateToProps),WithErrorBoundary};var fallback=e=>{let{name:t}=e;return Je.default.createElement("div",{className:"fallback"},"😱 ",Je.default.createElement("i",null,"Could not render ","t"===t?"this component":t,", see the console."))};class ErrorBoundary extends Je.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:r}=this.props;if(this.state.hasError){const r=e("Fallback");return Je.default.createElement(r,{name:t})}return r}}ErrorBoundary.defaultProps={targetName:"this component",getComponent:()=>fallback,fn:{componentDidCatch:ga},children:null};var ya=ErrorBoundary;var safe_render=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{let{getSystem:n}=r;const a=t?e:["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper",...e],o=(0,ha.default)(a,Array(a.length).fill(((e,t)=>{let{fn:r}=t;return r.withErrorBoundary(e)})));return{fn:{componentDidCatch:ga,withErrorBoundary:withErrorBoundary(n)},components:{ErrorBoundary:ya,Fallback:fallback},wrapComponents:o}}};class App extends Je.default.Component{getLayout(){let{getComponent:e,layoutSelectors:t}=this.props;const r=t.current(),n=e(r,!0);return n||(()=>Je.default.createElement("h1",null,' No layout defined for "',r,'" '))}render(){const e=this.getLayout();return Je.default.createElement(e,null)}}App.defaultProps={};class AuthorizationPopup extends Je.default.Component{close=()=>{let{authActions:e}=this.props;e.showDefinitions(!1)};render(){let{authSelectors:e,authActions:t,getComponent:r,errSelectors:n,specSelectors:a,fn:{AST:o={}}}=this.props,s=e.shownDefinitions();const l=r("auths"),i=r("CloseIcon");return Je.default.createElement("div",{className:"dialog-ux"},Je.default.createElement("div",{className:"backdrop-ux"}),Je.default.createElement("div",{className:"modal-ux"},Je.default.createElement("div",{className:"modal-dialog-ux"},Je.default.createElement("div",{className:"modal-ux-inner"},Je.default.createElement("div",{className:"modal-ux-header"},Je.default.createElement("h3",null,"Available authorizations"),Je.default.createElement("button",{type:"button",className:"close-modal",onClick:this.close},Je.default.createElement(i,null))),Je.default.createElement("div",{className:"modal-ux-content"},s.valueSeq().map(((s,i)=>Je.default.createElement(l,{key:i,AST:o,definitions:s,getComponent:r,errSelectors:n,authSelectors:e,authActions:t,specSelectors:a}))))))))}}class AuthorizeBtn extends Je.default.Component{render(){let{isAuthorized:e,showPopup:t,onClick:r,getComponent:n}=this.props;const a=n("authorizationPopup",!0),o=n("LockAuthIcon",!0),s=n("UnlockAuthIcon",!0);return Je.default.createElement("div",{className:"auth-wrapper"},Je.default.createElement("button",{className:e?"btn authorize locked":"btn authorize unlocked",onClick:r},Je.default.createElement("span",null,"Authorize"),e?Je.default.createElement(o,null):Je.default.createElement(s,null)),t&&Je.default.createElement(a,null))}}class AuthorizeBtnContainer extends Je.default.Component{render(){const{authActions:e,authSelectors:t,specSelectors:r,getComponent:n}=this.props,a=r.securityDefinitions(),o=t.definitionsToAuthorize(),s=n("authorizeBtn");return a?Je.default.createElement(s,{onClick:()=>e.showDefinitions(o),isAuthorized:!!t.authorized().size,showPopup:!!t.shownDefinitions(),getComponent:n}):null}}class AuthorizeOperationBtn extends Je.default.Component{onClick=e=>{e.stopPropagation();let{onClick:t}=this.props;t&&t()};render(){let{isAuthorized:e,getComponent:t}=this.props;const r=t("LockAuthOperationIcon",!0),n=t("UnlockAuthOperationIcon",!0);return Je.default.createElement("button",{className:"authorization__btn","aria-label":e?"authorization button locked":"authorization button unlocked",onClick:this.onClick},e?Je.default.createElement(r,{className:"locked"}):Je.default.createElement(n,{className:"unlocked"}))}}class Auths extends Je.default.Component{constructor(e,t){super(e,t),this.state={}}onAuthChange=e=>{let{name:t}=e;this.setState({[t]:e})};submitAuth=e=>{e.preventDefault();let{authActions:t}=this.props;t.authorizeWithPersistOption(this.state)};logoutClick=e=>{e.preventDefault();let{authActions:t,definitions:r}=this.props,n=r.map(((e,t)=>t)).toArray();this.setState(n.reduce(((e,t)=>(e[t]="",e)),{})),t.logoutWithPersistOption(n)};close=e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)};render(){let{definitions:e,getComponent:t,authSelectors:r,errSelectors:n}=this.props;const a=t("AuthItem"),o=t("oauth2",!0),s=t("Button");let l=r.authorized(),i=e.filter(((e,t)=>!!l.get(t))),c=e.filter((e=>"oauth2"!==e.get("type"))),u=e.filter((e=>"oauth2"===e.get("type")));return Je.default.createElement("div",{className:"auth-container"},!!c.size&&Je.default.createElement("form",{onSubmit:this.submitAuth},c.map(((e,r)=>Je.default.createElement(a,{key:r,schema:e,name:r,getComponent:t,onAuthChange:this.onAuthChange,authorized:l,errSelectors:n}))).toArray(),Je.default.createElement("div",{className:"auth-btn-wrapper"},c.size===i.size?Je.default.createElement(s,{className:"btn modal-btn auth",onClick:this.logoutClick,"aria-label":"Remove authorization"},"Logout"):Je.default.createElement(s,{type:"submit",className:"btn modal-btn auth authorize","aria-label":"Apply credentials"},"Authorize"),Je.default.createElement(s,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),u&&u.size?Je.default.createElement("div",null,Je.default.createElement("div",{className:"scope-def"},Je.default.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),Je.default.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),e.filter((e=>"oauth2"===e.get("type"))).map(((e,t)=>Je.default.createElement("div",{key:t},Je.default.createElement(o,{authorized:l,schema:e,name:t})))).toArray()):null)}}class auth_item_Auths extends Je.default.Component{render(){let{schema:e,name:t,getComponent:r,onAuthChange:n,authorized:a,errSelectors:o}=this.props;const s=r("apiKeyAuth"),l=r("basicAuth");let i;const c=e.get("type");switch(c){case"apiKey":i=Je.default.createElement(s,{key:t,schema:e,name:t,errSelectors:o,authorized:a,getComponent:r,onChange:n});break;case"basic":i=Je.default.createElement(l,{key:t,schema:e,name:t,errSelectors:o,authorized:a,getComponent:r,onChange:n});break;default:i=Je.default.createElement("div",{key:t},"Unknown security definition type ",c)}return Je.default.createElement("div",{key:`${t}-jump`},i)}}class AuthError extends Je.default.Component{render(){let{error:e}=this.props,t=e.get("level"),r=e.get("message"),n=e.get("source");return Je.default.createElement("div",{className:"errors"},Je.default.createElement("b",null,n," ",t),Je.default.createElement("span",null,r))}}class ApiKeyAuth extends Je.default.Component{constructor(e,t){super(e,t);let{name:r,schema:n}=this.props,a=this.getValue();this.state={name:r,schema:n,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,"value"])}onChange=e=>{let{onChange:t}=this.props,r=e.target.value,n=Object.assign({},this.state,{value:r});this.setState(n),t(n)};render(){let{schema:e,getComponent:t,errSelectors:r,name:n}=this.props;const a=t("Input"),o=t("Row"),s=t("Col"),l=t("authError"),i=t("Markdown",!0),c=t("JumpToPath",!0);let u=this.getValue(),d=r.allErrors().filter((e=>e.get("authId")===n));return Je.default.createElement("div",null,Je.default.createElement("h4",null,Je.default.createElement("code",null,n||e.get("name"))," (apiKey)",Je.default.createElement(c,{path:["securityDefinitions",n]})),u&&Je.default.createElement("h6",null,"Authorized"),Je.default.createElement(o,null,Je.default.createElement(i,{source:e.get("description")})),Je.default.createElement(o,null,Je.default.createElement("p",null,"Name: ",Je.default.createElement("code",null,e.get("name")))),Je.default.createElement(o,null,Je.default.createElement("p",null,"In: ",Je.default.createElement("code",null,e.get("in")))),Je.default.createElement(o,null,Je.default.createElement("label",null,"Value:"),u?Je.default.createElement("code",null," ****** "):Je.default.createElement(s,null,Je.default.createElement(a,{type:"text",onChange:this.onChange,autoFocus:!0}))),d.valueSeq().map(((e,t)=>Je.default.createElement(l,{error:e,key:t}))))}}class BasicAuth extends Je.default.Component{constructor(e,t){super(e,t);let{schema:r,name:n}=this.props,a=this.getValue().username;this.state={name:n,schema:r,value:a?{username:a}:{}}}getValue(){let{authorized:e,name:t}=this.props;return e&&e.getIn([t,"value"])||{}}onChange=e=>{let{onChange:t}=this.props,{value:r,name:n}=e.target,a=this.state.value;a[n]=r,this.setState({value:a}),t(this.state)};render(){let{schema:e,getComponent:t,name:r,errSelectors:n}=this.props;const a=t("Input"),o=t("Row"),s=t("Col"),l=t("authError"),i=t("JumpToPath",!0),c=t("Markdown",!0);let u=this.getValue().username,d=n.allErrors().filter((e=>e.get("authId")===r));return Je.default.createElement("div",null,Je.default.createElement("h4",null,"Basic authorization",Je.default.createElement(i,{path:["securityDefinitions",r]})),u&&Je.default.createElement("h6",null,"Authorized"),Je.default.createElement(o,null,Je.default.createElement(c,{source:e.get("description")})),Je.default.createElement(o,null,Je.default.createElement("label",null,"Username:"),u?Je.default.createElement("code",null," ",u," "):Je.default.createElement(s,null,Je.default.createElement(a,{type:"text",required:"required",name:"username",onChange:this.onChange,autoFocus:!0}))),Je.default.createElement(o,null,Je.default.createElement("label",null,"Password:"),u?Je.default.createElement("code",null," ****** "):Je.default.createElement(s,null,Je.default.createElement(a,{autoComplete:"new-password",name:"password",type:"password",onChange:this.onChange}))),d.valueSeq().map(((e,t)=>Je.default.createElement(l,{error:e,key:t}))))}}function Example(e){const{example:t,showValue:r,getComponent:n,getConfigs:a}=e,o=n("Markdown",!0),s=n("highlightCode");return t?Je.default.createElement("div",{className:"example"},t.get("description")?Je.default.createElement("section",{className:"example__section"},Je.default.createElement("div",{className:"example__section-header"},"Example Description"),Je.default.createElement("p",null,Je.default.createElement(o,{source:t.get("description")}))):null,r&&t.has("value")?Je.default.createElement("section",{className:"example__section"},Je.default.createElement("div",{className:"example__section-header"},"Example Value"),Je.default.createElement(s,{getConfigs:a,value:stringify(t.get("value"))})):null):null}class ExamplesSelect extends Je.default.PureComponent{static defaultProps={examples:Ke.default.Map({}),onSelect:function(){for(var e=arguments.length,t=new Array(e),r=0;r{var e=this;return function(t){let{isSyntheticChange:r=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"function"==typeof e.props.onSelect&&e.props.onSelect(t,{isSyntheticChange:r})}})();_onDomSelect=e=>{if("function"==typeof this.props.onSelect){const t=e.target.selectedOptions[0].getAttribute("value");this._onSelect(t,{isSyntheticChange:!1})}};getCurrentExample=()=>{const{examples:e,currentExampleKey:t}=this.props,r=e.get(t),n=e.keySeq().first(),a=e.get(n);return r||a||Map({})};componentDidMount(){const{onSelect:e,examples:t}=this.props;if("function"==typeof e){const e=t.first(),r=t.keyOf(e);this._onSelect(r,{isSyntheticChange:!0})}}UNSAFE_componentWillReceiveProps(e){const{currentExampleKey:t,examples:r}=e;if(r!==this.props.examples&&!r.has(t)){const e=r.first(),t=r.keyOf(e);this._onSelect(t,{isSyntheticChange:!0})}}render(){const{examples:e,currentExampleKey:t,isValueModified:r,isModifiedValueAvailable:n,showLabels:a}=this.props;return Je.default.createElement("div",{className:"examples-select"},a?Je.default.createElement("span",{className:"examples-select__section-label"},"Examples: "):null,Je.default.createElement("select",{className:"examples-select-element",onChange:this._onDomSelect,value:n&&r?"__MODIFIED__VALUE__":t||""},n?Je.default.createElement("option",{value:"__MODIFIED__VALUE__"},"[Modified value]"):null,e.map(((e,t)=>Je.default.createElement("option",{key:t,value:t},e.get("summary")||t))).valueSeq()))}}const stringifyUnlessList=e=>Ke.List.isList(e)?e:stringify(e);class ExamplesSelectValueRetainer extends Je.default.PureComponent{static defaultProps={userHasEditedBody:!1,examples:(0,Ke.Map)({}),currentNamespace:"__DEFAULT__NAMESPACE__",setRetainRequestBodyValueFlag:()=>{},onSelect:function(){for(var e=arguments.length,t=new Array(e),r=0;r{const{currentNamespace:e}=this.props;return(this.state[e]||(0,Ke.Map)()).toObject()};_setStateForCurrentNamespace=e=>{const{currentNamespace:t}=this.props;return this._setStateForNamespace(t,e)};_setStateForNamespace=(e,t)=>{const r=(this.state[e]||(0,Ke.Map)()).mergeDeep(t);return this.setState({[e]:r})};_isCurrentUserInputSameAsExampleValue=()=>{const{currentUserInputValue:e}=this.props;return this._getCurrentExampleValue()===e};_getValueForExample=(e,t)=>{const{examples:r}=t||this.props;return stringifyUnlessList((r||(0,Ke.Map)({})).getIn([e,"value"]))};_getCurrentExampleValue=e=>{const{currentKey:t}=e||this.props;return this._getValueForExample(t,e||this.props)};_onExamplesSelect=(()=>{var e=this;return function(t){let{isSyntheticChange:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{onSelect:n,updateValue:a,currentUserInputValue:o,userHasEditedBody:s}=e.props,{lastUserEditedValue:l}=e._getStateForCurrentNamespace(),i=e._getValueForExample(t);if("__MODIFIED__VALUE__"===t)return a(stringifyUnlessList(l)),e._setStateForCurrentNamespace({isModifiedValueSelected:!0});if("function"==typeof n){for(var c=arguments.length,u=new Array(c>2?c-2:0),d=2;de.get("value")===t||stringify(e.get("value"))===t));if(i.size){let t;t=i.has(e.currentKey)?e.currentKey:i.keySeq().first(),n(t,{isSyntheticChange:!0})}else t!==this.props.currentUserInputValue&&t!==o&&t!==s&&(this.props.setRetainRequestBodyValueFlag(!0),this._setStateForNamespace(e.currentNamespace,{lastUserEditedValue:e.currentUserInputValue,isModifiedValueSelected:a||t!==l}))}render(){const{currentUserInputValue:e,examples:t,currentKey:r,getComponent:n,userHasEditedBody:a}=this.props,{lastDownstreamValue:o,lastUserEditedValue:s,isModifiedValueSelected:l}=this._getStateForCurrentNamespace(),i=n("ExamplesSelect");return Je.default.createElement(i,{examples:t,currentExampleKey:r,onSelect:this._onExamplesSelect,isModifiedValueAvailable:!!s&&s!==o,isValueModified:void 0!==e&&l&&e!==this._getCurrentExampleValue()||a})}}function oauth2_authorize_authorize(e){let{auth:t,authActions:r,errActions:n,configs:a,authConfigs:o={},currentServer:s}=e,{schema:l,scopes:i,name:c,clientId:u}=t,d=l.get("flow"),p=[];switch(d){case"password":return void r.authorizePassword(t);case"application":case"clientCredentials":case"client_credentials":return void r.authorizeApplication(t);case"accessCode":case"authorizationCode":case"authorization_code":p.push("response_type=code");break;case"implicit":p.push("response_type=token")}"string"==typeof u&&p.push("client_id="+encodeURIComponent(u));let m=a.oauth2RedirectUrl;if(void 0===m)return void n.newAuthErr({authId:c,source:"validation",level:"error",message:"oauth2RedirectUrl configuration is not passed. Oauth2 authorization cannot be performed."});p.push("redirect_uri="+encodeURIComponent(m));let f=[];if(Array.isArray(i)?f=i:Ke.default.List.isList(i)&&(f=i.toArray()),f.length>0){let e=o.scopeSeparator||" ";p.push("scope="+encodeURIComponent(f.join(e)))}let h=btoa(new Date);if(p.push("state="+encodeURIComponent(h)),void 0!==o.realm&&p.push("realm="+encodeURIComponent(o.realm)),("authorizationCode"===d||"authorization_code"===d||"accessCode"===d)&&o.usePkceWithAuthorizationCodeGrant){const e=function generateCodeVerifier(){return b64toB64UrlEncoded(ut()(32).toString("base64"))}(),r=function createCodeChallenge(e){return b64toB64UrlEncoded(pt()("sha256").update(e).digest("base64"))}(e);p.push("code_challenge="+r),p.push("code_challenge_method=S256"),t.codeVerifier=e}let{additionalQueryStringParams:g}=o;for(let e in g)void 0!==g[e]&&p.push([e,g[e]].map(encodeURIComponent).join("="));const y=l.get("authorizationUrl");let v;v=s?(0,vt.default)(sanitizeUrl(y),s,!0).toString():sanitizeUrl(y);let S,_=[v,p.join("&")].join(-1===y.indexOf("?")?"?":"&");S="implicit"===d?r.preAuthorizeImplicit:o.useBasicAuthenticationWithAccessCodeGrant?r.authorizeAccessCodeWithBasicAuthentication:r.authorizeAccessCodeWithFormParams,r.authPopup(_,{auth:t,state:h,redirectUrl:m,callback:S,errCb:n.newAuthErr})}class Oauth2 extends Je.default.Component{constructor(e,t){super(e,t);let{name:r,schema:n,authorized:a,authSelectors:o}=this.props,s=a&&a.get(r),l=o.getConfigs()||{},i=s&&s.get("username")||"",c=s&&s.get("clientId")||l.clientId||"",u=s&&s.get("clientSecret")||l.clientSecret||"",d=s&&s.get("passwordType")||"basic",p=s&&s.get("scopes")||l.scopes||[];"string"==typeof p&&(p=p.split(l.scopeSeparator||" ")),this.state={appName:l.appName,name:r,schema:n,scopes:p,clientId:c,clientSecret:u,username:i,password:"",passwordType:d}}close=e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)};authorize=()=>{let{authActions:e,errActions:t,getConfigs:r,authSelectors:n,oas3Selectors:a}=this.props,o=r(),s=n.getConfigs();t.clear({authId:name,type:"auth",source:"auth"}),oauth2_authorize_authorize({auth:this.state,currentServer:a.serverEffectiveValue(a.selectedServer()),authActions:e,errActions:t,configs:o,authConfigs:s})};onScopeChange=e=>{let{target:t}=e,{checked:r}=t,n=t.dataset.value;if(r&&-1===this.state.scopes.indexOf(n)){let e=this.state.scopes.concat([n]);this.setState({scopes:e})}else!r&&this.state.scopes.indexOf(n)>-1&&this.setState({scopes:this.state.scopes.filter((e=>e!==n))})};onInputChange=e=>{let{target:{dataset:{name:t},value:r}}=e,n={[t]:r};this.setState(n)};selectScopes=e=>{e.target.dataset.all?this.setState({scopes:Array.from((this.props.schema.get("allowedScopes")||this.props.schema.get("scopes")).keys())}):this.setState({scopes:[]})};logout=e=>{e.preventDefault();let{authActions:t,errActions:r,name:n}=this.props;r.clear({authId:n,type:"auth",source:"auth"}),t.logoutWithPersistOption([n])};render(){let{schema:e,getComponent:t,authSelectors:r,errSelectors:n,name:a,specSelectors:o}=this.props;const s=t("Input"),l=t("Row"),i=t("Col"),c=t("Button"),u=t("authError"),d=t("JumpToPath",!0),p=t("Markdown",!0),m=t("InitializedInput"),{isOAS3:f}=o;let h=f()?e.get("openIdConnectUrl"):null;const g="implicit",y="password",v=f()?h?"authorization_code":"authorizationCode":"accessCode",S=f()?h?"client_credentials":"clientCredentials":"application";let _=!!(r.getConfigs()||{}).usePkceWithAuthorizationCodeGrant,b=e.get("flow"),w=b===v&&_?b+" with PKCE":b,C=e.get("allowedScopes")||e.get("scopes"),x=!!r.authorized().get(a),O=n.allErrors().filter((e=>e.get("authId")===a)),k=!O.filter((e=>"validation"===e.get("source"))).size,N=e.get("description");return Je.default.createElement("div",null,Je.default.createElement("h4",null,a," (OAuth2, ",w,") ",Je.default.createElement(d,{path:["securityDefinitions",a]})),this.state.appName?Je.default.createElement("h5",null,"Application: ",this.state.appName," "):null,N&&Je.default.createElement(p,{source:e.get("description")}),x&&Je.default.createElement("h6",null,"Authorized"),h&&Je.default.createElement("p",null,"OpenID Connect URL: ",Je.default.createElement("code",null,h)),(b===g||b===v)&&Je.default.createElement("p",null,"Authorization URL: ",Je.default.createElement("code",null,e.get("authorizationUrl"))),(b===y||b===v||b===S)&&Je.default.createElement("p",null,"Token URL:",Je.default.createElement("code",null," ",e.get("tokenUrl"))),Je.default.createElement("p",{className:"flow"},"Flow: ",Je.default.createElement("code",null,w)),b!==y?null:Je.default.createElement(l,null,Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"oauth_username"},"username:"),x?Je.default.createElement("code",null," ",this.state.username," "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement("input",{id:"oauth_username",type:"text","data-name":"username",onChange:this.onInputChange,autoFocus:!0}))),Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"oauth_password"},"password:"),x?Je.default.createElement("code",null," ****** "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement("input",{id:"oauth_password",type:"password","data-name":"password",onChange:this.onInputChange}))),Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"password_type"},"Client credentials location:"),x?Je.default.createElement("code",null," ",this.state.passwordType," "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement("select",{id:"password_type","data-name":"passwordType",onChange:this.onInputChange},Je.default.createElement("option",{value:"basic"},"Authorization header"),Je.default.createElement("option",{value:"request-body"},"Request body"))))),(b===S||b===g||b===v||b===y)&&(!x||x&&this.state.clientId)&&Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"client_id"},"client_id:"),x?Je.default.createElement("code",null," ****** "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement(m,{id:"client_id",type:"text",required:b===y,initialValue:this.state.clientId,"data-name":"clientId",onChange:this.onInputChange}))),(b===S||b===v||b===y)&&Je.default.createElement(l,null,Je.default.createElement("label",{htmlFor:"client_secret"},"client_secret:"),x?Je.default.createElement("code",null," ****** "):Je.default.createElement(i,{tablet:10,desktop:10},Je.default.createElement(m,{id:"client_secret",initialValue:this.state.clientSecret,type:"password","data-name":"clientSecret",onChange:this.onInputChange}))),!x&&C&&C.size?Je.default.createElement("div",{className:"scopes"},Je.default.createElement("h2",null,"Scopes:",Je.default.createElement("a",{onClick:this.selectScopes,"data-all":!0},"select all"),Je.default.createElement("a",{onClick:this.selectScopes},"select none")),C.map(((e,t)=>Je.default.createElement(l,{key:t},Je.default.createElement("div",{className:"checkbox"},Je.default.createElement(s,{"data-value":t,id:`${t}-${b}-checkbox-${this.state.name}`,disabled:x,checked:this.state.scopes.includes(t),type:"checkbox",onChange:this.onScopeChange}),Je.default.createElement("label",{htmlFor:`${t}-${b}-checkbox-${this.state.name}`},Je.default.createElement("span",{className:"item"}),Je.default.createElement("div",{className:"text"},Je.default.createElement("p",{className:"name"},t),Je.default.createElement("p",{className:"description"},e))))))).toArray()):null,O.valueSeq().map(((e,t)=>Je.default.createElement(u,{error:e,key:t}))),Je.default.createElement("div",{className:"auth-btn-wrapper"},k&&(x?Je.default.createElement(c,{className:"btn modal-btn auth authorize",onClick:this.logout,"aria-label":"Remove authorization"},"Logout"):Je.default.createElement(c,{className:"btn modal-btn auth authorize",onClick:this.authorize,"aria-label":"Apply given OAuth2 credentials"},"Authorize")),Je.default.createElement(c,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close")))}}class Clear extends Je.Component{onClick=()=>{let{specActions:e,path:t,method:r}=this.props;e.clearResponse(t,r),e.clearRequest(t,r)};render(){return Je.default.createElement("button",{className:"btn btn-clear opblock-control__btn",onClick:this.onClick},"Clear")}}const Headers=e=>{let{headers:t}=e;return Je.default.createElement("div",null,Je.default.createElement("h5",null,"Response headers"),Je.default.createElement("pre",{className:"microlight"},t))},Duration=e=>{let{duration:t}=e;return Je.default.createElement("div",null,Je.default.createElement("h5",null,"Request duration"),Je.default.createElement("pre",{className:"microlight"},t," ms"))};class LiveResponse extends Je.default.Component{shouldComponentUpdate(e){return this.props.response!==e.response||this.props.path!==e.path||this.props.method!==e.method||this.props.displayRequestDuration!==e.displayRequestDuration}render(){const{response:e,getComponent:t,getConfigs:r,displayRequestDuration:n,specSelectors:a,path:o,method:s}=this.props,{showMutatedRequest:l,requestSnippetsEnabled:i}=r(),c=l?a.mutatedRequestFor(o,s):a.requestFor(o,s),u=e.get("status"),d=c.get("url"),p=e.get("headers").toJS(),m=e.get("notDocumented"),f=e.get("error"),h=e.get("text"),g=e.get("duration"),y=Object.keys(p),v=p["content-type"]||p["Content-Type"],S=t("responseBody"),_=y.map((e=>{var t=Array.isArray(p[e])?p[e].join():p[e];return Je.default.createElement("span",{className:"headerline",key:e}," ",e,": ",t," ")})),b=0!==_.length,w=t("Markdown",!0),C=t("RequestSnippets",!0),x=t("curl");return Je.default.createElement("div",null,c&&(!0===i||"true"===i?Je.default.createElement(C,{request:c}):Je.default.createElement(x,{request:c,getConfigs:r})),d&&Je.default.createElement("div",null,Je.default.createElement("div",{className:"request-url"},Je.default.createElement("h4",null,"Request URL"),Je.default.createElement("pre",{className:"microlight"},d))),Je.default.createElement("h4",null,"Server response"),Je.default.createElement("table",{className:"responses-table live-responses-table"},Je.default.createElement("thead",null,Je.default.createElement("tr",{className:"responses-header"},Je.default.createElement("td",{className:"col_header response-col_status"},"Code"),Je.default.createElement("td",{className:"col_header response-col_description"},"Details"))),Je.default.createElement("tbody",null,Je.default.createElement("tr",{className:"response"},Je.default.createElement("td",{className:"response-col_status"},u,m?Je.default.createElement("div",{className:"response-undocumented"},Je.default.createElement("i",null," Undocumented ")):null),Je.default.createElement("td",{className:"response-col_description"},f?Je.default.createElement(w,{source:`${""!==e.get("name")?`${e.get("name")}: `:""}${e.get("message")}`}):null,h?Je.default.createElement(S,{content:h,contentType:v,url:d,headers:p,getConfigs:r,getComponent:t}):null,b?Je.default.createElement(Headers,{headers:_}):null,n&&g?Je.default.createElement(Duration,{duration:g}):null)))))}}class OnlineValidatorBadge extends Je.default.Component{constructor(e,t){super(e,t);let{getConfigs:r}=e,{validatorUrl:n}=r();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===n?"https://validator.swagger.io/validator":n}}getDefinitionUrl=()=>{let{specSelectors:e}=this.props;return new vt.default(e.url(),tt.location).toString()};UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:r}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===r?"https://validator.swagger.io/validator":r})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),r=sanitizeUrl(this.state.validatorUrl);return"object"==typeof t&&Object.keys(t).length?null:this.state.url&&requiresValidationURL(this.state.validatorUrl)&&requiresValidationURL(this.state.url)?Je.default.createElement("span",{className:"float-right"},Je.default.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:`${r}/debug?url=${encodeURIComponent(this.state.url)}`},Je.default.createElement(ValidatorImage,{src:`${r}?url=${encodeURIComponent(this.state.url)}`,alt:"Online validator badge"}))):null}}class ValidatorImage extends Je.default.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?Je.default.createElement("img",{alt:"Error"}):this.state.loaded?Je.default.createElement("img",{src:this.props.src,alt:this.props.alt}):null}}class Operations extends Je.default.Component{render(){let{specSelectors:e}=this.props;const t=e.taggedOperations();return 0===t.size?Je.default.createElement("h3",null," No operations defined in spec!"):Je.default.createElement("div",null,t.map(this.renderOperationTag).toArray(),t.size<1?Je.default.createElement("h3",null," No operations defined in spec! "):null)}renderOperationTag=(e,t)=>{const{specSelectors:r,getComponent:n,oas3Selectors:a,layoutSelectors:o,layoutActions:s,getConfigs:l}=this.props,i=r.validOperationMethods(),c=n("OperationContainer",!0),u=n("OperationTag"),d=e.get("operations");return Je.default.createElement(u,{key:"operation-"+t,tagObj:e,tag:t,oas3Selectors:a,layoutSelectors:o,layoutActions:s,getConfigs:l,getComponent:n,specUrl:r.url()},Je.default.createElement("div",{className:"operation-tag-content"},d.map((e=>{const r=e.get("path"),n=e.get("method"),a=Ke.default.List(["paths",r,n]);return-1===i.indexOf(n)?null:Je.default.createElement(c,{key:`${r}-${n}`,specPath:a,op:e,path:r,method:n,tag:t})})).toArray()))}}function isAbsoluteUrl(e){return e.match(/^(?:[a-z]+:)?\/\//i)}function buildBaseUrl(e,t){return e?isAbsoluteUrl(e)?function addProtocol(e){return e.match(/^\/\//i)?`${window.location.protocol}${e}`:e}(e):new URL(e,t).href:t}function safeBuildUrl(e,t){let{selectedServer:r=""}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{return function buildUrl(e,t){let{selectedServer:r=""}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e)return;if(isAbsoluteUrl(e))return e;const n=buildBaseUrl(r,t);return isAbsoluteUrl(n)?new URL(e,n).href:new URL(e,window.location.href).href}(e,t,{selectedServer:r})}catch{return}}class OperationTag extends Je.default.Component{static defaultProps={tagObj:Ke.default.fromJS({}),tag:""};render(){const{tagObj:e,tag:t,children:r,oas3Selectors:n,layoutSelectors:a,layoutActions:o,getConfigs:s,getComponent:l,specUrl:i}=this.props;let{docExpansion:c,deepLinking:u}=s();const d=u&&"false"!==u,p=l("Collapse"),m=l("Markdown",!0),f=l("DeepLink"),h=l("Link"),g=l("ArrowUpIcon"),y=l("ArrowDownIcon");let v,S=e.getIn(["tagDetails","description"],null),_=e.getIn(["tagDetails","externalDocs","description"]),b=e.getIn(["tagDetails","externalDocs","url"]);v=isFunc(n)&&isFunc(n.selectedServer)?safeBuildUrl(b,i,{selectedServer:n.selectedServer()}):b;let w=["operations-tag",t],C=a.isShown(w,"full"===c||"list"===c);return Je.default.createElement("div",{className:C?"opblock-tag-section is-open":"opblock-tag-section"},Je.default.createElement("h3",{onClick:()=>o.show(w,!C),className:S?"opblock-tag":"opblock-tag no-desc",id:w.map((e=>escapeDeepLinkPath(e))).join("-"),"data-tag":t,"data-is-open":C},Je.default.createElement(f,{enabled:d,isShown:C,path:createDeepLinkPath(t),text:t}),S?Je.default.createElement("small",null,Je.default.createElement(m,{source:S})):Je.default.createElement("small",null),v?Je.default.createElement("div",{className:"info__externaldocs"},Je.default.createElement("small",null,Je.default.createElement(h,{href:sanitizeUrl(v),onClick:e=>e.stopPropagation(),target:"_blank"},_||v))):null,Je.default.createElement("button",{"aria-expanded":C,className:"expand-operation",title:C?"Collapse operation":"Expand operation",onClick:()=>o.show(w,!C)},C?Je.default.createElement(g,{className:"arrow"}):Je.default.createElement(y,{className:"arrow"}))),Je.default.createElement(p,{isOpened:C},r))}}var Ea;function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;tJe.createElement("svg",_extends({xmlns:"http://www.w3.org/2000/svg",width:200,height:200,className:"rolling-load_svg__lds-rolling",preserveAspectRatio:"xMidYMid",style:{backgroundImage:"none",backgroundPosition:"initial initial",backgroundRepeat:"initial initial"},viewBox:"0 0 100 100"},e),Ea||(Ea=Je.createElement("circle",{cx:50,cy:50,r:35,fill:"none",stroke:"#555",strokeDasharray:"164.93361431346415 56.97787143782138",strokeWidth:10},Je.createElement("animateTransform",{attributeName:"transform",begin:"0s",calcMode:"linear",dur:"1s",keyTimes:"0;1",repeatCount:"indefinite",type:"rotate",values:"0 50 50;360 50 50"}))));class Operation extends Je.PureComponent{static defaultProps={operation:null,response:null,request:null,specPath:(0,Ke.List)(),summary:""};render(){let{specPath:e,response:t,request:r,toggleShown:n,onTryoutClick:a,onResetClick:o,onCancelClick:s,onExecute:l,fn:i,getComponent:c,getConfigs:u,specActions:d,specSelectors:p,authActions:m,authSelectors:f,oas3Actions:h,oas3Selectors:g}=this.props,y=this.props.operation,{deprecated:v,isShown:S,path:_,method:b,op:w,tag:C,operationId:x,allowTryItOut:O,displayRequestDuration:k,tryItOutEnabled:N,executeInProgress:A}=y.toJS(),{description:I,externalDocs:R,schemes:T}=w;const B=R?safeBuildUrl(R.url,p.url(),{selectedServer:g.selectedServer()}):"";let j=y.getIn(["op"]),P=j.get("responses"),M=function getList(e,t){if(!Ke.default.Iterable.isIterable(e))return Ke.default.List();let r=e.getIn(Array.isArray(t)?t:[t]);return Ke.default.List.isList(r)?r:Ke.default.List()}(j,["parameters"]),q=p.operationScheme(_,b),L=["operations",C,x],D=getExtensions(j);const U=c("responses"),$=c("parameters"),J=c("execute"),V=c("clear"),K=c("Collapse"),z=c("Markdown",!0),F=c("schemes"),W=c("OperationServers"),H=c("OperationExt"),G=c("OperationSummary"),X=c("Link"),{showExtensions:Y}=u();if(P&&t&&t.size>0){let e=!P.get(String(t.get("status")))&&!P.get("default");t=t.set("notDocumented",e)}let Q=[_,b];const Z=p.validationErrors([_,b]);return Je.default.createElement("div",{className:v?"opblock opblock-deprecated":S?`opblock opblock-${b} is-open`:`opblock opblock-${b}`,id:escapeDeepLinkPath(L.join("-"))},Je.default.createElement(G,{operationProps:y,isShown:S,toggleShown:n,getComponent:c,authActions:m,authSelectors:f,specPath:e}),Je.default.createElement(K,{isOpened:S},Je.default.createElement("div",{className:"opblock-body"},j&&j.size||null===j?null:Je.default.createElement(rolling_load,{height:"32px",width:"32px",className:"opblock-loading-animation"}),v&&Je.default.createElement("h4",{className:"opblock-title_normal"}," Warning: Deprecated"),I&&Je.default.createElement("div",{className:"opblock-description-wrapper"},Je.default.createElement("div",{className:"opblock-description"},Je.default.createElement(z,{source:I}))),B?Je.default.createElement("div",{className:"opblock-external-docs-wrapper"},Je.default.createElement("h4",{className:"opblock-title_normal"},"Find more details"),Je.default.createElement("div",{className:"opblock-external-docs"},R.description&&Je.default.createElement("span",{className:"opblock-external-docs__description"},Je.default.createElement(z,{source:R.description})),Je.default.createElement(X,{target:"_blank",className:"opblock-external-docs__link",href:sanitizeUrl(B)},B))):null,j&&j.size?Je.default.createElement($,{parameters:M,specPath:e.push("parameters"),operation:j,onChangeKey:Q,onTryoutClick:a,onResetClick:o,onCancelClick:s,tryItOutEnabled:N,allowTryItOut:O,fn:i,getComponent:c,specActions:d,specSelectors:p,pathMethod:[_,b],getConfigs:u,oas3Actions:h,oas3Selectors:g}):null,N?Je.default.createElement(W,{getComponent:c,path:_,method:b,operationServers:j.get("servers"),pathServers:p.paths().getIn([_,"servers"]),getSelectedServer:g.selectedServer,setSelectedServer:h.setSelectedServer,setServerVariableValue:h.setServerVariableValue,getServerVariable:g.serverVariableValue,getEffectiveServerValue:g.serverEffectiveValue}):null,N&&O&&T&&T.size?Je.default.createElement("div",{className:"opblock-schemes"},Je.default.createElement(F,{schemes:T,path:_,method:b,specActions:d,currentScheme:q})):null,!N||!O||Z.length<=0?null:Je.default.createElement("div",{className:"validation-errors errors-wrapper"},"Please correct the following validation errors and try again.",Je.default.createElement("ul",null,Z.map(((e,t)=>Je.default.createElement("li",{key:t}," ",e," "))))),Je.default.createElement("div",{className:N&&t&&O?"btn-group":"execute-wrapper"},N&&O?Je.default.createElement(J,{operation:j,specActions:d,specSelectors:p,oas3Selectors:g,oas3Actions:h,path:_,method:b,onExecute:l,disabled:A}):null,N&&t&&O?Je.default.createElement(V,{specActions:d,path:_,method:b}):null),A?Je.default.createElement("div",{className:"loading-container"},Je.default.createElement("div",{className:"loading"})):null,P?Je.default.createElement(U,{responses:P,request:r,tryItOutResponse:t,getComponent:c,getConfigs:u,specSelectors:p,oas3Actions:h,oas3Selectors:g,specActions:d,produces:p.producesOptionsFor([_,b]),producesValue:p.currentProducesFor([_,b]),specPath:e.push("responses"),path:_,method:b,displayRequestDuration:k,fn:i}):null,Y&&D.size?Je.default.createElement(H,{extensions:D,getComponent:c}):null)))}}class OperationContainer extends Je.PureComponent{constructor(e,t){super(e,t);const{tryItOutEnabled:r}=e.getConfigs();this.state={tryItOutEnabled:!0===r||"true"===r,executeInProgress:!1}}static defaultProps={showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1,displayRequestDuration:!1};mapStateToProps(e,t){const{op:r,layoutSelectors:n,getConfigs:a}=t,{docExpansion:o,deepLinking:s,displayOperationId:l,displayRequestDuration:i,supportedSubmitMethods:c}=a(),u=n.showSummary(),d=r.getIn(["operation","__originalOperationId"])||r.getIn(["operation","operationId"])||(0,da.opId)(r.get("operation"),t.path,t.method)||r.get("id"),p=["operations",t.tag,d],m=s&&"false"!==s,f=c.indexOf(t.method)>=0&&(void 0===t.allowTryItOut?t.specSelectors.allowTryItOutFor(t.path,t.method):t.allowTryItOut),h=r.getIn(["operation","security"])||t.specSelectors.security();return{operationId:d,isDeepLinkingEnabled:m,showSummary:u,displayOperationId:l,displayRequestDuration:i,allowTryItOut:f,security:h,isAuthorized:t.authSelectors.isAuthorized(h),isShown:n.isShown(p,"full"===o),jumpToKey:`paths.${t.path}.${t.method}`,response:t.specSelectors.responseFor(t.path,t.method),request:t.specSelectors.requestFor(t.path,t.method)}}componentDidMount(){const{isShown:e}=this.props,t=this.getResolvedSubtree();e&&void 0===t&&this.requestResolvedSubtree()}UNSAFE_componentWillReceiveProps(e){const{response:t,isShown:r}=e,n=this.getResolvedSubtree();t!==this.props.response&&this.setState({executeInProgress:!1}),r&&void 0===n&&this.requestResolvedSubtree()}toggleShown=()=>{let{layoutActions:e,tag:t,operationId:r,isShown:n}=this.props;const a=this.getResolvedSubtree();n||void 0!==a||this.requestResolvedSubtree(),e.show(["operations",t,r],!n)};onCancelClick=()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})};onTryoutClick=()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})};onResetClick=e=>{const t=this.props.oas3Selectors.selectDefaultRequestBodyValue(...e);this.props.oas3Actions.setRequestBodyValue({value:t,pathMethod:e})};onExecute=()=>{this.setState({executeInProgress:!0})};getResolvedSubtree=()=>{const{specSelectors:e,path:t,method:r,specPath:n}=this.props;return n?e.specResolvedSubtree(n.toJS()):e.specResolvedSubtree(["paths",t,r])};requestResolvedSubtree=()=>{const{specActions:e,path:t,method:r,specPath:n}=this.props;return n?e.requestResolvedSubtree(n.toJS()):e.requestResolvedSubtree(["paths",t,r])};render(){let{op:e,tag:t,path:r,method:n,security:a,isAuthorized:o,operationId:s,showSummary:l,isShown:i,jumpToKey:c,allowTryItOut:u,response:d,request:p,displayOperationId:m,displayRequestDuration:f,isDeepLinkingEnabled:h,specPath:g,specSelectors:y,specActions:v,getComponent:S,getConfigs:_,layoutSelectors:b,layoutActions:w,authActions:C,authSelectors:x,oas3Actions:O,oas3Selectors:k,fn:N}=this.props;const A=S("operation"),I=this.getResolvedSubtree()||(0,Ke.Map)(),R=(0,Ke.fromJS)({op:I,tag:t,path:r,summary:e.getIn(["operation","summary"])||"",deprecated:I.get("deprecated")||e.getIn(["operation","deprecated"])||!1,method:n,security:a,isAuthorized:o,operationId:s,originalOperationId:I.getIn(["operation","__originalOperationId"]),showSummary:l,isShown:i,jumpToKey:c,allowTryItOut:u,request:p,displayOperationId:m,displayRequestDuration:f,isDeepLinkingEnabled:h,executeInProgress:this.state.executeInProgress,tryItOutEnabled:this.state.tryItOutEnabled});return Je.default.createElement(A,{operation:R,response:d,request:p,isShown:i,toggleShown:this.toggleShown,onTryoutClick:this.onTryoutClick,onResetClick:this.onResetClick,onCancelClick:this.onCancelClick,onExecute:this.onExecute,specPath:g,specActions:v,specSelectors:y,oas3Actions:O,oas3Selectors:k,layoutActions:w,layoutSelectors:b,authActions:C,authSelectors:x,getComponent:S,getConfigs:_,fn:N})}}var va=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ue.default});class OperationSummary extends Je.PureComponent{static defaultProps={operationProps:null,specPath:(0,Ke.List)(),summary:""};render(){let{isShown:e,toggleShown:t,getComponent:r,authActions:n,authSelectors:a,operationProps:o,specPath:s}=this.props,{summary:l,isAuthorized:i,method:c,op:u,showSummary:d,path:p,operationId:m,originalOperationId:f,displayOperationId:h}=o.toJS(),{summary:g}=u,y=o.get("security");const v=r("authorizeOperationBtn",!0),S=r("OperationSummaryMethod"),_=r("OperationSummaryPath"),b=r("JumpToPath",!0),w=r("CopyToClipboardBtn",!0),C=r("ArrowUpIcon"),x=r("ArrowDownIcon"),O=y&&!!y.count(),k=O&&1===y.size&&y.first().isEmpty(),N=!O||k;return Je.default.createElement("div",{className:`opblock-summary opblock-summary-${c}`},Je.default.createElement("button",{"aria-label":`${c} ${p.replace(/\//g,"​/")}`,"aria-expanded":e,className:"opblock-summary-control",onClick:t},Je.default.createElement(S,{method:c}),Je.default.createElement(_,{getComponent:r,operationProps:o,specPath:s}),d?Je.default.createElement("div",{className:"opblock-summary-description"},(0,va.default)(g||l)):null,h&&(f||m)?Je.default.createElement("span",{className:"opblock-summary-operation-id"},f||m):null),Je.default.createElement(w,{textToCopy:`${s.get(1)}`}),N?null:Je.default.createElement(v,{isAuthorized:i,onClick:()=>{const e=a.definitionsForRequirements(y);n.showDefinitions(e)}}),Je.default.createElement(b,{path:s}),Je.default.createElement("button",{"aria-label":`${c} ${p.replace(/\//g,"​/")}`,className:"opblock-control-arrow","aria-expanded":e,tabIndex:"-1",onClick:t},e?Je.default.createElement(C,{className:"arrow"}):Je.default.createElement(x,{className:"arrow"})))}}class OperationSummaryMethod extends Je.PureComponent{static defaultProps={operationProps:null};render(){let{method:e}=this.props;return Je.default.createElement("span",{className:"opblock-summary-method"},e.toUpperCase())}}class OperationSummaryPath extends Je.PureComponent{render(){let{getComponent:e,operationProps:t}=this.props,{deprecated:r,isShown:n,path:a,tag:o,operationId:s,isDeepLinkingEnabled:l}=t.toJS();const i=a.split(/(?=\/)/g);for(let e=1;e{let{extensions:t,getComponent:r}=e,n=r("OperationExtRow");return Je.default.createElement("div",{className:"opblock-section"},Je.default.createElement("div",{className:"opblock-section-header"},Je.default.createElement("h4",null,"Extensions")),Je.default.createElement("div",{className:"table-container"},Je.default.createElement("table",null,Je.default.createElement("thead",null,Je.default.createElement("tr",null,Je.default.createElement("td",{className:"col_header"},"Field"),Je.default.createElement("td",{className:"col_header"},"Value"))),Je.default.createElement("tbody",null,t.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(n,{key:`${t}-${r}`,xKey:t,xVal:r})}))))))};var operation_extension_row=e=>{let{xKey:t,xVal:r}=e;const n=r?r.toJS?r.toJS():r:null;return Je.default.createElement("tr",null,Je.default.createElement("td",null,t),Je.default.createElement("td",null,JSON.stringify(n)))},Sa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>de.default}),_a=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>pe.default});const HighlightCode=e=>{let{value:t,fileName:r,className:n,downloadable:a,getConfigs:o,canCopy:s,language:l}=e;const i=(0,lt.default)(o)?o():null,c=!1!==(0,Gt.default)(i,"syntaxHighlight")&&(0,Gt.default)(i,"syntaxHighlight.activated",!0),u=(0,Je.useRef)(null);(0,Je.useEffect)((()=>{const e=Array.from(u.current.childNodes).filter((e=>!!e.nodeType&&e.classList.contains("microlight")));return e.forEach((e=>e.addEventListener("mousewheel",handlePreventYScrollingBeyondElement,{passive:!1}))),()=>{e.forEach((e=>e.removeEventListener("mousewheel",handlePreventYScrollingBeyondElement)))}}),[t,n,l]);const handlePreventYScrollingBeyondElement=e=>{const{target:t,deltaY:r}=e,{scrollHeight:n,offsetHeight:a,scrollTop:o}=t;n>a&&(0===o&&r<0||a+o>=n&&r>0)&&e.preventDefault()};return Je.default.createElement("div",{className:"highlight-code",ref:u},s&&Je.default.createElement("div",{className:"copy-to-clipboard"},Je.default.createElement(Er.CopyToClipboard,{text:t},Je.default.createElement("button",null))),a?Je.default.createElement("button",{className:"download-contents",onClick:()=>{(0,_a.default)(t,r)}},"Download"):null,c?Je.default.createElement(vr.default,{language:l,className:(0,Sa.default)(n,"microlight"),style:getStyle((0,Gt.default)(i,"syntaxHighlight.theme","agate"))},t):Je.default.createElement("pre",{className:(0,Sa.default)(n,"microlight")},t))};HighlightCode.defaultProps={fileName:"response.txt"};var ba=HighlightCode;class Responses extends Je.default.Component{static defaultProps={tryItOutResponse:null,produces:(0,Ke.fromJS)(["application/json"]),displayRequestDuration:!1};onChangeProducesWrapper=e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e);onResponseContentTypeChange=e=>{let{controlsAcceptHeader:t,value:r}=e;const{oas3Actions:n,path:a,method:o}=this.props;t&&n.setResponseContentType({value:r,path:a,method:o})};render(){let{responses:e,tryItOutResponse:t,getComponent:r,getConfigs:n,specSelectors:a,fn:o,producesValue:s,displayRequestDuration:l,specPath:i,path:c,method:u,oas3Selectors:d,oas3Actions:p}=this.props,m=function defaultStatusCode(e){let t=e.keySeq();return t.contains(gt)?gt:t.filter((e=>"2"===(e+"")[0])).sort().first()}(e);const f=r("contentType"),h=r("liveResponse"),g=r("response");let y=this.props.produces&&this.props.produces.size?this.props.produces:Responses.defaultProps.produces;const v=a.isOAS3()?function getAcceptControllingResponse(e){if(!Ke.default.OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=e.find(((e,t)=>t.startsWith("2")&&Object.keys(e.get("content")||{}).length>0)),r=e.get("default")||Ke.default.OrderedMap(),n=(r.get("content")||Ke.default.OrderedMap()).keySeq().toJS().length?r:null;return t||n}(e):null,S=function createHtmlReadyId(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"_";return e.replace(/[^\w-]/g,t)}(`${u}${c}_responses`),_=`${S}_select`;return Je.default.createElement("div",{className:"responses-wrapper"},Je.default.createElement("div",{className:"opblock-section-header"},Je.default.createElement("h4",null,"Responses"),a.isOAS3()?null:Je.default.createElement("label",{htmlFor:_},Je.default.createElement("span",null,"Response content type"),Je.default.createElement(f,{value:s,ariaControls:S,ariaLabel:"Response content type",className:"execute-content-type",contentTypes:y,controlId:_,onChange:this.onChangeProducesWrapper}))),Je.default.createElement("div",{className:"responses-inner"},t?Je.default.createElement("div",null,Je.default.createElement(h,{response:t,getComponent:r,getConfigs:n,specSelectors:a,path:this.props.path,method:this.props.method,displayRequestDuration:l}),Je.default.createElement("h4",null,"Responses")):null,Je.default.createElement("table",{"aria-live":"polite",className:"responses-table",id:S,role:"region"},Je.default.createElement("thead",null,Je.default.createElement("tr",{className:"responses-header"},Je.default.createElement("td",{className:"col_header response-col_status"},"Code"),Je.default.createElement("td",{className:"col_header response-col_description"},"Description"),a.isOAS3()?Je.default.createElement("td",{className:"col col_header response-col_links"},"Links"):null)),Je.default.createElement("tbody",null,e.entrySeq().map((e=>{let[l,f]=e,h=t&&t.get("status")==l?"response_current":"";return Je.default.createElement(g,{key:l,path:c,method:u,specPath:i.push(l),isDefault:m===l,fn:o,className:h,code:l,response:f,specSelectors:a,controlsAcceptHeader:f===v,onContentTypeChange:this.onResponseContentTypeChange,contentType:s,getConfigs:n,activeExamplesKey:d.activeExamplesMember(c,u,"responses",l),oas3Actions:p,getComponent:r})})).toArray()))))}}function getKnownSyntaxHighlighterLanguage(e){return function canJsonParse(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?"json":null}class Response extends Je.default.Component{constructor(e,t){super(e,t),this.state={responseContentType:""}}static defaultProps={response:(0,Ke.fromJS)({}),onContentTypeChange:()=>{}};_onContentTypeChange=e=>{const{onContentTypeChange:t,controlsAcceptHeader:r}=this.props;this.setState({responseContentType:e}),t({value:e,controlsAcceptHeader:r})};getTargetExamplesKey=()=>{const{response:e,contentType:t,activeExamplesKey:r}=this.props,n=this.state.responseContentType||t,a=e.getIn(["content",n],(0,Ke.Map)({})).get("examples",null).keySeq().first();return r||a};render(){let{path:e,method:t,code:r,response:n,className:a,specPath:o,fn:s,getComponent:l,getConfigs:i,specSelectors:c,contentType:u,controlsAcceptHeader:d,oas3Actions:p}=this.props,{inferSchema:m,getSampleSchema:f}=s,h=c.isOAS3();const{showExtensions:g}=i();let y=g?getExtensions(n):null,v=n.get("headers"),S=n.get("links");const _=l("ResponseExtension"),b=l("headers"),w=l("highlightCode"),C=l("modelExample"),x=l("Markdown",!0),O=l("operationLink"),k=l("contentType"),N=l("ExamplesSelect"),A=l("Example");var I,R;const T=this.state.responseContentType||u,B=n.getIn(["content",T],(0,Ke.Map)({})),j=B.get("examples",null);if(h){const e=B.get("schema");I=e?m(e.toJS()):null,R=e?(0,Ke.List)(["content",this.state.responseContentType,"schema"]):o}else I=n.get("schema"),R=n.has("schema")?o.push("schema"):o;let P,M,q=!1,L={includeReadOnly:!0};if(h)if(M=B.get("schema")?.toJS(),j){const e=this.getTargetExamplesKey(),getMediaTypeExample=e=>e.get("value");P=getMediaTypeExample(j.get(e,(0,Ke.Map)({}))),void 0===P&&(P=getMediaTypeExample(j.values().next().value)),q=!0}else void 0!==B.get("example")&&(P=B.get("example"),q=!0);else{M=I,L={...L,includeWriteOnly:!0};const e=n.getIn(["examples",T]);e&&(P=e,q=!0)}let D=((e,t,r)=>{if(null!=e){let n=null;return getKnownSyntaxHighlighterLanguage(e)&&(n="json"),Je.default.createElement("div",null,Je.default.createElement(t,{className:"example",getConfigs:r,language:n,value:stringify(e)}))}return null})(f(M,T,L,q?P:void 0),w,i);return Je.default.createElement("tr",{className:"response "+(a||""),"data-code":r},Je.default.createElement("td",{className:"response-col_status"},r),Je.default.createElement("td",{className:"response-col_description"},Je.default.createElement("div",{className:"response-col_description__inner"},Je.default.createElement(x,{source:n.get("description")})),g&&y.size?y.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,xKey:t,xVal:r})})):null,h&&n.get("content")?Je.default.createElement("section",{className:"response-controls"},Je.default.createElement("div",{className:(0,Sa.default)("response-control-media-type",{"response-control-media-type--accept-controller":d})},Je.default.createElement("small",{className:"response-control-media-type__title"},"Media type"),Je.default.createElement(k,{value:this.state.responseContentType,contentTypes:n.get("content")?n.get("content").keySeq():(0,Ke.Seq)(),onChange:this._onContentTypeChange,ariaLabel:"Media Type"}),d?Je.default.createElement("small",{className:"response-control-media-type__accept-message"},"Controls ",Je.default.createElement("code",null,"Accept")," header."):null),j?Je.default.createElement("div",{className:"response-control-examples"},Je.default.createElement("small",{className:"response-control-examples__title"},"Examples"),Je.default.createElement(N,{examples:j,currentExampleKey:this.getTargetExamplesKey(),onSelect:n=>p.setActiveExamplesMember({name:n,pathMethod:[e,t],contextType:"responses",contextName:r}),showLabels:!1})):null):null,D||I?Je.default.createElement(C,{specPath:R,getComponent:l,getConfigs:i,specSelectors:c,schema:fromJSOrdered(I),example:D,includeReadOnly:!0}):null,h&&j?Je.default.createElement(A,{example:j.get(this.getTargetExamplesKey(),(0,Ke.Map)({})),getComponent:l,getConfigs:i,omitValue:!0}):null,v?Je.default.createElement(b,{headers:v,getComponent:l}):null),h?Je.default.createElement("td",{className:"response-col_links"},S?S.toSeq().entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(O,{key:t,name:t,link:r,getComponent:l})})):Je.default.createElement("i",null,"No links")):null)}}var response_extension=e=>{let{xKey:t,xVal:r}=e;return Je.default.createElement("div",{className:"response__extension"},t,": ",String(r))},wa=__webpack_require__(131),Ca=__webpack_require__.n(wa),xa=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>me.default});class ResponseBody extends Je.default.PureComponent{state={parsedContent:null};updateParsedContent=e=>{const{content:t}=this.props;if(e!==t)if(t&&t instanceof Blob){var r=new FileReader;r.onload=()=>{this.setState({parsedContent:r.result})},r.readAsText(t)}else this.setState({parsedContent:t.toString()})};componentDidMount(){this.updateParsedContent(null)}componentDidUpdate(e){this.updateParsedContent(e.content)}render(){let{content:e,contentType:t,url:r,headers:n={},getConfigs:a,getComponent:o}=this.props;const{parsedContent:s}=this.state,l=o("highlightCode"),i="response_"+(new Date).getTime();let c,u;if(r=r||"",(/^application\/octet-stream/i.test(t)||n["Content-Disposition"]&&/attachment/i.test(n["Content-Disposition"])||n["content-disposition"]&&/attachment/i.test(n["content-disposition"])||n["Content-Description"]&&/File Transfer/i.test(n["Content-Description"])||n["content-description"]&&/File Transfer/i.test(n["content-description"]))&&e.size>0)if("Blob"in window){let a=t||"text/html",o=e instanceof Blob?e:new Blob([e],{type:a}),s=window.URL.createObjectURL(o),l=[a,r.substr(r.lastIndexOf("/")+1),s].join(":"),i=n["content-disposition"]||n["Content-Disposition"];if(void 0!==i){let e=function extractFileNameFromContentDispositionHeader(e){let t;if([/filename\*=[^']+'\w*'"([^"]+)";?/i,/filename\*=[^']+'\w*'([^;]+);?/i,/filename="([^;]*);?"/i,/filename=([^;]*);?/i].some((r=>(t=r.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}(i);null!==e&&(l=e)}u=tt.navigator&&tt.navigator.msSaveOrOpenBlob?Je.default.createElement("div",null,Je.default.createElement("a",{href:s,onClick:()=>tt.navigator.msSaveOrOpenBlob(o,l)},"Download file")):Je.default.createElement("div",null,Je.default.createElement("a",{href:s,download:l},"Download file"))}else u=Je.default.createElement("pre",{className:"microlight"},"Download headers detected but your browser does not support downloading binary via XHR (Blob).");else if(/json/i.test(t)){let t=null;getKnownSyntaxHighlighterLanguage(e)&&(t="json");try{c=JSON.stringify(JSON.parse(e),null," ")}catch(t){c="can't parse JSON. Raw result:\n\n"+e}u=Je.default.createElement(l,{language:t,downloadable:!0,fileName:`${i}.json`,value:c,getConfigs:a,canCopy:!0})}else/xml/i.test(t)?(c=Ca()(e,{textNodesOnSameLine:!0,indentor:" "}),u=Je.default.createElement(l,{downloadable:!0,fileName:`${i}.xml`,value:c,getConfigs:a,canCopy:!0})):u="text/html"===(0,xa.default)(t)||/text\/plain/.test(t)?Je.default.createElement(l,{downloadable:!0,fileName:`${i}.html`,value:e,getConfigs:a,canCopy:!0}):"text/csv"===(0,xa.default)(t)||/text\/csv/.test(t)?Je.default.createElement(l,{downloadable:!0,fileName:`${i}.csv`,value:e,getConfigs:a,canCopy:!0}):/^image\//i.test(t)?t.includes("svg")?Je.default.createElement("div",null," ",e," "):Je.default.createElement("img",{src:window.URL.createObjectURL(e)}):/^audio\//i.test(t)?Je.default.createElement("pre",{className:"microlight"},Je.default.createElement("audio",{controls:!0,key:r},Je.default.createElement("source",{src:r,type:t}))):"string"==typeof e?Je.default.createElement(l,{downloadable:!0,fileName:`${i}.txt`,value:e,getConfigs:a,canCopy:!0}):e.size>0?s?Je.default.createElement("div",null,Je.default.createElement("p",{className:"i"},"Unrecognized response type; displaying content as text."),Je.default.createElement(l,{downloadable:!0,fileName:`${i}.txt`,value:s,getConfigs:a,canCopy:!0})):Je.default.createElement("p",{className:"i"},"Unrecognized response type; unable to display."):null;return u?Je.default.createElement("div",null,Je.default.createElement("h5",null,"Response body"),u):null}}class Parameters extends Je.Component{constructor(e){super(e),this.state={callbackVisible:!1,parametersVisible:!0}}static defaultProps={onTryoutClick:Function.prototype,onCancelClick:Function.prototype,tryItOutEnabled:!1,allowTryItOut:!0,onChangeKey:[],specPath:[]};onChange=(e,t,r)=>{let{specActions:{changeParamByIdentity:n},onChangeKey:a}=this.props;n(a,e,t,r)};onChangeConsumesWrapper=e=>{let{specActions:{changeConsumesValue:t},onChangeKey:r}=this.props;t(r,e)};toggleTab=e=>"parameters"===e?this.setState({parametersVisible:!0,callbackVisible:!1}):"callbacks"===e?this.setState({callbackVisible:!0,parametersVisible:!1}):void 0;onChangeMediaType=e=>{let{value:t,pathMethod:r}=e,{specActions:n,oas3Selectors:a,oas3Actions:o}=this.props;const s=a.hasUserEditedBody(...r),l=a.shouldRetainRequestBodyValue(...r);o.setRequestContentType({value:t,pathMethod:r}),o.initRequestBodyValidateError({pathMethod:r}),s||(l||o.setRequestBodyValue({value:void 0,pathMethod:r}),n.clearResponse(...r),n.clearRequest(...r),n.clearValidateParams(r))};render(){let{onTryoutClick:e,onResetClick:t,parameters:r,allowTryItOut:n,tryItOutEnabled:a,specPath:o,fn:s,getComponent:l,getConfigs:i,specSelectors:c,specActions:u,pathMethod:d,oas3Actions:p,oas3Selectors:m,operation:f}=this.props;const h=l("parameterRow"),g=l("TryItOutButton"),y=l("contentType"),v=l("Callbacks",!0),S=l("RequestBody",!0),_=a&&n,b=c.isOAS3(),w=f.get("requestBody"),C=Object.values(r.reduce(((e,t)=>{const r=t.get("in");return e[r]??=[],e[r].push(t),e}),{})).reduce(((e,t)=>e.concat(t)),[]);return Je.default.createElement("div",{className:"opblock-section"},Je.default.createElement("div",{className:"opblock-section-header"},b?Je.default.createElement("div",{className:"tab-header"},Je.default.createElement("div",{onClick:()=>this.toggleTab("parameters"),className:`tab-item ${this.state.parametersVisible&&"active"}`},Je.default.createElement("h4",{className:"opblock-title"},Je.default.createElement("span",null,"Parameters"))),f.get("callbacks")?Je.default.createElement("div",{onClick:()=>this.toggleTab("callbacks"),className:`tab-item ${this.state.callbackVisible&&"active"}`},Je.default.createElement("h4",{className:"opblock-title"},Je.default.createElement("span",null,"Callbacks"))):null):Je.default.createElement("div",{className:"tab-header"},Je.default.createElement("h4",{className:"opblock-title"},"Parameters")),n?Je.default.createElement(g,{isOAS3:c.isOAS3(),hasUserEditedBody:m.hasUserEditedBody(...d),enabled:a,onCancelClick:this.props.onCancelClick,onTryoutClick:e,onResetClick:()=>t(d)}):null),this.state.parametersVisible?Je.default.createElement("div",{className:"parameters-container"},C.length?Je.default.createElement("div",{className:"table-container"},Je.default.createElement("table",{className:"parameters"},Je.default.createElement("thead",null,Je.default.createElement("tr",null,Je.default.createElement("th",{className:"col_header parameters-col_name"},"Name"),Je.default.createElement("th",{className:"col_header parameters-col_description"},"Description"))),Je.default.createElement("tbody",null,C.map(((e,t)=>Je.default.createElement(h,{fn:s,specPath:o.push(t.toString()),getComponent:l,getConfigs:i,rawParam:e,param:c.parameterWithMetaByIdentity(d,e),key:`${e.get("in")}.${e.get("name")}`,onChange:this.onChange,onChangeConsumes:this.onChangeConsumesWrapper,specSelectors:c,specActions:u,oas3Actions:p,oas3Selectors:m,pathMethod:d,isExecute:_})))))):Je.default.createElement("div",{className:"opblock-description-wrapper"},Je.default.createElement("p",null,"No parameters"))):null,this.state.callbackVisible?Je.default.createElement("div",{className:"callbacks-container opblock-description-wrapper"},Je.default.createElement(v,{callbacks:(0,Ke.Map)(f.get("callbacks")),specPath:o.slice(0,-1).push("callbacks")})):null,b&&w&&this.state.parametersVisible&&Je.default.createElement("div",{className:"opblock-section opblock-section-request-body"},Je.default.createElement("div",{className:"opblock-section-header"},Je.default.createElement("h4",{className:`opblock-title parameter__name ${w.get("required")&&"required"}`},"Request body"),Je.default.createElement("label",null,Je.default.createElement(y,{value:m.requestContentType(...d),contentTypes:w.get("content",(0,Ke.List)()).keySeq(),onChange:e=>{this.onChangeMediaType({value:e,pathMethod:d})},className:"body-param-content-type",ariaLabel:"Request content type"}))),Je.default.createElement("div",{className:"opblock-description-wrapper"},Je.default.createElement(S,{setRetainRequestBodyValueFlag:e=>p.setRetainRequestBodyValueFlag({value:e,pathMethod:d}),userHasEditedBody:m.hasUserEditedBody(...d),specPath:o.slice(0,-1).push("requestBody"),requestBody:w,requestBodyValue:m.requestBodyValue(...d),requestBodyInclusionSetting:m.requestBodyInclusionSetting(...d),requestBodyErrors:m.requestBodyErrors(...d),isExecute:_,getConfigs:i,activeExamplesKey:m.activeExamplesMember(...d,"requestBody","requestBody"),updateActiveExamplesKey:e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:"requestBody",contextName:"requestBody"})},onChange:(e,t)=>{if(t){const r=m.requestBodyValue(...d),n=Ke.Map.isMap(r)?r:(0,Ke.Map)();return p.setRequestBodyValue({pathMethod:d,value:n.setIn(t,e)})}p.setRequestBodyValue({value:e,pathMethod:d})},onChangeIncludeEmpty:(e,t)=>{p.setRequestBodyInclusion({pathMethod:d,value:t,name:e})},contentType:m.requestContentType(...d)}))))}}var parameter_extension=e=>{let{xKey:t,xVal:r}=e;return Je.default.createElement("div",{className:"parameter__extension"},t,": ",String(r))};const Oa={onChange:()=>{},isIncludedOptions:{}};class ParameterIncludeEmpty extends Je.Component{static defaultProps=Oa;componentDidMount(){const{isIncludedOptions:e,onChange:t}=this.props,{shouldDispatchInit:r,defaultValue:n}=e;r&&t(n)}onCheckboxChange=e=>{const{onChange:t}=this.props;t(e.target.checked)};render(){let{isIncluded:e,isDisabled:t}=this.props;return Je.default.createElement("div",null,Je.default.createElement("label",{className:(0,Sa.default)("parameter__empty_value_toggle",{disabled:t})},Je.default.createElement("input",{type:"checkbox",disabled:t,checked:!t&&e,onChange:this.onCheckboxChange}),"Send empty value"))}}class ParameterRow extends Je.Component{constructor(e,t){super(e,t),this.setDefaultValue()}UNSAFE_componentWillReceiveProps(e){let t,{specSelectors:r,pathMethod:n,rawParam:a}=e,o=r.isOAS3(),s=r.parameterWithMetaByIdentity(n,a)||new Ke.Map;if(s=s.isEmpty()?a:s,o){let{schema:e}=getParameterSchema(s,{isOAS3:o});t=e?e.get("enum"):void 0}else t=s?s.get("enum"):void 0;let l,i=s?s.get("value"):void 0;void 0!==i?l=i:a.get("required")&&t&&t.size&&(l=t.first()),void 0!==l&&l!==i&&this.onChangeWrapper(function numberToString(e){return"number"==typeof e?e.toString():e}(l)),this.setDefaultValue()}onChangeWrapper=(()=>{var e=this;return function(t){let r,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{onChange:a,rawParam:o}=e.props;return r=""===t||t&&0===t.size?null:t,a(o,r,n)}})();_onExampleSelect=e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:"parameters",contextName:this.getParamKey()})};onChangeIncludeEmpty=e=>{let{specActions:t,param:r,pathMethod:n}=this.props;const a=r.get("name"),o=r.get("in");return t.updateEmptyParamInclusion(n,a,o,e)};setDefaultValue=()=>{let{specSelectors:e,pathMethod:t,rawParam:r,oas3Selectors:n,fn:a}=this.props;const o=e.parameterWithMetaByIdentity(t,r)||(0,Ke.Map)(),{schema:s}=getParameterSchema(o,{isOAS3:e.isOAS3()}),l=o.get("content",(0,Ke.Map)()).keySeq().first(),i=s?a.getSampleSchema(s.toJS(),l,{includeWriteOnly:!0}):null;if(o&&void 0===o.get("value")&&"body"!==o.get("in")){let r;if(e.isSwagger2())r=void 0!==o.get("x-example")?o.get("x-example"):void 0!==o.getIn(["schema","example"])?o.getIn(["schema","example"]):s&&s.getIn(["default"]);else if(e.isOAS3()){const e=n.activeExamplesMember(...t,"parameters",this.getParamKey());r=void 0!==o.getIn(["examples",e,"value"])?o.getIn(["examples",e,"value"]):void 0!==o.getIn(["content",l,"example"])?o.getIn(["content",l,"example"]):void 0!==o.get("example")?o.get("example"):void 0!==(s&&s.get("example"))?s&&s.get("example"):void 0!==(s&&s.get("default"))?s&&s.get("default"):o.get("default")}void 0===r||Ke.List.isList(r)||(r=stringify(r)),void 0!==r?this.onChangeWrapper(r):s&&"object"===s.get("type")&&i&&!o.get("examples")&&this.onChangeWrapper(Ke.List.isList(i)?i:stringify(i))}};getParamKey(){const{param:e}=this.props;return e?`${e.get("name")}-${e.get("in")}`:null}render(){let{param:e,rawParam:t,getComponent:r,getConfigs:n,isExecute:a,fn:o,onChangeConsumes:s,specSelectors:l,pathMethod:i,specPath:c,oas3Selectors:u}=this.props,d=l.isOAS3();const{showExtensions:p,showCommonExtensions:m}=n();if(e||(e=t),!t)return null;const f=r("JsonSchemaForm"),h=r("ParamBody");let g=e.get("in"),y="body"!==g?null:Je.default.createElement(h,{getComponent:r,getConfigs:n,fn:o,param:e,consumes:l.consumesOptionsFor(i),consumesValue:l.contentTypeValues(i).get("requestContentType"),onChange:this.onChangeWrapper,onChangeConsumes:s,isExecute:a,specSelectors:l,pathMethod:i});const v=r("modelExample"),S=r("Markdown",!0),_=r("ParameterExt"),b=r("ParameterIncludeEmpty"),w=r("ExamplesSelectValueRetainer"),C=r("Example");let x,O,k,N,{schema:A}=getParameterSchema(e,{isOAS3:d}),I=l.parameterWithMetaByIdentity(i,t)||(0,Ke.Map)(),R=A?A.get("format"):null,T=A?A.get("type"):null,B=A?A.getIn(["items","type"]):null,j="formData"===g,P="FormData"in tt,M=e.get("required"),q=I?I.get("value"):"",L=m?getCommonExtensions(A):null,D=p?getExtensions(e):null,U=!1;return void 0!==e&&A&&(x=A.get("items")),void 0!==x?(O=x.get("enum"),k=x.get("default")):A&&(O=A.get("enum")),O&&O.size&&O.size>0&&(U=!0),void 0!==e&&(A&&(k=A.get("default")),void 0===k&&(k=e.get("default")),N=e.get("example"),void 0===N&&(N=e.get("x-example"))),Je.default.createElement("tr",{"data-param-name":e.get("name"),"data-param-in":e.get("in")},Je.default.createElement("td",{className:"parameters-col_name"},Je.default.createElement("div",{className:M?"parameter__name required":"parameter__name"},e.get("name"),M?Je.default.createElement("span",null," *"):null),Je.default.createElement("div",{className:"parameter__type"},T,B&&`[${B}]`,R&&Je.default.createElement("span",{className:"prop-format"},"($",R,")")),Je.default.createElement("div",{className:"parameter__deprecated"},d&&e.get("deprecated")?"deprecated":null),Je.default.createElement("div",{className:"parameter__in"},"(",e.get("in"),")"),m&&L.size?L.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,xKey:t,xVal:r})})):null,p&&D.size?D.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,xKey:t,xVal:r})})):null),Je.default.createElement("td",{className:"parameters-col_description"},e.get("description")?Je.default.createElement(S,{source:e.get("description")}):null,!y&&a||!U?null:Je.default.createElement(S,{className:"parameter__enum",source:"Available values : "+O.map((function(e){return e})).toArray().join(", ")}),!y&&a||void 0===k?null:Je.default.createElement(S,{className:"parameter__default",source:"Default value : "+k}),!y&&a||void 0===N?null:Je.default.createElement(S,{source:"Example : "+N}),j&&!P&&Je.default.createElement("div",null,"Error: your browser does not support FormData"),d&&e.get("examples")?Je.default.createElement("section",{className:"parameter-controls"},Je.default.createElement(w,{examples:e.get("examples"),onSelect:this._onExampleSelect,updateValue:this.onChangeWrapper,getComponent:r,defaultToFirstExample:!0,currentKey:u.activeExamplesMember(...i,"parameters",this.getParamKey()),currentUserInputValue:q})):null,y?null:Je.default.createElement(f,{fn:o,getComponent:r,value:q,required:M,disabled:!a,description:e.get("name"),onChange:this.onChangeWrapper,errors:I.get("errors"),schema:A}),y&&A?Je.default.createElement(v,{getComponent:r,specPath:c.push("schema"),getConfigs:n,isExecute:a,specSelectors:l,schema:A,example:y,includeWriteOnly:!0}):null,!y&&a&&e.get("allowEmptyValue")?Je.default.createElement(b,{onChange:this.onChangeIncludeEmpty,isIncluded:l.parameterInclusionSettingFor(i,e.get("name"),e.get("in")),isDisabled:!isEmptyValue(q)}):null,d&&e.get("examples")?Je.default.createElement(C,{example:e.getIn(["examples",u.activeExamplesMember(...i,"parameters",this.getParamKey())]),getComponent:r,getConfigs:n}):null))}}class Execute extends Je.Component{handleValidateParameters=()=>{let{specSelectors:e,specActions:t,path:r,method:n}=this.props;return t.validateParams([r,n]),e.validateBeforeExecute([r,n])};handleValidateRequestBody=()=>{let{path:e,method:t,specSelectors:r,oas3Selectors:n,oas3Actions:a}=this.props,o={missingBodyValue:!1,missingRequiredKeys:[]};a.clearRequestBodyValidateError({path:e,method:t});let s=r.getOAS3RequiredRequestBodyContentType([e,t]),l=n.requestBodyValue(e,t),i=n.validateBeforeExecute([e,t]),c=n.requestContentType(e,t);if(!i)return o.missingBodyValue=!0,a.setRequestBodyValidateError({path:e,method:t,validationErrors:o}),!1;if(!s)return!0;let u=n.validateShallowRequired({oas3RequiredRequestBodyContentType:s,oas3RequestContentType:c,oas3RequestBodyValue:l});return!u||u.length<1||(u.forEach((e=>{o.missingRequiredKeys.push(e)})),a.setRequestBodyValidateError({path:e,method:t,validationErrors:o}),!1)};handleValidationResultPass=()=>{let{specActions:e,operation:t,path:r,method:n}=this.props;this.props.onExecute&&this.props.onExecute(),e.execute({operation:t,path:r,method:n})};handleValidationResultFail=()=>{let{specActions:e,path:t,method:r}=this.props;e.clearValidateParams([t,r]),setTimeout((()=>{e.validateParams([t,r])}),40)};handleValidationResult=e=>{e?this.handleValidationResultPass():this.handleValidationResultFail()};onClick=()=>{let e=this.handleValidateParameters(),t=this.handleValidateRequestBody(),r=e&&t;this.handleValidationResult(r)};onChangeProducesWrapper=e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e);render(){const{disabled:e}=this.props;return Je.default.createElement("button",{className:"btn execute opblock-control__btn",onClick:this.onClick,disabled:e},"Execute")}}class headers_Headers extends Je.default.Component{render(){let{headers:e,getComponent:t}=this.props;const r=t("Property"),n=t("Markdown",!0);return e&&e.size?Je.default.createElement("div",{className:"headers-wrapper"},Je.default.createElement("h4",{className:"headers__title"},"Headers:"),Je.default.createElement("table",{className:"headers"},Je.default.createElement("thead",null,Je.default.createElement("tr",{className:"header-row"},Je.default.createElement("th",{className:"header-col"},"Name"),Je.default.createElement("th",{className:"header-col"},"Description"),Je.default.createElement("th",{className:"header-col"},"Type"))),Je.default.createElement("tbody",null,e.entrySeq().map((e=>{let[t,a]=e;if(!Ke.default.Map.isMap(a))return null;const o=a.get("description"),s=a.getIn(["schema"])?a.getIn(["schema","type"]):a.getIn(["type"]),l=a.getIn(["schema","example"]);return Je.default.createElement("tr",{key:t},Je.default.createElement("td",{className:"header-col"},t),Je.default.createElement("td",{className:"header-col"},o?Je.default.createElement(n,{source:o}):null),Je.default.createElement("td",{className:"header-col"},s," ",l?Je.default.createElement(r,{propKey:"Example",propVal:l,propClass:"header-example"}):null))})).toArray()))):null}}class Errors extends Je.default.Component{render(){let{editorActions:e,errSelectors:t,layoutSelectors:r,layoutActions:n,getComponent:a}=this.props;const o=a("Collapse");if(e&&e.jumpToLine)var s=e.jumpToLine;let l=t.allErrors().filter((e=>"thrown"===e.get("type")||"error"===e.get("level")));if(!l||l.count()<1)return null;let i=r.isShown(["errorPane"],!0),c=l.sortBy((e=>e.get("line")));return Je.default.createElement("pre",{className:"errors-wrapper"},Je.default.createElement("hgroup",{className:"error"},Je.default.createElement("h4",{className:"errors__title"},"Errors"),Je.default.createElement("button",{className:"btn errors__clear-btn",onClick:()=>n.show(["errorPane"],!i)},i?"Hide":"Show")),Je.default.createElement(o,{isOpened:i,animated:!0},Je.default.createElement("div",{className:"errors"},c.map(((e,t)=>{let r=e.get("type");return"thrown"===r||"auth"===r?Je.default.createElement(ThrownErrorItem,{key:t,error:e.get("error")||e,jumpToLine:s}):"spec"===r?Je.default.createElement(SpecErrorItem,{key:t,error:e,jumpToLine:s}):void 0})))))}}const ThrownErrorItem=e=>{let{error:t,jumpToLine:r}=e;if(!t)return null;let n=t.get("line");return Je.default.createElement("div",{className:"error-wrapper"},t?Je.default.createElement("div",null,Je.default.createElement("h4",null,t.get("source")&&t.get("level")?toTitleCase(t.get("source"))+" "+t.get("level"):"",t.get("path")?Je.default.createElement("small",null," at ",t.get("path")):null),Je.default.createElement("span",{className:"message thrown"},t.get("message")),Je.default.createElement("div",{className:"error-line"},n&&r?Je.default.createElement("a",{onClick:r.bind(null,n)},"Jump to line ",n):null)):null)},SpecErrorItem=e=>{let{error:t,jumpToLine:r}=e,n=null;return t.get("path")?n=Ke.List.isList(t.get("path"))?Je.default.createElement("small",null,"at ",t.get("path").join(".")):Je.default.createElement("small",null,"at ",t.get("path")):t.get("line")&&!r&&(n=Je.default.createElement("small",null,"on line ",t.get("line"))),Je.default.createElement("div",{className:"error-wrapper"},t?Je.default.createElement("div",null,Je.default.createElement("h4",null,toTitleCase(t.get("source"))+" "+t.get("level")," ",n),Je.default.createElement("span",{className:"message"},t.get("message")),Je.default.createElement("div",{className:"error-line"},r?Je.default.createElement("a",{onClick:r.bind(null,t.get("line"))},"Jump to line ",t.get("line")):null)):null)};function toTitleCase(e){return(e||"").split(" ").map((e=>e[0].toUpperCase()+e.slice(1))).join(" ")}ThrownErrorItem.defaultProps={jumpToLine:null};const content_type_noop=()=>{};class ContentType extends Je.default.Component{static defaultProps={onChange:content_type_noop,value:null,contentTypes:(0,Ke.fromJS)(["application/json"])};componentDidMount(){this.props.contentTypes&&this.props.onChange(this.props.contentTypes.first())}UNSAFE_componentWillReceiveProps(e){e.contentTypes&&e.contentTypes.size&&(e.contentTypes.includes(e.value)||e.onChange(e.contentTypes.first()))}onChangeWrapper=e=>this.props.onChange(e.target.value);render(){let{ariaControls:e,ariaLabel:t,className:r,contentTypes:n,controlId:a,value:o}=this.props;return n&&n.size?Je.default.createElement("div",{className:"content-type-wrapper "+(r||"")},Je.default.createElement("select",{"aria-controls":e,"aria-label":t,className:"content-type",id:a,onChange:this.onChangeWrapper,value:o||""},n.map((e=>Je.default.createElement("option",{key:e,value:e},e))).toArray())):null}}function xclass(){for(var e=arguments.length,t=new Array(e),r=0;r!!e)).join(" ").trim()}class Container extends Je.default.Component{render(){let{fullscreen:e,full:t,...r}=this.props;if(e)return Je.default.createElement("section",r);let n="swagger-container"+(t?"-full":"");return Je.default.createElement("section",(0,er.default)({},r,{className:xclass(r.className,n)}))}}const ka={mobile:"",tablet:"-tablet",desktop:"-desktop",large:"-hd"};class Col extends Je.default.Component{render(){const{hide:e,keepContents:t,mobile:r,tablet:n,desktop:a,large:o,...s}=this.props;if(e&&!t)return Je.default.createElement("span",null);let l=[];for(let e in ka){if(!Object.prototype.hasOwnProperty.call(ka,e))continue;let t=ka[e];if(e in this.props){let r=this.props[e];if(r<1){l.push("none"+t);continue}l.push("block"+t),l.push("col-"+r+t)}}e&&l.push("hidden");let i=xclass(s.className,...l);return Je.default.createElement("section",(0,er.default)({},s,{className:i}))}}class Row extends Je.default.Component{render(){return Je.default.createElement("div",(0,er.default)({},this.props,{className:xclass(this.props.className,"wrapper")}))}}class Button extends Je.default.Component{static defaultProps={className:""};render(){return Je.default.createElement("button",(0,er.default)({},this.props,{className:xclass(this.props.className,"button")}))}}const TextArea=e=>Je.default.createElement("textarea",e),Input=e=>Je.default.createElement("input",e);class Select extends Je.default.Component{static defaultProps={multiple:!1,allowEmptyValue:!0};constructor(e,t){let r;super(e,t),r=e.value?e.value:e.multiple?[""]:"",this.state={value:r}}onChange=e=>{let t,{onChange:r,multiple:n}=this.props,a=[].slice.call(e.target.options);t=n?a.filter((function(e){return e.selected})).map((function(e){return e.value})):e.target.value,this.setState({value:t}),r&&r(t)};UNSAFE_componentWillReceiveProps(e){e.value!==this.props.value&&this.setState({value:e.value})}render(){let{allowedValues:e,multiple:t,allowEmptyValue:r,disabled:n}=this.props,a=this.state.value?.toJS?.()||this.state.value;return Je.default.createElement("select",{className:this.props.className,multiple:t,value:a,onChange:this.onChange,disabled:n},r?Je.default.createElement("option",{value:""},"--"):null,e.map((function(e,t){return Je.default.createElement("option",{key:t,value:String(e)},String(e))})))}}class Link extends Je.default.Component{render(){return Je.default.createElement("a",(0,er.default)({},this.props,{rel:"noopener noreferrer",className:xclass(this.props.className,"link")}))}}const NoMargin=e=>{let{children:t}=e;return Je.default.createElement("div",{className:"no-margin"}," ",t," ")};class Collapse extends Je.default.Component{static defaultProps={isOpened:!1,animated:!1};renderNotAnimated(){return this.props.isOpened?Je.default.createElement(NoMargin,null,this.props.children):Je.default.createElement("noscript",null)}render(){let{animated:e,isOpened:t,children:r}=this.props;return e?(r=t?r:null,Je.default.createElement(NoMargin,null,r)):this.renderNotAnimated()}}class Overview extends Je.default.Component{constructor(){super(...arguments),this.setTagShown=this._setTagShown.bind(this)}_setTagShown(e,t){this.props.layoutActions.show(e,t)}showOp(e,t){let{layoutActions:r}=this.props;r.show(e,t)}render(){let{specSelectors:e,layoutSelectors:t,layoutActions:r,getComponent:n}=this.props,a=e.taggedOperations();const o=n("Collapse");return Je.default.createElement("div",null,Je.default.createElement("h4",{className:"overview-title"},"Overview"),a.map(((e,n)=>{let a=e.get("operations"),s=["overview-tags",n],l=t.isShown(s,!0);return Je.default.createElement("div",{key:"overview-"+n},Je.default.createElement("h4",{onClick:()=>r.show(s,!l),className:"link overview-tag"}," ",l?"-":"+",n),Je.default.createElement(o,{isOpened:l,animated:!0},a.map((e=>{let{path:n,method:a,id:o}=e.toObject(),s="operations",l=o,i=t.isShown([s,l]);return Je.default.createElement(OperationLink,{key:o,path:n,method:a,id:n+"-"+a,shown:i,showOpId:l,showOpIdPrefix:s,href:`#operation-${l}`,onClick:r.show})})).toArray()))})).toArray(),a.size<1&&Je.default.createElement("h3",null," No operations defined in spec! "))}}class OperationLink extends Je.default.Component{constructor(e){super(e),this.onClick=this._onClick.bind(this)}_onClick(){let{showOpId:e,showOpIdPrefix:t,onClick:r,shown:n}=this.props;r([t,e],!n)}render(){let{id:e,method:t,shown:r,href:n}=this.props;return Je.default.createElement(Link,{href:n,onClick:this.onClick,className:"block opblock-link "+(r?"shown":"")},Je.default.createElement("div",null,Je.default.createElement("small",{className:`bold-label-${t}`},t.toUpperCase()),Je.default.createElement("span",{className:"bold-label"},e)))}}class InitializedInput extends Je.default.Component{componentDidMount(){this.props.initialValue&&(this.inputRef.value=this.props.initialValue)}render(){const{value:e,defaultValue:t,initialValue:r,...n}=this.props;return Je.default.createElement("input",(0,er.default)({},n,{ref:e=>this.inputRef=e}))}}class InfoBasePath extends Je.default.Component{render(){const{host:e,basePath:t}=this.props;return Je.default.createElement("pre",{className:"base-url"},"[ Base URL: ",e,t," ]")}}class InfoUrl extends Je.default.PureComponent{render(){const{url:e,getComponent:t}=this.props,r=t("Link");return Je.default.createElement(r,{target:"_blank",href:sanitizeUrl(e)},Je.default.createElement("span",{className:"url"}," ",e))}}class Info extends Je.default.Component{render(){const{info:e,url:t,host:r,basePath:n,getComponent:a,externalDocs:o,selectedServer:s,url:l}=this.props,i=e.get("version"),c=e.get("description"),u=e.get("title"),d=safeBuildUrl(e.get("termsOfService"),l,{selectedServer:s}),p=e.get("contact"),m=e.get("license"),f=safeBuildUrl(o&&o.get("url"),l,{selectedServer:s}),h=o&&o.get("description"),g=a("Markdown",!0),y=a("Link"),v=a("VersionStamp"),S=a("OpenAPIVersion"),_=a("InfoUrl"),b=a("InfoBasePath"),w=a("License"),C=a("Contact");return Je.default.createElement("div",{className:"info"},Je.default.createElement("hgroup",{className:"main"},Je.default.createElement("h2",{className:"title"},u,Je.default.createElement("span",null,i&&Je.default.createElement(v,{version:i}),Je.default.createElement(S,{oasVersion:"2.0"}))),r||n?Je.default.createElement(b,{host:r,basePath:n}):null,t&&Je.default.createElement(_,{getComponent:a,url:t})),Je.default.createElement("div",{className:"description"},Je.default.createElement(g,{source:c})),d&&Je.default.createElement("div",{className:"info__tos"},Je.default.createElement(y,{target:"_blank",href:sanitizeUrl(d)},"Terms of service")),p?.size>0&&Je.default.createElement(C,{getComponent:a,data:p,selectedServer:s,url:t}),m?.size>0&&Je.default.createElement(w,{getComponent:a,license:m,selectedServer:s,url:t}),f?Je.default.createElement(y,{className:"info__extdocs",target:"_blank",href:sanitizeUrl(f)},h||f):null)}}var Na=Info;class InfoContainer extends Je.default.Component{render(){const{specSelectors:e,getComponent:t,oas3Selectors:r}=this.props,n=e.info(),a=e.url(),o=e.basePath(),s=e.host(),l=e.externalDocs(),i=r.selectedServer(),c=t("info");return Je.default.createElement("div",null,n&&n.count()?Je.default.createElement(c,{info:n,url:a,host:s,basePath:o,externalDocs:l,getComponent:t,selectedServer:i}):null)}}class Contact extends Je.default.Component{render(){const{data:e,getComponent:t,selectedServer:r,url:n}=this.props,a=e.get("name","the developer"),o=safeBuildUrl(e.get("url"),n,{selectedServer:r}),s=e.get("email"),l=t("Link");return Je.default.createElement("div",{className:"info__contact"},o&&Je.default.createElement("div",null,Je.default.createElement(l,{href:sanitizeUrl(o),target:"_blank"},a," - Website")),s&&Je.default.createElement(l,{href:sanitizeUrl(`mailto:${s}`)},o?`Send email to ${a}`:`Contact ${a}`))}}var Aa=Contact;class License extends Je.default.Component{render(){const{license:e,getComponent:t,selectedServer:r,url:n}=this.props,a=e.get("name","License"),o=safeBuildUrl(e.get("url"),n,{selectedServer:r}),s=t("Link");return Je.default.createElement("div",{className:"info__license"},o?Je.default.createElement("div",{className:"info__license__url"},Je.default.createElement(s,{target:"_blank",href:sanitizeUrl(o)},a)):Je.default.createElement("span",null,a))}}var Ia=License;class JumpToPath extends Je.default.Component{render(){return null}}class CopyToClipboardBtn extends Je.default.Component{render(){let{getComponent:e}=this.props;const t=e("CopyIcon");return Je.default.createElement("div",{className:"view-line-link copy-to-clipboard",title:"Copy to clipboard"},Je.default.createElement(Er.CopyToClipboard,{text:this.props.textToCopy},Je.default.createElement(t,null)))}}class Footer extends Je.default.Component{render(){return Je.default.createElement("div",{className:"footer"})}}class FilterContainer extends Je.default.Component{onFilterChange=e=>{const{target:{value:t}}=e;this.props.layoutActions.updateFilter(t)};render(){const{specSelectors:e,layoutSelectors:t,getComponent:r}=this.props,n=r("Col"),a="loading"===e.loadingStatus(),o="failed"===e.loadingStatus(),s=t.currentFilter(),l=["operation-filter-input"];return o&&l.push("failed"),a&&l.push("loading"),Je.default.createElement("div",null,null===s||!1===s||"false"===s?null:Je.default.createElement("div",{className:"filter-container"},Je.default.createElement(n,{className:"filter wrapper",mobile:12},Je.default.createElement("input",{className:l.join(" "),placeholder:"Filter by tag",type:"text",onChange:this.onFilterChange,value:!0===s||"true"===s?"":s,disabled:a}))))}}const Ra=Function.prototype;class ParamBody extends Je.PureComponent{static defaultProp={consumes:(0,Ke.fromJS)(["application/json"]),param:(0,Ke.fromJS)({}),onChange:Ra,onChangeConsumes:Ra};constructor(e,t){super(e,t),this.state={isEditBox:!1,value:""}}componentDidMount(){this.updateValues.call(this,this.props)}UNSAFE_componentWillReceiveProps(e){this.updateValues.call(this,e)}updateValues=e=>{let{param:t,isExecute:r,consumesValue:n=""}=e,a=/xml/i.test(n),o=/json/i.test(n),s=a?t.get("value_xml"):t.get("value");if(void 0!==s){let e=!s&&o?"{}":s;this.setState({value:e}),this.onChange(e,{isXml:a,isEditBox:r})}else a?this.onChange(this.sample("xml"),{isXml:a,isEditBox:r}):this.onChange(this.sample(),{isEditBox:r})};sample=e=>{let{param:t,fn:r}=this.props,n=r.inferSchema(t.toJS());return r.getSampleSchema(n,e,{includeWriteOnly:!0})};onChange=(e,t)=>{let{isEditBox:r,isXml:n}=t;this.setState({value:e,isEditBox:r}),this._onChange(e,n)};_onChange=(e,t)=>{(this.props.onChange||Ra)(e,t)};handleOnChange=e=>{const{consumesValue:t}=this.props,r=/xml/i.test(t),n=e.target.value;this.onChange(n,{isXml:r,isEditBox:this.state.isEditBox})};toggleIsEditBox=()=>this.setState((e=>({isEditBox:!e.isEditBox})));render(){let{onChangeConsumes:e,param:t,isExecute:r,specSelectors:n,pathMethod:a,getConfigs:o,getComponent:s}=this.props;const l=s("Button"),i=s("TextArea"),c=s("highlightCode"),u=s("contentType");let d=(n?n.parameterWithMetaByIdentity(a,t):t).get("errors",(0,Ke.List)()),p=n.contentTypeValues(a).get("requestContentType"),m=this.props.consumes&&this.props.consumes.size?this.props.consumes:ParamBody.defaultProp.consumes,{value:f,isEditBox:h}=this.state,g=null;return getKnownSyntaxHighlighterLanguage(f)&&(g="json"),Je.default.createElement("div",{className:"body-param","data-param-name":t.get("name"),"data-param-in":t.get("in")},h&&r?Je.default.createElement(i,{className:"body-param__text"+(d.count()?" invalid":""),value:f,onChange:this.handleOnChange}):f&&Je.default.createElement(c,{className:"body-param__example",language:g,getConfigs:o,value:f}),Je.default.createElement("div",{className:"body-param-options"},r?Je.default.createElement("div",{className:"body-param-edit"},Je.default.createElement(l,{className:h?"btn cancel body-param__example-edit":"btn edit body-param__example-edit",onClick:this.toggleIsEditBox},h?"Cancel":"Edit")):null,Je.default.createElement("label",{htmlFor:""},Je.default.createElement("span",null,"Parameter content type"),Je.default.createElement(u,{value:p,contentTypes:m,onChange:e,className:"body-param-content-type",ariaLabel:"Parameter content type"}))))}}class Curl extends Je.default.Component{render(){let{request:e,getConfigs:t}=this.props,r=requestSnippetGenerator_curl_bash(e);const n=t(),a=(0,Gt.default)(n,"syntaxHighlight.activated")?Je.default.createElement(vr.default,{language:"bash",className:"curl microlight",style:getStyle((0,Gt.default)(n,"syntaxHighlight.theme"))},r):Je.default.createElement("textarea",{readOnly:!0,className:"curl",value:r});return Je.default.createElement("div",{className:"curl-command"},Je.default.createElement("h4",null,"Curl"),Je.default.createElement("div",{className:"copy-to-clipboard"},Je.default.createElement(Er.CopyToClipboard,{text:r},Je.default.createElement("button",null))),Je.default.createElement("div",null,a))}}class Schemes extends Je.default.Component{UNSAFE_componentWillMount(){let{schemes:e}=this.props;this.setScheme(e.first())}UNSAFE_componentWillReceiveProps(e){this.props.currentScheme&&e.schemes.includes(this.props.currentScheme)||this.setScheme(e.schemes.first())}onChange=e=>{this.setScheme(e.target.value)};setScheme=e=>{let{path:t,method:r,specActions:n}=this.props;n.setScheme(e,t,r)};render(){let{schemes:e,currentScheme:t}=this.props;return Je.default.createElement("label",{htmlFor:"schemes"},Je.default.createElement("span",{className:"schemes-title"},"Schemes"),Je.default.createElement("select",{onChange:this.onChange,value:t},e.valueSeq().map((e=>Je.default.createElement("option",{value:e,key:e},e))).toArray()))}}class SchemesContainer extends Je.default.Component{render(){const{specActions:e,specSelectors:t,getComponent:r}=this.props,n=t.operationScheme(),a=t.schemes(),o=r("schemes");return a&&a.size?Je.default.createElement(o,{currentScheme:n,schemes:a,specActions:e}):null}}class ModelCollapse extends Je.Component{static defaultProps={collapsedContent:"{...}",expanded:!1,title:null,onToggle:()=>{},hideSelfOnExpand:!1,specPath:Ke.default.List([])};constructor(e,t){super(e,t);let{expanded:r,collapsedContent:n}=this.props;this.state={expanded:r,collapsedContent:n||ModelCollapse.defaultProps.collapsedContent}}componentDidMount(){const{hideSelfOnExpand:e,expanded:t,modelName:r}=this.props;e&&t&&this.props.onToggle(r,t)}UNSAFE_componentWillReceiveProps(e){this.props.expanded!==e.expanded&&this.setState({expanded:e.expanded})}toggleCollapsed=()=>{this.props.onToggle&&this.props.onToggle(this.props.modelName,!this.state.expanded),this.setState({expanded:!this.state.expanded})};onLoad=e=>{if(e&&this.props.layoutSelectors){const t=this.props.layoutSelectors.getScrollToKey();Ke.default.is(t,this.props.specPath)&&this.toggleCollapsed(),this.props.layoutActions.readyToScroll(this.props.specPath,e.parentElement)}};render(){const{title:e,classes:t}=this.props;return this.state.expanded&&this.props.hideSelfOnExpand?Je.default.createElement("span",{className:t||""},this.props.children):Je.default.createElement("span",{className:t||"",ref:this.onLoad},Je.default.createElement("button",{"aria-expanded":this.state.expanded,className:"model-box-control",onClick:this.toggleCollapsed},e&&Je.default.createElement("span",{className:"pointer"},e),Je.default.createElement("span",{className:"model-toggle"+(this.state.expanded?"":" collapsed")}),!this.state.expanded&&Je.default.createElement("span",null,this.state.collapsedContent)),this.state.expanded&&this.props.children)}}class ModelExample extends Je.default.Component{constructor(e,t){super(e,t);let{getConfigs:r,isExecute:n}=this.props,{defaultModelRendering:a}=r(),o=a;"example"!==a&&"model"!==a&&(o="example"),n&&(o="example"),this.state={activeTab:o}}activeTab=e=>{let{target:{dataset:{name:t}}}=e;this.setState({activeTab:t})};UNSAFE_componentWillReceiveProps(e){e.isExecute&&!this.props.isExecute&&this.props.example&&this.setState({activeTab:"example"})}render(){let{getComponent:e,specSelectors:t,schema:r,example:n,isExecute:a,getConfigs:o,specPath:s,includeReadOnly:l,includeWriteOnly:i}=this.props,{defaultModelExpandDepth:c}=o();const u=e("ModelWrapper"),d=e("highlightCode"),p=ut()(5).toString("base64"),m=ut()(5).toString("base64"),f=ut()(5).toString("base64"),h=ut()(5).toString("base64");let g=t.isOAS3();return Je.default.createElement("div",{className:"model-example"},Je.default.createElement("ul",{className:"tab",role:"tablist"},Je.default.createElement("li",{className:(0,Sa.default)("tabitem",{active:"example"===this.state.activeTab}),role:"presentation"},Je.default.createElement("button",{"aria-controls":m,"aria-selected":"example"===this.state.activeTab,className:"tablinks","data-name":"example",id:p,onClick:this.activeTab,role:"tab"},a?"Edit Value":"Example Value")),r&&Je.default.createElement("li",{className:(0,Sa.default)("tabitem",{active:"model"===this.state.activeTab}),role:"presentation"},Je.default.createElement("button",{"aria-controls":h,"aria-selected":"model"===this.state.activeTab,className:(0,Sa.default)("tablinks",{inactive:a}),"data-name":"model",id:f,onClick:this.activeTab,role:"tab"},g?"Schema":"Model"))),"example"===this.state.activeTab&&Je.default.createElement("div",{"aria-hidden":"example"!==this.state.activeTab,"aria-labelledby":p,"data-name":"examplePanel",id:m,role:"tabpanel",tabIndex:"0"},n||Je.default.createElement(d,{value:"(no example available)",getConfigs:o})),"model"===this.state.activeTab&&Je.default.createElement("div",{"aria-hidden":"example"===this.state.activeTab,"aria-labelledby":f,"data-name":"modelPanel",id:h,role:"tabpanel",tabIndex:"0"},Je.default.createElement(u,{schema:r,getComponent:e,getConfigs:o,specSelectors:t,expandDepth:c,specPath:s,includeReadOnly:l,includeWriteOnly:i})))}}class ModelWrapper extends Je.Component{onToggle=(e,t)=>{this.props.layoutActions&&this.props.layoutActions.show(this.props.fullPath,t)};render(){let{getComponent:e,getConfigs:t}=this.props;const r=e("Model");let n;return this.props.layoutSelectors&&(n=this.props.layoutSelectors.isShown(this.props.fullPath)),Je.default.createElement("div",{className:"model-box"},Je.default.createElement(r,(0,er.default)({},this.props,{getConfigs:t,expanded:n,depth:1,onToggle:this.onToggle,expandDepth:this.props.expandDepth||0})))}}var Ta=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>fe.default});const decodeRefName=e=>{const t=e.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(t)}catch{return t}};class Model extends Ta.default{static propTypes={schema:Wt.default.map.isRequired,getComponent:jt.default.func.isRequired,getConfigs:jt.default.func.isRequired,specSelectors:jt.default.object.isRequired,name:jt.default.string,displayName:jt.default.string,isRef:jt.default.bool,required:jt.default.bool,expandDepth:jt.default.number,depth:jt.default.number,specPath:Wt.default.list.isRequired,includeReadOnly:jt.default.bool,includeWriteOnly:jt.default.bool};getModelName=e=>-1!==e.indexOf("#/definitions/")?decodeRefName(e.replace(/^.*#\/definitions\//,"")):-1!==e.indexOf("#/components/schemas/")?decodeRefName(e.replace(/^.*#\/components\/schemas\//,"")):void 0;getRefSchema=e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)};render(){let{getComponent:e,getConfigs:t,specSelectors:r,schema:n,required:a,name:o,isRef:s,specPath:l,displayName:i,includeReadOnly:c,includeWriteOnly:u}=this.props;const d=e("ObjectModel"),p=e("ArrayModel"),m=e("PrimitiveModel");let f="object",h=n&&n.get("$$ref");if(!o&&h&&(o=this.getModelName(h)),!n&&h&&(n=this.getRefSchema(o)),!n)return Je.default.createElement("span",{className:"model model-title"},Je.default.createElement("span",{className:"model-title__text"},i||o),Je.default.createElement(rolling_load,{height:"20px",width:"20px"}));const g=r.isOAS3()&&n.get("deprecated");switch(s=void 0!==s?s:!!h,f=n&&n.get("type")||f,f){case"object":return Je.default.createElement(d,(0,er.default)({className:"object"},this.props,{specPath:l,getConfigs:t,schema:n,name:o,deprecated:g,isRef:s,includeReadOnly:c,includeWriteOnly:u}));case"array":return Je.default.createElement(p,(0,er.default)({className:"array"},this.props,{getConfigs:t,schema:n,name:o,deprecated:g,required:a,includeReadOnly:c,includeWriteOnly:u}));default:return Je.default.createElement(m,(0,er.default)({},this.props,{getComponent:e,getConfigs:t,schema:n,name:o,deprecated:g,required:a}))}}}class Models extends Je.Component{getSchemaBasePath=()=>this.props.specSelectors.isOAS3()?["components","schemas"]:["definitions"];getCollapsedContent=()=>" ";handleToggle=(e,t)=>{const{layoutActions:r}=this.props;r.show([...this.getSchemaBasePath(),e],t),t&&this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(),e])};onLoadModels=e=>{e&&this.props.layoutActions.readyToScroll(this.getSchemaBasePath(),e)};onLoadModel=e=>{if(e){const t=e.getAttribute("data-name");this.props.layoutActions.readyToScroll([...this.getSchemaBasePath(),t],e)}};render(){let{specSelectors:e,getComponent:t,layoutSelectors:r,layoutActions:n,getConfigs:a}=this.props,o=e.definitions(),{docExpansion:s,defaultModelsExpandDepth:l}=a();if(!o.size||l<0)return null;const i=this.getSchemaBasePath();let c=r.isShown(i,l>0&&"none"!==s);const u=e.isOAS3(),d=t("ModelWrapper"),p=t("Collapse"),m=t("ModelCollapse"),f=t("JumpToPath",!0),h=t("ArrowUpIcon"),g=t("ArrowDownIcon");return Je.default.createElement("section",{className:c?"models is-open":"models",ref:this.onLoadModels},Je.default.createElement("h4",null,Je.default.createElement("button",{"aria-expanded":c,className:"models-control",onClick:()=>n.show(i,!c)},Je.default.createElement("span",null,u?"Schemas":"Models"),c?Je.default.createElement(h,null):Je.default.createElement(g,null))),Je.default.createElement(p,{isOpened:c},o.entrySeq().map((o=>{let[s]=o;const c=[...i,s],u=Ke.default.List(c),p=e.specResolvedSubtree(c),h=e.specJson().getIn(c),g=Ke.Map.isMap(p)?p:Ke.default.Map(),y=Ke.Map.isMap(h)?h:Ke.default.Map(),v=g.get("title")||y.get("title")||s,S=r.isShown(c,!1);S&&0===g.size&&y.size>0&&this.props.specActions.requestResolvedSubtree(c);const _=Je.default.createElement(d,{name:s,expandDepth:l,schema:g||Ke.default.Map(),displayName:v,fullPath:c,specPath:u,getComponent:t,specSelectors:e,getConfigs:a,layoutSelectors:r,layoutActions:n,includeReadOnly:!0,includeWriteOnly:!0}),b=Je.default.createElement("span",{className:"model-box"},Je.default.createElement("span",{className:"model model-title"},v));return Je.default.createElement("div",{id:`model-${s}`,className:"model-container",key:`models-section-${s}`,"data-name":s,ref:this.onLoadModel},Je.default.createElement("span",{className:"models-jump-to-path"},Je.default.createElement(f,{specPath:u})),Je.default.createElement(m,{classes:"model-box",collapsedContent:this.getCollapsedContent(s),onToggle:this.handleToggle,title:b,displayName:v,modelName:s,specPath:u,layoutSelectors:r,layoutActions:n,hideSelfOnExpand:!0,expanded:l>0&&S},_))})).toArray()))}}var enum_model=e=>{let{value:t,getComponent:r}=e,n=r("ModelCollapse"),a=Je.default.createElement("span",null,"Array [ ",t.count()," ]");return Je.default.createElement("span",{className:"prop-enum"},"Enum:",Je.default.createElement("br",null),Je.default.createElement(n,{collapsedContent:a},"[ ",t.join(", ")," ]"))};class ObjectModel extends Je.Component{render(){let{schema:e,name:t,displayName:r,isRef:n,getComponent:a,getConfigs:o,depth:s,onToggle:l,expanded:i,specPath:c,...u}=this.props,{specSelectors:d,expandDepth:p,includeReadOnly:m,includeWriteOnly:f}=u;const{isOAS3:h}=d;if(!e)return null;const{showExtensions:g}=o();let y=e.get("description"),v=e.get("properties"),S=e.get("additionalProperties"),_=e.get("title")||r||t,b=e.get("required"),w=e.filter(((e,t)=>-1!==["maxProperties","minProperties","nullable","example"].indexOf(t))),C=e.get("deprecated"),x=e.getIn(["externalDocs","url"]),O=e.getIn(["externalDocs","description"]);const k=a("JumpToPath",!0),N=a("Markdown",!0),A=a("Model"),I=a("ModelCollapse"),R=a("Property"),T=a("Link"),JumpToPathSection=()=>Je.default.createElement("span",{className:"model-jump-to-path"},Je.default.createElement(k,{specPath:c})),B=Je.default.createElement("span",null,Je.default.createElement("span",null,"{"),"...",Je.default.createElement("span",null,"}"),n?Je.default.createElement(JumpToPathSection,null):""),j=d.isOAS3()?e.get("anyOf"):null,P=d.isOAS3()?e.get("oneOf"):null,M=d.isOAS3()?e.get("not"):null,q=_&&Je.default.createElement("span",{className:"model-title"},n&&e.get("$$ref")&&Je.default.createElement("span",{className:"model-hint"},e.get("$$ref")),Je.default.createElement("span",{className:"model-title__text"},_));return Je.default.createElement("span",{className:"model"},Je.default.createElement(I,{modelName:t,title:q,onToggle:l,expanded:!!i||s<=p,collapsedContent:B},Je.default.createElement("span",{className:"brace-open object"},"{"),n?Je.default.createElement(JumpToPathSection,null):null,Je.default.createElement("span",{className:"inner-object"},Je.default.createElement("table",{className:"model"},Je.default.createElement("tbody",null,y?Je.default.createElement("tr",{className:"description"},Je.default.createElement("td",null,"description:"),Je.default.createElement("td",null,Je.default.createElement(N,{source:y}))):null,x&&Je.default.createElement("tr",{className:"external-docs"},Je.default.createElement("td",null,"externalDocs:"),Je.default.createElement("td",null,Je.default.createElement(T,{target:"_blank",href:sanitizeUrl(x)},O||x))),C?Je.default.createElement("tr",{className:"property"},Je.default.createElement("td",null,"deprecated:"),Je.default.createElement("td",null,"true")):null,v&&v.size?v.entrySeq().filter((e=>{let[,t]=e;return(!t.get("readOnly")||m)&&(!t.get("writeOnly")||f)})).map((e=>{let[r,n]=e,l=h()&&n.get("deprecated"),i=Ke.List.isList(b)&&b.contains(r),d=["property-row"];return l&&d.push("deprecated"),i&&d.push("required"),Je.default.createElement("tr",{key:r,className:d.join(" ")},Je.default.createElement("td",null,r,i&&Je.default.createElement("span",{className:"star"},"*")),Je.default.createElement("td",null,Je.default.createElement(A,(0,er.default)({key:`object-${t}-${r}_${n}`},u,{required:i,getComponent:a,specPath:c.push("properties",r),getConfigs:o,schema:n,depth:s+1}))))})).toArray():null,g?Je.default.createElement("tr",null,Je.default.createElement("td",null," ")):null,g?e.entrySeq().map((e=>{let[t,r]=e;if("x-"!==t.slice(0,2))return;const n=r?r.toJS?r.toJS():r:null;return Je.default.createElement("tr",{key:t,className:"extension"},Je.default.createElement("td",null,t),Je.default.createElement("td",null,JSON.stringify(n)))})).toArray():null,S&&S.size?Je.default.createElement("tr",null,Je.default.createElement("td",null,"< * >:"),Je.default.createElement("td",null,Je.default.createElement(A,(0,er.default)({},u,{required:!1,getComponent:a,specPath:c.push("additionalProperties"),getConfigs:o,schema:S,depth:s+1})))):null,j?Je.default.createElement("tr",null,Je.default.createElement("td",null,"anyOf ->"),Je.default.createElement("td",null,j.map(((e,t)=>Je.default.createElement("div",{key:t},Je.default.createElement(A,(0,er.default)({},u,{required:!1,getComponent:a,specPath:c.push("anyOf",t),getConfigs:o,schema:e,depth:s+1}))))))):null,P?Je.default.createElement("tr",null,Je.default.createElement("td",null,"oneOf ->"),Je.default.createElement("td",null,P.map(((e,t)=>Je.default.createElement("div",{key:t},Je.default.createElement(A,(0,er.default)({},u,{required:!1,getComponent:a,specPath:c.push("oneOf",t),getConfigs:o,schema:e,depth:s+1}))))))):null,M?Je.default.createElement("tr",null,Je.default.createElement("td",null,"not ->"),Je.default.createElement("td",null,Je.default.createElement("div",null,Je.default.createElement(A,(0,er.default)({},u,{required:!1,getComponent:a,specPath:c.push("not"),getConfigs:o,schema:M,depth:s+1}))))):null))),Je.default.createElement("span",{className:"brace-close"},"}")),w.size?w.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(R,{key:`${t}-${r}`,propKey:t,propVal:r,propClass:"property"})})):null)}}class ArrayModel extends Je.Component{render(){let{getComponent:e,getConfigs:t,schema:r,depth:n,expandDepth:a,name:o,displayName:s,specPath:l}=this.props,i=r.get("description"),c=r.get("items"),u=r.get("title")||s||o,d=r.filter(((e,t)=>-1===["type","items","description","$$ref","externalDocs"].indexOf(t))),p=r.getIn(["externalDocs","url"]),m=r.getIn(["externalDocs","description"]);const f=e("Markdown",!0),h=e("ModelCollapse"),g=e("Model"),y=e("Property"),v=e("Link"),S=u&&Je.default.createElement("span",{className:"model-title"},Je.default.createElement("span",{className:"model-title__text"},u));return Je.default.createElement("span",{className:"model"},Je.default.createElement(h,{title:S,expanded:n<=a,collapsedContent:"[...]"},"[",d.size?d.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(y,{key:`${t}-${r}`,propKey:t,propVal:r,propClass:"property"})})):null,i?Je.default.createElement(f,{source:i}):d.size?Je.default.createElement("div",{className:"markdown"}):null,p&&Je.default.createElement("div",{className:"external-docs"},Je.default.createElement(v,{target:"_blank",href:sanitizeUrl(p)},m||p)),Je.default.createElement("span",null,Je.default.createElement(g,(0,er.default)({},this.props,{getConfigs:t,specPath:l.push("items"),name:null,schema:c,required:!1,depth:n+1}))),"]"))}}const Ba="property primitive";class Primitive extends Je.Component{render(){let{schema:e,getComponent:t,getConfigs:r,name:n,displayName:a,depth:o,expandDepth:s}=this.props;const{showExtensions:l}=r();if(!e||!e.get)return Je.default.createElement("div",null);let i=e.get("type"),c=e.get("format"),u=e.get("xml"),d=e.get("enum"),p=e.get("title")||a||n,m=e.get("description"),f=getExtensions(e),h=e.filter(((e,t)=>-1===["enum","type","format","description","$$ref","externalDocs"].indexOf(t))).filterNot(((e,t)=>f.has(t))),g=e.getIn(["externalDocs","url"]),y=e.getIn(["externalDocs","description"]);const v=t("Markdown",!0),S=t("EnumModel"),_=t("Property"),b=t("ModelCollapse"),w=t("Link"),C=p&&Je.default.createElement("span",{className:"model-title"},Je.default.createElement("span",{className:"model-title__text"},p));return Je.default.createElement("span",{className:"model"},Je.default.createElement(b,{title:C,expanded:o<=s,collapsedContent:"[...]",hideSelfOnExpand:s!==o},Je.default.createElement("span",{className:"prop"},n&&o>1&&Je.default.createElement("span",{className:"prop-name"},p),Je.default.createElement("span",{className:"prop-type"},i),c&&Je.default.createElement("span",{className:"prop-format"},"($",c,")"),h.size?h.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,propKey:t,propVal:r,propClass:Ba})})):null,l&&f.size?f.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement(_,{key:`${t}-${r}`,propKey:t,propVal:r,propClass:Ba})})):null,m?Je.default.createElement(v,{source:m}):null,g&&Je.default.createElement("div",{className:"external-docs"},Je.default.createElement(w,{target:"_blank",href:sanitizeUrl(g)},y||g)),u&&u.size?Je.default.createElement("span",null,Je.default.createElement("br",null),Je.default.createElement("span",{className:Ba},"xml:"),u.entrySeq().map((e=>{let[t,r]=e;return Je.default.createElement("span",{key:`${t}-${r}`,className:Ba},Je.default.createElement("br",null),"   ",t,": ",String(r))})).toArray()):null,d&&Je.default.createElement(S,{value:d,getComponent:t}))))}}var property=e=>{let{propKey:t,propVal:r,propClass:n}=e;return Je.default.createElement("span",{className:n},Je.default.createElement("br",null),t,": ",String(r))};class TryItOutButton extends Je.default.Component{static defaultProps={onTryoutClick:Function.prototype,onCancelClick:Function.prototype,onResetClick:Function.prototype,enabled:!1,hasUserEditedBody:!1,isOAS3:!1};render(){const{onTryoutClick:e,onCancelClick:t,onResetClick:r,enabled:n,hasUserEditedBody:a,isOAS3:o}=this.props,s=o&&a;return Je.default.createElement("div",{className:s?"try-out btn-group":"try-out"},n?Je.default.createElement("button",{className:"btn try-out__btn cancel",onClick:t},"Cancel"):Je.default.createElement("button",{className:"btn try-out__btn",onClick:e},"Try it out "),s&&Je.default.createElement("button",{className:"btn try-out__btn reset",onClick:r},"Reset"))}}class VersionPragmaFilter extends Je.default.PureComponent{static defaultProps={alsoShow:null,children:null,bypass:!1};render(){const{bypass:e,isSwagger2:t,isOAS3:r,alsoShow:n}=this.props;return e?Je.default.createElement("div",null,this.props.children):t&&r?Je.default.createElement("div",{className:"version-pragma"},n,Je.default.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},Je.default.createElement("div",null,Je.default.createElement("h3",null,"Unable to render this definition"),Je.default.createElement("p",null,Je.default.createElement("code",null,"swagger")," and ",Je.default.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),Je.default.createElement("p",null,"Supported version fields are ",Je.default.createElement("code",null,"swagger: ",'"2.0"')," and those that match ",Je.default.createElement("code",null,"openapi: 3.0.n")," (for example, ",Je.default.createElement("code",null,"openapi: 3.0.0"),").")))):t||r?Je.default.createElement("div",null,this.props.children):Je.default.createElement("div",{className:"version-pragma"},n,Je.default.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},Je.default.createElement("div",null,Je.default.createElement("h3",null,"Unable to render this definition"),Je.default.createElement("p",null,"The provided definition does not specify a valid version field."),Je.default.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",Je.default.createElement("code",null,"swagger: ",'"2.0"')," and those that match ",Je.default.createElement("code",null,"openapi: 3.0.n")," (for example, ",Je.default.createElement("code",null,"openapi: 3.0.0"),")."))))}}var version_stamp=e=>{let{version:t}=e;return Je.default.createElement("small",null,Je.default.createElement("pre",{className:"version"}," ",t," "))};var openapi_version=e=>{let{oasVersion:t}=e;return Je.default.createElement("small",{className:"version-stamp"},Je.default.createElement("pre",{className:"version"},"OAS ",t))};var deep_link=e=>{let{enabled:t,path:r,text:n}=e;return Je.default.createElement("a",{className:"nostyle",onClick:t?e=>e.preventDefault():null,href:t?`#/${r}`:null},Je.default.createElement("span",null,n))};var svg_assets=()=>Je.default.createElement("div",null,Je.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",className:"svg-assets"},Je.default.createElement("defs",null,Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"unlocked"},Je.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"locked"},Je.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"close"},Je.default.createElement("path",{d:"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow"},Je.default.createElement("path",{d:"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow-down"},Je.default.createElement("path",{d:"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"})),Je.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow-up"},Je.default.createElement("path",{d:"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z"})),Je.default.createElement("symbol",{viewBox:"0 0 24 24",id:"jump-to"},Je.default.createElement("path",{d:"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"})),Je.default.createElement("symbol",{viewBox:"0 0 24 24",id:"expand"},Je.default.createElement("path",{d:"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"})),Je.default.createElement("symbol",{viewBox:"0 0 15 16",id:"copy"},Je.default.createElement("g",{transform:"translate(2, -1)"},Je.default.createElement("path",{fill:"#ffffff",fillRule:"evenodd",d:"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z"})))))),ja=(e=>{var t={};return __webpack_require__.d(t,e),t})({Remarkable:()=>he.Remarkable}),Pa=(e=>{var t={};return __webpack_require__.d(t,e),t})({linkify:()=>ge.linkify}),Ma=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ye.default});function Markdown(e){let{source:t,className:r="",getConfigs:n}=e;if("string"!=typeof t)return null;const a=new ja.Remarkable({html:!0,typographer:!0,breaks:!0,linkTarget:"_blank"}).use(Pa.linkify);a.core.ruler.disable(["replacements","smartquotes"]);const{useUnsafeMarkdown:o}=n(),s=a.render(t),l=sanitizer(s,{useUnsafeMarkdown:o});return t&&s&&l?Je.default.createElement("div",{className:(0,Sa.default)(r,"markdown"),dangerouslySetInnerHTML:{__html:l}}):null}Ma.default.addHook&&Ma.default.addHook("beforeSanitizeElements",(function(e){return e.href&&e.setAttribute("rel","noopener noreferrer"),e})),Markdown.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};var qa=Markdown;function sanitizer(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=t,n=t?[]:["style","class"];return t&&!sanitizer.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),sanitizer.hasWarnedAboutDeprecation=!0),Ma.default.sanitize(e,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:r,FORBID_ATTR:n})}sanitizer.hasWarnedAboutDeprecation=!1;class BaseLayout extends Je.default.Component{render(){const{errSelectors:e,specSelectors:t,getComponent:r}=this.props,n=r("SvgAssets"),a=r("InfoContainer",!0),o=r("VersionPragmaFilter"),s=r("operations",!0),l=r("Models",!0),i=r("Webhooks",!0),c=r("Row"),u=r("Col"),d=r("errors",!0),p=r("ServersContainer",!0),m=r("SchemesContainer",!0),f=r("AuthorizeBtnContainer",!0),h=r("FilterContainer",!0),g=t.isSwagger2(),y=t.isOAS3(),v=t.isOAS31(),S=!t.specStr(),_=t.loadingStatus();let b=null;if("loading"===_&&(b=Je.default.createElement("div",{className:"info"},Je.default.createElement("div",{className:"loading-container"},Je.default.createElement("div",{className:"loading"})))),"failed"===_&&(b=Je.default.createElement("div",{className:"info"},Je.default.createElement("div",{className:"loading-container"},Je.default.createElement("h4",{className:"title"},"Failed to load API definition."),Je.default.createElement(d,null)))),"failedConfig"===_){const t=e.lastError(),r=t?t.get("message"):"";b=Je.default.createElement("div",{className:"info failed-config"},Je.default.createElement("div",{className:"loading-container"},Je.default.createElement("h4",{className:"title"},"Failed to load remote configuration."),Je.default.createElement("p",null,r)))}if(!b&&S&&(b=Je.default.createElement("h4",null,"No API definition provided.")),b)return Je.default.createElement("div",{className:"swagger-ui"},Je.default.createElement("div",{className:"loading-container"},b));const w=t.servers(),C=t.schemes(),x=w&&w.size,O=C&&C.size,k=!!t.securityDefinitions();return Je.default.createElement("div",{className:"swagger-ui"},Je.default.createElement(n,null),Je.default.createElement(o,{isSwagger2:g,isOAS3:y,alsoShow:Je.default.createElement(d,null)},Je.default.createElement(d,null),Je.default.createElement(c,{className:"information-container"},Je.default.createElement(u,{mobile:12},Je.default.createElement(a,null))),x||O||k?Je.default.createElement("div",{className:"scheme-container"},Je.default.createElement(u,{className:"schemes wrapper",mobile:12},x?Je.default.createElement(p,null):null,O?Je.default.createElement(m,null):null,k?Je.default.createElement(f,null):null)):null,Je.default.createElement(h,null),Je.default.createElement(c,null,Je.default.createElement(u,{mobile:12,desktop:12},Je.default.createElement(s,null))),v&&Je.default.createElement(c,{className:"webhooks-container"},Je.default.createElement(u,{mobile:12,desktop:12},Je.default.createElement(i,null))),Je.default.createElement(c,null,Je.default.createElement(u,{mobile:12,desktop:12},Je.default.createElement(l,null)))))}}var core_components=()=>({components:{App,authorizationPopup:AuthorizationPopup,authorizeBtn:AuthorizeBtn,AuthorizeBtnContainer,authorizeOperationBtn:AuthorizeOperationBtn,auths:Auths,AuthItem:auth_item_Auths,authError:AuthError,oauth2:Oauth2,apiKeyAuth:ApiKeyAuth,basicAuth:BasicAuth,clear:Clear,liveResponse:LiveResponse,InitializedInput,info:Na,InfoContainer,InfoUrl,InfoBasePath,Contact:Aa,License:Ia,JumpToPath,CopyToClipboardBtn,onlineValidatorBadge:OnlineValidatorBadge,operations:Operations,operation:Operation,OperationSummary,OperationSummaryMethod,OperationSummaryPath,highlightCode:ba,responses:Responses,response:Response,ResponseExtension:response_extension,responseBody:ResponseBody,parameters:Parameters,parameterRow:ParameterRow,execute:Execute,headers:headers_Headers,errors:Errors,contentType:ContentType,overview:Overview,footer:Footer,FilterContainer,ParamBody,curl:Curl,schemes:Schemes,SchemesContainer,modelExample:ModelExample,ModelWrapper,ModelCollapse,Model,Models,EnumModel:enum_model,ObjectModel,ArrayModel,PrimitiveModel:Primitive,Property:property,TryItOutButton,Markdown:qa,BaseLayout,VersionPragmaFilter,VersionStamp:version_stamp,OperationExt:operation_extensions,OperationExtRow:operation_extension_row,ParameterExt:parameter_extension,ParameterIncludeEmpty,OperationTag,OperationContainer,OpenAPIVersion:openapi_version,DeepLink:deep_link,SvgAssets:svg_assets,Example,ExamplesSelect,ExamplesSelectValueRetainer}});var form_components=()=>({components:{...Be}}),La=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>Ee.default});const Da={value:"",onChange:()=>{},schema:{},keyName:"",required:!1,errors:(0,Ke.List)()};class JsonSchemaForm extends Je.Component{static defaultProps=Da;componentDidMount(){const{dispatchInitialValue:e,value:t,onChange:r}=this.props;e?r(t):!1===e&&r("")}render(){let{schema:e,errors:t,value:r,onChange:n,getComponent:a,fn:o,disabled:s}=this.props;const l=e&&e.get?e.get("format"):null,i=e&&e.get?e.get("type"):null;let getComponentSilently=e=>a(e,!1,{failSilently:!0}),c=i?getComponentSilently(l?`JsonSchema_${i}_${l}`:`JsonSchema_${i}`):a("JsonSchema_string");return c||(c=a("JsonSchema_string")),Je.default.createElement(c,(0,er.default)({},this.props,{errors:t,fn:o,getComponent:a,value:r,onChange:n,schema:e,disabled:s}))}}class JsonSchema_string extends Je.Component{static defaultProps=Da;onChange=e=>{const t=this.props.schema&&"file"===this.props.schema.get("type")?e.target.files[0]:e.target.value;this.props.onChange(t,this.props.keyName)};onEnumChange=e=>this.props.onChange(e);render(){let{getComponent:e,value:t,schema:r,errors:n,required:a,description:o,disabled:s}=this.props;const l=r&&r.get?r.get("enum"):null,i=r&&r.get?r.get("format"):null,c=r&&r.get?r.get("type"):null,u=r&&r.get?r.get("in"):null;if(t||(t=""),n=n.toJS?n.toJS():[],l){const r=e("Select");return Je.default.createElement(r,{className:n.length?"invalid":"",title:n.length?n:"",allowedValues:[...l],value:t,allowEmptyValue:!a,disabled:s,onChange:this.onEnumChange})}const d=s||u&&"formData"===u&&!("FormData"in window),p=e("Input");return c&&"file"===c?Je.default.createElement(p,{type:"file",className:n.length?"invalid":"",title:n.length?n:"",onChange:this.onChange,disabled:d}):Je.default.createElement(La.default,{type:i&&"password"===i?"password":"text",className:n.length?"invalid":"",title:n.length?n:"",value:t,minLength:0,debounceTimeout:350,placeholder:o,onChange:this.onChange,disabled:d})}}class JsonSchema_array extends Je.PureComponent{static defaultProps=Da;constructor(e,t){super(e,t),this.state={value:valueOrEmptyList(e.value),schema:e.schema}}UNSAFE_componentWillReceiveProps(e){const t=valueOrEmptyList(e.value);t!==this.state.value&&this.setState({value:t}),e.schema!==this.state.schema&&this.setState({schema:e.schema})}onChange=()=>{this.props.onChange(this.state.value)};onItemChange=(e,t)=>{this.setState((r=>{let{value:n}=r;return{value:n.set(t,e)}}),this.onChange)};removeItem=e=>{this.setState((t=>{let{value:r}=t;return{value:r.delete(e)}}),this.onChange)};addItem=()=>{const{fn:e}=this.props;let t=valueOrEmptyList(this.state.value);this.setState((()=>({value:t.push(e.getSampleSchema(this.state.schema.get("items"),!1,{includeWriteOnly:!0}))})),this.onChange)};onEnumChange=e=>{this.setState((()=>({value:e})),this.onChange)};render(){let{getComponent:e,required:t,schema:r,errors:n,fn:a,disabled:o}=this.props;n=n.toJS?n.toJS():Array.isArray(n)?n:[];const s=n.filter((e=>"string"==typeof e)),l=n.filter((e=>void 0!==e.needRemove)).map((e=>e.error)),i=this.state.value,c=!!(i&&i.count&&i.count()>0),u=r.getIn(["items","enum"]),d=r.getIn(["items","type"]),p=r.getIn(["items","format"]),m=r.get("items");let f,h=!1,g="file"===d||"string"===d&&"binary"===p;if(d&&p?f=e(`JsonSchema_${d}_${p}`):"boolean"!==d&&"array"!==d&&"object"!==d||(f=e(`JsonSchema_${d}`)),f||g||(h=!0),u){const r=e("Select");return Je.default.createElement(r,{className:n.length?"invalid":"",title:n.length?n:"",multiple:!0,value:i,disabled:o,allowedValues:u,allowEmptyValue:!t,onChange:this.onEnumChange})}const y=e("Button");return Je.default.createElement("div",{className:"json-schema-array"},c?i.map(((t,r)=>{const s=(0,Ke.fromJS)([...n.filter((e=>e.index===r)).map((e=>e.error))]);return Je.default.createElement("div",{key:r,className:"json-schema-form-item"},g?Je.default.createElement(JsonSchemaArrayItemFile,{value:t,onChange:e=>this.onItemChange(e,r),disabled:o,errors:s,getComponent:e}):h?Je.default.createElement(JsonSchemaArrayItemText,{value:t,onChange:e=>this.onItemChange(e,r),disabled:o,errors:s}):Je.default.createElement(f,(0,er.default)({},this.props,{value:t,onChange:e=>this.onItemChange(e,r),disabled:o,errors:s,schema:m,getComponent:e,fn:a})),o?null:Je.default.createElement(y,{className:`btn btn-sm json-schema-form-item-remove ${l.length?"invalid":null}`,title:l.length?l:"",onClick:()=>this.removeItem(r)}," - "))})):null,o?null:Je.default.createElement(y,{className:`btn btn-sm json-schema-form-item-add ${s.length?"invalid":null}`,title:s.length?s:"",onClick:this.addItem},"Add ",d?`${d} `:"","item"))}}class JsonSchemaArrayItemText extends Je.Component{static defaultProps=Da;onChange=e=>{const t=e.target.value;this.props.onChange(t,this.props.keyName)};render(){let{value:e,errors:t,description:r,disabled:n}=this.props;return e||(e=""),t=t.toJS?t.toJS():[],Je.default.createElement(La.default,{type:"text",className:t.length?"invalid":"",title:t.length?t:"",value:e,minLength:0,debounceTimeout:350,placeholder:r,onChange:this.onChange,disabled:n})}}class JsonSchemaArrayItemFile extends Je.Component{static defaultProps=Da;onFileChange=e=>{const t=e.target.files[0];this.props.onChange(t,this.props.keyName)};render(){let{getComponent:e,errors:t,disabled:r}=this.props;const n=e("Input"),a=r||!("FormData"in window);return Je.default.createElement(n,{type:"file",className:t.length?"invalid":"",title:t.length?t:"",onChange:this.onFileChange,disabled:a})}}class JsonSchema_boolean extends Je.Component{static defaultProps=Da;onEnumChange=e=>this.props.onChange(e);render(){let{getComponent:e,value:t,errors:r,schema:n,required:a,disabled:o}=this.props;r=r.toJS?r.toJS():[];let s=n&&n.get?n.get("enum"):null,l=!s||!a,i=!s&&["true","false"];const c=e("Select");return Je.default.createElement(c,{className:r.length?"invalid":"",title:r.length?r:"",value:String(t),disabled:o,allowedValues:s?[...s]:i,allowEmptyValue:l,onChange:this.onEnumChange})}}const stringifyObjectErrors=e=>e.map((e=>{const t=void 0!==e.propKey?e.propKey:e.index;let r="string"==typeof e?e:"string"==typeof e.error?e.error:null;if(!t&&r)return r;let n=e.error,a=`/${e.propKey}`;for(;"object"==typeof n;){const e=void 0!==n.propKey?n.propKey:n.index;if(void 0===e)break;if(a+=`/${e}`,!n.error)break;n=n.error}return`${a}: ${n}`}));class JsonSchema_object extends Je.PureComponent{constructor(){super()}static defaultProps=Da;onChange=e=>{this.props.onChange(e)};handleOnChange=e=>{const t=e.target.value;this.onChange(t)};render(){let{getComponent:e,value:t,errors:r,disabled:n}=this.props;const a=e("TextArea");return r=r.toJS?r.toJS():Array.isArray(r)?r:[],Je.default.createElement("div",null,Je.default.createElement(a,{className:(0,Sa.default)({invalid:r.length}),title:r.length?stringifyObjectErrors(r).join(", "):"",value:stringify(t),disabled:n,onChange:this.handleOnChange}))}}function valueOrEmptyList(e){return Ke.List.isList(e)?e:Array.isArray(e)?(0,Ke.fromJS)(e):(0,Ke.List)()}var json_schema_components=()=>({components:{...je}});var base=()=>[configsPlugin,util,logs,view,plugins_spec,err,icons,plugins_layout,json_schema_5_samples,core_components,form_components,swagger_client,json_schema_components,auth,downloadUrlPlugin,deep_linking,filter,on_complete,plugins_request_snippets,safe_render()];const Ua=(0,Ke.Map)();function onlyOAS3(e){return(t,r)=>function(){if(r.getSystem().specSelectors.isOAS3()){const t=e(...arguments);return"function"==typeof t?t(r):t}return t(...arguments)}}const $a=onlyOAS3((0,At.createSelector)((()=>null))),Ja=onlyOAS3((()=>e=>{const t=e.getSystem().specSelectors.specJson().getIn(["components","schemas"]);return Ke.Map.isMap(t)?t:Ua})),Va=onlyOAS3((()=>e=>e.getSystem().specSelectors.specJson().hasIn(["servers",0]))),Ka=onlyOAS3((0,At.createSelector)(sn,(e=>e.getIn(["components","securitySchemes"])||null))),wrap_selectors_validOperationMethods=(e,t)=>function(r){if(t.specSelectors.isOAS3())return t.oas3Selectors.validOperationMethods();for(var n=arguments.length,a=new Array(n>1?n-1:0),o=1;ofunction(){for(var n=arguments.length,a=new Array(n),o=0;oe),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{let r=(0,Ke.List)();return t?(t.entrySeq().forEach((e=>{let[t,n]=e;const a=n.get("type");if("oauth2"===a&&n.get("flows").entrySeq().forEach((e=>{let[a,o]=e,s=(0,Ke.fromJS)({flow:a,authorizationUrl:o.get("authorizationUrl"),tokenUrl:o.get("tokenUrl"),scopes:o.get("scopes"),type:n.get("type"),description:n.get("description")});r=r.push(new Ke.Map({[t]:s.filter((e=>void 0!==e))}))})),"http"!==a&&"apiKey"!==a||(r=r.push(new Ke.Map({[t]:n}))),"openIdConnect"===a&&n.get("openIdConnectData")){let e=n.get("openIdConnectData");(e.get("grant_types_supported")||["authorization_code","implicit"]).forEach((a=>{let o=e.get("scopes_supported")&&e.get("scopes_supported").reduce(((e,t)=>e.set(t,"")),new Ke.Map),s=(0,Ke.fromJS)({flow:a,authorizationUrl:e.get("authorization_endpoint"),tokenUrl:e.get("token_endpoint"),scopes:o,type:"oauth2",openIdConnectUrl:n.get("openIdConnectUrl")});r=r.push(new Ke.Map({[t]:s.filter((e=>void 0!==e))}))}))}})),r):r})));function OAS3ComponentWrapFactory(e){return(t,r)=>n=>"function"==typeof r.specSelectors?.isOAS3?r.specSelectors.isOAS3()?Je.default.createElement(e,(0,er.default)({},n,r,{Ori:t})):Je.default.createElement(t,n):(console.warn("OAS3 wrapper: couldn't get spec"),null)}const Ya=(0,Ke.Map)(),selectors_isSwagger2=()=>e=>function isSwagger2(e){const t=e.get("swagger");return"string"==typeof t&&"2.0"===t}(e.getSystem().specSelectors.specJson()),selectors_isOAS30=()=>e=>function isOAS30(e){const t=e.get("openapi");return"string"==typeof t&&/^3\.0\.([0123])(?:-rc[012])?$/.test(t)}(e.getSystem().specSelectors.specJson()),selectors_isOAS3=()=>e=>e.getSystem().specSelectors.isOAS30();function selectors_onlyOAS3(e){return function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),a=1;a{if(r.specSelectors.isOAS3()){const a=e(t,...n);return"function"==typeof a?a(r):a}return null}}}const Qa=selectors_onlyOAS3((()=>e=>e.specSelectors.specJson().get("servers",Ya))),Za=selectors_onlyOAS3(((e,t)=>{let{callbacks:r,specPath:n}=t;return e=>{const t=e.specSelectors.validOperationMethods();return Ke.Map.isMap(r)?r.reduce(((e,r,a)=>{if(!Ke.Map.isMap(r))return e;const o=r.reduce(((e,r,o)=>{if(!Ke.Map.isMap(r))return e;const s=r.entrySeq().filter((e=>{let[r]=e;return t.includes(r)})).map((e=>{let[t,r]=e;return{operation:(0,Ke.Map)({operation:r}),method:t,path:o,callbackName:a,specPath:n.concat([a,o,t])}}));return e.concat(s)}),(0,Ke.List)());return e.concat(o)}),(0,Ke.List)()).groupBy((e=>e.callbackName)).map((e=>e.toArray())).toObject():{}}}));var callbacks=e=>{let{callbacks:t,specPath:r,specSelectors:n,getComponent:a}=e;const o=n.callbacksOperations({callbacks:t,specPath:r}),s=Object.keys(o),l=a("OperationContainer",!0);return 0===s.length?Je.default.createElement("span",null,"No callbacks"):Je.default.createElement("div",null,s.map((e=>Je.default.createElement("div",{key:`${e}`},Je.default.createElement("h2",null,e),o[e].map((t=>Je.default.createElement(l,{key:`${e}-${t.path}-${t.method}`,op:t.operation,tag:"callbacks",method:t.method,path:t.path,specPath:t.specPath,allowTryItOut:!1})))))))};const getDefaultRequestBodyValue=(e,t,r,n)=>{const a=e.getIn(["content",t])??(0,Ke.OrderedMap)(),o=a.get("schema",(0,Ke.OrderedMap)()).toJS(),s=void 0!==a.get("examples"),l=a.get("example"),i=s?a.getIn(["examples",r,"value"]):l;return stringify(n.getSampleSchema(o,t,{includeWriteOnly:!0},i))};var request_body=e=>{let{userHasEditedBody:t,requestBody:r,requestBodyValue:n,requestBodyInclusionSetting:a,requestBodyErrors:o,getComponent:s,getConfigs:l,specSelectors:i,fn:c,contentType:u,isExecute:d,specPath:p,onChange:m,onChangeIncludeEmpty:f,activeExamplesKey:h,updateActiveExamplesKey:g,setRetainRequestBodyValueFlag:y}=e;const handleFile=e=>{m(e.target.files[0])},setIsIncludedOptions=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return"no value"===a.get(e,"no value")&&(t.shouldDispatchInit=!0),t},v=s("Markdown",!0),S=s("modelExample"),_=s("RequestBodyEditor"),b=s("highlightCode"),w=s("ExamplesSelectValueRetainer"),C=s("Example"),x=s("ParameterIncludeEmpty"),{showCommonExtensions:O}=l(),k=r?.get("description")??null,N=r?.get("content")??new Ke.OrderedMap;u=u||N.keySeq().first()||"";const A=N.get(u)??(0,Ke.OrderedMap)(),I=A.get("schema",(0,Ke.OrderedMap)()),R=A.get("examples",null),T=R?.map(((e,t)=>{const n=e?.get("value",null);return n&&(e=e.set("value",getDefaultRequestBodyValue(r,u,t,c),n)),e}));if(o=Ke.List.isList(o)?o:(0,Ke.List)(),!A.size)return null;const B="object"===A.getIn(["schema","type"]),j="binary"===A.getIn(["schema","format"]),P="base64"===A.getIn(["schema","format"]);if("application/octet-stream"===u||0===u.indexOf("image/")||0===u.indexOf("audio/")||0===u.indexOf("video/")||j||P){const e=s("Input");return d?Je.default.createElement(e,{type:"file",onChange:handleFile}):Je.default.createElement("i",null,"Example values are not available for ",Je.default.createElement("code",null,u)," media types.")}if(B&&("application/x-www-form-urlencoded"===u||0===u.indexOf("multipart/"))&&I.get("properties",(0,Ke.OrderedMap)()).size>0){const e=s("JsonSchemaForm"),t=s("ParameterExt"),r=I.get("properties",(0,Ke.OrderedMap)());return n=Ke.Map.isMap(n)?n:(0,Ke.OrderedMap)(),Je.default.createElement("div",{className:"table-container"},k&&Je.default.createElement(v,{source:k}),Je.default.createElement("table",null,Je.default.createElement("tbody",null,Ke.Map.isMap(r)&&r.entrySeq().map((r=>{let[l,i]=r;if(i.get("readOnly"))return;let u=O?getCommonExtensions(i):null;const p=I.get("required",(0,Ke.List)()).includes(l),h=i.get("type"),g=i.get("format"),y=i.get("description"),S=n.getIn([l,"value"]),_=n.getIn([l,"errors"])||o,b=a.get(l)||!1,w=i.has("default")||i.has("example")||i.hasIn(["items","example"])||i.hasIn(["items","default"]),C=i.has("enum")&&(1===i.get("enum").size||p),k=w||C;let N="";"array"!==h||k||(N=[]),("object"===h||k)&&(N=c.getSampleSchema(i,!1,{includeWriteOnly:!0})),"string"!=typeof N&&"object"===h&&(N=stringify(N)),"string"==typeof N&&"array"===h&&(N=JSON.parse(N));const A="string"===h&&("binary"===g||"base64"===g);return Je.default.createElement("tr",{key:l,className:"parameters","data-property-name":l},Je.default.createElement("td",{className:"parameters-col_name"},Je.default.createElement("div",{className:p?"parameter__name required":"parameter__name"},l,p?Je.default.createElement("span",null," *"):null),Je.default.createElement("div",{className:"parameter__type"},h,g&&Je.default.createElement("span",{className:"prop-format"},"($",g,")"),O&&u.size?u.entrySeq().map((e=>{let[r,n]=e;return Je.default.createElement(t,{key:`${r}-${n}`,xKey:r,xVal:n})})):null),Je.default.createElement("div",{className:"parameter__deprecated"},i.get("deprecated")?"deprecated":null)),Je.default.createElement("td",{className:"parameters-col_description"},Je.default.createElement(v,{source:y}),d?Je.default.createElement("div",null,Je.default.createElement(e,{fn:c,dispatchInitialValue:!A,schema:i,description:l,getComponent:s,value:void 0===S?N:S,required:p,errors:_,onChange:e=>{m(e,[l])}}),p?null:Je.default.createElement(x,{onChange:e=>f(l,e),isIncluded:b,isIncludedOptions:setIsIncludedOptions(l),isDisabled:Array.isArray(S)?0!==S.length:!isEmptyValue(S)})):null))})))))}const M=getDefaultRequestBodyValue(r,u,h,c);let q=null;return getKnownSyntaxHighlighterLanguage(M)&&(q="json"),Je.default.createElement("div",null,k&&Je.default.createElement(v,{source:k}),T?Je.default.createElement(w,{userHasEditedBody:t,examples:T,currentKey:h,currentUserInputValue:n,onSelect:e=>{g(e)},updateValue:m,defaultToFirstExample:!0,getComponent:s,setRetainRequestBodyValueFlag:y}):null,d?Je.default.createElement("div",null,Je.default.createElement(_,{value:n,errors:o,defaultValue:M,onChange:m,getComponent:s})):Je.default.createElement(S,{getComponent:s,getConfigs:l,specSelectors:i,expandDepth:1,isExecute:d,schema:A.get("schema"),specPath:p.push("content",u),example:Je.default.createElement(b,{className:"body-param__example",getConfigs:l,language:q,value:stringify(n)||M}),includeWriteOnly:!0}),T?Je.default.createElement(C,{example:T.get(h),getComponent:s,getConfigs:l}):null)};class operation_link_OperationLink extends Je.Component{render(){const{link:e,name:t,getComponent:r}=this.props,n=r("Markdown",!0);let a=e.get("operationId")||e.get("operationRef"),o=e.get("parameters")&&e.get("parameters").toJS(),s=e.get("description");return Je.default.createElement("div",{className:"operation-link"},Je.default.createElement("div",{className:"description"},Je.default.createElement("b",null,Je.default.createElement("code",null,t)),s?Je.default.createElement(n,{source:s}):null),Je.default.createElement("pre",null,"Operation `",a,"`",Je.default.createElement("br",null),Je.default.createElement("br",null),"Parameters ",function padString(e,t){if("string"!=typeof t)return"";return t.split("\n").map(((t,r)=>r>0?Array(e+1).join(" ")+t:t)).join("\n")}(0,JSON.stringify(o,null,2))||"{}",Je.default.createElement("br",null)))}}var eo=operation_link_OperationLink;class Servers extends Je.default.Component{componentDidMount(){let{servers:e,currentServer:t}=this.props;t||this.setServer(e.first()?.get("url"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:r,getServerVariable:n}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){let a=t.find((t=>t.get("url")===e.currentServer)),o=this.props.servers.find((e=>e.get("url")===this.props.currentServer))||(0,Ke.OrderedMap)();if(!a)return this.setServer(t.first().get("url"));let s=((o.get("variables")||(0,Ke.OrderedMap)()).find((e=>e.get("default")))||(0,Ke.OrderedMap)()).get("default"),l=a.get("variables")||(0,Ke.OrderedMap)(),i=(l.find((e=>e.get("default")))||(0,Ke.OrderedMap)()).get("default");l.map(((t,a)=>{n(e.currentServer,a)&&s===i||r({server:e.currentServer,key:a,val:t.get("default")||""})}))}}onServerChange=e=>{this.setServer(e.target.value)};onServerVariableValueChange=e=>{let{setServerVariableValue:t,currentServer:r}=this.props,n=e.target.getAttribute("data-variable"),a=e.target.value;"function"==typeof t&&t({server:r,key:n,val:a})};setServer=e=>{let{setSelectedServer:t}=this.props;t(e)};render(){let{servers:e,currentServer:t,getServerVariable:r,getEffectiveServerValue:n}=this.props,a=(e.find((e=>e.get("url")===t))||(0,Ke.OrderedMap)()).get("variables")||(0,Ke.OrderedMap)(),o=0!==a.size;return Je.default.createElement("div",{className:"servers"},Je.default.createElement("label",{htmlFor:"servers"},Je.default.createElement("select",{onChange:this.onServerChange,value:t},e.valueSeq().map((e=>Je.default.createElement("option",{value:e.get("url"),key:e.get("url")},e.get("url"),e.get("description")&&` - ${e.get("description")}`))).toArray())),o?Je.default.createElement("div",null,Je.default.createElement("div",{className:"computed-url"},"Computed URL:",Je.default.createElement("code",null,n(t))),Je.default.createElement("h4",null,"Server variables"),Je.default.createElement("table",null,Je.default.createElement("tbody",null,a.entrySeq().map((e=>{let[n,a]=e;return Je.default.createElement("tr",{key:n},Je.default.createElement("td",null,n),Je.default.createElement("td",null,a.get("enum")?Je.default.createElement("select",{"data-variable":n,onChange:this.onServerVariableValueChange},a.get("enum").map((e=>Je.default.createElement("option",{selected:e===r(t,n),key:e,value:e},e)))):Je.default.createElement("input",{type:"text",value:r(t,n)||"",onChange:this.onServerVariableValueChange,"data-variable":n})))}))))):null)}}class ServersContainer extends Je.default.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:r,getComponent:n}=this.props,a=e.servers(),o=n("Servers");return a&&a.size?Je.default.createElement("div",null,Je.default.createElement("span",{className:"servers-title"},"Servers"),Je.default.createElement(o,{servers:a,currentServer:t.selectedServer(),setSelectedServer:r.setSelectedServer,setServerVariableValue:r.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}const to=Function.prototype;class RequestBodyEditor extends Je.PureComponent{static defaultProps={onChange:to,userHasEditedBody:!1};constructor(e,t){super(e,t),this.state={value:stringify(e.value)||e.defaultValue},e.onChange(e.value)}applyDefaultValue=e=>{const{onChange:t,defaultValue:r}=e||this.props;return this.setState({value:r}),t(r)};onChange=e=>{this.props.onChange(stringify(e))};onDomChange=e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))};UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:stringify(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:r}=this.state,n=t.size>0;const a=e("TextArea");return Je.default.createElement("div",{className:"body-param"},Je.default.createElement(a,{className:(0,Sa.default)("body-param__text",{invalid:n}),title:t.size?t.join(", "):"",value:r,onChange:this.onDomChange}))}}class HttpAuth extends Je.default.Component{constructor(e,t){super(e,t);let{name:r,schema:n}=this.props,a=this.getValue();this.state={name:r,schema:n,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,"value"])}onChange=e=>{let{onChange:t}=this.props,{value:r,name:n}=e.target,a=Object.assign({},this.state.value);n?a[n]=r:a=r,this.setState({value:a},(()=>t(this.state)))};render(){let{schema:e,getComponent:t,errSelectors:r,name:n}=this.props;const a=t("Input"),o=t("Row"),s=t("Col"),l=t("authError"),i=t("Markdown",!0),c=t("JumpToPath",!0),u=(e.get("scheme")||"").toLowerCase();let d=this.getValue(),p=r.allErrors().filter((e=>e.get("authId")===n));if("basic"===u){let t=d?d.get("username"):null;return Je.default.createElement("div",null,Je.default.createElement("h4",null,Je.default.createElement("code",null,n||e.get("name")),"  (http, Basic)",Je.default.createElement(c,{path:["securityDefinitions",n]})),t&&Je.default.createElement("h6",null,"Authorized"),Je.default.createElement(o,null,Je.default.createElement(i,{source:e.get("description")})),Je.default.createElement(o,null,Je.default.createElement("label",null,"Username:"),t?Je.default.createElement("code",null," ",t," "):Je.default.createElement(s,null,Je.default.createElement(a,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),Je.default.createElement(o,null,Je.default.createElement("label",null,"Password:"),t?Je.default.createElement("code",null," ****** "):Je.default.createElement(s,null,Je.default.createElement(a,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),p.valueSeq().map(((e,t)=>Je.default.createElement(l,{error:e,key:t}))))}return"bearer"===u?Je.default.createElement("div",null,Je.default.createElement("h4",null,Je.default.createElement("code",null,n||e.get("name")),"  (http, Bearer)",Je.default.createElement(c,{path:["securityDefinitions",n]})),d&&Je.default.createElement("h6",null,"Authorized"),Je.default.createElement(o,null,Je.default.createElement(i,{source:e.get("description")})),Je.default.createElement(o,null,Je.default.createElement("label",null,"Value:"),d?Je.default.createElement("code",null," ****** "):Je.default.createElement(s,null,Je.default.createElement(a,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),p.valueSeq().map(((e,t)=>Je.default.createElement(l,{error:e,key:t})))):Je.default.createElement("div",null,Je.default.createElement("em",null,Je.default.createElement("b",null,n)," HTTP authentication: unsupported scheme ",`'${u}'`))}}class OperationServers extends Je.default.Component{setSelectedServer=e=>{const{path:t,method:r}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${r}`)};setServerVariableValue=e=>{const{path:t,method:r}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${r}`})};getSelectedServer=()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)};getServerVariable=(e,t)=>{const{path:r,method:n}=this.props;return this.props.getServerVariable({namespace:`${r}:${n}`,server:e},t)};getEffectiveServerValue=e=>{const{path:t,method:r}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${r}`})};render(){const{operationServers:e,pathServers:t,getComponent:r}=this.props;if(!e&&!t)return null;const n=r("Servers"),a=e||t,o=e?"operation":"path";return Je.default.createElement("div",{className:"opblock-section operation-servers"},Je.default.createElement("div",{className:"opblock-section-header"},Je.default.createElement("div",{className:"tab-header"},Je.default.createElement("h4",{className:"opblock-title"},"Servers"))),Je.default.createElement("div",{className:"opblock-description-wrapper"},Je.default.createElement("h4",{className:"message"},"These ",o,"-level options override the global server options."),Je.default.createElement(n,{servers:a,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}var ro={Callbacks:callbacks,HttpAuth,RequestBody:request_body,Servers,ServersContainer,RequestBodyEditor,OperationServers,operationLink:eo};const no=new ja.Remarkable("commonmark");no.block.ruler.enable(["table"]),no.set({linkTarget:"_blank"});const markdown_Markdown=e=>{let{source:t,className:r="",getConfigs:n}=e;if("string"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=n(),a=sanitizer(no.render(t),{useUnsafeMarkdown:e});let o;return"string"==typeof a&&(o=a.trim()),Je.default.createElement("div",{dangerouslySetInnerHTML:{__html:o},className:(0,Sa.default)(r,"renderedMarkdown")})}return null};markdown_Markdown.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};var ao=OAS3ComponentWrapFactory(markdown_Markdown),oo=OAS3ComponentWrapFactory((e=>{let{Ori:t,...r}=e;const{schema:n,getComponent:a,errSelectors:o,authorized:s,onAuthChange:l,name:i}=r,c=a("HttpAuth");return"http"===n.get("type")?Je.default.createElement(c,{key:i,schema:n,name:i,errSelectors:o,authorized:s,getComponent:a,onChange:l}):Je.default.createElement(t,r)})),so=OAS3ComponentWrapFactory(OnlineValidatorBadge);class ModelComponent extends Je.Component{render(){let{getConfigs:e,schema:t}=this.props,r=["model-box"],n=null;return!0===t.get("deprecated")&&(r.push("deprecated"),n=Je.default.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),Je.default.createElement("div",{className:r.join(" ")},n,Je.default.createElement(Model,(0,er.default)({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}var lo=OAS3ComponentWrapFactory(ModelComponent),io=OAS3ComponentWrapFactory((e=>{let{Ori:t,...r}=e;const{schema:n,getComponent:a,errors:o,onChange:s}=r,l=n&&n.get?n.get("format"):null,i=n&&n.get?n.get("type"):null,c=a("Input");return i&&"string"===i&&l&&("binary"===l||"base64"===l)?Je.default.createElement(c,{type:"file",className:o.length?"invalid":"",title:o.length?o:"",onChange:e=>{s(e.target.files[0])},disabled:t.isDisabled}):Je.default.createElement(t,r)})),co={Markdown:ao,AuthItem:oo,OpenAPIVersion:function OAS30ComponentWrapFactory(e){return(t,r)=>n=>"function"==typeof r.specSelectors?.isOAS30?r.specSelectors.isOAS30()?Je.default.createElement(e,(0,er.default)({},n,r,{Ori:t})):Je.default.createElement(t,n):(console.warn("OAS30 wrapper: couldn't get spec"),null)}((e=>{const{Ori:t}=e;return Je.default.createElement(t,{oasVersion:"3.0"})})),JsonSchema_string:io,model:lo,onlineValidatorBadge:so};const uo="oas3_set_servers",po="oas3_set_request_body_value",mo="oas3_set_request_body_retain_flag",fo="oas3_set_request_body_inclusion",ho="oas3_set_active_examples_member",go="oas3_set_request_content_type",yo="oas3_set_response_content_type",Eo="oas3_set_server_variable_value",vo="oas3_set_request_body_validate_error",So="oas3_clear_request_body_validate_error",_o="oas3_clear_request_body_value";function setSelectedServer(e,t){return{type:uo,payload:{selectedServerUrl:e,namespace:t}}}function setRequestBodyValue(e){let{value:t,pathMethod:r}=e;return{type:po,payload:{value:t,pathMethod:r}}}const setRetainRequestBodyValueFlag=e=>{let{value:t,pathMethod:r}=e;return{type:mo,payload:{value:t,pathMethod:r}}};function setRequestBodyInclusion(e){let{value:t,pathMethod:r,name:n}=e;return{type:fo,payload:{value:t,pathMethod:r,name:n}}}function setActiveExamplesMember(e){let{name:t,pathMethod:r,contextType:n,contextName:a}=e;return{type:ho,payload:{name:t,pathMethod:r,contextType:n,contextName:a}}}function setRequestContentType(e){let{value:t,pathMethod:r}=e;return{type:go,payload:{value:t,pathMethod:r}}}function setResponseContentType(e){let{value:t,path:r,method:n}=e;return{type:yo,payload:{value:t,path:r,method:n}}}function setServerVariableValue(e){let{server:t,namespace:r,key:n,val:a}=e;return{type:Eo,payload:{server:t,namespace:r,key:n,val:a}}}const setRequestBodyValidateError=e=>{let{path:t,method:r,validationErrors:n}=e;return{type:vo,payload:{path:t,method:r,validationErrors:n}}},clearRequestBodyValidateError=e=>{let{path:t,method:r}=e;return{type:So,payload:{path:t,method:r}}},initRequestBodyValidateError=e=>{let{pathMethod:t}=e;return{type:So,payload:{path:t[0],method:t[1]}}},clearRequestBodyValue=e=>{let{pathMethod:t}=e;return{type:_o,payload:{pathMethod:t}}},oas3_selectors_onlyOAS3=e=>function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),a=1;a{if(r.getSystem().specSelectors.isOAS3()){const a=e(t,...n);return"function"==typeof a?a(r):a}return null}};const bo=oas3_selectors_onlyOAS3(((e,t)=>{const r=t?[t,"selectedServer"]:["selectedServer"];return e.getIn(r)||""})),wo=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"bodyValue"])||null)),Co=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"retainBodyValue"])||!1)),selectDefaultRequestBodyValue=(e,t,r)=>e=>{const{oas3Selectors:n,specSelectors:a,fn:o}=e.getSystem();if(a.isOAS3()){const e=n.requestContentType(t,r);if(e)return getDefaultRequestBodyValue(a.specResolvedSubtree(["paths",t,r,"requestBody"]),e,n.activeExamplesMember(t,r,"requestBody","requestBody"),o)}return null},xo=oas3_selectors_onlyOAS3(((e,t,r)=>e=>{const{oas3Selectors:n,specSelectors:a,fn:o}=e;let s=!1;const l=n.requestContentType(t,r);let i=n.requestBodyValue(t,r);const c=a.specResolvedSubtree(["paths",t,r,"requestBody"]);if(!c)return!1;if(Ke.Map.isMap(i)&&(i=stringify(i.mapEntries((e=>Ke.Map.isMap(e[1])?[e[0],e[1].get("value")]:e)).toJS())),Ke.List.isList(i)&&(i=stringify(i)),l){const e=getDefaultRequestBodyValue(c,l,n.activeExamplesMember(t,r,"requestBody","requestBody"),o);s=!!i&&i!==e}return s})),Oo=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"bodyInclusion"])||(0,Ke.Map)())),ko=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"errors"])||null)),No=oas3_selectors_onlyOAS3(((e,t,r,n,a)=>e.getIn(["examples",t,r,n,a,"activeExample"])||null)),Ao=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"requestContentType"])||null)),Io=oas3_selectors_onlyOAS3(((e,t,r)=>e.getIn(["requestData",t,r,"responseContentType"])||null)),Ro=oas3_selectors_onlyOAS3(((e,t,r)=>{let n;if("string"!=typeof t){const{server:e,namespace:a}=t;n=a?[a,"serverVariableValues",e,r]:["serverVariableValues",e,r]}else{n=["serverVariableValues",t,r]}return e.getIn(n)||null})),To=oas3_selectors_onlyOAS3(((e,t)=>{let r;if("string"!=typeof t){const{server:e,namespace:n}=t;r=n?[n,"serverVariableValues",e]:["serverVariableValues",e]}else{r=["serverVariableValues",t]}return e.getIn(r)||(0,Ke.OrderedMap)()})),Bo=oas3_selectors_onlyOAS3(((e,t)=>{var r,n;if("string"!=typeof t){const{server:a,namespace:o}=t;n=a,r=o?e.getIn([o,"serverVariableValues",n]):e.getIn(["serverVariableValues",n])}else n=t,r=e.getIn(["serverVariableValues",n]);r=r||(0,Ke.OrderedMap)();let a=n;return r.map(((e,t)=>{a=a.replace(new RegExp(`{${t}}`,"g"),e)})),a})),jo=function validateRequestBodyIsRequired(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n{const n=t.getSystem().specSelectors.specJson();let a=[...r][1]||[];return!n.getIn(["paths",...a,"requestBody","required"])||e(...r)}}}(((e,t)=>((e,t)=>(t=t||[],!!e.getIn(["requestData",...t,"bodyValue"])))(e,t))),validateShallowRequired=(e,t)=>{let{oas3RequiredRequestBodyContentType:r,oas3RequestContentType:n,oas3RequestBodyValue:a}=t,o=[];if(!Ke.Map.isMap(a))return o;let s=[];return Object.keys(r.requestContentType).forEach((e=>{if(e===n){r.requestContentType[e].forEach((e=>{s.indexOf(e)<0&&s.push(e)}))}})),s.forEach((e=>{a.getIn([e,"value"])||o.push(e)})),o},Po=(0,At.createSelector)((()=>["get","put","post","delete","options","head","patch","trace"]));var Mo={[uo]:(e,t)=>{let{payload:{selectedServerUrl:r,namespace:n}}=t;const a=n?[n,"selectedServer"]:["selectedServer"];return e.setIn(a,r)},[po]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[a,o]=n;if(!Ke.Map.isMap(r))return e.setIn(["requestData",a,o,"bodyValue"],r);let s,l=e.getIn(["requestData",a,o,"bodyValue"])||(0,Ke.Map)();Ke.Map.isMap(l)||(l=(0,Ke.Map)());const[...i]=r.keys();return i.forEach((e=>{let t=r.getIn([e]);l.has(e)&&Ke.Map.isMap(t)||(s=l.setIn([e,"value"],t))})),e.setIn(["requestData",a,o,"bodyValue"],s)},[mo]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[a,o]=n;return e.setIn(["requestData",a,o,"retainBodyValue"],r)},[fo]:(e,t)=>{let{payload:{value:r,pathMethod:n,name:a}}=t,[o,s]=n;return e.setIn(["requestData",o,s,"bodyInclusion",a],r)},[ho]:(e,t)=>{let{payload:{name:r,pathMethod:n,contextType:a,contextName:o}}=t,[s,l]=n;return e.setIn(["examples",s,l,a,o,"activeExample"],r)},[go]:(e,t)=>{let{payload:{value:r,pathMethod:n}}=t,[a,o]=n;return e.setIn(["requestData",a,o,"requestContentType"],r)},[yo]:(e,t)=>{let{payload:{value:r,path:n,method:a}}=t;return e.setIn(["requestData",n,a,"responseContentType"],r)},[Eo]:(e,t)=>{let{payload:{server:r,namespace:n,key:a,val:o}}=t;const s=n?[n,"serverVariableValues",r,a]:["serverVariableValues",r,a];return e.setIn(s,o)},[vo]:(e,t)=>{let{payload:{path:r,method:n,validationErrors:a}}=t,o=[];if(o.push("Required field is not provided"),a.missingBodyValue)return e.setIn(["requestData",r,n,"errors"],(0,Ke.fromJS)(o));if(a.missingRequiredKeys&&a.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=a;return e.updateIn(["requestData",r,n,"bodyValue"],(0,Ke.fromJS)({}),(e=>t.reduce(((e,t)=>e.setIn([t,"errors"],(0,Ke.fromJS)(o))),e)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),e},[So]:(e,t)=>{let{payload:{path:r,method:n}}=t;const a=e.getIn(["requestData",r,n,"bodyValue"]);if(!Ke.Map.isMap(a))return e.setIn(["requestData",r,n,"errors"],(0,Ke.fromJS)([]));const[...o]=a.keys();return o?e.updateIn(["requestData",r,n,"bodyValue"],(0,Ke.fromJS)({}),(e=>o.reduce(((e,t)=>e.setIn([t,"errors"],(0,Ke.fromJS)([]))),e))):e},[_o]:(e,t)=>{let{payload:{pathMethod:r}}=t,[n,a]=r;const o=e.getIn(["requestData",n,a,"bodyValue"]);return o?Ke.Map.isMap(o)?e.setIn(["requestData",n,a,"bodyValue"],(0,Ke.Map)()):e.setIn(["requestData",n,a,"bodyValue"],""):e}};function oas3(){return{components:ro,wrapComponents:co,statePlugins:{spec:{wrapSelectors:Pe,selectors:qe},auth:{wrapSelectors:Me},oas3:{actions:{...Le},reducers:Mo,selectors:{...De}}}}}var webhooks=e=>{let{specSelectors:t,getComponent:r}=e;const n=t.selectWebhooksOperations(),a=Object.keys(n),o=r("OperationContainer",!0);return 0===a.length?null:Je.default.createElement("div",{className:"webhooks"},Je.default.createElement("h2",null,"Webhooks"),a.map((e=>Je.default.createElement("div",{key:`${e}-webhook`},n[e].map((t=>Je.default.createElement(o,{key:`${e}-${t.method}-webhook`,op:t.operation,tag:"webhooks",method:t.method,path:e,specPath:t.specPath,allowTryItOut:!1})))))))};var components_license=e=>{let{getComponent:t,specSelectors:r}=e;const n=r.selectLicenseNameField(),a=r.selectLicenseUrl(),o=t("Link");return Je.default.createElement("div",{className:"info__license"},a?Je.default.createElement("div",{className:"info__license__url"},Je.default.createElement(o,{target:"_blank",href:sanitizeUrl(a)},n)):Je.default.createElement("span",null,n))};var components_contact=e=>{let{getComponent:t,specSelectors:r}=e;const n=r.selectContactNameField(),a=r.selectContactUrl(),o=r.selectContactEmailField(),s=t("Link");return Je.default.createElement("div",{className:"info__contact"},a&&Je.default.createElement("div",null,Je.default.createElement(s,{href:sanitizeUrl(a),target:"_blank"},n," - Website")),o&&Je.default.createElement(s,{href:sanitizeUrl(`mailto:${o}`)},a?`Send email to ${n}`:`Contact ${n}`))};var oas31_components_info=e=>{let{getComponent:t,specSelectors:r}=e;const n=r.version(),a=r.url(),o=r.basePath(),s=r.host(),l=r.selectInfoSummaryField(),i=r.selectInfoDescriptionField(),c=r.selectInfoTitleField(),u=r.selectInfoTermsOfServiceUrl(),d=r.selectExternalDocsUrl(),p=r.selectExternalDocsDescriptionField(),m=r.contact(),f=r.license(),h=t("Markdown",!0),g=t("Link"),y=t("VersionStamp"),v=t("OpenAPIVersion"),S=t("InfoUrl"),_=t("InfoBasePath"),b=t("License",!0),w=t("Contact",!0),C=t("JsonSchemaDialect",!0);return Je.default.createElement("div",{className:"info"},Je.default.createElement("hgroup",{className:"main"},Je.default.createElement("h2",{className:"title"},c,Je.default.createElement("span",null,n&&Je.default.createElement(y,{version:n}),Je.default.createElement(v,{oasVersion:"3.1"}))),(s||o)&&Je.default.createElement(_,{host:s,basePath:o}),a&&Je.default.createElement(S,{getComponent:t,url:a})),l&&Je.default.createElement("p",{className:"info__summary"},l),Je.default.createElement("div",{className:"info__description description"},Je.default.createElement(h,{source:i})),u&&Je.default.createElement("div",{className:"info__tos"},Je.default.createElement(g,{target:"_blank",href:sanitizeUrl(u)},"Terms of service")),m.size>0&&Je.default.createElement(w,null),f.size>0&&Je.default.createElement(b,null),d&&Je.default.createElement(g,{className:"info__extdocs",target:"_blank",href:sanitizeUrl(d)},p||d),Je.default.createElement(C,null))};var json_schema_dialect=e=>{let{getComponent:t,specSelectors:r}=e;const n=r.selectJsonSchemaDialectField(),a=r.selectJsonSchemaDialectDefault(),o=t("Link");return Je.default.createElement(Je.default.Fragment,null,n&&n===a&&Je.default.createElement("p",{className:"info__jsonschemadialect"},"JSON Schema dialect:"," ",Je.default.createElement(o,{target:"_blank",href:sanitizeUrl(n)},n)),n&&n!==a&&Je.default.createElement("div",{className:"error-wrapper"},Je.default.createElement("div",{className:"no-margin"},Je.default.createElement("div",{className:"errors"},Je.default.createElement("div",{className:"errors-wrapper"},Je.default.createElement("h4",{className:"center"},"Warning"),Je.default.createElement("p",{className:"message"},Je.default.createElement("strong",null,"OpenAPI.jsonSchemaDialect")," field contains a value different from the default value of"," ",Je.default.createElement(o,{target:"_blank",href:a},a),". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value."))))))};var version_pragma_filter=e=>{let{bypass:t,isSwagger2:r,isOAS3:n,isOAS31:a,alsoShow:o,children:s}=e;return t?Je.default.createElement("div",null,s):r&&(n||a)?Je.default.createElement("div",{className:"version-pragma"},o,Je.default.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},Je.default.createElement("div",null,Je.default.createElement("h3",null,"Unable to render this definition"),Je.default.createElement("p",null,Je.default.createElement("code",null,"swagger")," and ",Je.default.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),Je.default.createElement("p",null,"Supported version fields are ",Je.default.createElement("code",null,'swagger: "2.0"')," and those that match ",Je.default.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",Je.default.createElement("code",null,"openapi: 3.1.0"),").")))):r||n||a?Je.default.createElement("div",null,s):Je.default.createElement("div",{className:"version-pragma"},o,Je.default.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},Je.default.createElement("div",null,Je.default.createElement("h3",null,"Unable to render this definition"),Je.default.createElement("p",null,"The provided definition does not specify a valid version field."),Je.default.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",Je.default.createElement("code",null,'swagger: "2.0"')," and those that match ",Je.default.createElement("code",null,"openapi: 3.x.y")," (for example,"," ",Je.default.createElement("code",null,"openapi: 3.1.0"),")."))))};const getModelName=e=>"string"==typeof e&&e.includes("#/components/schemas/")?(e=>{const t=e.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(t)}catch{return t}})(e.replace(/^.*#\/components\/schemas\//,"")):null,qo=(0,Je.forwardRef)(((e,t)=>{let{schema:r,getComponent:n,onToggle:a}=e;const o=n("JSONSchema202012"),s=getModelName(r.get("$$ref")),l=(0,Je.useCallback)(((e,t)=>{a(s,t)}),[s,a]);return Je.default.createElement(o,{name:s,schema:r.toJS(),ref:t,onExpand:l})}));qo.defaultProps={name:"",displayName:"",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};var Lo=qo;var models=e=>{let{specActions:t,specSelectors:r,layoutSelectors:n,layoutActions:a,getComponent:o,getConfigs:s}=e;const l=r.selectSchemas(),i=Object.keys(l).length>0,c=["components","schemas"],{docExpansion:u,defaultModelsExpandDepth:d}=s(),p=d>0&&"none"!==u,m=n.isShown(c,p),f=o("Collapse"),h=o("JSONSchema202012"),g=o("ArrowUpIcon"),y=o("ArrowDownIcon");(0,Je.useEffect)((()=>{const e=m&&d>1,n=null!=r.specResolvedSubtree(c);e&&!n&&t.requestResolvedSubtree(c)}),[m,d]);const v=(0,Je.useCallback)((()=>{a.show(c,!m)}),[m]),S=(0,Je.useCallback)((e=>{null!==e&&a.readyToScroll(c,e)}),[]),handleJSONSchema202012Ref=e=>t=>{null!==t&&a.readyToScroll([...c,e],t)},handleJSONSchema202012Expand=e=>(n,a)=>{if(a){const n=[...c,e];null!=r.specResolvedSubtree(n)||t.requestResolvedSubtree([...c,e])}};return!i||d<0?null:Je.default.createElement("section",{className:(0,Sa.default)("models",{"is-open":m}),ref:S},Je.default.createElement("h4",null,Je.default.createElement("button",{"aria-expanded":m,className:"models-control",onClick:v},Je.default.createElement("span",null,"Schemas"),m?Je.default.createElement(g,null):Je.default.createElement(y,null))),Je.default.createElement(f,{isOpened:m},Object.entries(l).map((e=>{let[t,r]=e;return Je.default.createElement(h,{key:t,ref:handleJSONSchema202012Ref(t),schema:r,name:t,onExpand:handleJSONSchema202012Expand(t)})}))))};var mutual_tls_auth=e=>{let{schema:t,getComponent:r}=e;const n=r("JumpToPath",!0);return Je.default.createElement("div",null,Je.default.createElement("h4",null,t.get("name")," (mutualTLS)"," ",Je.default.createElement(n,{path:["securityDefinitions",t.get("name")]})),Je.default.createElement("p",null,"Mutual TLS is required by this API/Operation. Certificates are managed via your Operating System and/or your browser."),Je.default.createElement("p",null,t.get("description")))};class auths_Auths extends Je.default.Component{constructor(e,t){super(e,t),this.state={}}onAuthChange=e=>{let{name:t}=e;this.setState({[t]:e})};submitAuth=e=>{e.preventDefault();let{authActions:t}=this.props;t.authorizeWithPersistOption(this.state)};logoutClick=e=>{e.preventDefault();let{authActions:t,definitions:r}=this.props,n=r.map(((e,t)=>t)).toArray();this.setState(n.reduce(((e,t)=>(e[t]="",e)),{})),t.logoutWithPersistOption(n)};close=e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)};render(){let{definitions:e,getComponent:t,authSelectors:r,errSelectors:n}=this.props;const a=t("AuthItem"),o=t("oauth2",!0),s=t("Button"),l=r.authorized(),i=e.filter(((e,t)=>!!l.get(t))),c=e.filter((e=>"oauth2"!==e.get("type")&&"mutualTLS"!==e.get("type"))),u=e.filter((e=>"oauth2"===e.get("type"))),d=e.filter((e=>"mutualTLS"===e.get("type")));return Je.default.createElement("div",{className:"auth-container"},c.size>0&&Je.default.createElement("form",{onSubmit:this.submitAuth},c.map(((e,r)=>Je.default.createElement(a,{key:r,schema:e,name:r,getComponent:t,onAuthChange:this.onAuthChange,authorized:l,errSelectors:n}))).toArray(),Je.default.createElement("div",{className:"auth-btn-wrapper"},c.size===i.size?Je.default.createElement(s,{className:"btn modal-btn auth",onClick:this.logoutClick,"aria-label":"Remove authorization"},"Logout"):Je.default.createElement(s,{type:"submit",className:"btn modal-btn auth authorize","aria-label":"Apply credentials"},"Authorize"),Je.default.createElement(s,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),u.size>0?Je.default.createElement("div",null,Je.default.createElement("div",{className:"scope-def"},Je.default.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),Je.default.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),e.filter((e=>"oauth2"===e.get("type"))).map(((e,t)=>Je.default.createElement("div",{key:t},Je.default.createElement(o,{authorized:l,schema:e,name:t})))).toArray()):null,d.size>0&&Je.default.createElement("div",null,d.map(((e,r)=>Je.default.createElement(a,{key:r,schema:e,name:r,getComponent:t,onAuthChange:this.onAuthChange,authorized:l,errSelectors:n}))).toArray()))}}var Do=auths_Auths;const isOAS31=e=>{const t=e.get("openapi");return"string"==typeof t&&/^3\.1\.(?:[1-9]\d*|0)$/.test(t)},fn_createOnlyOAS31Selector=e=>function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),a=1;a{if(r.getSystem().specSelectors.isOAS31()){const a=e(t,...n);return"function"==typeof a?a(r):a}return null}},createOnlyOAS31SelectorWrapper=e=>(t,r)=>function(n){for(var a=arguments.length,o=new Array(a>1?a-1:0),s=1;sfunction(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),a=1;a{const a=e(t,r,...n);return"function"==typeof a?a(r):a}},createOnlyOAS31ComponentWrapper=e=>(t,r)=>n=>r.specSelectors.isOAS31()?Je.default.createElement(e,(0,er.default)({},n,{originalComponent:t,getSystem:r.getSystem})):Je.default.createElement(t,n);var Uo=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t}=e;const r=t().getComponent("OAS31License",!0);return Je.default.createElement(r,null)}));var $o=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t}=e;const r=t().getComponent("OAS31Contact",!0);return Je.default.createElement(r,null)}));var Jo=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t}=e;const r=t().getComponent("OAS31Info",!0);return Je.default.createElement(r,null)}));const makeIsExpandable=(e,t)=>{const{fn:r}=t();if("function"!=typeof e)return null;const{hasKeyword:n}=r.jsonSchema202012;return t=>e(t)||n(t,"example")||t?.xml||t?.discriminator||t?.externalDocs},getProperties=(e,t)=>{let{includeReadOnly:r,includeWriteOnly:n}=t;if(!e?.properties)return{};const a=Object.entries(e.properties).filter((e=>{let[,t]=e;return(!(!0===t?.readOnly)||r)&&(!(!0===t?.writeOnly)||n)}));return Object.fromEntries(a)},Vo=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t,...r}=e;const n=t(),{getComponent:a,fn:o,getConfigs:s}=n,l=s(),i=a("OAS31Model"),c=a("JSONSchema202012"),u=a("JSONSchema202012Keyword$schema"),d=a("JSONSchema202012Keyword$vocabulary"),p=a("JSONSchema202012Keyword$id"),m=a("JSONSchema202012Keyword$anchor"),f=a("JSONSchema202012Keyword$dynamicAnchor"),h=a("JSONSchema202012Keyword$ref"),g=a("JSONSchema202012Keyword$dynamicRef"),y=a("JSONSchema202012Keyword$defs"),v=a("JSONSchema202012Keyword$comment"),S=a("JSONSchema202012KeywordAllOf"),_=a("JSONSchema202012KeywordAnyOf"),b=a("JSONSchema202012KeywordOneOf"),w=a("JSONSchema202012KeywordNot"),C=a("JSONSchema202012KeywordIf"),x=a("JSONSchema202012KeywordThen"),O=a("JSONSchema202012KeywordElse"),k=a("JSONSchema202012KeywordDependentSchemas"),N=a("JSONSchema202012KeywordPrefixItems"),A=a("JSONSchema202012KeywordItems"),I=a("JSONSchema202012KeywordContains"),R=a("JSONSchema202012KeywordProperties"),T=a("JSONSchema202012KeywordPatternProperties"),B=a("JSONSchema202012KeywordAdditionalProperties"),j=a("JSONSchema202012KeywordPropertyNames"),P=a("JSONSchema202012KeywordUnevaluatedItems"),M=a("JSONSchema202012KeywordUnevaluatedProperties"),q=a("JSONSchema202012KeywordType"),L=a("JSONSchema202012KeywordEnum"),D=a("JSONSchema202012KeywordConst"),U=a("JSONSchema202012KeywordConstraint"),$=a("JSONSchema202012KeywordDependentRequired"),J=a("JSONSchema202012KeywordContentSchema"),V=a("JSONSchema202012KeywordTitle"),K=a("JSONSchema202012KeywordDescription"),z=a("JSONSchema202012KeywordDefault"),F=a("JSONSchema202012KeywordDeprecated"),W=a("JSONSchema202012KeywordReadOnly"),H=a("JSONSchema202012KeywordWriteOnly"),G=a("JSONSchema202012Accordion"),X=a("JSONSchema202012ExpandDeepButton"),Y=a("JSONSchema202012ChevronRightIcon"),Q=a("withJSONSchema202012Context")(i,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:l.defaultModelExpandDepth,includeReadOnly:Boolean(r.includeReadOnly),includeWriteOnly:Boolean(r.includeWriteOnly)},components:{JSONSchema:c,Keyword$schema:u,Keyword$vocabulary:d,Keyword$id:p,Keyword$anchor:m,Keyword$dynamicAnchor:f,Keyword$ref:h,Keyword$dynamicRef:g,Keyword$defs:y,Keyword$comment:v,KeywordAllOf:S,KeywordAnyOf:_,KeywordOneOf:b,KeywordNot:w,KeywordIf:C,KeywordThen:x,KeywordElse:O,KeywordDependentSchemas:k,KeywordPrefixItems:N,KeywordItems:A,KeywordContains:I,KeywordProperties:R,KeywordPatternProperties:T,KeywordAdditionalProperties:B,KeywordPropertyNames:j,KeywordUnevaluatedItems:P,KeywordUnevaluatedProperties:M,KeywordType:q,KeywordEnum:L,KeywordConst:D,KeywordConstraint:U,KeywordDependentRequired:$,KeywordContentSchema:J,KeywordTitle:V,KeywordDescription:K,KeywordDefault:z,KeywordDeprecated:F,KeywordReadOnly:W,KeywordWriteOnly:H,Accordion:G,ExpandDeepButton:X,ChevronRightIcon:Y},fn:{upperFirst:o.upperFirst,isExpandable:makeIsExpandable(o.jsonSchema202012.isExpandable,t),getProperties}});return Je.default.createElement(Q,r)}));var Ko=Vo;const zo=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t}=e;const{getComponent:r,fn:n,getConfigs:a}=t(),o=a();if(zo.ModelsWithJSONSchemaContext)return Je.default.createElement(zo.ModelsWithJSONSchemaContext,null);const s=r("OAS31Models",!0),l=r("JSONSchema202012"),i=r("JSONSchema202012Keyword$schema"),c=r("JSONSchema202012Keyword$vocabulary"),u=r("JSONSchema202012Keyword$id"),d=r("JSONSchema202012Keyword$anchor"),p=r("JSONSchema202012Keyword$dynamicAnchor"),m=r("JSONSchema202012Keyword$ref"),f=r("JSONSchema202012Keyword$dynamicRef"),h=r("JSONSchema202012Keyword$defs"),g=r("JSONSchema202012Keyword$comment"),y=r("JSONSchema202012KeywordAllOf"),v=r("JSONSchema202012KeywordAnyOf"),S=r("JSONSchema202012KeywordOneOf"),_=r("JSONSchema202012KeywordNot"),b=r("JSONSchema202012KeywordIf"),w=r("JSONSchema202012KeywordThen"),C=r("JSONSchema202012KeywordElse"),x=r("JSONSchema202012KeywordDependentSchemas"),O=r("JSONSchema202012KeywordPrefixItems"),k=r("JSONSchema202012KeywordItems"),N=r("JSONSchema202012KeywordContains"),A=r("JSONSchema202012KeywordProperties"),I=r("JSONSchema202012KeywordPatternProperties"),R=r("JSONSchema202012KeywordAdditionalProperties"),T=r("JSONSchema202012KeywordPropertyNames"),B=r("JSONSchema202012KeywordUnevaluatedItems"),j=r("JSONSchema202012KeywordUnevaluatedProperties"),P=r("JSONSchema202012KeywordType"),M=r("JSONSchema202012KeywordEnum"),q=r("JSONSchema202012KeywordConst"),L=r("JSONSchema202012KeywordConstraint"),D=r("JSONSchema202012KeywordDependentRequired"),U=r("JSONSchema202012KeywordContentSchema"),$=r("JSONSchema202012KeywordTitle"),J=r("JSONSchema202012KeywordDescription"),V=r("JSONSchema202012KeywordDefault"),K=r("JSONSchema202012KeywordDeprecated"),z=r("JSONSchema202012KeywordReadOnly"),F=r("JSONSchema202012KeywordWriteOnly"),W=r("JSONSchema202012Accordion"),H=r("JSONSchema202012ExpandDeepButton"),G=r("JSONSchema202012ChevronRightIcon"),X=r("withJSONSchema202012Context");return zo.ModelsWithJSONSchemaContext=X(s,{config:{default$schema:"https://spec.openapis.org/oas/3.1/dialect/base",defaultExpandedLevels:o.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:l,Keyword$schema:i,Keyword$vocabulary:c,Keyword$id:u,Keyword$anchor:d,Keyword$dynamicAnchor:p,Keyword$ref:m,Keyword$dynamicRef:f,Keyword$defs:h,Keyword$comment:g,KeywordAllOf:y,KeywordAnyOf:v,KeywordOneOf:S,KeywordNot:_,KeywordIf:b,KeywordThen:w,KeywordElse:C,KeywordDependentSchemas:x,KeywordPrefixItems:O,KeywordItems:k,KeywordContains:N,KeywordProperties:A,KeywordPatternProperties:I,KeywordAdditionalProperties:R,KeywordPropertyNames:T,KeywordUnevaluatedItems:B,KeywordUnevaluatedProperties:j,KeywordType:P,KeywordEnum:M,KeywordConst:q,KeywordConstraint:L,KeywordDependentRequired:D,KeywordContentSchema:U,KeywordTitle:$,KeywordDescription:J,KeywordDefault:V,KeywordDeprecated:K,KeywordReadOnly:z,KeywordWriteOnly:F,Accordion:W,ExpandDeepButton:H,ChevronRightIcon:G},fn:{upperFirst:n.upperFirst,isExpandable:n.jsonSchema202012.isExpandable,getProperties:n.jsonSchema202012.getProperties}}),Je.default.createElement(zo.ModelsWithJSONSchemaContext,null)}));zo.ModelsWithJSONSchemaContext=null;var Fo=zo;var wrap_components_version_pragma_filter=(e,t)=>e=>{const r=t.specSelectors.isOAS31(),n=t.getComponent("OAS31VersionPragmaFilter");return Je.default.createElement(n,(0,er.default)({isOAS31:r},e))};const Wo=createOnlyOAS31ComponentWrapper((e=>{let{originalComponent:t,...r}=e;const{getComponent:n,schema:a}=r,o=n("MutualTLSAuth",!0);return"mutualTLS"===a.get("type")?Je.default.createElement(o,{schema:a}):Je.default.createElement(t,r)}));var Ho=Wo;var Go=createOnlyOAS31ComponentWrapper((e=>{let{getSystem:t,...r}=e;const n=t().getComponent("OAS31Auths",!0);return Je.default.createElement(n,r)}));const Xo=(0,Ke.Map)(),Yo=(0,At.createSelector)(((e,t)=>t.specSelectors.specJson()),isOAS31),selectors_webhooks=()=>e=>e.specSelectors.specJson().get("webhooks",Xo),Qo=(0,At.createSelector)(((e,t)=>t.specSelectors.webhooks()),((e,t)=>t.specSelectors.validOperationMethods()),((e,t)=>t.specSelectors.specResolvedSubtree(["webhooks"])),((e,t)=>Ke.Map.isMap(e)?e.reduce(((e,r,n)=>{if(!Ke.Map.isMap(r))return e;const a=r.entrySeq().filter((e=>{let[r]=e;return t.includes(r)})).map((e=>{let[t,r]=e;return{operation:(0,Ke.Map)({operation:r}),method:t,path:n,specPath:(0,Ke.List)(["webhooks",n,t])}}));return e.concat(a)}),(0,Ke.List)()).groupBy((e=>e.path)).map((e=>e.toArray())).toObject():{})),selectors_license=()=>e=>e.specSelectors.info().get("license",Xo),selectLicenseNameField=()=>e=>e.specSelectors.license().get("name","License"),selectLicenseUrlField=()=>e=>e.specSelectors.license().get("url"),Zo=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t,r)=>{if(r)return safeBuildUrl(r,e,{selectedServer:t})})),selectLicenseIdentifierField=()=>e=>e.specSelectors.license().get("identifier"),selectors_contact=()=>e=>e.specSelectors.info().get("contact",Xo),selectContactNameField=()=>e=>e.specSelectors.contact().get("name","the developer"),selectContactEmailField=()=>e=>e.specSelectors.contact().get("email"),selectContactUrlField=()=>e=>e.specSelectors.contact().get("url"),es=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectContactUrlField()),((e,t,r)=>{if(r)return safeBuildUrl(r,e,{selectedServer:t})})),selectInfoTitleField=()=>e=>e.specSelectors.info().get("title"),selectInfoSummaryField=()=>e=>e.specSelectors.info().get("summary"),selectInfoDescriptionField=()=>e=>e.specSelectors.info().get("description"),selectInfoTermsOfServiceField=()=>e=>e.specSelectors.info().get("termsOfService"),ts=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectInfoTermsOfServiceField()),((e,t,r)=>{if(r)return safeBuildUrl(r,e,{selectedServer:t})})),selectExternalDocsDescriptionField=()=>e=>e.specSelectors.externalDocs().get("description"),selectExternalDocsUrlField=()=>e=>e.specSelectors.externalDocs().get("url"),rs=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectExternalDocsUrlField()),((e,t,r)=>{if(r)return safeBuildUrl(r,e,{selectedServer:t})})),selectJsonSchemaDialectField=()=>e=>e.specSelectors.specJson().get("jsonSchemaDialect"),selectJsonSchemaDialectDefault=()=>"https://spec.openapis.org/oas/3.1/dialect/base",ns=(0,At.createSelector)(((e,t)=>t.specSelectors.definitions()),((e,t)=>t.specSelectors.specResolvedSubtree(["components","schemas"])),((e,t)=>Ke.Map.isMap(e)?Ke.Map.isMap(t)?Object.entries(e.toJS()).reduce(((e,r)=>{let[n,a]=r;const o=t.get(n);return e[n]=o?.toJS()||a,e}),{}):e.toJS():{})),wrap_selectors_isOAS3=(e,t)=>function(r){const n=t.specSelectors.isOAS31();for(var a=arguments.length,o=new Array(a>1?a-1:0),s=1;s(e,t)=>t.oas31Selectors.selectLicenseUrl())),os=createOnlyOAS31SelectorWrapper((()=>(e,t)=>{const r=t.specSelectors.securityDefinitions();let n=e();return r?(r.entrySeq().forEach((e=>{let[t,r]=e;"mutualTLS"===r.get("type")&&(n=n.push(new Ke.Map({[t]:r})))})),n):n})),ss=(0,At.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t)=>t.specSelectors.selectLicenseIdentifierField()),((e,t,r,n)=>r?safeBuildUrl(r,e,{selectedServer:t}):n?`https://spdx.org/licenses/${n}.html`:void 0));var keywords_Example=e=>{let{schema:t,getSystem:r}=e;const{fn:n}=r(),{hasKeyword:a,stringify:o}=n.jsonSchema202012.useFn();return a(t,"example")?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--example"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Example"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},o(t.example))):null};var keywords_Xml=e=>{let{schema:t,getSystem:r}=e;const n=t?.xml||{},{fn:a,getComponent:o}=r(),{useIsExpandedDeeply:s,useComponent:l}=a.jsonSchema202012,i=s(),c=!!(n.name||n.namespace||n.prefix),[u,d]=(0,Je.useState)(i),[p,m]=(0,Je.useState)(!1),f=l("Accordion"),h=l("ExpandDeepButton"),g=o("JSONSchema202012DeepExpansionContext")(),y=(0,Je.useCallback)((()=>{d((e=>!e))}),[]),v=(0,Je.useCallback)(((e,t)=>{d(t),m(t)}),[]);return 0===Object.keys(n).length?null:Je.default.createElement(g.Provider,{value:p},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml"},c?Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(f,{expanded:u,onChange:y},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML")),Je.default.createElement(h,{expanded:u,onClick:v})):Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"XML"),!0===n.attribute&&Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"attribute"),!0===n.wrapped&&Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"wrapped"),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!u})},u&&Je.default.createElement(Je.default.Fragment,null,n.name&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"name"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},n.name))),n.namespace&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement("div",{className:"json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"namespace"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},n.namespace))),n.prefix&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement("div",{className:"json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"prefix"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},n.prefix)))))))};const DiscriminatorMapping=e=>{let{discriminator:t}=e;const r=t?.mapping||{};return 0===Object.keys(r).length?null:Object.entries(r).map((e=>{let[t,r]=e;return Je.default.createElement("div",{key:`${t}-${r}`,className:"json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},t),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},r))}))};DiscriminatorMapping.defaultProps={mapping:void 0};var ls=DiscriminatorMapping;var Discriminator_Discriminator=e=>{let{schema:t,getSystem:r}=e;const n=t?.discriminator||{},{fn:a,getComponent:o}=r(),{useIsExpandedDeeply:s,useComponent:l}=a.jsonSchema202012,i=s(),c=!!n.mapping,[u,d]=(0,Je.useState)(i),[p,m]=(0,Je.useState)(!1),f=l("Accordion"),h=l("ExpandDeepButton"),g=o("JSONSchema202012DeepExpansionContext")(),y=(0,Je.useCallback)((()=>{d((e=>!e))}),[]),v=(0,Je.useCallback)(((e,t)=>{d(t),m(t)}),[]);return 0===Object.keys(n).length?null:Je.default.createElement(g.Provider,{value:p},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator"},c?Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(f,{expanded:u,onChange:y},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator")),Je.default.createElement(h,{expanded:u,onClick:v})):Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"Discriminator"),n.propertyName&&Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},n.propertyName),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!u})},u&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement(ls,{discriminator:n})))))};var keywords_ExternalDocs=e=>{let{schema:t,getSystem:r}=e;const n=t?.externalDocs||{},{fn:a,getComponent:o}=r(),{useIsExpandedDeeply:s,useComponent:l}=a.jsonSchema202012,i=s(),c=!(!n.description&&!n.url),[u,d]=(0,Je.useState)(i),[p,m]=(0,Je.useState)(!1),f=l("Accordion"),h=l("ExpandDeepButton"),g=o("JSONSchema202012KeywordDescription"),y=o("Link"),v=o("JSONSchema202012DeepExpansionContext")(),S=(0,Je.useCallback)((()=>{d((e=>!e))}),[]),_=(0,Je.useCallback)(((e,t)=>{d(t),m(t)}),[]);return 0===Object.keys(n).length?null:Je.default.createElement(v.Provider,{value:p},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs"},c?Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(f,{expanded:u,onChange:S},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation")),Je.default.createElement(h,{expanded:u,onClick:_})):Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"External documentation"),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!u})},u&&Je.default.createElement(Je.default.Fragment,null,n.description&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement(g,{schema:n,getSystem:r})),n.url&&Je.default.createElement("li",{className:"json-schema-2020-12-property"},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"url"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},Je.default.createElement(y,{target:"_blank",href:sanitizeUrl(n.url)},n.url))))))))};var keywords_Description=e=>{let{schema:t,getSystem:r}=e;if(!t?.description)return null;const{getComponent:n}=r(),a=n("Markdown");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},Je.default.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},Je.default.createElement(a,{source:t.description})))};var is=createOnlyOAS31ComponentWrapper(keywords_Description);const cs=createOnlyOAS31ComponentWrapper((e=>{let{schema:t,getSystem:r,originalComponent:n}=e;const{getComponent:a}=r(),o=a("JSONSchema202012KeywordDiscriminator"),s=a("JSONSchema202012KeywordXml"),l=a("JSONSchema202012KeywordExample"),i=a("JSONSchema202012KeywordExternalDocs");return Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(n,{schema:t}),Je.default.createElement(o,{schema:t,getSystem:r}),Je.default.createElement(s,{schema:t,getSystem:r}),Je.default.createElement(i,{schema:t,getSystem:r}),Je.default.createElement(l,{schema:t,getSystem:r}))}));var us=cs;var keywords_Properties=e=>{let{schema:t,getSystem:r}=e;const{fn:n}=r(),{useComponent:a}=n.jsonSchema202012,{getDependentRequired:o,getProperties:s}=n.jsonSchema202012.useFn(),l=n.jsonSchema202012.useConfig(),i=Array.isArray(t?.required)?t.required:[],c=a("JSONSchema"),u=s(t,l);return 0===Object.keys(u).length?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},Je.default.createElement("ul",null,Object.entries(u).map((e=>{let[r,n]=e;const a=i.includes(r),s=o(r,t);return Je.default.createElement("li",{key:r,className:(0,Sa.default)("json-schema-2020-12-property",{"json-schema-2020-12-property--required":a})},Je.default.createElement(c,{name:r,schema:n,dependentRequired:s}))}))))};var ds=createOnlyOAS31ComponentWrapper(keywords_Properties);var ps=function afterLoad(e){let{fn:t,getSystem:r}=e;if(t.jsonSchema202012){const e=makeIsExpandable(t.jsonSchema202012.isExpandable,r);Object.assign(this.fn.jsonSchema202012,{isExpandable:e,getProperties})}if("function"==typeof t.sampleFromSchema&&t.jsonSchema202012){const e=((e,t)=>{const{fn:r,specSelectors:n}=t;return Object.fromEntries(Object.entries(e).map((e=>{let[t,a]=e;const o=r[t];return[t,function(){return n.isOAS31()?a(...arguments):"function"==typeof o?o(...arguments):void 0}]})))})({sampleFromSchema:t.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:t.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:t.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:t.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:t.jsonSchema202012.memoizedCreateXMLExample},r());Object.assign(this.fn,e)}};var oas31=e=>{let{fn:t}=e;const r=t.createSystemSelector||fn_createSystemSelector,n=t.createOnlyOAS31Selector||fn_createOnlyOAS31Selector;return{afterLoad:ps,fn:{isOAS31,createSystemSelector:fn_createSystemSelector,createOnlyOAS31Selector:fn_createOnlyOAS31Selector},components:{Webhooks:webhooks,JsonSchemaDialect:json_schema_dialect,MutualTLSAuth:mutual_tls_auth,OAS31Info:oas31_components_info,OAS31License:components_license,OAS31Contact:components_contact,OAS31VersionPragmaFilter:version_pragma_filter,OAS31Model:Lo,OAS31Models:models,OAS31Auths:Do,JSONSchema202012KeywordExample:keywords_Example,JSONSchema202012KeywordXml:keywords_Xml,JSONSchema202012KeywordDiscriminator:Discriminator_Discriminator,JSONSchema202012KeywordExternalDocs:keywords_ExternalDocs},wrapComponents:{InfoContainer:Jo,License:Uo,Contact:$o,VersionPragmaFilter:wrap_components_version_pragma_filter,Model:Ko,Models:Fo,AuthItem:Ho,auths:Go,JSONSchema202012KeywordDescription:is,JSONSchema202012KeywordDefault:us,JSONSchema202012KeywordProperties:ds},statePlugins:{auth:{wrapSelectors:{definitionsToAuthorize:os}},spec:{selectors:{isOAS31:r(Yo),license:selectors_license,selectLicenseNameField,selectLicenseUrlField,selectLicenseIdentifierField:n(selectLicenseIdentifierField),selectLicenseUrl:r(Zo),contact:selectors_contact,selectContactNameField,selectContactEmailField,selectContactUrlField,selectContactUrl:r(es),selectInfoTitleField,selectInfoSummaryField:n(selectInfoSummaryField),selectInfoDescriptionField,selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:r(ts),selectExternalDocsDescriptionField,selectExternalDocsUrlField,selectExternalDocsUrl:r(rs),webhooks:n(selectors_webhooks),selectWebhooksOperations:n(r(Qo)),selectJsonSchemaDialectField,selectJsonSchemaDialectDefault,selectSchemas:r(ns)},wrapSelectors:{isOAS3:wrap_selectors_isOAS3,selectLicenseUrl:as}},oas31:{selectors:{selectLicenseUrl:n(r(ss))}}}}};const ms=jt.default.object,fs=jt.default.bool,hs=(jt.default.oneOfType([ms,fs]),(0,Je.createContext)(null));hs.displayName="JSONSchemaContext";const gs=(0,Je.createContext)(0);gs.displayName="JSONSchemaLevelContext";const ys=(0,Je.createContext)(!1);ys.displayName="JSONSchemaDeepExpansionContext";const Es=(0,Je.createContext)(new Set),useConfig=()=>{const{config:e}=(0,Je.useContext)(hs);return e},useComponent=e=>{const{components:t}=(0,Je.useContext)(hs);return t[e]||null},useFn=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:t}=(0,Je.useContext)(hs);return void 0!==e?t[e]:t},useLevel=()=>{const e=(0,Je.useContext)(gs);return[e,e+1]},useIsExpandedDeeply=()=>(0,Je.useContext)(ys),useRenderedSchemas=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e)return(0,Je.useContext)(Es);const t=(0,Je.useContext)(Es);return new Set([...t,e])},vs=(0,Je.forwardRef)(((e,t)=>{let{schema:r,name:n,dependentRequired:a,onExpand:o}=e;const s=useFn(),l=(()=>{const[e]=useLevel(),{defaultExpandedLevels:t}=useConfig();return t-e>0})(),i=useIsExpandedDeeply(),[c,u]=(0,Je.useState)(l||i),[d,p]=(0,Je.useState)(i),[m,f]=useLevel(),h=(()=>{const[e]=useLevel();return e>0})(),g=s.isExpandable(r)||a.length>0,y=(e=>useRenderedSchemas().has(e))(r),v=useRenderedSchemas(r),S=s.stringifyConstraints(r),_=useComponent("Accordion"),b=useComponent("Keyword$schema"),w=useComponent("Keyword$vocabulary"),C=useComponent("Keyword$id"),x=useComponent("Keyword$anchor"),O=useComponent("Keyword$dynamicAnchor"),k=useComponent("Keyword$ref"),N=useComponent("Keyword$dynamicRef"),A=useComponent("Keyword$defs"),I=useComponent("Keyword$comment"),R=useComponent("KeywordAllOf"),T=useComponent("KeywordAnyOf"),B=useComponent("KeywordOneOf"),j=useComponent("KeywordNot"),P=useComponent("KeywordIf"),M=useComponent("KeywordThen"),q=useComponent("KeywordElse"),L=useComponent("KeywordDependentSchemas"),D=useComponent("KeywordPrefixItems"),U=useComponent("KeywordItems"),$=useComponent("KeywordContains"),J=useComponent("KeywordProperties"),V=useComponent("KeywordPatternProperties"),K=useComponent("KeywordAdditionalProperties"),z=useComponent("KeywordPropertyNames"),F=useComponent("KeywordUnevaluatedItems"),W=useComponent("KeywordUnevaluatedProperties"),H=useComponent("KeywordType"),G=useComponent("KeywordEnum"),X=useComponent("KeywordConst"),Y=useComponent("KeywordConstraint"),Q=useComponent("KeywordDependentRequired"),Z=useComponent("KeywordContentSchema"),ee=useComponent("KeywordTitle"),te=useComponent("KeywordDescription"),re=useComponent("KeywordDefault"),ne=useComponent("KeywordDeprecated"),ae=useComponent("KeywordReadOnly"),oe=useComponent("KeywordWriteOnly"),se=useComponent("ExpandDeepButton");(0,Je.useEffect)((()=>{p(i)}),[i]),(0,Je.useEffect)((()=>{p(d)}),[d]);const le=(0,Je.useCallback)(((e,t)=>{u(t),!t&&p(!1),o(e,t,!1)}),[o]),ie=(0,Je.useCallback)(((e,t)=>{u(t),p(t),o(e,t,!0)}),[o]);return Je.default.createElement(gs.Provider,{value:f},Je.default.createElement(ys.Provider,{value:d},Je.default.createElement(Es.Provider,{value:v},Je.default.createElement("article",{ref:t,"data-json-schema-level":m,className:(0,Sa.default)("json-schema-2020-12",{"json-schema-2020-12--embedded":h,"json-schema-2020-12--circular":y})},Je.default.createElement("div",{className:"json-schema-2020-12-head"},g&&!y?Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(_,{expanded:c,onChange:le},Je.default.createElement(ee,{title:n,schema:r})),Je.default.createElement(se,{expanded:c,onClick:ie})):Je.default.createElement(ee,{title:n,schema:r}),Je.default.createElement(ne,{schema:r}),Je.default.createElement(ae,{schema:r}),Je.default.createElement(oe,{schema:r}),Je.default.createElement(H,{schema:r,isCircular:y}),S.length>0&&S.map((e=>Je.default.createElement(Y,{key:`${e.scope}-${e.value}`,constraint:e})))),Je.default.createElement("div",{className:(0,Sa.default)("json-schema-2020-12-body",{"json-schema-2020-12-body--collapsed":!c})},c&&Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(te,{schema:r}),!y&&g&&Je.default.createElement(Je.default.Fragment,null,Je.default.createElement(J,{schema:r}),Je.default.createElement(V,{schema:r}),Je.default.createElement(K,{schema:r}),Je.default.createElement(W,{schema:r}),Je.default.createElement(z,{schema:r}),Je.default.createElement(R,{schema:r}),Je.default.createElement(T,{schema:r}),Je.default.createElement(B,{schema:r}),Je.default.createElement(j,{schema:r}),Je.default.createElement(P,{schema:r}),Je.default.createElement(M,{schema:r}),Je.default.createElement(q,{schema:r}),Je.default.createElement(L,{schema:r}),Je.default.createElement(D,{schema:r}),Je.default.createElement(U,{schema:r}),Je.default.createElement(F,{schema:r}),Je.default.createElement($,{schema:r}),Je.default.createElement(Z,{schema:r})),Je.default.createElement(G,{schema:r}),Je.default.createElement(X,{schema:r}),Je.default.createElement(Q,{schema:r,dependentRequired:a}),Je.default.createElement(re,{schema:r}),Je.default.createElement(b,{schema:r}),Je.default.createElement(w,{schema:r}),Je.default.createElement(C,{schema:r}),Je.default.createElement(x,{schema:r}),Je.default.createElement(O,{schema:r}),Je.default.createElement(k,{schema:r}),!y&&g&&Je.default.createElement(A,{schema:r}),Je.default.createElement(N,{schema:r}),Je.default.createElement(I,{schema:r})))))))}));vs.defaultProps={name:"",dependentRequired:[],onExpand:()=>{}};var Ss=vs;var keywords_$schema=e=>{let{schema:t}=e;return t?.$schema?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$schema"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$schema)):null};var $vocabulary_$vocabulary=e=>{let{schema:t}=e;const r=useIsExpandedDeeply(),[n,a]=(0,Je.useState)(r),o=useComponent("Accordion"),s=(0,Je.useCallback)((()=>{a((e=>!e))}),[]);return t?.$vocabulary?"object"!=typeof t.$vocabulary?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary"},Je.default.createElement(o,{expanded:n,onChange:s},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$vocabulary")),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",null,n&&Object.entries(t.$vocabulary).map((e=>{let[t,r]=e;return Je.default.createElement("li",{key:t,className:(0,Sa.default)("json-schema-2020-12-$vocabulary-uri",{"json-schema-2020-12-$vocabulary-uri--disabled":!r})},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t))})))):null};var keywords_$id=e=>{let{schema:t}=e;return t?.$id?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$id"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$id)):null};var keywords_$anchor=e=>{let{schema:t}=e;return t?.$anchor?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$anchor"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$anchor)):null};var keywords_$dynamicAnchor=e=>{let{schema:t}=e;return t?.$dynamicAnchor?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicAnchor"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$dynamicAnchor)):null};var keywords_$ref=e=>{let{schema:t}=e;return t?.$ref?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$ref"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$ref)):null};var keywords_$dynamicRef=e=>{let{schema:t}=e;return t?.$dynamicRef?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$dynamicRef"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$dynamicRef)):null};var keywords_$defs=e=>{let{schema:t}=e;const r=t?.$defs||{},n=useIsExpandedDeeply(),[a,o]=(0,Je.useState)(n),[s,l]=(0,Je.useState)(!1),i=useComponent("Accordion"),c=useComponent("ExpandDeepButton"),u=useComponent("JSONSchema"),d=(0,Je.useCallback)((()=>{o((e=>!e))}),[]),p=(0,Je.useCallback)(((e,t)=>{o(t),l(t)}),[]);return 0===Object.keys(r).length?null:Je.default.createElement(ys.Provider,{value:s},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs"},Je.default.createElement(i,{expanded:a,onChange:d},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$defs")),Je.default.createElement(c,{expanded:a,onClick:p}),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!a})},a&&Je.default.createElement(Je.default.Fragment,null,Object.entries(r).map((e=>{let[t,r]=e;return Je.default.createElement("li",{key:t,className:"json-schema-2020-12-property"},Je.default.createElement(u,{name:t,schema:r}))}))))))};var keywords_$comment=e=>{let{schema:t}=e;return t?.$comment?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary"},"$comment"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary"},t.$comment)):null};var keywords_AllOf=e=>{let{schema:t}=e;const r=t?.allOf||[],n=useFn(),a=useIsExpandedDeeply(),[o,s]=(0,Je.useState)(a),[l,i]=(0,Je.useState)(!1),c=useComponent("Accordion"),u=useComponent("ExpandDeepButton"),d=useComponent("JSONSchema"),p=useComponent("KeywordType"),m=(0,Je.useCallback)((()=>{s((e=>!e))}),[]),f=(0,Je.useCallback)(((e,t)=>{s(t),i(t)}),[]);return Array.isArray(r)&&0!==r.length?Je.default.createElement(ys.Provider,{value:l},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf"},Je.default.createElement(c,{expanded:o,onChange:m},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"All of")),Je.default.createElement(u,{expanded:o,onClick:f}),Je.default.createElement(p,{schema:{allOf:r}}),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!o})},o&&Je.default.createElement(Je.default.Fragment,null,r.map(((e,t)=>Je.default.createElement("li",{key:`#${t}`,className:"json-schema-2020-12-property"},Je.default.createElement(d,{name:`#${t} ${n.getTitle(e)}`,schema:e})))))))):null};var keywords_AnyOf=e=>{let{schema:t}=e;const r=t?.anyOf||[],n=useFn(),a=useIsExpandedDeeply(),[o,s]=(0,Je.useState)(a),[l,i]=(0,Je.useState)(!1),c=useComponent("Accordion"),u=useComponent("ExpandDeepButton"),d=useComponent("JSONSchema"),p=useComponent("KeywordType"),m=(0,Je.useCallback)((()=>{s((e=>!e))}),[]),f=(0,Je.useCallback)(((e,t)=>{s(t),i(t)}),[]);return Array.isArray(r)&&0!==r.length?Je.default.createElement(ys.Provider,{value:l},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf"},Je.default.createElement(c,{expanded:o,onChange:m},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Any of")),Je.default.createElement(u,{expanded:o,onClick:f}),Je.default.createElement(p,{schema:{anyOf:r}}),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!o})},o&&Je.default.createElement(Je.default.Fragment,null,r.map(((e,t)=>Je.default.createElement("li",{key:`#${t}`,className:"json-schema-2020-12-property"},Je.default.createElement(d,{name:`#${t} ${n.getTitle(e)}`,schema:e})))))))):null};var keywords_OneOf=e=>{let{schema:t}=e;const r=t?.oneOf||[],n=useFn(),a=useIsExpandedDeeply(),[o,s]=(0,Je.useState)(a),[l,i]=(0,Je.useState)(!1),c=useComponent("Accordion"),u=useComponent("ExpandDeepButton"),d=useComponent("JSONSchema"),p=useComponent("KeywordType"),m=(0,Je.useCallback)((()=>{s((e=>!e))}),[]),f=(0,Je.useCallback)(((e,t)=>{s(t),i(t)}),[]);return Array.isArray(r)&&0!==r.length?Je.default.createElement(ys.Provider,{value:l},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf"},Je.default.createElement(c,{expanded:o,onChange:m},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"One of")),Je.default.createElement(u,{expanded:o,onClick:f}),Je.default.createElement(p,{schema:{oneOf:r}}),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!o})},o&&Je.default.createElement(Je.default.Fragment,null,r.map(((e,t)=>Je.default.createElement("li",{key:`#${t}`,className:"json-schema-2020-12-property"},Je.default.createElement(d,{name:`#${t} ${n.getTitle(e)}`,schema:e})))))))):null};var keywords_Not=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"not"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Not");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--not"},Je.default.createElement(n,{name:a,schema:t.not}))};var keywords_If=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"if"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"If");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},Je.default.createElement(n,{name:a,schema:t.if}))};var keywords_Then=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"then"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Then");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--then"},Je.default.createElement(n,{name:a,schema:t.then}))};var keywords_Else=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"else"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Else");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--if"},Je.default.createElement(n,{name:a,schema:t.else}))};var keywords_DependentSchemas=e=>{let{schema:t}=e;const r=t?.dependentSchemas||[],n=useIsExpandedDeeply(),[a,o]=(0,Je.useState)(n),[s,l]=(0,Je.useState)(!1),i=useComponent("Accordion"),c=useComponent("ExpandDeepButton"),u=useComponent("JSONSchema"),d=(0,Je.useCallback)((()=>{o((e=>!e))}),[]),p=(0,Je.useCallback)(((e,t)=>{o(t),l(t)}),[]);return"object"!=typeof r||0===Object.keys(r).length?null:Je.default.createElement(ys.Provider,{value:s},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas"},Je.default.createElement(i,{expanded:a,onChange:d},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Dependent schemas")),Je.default.createElement(c,{expanded:a,onClick:p}),Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"object"),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!a})},a&&Je.default.createElement(Je.default.Fragment,null,Object.entries(r).map((e=>{let[t,r]=e;return Je.default.createElement("li",{key:t,className:"json-schema-2020-12-property"},Je.default.createElement(u,{name:t,schema:r}))}))))))};var keywords_PrefixItems=e=>{let{schema:t}=e;const r=t?.prefixItems||[],n=useFn(),a=useIsExpandedDeeply(),[o,s]=(0,Je.useState)(a),[l,i]=(0,Je.useState)(!1),c=useComponent("Accordion"),u=useComponent("ExpandDeepButton"),d=useComponent("JSONSchema"),p=useComponent("KeywordType"),m=(0,Je.useCallback)((()=>{s((e=>!e))}),[]),f=(0,Je.useCallback)(((e,t)=>{s(t),i(t)}),[]);return Array.isArray(r)&&0!==r.length?Je.default.createElement(ys.Provider,{value:l},Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems"},Je.default.createElement(c,{expanded:o,onChange:m},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Prefix items")),Je.default.createElement(u,{expanded:o,onClick:f}),Je.default.createElement(p,{schema:{prefixItems:r}}),Je.default.createElement("ul",{className:(0,Sa.default)("json-schema-2020-12-keyword__children",{"json-schema-2020-12-keyword__children--collapsed":!o})},o&&Je.default.createElement(Je.default.Fragment,null,r.map(((e,t)=>Je.default.createElement("li",{key:`#${t}`,className:"json-schema-2020-12-property"},Je.default.createElement(d,{name:`#${t} ${n.getTitle(e)}`,schema:e})))))))):null};var keywords_Items=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"items"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Items");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--items"},Je.default.createElement(n,{name:a,schema:t.items}))};var keywords_Contains=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"contains"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Contains");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains"},Je.default.createElement(n,{name:a,schema:t.contains}))};var keywords_Properties_Properties=e=>{let{schema:t}=e;const r=useFn(),n=t?.properties||{},a=Array.isArray(t?.required)?t.required:[],o=useComponent("JSONSchema");return 0===Object.keys(n).length?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties"},Je.default.createElement("ul",null,Object.entries(n).map((e=>{let[n,s]=e;const l=a.includes(n),i=r.getDependentRequired(n,t);return Je.default.createElement("li",{key:n,className:(0,Sa.default)("json-schema-2020-12-property",{"json-schema-2020-12-property--required":l})},Je.default.createElement(o,{name:n,schema:s,dependentRequired:i}))}))))};var PatternProperties_PatternProperties=e=>{let{schema:t}=e;const r=t?.patternProperties||{},n=useComponent("JSONSchema");return 0===Object.keys(r).length?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties"},Je.default.createElement("ul",null,Object.entries(r).map((e=>{let[t,r]=e;return Je.default.createElement("li",{key:t,className:"json-schema-2020-12-property"},Je.default.createElement(n,{name:t,schema:r}))}))))};var keywords_AdditionalProperties=e=>{let{schema:t}=e;const r=useFn(),{additionalProperties:n}=t,a=useComponent("JSONSchema");if(!r.hasKeyword(t,"additionalProperties"))return null;const o=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Additional properties");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties"},!0===n?Je.default.createElement(Je.default.Fragment,null,o,Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"allowed")):!1===n?Je.default.createElement(Je.default.Fragment,null,o,Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},"forbidden")):Je.default.createElement(a,{name:o,schema:n}))};var keywords_PropertyNames=e=>{let{schema:t}=e;const r=useFn(),{propertyNames:n}=t,a=useComponent("JSONSchema"),o=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Property names");return r.hasKeyword(t,"propertyNames")?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames"},Je.default.createElement(a,{name:o,schema:n})):null};var keywords_UnevaluatedItems=e=>{let{schema:t}=e;const r=useFn(),{unevaluatedItems:n}=t,a=useComponent("JSONSchema");if(!r.hasKeyword(t,"unevaluatedItems"))return null;const o=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated items");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems"},Je.default.createElement(a,{name:o,schema:n}))};var keywords_UnevaluatedProperties=e=>{let{schema:t}=e;const r=useFn(),{unevaluatedProperties:n}=t,a=useComponent("JSONSchema");if(!r.hasKeyword(t,"unevaluatedProperties"))return null;const o=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Unevaluated properties");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties"},Je.default.createElement(a,{name:o,schema:n}))};const Type=e=>{let{schema:t,isCircular:r}=e;const n=useFn().getType(t),a=r?" [circular]":"";return Je.default.createElement("strong",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary"},`${n}${a}`)};Type.defaultProps={isCircular:!1};var _s=Type;var Enum_Enum=e=>{let{schema:t}=e;const r=useFn();return Array.isArray(t?.enum)?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Allowed values"),Je.default.createElement("ul",null,t.enum.map((e=>{const t=r.stringify(e);return Je.default.createElement("li",{key:t},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},t))})))):null};var keywords_Const=e=>{let{schema:t}=e;const r=useFn();return r.hasKeyword(t,"const")?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--const"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Const"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},r.stringify(t.const))):null};const Constraint=e=>{let{constraint:t}=e;return Je.default.createElement("span",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${t.scope}`},t.value)};var bs=Je.default.memo(Constraint);var DependentRequired_DependentRequired=e=>{let{dependentRequired:t}=e;return 0===t.length?null:Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Required when defined"),Je.default.createElement("ul",null,t.map((e=>Je.default.createElement("li",{key:e},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning"},e))))))};var keywords_ContentSchema=e=>{let{schema:t}=e;const r=useFn(),n=useComponent("JSONSchema");if(!r.hasKeyword(t,"contentSchema"))return null;const a=Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Content schema");return Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema"},Je.default.createElement(n,{name:a,schema:t.contentSchema}))};const Title=e=>{let{title:t,schema:r}=e;const n=useFn();return t||n.getTitle(r)?Je.default.createElement("div",{className:"json-schema-2020-12__title"},t||n.getTitle(r)):null};Title.defaultProps={title:""};var ws=Title;var keywords_Description_Description=e=>{let{schema:t}=e;return t?.description?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--description"},Je.default.createElement("div",{className:"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary"},t.description)):null};var keywords_Default=e=>{let{schema:t}=e;const r=useFn();return r.hasKeyword(t,"default")?Je.default.createElement("div",{className:"json-schema-2020-12-keyword json-schema-2020-12-keyword--default"},Je.default.createElement("span",{className:"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary"},"Default"),Je.default.createElement("span",{className:"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const"},r.stringify(t.default))):null};var keywords_Deprecated=e=>{let{schema:t}=e;return!0!==t?.deprecated?null:Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning"},"deprecated")};var keywords_ReadOnly=e=>{let{schema:t}=e;return!0!==t?.readOnly?null:Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"read-only")};var keywords_WriteOnly=e=>{let{schema:t}=e;return!0!==t?.writeOnly?null:Je.default.createElement("span",{className:"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted"},"write-only")};const Accordion=e=>{let{expanded:t,children:r,onChange:n}=e;const a=useComponent("ChevronRightIcon"),o=(0,Je.useCallback)((e=>{n(e,!t)}),[t,n]);return Je.default.createElement("button",{type:"button",className:"json-schema-2020-12-accordion",onClick:o},Je.default.createElement("div",{className:"json-schema-2020-12-accordion__children"},r),Je.default.createElement("span",{className:(0,Sa.default)("json-schema-2020-12-accordion__icon",{"json-schema-2020-12-accordion__icon--expanded":t,"json-schema-2020-12-accordion__icon--collapsed":!t})},Je.default.createElement(a,null)))};Accordion.defaultProps={expanded:!1};var Cs=Accordion;var ExpandDeepButton_ExpandDeepButton=e=>{let{expanded:t,onClick:r}=e;const n=(0,Je.useCallback)((e=>{r(e,!t)}),[t,r]);return Je.default.createElement("button",{type:"button",className:"json-schema-2020-12-expand-deep-button",onClick:n},t?"Collapse all":"Expand all")};var icons_ChevronRight=()=>Je.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Je.default.createElement("path",{d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"}));const fn_upperFirst=e=>"string"==typeof e?`${e.charAt(0).toUpperCase()}${e.slice(1)}`:e,getTitle=e=>{const t=useFn();return e?.title?t.upperFirst(e.title):e?.$anchor?t.upperFirst(e.$anchor):e?.$id?e.$id:""},getType=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;const r=useFn();if(null==e)return"any";if(r.isBooleanJSONSchema(e))return e?"any":"never";if("object"!=typeof e)return"any";if(t.has(e))return"any";t.add(e);const{type:n,prefixItems:a,items:o}=e,getArrayType=()=>{if(Array.isArray(a)){const e=a.map((e=>getType(e,t))),r=o?getType(o,t):"any";return`array<[${e.join(", ")}], ${r}>`}if(o){return`array<${getType(o,t)}>`}return"array"};if(e.not&&"any"===getType(e.not))return"never";const handleCombiningKeywords=(r,n)=>{if(Array.isArray(e[r])){return`(${e[r].map((e=>getType(e,t))).join(n)})`}return null},s=[Array.isArray(n)?n.map((e=>"array"===e?getArrayType():e)).join(" | "):"array"===n?getArrayType():["null","boolean","object","array","number","integer","string"].includes(n)?n:(()=>{if(Object.hasOwn(e,"prefixItems")||Object.hasOwn(e,"items")||Object.hasOwn(e,"contains"))return getArrayType();if(Object.hasOwn(e,"properties")||Object.hasOwn(e,"additionalProperties")||Object.hasOwn(e,"patternProperties"))return"object";if(["int32","int64"].includes(e.format))return"integer";if(["float","double"].includes(e.format))return"number";if(Object.hasOwn(e,"minimum")||Object.hasOwn(e,"maximum")||Object.hasOwn(e,"exclusiveMinimum")||Object.hasOwn(e,"exclusiveMaximum")||Object.hasOwn(e,"multipleOf"))return"number | integer";if(Object.hasOwn(e,"pattern")||Object.hasOwn(e,"format")||Object.hasOwn(e,"minLength")||Object.hasOwn(e,"maxLength"))return"string";if(void 0!==e.const){if(null===e.const)return"null";if("boolean"==typeof e.const)return"boolean";if("number"==typeof e.const)return Number.isInteger(e.const)?"integer":"number";if("string"==typeof e.const)return"string";if(Array.isArray(e.const))return"array";if("object"==typeof e.const)return"object"}return null})(),handleCombiningKeywords("oneOf"," | "),handleCombiningKeywords("anyOf"," | "),handleCombiningKeywords("allOf"," & ")].filter(Boolean).join(" | ");return t.delete(e),s||"any"},isBooleanJSONSchema=e=>"boolean"==typeof e,hasKeyword=(e,t)=>null!==e&&"object"==typeof e&&Object.hasOwn(e,t),isExpandable=e=>{const t=useFn();return e?.$schema||e?.$vocabulary||e?.$id||e?.$anchor||e?.$dynamicAnchor||e?.$ref||e?.$dynamicRef||e?.$defs||e?.$comment||e?.allOf||e?.anyOf||e?.oneOf||t.hasKeyword(e,"not")||t.hasKeyword(e,"if")||t.hasKeyword(e,"then")||t.hasKeyword(e,"else")||e?.dependentSchemas||e?.prefixItems||t.hasKeyword(e,"items")||t.hasKeyword(e,"contains")||e?.properties||e?.patternProperties||t.hasKeyword(e,"additionalProperties")||t.hasKeyword(e,"propertyNames")||t.hasKeyword(e,"unevaluatedItems")||t.hasKeyword(e,"unevaluatedProperties")||e?.description||e?.enum||t.hasKeyword(e,"const")||t.hasKeyword(e,"contentSchema")||t.hasKeyword(e,"default")},fn_stringify=e=>null===e||["number","bigint","boolean"].includes(typeof e)?String(e):Array.isArray(e)?`[${e.map(fn_stringify).join(", ")}]`:JSON.stringify(e),stringifyConstraintRange=(e,t,r)=>{const n="number"==typeof t,a="number"==typeof r;return n&&a?t===r?`${t} ${e}`:`[${t}, ${r}] ${e}`:n?`>= ${t} ${e}`:a?`<= ${r} ${e}`:null},stringifyConstraints=e=>{const t=[],r=(e=>{if("number"!=typeof e?.multipleOf)return null;if(e.multipleOf<=0)return null;if(1===e.multipleOf)return null;const{multipleOf:t}=e;if(Number.isInteger(t))return`multiple of ${t}`;const r=10**t.toString().split(".")[1].length;return`multiple of ${t*r}/${r}`})(e);null!==r&&t.push({scope:"number",value:r});const n=(e=>{const t=e?.minimum,r=e?.maximum,n=e?.exclusiveMinimum,a=e?.exclusiveMaximum,o="number"==typeof t,s="number"==typeof r,l="number"==typeof n,i="number"==typeof a,c=l&&(!o||ta);if((o||l)&&(s||i))return`${c?"(":"["}${c?n:t}, ${u?a:r}${u?")":"]"}`;if(o||l)return`${c?">":"≥"} ${c?n:t}`;if(s||i)return`${u?"<":"≤"} ${u?a:r}`;return null})(e);null!==n&&t.push({scope:"number",value:n}),e?.format&&t.push({scope:"string",value:e.format});const a=stringifyConstraintRange("characters",e?.minLength,e?.maxLength);null!==a&&t.push({scope:"string",value:a}),e?.pattern&&t.push({scope:"string",value:`matches ${e?.pattern}`}),e?.contentMediaType&&t.push({scope:"string",value:`media type: ${e.contentMediaType}`}),e?.contentEncoding&&t.push({scope:"string",value:`encoding: ${e.contentEncoding}`});const o=stringifyConstraintRange(e?.hasUniqueItems?"unique items":"items",e?.minItems,e?.maxItems);null!==o&&t.push({scope:"array",value:o});const s=stringifyConstraintRange("contained items",e?.minContains,e?.maxContains);null!==s&&t.push({scope:"array",value:s});const l=stringifyConstraintRange("properties",e?.minProperties,e?.maxProperties);return null!==l&&t.push({scope:"object",value:l}),t},getDependentRequired=(e,t)=>t?.dependentRequired?Array.from(Object.entries(t.dependentRequired).reduce(((t,r)=>{let[n,a]=r;return Array.isArray(a)&&a.includes(e)?(t.add(n),t):t}),new Set)):[],withJSONSchemaContext=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r={components:{JSONSchema:Ss,Keyword$schema:keywords_$schema,Keyword$vocabulary:$vocabulary_$vocabulary,Keyword$id:keywords_$id,Keyword$anchor:keywords_$anchor,Keyword$dynamicAnchor:keywords_$dynamicAnchor,Keyword$ref:keywords_$ref,Keyword$dynamicRef:keywords_$dynamicRef,Keyword$defs:keywords_$defs,Keyword$comment:keywords_$comment,KeywordAllOf:keywords_AllOf,KeywordAnyOf:keywords_AnyOf,KeywordOneOf:keywords_OneOf,KeywordNot:keywords_Not,KeywordIf:keywords_If,KeywordThen:keywords_Then,KeywordElse:keywords_Else,KeywordDependentSchemas:keywords_DependentSchemas,KeywordPrefixItems:keywords_PrefixItems,KeywordItems:keywords_Items,KeywordContains:keywords_Contains,KeywordProperties:keywords_Properties_Properties,KeywordPatternProperties:PatternProperties_PatternProperties,KeywordAdditionalProperties:keywords_AdditionalProperties,KeywordPropertyNames:keywords_PropertyNames,KeywordUnevaluatedItems:keywords_UnevaluatedItems,KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,KeywordType:_s,KeywordEnum:Enum_Enum,KeywordConst:keywords_Const,KeywordConstraint:bs,KeywordDependentRequired:DependentRequired_DependentRequired,KeywordContentSchema:keywords_ContentSchema,KeywordTitle:ws,KeywordDescription:keywords_Description_Description,KeywordDefault:keywords_Default,KeywordDeprecated:keywords_Deprecated,KeywordReadOnly:keywords_ReadOnly,KeywordWriteOnly:keywords_WriteOnly,Accordion:Cs,ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,ChevronRightIcon:icons_ChevronRight,...t.components},config:{default$schema:"https://json-schema.org/draft/2020-12/schema",defaultExpandedLevels:0,...t.config},fn:{upperFirst:fn_upperFirst,getTitle,getType,isBooleanJSONSchema,hasKeyword,isExpandable,stringify:fn_stringify,stringifyConstraints,getDependentRequired,...t.fn}},HOC=t=>Je.default.createElement(hs.Provider,{value:r},Je.default.createElement(e,t));return HOC.contexts={JSONSchemaContext:hs},HOC.displayName=e.displayName,HOC};var json_schema_2020_12=()=>({components:{JSONSchema202012:Ss,JSONSchema202012Keyword$schema:keywords_$schema,JSONSchema202012Keyword$vocabulary:$vocabulary_$vocabulary,JSONSchema202012Keyword$id:keywords_$id,JSONSchema202012Keyword$anchor:keywords_$anchor,JSONSchema202012Keyword$dynamicAnchor:keywords_$dynamicAnchor,JSONSchema202012Keyword$ref:keywords_$ref,JSONSchema202012Keyword$dynamicRef:keywords_$dynamicRef,JSONSchema202012Keyword$defs:keywords_$defs,JSONSchema202012Keyword$comment:keywords_$comment,JSONSchema202012KeywordAllOf:keywords_AllOf,JSONSchema202012KeywordAnyOf:keywords_AnyOf,JSONSchema202012KeywordOneOf:keywords_OneOf,JSONSchema202012KeywordNot:keywords_Not,JSONSchema202012KeywordIf:keywords_If,JSONSchema202012KeywordThen:keywords_Then,JSONSchema202012KeywordElse:keywords_Else,JSONSchema202012KeywordDependentSchemas:keywords_DependentSchemas,JSONSchema202012KeywordPrefixItems:keywords_PrefixItems,JSONSchema202012KeywordItems:keywords_Items,JSONSchema202012KeywordContains:keywords_Contains,JSONSchema202012KeywordProperties:keywords_Properties_Properties,JSONSchema202012KeywordPatternProperties:PatternProperties_PatternProperties,JSONSchema202012KeywordAdditionalProperties:keywords_AdditionalProperties,JSONSchema202012KeywordPropertyNames:keywords_PropertyNames,JSONSchema202012KeywordUnevaluatedItems:keywords_UnevaluatedItems,JSONSchema202012KeywordUnevaluatedProperties:keywords_UnevaluatedProperties,JSONSchema202012KeywordType:_s,JSONSchema202012KeywordEnum:Enum_Enum,JSONSchema202012KeywordConst:keywords_Const,JSONSchema202012KeywordConstraint:bs,JSONSchema202012KeywordDependentRequired:DependentRequired_DependentRequired,JSONSchema202012KeywordContentSchema:keywords_ContentSchema,JSONSchema202012KeywordTitle:ws,JSONSchema202012KeywordDescription:keywords_Description_Description,JSONSchema202012KeywordDefault:keywords_Default,JSONSchema202012KeywordDeprecated:keywords_Deprecated,JSONSchema202012KeywordReadOnly:keywords_ReadOnly,JSONSchema202012KeywordWriteOnly:keywords_WriteOnly,JSONSchema202012Accordion:Cs,JSONSchema202012ExpandDeepButton:ExpandDeepButton_ExpandDeepButton,JSONSchema202012ChevronRightIcon:icons_ChevronRight,withJSONSchema202012Context:withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>ys},fn:{upperFirst:fn_upperFirst,jsonSchema202012:{isExpandable,hasKeyword,useFn,useConfig,useComponent,useIsExpandedDeeply}}}),xs=(e=>{var t={};return __webpack_require__.d(t,e),t})({default:()=>ve.default});var array=(e,t)=>{let{sample:r}=t;return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:r,maxItems:n,uniqueItems:a}=t,{contains:o,minContains:s,maxContains:l}=t;let i=[...e];if(null!=o&&"object"==typeof o){if(Number.isInteger(s)&&s>1){const e=i.at(0);for(let t=1;t0&&(i=e.slice(0,n)),Number.isInteger(r)&&r>0)for(let e=0;i.length{throw new Error("Not implemented")};const bytes=e=>ut()(e),pick=e=>e.at(0),predicates_isBooleanJSONSchema=e=>"boolean"==typeof e,isJSONSchemaObject=e=>(0,xs.default)(e),isJSONSchema=e=>predicates_isBooleanJSONSchema(e)||isJSONSchemaObject(e);var email=()=>"user@example.com";var idn_email=()=>"실례@example.com";var hostname=()=>"example.com";var idn_hostname=()=>"실례.com";var ipv4=()=>"198.51.100.42";var ipv6=()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a";var uri=()=>"https://example.com/";var uri_reference=()=>"path/index.html";var iri=()=>"https://실례.com/";var iri_reference=()=>"path/실례.html";var uuid=()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6";var uri_template=()=>"https://example.com/dictionary/{term:1}/{term}";var json_pointer=()=>"/a/b/c";var relative_json_pointer=()=>"1/0";var date_time=()=>(new Date).toISOString();var date=()=>(new Date).toISOString().substring(0,10);var time=()=>(new Date).toISOString().substring(11);var duration=()=>"P3D";var generators_password=()=>"********";var regex=()=>"^[a-z]+$";var Os=class Registry{data={};register(e,t){this.data[e]=t}unregister(e){void 0===e?this.data={}:delete this.data[e]}get(e){return this.data[e]}};const ks=new Os;var api_formatAPI=(e,t)=>"function"==typeof t?ks.register(e,t):null===t?ks.unregister(e):ks.get(e),Ns=__webpack_require__(764).Buffer;var _7bit=e=>Ns.from(e).toString("ascii"),As=__webpack_require__(764).Buffer;var _8bit=e=>As.from(e).toString("utf8"),Is=__webpack_require__(764).Buffer;var binary=e=>Is.from(e).toString("binary");var quoted_printable=e=>{let t="";for(let r=0;r=33&&n<=60||n>=62&&n<=126||9===n||32===n)t+=e.charAt(r);else if(13===n||10===n)t+="\r\n";else if(n>126){const n=unescape(encodeURIComponent(e.charAt(r)));for(let e=0;eRs.from(e).toString("hex"),Ts=__webpack_require__(764).Buffer;var base32=e=>{const t=Ts.from(e).toString("utf8"),r="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let n=0,a="",o=0,s=0;for(let e=0;e=5;)a+=r.charAt(o>>>s-5&31),s-=5;s>0&&(a+=r.charAt(o<<5-s&31),n=(8-8*t.length%5)%5);for(let e=0;eBs.from(e).toString("base64");const js=new class EncoderRegistry extends Os{#e={"7bit":_7bit,"8bit":_8bit,binary,"quoted-printable":quoted_printable,base16,base32,base64};data={...this.#e};get defaults(){return{...this.#e}}},encoderAPI=(e,t)=>"function"==typeof t?js.register(e,t):null===t?js.unregister(e):js.get(e);encoderAPI.getDefaults=()=>js.defaults;var Ps=encoderAPI;var Ms={"text/plain":()=>"string","text/css":()=>".selector { border: 1px solid red }","text/csv":()=>"value1,value2,value3","text/html":()=>"

    content

    ","text/calendar":()=>"BEGIN:VCALENDAR","text/javascript":()=>"console.dir('Hello world!');","text/xml":()=>'John Doe',"text/*":()=>"string"};var qs={"image/*":()=>bytes(25).toString("binary")};var Ls={"audio/*":()=>bytes(25).toString("binary")};var Ds={"video/*":()=>bytes(25).toString("binary")};var Us={"application/json":()=>'{"key":"value"}',"application/ld+json":()=>'{"name": "John Doe"}',"application/x-httpd-php":()=>"Hello World!

    '; ?>","application/rtf":()=>String.raw`{\rtf1\adeflang1025\ansi\ansicpg1252\uc1`,"application/x-sh":()=>'echo "Hello World!"',"application/xhtml+xml":()=>"

    content

    ","application/*":()=>bytes(25).toString("binary")};const $s=new class MediaTypeRegistry extends Os{#e={...Ms,...qs,...Ls,...Ds,...Us};data={...this.#e};get defaults(){return{...this.#e}}},mediaTypeAPI=(e,t)=>{if("function"==typeof t)return $s.register(e,t);if(null===t)return $s.unregister(e);const r=e.split(";").at(0),n=`${r.split("/").at(0)}/*`;return $s.get(e)||$s.get(r)||$s.get(n)};mediaTypeAPI.getDefaults=()=>$s.defaults;var Js=mediaTypeAPI;var types_string=function(e){let{sample:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:r,contentMediaType:n,contentSchema:a}=e,{pattern:o,format:s}=e,l=Ps(r)||fa.default;let i;if("string"==typeof o)i=(e=>{try{return new $r.default(e).gen()}catch{return"string"}})(o);else if("string"==typeof s)i=(e=>{const{format:t}=e,r=api_formatAPI(t);if("function"==typeof r)return r(e);switch(t){case"email":return email();case"idn-email":return idn_email();case"hostname":return hostname();case"idn-hostname":return idn_hostname();case"ipv4":return ipv4();case"ipv6":return ipv6();case"uri":return uri();case"uri-reference":return uri_reference();case"iri":return iri();case"iri-reference":return iri_reference();case"uuid":return uuid();case"uri-template":return uri_template();case"json-pointer":return json_pointer();case"relative-json-pointer":return relative_json_pointer();case"date-time":return date_time();case"date":return date();case"time":return time();case"duration":return duration();case"password":return generators_password();case"regex":return regex()}return"string"})(e);else if(isJSONSchema(a)&&"string"==typeof n&&void 0!==t)i=Array.isArray(t)||"object"==typeof t?JSON.stringify(t):String(t);else if("string"==typeof n){const t=Js(n);"function"==typeof t&&(i=t(e))}else i="string";return l(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:r,minLength:n}=t;let a=e;if(Number.isInteger(r)&&r>0&&(a=a.slice(0,r)),Number.isInteger(n)&&n>0){let e=0;for(;a.length.1;var generators_double=()=>.1;var types_number=e=>{const{format:t}=e;let r;return r="string"==typeof t?(e=>{const{format:t}=e,r=api_formatAPI(t);if("function"==typeof r)return r(e);switch(t){case"float":return generators_float();case"double":return generators_double()}return 0})(e):0,function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:r,maximum:n,exclusiveMinimum:a,exclusiveMaximum:o}=t,{multipleOf:s}=t,l=Number.isInteger(e)?1:Number.EPSILON;let i="number"==typeof r?r:null,c="number"==typeof n?n:null,u=e;if("number"==typeof a&&(i=null!==i?Math.max(i,a+l):a+l),"number"==typeof o&&(c=null!==c?Math.min(c,o-l):o-l),u=i>c&&e||i||c||u,"number"==typeof s&&s>0){const e=u%s;u=0===e?u:u+s-e}return u}(r,e)};var int32=()=>2**30>>>0;var int64=()=>2**53-1;var types_integer=e=>{const{format:t}=e;return"string"==typeof t?(e=>{const{format:t}=e,r=api_formatAPI(t);if("function"==typeof r)return r(e);switch(t){case"int32":return int32();case"int64":return int64()}return 0})(e):0};var types_boolean=e=>"boolean"!=typeof e.default||e.default;var Vs=new Proxy({array,object,string:types_string,number:types_number,integer:types_integer,boolean:types_boolean,null:()=>null},{get:(e,t)=>"string"==typeof t&&Object.hasOwn(e,t)?e[t]:()=>`Unknown Type: ${t}`});const Ks=["array","object","number","integer","string","boolean","null"],hasExample=e=>{if(!isJSONSchemaObject(e))return!1;const{examples:t,example:r,default:n}=e;return!!(Array.isArray(t)&&t.length>=1)||(void 0!==n||void 0!==r)},extractExample=e=>{if(!isJSONSchemaObject(e))return null;const{examples:t,example:r,default:n}=e;return Array.isArray(t)&&t.length>=1?t.at(0):void 0!==n?n:void 0!==r?r:void 0},zs={array:["items","prefixItems","contains","maxContains","minContains","maxItems","minItems","uniqueItems","unevaluatedItems"],object:["properties","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","required","dependentSchemas","dependentRequired","unevaluatedProperties"],string:["pattern","format","minLength","maxLength","contentEncoding","contentMediaType","contentSchema"],integer:["minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf"]};zs.number=zs.integer;const Fs="string",inferTypeFromValue=e=>void 0===e?null:null===e?"null":Array.isArray(e)?"array":Number.isInteger(e)?"integer":typeof e,foldType=e=>{if(Array.isArray(e)&&e.length>=1){if(e.includes("array"))return"array";if(e.includes("object"))return"object";{const t=pick(e);if(Ks.includes(t))return t}}return Ks.includes(e)?e:null},inferType=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakSet;if(!isJSONSchemaObject(e))return Fs;if(t.has(e))return Fs;t.add(e);let{type:r,const:n}=e;if(r=foldType(r),"string"!=typeof r){const t=Object.keys(zs);e:for(let n=0;n{if(Array.isArray(e[r])){const n=e[r].map((e=>inferType(e,t)));return foldType(n)}return null},n=combineTypes("allOf"),a=combineTypes("anyOf"),o=combineTypes("oneOf"),s=e.not?inferType(e.not,t):null;(n||a||o||s)&&(r=foldType([n,a,o,s].filter(Boolean)))}if("string"!=typeof r&&hasExample(e)){const t=extractExample(e),n=inferTypeFromValue(t);r="string"==typeof n?n:r}return t.delete(e),r||Fs},type_getType=e=>inferType(e),typeCast=e=>predicates_isBooleanJSONSchema(e)?(e=>!1===e?{not:{}}:{})(e):isJSONSchemaObject(e)?e:{},merge=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(predicates_isBooleanJSONSchema(e)&&!0===e)return!0;if(predicates_isBooleanJSONSchema(e)&&!1===e)return!1;if(predicates_isBooleanJSONSchema(t)&&!0===t)return!0;if(predicates_isBooleanJSONSchema(t)&&!1===t)return!1;if(!isJSONSchema(e))return t;if(!isJSONSchema(t))return e;const n={...t,...e};if(t.type&&e.type&&Array.isArray(t.type)&&"string"==typeof t.type){const r=normalizeArray(t.type).concat(e.type);n.type=Array.from(new Set(r))}if(Array.isArray(t.required)&&Array.isArray(e.required)&&(n.required=[...new Set([...e.required,...t.required])]),t.properties&&e.properties){const a=new Set([...Object.keys(t.properties),...Object.keys(e.properties)]);n.properties={};for(const o of a){const a=t.properties[o]||{},s=e.properties[o]||{};a.readOnly&&!r.includeReadOnly||a.writeOnly&&!r.includeWriteOnly?n.required=(n.required||[]).filter((e=>e!==o)):n.properties[o]=merge(s,a,r)}}return isJSONSchema(t.items)&&isJSONSchema(e.items)&&(n.items=merge(e.items,t.items,r)),isJSONSchema(t.contains)&&isJSONSchema(e.contains)&&(n.contains=merge(e.contains,t.contains,r)),isJSONSchema(t.contentSchema)&&isJSONSchema(e.contentSchema)&&(n.contentSchema=merge(e.contentSchema,t.contentSchema,r)),n};var Ws=merge;const main_sampleFromSchemaGeneric=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];"function"==typeof e?.toJS&&(e=e.toJS()),e=typeCast(e);let a=void 0!==r||hasExample(e);const o=!a&&Array.isArray(e.oneOf)&&e.oneOf.length>0,s=!a&&Array.isArray(e.anyOf)&&e.anyOf.length>0;if(!a&&(o||s)){const r=typeCast(pick(o?e.oneOf:e.anyOf));!(e=Ws(e,r,t)).xml&&r.xml&&(e.xml=r.xml),hasExample(e)&&hasExample(r)&&(a=!0)}const l={};let{xml:i,properties:c,additionalProperties:u,items:d,contains:p}=e||{},m=type_getType(e),{includeReadOnly:f,includeWriteOnly:h}=t;i=i||{};let g,{name:y,prefix:v,namespace:S}=i,_={};if(Object.hasOwn(e,"type")||(e.type=m),n&&(y=y||"notagname",g=(v?`${v}:`:"")+y,S)){l[v?`xmlns:${v}`:"xmlns"]=S}n&&(_[g]=[]);const b=objectify(c);let w,C=0;const hasExceededMaxProperties=()=>Number.isInteger(e.maxProperties)&&e.maxProperties>0&&C>=e.maxProperties,canAddProperty=t=>!(Number.isInteger(e.maxProperties)&&e.maxProperties>0)||!hasExceededMaxProperties()&&(!(t=>!Array.isArray(e.required)||0===e.required.length||!e.required.includes(t))(t)||e.maxProperties-C-(()=>{if(!Array.isArray(e.required)||0===e.required.length)return 0;let t=0;return n?e.required.forEach((e=>t+=void 0===_[e]?0:1)):e.required.forEach((e=>{t+=void 0===_[g]?.find((t=>void 0!==t[e]))?0:1})),e.required.length-t})()>0);if(w=n?function(r){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&b[r]){if(b[r].xml=b[r].xml||{},b[r].xml.attribute){const e=Array.isArray(b[r].enum)?pick(b[r].enum):void 0;if(hasExample(b[r]))l[b[r].xml.name||r]=extractExample(b[r]);else if(void 0!==e)l[b[r].xml.name||r]=e;else{const e=typeCast(b[r]),t=type_getType(e),n=b[r].xml.name||r;l[n]=Vs[t](e)}return}b[r].xml.name=b[r].xml.name||r}else b[r]||!1===u||(b[r]={xml:{name:r}});let o=main_sampleFromSchemaGeneric(b[r],t,a,n);canAddProperty(r)&&(C++,Array.isArray(o)?_[g]=_[g].concat(o):_[g].push(o))}:(r,a)=>{if(canAddProperty(r)){if((0,xs.default)(e.discriminator?.mapping)&&e.discriminator.propertyName===r&&"string"==typeof e.$$ref){for(const t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){_[r]=t;break}}else _[r]=main_sampleFromSchemaGeneric(b[r],t,a,n);C++}},a){let a;if(a=void 0!==r?r:extractExample(e),!n){if("number"==typeof a&&"string"===m)return`${a}`;if("string"!=typeof a||"string"===m)return a;try{return JSON.parse(a)}catch{return a}}if("array"===m){if(!Array.isArray(a)){if("string"==typeof a)return a;a=[a]}let r=[];return isJSONSchemaObject(d)&&(d.xml=d.xml||i||{},d.xml.name=d.xml.name||i.name,r=a.map((e=>main_sampleFromSchemaGeneric(d,t,e,n)))),isJSONSchemaObject(p)&&(p.xml=p.xml||i||{},p.xml.name=p.xml.name||i.name,r=[main_sampleFromSchemaGeneric(p,t,void 0,n),...r]),r=Vs.array(e,{sample:r}),i.wrapped?(_[g]=r,(0,Jr.default)(l)||_[g].push({_attr:l})):_=r,_}if("object"===m){if("string"==typeof a)return a;for(const e in a)Object.hasOwn(a,e)&&(b[e]?.readOnly&&!f||b[e]?.writeOnly&&!h||(b[e]?.xml?.attribute?l[b[e].xml.name||e]=a[e]:w(e,a[e])));return(0,Jr.default)(l)||_[g].push({_attr:l}),_}return _[g]=(0,Jr.default)(l)?a:[{_attr:l},a],_}if("array"===m){let r=[];if(isJSONSchemaObject(p))if(n&&(p.xml=p.xml||e.xml||{},p.xml.name=p.xml.name||i.name),Array.isArray(p.anyOf))r.push(...p.anyOf.map((e=>main_sampleFromSchemaGeneric(Ws(e,p,t),t,void 0,n))));else if(Array.isArray(p.oneOf))r.push(...p.oneOf.map((e=>main_sampleFromSchemaGeneric(Ws(e,p,t),t,void 0,n))));else{if(!(!n||n&&i.wrapped))return main_sampleFromSchemaGeneric(p,t,void 0,n);r.push(main_sampleFromSchemaGeneric(p,t,void 0,n))}if(isJSONSchemaObject(d))if(n&&(d.xml=d.xml||e.xml||{},d.xml.name=d.xml.name||i.name),Array.isArray(d.anyOf))r.push(...d.anyOf.map((e=>main_sampleFromSchemaGeneric(Ws(e,d,t),t,void 0,n))));else if(Array.isArray(d.oneOf))r.push(...d.oneOf.map((e=>main_sampleFromSchemaGeneric(Ws(e,d,t),t,void 0,n))));else{if(!(!n||n&&i.wrapped))return main_sampleFromSchemaGeneric(d,t,void 0,n);r.push(main_sampleFromSchemaGeneric(d,t,void 0,n))}return r=Vs.array(e,{sample:r}),n&&i.wrapped?(_[g]=r,(0,Jr.default)(l)||_[g].push({_attr:l}),_):r}if("object"===m){for(let e in b)Object.hasOwn(b,e)&&(b[e]?.deprecated||b[e]?.readOnly&&!f||b[e]?.writeOnly&&!h||w(e));if(n&&l&&_[g].push({_attr:l}),hasExceededMaxProperties())return _;if(predicates_isBooleanJSONSchema(u)&&u)n?_[g].push({additionalProp:"Anything can be here"}):_.additionalProp1={},C++;else if(isJSONSchemaObject(u)){const r=u,a=main_sampleFromSchemaGeneric(r,t,void 0,n);if(n&&"string"==typeof r?.xml?.name&&"notagname"!==r?.xml?.name)_[g].push(a);else{const t=Number.isInteger(e.minProperties)&&e.minProperties>0&&C{const n=main_sampleFromSchemaGeneric(e,t,r,!0);if(n)return"string"==typeof n?n:Ur()(n,{declaration:!0,indent:"\t"})},main_sampleFromSchema=(e,t,r)=>main_sampleFromSchemaGeneric(e,t,r,!1),main_resolver=(e,t,r)=>[e,JSON.stringify(t),JSON.stringify(r)],Hs=utils_memoizeN(main_createXMLExample,main_resolver),Gs=utils_memoizeN(main_sampleFromSchema,main_resolver),Xs=[{when:/json/,shouldStringifyTypes:["string"]}],Ys=["object"];var fn_get_json_sample_schema=e=>(t,r,n,a)=>{const{fn:o}=e(),s=o.jsonSchema202012.memoizedSampleFromSchema(t,r,a),l=typeof s,i=Xs.reduce(((e,t)=>t.when.test(n)?[...e,...t.shouldStringifyTypes]:e),Ys);return(0,ot.default)(i,(e=>e===l))?JSON.stringify(s,null,2):s};var fn_get_yaml_sample_schema=e=>(t,r,n,a)=>{const{fn:o}=e(),s=o.jsonSchema202012.getJsonSampleSchema(t,r,n,a);let l;try{l=Lt.default.dump(Lt.default.load(s),{lineWidth:-1},{schema:Lt.JSON_SCHEMA}),"\n"===l[l.length-1]&&(l=l.slice(0,l.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return l.replace(/\t/g," ")};var fn_get_xml_sample_schema=e=>(t,r,n)=>{const{fn:a}=e();if(t&&!t.xml&&(t.xml={}),t&&!t.xml.name){if(!t.$$ref&&(t.type||t.items||t.properties||t.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(t.$$ref){let e=t.$$ref.match(/\S*\/(\S+)$/);t.xml.name=e[1]}}return a.jsonSchema202012.memoizedCreateXMLExample(t,r,n)};var fn_get_sample_schema=e=>function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:o}=e();return"function"==typeof t?.toJS&&(t=t.toJS()),"function"==typeof a?.toJS&&(a=a.toJS()),/xml/.test(r)?o.jsonSchema202012.getXmlSampleSchema(t,n,a):/(yaml|yml)/.test(r)?o.jsonSchema202012.getYamlSampleSchema(t,n,r,a):o.jsonSchema202012.getJsonSampleSchema(t,n,r,a)};var json_schema_2020_12_samples=e=>{let{getSystem:t}=e;const r=fn_get_json_sample_schema(t),n=fn_get_yaml_sample_schema(t),a=fn_get_xml_sample_schema(t),o=fn_get_sample_schema(t);return{fn:{jsonSchema202012:{sampleFromSchema:main_sampleFromSchema,sampleFromSchemaGeneric:main_sampleFromSchemaGeneric,sampleEncoderAPI:Ps,sampleFormatAPI:api_formatAPI,sampleMediaTypeAPI:Js,createXMLExample:main_createXMLExample,memoizedSampleFromSchema:Gs,memoizedCreateXMLExample:Hs,getJsonSampleSchema:r,getYamlSampleSchema:n,getXmlSampleSchema:a,getSampleSchema:o}}}};function PresetApis(){return[base,oas3,json_schema_2020_12,json_schema_2020_12_samples,oas31]}const{GIT_DIRTY:Qs,GIT_COMMIT:Zs,PACKAGE_VERSION:el,BUILD_TIME:tl}={PACKAGE_VERSION:"5.9.0",GIT_COMMIT:"gaa9cf563",GIT_DIRTY:!0,BUILD_TIME:"Fri, 29 Sep 2023 12:26:06 GMT"};function SwaggerUI(e){tt.versions=tt.versions||{},tt.versions.swaggerUi={version:el,gitRevision:Zs,gitDirty:Qs,buildTimestamp:tl};const t={dom_id:null,domNode:null,spec:{},url:"",urls:null,layout:"BaseLayout",docExpansion:"list",maxDisplayedTags:null,filter:null,validatorUrl:"https://validator.swagger.io/validator",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:e=>e,responseInterceptor:e=>e,showMutatedRequest:!0,defaultModelRendering:"example",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:"cURL (bash)",syntax:"bash"},curl_powershell:{title:"cURL (PowerShell)",syntax:"powershell"},curl_cmd:{title:"cURL (CMD)",syntax:"bash"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:["get","put","post","delete","options","head","patch","trace"],queryConfigEnabled:!1,presets:[PresetApis],plugins:[],pluginsOptions:{pluginLoadType:"legacy"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:"agate"}};let r=e.queryConfigEnabled?(()=>{let e={},t=tt.location.search;if(!t)return{};if(""!=t){let r=t.substr(1).split("&");for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&(t=r[t].split("="),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||"")}return e})():{};const n=e.domNode;delete e.domNode;const a=$e()({},t,e,r),o={system:{configs:a.configs},plugins:a.presets,pluginsOptions:a.pluginsOptions,state:$e()({layout:{layout:a.layout,filter:a.filter},spec:{spec:"",url:a.url},requestSnippets:a.requestSnippets},a.initialState)};if(a.initialState)for(var s in a.initialState)Object.prototype.hasOwnProperty.call(a.initialState,s)&&void 0===a.initialState[s]&&delete o.state[s];var l=new Store(o);l.register([a.plugins,()=>({fn:a.fn,components:a.components,state:a.state})]);var i=l.getSystem();const downloadSpec=e=>{let t=i.specSelectors.getLocalConfig?i.specSelectors.getLocalConfig():{},o=$e()({},t,a,e||{},r);if(n&&(o.domNode=n),l.setConfigs(o),i.configsActions.loaded(),null!==e&&(!r.url&&"object"==typeof o.spec&&Object.keys(o.spec).length?(i.specActions.updateUrl(""),i.specActions.updateLoadingStatus("success"),i.specActions.updateSpec(JSON.stringify(o.spec))):i.specActions.download&&o.url&&!o.urls&&(i.specActions.updateUrl(o.url),i.specActions.download(o.url))),o.domNode)i.render(o.domNode,"App");else if(o.dom_id){let e=document.querySelector(o.dom_id);i.render(e,"App")}else null===o.dom_id||null===o.domNode||console.error("Skipped rendering: no `dom_id` or `domNode` was specified");return i},c=r.config||a.configUrl;return c&&i.specActions&&i.specActions.getConfigByUrl?(i.specActions.getConfigByUrl({url:c,loadRemoteConfig:!0,requestInterceptor:a.requestInterceptor,responseInterceptor:a.responseInterceptor},downloadSpec),i):downloadSpec()}SwaggerUI.System=Store,SwaggerUI.presets={base,apis:PresetApis},SwaggerUI.plugins={Auth:auth,Configs:configsPlugin,DeepLining:deep_linking,Err:err,Filter:filter,Icons:icons,JSONSchema5Samples:json_schema_5_samples,JSONSchema202012:json_schema_2020_12,JSONSchema202012Samples:json_schema_2020_12_samples,Layout:plugins_layout,Logs:logs,OpenAPI30:oas3,OpenAPI31:oas3,OnComplete:on_complete,RequestSnippets:plugins_request_snippets,Spec:plugins_spec,SwaggerClient:swagger_client,Util:util,View:view,DownloadUrl:downloadUrlPlugin,SafeRender:safe_render};var rl=SwaggerUI}();var we=be.Z;export{we as default}; +//# sourceMappingURL=swagger-ui-es-bundle-core.js.map \ No newline at end of file diff --git a/app/static/swagger/swagger-ui-es-bundle-core.js.map b/app/static/swagger/swagger-ui-es-bundle-core.js.map new file mode 100644 index 0000000..55a1673 --- /dev/null +++ b/app/static/swagger/swagger-ui-es-bundle-core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"swagger-ui-es-bundle-core.js","mappings":"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","sources":["webpack://swagger-ui/./node_modules/buffer/index.js","webpack://swagger-ui/./node_modules/deep-extend/lib/deep-extend.js","webpack://swagger-ui/./node_modules/events/events.js","webpack://swagger-ui/./node_modules/highlight.js/lib/languages/xml.js","webpack://swagger-ui/./node_modules/inherits/inherits_browser.js","webpack://swagger-ui/./node_modules/process/browser.js","webpack://swagger-ui/./node_modules/randombytes/browser.js","webpack://swagger-ui/./node_modules/readable-stream/errors-browser.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_readable.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_transform.js","webpack://swagger-ui/./node_modules/readable-stream/lib/_stream_writable.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://swagger-ui/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://swagger-ui/./node_modules/safe-buffer/index.js","webpack://swagger-ui/./node_modules/sha.js/hash.js","webpack://swagger-ui/./node_modules/sha.js/index.js","webpack://swagger-ui/./node_modules/sha.js/sha.js","webpack://swagger-ui/./node_modules/sha.js/sha1.js","webpack://swagger-ui/./node_modules/sha.js/sha224.js","webpack://swagger-ui/./node_modules/sha.js/sha256.js","webpack://swagger-ui/./node_modules/sha.js/sha384.js","webpack://swagger-ui/./node_modules/sha.js/sha512.js","webpack://swagger-ui/./node_modules/stream-browserify/index.js","webpack://swagger-ui/./node_modules/string_decoder/lib/string_decoder.js","webpack://swagger-ui/./node_modules/util-deprecate/browser.js","webpack://swagger-ui/./node_modules/xml-but-prettier/dist/index.js","webpack://swagger-ui/./node_modules/xml/lib/escapeForXML.js","webpack://swagger-ui/./node_modules/xml/lib/xml.js","webpack://swagger-ui/external module \"base64-js\"","webpack://swagger-ui/external module \"ieee754\"","webpack://swagger-ui/external module \"repeat-string\"","webpack://swagger-ui/webpack/bootstrap","webpack://swagger-ui/webpack/runtime/compat get default export","webpack://swagger-ui/webpack/runtime/define property getters","webpack://swagger-ui/webpack/runtime/global","webpack://swagger-ui/webpack/runtime/hasOwnProperty shorthand","webpack://swagger-ui/webpack/runtime/make namespace object","webpack://swagger-ui/external module \"react\"","webpack://swagger-ui/external module \"redux\"","webpack://swagger-ui/external module \"immutable\"","webpack://swagger-ui/external module \"redux-immutable\"","webpack://swagger-ui/external module \"serialize-error\"","webpack://swagger-ui/external module \"lodash/merge\"","webpack://swagger-ui/./src/core/plugins/err/actions.js","webpack://swagger-ui/./src/core/window.js","webpack://swagger-ui/external module \"@braintree/sanitize-url\"","webpack://swagger-ui/external module \"lodash/memoize\"","webpack://swagger-ui/external module \"lodash/camelCase\"","webpack://swagger-ui/external module \"lodash/upperFirst\"","webpack://swagger-ui/external module \"lodash/find\"","webpack://swagger-ui/external module \"lodash/some\"","webpack://swagger-ui/external module \"lodash/eq\"","webpack://swagger-ui/external module \"lodash/isFunction\"","webpack://swagger-ui/external module \"css.escape\"","webpack://swagger-ui/./src/core/utils/get-parameter-schema.js","webpack://swagger-ui/./src/core/utils/index.js","webpack://swagger-ui/./src/core/system.js","webpack://swagger-ui/external module \"url-parse\"","webpack://swagger-ui/./src/core/plugins/auth/actions.js","webpack://swagger-ui/./src/core/plugins/auth/reducers.js","webpack://swagger-ui/external module \"reselect\"","webpack://swagger-ui/./src/core/plugins/auth/selectors.js","webpack://swagger-ui/./src/core/plugins/auth/spec-extensions/wrap-actions.js","webpack://swagger-ui/./src/core/plugins/auth/configs-extensions/wrap-actions.js","webpack://swagger-ui/./src/core/plugins/auth/wrap-actions.js","webpack://swagger-ui/external module \"prop-types\"","webpack://swagger-ui/external module \"lodash/omit\"","webpack://swagger-ui/./src/core/plugins/auth/components/lock-auth-icon.jsx","webpack://swagger-ui/./src/core/plugins/auth/components/unlock-auth-icon.jsx","webpack://swagger-ui/./src/core/plugins/auth/index.js","webpack://swagger-ui/external module \"js-yaml\"","webpack://swagger-ui/./src/core/plugins/configs/helpers.js","webpack://swagger-ui/./src/core/plugins/configs/actions.js","webpack://swagger-ui/./src/core/plugins/configs/spec-actions.js","webpack://swagger-ui/./src/core/plugins/configs/selectors.js","webpack://swagger-ui/./src/core/plugins/configs/reducers.js","webpack://swagger-ui/./src/core/plugins/configs/index.js","webpack://swagger-ui/./src/core/plugins/deep-linking/helpers.js","webpack://swagger-ui/external module \"zenscroll\"","webpack://swagger-ui/./src/core/plugins/deep-linking/layout.js","webpack://swagger-ui/external module \"react-immutable-proptypes\"","webpack://swagger-ui/./src/core/plugins/deep-linking/operation-wrapper.jsx","webpack://swagger-ui/./src/core/plugins/deep-linking/operation-tag-wrapper.jsx","webpack://swagger-ui/./src/core/plugins/deep-linking/index.js","webpack://swagger-ui/external module \"lodash/reduce\"","webpack://swagger-ui/./src/core/plugins/err/error-transformers/transformers/not-of-type.js","webpack://swagger-ui/external module \"lodash/get\"","webpack://swagger-ui/./src/core/plugins/err/error-transformers/transformers/parameter-oneof.js","webpack://swagger-ui/./src/core/plugins/err/error-transformers/hook.js","webpack://swagger-ui/./src/core/plugins/err/reducers.js","webpack://swagger-ui/./src/core/plugins/err/selectors.js","webpack://swagger-ui/./src/core/plugins/err/index.js","webpack://swagger-ui/./src/core/plugins/filter/opsFilter.js","webpack://swagger-ui/./src/core/plugins/filter/index.js","webpack://swagger-ui/external module \"@babel/runtime-corejs3/helpers/extends\"","webpack://swagger-ui/./src/core/plugins/icons/components/arrow-up.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/arrow-down.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/arrow.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/close.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/copy.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/lock.jsx","webpack://swagger-ui/./src/core/plugins/icons/components/unlock.jsx","webpack://swagger-ui/./src/core/plugins/icons/index.js","webpack://swagger-ui/./src/core/plugins/layout/actions.js","webpack://swagger-ui/./src/core/plugins/layout/reducers.js","webpack://swagger-ui/./src/core/plugins/layout/selectors.js","webpack://swagger-ui/./src/core/plugins/layout/spec-extensions/wrap-selector.js","webpack://swagger-ui/./src/core/plugins/layout/index.js","webpack://swagger-ui/./src/core/plugins/logs/index.js","webpack://swagger-ui/./src/core/plugins/on-complete/index.js","webpack://swagger-ui/./src/core/plugins/request-snippets/fn.js","webpack://swagger-ui/./src/core/plugins/request-snippets/selectors.js","webpack://swagger-ui/external module \"react-copy-to-clipboard\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/light\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/javascript\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/json\"","webpack://swagger-ui/./node_modules/react-syntax-highlighter/dist/esm/languages/hljs/xml.js","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/bash\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/yaml\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/http\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/languages/hljs/powershell\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/agate\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/arta\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/monokai\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/nord\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/obsidian\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night\"","webpack://swagger-ui/external module \"react-syntax-highlighter/dist/esm/styles/hljs/idea\"","webpack://swagger-ui/./src/core/syntax-highlighting.js","webpack://swagger-ui/./src/core/plugins/request-snippets/request-snippets.jsx","webpack://swagger-ui/./src/core/plugins/request-snippets/index.js","webpack://swagger-ui/external module \"randexp\"","webpack://swagger-ui/external module \"lodash/isEmpty\"","webpack://swagger-ui/./src/core/utils/memoizeN.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/index.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/get-json-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/get-yaml-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/get-xml-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/fn/get-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-5-samples/index.js","webpack://swagger-ui/./src/core/plugins/spec/selectors.js","webpack://swagger-ui/external module \"lodash/isString\"","webpack://swagger-ui/external module \"lodash/debounce\"","webpack://swagger-ui/external module \"lodash/set\"","webpack://swagger-ui/external module \"lodash/fp/assocPath\"","webpack://swagger-ui/external module \"lodash/constant\"","webpack://swagger-ui/./src/core/plugins/spec/actions.js","webpack://swagger-ui/./src/core/plugins/spec/reducers.js","webpack://swagger-ui/./src/core/plugins/spec/wrap-actions.js","webpack://swagger-ui/./src/core/plugins/spec/index.js","webpack://swagger-ui/external module \"swagger-client/es/resolver/strategies/generic\"","webpack://swagger-ui/external module \"swagger-client/es/resolver/strategies/openapi-2\"","webpack://swagger-ui/external module \"swagger-client/es/resolver/strategies/openapi-3-0\"","webpack://swagger-ui/external module \"swagger-client/es/resolver/strategies/openapi-3-1-apidom\"","webpack://swagger-ui/external module \"swagger-client/es/resolver\"","webpack://swagger-ui/external module \"swagger-client/es/execute\"","webpack://swagger-ui/external module \"swagger-client/es/http\"","webpack://swagger-ui/external module \"swagger-client/es/subtree-resolver\"","webpack://swagger-ui/external module \"swagger-client/es/helpers\"","webpack://swagger-ui/./src/core/plugins/swagger-client/configs-wrap-actions.js","webpack://swagger-ui/./src/core/plugins/swagger-client/index.js","webpack://swagger-ui/./src/core/plugins/util/index.js","webpack://swagger-ui/external module \"react-dom\"","webpack://swagger-ui/external module \"react-redux\"","webpack://swagger-ui/external module \"lodash/identity\"","webpack://swagger-ui/./src/core/plugins/view/root-injects.jsx","webpack://swagger-ui/./src/core/plugins/view/fn.js","webpack://swagger-ui/./src/core/plugins/view/index.js","webpack://swagger-ui/./src/core/plugins/download-url/index.js","webpack://swagger-ui/external module \"lodash/zipObject\"","webpack://swagger-ui/./src/core/plugins/safe-render/fn.jsx","webpack://swagger-ui/./src/core/plugins/safe-render/components/fallback.jsx","webpack://swagger-ui/./src/core/plugins/safe-render/components/error-boundary.jsx","webpack://swagger-ui/./src/core/plugins/safe-render/index.js","webpack://swagger-ui/./src/core/components/app.jsx","webpack://swagger-ui/./src/core/components/auth/authorization-popup.jsx","webpack://swagger-ui/./src/core/components/auth/authorize-btn.jsx","webpack://swagger-ui/./src/core/containers/authorize-btn.jsx","webpack://swagger-ui/./src/core/components/auth/authorize-operation-btn.jsx","webpack://swagger-ui/./src/core/components/auth/auths.jsx","webpack://swagger-ui/./src/core/components/auth/auth-item.jsx","webpack://swagger-ui/./src/core/components/auth/error.jsx","webpack://swagger-ui/./src/core/components/auth/api-key-auth.jsx","webpack://swagger-ui/./src/core/components/auth/basic-auth.jsx","webpack://swagger-ui/./src/core/components/example.jsx","webpack://swagger-ui/./src/core/components/examples-select.jsx","webpack://swagger-ui/./src/core/components/examples-select-value-retainer.jsx","webpack://swagger-ui/./src/core/oauth2-authorize.js","webpack://swagger-ui/./src/core/components/auth/oauth2.jsx","webpack://swagger-ui/./src/core/components/clear.jsx","webpack://swagger-ui/./src/core/components/live-response.jsx","webpack://swagger-ui/./src/core/components/online-validator-badge.jsx","webpack://swagger-ui/./src/core/components/operations.jsx","webpack://swagger-ui/./src/core/utils/url.js","webpack://swagger-ui/./src/core/components/operation-tag.jsx","webpack://swagger-ui/./src/core/assets/rolling-load.svg","webpack://swagger-ui/./src/core/components/operation.jsx","webpack://swagger-ui/./src/core/containers/OperationContainer.jsx","webpack://swagger-ui/external module \"lodash/toString\"","webpack://swagger-ui/./src/core/components/operation-summary.jsx","webpack://swagger-ui/./src/core/components/operation-summary-method.jsx","webpack://swagger-ui/./src/core/components/operation-summary-path.jsx","webpack://swagger-ui/./src/core/components/operation-extensions.jsx","webpack://swagger-ui/./src/core/components/operation-extension-row.jsx","webpack://swagger-ui/external module \"classnames\"","webpack://swagger-ui/external module \"js-file-download\"","webpack://swagger-ui/./src/core/components/highlight-code.jsx","webpack://swagger-ui/./src/core/components/responses.jsx","webpack://swagger-ui/./src/core/utils/create-html-ready-id.js","webpack://swagger-ui/./src/core/utils/jsonParse.js","webpack://swagger-ui/./src/core/components/response.jsx","webpack://swagger-ui/./src/core/components/response-extension.jsx","webpack://swagger-ui/external module \"lodash/toLower\"","webpack://swagger-ui/./src/core/components/response-body.jsx","webpack://swagger-ui/./src/core/components/parameters/parameters.jsx","webpack://swagger-ui/./src/core/components/parameter-extension.jsx","webpack://swagger-ui/./src/core/components/parameter-include-empty.jsx","webpack://swagger-ui/./src/core/components/parameter-row.jsx","webpack://swagger-ui/./src/core/components/execute.jsx","webpack://swagger-ui/./src/core/components/headers.jsx","webpack://swagger-ui/./src/core/components/errors.jsx","webpack://swagger-ui/./src/core/components/content-type.jsx","webpack://swagger-ui/./src/core/components/layout-utils.jsx","webpack://swagger-ui/./src/core/components/overview.jsx","webpack://swagger-ui/./src/core/components/initialized-input.jsx","webpack://swagger-ui/./src/core/components/info.jsx","webpack://swagger-ui/./src/core/containers/info.jsx","webpack://swagger-ui/./src/core/components/contact.jsx","webpack://swagger-ui/./src/core/components/license.jsx","webpack://swagger-ui/./src/core/components/jump-to-path.jsx","webpack://swagger-ui/./src/core/components/copy-to-clipboard-btn.jsx","webpack://swagger-ui/./src/core/components/footer.jsx","webpack://swagger-ui/./src/core/containers/filter.jsx","webpack://swagger-ui/./src/core/components/param-body.jsx","webpack://swagger-ui/./src/core/components/curl.jsx","webpack://swagger-ui/./src/core/components/schemes.jsx","webpack://swagger-ui/./src/core/containers/schemes.jsx","webpack://swagger-ui/./src/core/components/model-collapse.jsx","webpack://swagger-ui/./src/core/components/model-example.jsx","webpack://swagger-ui/./src/core/components/model-wrapper.jsx","webpack://swagger-ui/external module \"react-immutable-pure-component\"","webpack://swagger-ui/./src/core/components/model.jsx","webpack://swagger-ui/./src/core/components/models.jsx","webpack://swagger-ui/./src/core/components/enum-model.jsx","webpack://swagger-ui/./src/core/components/object-model.jsx","webpack://swagger-ui/./src/core/components/array-model.jsx","webpack://swagger-ui/./src/core/components/primitive-model.jsx","webpack://swagger-ui/./src/core/components/property.jsx","webpack://swagger-ui/./src/core/components/try-it-out-button.jsx","webpack://swagger-ui/./src/core/components/version-pragma-filter.jsx","webpack://swagger-ui/./src/core/components/version-stamp.jsx","webpack://swagger-ui/./src/core/components/openapi-version.jsx","webpack://swagger-ui/./src/core/components/deep-link.jsx","webpack://swagger-ui/./src/core/components/svg-assets.jsx","webpack://swagger-ui/external module \"remarkable\"","webpack://swagger-ui/external module \"remarkable/linkify\"","webpack://swagger-ui/external module \"dompurify\"","webpack://swagger-ui/./src/core/components/providers/markdown.jsx","webpack://swagger-ui/./src/core/components/layouts/base.jsx","webpack://swagger-ui/./src/core/presets/base/plugins/core-components/index.js","webpack://swagger-ui/./src/core/presets/base/plugins/form-components/index.js","webpack://swagger-ui/external module \"react-debounce-input\"","webpack://swagger-ui/./src/core/components/json-schema-components.jsx","webpack://swagger-ui/./src/core/presets/base/plugins/json-schema-components/index.js","webpack://swagger-ui/./src/core/presets/base/index.js","webpack://swagger-ui/./src/core/plugins/oas3/spec-extensions/wrap-selectors.js","webpack://swagger-ui/./src/core/plugins/oas3/auth-extensions/wrap-selectors.js","webpack://swagger-ui/./src/core/plugins/oas3/helpers.jsx","webpack://swagger-ui/./src/core/plugins/oas3/spec-extensions/selectors.js","webpack://swagger-ui/./src/core/plugins/oas3/components/callbacks.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/request-body.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/operation-link.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/servers.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/servers-container.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/request-body-editor.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/auth/http-auth.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/operation-servers.jsx","webpack://swagger-ui/./src/core/plugins/oas3/components/index.js","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/markdown.jsx","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/auth/auth-item.jsx","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/online-validator-badge.js","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/model.jsx","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/json-schema-string.jsx","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/index.js","webpack://swagger-ui/./src/core/plugins/oas3/wrap-components/openapi-version.jsx","webpack://swagger-ui/./src/core/plugins/oas3/actions.js","webpack://swagger-ui/./src/core/plugins/oas3/selectors.js","webpack://swagger-ui/./src/core/plugins/oas3/reducers.js","webpack://swagger-ui/./src/core/plugins/oas3/index.js","webpack://swagger-ui/./src/core/plugins/oas31/components/webhooks.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/license.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/contact.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/info.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/json-schema-dialect.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/version-pragma-filter.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/model/model.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/models/models.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/auth/mutual-tls-auth.jsx","webpack://swagger-ui/./src/core/plugins/oas31/components/auth/auths.jsx","webpack://swagger-ui/./src/core/plugins/oas31/fn.js","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/license.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/contact.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/info.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/fn.js","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/model.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/models.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/version-pragma-filter.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/auth/auth-item.jsx","webpack://swagger-ui/./src/core/plugins/oas31/wrap-components/auths.jsx","webpack://swagger-ui/./src/core/plugins/oas31/spec-extensions/selectors.js","webpack://swagger-ui/./src/core/plugins/oas31/spec-extensions/wrap-selectors.js","webpack://swagger-ui/./src/core/plugins/oas31/auth-extensions/wrap-selectors.js","webpack://swagger-ui/./src/core/plugins/oas31/selectors.js","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx","webpack://swagger-ui/./src/core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx","webpack://swagger-ui/./src/core/plugins/oas31/after-load.js","webpack://swagger-ui/./src/core/plugins/oas31/index.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/prop-types.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/context.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/hooks.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$schema.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$id.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$ref.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$defs.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/$comment.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Not.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/If.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Then.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Else.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Items.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Contains.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Type.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Const.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Default.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/fn.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/hoc.jsx","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12/index.js","webpack://swagger-ui/external module \"lodash/isPlainObject\"","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/array.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/object.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/random.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/predicates.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/email.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-email.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/hostname.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/idn-hostname.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv4.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/ipv6.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-reference.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/iri-reference.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uuid.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/uri-template.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/json-pointer.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/relative-json-pointer.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date-time.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/date.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/time.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/duration.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/password.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/regex.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/class/Registry.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/api/formatAPI.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/7bit.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/8bit.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/binary.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/quoted-printable.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base16.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base32.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/encoders/base64.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/api/encoderAPI.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/class/EncoderRegistry.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/text.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/image.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/audio.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/video.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/media-types/application.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/api/mediaTypeAPI.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/class/MediaTypeRegistry.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/string.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/float.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/double.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/number.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int32.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/generators/int64.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/integer.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/boolean.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/index.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/types/null.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/constants.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/example.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/type.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/utils.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/core/merge.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/main.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/get-json-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/get-yaml-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/get-xml-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/fn/get-sample-schema.js","webpack://swagger-ui/./src/core/plugins/json-schema-2020-12-samples/index.js","webpack://swagger-ui/./src/core/presets/apis/index.js","webpack://swagger-ui/./src/core/index.js","webpack://swagger-ui/./src/index.js"],"sourcesContent":["/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","/*!\n * @description Recursive object extending\n * @author Viacheslav Lotsmanov \n * @license MIT\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2013-2018 Viacheslav Lotsmanov\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n'use strict';\n\nfunction isSpecificValue(val) {\n\treturn (\n\t\tval instanceof Buffer\n\t\t|| val instanceof Date\n\t\t|| val instanceof RegExp\n\t) ? true : false;\n}\n\nfunction cloneSpecificValue(val) {\n\tif (val instanceof Buffer) {\n\t\tvar x = Buffer.alloc\n\t\t\t? Buffer.alloc(val.length)\n\t\t\t: new Buffer(val.length);\n\t\tval.copy(x);\n\t\treturn x;\n\t} else if (val instanceof Date) {\n\t\treturn new Date(val.getTime());\n\t} else if (val instanceof RegExp) {\n\t\treturn new RegExp(val);\n\t} else {\n\t\tthrow new Error('Unexpected situation');\n\t}\n}\n\n/**\n * Recursive cloning array.\n */\nfunction deepCloneArray(arr) {\n\tvar clone = [];\n\tarr.forEach(function (item, index) {\n\t\tif (typeof item === 'object' && item !== null) {\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tclone[index] = deepCloneArray(item);\n\t\t\t} else if (isSpecificValue(item)) {\n\t\t\t\tclone[index] = cloneSpecificValue(item);\n\t\t\t} else {\n\t\t\t\tclone[index] = deepExtend({}, item);\n\t\t\t}\n\t\t} else {\n\t\t\tclone[index] = item;\n\t\t}\n\t});\n\treturn clone;\n}\n\nfunction safeGetProperty(object, property) {\n\treturn property === '__proto__' ? undefined : object[property];\n}\n\n/**\n * Extening object that entered in first argument.\n *\n * Returns extended object or false if have no target object or incorrect type.\n *\n * If you wish to clone source object (without modify it), just use empty new\n * object as first argument, like this:\n * deepExtend({}, yourObj_1, [yourObj_N]);\n */\nvar deepExtend = module.exports = function (/*obj_1, [obj_2], [obj_N]*/) {\n\tif (arguments.length < 1 || typeof arguments[0] !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (arguments.length < 2) {\n\t\treturn arguments[0];\n\t}\n\n\tvar target = arguments[0];\n\n\t// convert arguments to array and cut off target object\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\n\tvar val, src, clone;\n\n\targs.forEach(function (obj) {\n\t\t// skip argument if isn't an object, is null, or is an array\n\t\tif (typeof obj !== 'object' || obj === null || Array.isArray(obj)) {\n\t\t\treturn;\n\t\t}\n\n\t\tObject.keys(obj).forEach(function (key) {\n\t\t\tsrc = safeGetProperty(target, key); // source value\n\t\t\tval = safeGetProperty(obj, key); // new value\n\n\t\t\t// recursion prevention\n\t\t\tif (val === target) {\n\t\t\t\treturn;\n\n\t\t\t/**\n\t\t\t * if new value isn't object then just overwrite by new value\n\t\t\t * instead of extending.\n\t\t\t */\n\t\t\t} else if (typeof val !== 'object' || val === null) {\n\t\t\t\ttarget[key] = val;\n\t\t\t\treturn;\n\n\t\t\t// just clone arrays (and recursive clone objects inside)\n\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\ttarget[key] = deepCloneArray(val);\n\t\t\t\treturn;\n\n\t\t\t// custom cloning and overwrite for specific objects\n\t\t\t} else if (isSpecificValue(val)) {\n\t\t\t\ttarget[key] = cloneSpecificValue(val);\n\t\t\t\treturn;\n\n\t\t\t// overwrite by new value if source isn't object or array\n\t\t\t} else if (typeof src !== 'object' || src === null || Array.isArray(src)) {\n\t\t\t\ttarget[key] = deepExtend({}, val);\n\t\t\t\treturn;\n\n\t\t\t// source value and new value is objects both, extending...\n\t\t\t} else {\n\t\t\t\ttarget[key] = deepExtend(src, val);\n\t\t\t\treturn;\n\t\t\t}\n\t\t});\n\t});\n\n\treturn target;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n // Element names can contain letters, digits, hyphens, underscores, and periods\n const TAG_NAME_RE = concat(/[A-Z_]/, optional(/[A-Z0-9_.-]*:/), /[A-Z0-9_.-]*/);\n const XML_IDENT_RE = /[A-Za-z0-9._:-]+/;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'meta-keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, {\n className: 'meta-string'\n });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n className: 'meta-string'\n });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /`]+/\n }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n contains: [\n {\n className: 'meta',\n begin: //,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: //,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n //,\n {\n relevance: 10\n }\n ),\n {\n begin: //,\n relevance: 10\n },\n XML_ENTITIES,\n {\n className: 'meta',\n begin: /<\\?xml/,\n end: /\\?>/,\n relevance: 10\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n ')/,\n end: />/,\n keywords: {\n name: 'style'\n },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the

    b 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