{"version":3,"sources":["_layouts/core/utils/webtoolkit.base64.js","_layouts/core/utils/md5.js","_layouts/core/utils/session.js","_layouts/core/utils/functions.js","_layouts/core/utils/notifications.js","_layouts/core/utils/librarian.utils.js","_layouts/core/utils/login.sso.js","_layouts/core/utils/login.js","_layouts/core/config/librarian.config.js"],"names":[],"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrmIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"_layouts/core/utils/login.bundle.js","sourcesContent":["/**\r\n*\r\n* Base64 encode / decode\r\n* http://www.webtoolkit.info/\r\n*\r\n**/\r\n\r\nvar Base64 = {\r\n // private property\r\n _keyStr: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\",\r\n\r\n // public method for encoding\r\n encode: function(input) {\r\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4,\r\n i = 0,\r\n buf = new StringBuffer();\r\n\r\n input = Base64._utf8_encode(input);\r\n while (i < input.length) {\r\n chr1 = input.charCodeAt(i++);\r\n chr2 = input.charCodeAt(i++);\r\n chr3 = input.charCodeAt(i++);\r\n\r\n enc1 = chr1 >> 2;\r\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n enc4 = chr3 & 63;\r\n\r\n if (isNaN(chr2))\r\n enc3 = enc4 = 64;\r\n else if (isNaN(chr3))\r\n enc4 = 64;\r\n\r\n buf.append(this._keyStr.charAt(enc1));\r\n buf.append(this._keyStr.charAt(enc2));\r\n buf.append(this._keyStr.charAt(enc3));\r\n buf.append(this._keyStr.charAt(enc4));\r\n }\r\n\r\n return buf.toString();\r\n },\r\n\r\n // public method for decoding\r\n decode: function(input) {\r\n var chr1, chr2, chr3,\r\n enc1, enc2, enc3, enc4,\r\n i = 0,\r\n buf = new StringBuffer();\r\n\r\n input = (input + '').replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n\r\n while (i < input.length) {\r\n enc1 = this._keyStr.indexOf(input.charAt(i++));\r\n enc2 = this._keyStr.indexOf(input.charAt(i++));\r\n enc3 = this._keyStr.indexOf(input.charAt(i++));\r\n enc4 = this._keyStr.indexOf(input.charAt(i++));\r\n\r\n chr1 = (enc1 << 2) | (enc2 >> 4);\r\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n chr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n buf.append(String.fromCharCode(chr1));\r\n\r\n if (enc3 != 64) {\r\n buf.append(String.fromCharCode(chr2));\r\n }\r\n if (enc4 != 64) {\r\n buf.append(String.fromCharCode(chr3));\r\n }\r\n }\r\n\r\n return Base64._utf8_decode(buf.toString());\r\n },\r\n\r\n // private method for UTF-8 encoding\r\n _utf8_encode: function(string) {\r\n string = (string + '').replace(/\\r\\n/g, \"\\n\");\r\n var buf = new StringBuffer();\r\n\r\n for (var n = 0; n < string.length; n++) {\r\n var c = string.charCodeAt(n);\r\n\r\n if (c < 128) {\r\n buf.append(String.fromCharCode(c));\r\n }\r\n else if ((c > 127) && (c < 2048)) {\r\n buf.append(String.fromCharCode((c >> 6) | 192));\r\n buf.append(String.fromCharCode((c & 63) | 128));\r\n }\r\n else {\r\n buf.append(String.fromCharCode((c >> 12) | 224));\r\n buf.append(String.fromCharCode(((c >> 6) & 63) | 128));\r\n buf.append(String.fromCharCode((c & 63) | 128));\r\n }\r\n }\r\n\r\n return buf.toString();\r\n },\r\n\r\n // private method for UTF-8 decoding\r\n _utf8_decode: function(utftext) {\r\n var buf = new StringBuffer(),\r\n i = 0,\r\n c, c1, c2;\r\n\r\n while (i < utftext.length) {\r\n\r\n c = utftext.charCodeAt(i);\r\n\r\n if (c < 128) {\r\n buf.append(String.fromCharCode(c));\r\n i++;\r\n }\r\n else if ((c > 191) && (c < 224)) {\r\n c1 = utftext.charCodeAt(i + 1);\r\n buf.append(String.fromCharCode(((c & 31) << 6) | (c1 & 63)));\r\n i += 2;\r\n }\r\n else {\r\n c1 = utftext.charCodeAt(i + 1);\r\n c2 = utftext.charCodeAt(i + 2);\r\n buf.append(String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63)));\r\n i += 3;\r\n }\r\n }\r\n\r\n return buf.toString();\r\n }\r\n};","\r\n/* Version 4.2.3.001 */\r\n/*\r\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\r\n * Digest Algorithm, as defined in RFC 1321.\r\n * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\r\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r\n * Distributed under the BSD License\r\n * See http://pajhome.org.uk/crypt/md5 for more info.\r\n */\r\n\r\nvar Encrypt = {\r\n /*\r\n * Configurable variables. You may need to tweak these to be compatible with\r\n * the server-side, but the defaults work in most cases.\r\n */\r\n hexcase: 0, /* hex output format. 0 - lowercase; 1 - uppercase */\r\n b64pad: '', /* base-64 pad character. \"=\" for strict RFC compliance */\r\n chrsz: 8, /* bits per input character. 8 - ASCII; 16 - Unicode */\r\n\r\n /*\r\n * These are the functions you'll usually want to call\r\n * They take string arguments and return either hex or base-64 encoded strings\r\n */\r\n hex_md5: function(s) {\r\n return Encrypt.binl2hex(Encrypt.core_md5(Encrypt.str2binl(s), s.length * Encrypt.chrsz));\r\n },\r\n\r\n b64_md5: function(s) {\r\n return Encrypt.binl2b64(Encrypt.core_md5(Encrypt.str2binl(s), s.length * Encrypt.chrsz));\r\n },\r\n\r\n str_md5: function(s) {\r\n return Encrypt.binl2str(Encrypt.core_md5(Encrypt.str2binl(s), s.length * Encrypt.chrsz));\r\n },\r\n\r\n hex_hmac_md5: function(key, data) {\r\n return Encrypt.binl2hex(Encrypt.core_hmac_md5(key, data));\r\n },\r\n\r\n b64_hmac_md5: function(key, data) {\r\n return Encrypt.binl2b64(Encrypt.core_hmac_md5(key, data));\r\n },\r\n\r\n str_hmac_md5: function(key, data) {\r\n return Encrypt.binl2str(Encrypt.core_hmac_md5(key, data));\r\n },\r\n\r\n /* \r\n * Perform a simple self-test to see if the VM is working \r\n */\r\n md5_vm_test: function() {\r\n return Encrypt.hex_md5(\"abc\") == \"900150983cd24fb0d6963f7d28e17f72\";\r\n },\r\n\r\n /*\r\n * Calculate the MD5 of an array of little-endian words, and a bit length\r\n */\r\n core_md5: function(x, len) {\r\n /* append padding */\r\n x[len >> 5] |= 0x80 << ((len) % 32);\r\n x[(((len + 64) >>> 9) << 4) + 14] = len;\r\n\r\n var a = 1732584193;\r\n var b = -271733879;\r\n var c = -1732584194;\r\n var d = 271733878;\r\n\r\n for (var i = 0; i < x.length; i += 16) {\r\n var olda = a;\r\n var oldb = b;\r\n var oldc = c;\r\n var oldd = d;\r\n\r\n a = Encrypt.md5_ff(a, b, c, d, x[i + 0], 7, -680876936);\r\n d = Encrypt.md5_ff(d, a, b, c, x[i + 1], 12, -389564586);\r\n c = Encrypt.md5_ff(c, d, a, b, x[i + 2], 17, 606105819);\r\n b = Encrypt.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);\r\n a = Encrypt.md5_ff(a, b, c, d, x[i + 4], 7, -176418897);\r\n d = Encrypt.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);\r\n c = Encrypt.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);\r\n b = Encrypt.md5_ff(b, c, d, a, x[i + 7], 22, -45705983);\r\n a = Encrypt.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);\r\n d = Encrypt.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);\r\n c = Encrypt.md5_ff(c, d, a, b, x[i + 10], 17, -42063);\r\n b = Encrypt.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);\r\n a = Encrypt.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);\r\n d = Encrypt.md5_ff(d, a, b, c, x[i + 13], 12, -40341101);\r\n c = Encrypt.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);\r\n b = Encrypt.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);\r\n\r\n a = Encrypt.md5_gg(a, b, c, d, x[i + 1], 5, -165796510);\r\n d = Encrypt.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);\r\n c = Encrypt.md5_gg(c, d, a, b, x[i + 11], 14, 643717713);\r\n b = Encrypt.md5_gg(b, c, d, a, x[i + 0], 20, -373897302);\r\n a = Encrypt.md5_gg(a, b, c, d, x[i + 5], 5, -701558691);\r\n d = Encrypt.md5_gg(d, a, b, c, x[i + 10], 9, 38016083);\r\n c = Encrypt.md5_gg(c, d, a, b, x[i + 15], 14, -660478335);\r\n b = Encrypt.md5_gg(b, c, d, a, x[i + 4], 20, -405537848);\r\n a = Encrypt.md5_gg(a, b, c, d, x[i + 9], 5, 568446438);\r\n d = Encrypt.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);\r\n c = Encrypt.md5_gg(c, d, a, b, x[i + 3], 14, -187363961);\r\n b = Encrypt.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);\r\n a = Encrypt.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);\r\n d = Encrypt.md5_gg(d, a, b, c, x[i + 2], 9, -51403784);\r\n c = Encrypt.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);\r\n b = Encrypt.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);\r\n\r\n a = Encrypt.md5_hh(a, b, c, d, x[i + 5], 4, -378558);\r\n d = Encrypt.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);\r\n c = Encrypt.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);\r\n b = Encrypt.md5_hh(b, c, d, a, x[i + 14], 23, -35309556);\r\n a = Encrypt.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);\r\n d = Encrypt.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);\r\n c = Encrypt.md5_hh(c, d, a, b, x[i + 7], 16, -155497632);\r\n b = Encrypt.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);\r\n a = Encrypt.md5_hh(a, b, c, d, x[i + 13], 4, 681279174);\r\n d = Encrypt.md5_hh(d, a, b, c, x[i + 0], 11, -358537222);\r\n c = Encrypt.md5_hh(c, d, a, b, x[i + 3], 16, -722521979);\r\n b = Encrypt.md5_hh(b, c, d, a, x[i + 6], 23, 76029189);\r\n a = Encrypt.md5_hh(a, b, c, d, x[i + 9], 4, -640364487);\r\n d = Encrypt.md5_hh(d, a, b, c, x[i + 12], 11, -421815835);\r\n c = Encrypt.md5_hh(c, d, a, b, x[i + 15], 16, 530742520);\r\n b = Encrypt.md5_hh(b, c, d, a, x[i + 2], 23, -995338651);\r\n\r\n a = Encrypt.md5_ii(a, b, c, d, x[i + 0], 6, -198630844);\r\n d = Encrypt.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);\r\n c = Encrypt.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);\r\n b = Encrypt.md5_ii(b, c, d, a, x[i + 5], 21, -57434055);\r\n a = Encrypt.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);\r\n d = Encrypt.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);\r\n c = Encrypt.md5_ii(c, d, a, b, x[i + 10], 15, -1051523);\r\n b = Encrypt.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);\r\n a = Encrypt.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);\r\n d = Encrypt.md5_ii(d, a, b, c, x[i + 15], 10, -30611744);\r\n c = Encrypt.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);\r\n b = Encrypt.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);\r\n a = Encrypt.md5_ii(a, b, c, d, x[i + 4], 6, -145523070);\r\n d = Encrypt.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);\r\n c = Encrypt.md5_ii(c, d, a, b, x[i + 2], 15, 718787259);\r\n b = Encrypt.md5_ii(b, c, d, a, x[i + 9], 21, -343485551);\r\n\r\n a = Encrypt.safe_add(a, olda);\r\n b = Encrypt.safe_add(b, oldb);\r\n c = Encrypt.safe_add(c, oldc);\r\n d = Encrypt.safe_add(d, oldd);\r\n }\r\n return Array(a, b, c, d);\r\n\r\n },\r\n\r\n /*\r\n * These functions implement the four basic operations the algorithm uses.\r\n */\r\n md5_cmn: function(q, a, b, x, s, t) {\r\n return Encrypt.safe_add(Encrypt.bit_rol(Encrypt.safe_add(Encrypt.safe_add(a, q), Encrypt.safe_add(x, t)), s), b);\r\n },\r\n\r\n md5_ff: function (a, b, c, d, x, s, t) {\r\n return Encrypt.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);\r\n },\r\n\r\n md5_gg: function (a, b, c, d, x, s, t) {\r\n return Encrypt.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);\r\n },\r\n\r\n md5_hh: function (a, b, c, d, x, s, t) {\r\n return Encrypt.md5_cmn(b ^ c ^ d, a, b, x, s, t);\r\n },\r\n\r\n md5_ii: function (a, b, c, d, x, s, t) {\r\n return Encrypt.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);\r\n },\r\n\r\n /*\r\n * Calculate the HMAC-MD5, of a key and some data\r\n */\r\n core_hmac_md5: function(key, data) {\r\n var bkey = Encrypt.str2binl(key);\r\n if (bkey.length > 16)\r\n bkey = Encrypt.core_md5(bkey, key.length * Encrypt.chrsz);\r\n\r\n var ipad = Array(16), opad = Array(16);\r\n for (var i = 0; i < 16; i++) {\r\n ipad[i] = bkey[i] ^ 0x36363636;\r\n opad[i] = bkey[i] ^ 0x5C5C5C5C;\r\n }\r\n\r\n var hash = Encrypt.core_md5(ipad.concat(Encrypt.str2binl(data)), 512 + data.length * Encrypt.chrsz);\r\n return Encrypt.core_md5(opad.concat(hash), 512 + 128);\r\n },\r\n\r\n /*\r\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\r\n * to work around bugs in some JS interpreters.\r\n */\r\n safe_add: function(x, y) {\r\n var lsw = (x & 0xFFFF) + (y & 0xFFFF);\r\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\r\n return (msw << 16) | (lsw & 0xFFFF);\r\n },\r\n\r\n /*\r\n * Bitwise rotate a 32-bit number to the left.\r\n */\r\n bit_rol: function(num, cnt) {\r\n return (num << cnt) | (num >>> (32 - cnt));\r\n },\r\n\r\n /*\r\n * Convert a string to an array of little-endian words\r\n * If Encrypt.chrsz is ASCII, characters >255 have their hi-byte silently ignored.\r\n */\r\n str2binl: function(str) {\r\n var bin = Array();\r\n var mask = (1 << Encrypt.chrsz) - 1;\r\n for (var i = 0; i < str.length * Encrypt.chrsz; i += Encrypt.chrsz)\r\n bin[i >> 5] |= (str.charCodeAt(i / Encrypt.chrsz) & mask) << (i % 32);\r\n return bin;\r\n },\r\n\r\n /*\r\n * Convert an array of little-endian words to a string\r\n */\r\n binl2str: function(bin) {\r\n var str = \"\";\r\n var mask = (1 << Encrypt.chrsz) - 1;\r\n for (var i = 0; i < bin.length * 32; i += Encrypt.chrsz)\r\n str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask);\r\n return str;\r\n },\r\n\r\n /*\r\n * Convert an array of little-endian words to a hex string.\r\n */\r\n binl2hex: function(binarray) {\r\n var hex_tab = Encrypt.hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\";\r\n var str = \"\";\r\n for (var i = 0; i < binarray.length * 4; i++) {\r\n str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) +\r\n hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);\r\n }\r\n return str;\r\n },\r\n\r\n /*\r\n * Convert an array of little-endian words to a base-64 string\r\n */\r\n binl2b64: function(binarray) {\r\n var tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n var str = \"\";\r\n for (var i = 0; i < binarray.length * 4; i += 3) {\r\n var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) |\r\n (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) |\r\n ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF);\r\n\r\n for (var j = 0; j < 4; j++) {\r\n if (i * 8 + j * 6 > binarray.length * 32)\r\n str += Encrypt.b64pad;\r\n else\r\n str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);\r\n }\r\n }\r\n return str;\r\n }\r\n};","\r\nLibrarian.Session = new Class({\r\n Binds: [\"onResetComplete\", \"onUpdateComplete\", \"onLogon\", \"onLogoff\", \"onFailure\"],\r\n Implements: [Events, Options],\r\n\r\n options: {\r\n },\r\n\r\n initialize: function(options) {\r\n this.setOptions(options);\r\n },\r\n\r\n logon: function(username, password, params) {\r\n // Get current time zone\r\n var tz = -(new Date()).getTimezoneOffset() / 60;\r\n var url = Librarian.path.getMethodUrl(\"logon\") + \"&out=ujson&utz=\" + tz.toString();\r\n\r\n if (params) {\r\n url += \"&\" + Librarian.Utils.getQueryString(params);\r\n }\r\n\r\n var data = {\r\n username: username,\r\n password: password\r\n };\r\n\r\n if (Librarian.sessionType == Librarian.Session.sessionTypes.onBehalf)\r\n // Pass onBehalfID (stored in userInfo) to stay logged in on behalf\r\n url += \"&obuid=\" + Librarian.userInfo.UserId;\r\n\r\n new Request.JSON({\r\n method: \"post\",\r\n urlEncoded: true,\r\n url: url,\r\n data: data,\r\n noCache: true,\r\n onSuccess: this.onLogon,\r\n onFailure: this.onFailure\r\n }).send();\r\n },\r\n\r\n logoff: function() {\r\n new Request({\r\n method: \"get\",\r\n url: Librarian.path.getMethodUrl(\"logoff\"),\r\n noCache: true,\r\n onSuccess: this.onLogoff,\r\n onFailure: this.onFailure\r\n }).send();\r\n },\r\n\r\n changePassword: function(oldPassword, newPassword, securityQuestion, securityAnswer) {\r\n var url = Librarian.path.getUpdateUrl(\"setup\") + \"&out=cjson\";\r\n\r\n var params = {\r\n uopw: oldPassword,\r\n unpw: newPassword\r\n }\r\n\r\n if (securityQuestion != null) {\r\n params.uq = securityQuestion;\r\n params.ua = securityAnswer;\r\n }\r\n\r\n new Request({\r\n url: url,\r\n method: \"post\",\r\n data: params,\r\n noCache: true\r\n }).addEvent(\"success\", this.onUpdateComplete).addEvent(\"failure\", this.onFailure).send();\r\n },\r\n\r\n sendResetPassword: function(username) {\r\n var url = Librarian.path.getRecoverUrl(\"sendresetpass\") + \"&out=cjson\";\r\n\r\n var params = {\r\n name: username\r\n }\r\n\r\n new Request({\r\n url: url,\r\n method: \"post\",\r\n data: params,\r\n noCache: true\r\n }).addEvent(\"success\", this.onSendResetPassword).send();\r\n },\r\n\r\n onSendResetPassword: function() {\r\n Librarian.Utils.notification(\"Password reset sent\");\r\n },\r\n\r\n onUpdateComplete: function() {\r\n this.fireEvent(\"updatecomplete\", arguments);\r\n },\r\n\r\n onLogon: function() {\r\n this.fireEvent(\"logon\", arguments);\r\n },\r\n\r\n onLogoff: function() {\r\n this.fireEvent(\"logoff\", arguments);\r\n },\r\n\r\n onFailure: function() {\r\n this.fireEvent(\"error\", arguments);\r\n }\r\n});\r\n\r\n/* Static methods and variables */\r\nLibrarian.Session.extend({\r\n sessionTypes: {\r\n undefined: 0,\r\n user: 1,\r\n contactAsGuest: 2,\r\n userAsGuest: 3,\r\n anonymous: 4,\r\n onBehalf: 5,\r\n sso: 6\r\n },\r\n\r\n // Checks if the session is that of a user (type user or sso) or someone on behalf of a user (type onBehalf)\r\n isUser: function(sessionType) {\r\n return (sessionType == Librarian.Session.sessionTypes.user) ||\r\n (sessionType == Librarian.Session.sessionTypes.onBehalf) ||\r\n (sessionType == Librarian.Session.sessionTypes.sso);\r\n },\r\n\r\n isMfaRequired: function(xhr) {\r\n var value = xhr.getResponseHeader(\"X-MFA-Required\");\r\n if (!value)\r\n return false;\r\n\r\n return value.toLowerCase() == \"true\";\r\n }\r\n});\r\n\r\nLibrarian.Session.MFAPanel = new Class({\r\n Implements: [Events, Options],\r\n Binds: [\"onLoadHtml\", \"submit\", \"onSuccess\", \"onFailure\"],\r\n\r\n options: {\r\n container: null,\r\n mfaInfo: null,\r\n credentials: null,\r\n onSuccess: null\r\n },\r\n\r\n containerEl: null,\r\n wrapperEl: null,\r\n\r\n initialize: function(options) {\r\n this.setOptions(options);\r\n\r\n this.containerEl = $(this.options.container);\r\n\r\n this.loadHtml();\r\n },\r\n\r\n loadHtml: function() {\r\n var url = Librarian.path.getLayoutsPath() + \"pages/mfapanel.html\";\r\n\r\n var request = new Request.HTML({\r\n url: url,\r\n method: \"get\",\r\n append: this.containerEl,\r\n onSuccess: this.onLoadHtml\r\n });\r\n\r\n request.send();\r\n },\r\n\r\n onLoadHtml: function() {\r\n var mfaInfo = this.options.mfaInfo;\r\n\r\n this.wrapperEl = this.containerEl.getElement(\".mfa-wrapper\");\r\n\r\n if (mfaInfo.Status == \"MfaSetupRequired\") {\r\n var setupWrapper = this.wrapperEl.getElement(\".mfa-setup-wrapper\");\r\n if (setupWrapper)\r\n setupWrapper.show();\r\n\r\n var setupImg = this.wrapperEl.getElement(\".mfa-setup-image\");\r\n if (setupImg)\r\n setupImg.src = mfaInfo.ImageUrl;\r\n }\r\n\r\n this.codeInput = this.wrapperEl.getElement(\".mfa-code-input\");\r\n this.codeInput.focus();\r\n this.codeInput.addOnKeyPress(\"enter\", this.submit);\r\n\r\n this.submitButton = this.wrapperEl.getElement(\".mfa-code-submit\");\r\n this.submitButton.addOnClick(this.submit);\r\n\r\n this.fireEvent(\"load\");\r\n },\r\n\r\n toggleDisabled: function(disabled) {\r\n this.wrapperEl.toggleClass(\"disabled\", disabled);\r\n this.codeInput.disabled = disabled;\r\n this.submitButton.disabled = disabled;\r\n },\r\n\r\n submit: function() {\r\n if (this.wrapperEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.toggleDisabled(true);\r\n\r\n var credentials = this.options.credentials;\r\n\r\n var params = {\r\n mfaSecret: this.options.mfaInfo.Secret,\r\n mfaCode: this.codeInput.value\r\n };\r\n\r\n var session = new Librarian.Session();\r\n session.onLogon = this.onSuccess;\r\n session.onFailure = this.onFailure;\r\n\r\n session.logon(credentials.username, credentials.password, params);\r\n },\r\n\r\n onSuccess: function(sessionInfo) {\r\n if (typeof this.options.onSuccess == \"function\")\r\n this.options.onSuccess(sessionInfo);\r\n },\r\n\r\n onFailure: function(xhr) {\r\n this.toggleDisabled(false);\r\n\r\n var status = null;\r\n\r\n if (Librarian.Session.isMfaRequired(xhr)) {\r\n var errorInfo = JSON.parse(xhr.responseText);\r\n status = errorInfo.Status;\r\n }\r\n\r\n var message = this.getErrorMessage(status);\r\n\r\n Librarian.Utils.error(message);\r\n },\r\n\r\n getErrorMessage: function(status) {\r\n switch(status) {\r\n case \"MfaSetupRequired\":\r\n return \"Authenticator setup is required\";\r\n case \"MfaCodeRequired\":\r\n return \"Verification code is required\";\r\n case \"MfaInvalidCode\":\r\n return \"Verification code is invalid. Please try again.\";\r\n default:\r\n return \"An unexpected error occurred. Please try again.\";\r\n }\r\n }\r\n});\r\n","// Array Remove - By John Resig (MIT Licensed)\r\nif (typeof Array.prototype.remove != \"function\") {\r\n Array.prototype.remove = function(from, to) {\r\n var rest = this.slice((to || from) + 1 || this.length);\r\n this.length = from < 0 ? this.length + from : from;\r\n return this.push.apply(this, rest);\r\n };\r\n}\r\n\r\n// Array Find - From jsPolyfill\r\nif (typeof Array.prototype.find != \"function\") {\r\n Array.prototype.find = function(predicate) {\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('Predicate is not a function');\r\n }\r\n\r\n var list = Object(this);\r\n // Makes sures is always has an positive integer as length.\r\n var length = list.length >>> 0;\r\n var thisArg = arguments[1];\r\n\r\n for (var i = 0; i < length; i++) {\r\n var element = list[i];\r\n if (predicate.call(thisArg, element, i, list)) {\r\n return element;\r\n }\r\n }\r\n };\r\n}\r\n\r\n// Add the given item to the top of this Array\r\nif (typeof Array.pushTop != \"function\") {\r\n Array.pushTop = function(array, item) {\r\n return Array.from(item).concat(array);\r\n };\r\n}\r\n\r\n/*\r\n * Array intersect by Alexander Herrmann (MIT Licensed)\r\n * From: http://mootools.net/forge/p/array_more\r\n * Creates an intersection of the current array and the given one.\r\n */\r\nArray.implement({\r\n intersect: function(other) {\r\n var copy = this.slice();\r\n this.each(function(el) {\r\n if (other.indexOf(el) < 0) {\r\n copy.splice(copy.indexOf(el), 1);\r\n }\r\n }, this);\r\n return copy;\r\n }\r\n});\r\n\r\nObject.extend({\r\n toArray: function(object, fn) {\r\n var results = [];\r\n\r\n Object.each(object, function(value, key) {\r\n var item = fn(value, key);\r\n results.push(item);\r\n });\r\n\r\n return results;\r\n }\r\n});\r\n\r\n/**\r\n* replaceAll by Fagner Brack (MIT Licensed)\r\n* Replaces all occurrences of a substring in a string\r\n*/\r\nif (typeof String.prototype.replaceAll != \"function\") {\r\n String.prototype.replaceAll = function(token, newToken, ignoreCase) {\r\n var str, i = -1, _token;\r\n if ((str = this.toString()) && typeof token === \"string\") {\r\n _token = ignoreCase === true ? token.toLowerCase() : undefined;\r\n while ((i = (\r\n _token !== undefined ?\r\n str.toLowerCase().indexOf(\r\n _token,\r\n i >= 0 ? i + newToken.length : 0\r\n ) : str.indexOf(\r\n token,\r\n i >= 0 ? i + newToken.length : 0\r\n )\r\n )) !== -1) {\r\n str = str.substring(0, i)\r\n .concat(newToken)\r\n .concat(str.substring(i + token.length));\r\n }\r\n }\r\n return str;\r\n };\r\n}\r\n\r\nif (typeof String.prototype.equalsIgnoreCase != \"function\") {\r\n String.prototype.equalsIgnoreCase = function(str) {\r\n return this.toLowerCase() == str.toLowerCase();\r\n };\r\n}\r\n\r\nif (typeof String.prototype.containsIgnoreCase != \"function\") {\r\n String.prototype.containsIgnoreCase = function(str) {\r\n str = str.toLowerCase();\r\n\r\n return this.toLowerCase().contains(str);\r\n };\r\n}\r\n\r\nif (typeof String.prototype.startsWith != \"function\") {\r\n String.prototype.startsWith = function(str) {\r\n return this.indexOf(str) == 0;\r\n };\r\n}\r\n\r\nif (typeof String.prototype.startsWithIgnoreCase != \"function\") {\r\n String.prototype.startsWithIgnoreCase = function(str) {\r\n str = str.toLowerCase();\r\n\r\n return this.toLowerCase().startsWith(str);\r\n };\r\n}\r\n\r\nif (typeof String.prototype.endsWith != \"function\") {\r\n String.prototype.endsWith = function(str) {\r\n var index = this.lastIndexOf(str);\r\n\r\n return (index >= 0) && (index == (this.length - str.length));\r\n };\r\n}\r\n\r\nif (typeof String.prototype.endsWithIgnoreCase != \"function\") {\r\n String.prototype.endsWithIgnoreCase = function(str) {\r\n str = str.toLowerCase();\r\n\r\n return this.toLowerCase().endsWith(str);\r\n };\r\n}\r\n\r\nif (typeof String.prototype.matches != \"function\") {\r\n String.prototype.matches = function(key, operator) {\r\n if ((typeof operator == \"undefined\") || (operator == null))\r\n operator = \"contains\";\r\n\r\n if ((typeof key != \"undefined\") && (key != null)) {\r\n var self = this.toLowerCase();\r\n key = key.toLowerCase();\r\n operator = operator.toLowerCase();\r\n\r\n return (((operator == \"startswith\") && self.startsWith(key)) ||\r\n ((operator == \"endswith\") && self.endsWith(key)) ||\r\n ((operator == \"equals\") && (self == key)) ||\r\n ((operator == \"contains\") && self.indexOf(key) >= 0));\r\n }\r\n\r\n return false;\r\n };\r\n}\r\n\r\nif (typeof String.prototype.isLowerCase != \"function\") {\r\n String.prototype.isLowerCase = function() {\r\n return this == this.toLowerCase();\r\n };\r\n}\r\n\r\nif (typeof String.prototype.isUpperCase != \"function\") {\r\n String.prototype.isUpperCase = function() {\r\n return this == this.toUpperCase();\r\n };\r\n}\r\n\r\nif (typeof String.isCharLowerCase != \"function\") {\r\n String.isCharLowerCase = function(character) {\r\n return character == character.toLowerCase();\r\n };\r\n}\r\n\r\nif (typeof String.isCharUpperCase != \"function\") {\r\n String.isCharUpperCase = function(character) {\r\n return character == character.toUpperCase();\r\n };\r\n}\r\n\r\nif (typeof String.prototype.isQuoted != \"function\") {\r\n String.prototype.isQuoted = function(quote) {\r\n if ((typeof quote == \"undefined\") || (quote == null))\r\n quote = '\"';\r\n\r\n return this.trim().startsWith(quote) && this.trim().endsWith(quote);\r\n };\r\n}\r\n\r\nif (typeof String.prototype.toCapitalCase != \"function\") {\r\n String.prototype.toCapitalCase = function(lowerRest) {\r\n if ((typeof lowerRest == \"undefined\") || (lowerRest == null))\r\n lowerRest = true;\r\n\r\n var capital = new StringBuffer();\r\n capital.append(this.charAt(0).toUpperCase());\r\n var rest = this.substring(1);\r\n if (lowerRest)\r\n rest = rest.toLowerCase();\r\n capital.append(rest);\r\n return capital.toString();\r\n };\r\n}\r\n\r\nif (typeof String.prototype.toPrettyFormat != \"function\") {\r\n String.prototype.toPrettyFormat = function() {\r\n var words = [],\r\n lastUpper;\r\n\r\n var subWords = this.split(' ');\r\n for (var i = 0; i < subWords.length; i++) {\r\n lastUpper = 0;\r\n for (var j = 1; j < subWords[i].length; j++) {\r\n if (String.isCharUpperCase(subWords[i].charAt(j))) {\r\n words.push(subWords[i].substring(lastUpper, j));\r\n lastUpper = j;\r\n }\r\n }\r\n\r\n if (lastUpper < subWords[i].length)\r\n words.push(subWords[i].substring(lastUpper, subWords[i].length));\r\n }\r\n\r\n for (var i = 0; i < words.length; i++)\r\n words[i] = words[i].toCapitalCase().trim();\r\n\r\n return words.join(' ');\r\n };\r\n}\r\n\r\n/**\r\n* setCharAt by Helder Magalhães\r\n*\r\n* http://www.openjs.com/scripts/strings/setcharat_function.php\r\n*/\r\nif (typeof String.prototype.setCharAt != \"function\") {\r\n String.prototype.setCharAt = function(index, chr) {\r\n if (index > this.length - 1)\r\n return this;\r\n return this.substr(0, index) + chr + this.substr(index + 1);\r\n };\r\n}\r\n\r\n/**\r\n* safeSplit by Michael Lebson\r\n* Safely splits a string by the given token without\r\n* destroying the occurances of the token in the string.\r\n*/\r\nif (typeof String.prototype.safeSplit != \"function\") {\r\n String.prototype.safeSplit = function(token) {\r\n var word = this;\r\n var split = [];\r\n var tokenIndex = -1;\r\n\r\n // Go through each character\r\n for (var i = 0; i < word.length; i++) {\r\n // If this letter is the token\r\n if (word.charAt(i) == token) {\r\n // Save the location, if we don't have one already\r\n if (tokenIndex < 0)\r\n tokenIndex = i;\r\n // Otherwise, do some processing\r\n else {\r\n // If this token isn't at the beginning of the string,\r\n // add the part before it to the list of split values\r\n if (tokenIndex != 0)\r\n split.push(word.substring(0, tokenIndex));\r\n\r\n // Get the value between the first token\r\n // and this one and then save it\r\n split.push(word.substring(tokenIndex, i + 1));\r\n\r\n // Chop off the beginning of this word so we don't process it again\r\n word = word.substring(i + 1, word.length);\r\n // Start back at the beginning of the word\r\n i = 0;\r\n // And reset the token index\r\n tokenIndex = -1;\r\n }\r\n }\r\n }\r\n\r\n // Add the rest of the word to the split list\r\n split.push(word);\r\n\r\n // Return the split list\r\n return split;\r\n };\r\n}\r\n\r\n/**\r\n* Decodes xml-encoded strings\r\n*\r\n* From https://github.com/jnbdz/EncodeAndDecodeXML\r\n*/\r\n\r\nif (typeof String.prototype.decodeXML != \"function\") {\r\n String.prototype.decodeXML = function() {\r\n var escaped_to_xml = {\r\n '&': '&',\r\n '"': '\"',\r\n '<': '<',\r\n '>': '>',\r\n ''': \"'\"\r\n };\r\n\r\n return this.replace(/("|<|>|&|')/g, function (str, item) {\r\n return escaped_to_xml[item];\r\n });\r\n };\r\n}\r\n\r\nif (typeof String.prototype.encodeXML != \"function\") {\r\n String.prototype.encodeXML = function() {\r\n var xml_to_escaped = {\r\n '&': '&',\r\n '\"': '"',\r\n '<': '<',\r\n '>': '>',\r\n \"'\": '''\r\n };\r\n return String(this).replace(/([\\&\"<>'])/g, function(str, item) {\r\n return xml_to_escaped[item];\r\n });\r\n };\r\n}\r\n\r\n/**\r\n* Implements toISOString function for dates in older browsers (e.g. IE 8)\r\n*/\r\nif (typeof Date.prototype.toISOString != \"function\") {\r\n (function() {\r\n function pad(number) {\r\n var r = String(number);\r\n if (r.length === 1)\r\n r = '0' + r;\r\n\r\n return r;\r\n }\r\n\r\n Date.prototype.toISOString = function() {\r\n return this.getUTCFullYear()\r\n + '-' + pad(this.getUTCMonth() + 1)\r\n + '-' + pad(this.getUTCDate())\r\n + 'T' + pad(this.getUTCHours())\r\n + ':' + pad(this.getUTCMinutes())\r\n + ':' + pad(this.getUTCSeconds())\r\n + '.' + String((this.getUTCMilliseconds() / 1000).toFixed(3)).slice(2, 5)\r\n + 'Z';\r\n };\r\n }());\r\n}\r\n\r\n/*\r\n* JavaScript Pretty Date\r\n* Copyright (c) 2011 John Resig (ejohn.org)\r\n* Licensed under the MIT and GPL licenses.\r\n*/\r\nif (typeof Date.prototype.toPrettyFormat != \"function\") {\r\n (function() {\r\n var SECONDS_IN_MINUTE = 60,\r\n MINUTES_IN_HOUR = 60,\r\n HOURS_IN_DAY = 24,\r\n DAYS_IN_WEEK = 7,\r\n SECONDS_IN_HOUR = SECONDS_IN_MINUTE * MINUTES_IN_HOUR,\r\n SECONDS_IN_DAY = SECONDS_IN_HOUR * HOURS_IN_DAY;\r\n\r\n // Takes an ISO time and returns a string showing how long ago the date represents\r\n Date.prototype.toPrettyFormat = function(relativeDate, showAgo, useShortName) {\r\n var now = relativeDate || (new Date()),\r\n secDiff = (now.getTime() - this.getTime()) / 1000,\r\n dayDiff = Math.floor(secDiff / SECONDS_IN_DAY),\r\n translateSuffix = (showAgo !== false ? \"_ago\" : '') + (useShortName !== false ? \"_short\" : '');\r\n\r\n if (isNaN(dayDiff) || (dayDiff < 0))\r\n return Librarian.Lang.getString(\"recently\");\r\n\r\n if (dayDiff == 0) {\r\n if (secDiff < SECONDS_IN_MINUTE)\r\n return Librarian.Lang.getArgString(\"seconds\" + translateSuffix, [Math.ceil(secDiff)]);\r\n if (secDiff < SECONDS_IN_HOUR) {\r\n var minutes = Math.floor(secDiff / SECONDS_IN_MINUTE);\r\n return Librarian.Lang.getPluralArgString(\"minutes\" + translateSuffix, minutes, [minutes]);\r\n }\r\n\r\n var hours = Math.floor(secDiff / SECONDS_IN_HOUR);\r\n return Librarian.Lang.getPluralArgString(\"hours\" + translateSuffix, hours, [hours]);\r\n }\r\n else if (dayDiff == 1)\r\n return Librarian.Lang.getString(\"yesterday\");\r\n else if (dayDiff < DAYS_IN_WEEK)\r\n return Librarian.Lang.getPluralArgString(\"days\" + translateSuffix, dayDiff, [dayDiff]);\r\n\r\n var weeks = Math.floor(dayDiff / DAYS_IN_WEEK);\r\n return Librarian.Lang.getPluralArgString(\"weeks\" + translateSuffix, weeks, [weeks]);\r\n };\r\n }());\r\n}\r\n\r\n/**\r\n* If the browser can't handle ISO strings, add Date.fromISO to parse it\r\n*\r\n* from http://stackoverflow.com/questions/11020658/javascript-json-date-parse-in-ie7-ie8-returns-nan\r\n*/\r\n(function() {\r\n var D = new Date('2011-06-02T09:34:29+02:00');\r\n if (!D || +D !== 1307000069000) {\r\n Date.fromISO = function(s) {\r\n var day, tz,\r\n rx = /^(\\d{4}\\-\\d\\d\\-\\d\\d([tT ][\\d:\\.]*)?)([zZ]|([+\\-])(\\d\\d):(\\d\\d))?$/,\r\n p = rx.exec(s) || [];\r\n if (p[1]) {\r\n day = p[1].split(/\\D/);\r\n for (var i = 0, L = day.length; i < L; i++) {\r\n day[i] = parseInt(day[i], 10) || 0;\r\n };\r\n day[1] -= 1;\r\n day = new Date(Date.UTC.apply(Date, day));\r\n if (!day.getDate()) return NaN;\r\n if (p[5]) {\r\n tz = (parseInt(p[5], 10) * 60);\r\n if (p[6]) tz += parseInt(p[6], 10);\r\n if (p[4] == '+') tz *= -1;\r\n if (tz) day.setUTCMinutes(day.getUTCMinutes() + tz);\r\n }\r\n return day;\r\n }\r\n return new Date(s);\r\n }\r\n }\r\n else {\r\n Date.fromISO = function(s) {\r\n return new Date(s);\r\n }\r\n }\r\n})();\r\n\r\n/**\r\n* Implementation of selectSingleNode for browsers that do not already have it.\r\n*\r\n* Adapted from code from\r\n* http://weblogs.asp.net/ssargent/archive/2007/01/25/selectsinglenode-and-firefox.aspx\r\n*/\r\nif (typeof Element.prototype.selectSingleNode != \"function\") {\r\n Element.implement({\r\n selectSingleNode: function(xPath) {\r\n if (typeof XPathEvaluator == \"undefined\")\r\n return null;\r\n\r\n var pathEvaluator = new XPathEvaluator(),\r\n // FIRST_ORDERED_NODE_TYPE returns the first match to the xpath\r\n result = pathEvaluator.evaluate(xPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);\r\n\r\n if (result != null)\r\n return result.singleNodeValue;\r\n else\r\n return null;\r\n }\r\n });\r\n}\r\n\r\nif ((typeof XMLDocument != \"undefined\") && (typeof XMLDocument.prototype.selectSingleNode != \"function\")) {\r\n XMLDocument.prototype.selectSingleNode = function(xPath) {\r\n if (typeof XPathEvaluator == \"undefined\")\r\n return null;\r\n\r\n var pathEvaluator = new XPathEvaluator(),\r\n // FIRST_ORDERED_NODE_TYPE returns the first match to the xpath\r\n result = pathEvaluator.evaluate(xPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);\r\n\r\n if (result != null)\r\n return result.singleNodeValue;\r\n else\r\n return null;\r\n };\r\n}\r\n\r\n/**\r\n* Implementation of selectNodes for browsers that do not already have it.\r\n*\r\n* Adapted from code from\r\n* http://www.yesjames.com/index.php/2008/11/firefox-compatible-xpath-functions-in-javascript/\r\n*/\r\nif ((typeof XMLDocument != \"undefined\") && (typeof XMLDocument.prototype.selectNodes != \"function\")) {\r\n XMLDocument.prototype.selectNodes = function(cXPathString, xNode) {\r\n if (!xNode)\r\n xNode = this;\r\n\r\n var oNSResolver = this.createNSResolver(this.documentElement),\r\n aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null),\r\n aResult = [];\r\n for (var i = 0; i < aItems.snapshotLength; i++)\r\n aResult[i] = aItems.snapshotItem(i);\r\n\r\n return aResult;\r\n };\r\n}\r\n\r\nif (typeof Element.prototype.selectNodes != \"function\") {\r\n Element.implement({\r\n selectNodes: function(cXPathString) {\r\n if (this.ownerDocument.selectNodes)\r\n return this.ownerDocument.selectNodes(cXPathString, this);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n* Converts a number into a thousands-separated string using the number of decimals,\r\n* the decimal mark, and the thousands separator provided.\r\n*\r\n* Adapted from code by Patrick Desjardins and Marco Demaio\r\n* http://stackoverflow.com/questions/149055/how-can-i-format-numbers-as-money-in-javascript\r\n*/\r\nif (typeof Number.prototype.toMoney != \"function\") {\r\n Number.prototype.toMoney = function(decimals, symbol, decimalMark, seperator) {\r\n // Default to two decimals if no count or an invalid one are provided\r\n if ((typeof decimals == \"undefined\") || (decimals == null) || isNaN(decimals))\r\n decimals = 2;\r\n else\r\n decimals = Math.abs(decimals);\r\n\r\n if ((typeof symbol == \"undefined\") || (symbol == null))\r\n symbol = '$';\r\n if ((typeof decimalMark == \"undefined\") || (decimalMark == null))\r\n decimalMark = '.';\r\n if ((typeof seperator == \"undefined\") || (seperator == null))\r\n seperator = ',';\r\n\r\n var number = Math.abs(this).toFixed(decimals);\r\n var intPart = parseInt(number).toString();\r\n var seperatorCount = 0;\r\n if (intPart.length > 3)\r\n seperatorCount = intPart.length % 3;\r\n\r\n var value = new StringBuffer();\r\n\r\n if (this < 0)\r\n value.append('-');\r\n\r\n value.append(symbol);\r\n if (seperatorCount > 0) {\r\n value.append(intPart.substr(0, seperatorCount));\r\n value.append(seperator);\r\n }\r\n\r\n value.append(intPart.substr(seperatorCount).replace(/(\\d{3})(?=\\d)/g, \"$1\" + seperator));\r\n if (decimals > 0) {\r\n value.append(decimalMark);\r\n value.append(Math.abs(number - intPart).toFixed(decimals).slice(2));\r\n }\r\n\r\n return value.toString();\r\n };\r\n}\r\n\r\n/**\r\n* Adds the onhashchange event\r\n*\r\n* authors:\r\n* sdf1981cgn\r\n* Greggory Hernandez\r\n*/\r\nElement.Events.hashchange = {\r\n onAdd: function() {\r\n var hash = self.location.hash;\r\n\r\n var hashchange = function() {\r\n if (hash == self.location.hash) return;\r\n else hash = self.location.hash;\r\n\r\n var value = (hash.indexOf('#/') == 0 ? hash.substr(2) : hash.indexOf('#') == 0 ? hash.substr(1) : hash);\r\n window.fireEvent(\"hashchange\", value);\r\n document.fireEvent(\"hashchange\", value);\r\n };\r\n\r\n if (\"onhashchange\" in window)\r\n window.onhashchange = hashchange;\r\n else\r\n hashchange.periodical(50);\r\n }\r\n};\r\n\r\n/**\r\n* Element visibility function by WM\r\n*/\r\nElement.implement({\r\n setVisible: function(visible) {\r\n if (visible === true || visible == \"visible\")\r\n this.setStyle(\"visibility\", \"visible\");\r\n else\r\n this.setStyle(\"visibility\", \"hidden\");\r\n }\r\n});\r\n\r\n/**\r\n* Adds selected class to current element and removes from siblings\r\n* Arguments:\r\n* activeClass (optional): Class to add/remove from elements. Defaults to \"active\"\r\n* siblingSelector (optional): CSS selector to match siblings\r\n*\r\n* Added by WM - 9/24/13\r\n*/\r\nElement.implement({\r\n select: function(activeClass, siblingSelector) {\r\n if (!activeClass)\r\n activeClass = \"active\";\r\n\r\n var siblings = this.getSiblings(siblingSelector);\r\n siblings.forEach(function(sibling) {\r\n sibling.removeClass(activeClass);\r\n });\r\n\r\n this.addClass(activeClass);\r\n }\r\n});\r\n\r\n/**\r\n* Shows this element while hiding siblings\r\n*/\r\nElement.implement({\r\n showOnly: function (siblingSelector) {\r\n var siblings = this.getSiblings(siblingSelector);\r\n siblings.forEach(function (sibling) {\r\n sibling.hide();\r\n });\r\n\r\n this.show();\r\n }\r\n});\r\n\r\n/*\r\n * IE workaround for remove\r\n */\r\nif (typeof Element.prototype.remove != \"function\") {\r\n Element.prototype.remove = function() {\r\n if (typeof this.removeNode == \"function\")\r\n this.removeNode(true);\r\n }\r\n}\r\n\r\n\r\n/**\r\n* String buffer implementation by Jon Brito\r\n*/\r\nfunction StringBuffer() {\r\n this.buffer = [];\r\n}\r\n\r\nStringBuffer.prototype.prepend = function(string) {\r\n var newBuffer = [];\r\n newBuffer.push(string);\r\n this.buffer = newBuffer.append(this.buffer);\r\n\r\n newBuffer = null;\r\n\r\n return this;\r\n};\r\n\r\nStringBuffer.prototype.append = function(string) {\r\n this.buffer.push(string);\r\n return this;\r\n};\r\n\r\nStringBuffer.prototype.toString = function(delimiter) {\r\n return this.buffer.join(delimiter || '');\r\n};\r\n\r\n/**\r\n* Workaround for IE changing the page title when a URL has a hash and a flash object is embedded\r\n*\r\n* http://stackoverflow.com/questions/4562423/ie-title-changes-to-afterhash-if-the-page-has-a-url-with-and-has-flash-s\r\n*/\r\n\r\nvar originalTitle = document.title.split('#')[0];\r\n\r\nfunction onPropertyChanged(evt) {\r\n if ((evt.propertyName === \"title\") && (document.title !== originalTitle)) {\r\n setTimeout(function() {\r\n document.title = originalTitle;\r\n }, 1);\r\n }\r\n}\r\n\r\nfunction changeTitle(newTitle) {\r\n originalTitle = newTitle;\r\n document.title = newTitle;\r\n}\r\n\r\nif (document.attachEvent)\r\n document.attachEvent(\"onpropertychange\", onPropertyChanged);\r\nelse if (document.addEventListener)\r\n document.addEventListener(\"propertychange\", onPropertyChanged, false);\r\n\r\n/**\r\n* Convert all keys in a given object to lower case\r\n*/\r\nif (typeof Object.toLowerKeys != \"function\") {\r\n Object.toLowerKeys = function(object) {\r\n var output = {};\r\n\r\n for (var key in object) {\r\n if (!object.hasOwnProperty(key))\r\n continue;\r\n\r\n var newKey = key.toLowerCase();\r\n\r\n output[newKey] = object[key];\r\n }\r\n\r\n return output;\r\n };\r\n}\r\n\r\nif (typeof Object.toCamelKeys != \"function\") {\r\n Object.toCamelKeys = function(object) {\r\n var output = {};\r\n\r\n for (var key in object) {\r\n if (!object.hasOwnProperty(key))\r\n continue;\r\n\r\n var newKey = key[0].toLowerCase() + key.substring(1);\r\n\r\n output[newKey] = object[key];\r\n }\r\n\r\n return output;\r\n };\r\n}\r\n\r\nClass.refactor(Scroller, {\r\n start: function() {\r\n this.listener.addEvents({\r\n mouseover: this.bound.attach\r\n //mouseleave: this.bound.detach\r\n });\r\n return this;\r\n },\r\n\r\n stop: function() {\r\n this.listener.removeEvents({\r\n mouseover: this.bound.attach\r\n //mouseleave: this.bound.detach\r\n });\r\n this.detach();\r\n this.timer = clearInterval(this.timer);\r\n return this;\r\n }\r\n});\r\n\r\n(function() {\r\n var origRefactor = Class.refactor;\r\n\r\n Class.refactor = function(original, refactors) {\r\n if (!original) {\r\n if (window.console && window.console.debug)\r\n window.console.debug(\"WARN: Attempting to refactor a class that doesn't exist - This is normal on portals\");\r\n return;\r\n }\r\n origRefactor(original, refactors);\r\n }\r\n})();\r\n\r\n// Extend drag events\r\nObject.append(Element.NativeEvents, {\r\n dragenter: 2,\r\n dragleave: 2,\r\n dragover: 2,\r\n drop: 2\r\n});\r\n\r\n// Return \"blob\" in typeOf()\r\nif (typeof Blob != \"undefined\")\r\n Blob.prototype.$family = function() { return \"blob\"; }\r\n\r\n// Dummy console for browsers that don't have it (e.g. IE) to avoid errors.\r\n// This should get replaced when the console is opened.\r\nif (!window.console) {\r\n window.console = {\r\n log: $empty,\r\n error: $empty,\r\n warn: $empty,\r\n debug: $empty,\r\n trace: $empty\r\n };\r\n}","Librarian.Notification = new Class({\r\n Implements: [Options],\r\n Binds: [\"close\"],\r\n\r\n options: {\r\n message: \"\",\r\n type: null,\r\n closeAfter: false // Time in ms or false to leave open\r\n },\r\n\r\n messageEl: null,\r\n\r\n initialize: function(options) {\r\n this.setOptions(options);\r\n\r\n this.render();\r\n },\r\n\r\n render: function() {\r\n var message = this.options.message.replaceAll(\"\\n\", \"
\");\r\n\r\n this.messageEl = new Element(\"div\", {\r\n html: message,\r\n \"class\": \"notification-message\"\r\n }).inject(Librarian.Notification.containerEl);\r\n\r\n if (this.options.type) {\r\n this.messageEl.addClass(\"notification-type-\" + this.options.type);\r\n }\r\n\r\n this.messageEl.addOnClick(this.close);\r\n\r\n if (this.options.closeAfter > 0) {\r\n setTimeout(this.close, this.options.closeAfter);\r\n }\r\n },\r\n\r\n close: function() {\r\n this.messageEl.remove();\r\n }\r\n});\r\n\r\nLibrarian.Notification.extend({\r\n containerEl: null,\r\n\r\n closeAll: function(type) {\r\n if (!this.containerEl)\r\n return;\r\n\r\n var selector = \".notification-message\";\r\n if (type)\r\n selector += \".notification-type-\" + type;\r\n\r\n var messageEls = this.containerEl.getElements(selector);\r\n\r\n messageEls.invoke(\"remove\");\r\n }\r\n});\r\n\r\nwindow.addEvent(\"load\", function() {\r\n Librarian.Notification.containerEl = new Element(\"div\", {\r\n \"class\": \"notification-container\"\r\n }).inject(document.body);\r\n});\r\n","if (!Librarian.Utils) {\r\n Librarian.Utils = {\r\n toBoolean: function (value) {\r\n if (value == null)\r\n return false;\r\n return value.toLowerCase() == \"true\";\r\n },\r\n\r\n getHash: function () {\r\n var hash = window.location.hash;\r\n hash = hash.indexOf(\"#/\") > -1 ? hash.substring(2) : hash.substring(1);\r\n\r\n return hash;\r\n },\r\n\r\n canDownload: function (data) {\r\n if (Librarian.Utils.isSlideShow(data))\r\n return false;\r\n\r\n // Don't let DeepLink users download GFs and VPs\r\n if (Librarian.isGuest && ((data.groupid > 0) || (data.presid > 0) || data.groupinfo))\r\n return false;\r\n\r\n var ext = Librarian.Utils.getExtensionFromData(data);\r\n return !Librarian.download.excludeTypes.contains(ext);\r\n },\r\n canStream: function (data) {\r\n var ext = Librarian.Utils.getExtensionFromData(data, true);\r\n return (Librarian.preview.allowVideoStreaming && Librarian.extensions.isStreamableVideo(ext)) ||\r\n (Librarian.preview.allowAudioStreaming && Librarian.extensions.isStreamableAudio(ext));\r\n },\r\n createLinkFromString: function (string) {\r\n var exp = /\\(?\\b(http|https):\\/\\/[-A-Za-z0-9+&@#\\/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#\\/%=~_()|]/ig;\r\n\r\n // $& uses the whole match from the regular expression. $1 would just return http or https\r\n return string.replace(exp, '$&');\r\n },\r\n getArrayFromCSV: function (text, skip, delim) {\r\n if ((typeof delim == \"undefined\") || (delim == null))\r\n delim = \"\\t\";\r\n\r\n var values = Librarian.Utils.getArrayFromText(text, skip);\r\n\r\n // Split each value by tabs\r\n for (var i = values.length; i--;) {\r\n // Remove empty strings\r\n if (values[i].trim().length == 0) {\r\n values.remove(i);\r\n continue;\r\n }\r\n\r\n values[i] = values[i].split(new RegExp(\"[\" + delim + \"]\", \"g\"));\r\n }\r\n\r\n return values;\r\n },\r\n getArrayFromFile: function (text, skip) {\r\n return Librarian.Utils.getArrayFromText(text, skip);\r\n },\r\n getObjectromFile: function (text) {\r\n var data = [];\r\n\r\n var selection = Librarian.Utils.getArrayFromFile(text, 1);\r\n var headers = (text.match(/[^\\r\\n]+/)[0].split(/[\\t]/g) || []).map(function (datum) {\r\n return datum.trim();\r\n });\r\n\r\n for (var i = 0, len = selection.length; i < len; i++) {\r\n // Remove empty strings\r\n if (selection[i].trim().length == 0) {\r\n selection.remove(i);\r\n continue;\r\n }\r\n\r\n var columns = selection[i].split(/[\\t]/g);\r\n\r\n var info = {};\r\n Array.each(columns, function (col, index) {\r\n var propName = headers[index];\r\n\r\n info[propName] = col.trim();\r\n });\r\n\r\n data.push(info);\r\n }\r\n\r\n return data;\r\n },\r\n getArrayFromText: function (text, skip) {\r\n // Carriage return and line feed\r\n var cr = /\\\\r/g,\r\n lf = /\\\\n/g;\r\n\r\n var lines = (text || '').split(/\\r?\\n/);\r\n\r\n // Removed escaped carriage return and new line\r\n for (var len = lines.length; len--;) {\r\n lines[len] = lines[len].replace(cr, \"\\r\");\r\n lines[len] = lines[len].replace(lf, \"\\n\");\r\n }\r\n\r\n if ((typeof skip == \"number\") && (skip > 0)) {\r\n return lines.slice(skip);\r\n }\r\n\r\n return lines;\r\n },\r\n error: function(message, closeAfter) {\r\n if (closeAfter == null)\r\n closeAfter = 5000;\r\n\r\n return Librarian.Utils.showNotification(message, \"error\", closeAfter);\r\n },\r\n notification: function(message, closeAfter) {\r\n if (closeAfter == null)\r\n closeAfter = 3000;\r\n\r\n return Librarian.Utils.showNotification(message, \"notification\", closeAfter);\r\n },\r\n showNotification: function(message, type, closeAfter) {\r\n var notification = new Librarian.Notification({\r\n message: message,\r\n type: type,\r\n closeAfter: closeAfter\r\n });\r\n\r\n return notification;\r\n },\r\n closeNotifications: function(type) {\r\n Librarian.Notification.closeAll(type);\r\n },\r\n showCartNotification: function (data, type, success) {\r\n if (!(Librarian.features.fastlane.load && Librarian.FastLane.isEnabled)) {\r\n if (Librarian.cart.showDetailedMessages) {\r\n var itemType = Librarian.Utils.getItemTypeString(data);\r\n\r\n if (type == Librarian.cartNotificationTypes.removed) {\r\n if (success) {\r\n Librarian.Utils.notification(Librarian.Lang.getArgString(\"cart_removed_type\", [itemType]), Librarian.cart.notificationTime);\r\n } else {\r\n Librarian.Utils.notification(Librarian.Lang.getArgString(\"cart_remove_failed\", [itemType]), Librarian.cart.notificationTime);\r\n }\r\n } else if (success) {\r\n Librarian.Utils.notification(Librarian.Lang.getArgString(\"cart_added\", [itemType]), Librarian.cart.notificationTime);\r\n }\r\n }\r\n else {\r\n Librarian.Utils.notification(Librarian.Lang.getString(\"cart_updated\"));\r\n }\r\n }\r\n },\r\n openSendWindow: function (data, options) {\r\n if (!Librarian.event.canShare) {\r\n return null;\r\n }\r\n\r\n if (!options)\r\n options = {};\r\n\r\n var win = new Librarian.EventSendWindow(options, data);\r\n win.show();\r\n\r\n return win;\r\n },\r\n openCampaignWindow: function (options) {\r\n if (!options.campaignInfo)\r\n throw \"No campaign info\";\r\n\r\n if (options.campaignInfo.isdraft) {\r\n var confirm = new Librarian.ConfirmWindow({\r\n question: Librarian.Lang.getString(\"eventgroup_send_draft?\")\r\n });\r\n\r\n confirm.onFirstButtonClicked = function () {\r\n new Librarian.CampaignWindow(options);\r\n }.bind(this);\r\n }\r\n else\r\n new Librarian.CampaignWindow(options);\r\n },\r\n openURLFile: function (data) {\r\n Librarian.Utils.getSlideText(data, function (json) {\r\n if (json) {\r\n window.open(json.Text.trim(), \"_blank\" + new Date().getTime());\r\n\r\n var logType = Librarian.activityLogType.preview;\r\n\r\n var fileId = data.fileid,\r\n fileName = encodeURIComponent(data.filename || data.name),\r\n url = Librarian.path.getLogUrl(\"logact\") + \"&cntid=\" + fileId + \"&cnttype=1&name=\" + fileName + \"&logtype=\" + logType;\r\n\r\n new Librarian.Request({\r\n url: url,\r\n async: true\r\n }).send();\r\n }\r\n });\r\n },\r\n openUploader: function (callback) {\r\n function doOpen() {\r\n if (Librarian.features.clouduploader.load) {\r\n var cloudUploadWindow = new Librarian.CloudUploadWindow();\r\n\r\n cloudUploadWindow.show();\r\n }\r\n else if (Librarian.features.html5uploadwindow.load && Librarian.Utils.hasHtml5UploadSupport()) {\r\n var html5UploadWindow = new Librarian.Html5UploadWindow({\r\n complete: function (files) {\r\n if (typeof callback == \"function\")\r\n callback(files);\r\n }\r\n });\r\n\r\n html5UploadWindow.show();\r\n }\r\n }\r\n\r\n if (Librarian.upload.disclaimer != null) {\r\n var confirm = new Librarian.ConfirmWindow({\r\n id: \"UploadAgreeWindow\",\r\n height: Librarian.upload.disclaimerHeight,\r\n width: 500,\r\n title: Librarian.Lang.getString(\"disclaimer\"),\r\n firstButtonText: Librarian.Lang.getString(\"agree\"),\r\n secondButtonText: Librarian.Lang.getString(\"cancel\"),\r\n question: Librarian.upload.disclaimer,\r\n resize: false\r\n });\r\n confirm.onFirstButtonClicked = doOpen;\r\n }\r\n else\r\n doOpen();\r\n },\r\n notifyUploadComplete: function (successCount, failureCount) {\r\n var method = \"notification\";\r\n var message = \"\";\r\n\r\n if (successCount > 0)\r\n message += \"
\" + placeholder + \"
\";\r\n\r\n editor.selection.moveToBookmark(position);\r\n editor.insertContent(html);\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n var options = buttons[button];\r\n if (options)\r\n editor.ui.registry.addButton(button, options);\r\n },\r\n getLibrarySetting: function (name, onSuccess, onFailure) {\r\n if (typeof onSuccess != \"function\")\r\n return;\r\n if (!name)\r\n return;\r\n if (typeof name == \"string\")\r\n name = [name];\r\n var count = name.length,\r\n settings = {};\r\n for (var i = name.length; i--;) {\r\n (function (name) {\r\n var request = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getsettval\") + \"&name=\" + name + \"&out=ujson\",\r\n onSuccess: function (value) {\r\n var parsedValue;\r\n try {\r\n parsedValue = parseInt(value);\r\n if (isNaN(parsedValue)) {\r\n parsedValue = value;\r\n\r\n if (parsedValue.toLowerCase() == \"true\")\r\n parsedValue = true;\r\n else if (parsedValue.toLowerCase() == \"false\")\r\n parsedValue = false;\r\n }\r\n }\r\n catch (e) {\r\n parsedValue = value;\r\n }\r\n settings[name] = parsedValue;\r\n if (!--count)\r\n onSuccess(settings);\r\n },\r\n onFailure: function(error) {\r\n if (!--count) {\r\n if (Object.keys(settings).length != 0)\r\n onSuccess(settings);\r\n }\r\n\r\n Librarian.Utils.onFailure(error);\r\n if (typeof onFailure == \"function\")\r\n onFailure(name);\r\n }\r\n });\r\n request.send();\r\n })(name[i]);\r\n }\r\n },\r\n getUserGroupInfo: function (groupName, includeMembers, onSuccess, onFailure) {\r\n var request = new Request.JSON({\r\n method: \"get\",\r\n url: Librarian.path.getMethodUrl(\"getugi\") + \"&out=cjson&members=\" + (!!includeMembers ? '1' : '0') + \"&name=\" + encodeURIComponent(groupName),\r\n onSuccess: onSuccess,\r\n onFailure: onFailure || Librarian.Utils.onFailure\r\n });\r\n request.send();\r\n\r\n return request;\r\n },\r\n setupSDDMMenu: function(options, container) {\r\n var menuEl = new Element(\"li\", options.menuProperties);\r\n\r\n var linkEl = new Element(\"a\", options.linkProperties).injectInside(menuEl);\r\n\r\n if (options.linkIconClass)\r\n var iconEl = new Element(\"span\", { \"class\": options.linkIconClass }).injectInside(linkEl);\r\n\r\n if (options.linkText)\r\n var textEl = new Element(\"span\", { \"text\": options.linkText }).injectInside(linkEl);\r\n\r\n var dropdownEl = new Element(\"div\", options.dropdownProperties).injectInside(menuEl);\r\n\r\n Librarian.Utils.populateSDDMDropdown(dropdownEl, options.dropdownItems);\r\n Librarian.Utils.bindSDDMMenu(linkEl, dropdownEl);\r\n\r\n var containerEl = $(container);\r\n if (containerEl)\r\n menuEl.injectInside(containerEl);\r\n\r\n return menuEl;\r\n },\r\n populateSDDMDropdown: function(dropdownEl, dropdownItems) {\r\n dropdownItems.forEach(function(item) {\r\n var itemEl = new Element(\"a\", item.properties).injectInside(dropdownEl);\r\n\r\n if (typeof item.onClick == \"function\")\r\n itemEl.addOnClick(item.onClick);\r\n });\r\n },\r\n bindSDDMMenus: function (items) {\r\n if (!items)\r\n return;\r\n for (var i = items.length; i--;) {\r\n var parentEl = $(items[i].parent),\r\n menuEl = $(items[i].menu),\r\n onClick = items[i].onClick;\r\n Librarian.Utils.bindSDDMMenu(parentEl, menuEl, onClick);\r\n }\r\n },\r\n bindSDDMMenu: function (parentEl, menuEl, onClick) {\r\n if (parentEl && menuEl) {\r\n var clickFn = Librarian.isSurface() ? mopen.partial(menuEl, parentEl) : onClick;\r\n\r\n parentEl.addEvents({\r\n click: clickFn,\r\n mouseover: mopen.partial(menuEl, parentEl),\r\n mouseout: mclosetime,\r\n blur: mclosetime,\r\n });\r\n\r\n menuEl.addEvents({\r\n mouseover: mcancelclosetime,\r\n mouseout: mclosetime,\r\n blur: mclosetime,\r\n click: mclose\r\n });\r\n }\r\n },\r\n getFlaggingLocation: function (location) {\r\n switch (location) {\r\n case 0:\r\n return \"top-left\";\r\n case 1:\r\n return \"top-right\";\r\n case 2:\r\n return \"bottom-right\";\r\n case 3:\r\n default:\r\n return \"bottom-left\";\r\n }\r\n },\r\n getFlaggingClasses: function(data) {\r\n var mapping = Librarian.flagging.mapping;\r\n\r\n if (!Librarian.flagging.enabled || !data || !mapping)\r\n return [];\r\n\r\n // Backwards compatibility with name/value settings\r\n if (typeOf(mapping) != \"array\") {\r\n mapping = Object.toArray(mapping, function(value, name) {\r\n return {\r\n metaName: name,\r\n className: value,\r\n }\r\n });\r\n }\r\n\r\n var classes = [];\r\n\r\n mapping.forEach(function(flag) {\r\n var isFlagSet = flag.customFunction || Librarian.Utils.doesFlaggingMetaMatch;\r\n if (isFlagSet(data, flag)) {\r\n classes.push(flag.className);\r\n }\r\n });\r\n\r\n return classes;\r\n },\r\n doesFlaggingMetaMatch: function(data, flag) {\r\n if (data.contenttype == Librarian.contentType.category && !Librarian.flagging.showOnCategory)\r\n return false;\r\n\r\n var metaName = flag.metaName;\r\n var metaValue = (flag.metaValue || \"true\").toLowerCase();\r\n\r\n var value = Librarian.Utils.getField(data, metaName);\r\n if (value == null)\r\n return false;\r\n\r\n var values = value.toString().toLowerCase().split(';');\r\n\r\n return values.contains(metaValue);\r\n },\r\n getField: function(data, fieldName, defaultValue) {\r\n if (!data)\r\n return defaultValue;\r\n\r\n var fields = data.extrafields || data.attributes;\r\n if (!fields)\r\n return defaultValue;\r\n\r\n // Also look for field with no spaces (e.g. from V_SearchFiles)\r\n var fieldNameNoSpaces = fieldName.replaceAll(\" \", \"\");\r\n\r\n for (var key in fields) {\r\n if (!fields.hasOwnProperty(key))\r\n continue;\r\n\r\n if (key.equalsIgnoreCase(fieldName) || key.equalsIgnoreCase(fieldNameNoSpaces))\r\n return fields[key];\r\n }\r\n\r\n return defaultValue;\r\n },\r\n getHashByName: function (name) {\r\n if (!name) {\r\n return null;\r\n }\r\n\r\n var data = this.getHash().parseQueryString() || {};\r\n\r\n return data[name];\r\n },\r\n openLibraryTreePanel: function () {\r\n $(\"sideColumn\").setStyle(\"display\", \"block\");\r\n $(\"sideColumn_handle_icon\").setStyle(\"display\", \"block\");\r\n\r\n if (sideColumn.isCollapsed) {\r\n if (sideColumn.handleIconEl) { sideColumn.handleIconEl.click(); }\r\n else { sideColumn.columnToggle(); }\r\n }\r\n },\r\n inIframe: function () {\r\n try {\r\n return window.self !== window.top;\r\n } catch (e) {\r\n return true;\r\n }\r\n },\r\n getFormData: function (query) {\r\n var vars = query.split(/[&;]/),\r\n object = {};\r\n\r\n if (!vars.length) return object;\r\n\r\n vars.each(function (val) {\r\n var kv = val.split('='),\r\n value = decodeURIComponent(kv[1]).trim(),\r\n keys = decodeURIComponent(kv[0]).replace(/\\[\\]/g, '').match(/([^\\]\\[]+|(\\B)(?=\\]))/g),\r\n obj = object;\r\n\r\n if (!keys) return;\r\n keys.each(function (key, i) {\r\n var current = obj[key];\r\n\r\n if (i < keys.length - 1) { obj = obj[key] = current || {}; }\r\n else if (typeOf(current) == 'array') current.push(value);\r\n else obj[key] = current != null ? [current, value] : value;\r\n });\r\n });\r\n\r\n return object;\r\n },\r\n getQueryString: function (params) {\r\n if (!params)\r\n return \"\";\r\n\r\n if (typeOf(params) == \"array\")\r\n params = params.join(\"&\");\r\n else if (typeOf(params) == \"object\")\r\n params = Object.toQueryString(params);\r\n\r\n return params.toString();\r\n },\r\n textToHtml: function(text) {\r\n var lines = text.split(\"\\n\");\r\n\r\n return lines.map(function(line) {\r\n return Librarian.Utils.escapeHtml(line);\r\n }).join(\"