aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/js/dist/additionalScripts.js.map
blob: 022ab2d773dae7dc1d29798c7a99dcc451db68a4 (plain)
1
{"version":3,"file":"additionalScripts.js","sources":["webpack:///webpack/bootstrap","webpack:///./apps/files_sharing/src/additionalScripts.js","webpack:///./apps/files_sharing/src/collaborationresourceshandler.js","webpack:///./apps/files_sharing/src/share.js","webpack:///./apps/files_sharing/src/sharebreadcrumbview.js","webpack:///./apps/files_sharing/src/style/sharebreadcrumb.scss?fbff","webpack:///./apps/files_sharing/src/style/sharebreadcrumb.scss","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/escape-html/index.js","webpack:///./node_modules/vue-style-loader/lib/addStylesClient.js","webpack:///./node_modules/vue-style-loader/lib/listToStyles.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/js/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./apps/files_sharing/src/additionalScripts.js\");\n","import './share';\nimport './sharebreadcrumbview';\nimport './style/sharebreadcrumb.scss';\nimport './collaborationresourceshandler.js'; // eslint-disable-next-line camelcase\n\n__webpack_public_path__ = OC.linkTo('files_sharing', 'js/dist/'); // eslint-disable-next-line camelcase\n\n__webpack_nonce__ = btoa(OC.requestToken);\nwindow.OCA.Sharing = OCA.Sharing;","// eslint-disable-next-line camelcase\n__webpack_public_path__ = OC.linkTo('files_sharing', 'js/dist/'); // eslint-disable-next-line camelcase\n\n__webpack_nonce__ = btoa(OC.requestToken);\nwindow.OCP.Collaboration.registerType('file', {\n  action: function action() {\n    return new Promise(function (resolve, reject) {\n      OC.dialogs.filepicker(t('files_sharing', 'Link to a file'), function (f) {\n        var client = OC.Files.getClient();\n        client.getFileInfo(f).then(function (status, fileInfo) {\n          resolve(fileInfo.id);\n        }).fail(function () {\n          reject(new Error('Cannot get fileinfo'));\n        });\n      }, false, null, false, OC.dialogs.FILEPICKER_TYPE_CHOOSE, '', {\n        allowDirectoryChooser: true\n      });\n    });\n  },\n  typeString: t('files_sharing', 'Link to a file'),\n  typeIconClass: 'icon-files-dark'\n});","/* eslint-disable */\n\n/*\n * Copyright (c) 2014\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\nimport escapeHTML from 'escape-html';\n\n(function () {\n  _.extend(OC.Files.Client, {\n    PROPERTY_SHARE_TYPES: '{' + OC.Files.Client.NS_OWNCLOUD + '}share-types',\n    PROPERTY_OWNER_ID: '{' + OC.Files.Client.NS_OWNCLOUD + '}owner-id',\n    PROPERTY_OWNER_DISPLAY_NAME: '{' + OC.Files.Client.NS_OWNCLOUD + '}owner-display-name'\n  });\n\n  if (!OCA.Sharing) {\n    OCA.Sharing = {};\n  }\n  /**\n   * @namespace\n   */\n\n\n  OCA.Sharing.Util = {\n    /**\n     * Regular expression for splitting parts of remote share owners:\n     * \"user@example.com/\"\n     * \"user@example.com/path/to/owncloud\"\n     * \"user@anotherexample.com@example.com/path/to/owncloud\n     */\n    _REMOTE_OWNER_REGEXP: new RegExp('^(([^@]*)@(([^@^/^\\\\s]*)@)?)([^[\\\\s/]*)([/](.*))?$'),\n\n    /**\n     * Initialize the sharing plugin.\n     *\n     * Registers the \"Share\" file action and adds additional\n     * DOM attributes for the sharing file info.\n     *\n     * @param {OCA.Files.FileList} fileList file list to be extended\n     */\n    attach: function attach(fileList) {\n      // core sharing is disabled/not loaded\n      if (!OC.Share) {\n        return;\n      }\n\n      if (fileList.id === 'trashbin' || fileList.id === 'files.public') {\n        return;\n      }\n\n      var fileActions = fileList.fileActions;\n      var oldCreateRow = fileList._createRow;\n\n      fileList._createRow = function (fileData) {\n        var tr = oldCreateRow.apply(this, arguments);\n        var sharePermissions = OCA.Sharing.Util.getSharePermissions(fileData);\n\n        if (fileData.permissions === 0) {\n          // no permission, disabling sidebar\n          delete fileActions.actions.all.Comment;\n          delete fileActions.actions.all.Details;\n          delete fileActions.actions.all.Goto;\n        }\n\n        tr.attr('data-share-permissions', sharePermissions);\n\n        if (fileData.shareOwner) {\n          tr.attr('data-share-owner', fileData.shareOwner);\n          tr.attr('data-share-owner-id', fileData.shareOwnerId); // user should always be able to rename a mount point\n\n          if (fileData.mountType === 'shared-root') {\n            tr.attr('data-permissions', fileData.permissions | OC.PERMISSION_UPDATE);\n          }\n        }\n\n        if (fileData.recipientData && !_.isEmpty(fileData.recipientData)) {\n          tr.attr('data-share-recipient-data', JSON.stringify(fileData.recipientData));\n        }\n\n        if (fileData.shareTypes) {\n          tr.attr('data-share-types', fileData.shareTypes.join(','));\n        }\n\n        return tr;\n      };\n\n      var oldElementToFile = fileList.elementToFile;\n\n      fileList.elementToFile = function ($el) {\n        var fileInfo = oldElementToFile.apply(this, arguments);\n        fileInfo.sharePermissions = $el.attr('data-share-permissions') || undefined;\n        fileInfo.shareOwner = $el.attr('data-share-owner') || undefined;\n        fileInfo.shareOwnerId = $el.attr('data-share-owner-id') || undefined;\n\n        if ($el.attr('data-share-types')) {\n          fileInfo.shareTypes = $el.attr('data-share-types').split(',');\n        }\n\n        if ($el.attr('data-expiration')) {\n          var expirationTimestamp = parseInt($el.attr('data-expiration'));\n          fileInfo.shares = [];\n          fileInfo.shares.push({\n            expiration: expirationTimestamp\n          });\n        }\n\n        return fileInfo;\n      };\n\n      var oldGetWebdavProperties = fileList._getWebdavProperties;\n\n      fileList._getWebdavProperties = function () {\n        var props = oldGetWebdavProperties.apply(this, arguments);\n        props.push(OC.Files.Client.PROPERTY_OWNER_ID);\n        props.push(OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME);\n        props.push(OC.Files.Client.PROPERTY_SHARE_TYPES);\n        return props;\n      };\n\n      fileList.filesClient.addFileInfoParser(function (response) {\n        var data = {};\n        var props = response.propStat[0].properties;\n        var permissionsProp = props[OC.Files.Client.PROPERTY_PERMISSIONS];\n\n        if (permissionsProp && permissionsProp.indexOf('S') >= 0) {\n          data.shareOwner = props[OC.Files.Client.PROPERTY_OWNER_DISPLAY_NAME];\n          data.shareOwnerId = props[OC.Files.Client.PROPERTY_OWNER_ID];\n        }\n\n        var shareTypesProp = props[OC.Files.Client.PROPERTY_SHARE_TYPES];\n\n        if (shareTypesProp) {\n          data.shareTypes = _.chain(shareTypesProp).filter(function (xmlvalue) {\n            return xmlvalue.namespaceURI === OC.Files.Client.NS_OWNCLOUD && xmlvalue.nodeName.split(':')[1] === 'share-type';\n          }).map(function (xmlvalue) {\n            return parseInt(xmlvalue.textContent || xmlvalue.text, 10);\n          }).value();\n        }\n\n        return data;\n      }); // use delegate to catch the case with multiple file lists\n\n      fileList.$el.on('fileActionsReady', function (ev) {\n        var $files = ev.$files;\n\n        _.each($files, function (file) {\n          var $tr = $(file);\n          var shareTypes = $tr.attr('data-share-types') || '';\n          var shareOwner = $tr.attr('data-share-owner');\n\n          if (shareTypes || shareOwner) {\n            var hasLink = false;\n            var hasShares = false;\n\n            _.each(shareTypes.split(',') || [], function (shareType) {\n              shareType = parseInt(shareType, 10);\n\n              if (shareType === OC.Share.SHARE_TYPE_LINK) {\n                hasLink = true;\n              } else if (shareType === OC.Share.SHARE_TYPE_EMAIL) {\n                hasLink = true;\n              } else if (shareType === OC.Share.SHARE_TYPE_USER) {\n                hasShares = true;\n              } else if (shareType === OC.Share.SHARE_TYPE_GROUP) {\n                hasShares = true;\n              } else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {\n                hasShares = true;\n              } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {\n                hasShares = true;\n              } else if (shareType === OC.Share.SHARE_TYPE_ROOM) {\n                hasShares = true;\n              }\n            });\n\n            OCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink);\n          }\n        });\n      });\n      fileList.$el.on('changeDirectory', function () {\n        OCA.Sharing.sharesLoaded = false;\n      });\n      fileActions.registerAction({\n        name: 'Share',\n        displayName: function displayName(context) {\n          if (context && context.$file) {\n            var shareType = parseInt(context.$file.data('share-types'), 10);\n            var shareOwner = context.$file.data('share-owner-id');\n\n            if (shareType >= 0 || shareOwner) {\n              return t('core', 'Shared');\n            }\n          }\n\n          return t('core', 'Share');\n        },\n        altText: t('core', 'Share'),\n        mime: 'all',\n        order: -150,\n        permissions: OC.PERMISSION_ALL,\n        iconClass: function iconClass(fileName, context) {\n          var shareType = parseInt(context.$file.data('share-types'), 10);\n\n          if (shareType === OC.Share.SHARE_TYPE_EMAIL || shareType === OC.Share.SHARE_TYPE_LINK) {\n            return 'icon-public';\n          }\n\n          return 'icon-shared';\n        },\n        icon: function icon(fileName, context) {\n          var shareOwner = context.$file.data('share-owner-id');\n\n          if (shareOwner) {\n            return OC.generateUrl(\"/avatar/\".concat(shareOwner, \"/32\"));\n          }\n        },\n        type: OCA.Files.FileActions.TYPE_INLINE,\n        actionHandler: function actionHandler(fileName, context) {\n          // do not open sidebar if permission is set and equal to 0\n          var permissions = parseInt(context.$file.data('share-permissions'), 10);\n\n          if (isNaN(permissions) || permissions > 0) {\n            fileList.showDetailsView(fileName, 'sharing');\n          }\n        },\n        render: function render(actionSpec, isDefault, context) {\n          var permissions = parseInt(context.$file.data('permissions'), 10); // if no share permissions but share owner exists, still show the link\n\n          if ((permissions & OC.PERMISSION_SHARE) !== 0 || context.$file.attr('data-share-owner')) {\n            return fileActions._defaultRenderAction.call(fileActions, actionSpec, isDefault, context);\n          } // don't render anything\n\n\n          return null;\n        }\n      }); // register share breadcrumbs component\n\n      var breadCrumbSharingDetailView = new OCA.Sharing.ShareBreadCrumbView();\n      fileList.registerBreadCrumbDetailView(breadCrumbSharingDetailView);\n    },\n\n    /**\n     * Update file list data attributes\n     */\n    _updateFileListDataAttributes: function _updateFileListDataAttributes(fileList, $tr, shareModel) {\n      // files app current cannot show recipients on load, so we don't update the\n      // icon when changed for consistency\n      if (fileList.id === 'files') {\n        return;\n      }\n\n      var recipients = _.pluck(shareModel.get('shares'), 'share_with_displayname'); // note: we only update the data attribute because updateIcon()\n\n\n      if (recipients.length) {\n        var recipientData = _.mapObject(shareModel.get('shares'), function (share) {\n          return {\n            shareWith: share.share_with,\n            shareWithDisplayName: share.share_with_displayname\n          };\n        });\n\n        $tr.attr('data-share-recipient-data', JSON.stringify(recipientData));\n      } else {\n        $tr.removeAttr('data-share-recipient-data');\n      }\n    },\n\n    /**\n     * Update the file action share icon for the given file\n     *\n     * @param $tr file element of the file to update\n     * @param {boolean} hasUserShares true if a user share exists\n     * @param {boolean} hasLinkShares true if a link share exists\n     *\n     * @returns {boolean} true if the icon was set, false otherwise\n     */\n    _updateFileActionIcon: function _updateFileActionIcon($tr, hasUserShares, hasLinkShares) {\n      // if the statuses are loaded already, use them for the icon\n      // (needed when scrolling to the next page)\n      if (hasUserShares || hasLinkShares || $tr.attr('data-share-recipient-data') || $tr.attr('data-share-owner')) {\n        OCA.Sharing.Util._markFileAsShared($tr, true, hasLinkShares);\n\n        return true;\n      }\n\n      return false;\n    },\n\n    /**\n     * Marks/unmarks a given file as shared by changing its action icon\n     * and folder icon.\n     *\n     * @param $tr file element to mark as shared\n     * @param hasShares whether shares are available\n     * @param hasLink whether link share is available\n     */\n    _markFileAsShared: function _markFileAsShared($tr, hasShares, hasLink) {\n      var action = $tr.find('.fileactions .action[data-action=\"Share\"]');\n      var type = $tr.data('type');\n      var icon = action.find('.icon');\n      var message, recipients, avatars;\n      var ownerId = $tr.attr('data-share-owner-id');\n      var owner = $tr.attr('data-share-owner');\n      var mountType = $tr.attr('data-mounttype');\n      var shareFolderIcon;\n      var iconClass = 'icon-shared';\n      action.removeClass('shared-style'); // update folder icon\n\n      if (type === 'dir' && (hasShares || hasLink || ownerId)) {\n        if (typeof mountType !== 'undefined' && mountType !== 'shared-root' && mountType !== 'shared') {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-' + mountType);\n        } else if (hasLink) {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-public');\n        } else {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-shared');\n        }\n\n        $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n        $tr.attr('data-icon', shareFolderIcon);\n      } else if (type === 'dir') {\n        var isEncrypted = $tr.attr('data-e2eencrypted'); // FIXME: duplicate of FileList._createRow logic for external folder,\n        // need to refactor the icon logic into a single code path eventually\n\n        if (isEncrypted === 'true') {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-encrypted');\n          $tr.attr('data-icon', shareFolderIcon);\n        } else if (mountType && mountType.indexOf('external') === 0) {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-external');\n          $tr.attr('data-icon', shareFolderIcon);\n        } else {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir'); // back to default\n\n          $tr.removeAttr('data-icon');\n        }\n\n        $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n      } // update share action text / icon\n\n\n      if (hasShares || ownerId) {\n        recipients = $tr.data('share-recipient-data');\n        action.addClass('shared-style');\n        avatars = '<span>' + t('core', 'Shared') + '</span>'; // even if reshared, only show \"Shared by\"\n\n        if (ownerId) {\n          message = t('core', 'Shared by');\n          avatars = OCA.Sharing.Util._formatRemoteShare(ownerId, owner, message);\n        } else if (recipients) {\n          avatars = OCA.Sharing.Util._formatShareList(recipients);\n        }\n\n        action.html(avatars).prepend(icon);\n\n        if (ownerId || recipients) {\n          var avatarElement = action.find('.avatar');\n          avatarElement.each(function () {\n            $(this).avatar($(this).data('username'), 32);\n          });\n          action.find('span[title]').tooltip({\n            placement: 'top'\n          });\n        }\n      } else {\n        action.html('<span class=\"hidden-visually\">' + t('core', 'Shared') + '</span>').prepend(icon);\n      }\n\n      if (hasLink) {\n        iconClass = 'icon-public';\n      }\n\n      icon.removeClass('icon-shared icon-public').addClass(iconClass);\n    },\n\n    /**\t\n     * Format a remote address\t\n     *\t\n    * @param {String} shareWith userid, full remote share, or whatever\t\n    * @param {String} shareWithDisplayName\t\n    * @param {String} message\t\n    * @returns {String} HTML code to display\t\n    */\n    _formatRemoteShare: function _formatRemoteShare(shareWith, shareWithDisplayName, message) {\n      var parts = OCA.Sharing.Util._REMOTE_OWNER_REGEXP.exec(shareWith);\n\n      if (!parts || !parts[6]) {\n        // display avatar of the user\t\n        var avatar = '<span class=\"avatar\" data-username=\"' + escapeHTML(shareWith) + '\" title=\"' + message + ' ' + escapeHTML(shareWithDisplayName) + '\"></span>';\n        var hidden = '<span class=\"hidden-visually\">' + message + ' ' + escapeHTML(shareWithDisplayName) + '</span> ';\n        return avatar + hidden;\n      }\n\n      var userName = parts[2];\n      var userDomain = parts[4];\n      var server = parts[5];\n      var tooltip = message + ' ' + userName;\n\n      if (userDomain) {\n        tooltip += '@' + userDomain;\n      }\n\n      if (server) {\n        tooltip += '@' + server;\n      }\n\n      var html = '<span class=\"remoteAddress\" title=\"' + escapeHTML(tooltip) + '\">';\n      html += '<span class=\"username\">' + escapeHTML(userName) + '</span>';\n\n      if (userDomain) {\n        html += '<span class=\"userDomain\">@' + escapeHTML(userDomain) + '</span>';\n      }\n\n      html += '</span> ';\n      return html;\n    },\n\n    /**\t\n     * Loop over all recipients in the list and format them using\t\n     * all kind of fancy magic.\t\n     *\t\n    * @param {Object} recipients array of all the recipients\t\n    * @returns {String[]} modified list of recipients\t\n    */\n    _formatShareList: function _formatShareList(recipients) {\n      var _parent = this;\n\n      recipients = _.toArray(recipients);\n      recipients.sort(function (a, b) {\n        return a.shareWithDisplayName.localeCompare(b.shareWithDisplayName);\n      });\n      return $.map(recipients, function (recipient) {\n        return _parent._formatRemoteShare(recipient.shareWith, recipient.shareWithDisplayName, t('core', 'Shared with'));\n      });\n    },\n\n    /**\t\n     * Marks/unmarks a given file as shared by changing its action icon\t\n     * and folder icon.\t\n     *\t\n    * @param $tr file element to mark as shared\t\n    * @param hasShares whether shares are available\t\n    * @param hasLink whether link share is available\t\n    */\n    markFileAsShared: function markFileAsShared($tr, hasShares, hasLink) {\n      var action = $tr.find('.fileactions .action[data-action=\"Share\"]');\n      var type = $tr.data('type');\n      var icon = action.find('.icon');\n      var message, recipients, avatars;\n      var ownerId = $tr.attr('data-share-owner-id');\n      var owner = $tr.attr('data-share-owner');\n      var mountType = $tr.attr('data-mounttype');\n      var shareFolderIcon;\n      var iconClass = 'icon-shared';\n      action.removeClass('shared-style'); // update folder icon\t\n\n      if (type === 'dir' && (hasShares || hasLink || ownerId)) {\n        if (typeof mountType !== 'undefined' && mountType !== 'shared-root' && mountType !== 'shared') {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-' + mountType);\n        } else if (hasLink) {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-public');\n        } else {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-shared');\n        }\n\n        $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n        $tr.attr('data-icon', shareFolderIcon);\n      } else if (type === 'dir') {\n        var isEncrypted = $tr.attr('data-e2eencrypted'); // FIXME: duplicate of FileList._createRow logic for external folder,\t\n        // need to refactor the icon logic into a single code path eventually\t\n\n        if (isEncrypted === 'true') {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-encrypted');\n          $tr.attr('data-icon', shareFolderIcon);\n        } else if (mountType && mountType.indexOf('external') === 0) {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir-external');\n          $tr.attr('data-icon', shareFolderIcon);\n        } else {\n          shareFolderIcon = OC.MimeType.getIconUrl('dir'); // back to default\t\n\n          $tr.removeAttr('data-icon');\n        }\n\n        $tr.find('.filename .thumbnail').css('background-image', 'url(' + shareFolderIcon + ')');\n      } // update share action text / icon\t\n\n\n      if (hasShares || ownerId) {\n        recipients = $tr.data('share-recipient-data');\n        action.addClass('shared-style');\n        avatars = '<span>' + t('core', 'Shared') + '</span>'; // even if reshared, only show \"Shared by\"\t\n\n        if (ownerId) {\n          message = t('core', 'Shared by');\n          avatars = this._formatRemoteShare(ownerId, owner, message);\n        } else if (recipients) {\n          avatars = this._formatShareList(recipients);\n        }\n\n        action.html(avatars).prepend(icon);\n\n        if (ownerId || recipients) {\n          var avatarElement = action.find('.avatar');\n          avatarElement.each(function () {\n            $(this).avatar($(this).data('username'), 32);\n          });\n          action.find('span[title]').tooltip({\n            placement: 'top'\n          });\n        }\n      } else {\n        action.html('<span class=\"hidden-visually\">' + t('core', 'Shared') + '</span>').prepend(icon);\n      }\n\n      if (hasLink) {\n        iconClass = 'icon-public';\n      }\n\n      icon.removeClass('icon-shared icon-public').addClass(iconClass);\n    },\n\n    /**\n     * @param {Array} fileData\n     * @returns {String}\n     */\n    getSharePermissions: function getSharePermissions(fileData) {\n      return fileData.sharePermissions;\n    }\n  };\n})();\n\nOC.Plugins.register('OCA.Files.FileList', OCA.Sharing.Util);","/**\n * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\n *\n */\n(function () {\n  'use strict';\n\n  var BreadCrumbView = OC.Backbone.View.extend({\n    tagName: 'span',\n    events: {\n      click: '_onClick'\n    },\n    _dirInfo: undefined,\n    render: function render(data) {\n      this._dirInfo = data.dirInfo || null;\n\n      if (this._dirInfo !== null && (this._dirInfo.path !== '/' || this._dirInfo.name !== '')) {\n        var isShared = data.dirInfo && data.dirInfo.shareTypes && data.dirInfo.shareTypes.length > 0;\n        this.$el.removeClass('shared icon-public icon-shared');\n\n        if (isShared) {\n          this.$el.addClass('shared');\n\n          if (data.dirInfo.shareTypes.indexOf(OC.Share.SHARE_TYPE_LINK) !== -1) {\n            this.$el.addClass('icon-public');\n          } else {\n            this.$el.addClass('icon-shared');\n          }\n        } else {\n          this.$el.addClass('icon-shared');\n        }\n\n        this.$el.show();\n        this.delegateEvents();\n      } else {\n        this.$el.removeClass('shared icon-public icon-shared');\n        this.$el.hide();\n      }\n\n      return this;\n    },\n    _onClick: function _onClick(e) {\n      e.preventDefault();\n      var fileInfoModel = new OCA.Files.FileInfoModel(this._dirInfo);\n      var self = this;\n      fileInfoModel.on('change', function () {\n        self.render({\n          dirInfo: self._dirInfo\n        });\n      });\n      var path = fileInfoModel.attributes.path + '/' + fileInfoModel.attributes.name;\n      OCA.Files.Sidebar.open(path);\n      OCA.Files.Sidebar.setActiveTab('sharing');\n    }\n  });\n  OCA.Sharing.ShareBreadCrumbView = BreadCrumbView;\n})();","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./sharebreadcrumb.scss\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"57e7eec1\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n   module.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./sharebreadcrumb.scss\", function() {\n     var newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./sharebreadcrumb.scss\");\n     if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n     update(newContent);\n   });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"/**\\n * @copyright 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\\n *\\n * @author 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\\n *\\n * @license GNU AGPL version 3 or any later version\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program.  If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\ndiv.crumb span.icon-shared,\\ndiv.crumb span.icon-public {\\n  display: inline-block;\\n  cursor: pointer;\\n  opacity: 0.2;\\n  margin-right: 6px; }\\n\\ndiv.crumb span.icon-shared.shared,\\ndiv.crumb span.icon-public.shared {\\n  opacity: 0.7; }\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item, useSourceMap);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join('');\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === 'string') {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, '']];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n  var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n  var cssMapping = item[3];\n\n  if (!cssMapping) {\n    return content;\n  }\n\n  if (useSourceMap && typeof btoa === 'function') {\n    var sourceMapping = toComment(cssMapping);\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n  }\n\n  return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n  // eslint-disable-next-line no-undef\n  var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n  var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n  return \"/*# \".concat(data, \" */\");\n}","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34: // \"\n        escape = '&quot;';\n        break;\n      case 38: // &\n        escape = '&amp;';\n        break;\n      case 39: // '\n        escape = '&#39;';\n        break;\n      case 60: // <\n        escape = '&lt;';\n        break;\n      case 62: // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index\n    ? html + str.substring(lastIndex, index)\n    : html;\n}\n","/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\nimport listToStyles from './listToStyles'\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nexport default function addStylesClient (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = listToStyles(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = listToStyles(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\n}\n","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nexport default function listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACthBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7EA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7NA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;A","sourceRoot":""}