Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
firefox / usr / lib / firefox / browser / features / screenshots@mozilla.org.xpi
Size: Mime:
PK
!<ª3Dµ”&”&¤C0bootstrap.jsPK
!<2xim%%¤Winstall.rdfPK
!<è9DZ'¤OZwebextension/_locales/ach/messages.jsonPK
!<¸ª„ÐÐ&¤°jwebextension/_locales/ar/messages.jsonPK
!<ÿÈ		'¤Ąwebextension/_locales/ast/messages.jsonPK
!<¢UÈCC&¤Œwebextension/_locales/az/messages.jsonPK
!<1s¾o[[&¤™¤webextension/_locales/be/messages.jsonPK
!<•!ä"ÌÌ&¤8Ãwebextension/_locales/bg/messages.jsonPK
!<„?ƒëÓ$Ó$)¤Háwebextension/_locales/bn_BD/messages.jsonPK
!<ã@å11&¤bwebextension/_locales/br/messages.jsonPK
!<!p{{&¤×webextension/_locales/bs/messages.jsonPK
!<A¤Ÿxx&¤–4webextension/_locales/ca/messages.jsonPK
!<}§²ˋ‹'¤RLwebextension/_locales/cak/messages.jsonPK
!<±^îö??'¤"dwebextension/_locales/crh/messages.jsonPK
!<Í LL&¤¦hwebextension/_locales/cs/messages.jsonPK
!<íD—iii&¤6€webextension/_locales/cy/messages.jsonPK
!<cÞo¨&¤ã–webextension/_locales/da/messages.jsonPK
!<¦é	ǭ­&¤F®webextension/_locales/de/messages.jsonPK
!<f\ì`ÚÚ'¤7Çwebextension/_locales/dsb/messages.jsonPK
!<êMë LL&¤Vßwebextension/_locales/el/messages.jsonPK
!<R¾Òûû)¤æûwebextension/_locales/en_GB/messages.jsonPK
!<¬7W££)¤(webextension/_locales/en_US/messages.jsonPK
!<Êîš
&¤'webextension/_locales/eo/messages.jsonPK
!<K¹(‹ÔÔ)¤æ=webextension/_locales/es_AR/messages.jsonPK
!<|©FƒZZ)¤Uwebextension/_locales/es_CL/messages.jsonPK
!<\V Q**)¤¢lwebextension/_locales/es_ES/messages.jsonPK
!<5s¤²ää)¤„webextension/_locales/es_MX/messages.jsonPK
!<&ææ&¤>œwebextension/_locales/et/messages.jsonPK
!<ºžÉùüü&¤h²webextension/_locales/eu/messages.jsonPK
!<ÅQUˆˆ&¤¨Äwebextension/_locales/fa/messages.jsonPK
!<"ÜǑDD&¤tâwebextension/_locales/ff/messages.jsonPK
!<Ð=pÒ""&¤üæwebextension/_locales/fi/messages.jsonPK
!<Òü--&¤býwebextension/_locales/fr/messages.jsonPK
!<(f–)¤Ówebextension/_locales/fy_NL/messages.jsonPK
!<o{•ýuu)¤".webextension/_locales/ga_IE/messages.jsonPK
!<ÎPƒss&¤Þ?webextension/_locales/gd/messages.jsonPK
!<BïåVV&¤•Ywebextension/_locales/gl/messages.jsonPK
!<éڦ››&¤/`webextension/_locales/gn/messages.jsonPK
!<øʁ$$)¤wwebextension/_locales/gu_IN/messages.jsonPK
!<ú-æ³³&¤c›webextension/_locales/he/messages.jsonPK
!<ó“‡4"4")¤Zµwebextension/_locales/hi_IN/messages.jsonPK
!<"þó²ÛÛ&¤Õ×webextension/_locales/hr/messages.jsonPK
!<Âg:º'¤ôéwebextension/_locales/hsb/messages.jsonPK
!<;þHÈ\\&¤Jwebextension/_locales/hu/messages.jsonPK
!<|'©©)¤êwebextension/_locales/hy_AM/messages.jsonPK
!<|ÅnuTT&¤Ú1webextension/_locales/ia/messages.jsonPK
!<åD‹®®&¤rIwebextension/_locales/id/messages.jsonPK
!<ոÂ6êê&¤d`webextension/_locales/it/messages.jsonPK
!<ëötÍ66&¤’xwebextension/_locales/ja/messages.jsonPK
!<¿Þ,tÊ&Ê&&¤”webextension/_locales/ka/messages.jsonPK
!<¼j똘'¤»webextension/_locales/kab/messages.jsonPK
!<èLR…ØØ&¤÷Ñwebextension/_locales/kk/messages.jsonPK
!<حîJVV&¤ñwebextension/_locales/km/messages.jsonPK
!<,n°°&¤­ñwebextension/_locales/kn/messages.jsonPK
!<9úß??&¤¡ówebextension/_locales/ko/messages.jsonPK
!<J®×1??'¤$webextension/_locales/lij/messages.jsonPK
!<~‚uÝØØ&¤¨webextension/_locales/lo/messages.jsonPK
!<ªf 9´´&¤Ä9webextension/_locales/lt/messages.jsonPK
!<îZö)†!†!'¤¼Qwebextension/_locales/mai/messages.jsonPK
!<îj!<gg&¤‡swebextension/_locales/mk/messages.jsonPK
!<ÿAD``&¤2’webextension/_locales/ml/messages.jsonPK
!<7剔ÏÏ&¤֫webextension/_locales/mn/messages.jsonPK
!<p)ÙÙ&¤é¬webextension/_locales/mr/messages.jsonPK
!<^š§§&¤Éwebextension/_locales/ms/messages.jsonPK
!<‘Ÿ´ä

&¤ñßwebextension/_locales/my/messages.jsonPK
!<Œ˓uu)¤Aíwebextension/_locales/nb_NO/messages.jsonPK
!<€eÑåêê)¤ýwebextension/_locales/ne_NP/messages.jsonPK
!<³Ggg&¤.webextension/_locales/nl/messages.jsonPK
!<î“ÉGG)¤Ùwebextension/_locales/nn_NO/messages.jsonPK
!<¶ÚþØÍÍ)¤g5webextension/_locales/pa_IN/messages.jsonPK
!<0Ü}f’’&¤{Dwebextension/_locales/pl/messages.jsonPK
!<·5ë¤(()¤Q[webextension/_locales/pt_BR/messages.jsonPK
!<t×
¤¤)¤Àrwebextension/_locales/pt_PT/messages.jsonPK
!<ϥ·99&¤«Šwebextension/_locales/rm/messages.jsonPK
!<Šê‡‡&¤(¢webextension/_locales/ro/messages.jsonPK
!<µà@Jll&¤ó¹webextension/_locales/ru/messages.jsonPK
!<ÒÈãÏ÷÷&¤£Øwebextension/_locales/sk/messages.jsonPK
!<XOÀP&¤Þðwebextension/_locales/sl/messages.jsonPK
!<¹îZvv&¤£webextension/_locales/sq/messages.jsonPK
!<³××ç§&¤]webextension/_locales/sr/messages.jsonPK
!<ò8’­cc)¤H<webextension/_locales/sv_SE/messages.jsonPK
!<QWãºì!ì!&¤òRwebextension/_locales/ta/messages.jsonPK
!<©˜kYY&¤"uwebextension/_locales/te/messages.jsonPK
!<ÃِSòò&¤¿…webextension/_locales/th/messages.jsonPK
!<º±ñESS&¤õ£webextension/_locales/tl/messages.jsonPK
!<)¡g9ØØ&¤Œ³webextension/_locales/tr/messages.jsonPK
!<ä<pp&¤¨Ëwebextension/_locales/uk/messages.jsonPK
!<î¿##&¤\êwebextension/_locales/ur/messages.jsonPK
!<)±S{

&¤Ãþwebextension/_locales/uz/messages.jsonPK
!<‘„wïää&¤”	webextension/_locales/vi/messages.jsonPK
!<Y»ê{úú)¤¼#webextension/_locales/zh_CN/messages.jsonPK
!<ÛáåVV)¤ý8webextension/_locales/zh_TW/messages.jsonPK
!<@i ߪª%¤šNwebextension/assertIsBlankDocument.jsPK
!<Y9™™¤‡Pwebextension/assertIsTrusted.jsPK
!<IK¶'¶'$¤]Swebextension/background/analytics.jsPK
!<|ôñMnn¤U{webextension/background/auth.jsPK
!<øWҠf
f
(¤”webextension/background/communication.jsPK
!<õYµÒÝÝ%¤¬žwebextension/background/deviceInfo.jsPK
!<„à_ž++¤̢webextension/background/main.jsPK
!<tzϋ‹)¤ŠÎwebextension/background/selectorLoader.jsPK
!<	6©;šš$¤\âwebextension/background/senderror.jsPK
!<0°D8DD*¤8ówebextension/background/startBackground.jsPK
!<),sX88#¤Ä	webextension/background/takeshot.jsPK
!<á¿¿¤=!	webextension/blank.htmlPK
!<{ڌç礁€!	webextension/blobConverters.jsPK
!<5ðü̂‚#¤£&	webextension/build/buildSettings.jsPK
!<h™­Þ6c6c(¤f(	webextension/build/inlineSelectionCss.jsPK
!<½WÊíí#¤â‹	webextension/build/onboardingCss.jsPK
!<œ¬Á”
”
$¤¨	webextension/build/onboardingHtml.jsPK
!<^Eh
Ø
ؤæµ	webextension/build/raven.jsPK
!<á{VI¿¿¤)Žwebextension/build/selection.jsPK
!<œ2¢S¢S¤%—webextension/build/shot.jsPK
!<á8?¢¢(¤ÿêwebextension/build/thumbnailGenerator.jsPK
!<4<۷ùù¤çwebextension/catcher.jsPK
!<RۭjÕÕ¤	webextension/clipboard.jsPK
!<s¡`00¤!webextension/domainFromUrl.jsPK
!<­6Û%¤Œwebextension/icons/back-highlight.svgPK
!<0º¸¤Þwebextension/icons/back.svgPK
!<SÇ:(((¤&webextension/icons/cancel.svgPK
!<û26GYY¤‰webextension/icons/cloud.svgPK
!<ñ9~ŸŸ*¤webextension/icons/copied-notification.svgPK
!<©? zz¤webextension/icons/copy.svgPK
!<*—çð𤁶webextension/icons/done.svgPK
!<Èf&¿ZZ¤ßwebextension/icons/download.svgPK
!<ðҫ

¤v webextension/icons/help-16.svgPK
!<h.ÇSS+¤¼"webextension/icons/icon-highlight-32-v2.svgPK
!<Wúè‘‘¤X%webextension/icons/icon-v2.svgPK
!<à9Ãéé5¤%(webextension/icons/icon-welcome-face-without-eyes.svgPK
!<Í4Ä^PP$¤a,webextension/icons/menu-fullpage.svgPK
!<$v°¢YY(¤ó0webextension/icons/menu-myshot-white.svgPK
!< PúHH"¤’2webextension/icons/menu-myshot.svgPK
!<Óöiðÿÿ#¤4webextension/icons/menu-visible.svgPK
!<¯’èÌkÌk#¤Z7webextension/icons/onboarding-1.pngPK
!<0D¼° ° #¤g£webextension/icons/onboarding-2.pngPK
!<Ý6{v{v#¤XD
webextension/icons/onboarding-3.pngPK
!<Ô
¹¢†¢†#¤»
webextension/icons/onboarding-4.pngPK
!<šO¦ÿP<P<#¤÷Awebextension/icons/onboarding-5.pngPK
!<Ҭ²àªª¤ˆ~webextension/log.jsPK
!<ÏçÃÃNN¤c‚webextension/makeUuid.jsPK
!<62z!UU¤ç„webextension/manifest.jsonPK
!<Ğ=B2
2
#¤t‹webextension/onboarding/slides.htmlPK
!<ÿ®š§hh!¤ç˜webextension/onboarding/slides.jsPK
!<F.¢	€€¤Žµwebextension/randomString.jsPK
!<¸>ȃƒ'¤H·webextension/selector/callBackground.jsPK
!<0Ԗ,B
B
)¤»webextension/selector/documentMetadata.jsPK
!<ɌŒLí"í" ¤™Åwebextension/selector/shooter.jsPK
!<"»ِ‚‚¤Äèwebextension/selector/ui.jsPK
!<%BWÌpÌp"¤kwebextension/selector/uicontrol.jsPK
!<®ükv¤¤¤™Üwebextension/selector/util.jsPK
!<Ñþ	•««¤xèwebextension/sitehelper.jsPK––)0PK
!<ª3Dµ”&”&bootstrap.js/* globals ADDON_DISABLE Services CustomizableUI LegacyExtensionsUtils AppConstants PageActions */
const ADDON_ID = "screenshots@mozilla.org";
const TELEMETRY_ENABLED_PREF = "datareporting.healthreport.uploadEnabled";
const PREF_BRANCH = "extensions.screenshots.";
const USER_DISABLE_PREF = "extensions.screenshots.disabled";
const UPLOAD_DISABLED_PREF = "extensions.screenshots.upload-disabled";
const HISTORY_ENABLED_PREF = "places.history.enabled";

ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
ChromeUtils.defineModuleGetter(this, "AddonManager",
                               "resource://gre/modules/AddonManager.jsm");
ChromeUtils.defineModuleGetter(this, "AppConstants",
                               "resource://gre/modules/AppConstants.jsm");
ChromeUtils.defineModuleGetter(this, "CustomizableUI",
                               "resource:///modules/CustomizableUI.jsm");
ChromeUtils.defineModuleGetter(this, "LegacyExtensionsUtils",
                               "resource://gre/modules/LegacyExtensionsUtils.jsm");
ChromeUtils.defineModuleGetter(this, "PageActions",
                               "resource:///modules/PageActions.jsm");
ChromeUtils.defineModuleGetter(this, "Services",
                               "resource://gre/modules/Services.jsm");

let addonResourceURI;
let appStartupDone;
let appStartupPromise = new Promise((resolve, reject) => {
  appStartupDone = resolve;
});

const prefs = Services.prefs;
const prefObserver = {
  register() {
    prefs.addObserver(PREF_BRANCH, this, false); // eslint-disable-line mozilla/no-useless-parameters
  },

  unregister() {
    prefs.removeObserver(PREF_BRANCH, this, false); // eslint-disable-line mozilla/no-useless-parameters
  },

  observe(aSubject, aTopic, aData) {
    // aSubject is the nsIPrefBranch we're observing (after appropriate QI)
    // aData is the name of the pref that's been changed (relative to aSubject)
    if (aData === USER_DISABLE_PREF) {
      // eslint-disable-next-line promise/catch-or-return
      appStartupPromise = appStartupPromise.then(handleStartup);
    }
  }
};


const appStartupObserver = {
  register() {
    Services.obs.addObserver(this, "sessionstore-windows-restored", false); // eslint-disable-line mozilla/no-useless-parameters
  },

  unregister() {
    Services.obs.removeObserver(this, "sessionstore-windows-restored", false); // eslint-disable-line mozilla/no-useless-parameters
  },

  observe() {
    appStartupDone();
    this.unregister();
  }
};

const LibraryButton = {
  ITEM_ID: "appMenu-library-screenshots",

  init(webExtension) {
    this._initialized = true;
    const permissionPages = [...webExtension.extension.permissions].filter(p => (/^https?:\/\//i).test(p));
    if (permissionPages.length > 1) {
      Cu.reportError(new Error("Should not have more than 1 permission page, but got: " + JSON.stringify(permissionPages)));
    }
    this.PAGE_TO_OPEN = permissionPages.length === 1 ? permissionPages[0].replace(/\*$/, "") : "https://screenshots.firefox.com/";
    this.PAGE_TO_OPEN += "shots";
    this.ICON_URL = webExtension.extension.getURL("icons/icon-v2.svg");
    this.LABEL = webExtension.extension.localizeMessage("libraryLabel");
    CustomizableUI.addListener(this);
    for (const win of CustomizableUI.windows) {
      this.onWindowOpened(win);
    }
  },

  uninit() {
    if (!this._initialized) {
      return;
    }
    for (const win of CustomizableUI.windows) {
      const item = win.document.getElementById(this.ITEM_ID);
      if (item) {
        item.remove();
      }
    }
    CustomizableUI.removeListener(this);
    this._initialized = false;
  },

  onWindowOpened(win) {
    const libraryViewInsertionPoint = win.document.getElementById("appMenu-library-remotetabs-button");
    // If the library view doesn't exist (on non-photon builds, for instance),
    // this will be null, and we bail out early.
    if (!libraryViewInsertionPoint) {
      return;
    }
    const parent = libraryViewInsertionPoint.parentNode;
    const {nextSibling} = libraryViewInsertionPoint;
    const item = win.document.createElement("toolbarbutton");
    item.className = "subviewbutton subviewbutton-iconic";
    item.addEventListener("command", () => win.openWebLinkIn(this.PAGE_TO_OPEN, "tab"));
    item.id = this.ITEM_ID;
    const iconURL = this.ICON_URL;
    item.setAttribute("image", iconURL);
    item.setAttribute("label", this.LABEL);

    parent.insertBefore(item, nextSibling);
  },
};

const APP_STARTUP = 1;
const APP_SHUTDOWN = 2;
let addonData, startupReason;

function startup(data, reason) { // eslint-disable-line no-unused-vars
  addonData = data;
  startupReason = reason;
  if (reason === APP_STARTUP) {
    appStartupObserver.register();
  } else {
    appStartupDone();
  }
  prefObserver.register();
  addonResourceURI = data.resourceURI;
  // eslint-disable-next-line promise/catch-or-return
  appStartupPromise = appStartupPromise.then(handleStartup);
}

function shutdown(data, reason) { // eslint-disable-line no-unused-vars
  prefObserver.unregister();
  const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
    id: ADDON_ID,
    resourceURI: addonResourceURI
  });
  // Immediately exit if Firefox is exiting, #3323
  if (reason === APP_SHUTDOWN) {
    stop(webExtension, reason);
    return;
  }
  // Because the prefObserver is unregistered above, this _should_ terminate the promise chain.
  appStartupPromise = appStartupPromise.then(() => { stop(webExtension, reason); });
}

function install(data, reason) {} // eslint-disable-line no-unused-vars

function uninstall(data, reason) {} // eslint-disable-line no-unused-vars

function getBoolPref(pref) {
  return prefs.getPrefType(pref) && prefs.getBoolPref(pref);
}

function shouldDisable() {
  return getBoolPref(USER_DISABLE_PREF);
}

function handleStartup() {
  const webExtension = LegacyExtensionsUtils.getEmbeddedExtensionFor({
    id: ADDON_ID,
    resourceURI: addonResourceURI
  });

  if (!shouldDisable() && !webExtension.started) {
    start(webExtension);
  } else if (shouldDisable()) {
    stop(webExtension, ADDON_DISABLE);
  }
}

function start(webExtension) {
  return webExtension.startup(startupReason, addonData).then((api) => {
    api.browser.runtime.onMessage.addListener(handleMessage);
    LibraryButton.init(webExtension);
    initPhotonPageAction(api, webExtension);
  }).catch((err) => {
    // The startup() promise will be rejected if the webExtension was
    // already started (a harmless error), or if initializing the
    // WebExtension failed and threw (an important error).
    console.error(err);
    if (err.message !== "This embedded extension has already been started") {
      // TODO: Should we send these errors to Sentry? #2420
    }
  });
}

function stop(webExtension, reason) {
  if (reason !== APP_SHUTDOWN) {
    LibraryButton.uninit();
    if (photonPageAction) {
      photonPageAction.remove();
      photonPageAction = null;
    }
  }
  return Promise.resolve(webExtension.shutdown(reason));
}

function handleMessage(msg, sender, sendReply) {
  if (!msg) {
    return;
  }

  if (msg.funcName === "isTelemetryEnabled") {
    const telemetryEnabled = getBoolPref(TELEMETRY_ENABLED_PREF);
    sendReply({type: "success", value: telemetryEnabled});
  } else if (msg.funcName === "isUploadDisabled") {
    const isESR = AppConstants.MOZ_UPDATE_CHANNEL === "esr";
    const uploadDisabled = getBoolPref(UPLOAD_DISABLED_PREF);
    sendReply({type: "success", value: uploadDisabled || isESR});
  } else if (msg.funcName === "isHistoryEnabled") {
    const historyEnabled = getBoolPref(HISTORY_ENABLED_PREF);
    sendReply({type: "success", value: historyEnabled});
  } else if (msg.funcName === "incrementCount") {
    const allowedScalars = ["download", "upload", "copy"];
    const scalar = msg.args && msg.args[0] && msg.args[0].scalar;
    if (!allowedScalars.includes(scalar)) {
      sendReply({type: "error", name: `incrementCount passed an unrecognized scalar ${scalar}`});
    } else {
      Services.telemetry.scalarAdd(`screenshots.${scalar}`, 1);
      sendReply({type: "success", value: true});
    }
  }
}

let photonPageAction;

// If the current Firefox version supports Photon (57 and later), this sets up
// a Photon page action and removes the UI for the WebExtension browser action.
// Does nothing otherwise.  Ideally, in the future, WebExtension page actions
// and Photon page actions would be one in the same, but they aren't right now.
function initPhotonPageAction(api, webExtension) {
  const id = "screenshots";
  let port = null;

  const {tabManager} = webExtension.extension;

  // Make the page action.
  photonPageAction = PageActions.actionForID(id) || PageActions.addAction(new PageActions.Action({
    id,
    title: "Take a Screenshot",
    iconURL: webExtension.extension.getURL("icons/icon-v2.svg"),
    _insertBeforeActionID: null,
    onCommand(event, buttonNode) {
      if (port) {
        const browserWin = buttonNode.ownerGlobal;
        const tab = tabManager.getWrapper(browserWin.gBrowser.selectedTab);
        port.postMessage({
          type: "click",
          tab: {id: tab.id, url: tab.url}
        });
      }
    },
  }));

  // Establish a port to the WebExtension side.
  api.browser.runtime.onConnect.addListener((listenerPort) => {
    if (listenerPort.name !== "photonPageActionPort") {
      return;
    }
    port = listenerPort;
    port.onMessage.addListener((message) => {
      switch (message.type) {
      case "setProperties":
        if (message.title) {
          photonPageAction.setTitle(message.title);
        }
        if (message.iconPath) {
          photonPageAction.setIconURL(webExtension.extension.getURL(message.iconPath));
        }
        break;
      default:
        console.error("Unrecognized message:", message);
        break;
      }
    });
  });
}
PK
!<2xim%%install.rdf<?xml version="1.0" encoding="UTF-8"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    <em:id>screenshots@mozilla.org</em:id>
    <em:name>Firefox Screenshots</em:name>
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!--Firefox-->
        <em:minVersion>57.0a1</em:minVersion>
        <em:maxVersion>*</em:maxVersion>
      </Description>
    </em:targetApplication>
    <em:type>2</em:type>
    <em:version>33.0.0</em:version>
    <em:bootstrap>true</em:bootstrap>
    <em:homepageURL>https://screenshots.firefox.com/</em:homepageURL>
    <em:multiprocessCompatible>true</em:multiprocessCompatible>
  </Description>
</RDF>
PK
!<è9DZ'webextension/_locales/ach/messages.json{
  "addonDescription": {
    "message": "Mak vidio ma ki ngolo macego cego ki cal me wang kio ki i Kakube ka igwok gi pi tutunu onyo matwal."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Mak cal me wang kio"
  },
  "myShotsLink": {
    "message": "Cal Na"
  },
  "screenshotInstructions": {
    "message": "Ywar onyo dii ii potbuk me yero bute. Dii ESC me juko."
  },
  "saveScreenshotSelectedArea": {
    "message": "Gwoki"
  },
  "saveScreenshotVisibleArea": {
    "message": "Gwok ma nen"
  },
  "saveScreenshotFullPage": {
    "message": "Gwok potbuk weng"
  },
  "cancelScreenshot": {
    "message": "Juki"
  },
  "downloadScreenshot": {
    "message": "Gam"
  },
  "downloadOnlyDetailsESR": {
    "message": "Itye ka tic ki Firefox pi ESR."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ki loko kakube"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ki loko kakube me cal mamegi i bao me coc. Dii $META_KEY$-V me mwono ne.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Loki"
  },
  "imageCroppedWarning": {
    "message": "Ki ngolo cal ma odoko $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Pe tye katic."
  },
  "requestErrorDetails": {
    "message": "Timwa kica! Pe onongo wa twero gwoko cal mamegi. Tim ber item doki lacen."
  },
  "connectionErrorTitle": {
    "message": "Pe watwero kube ki cal me wang kio mamegi."
  },
  "connectionErrorDetails": {
    "message": "Tim ber i rot kakube ni me intanet. Kace itwero kube i intanet, peko mo pi tutuno romo bedo tye i tic me Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Pe onongo wa twero gwoko cal mamegi pien peko mo tye i tic me Firefox Screenshots. Tim ber item doki lacen."
  },
  "unshootablePageErrorTitle": {
    "message": "Pe watwero mako cal me wang kio me potbuk man."
  },
  "unshootablePageErrorDetails": {
    "message": "Man pe obedo Kakube me rwom, pi meno pe watwero mako cal me wang kio ne."
  },
  "selfScreenshotErrorTitle": {
    "message": "Pe itwero mako cal me potbuk pa Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Yer mamegi tidi tutwal"
  },
  "genericErrorTitle": {
    "message": "Woo! Firefox Screenshots opo oo."
  },
  "genericErrorDetails": {
    "message": "Pe wa ngeyo ngo ma otime kombedi. Iromo temo ne doki onyo mako cal pa potbuk mukene?"
  },
  "tourBodyIntro": {
    "message": "Maki, gwoki, ki nywak cal me wang kio labongo weko Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Yoo manyen me gwoko"
  },
  "tourHeaderClickAndDrag": {
    "message": "Mak ngo ma imito keken"
  },
  "tourBodyClickAndDrag": {
    "message": "Dii ka i ywar me mako cal pa but potbuk keken. Itwero bene wot iwiye me wero yer mamegi."
  },
  "tourHeaderFullPage": {
    "message": "Mak dirica onyo Potbuk weng"
  },
  "tourBodyFullPage": {
    "message": "Yer mapeca ma i tung lacuc malo me mako kabedo ma nen i dirica onyo me mako potbuk weng."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kit ma imito"
  },
  "tourBodyDownloadUpload": {
    "message": "Gwok cal mamegi ma ki ngolo ii Kakube pi nywako i yoo ma yot, onyo gamo gi i kompiuta ni. Itwero bene diyo mapeca me Cal Na me nongo cal ma i mako weng."
  },
  "tourSkip": {
    "message": "Kal"
  },
  "tourNext": {
    "message": "Cal malubo"
  },
  "tourPrevious": {
    "message": "Cal mukato"
  },
  "tourDone": {
    "message": "Otum"
  },
  "termsAndPrivacyNotice2": {
    "message": "Tic ki Firefox Screenshots nyuto ni, i yee $TERMSANDPRIVACYNOTICETERMSLINK$ ki $TERMSANDPRIVACYNOTICEPRIVACYLINK$ wa.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Cik"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Ngec me mung"
  }
}PK
!<¸ª„ÐÐ&webextension/_locales/ar/messages.json{
  "addonDescription": {
    "message": "خذ مقاطع و لقطات من الوب و احفظهم مؤقتًا أو دائمًا."
  },
  "addonAuthorsList": {
    "message": "موزيلا <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "خذ لقطة شاشة"
  },
  "myShotsLink": {
    "message": "لقطاتي"
  },
  "screenshotInstructions": {
    "message": "اسحب أو انقر في الصفحة لاختيار منطقة. اضغط ESC للإلغاء."
  },
  "saveScreenshotSelectedArea": {
    "message": "احفظ"
  },
  "saveScreenshotVisibleArea": {
    "message": "احفظ الجزء المرئي"
  },
  "saveScreenshotFullPage": {
    "message": "احفظ كل الصفحة"
  },
  "cancelScreenshot": {
    "message": "ألغِ"
  },
  "downloadScreenshot": {
    "message": "نزّل"
  },
  "downloadOnlyNotice": {
    "message": "أنت حاليًا في وضع ”التنزيل فقط“."
  },
  "downloadOnlyDetails": {
    "message": "تنتقل لقطات فَيرفُكس تلقائيا إلى وضع ”التنزيل فقط“ في الحالات التالية:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "في نافذة تصفح خاص."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "الكعكات من أطراف خارجية غير مفعلة."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "”لا تتذكر التأريخ أبدًا“ مفعّل."
  },
  "downloadOnlyDetailsESR": {
    "message": "تستخدم الإصدارة طويلة الدعم من فَيَرفُكس."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "عُطل الرفع."
  },
  "notificationLinkCopiedTitle": {
    "message": "نُسخ الرابط"
  },
  "notificationLinkCopiedDetails": {
    "message": "نُسِخَ رابط اللقطة إلى الحافظة. اضغط $META_KEY$-V للصقها.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "انسخ"
  },
  "notificationImageCopiedTitle": {
    "message": "نُسخت اللقطة"
  },
  "notificationImageCopiedDetails": {
    "message": "نُسخت اللقطة إلى الحافظة. اضغط $META_KEY$-V للصقها.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "اقتُصّت هذه الصورة لتصبح $PIXELS$بكسل.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "خارج الخدمة."
  },
  "requestErrorDetails": {
    "message": "تعذّر حفظ لقطتك. رجاء أعد المحاولة فيما بعد."
  },
  "connectionErrorTitle": {
    "message": "تعذّر الاتصال بلقطات شاشتك."
  },
  "connectionErrorDetails": {
    "message": "رجاء فحص اتصال الإنترنت. إذا كان باستطاعتك الاتصال بالإنترنت، فربما هناك عطل مؤقت في خدمة «لقطات شاشة فَيَرفُكس»."
  },
  "loginErrorDetails": {
    "message": "تعذّر حفظ لقطتك لعُطل في خدمة «لقطات شاشة فَيَرفُكس». رجاء إعادة المحاولة لاحقًا."
  },
  "unshootablePageErrorTitle": {
    "message": "تعذّر أخذ لقطة شاشة لهذه الصفحة."
  },
  "unshootablePageErrorDetails": {
    "message": "ليست هذه صفحة وِب قياسية، لذا لا يمكنك أخذ لقطة لها."
  },
  "selfScreenshotErrorTitle": {
    "message": "لا يمكننا أخذ لقطة لصفحة من صفحات «لقطات شاشة فَيَرفُكس»!"
  },
  "emptySelectionErrorTitle": {
    "message": "التحديد صغير جدا"
  },
  "privateWindowErrorTitle": {
    "message": "لقطات الشاشة معطّلة في وضع التصفح الخاص"
  },
  "privateWindowErrorDetails": {
    "message": "نأسف على الإزعاج. نعمل على هذه الخاصية للإصدارات اللاحقة."
  },
  "genericErrorTitle": {
    "message": "هناك عطل في «لقطات شاشة فَيَرفُكس»."
  },
  "genericErrorDetails": {
    "message": "لسنا متأكدين ما المشكلة. أتمانع إعادة المحاولة أو أخذ لقطة لصفحة أخرى؟"
  },
  "tourBodyIntro": {
    "message": "خذ لقطات الشاشة و احفظها و شاركها دون مغادرة فَيَرفُكس."
  },
  "tourHeaderPageAction": {
    "message": "طريقة جديدة لحفظ اللقطات بها"
  },
  "tourBodyPageAction": {
    "message": "وسّع قائمة إجراءات الصفحة في شريط العنوان لأخذ لقطة في أي وقت."
  },
  "tourHeaderClickAndDrag": {
    "message": "التقط ما تريده فقط"
  },
  "tourBodyClickAndDrag": {
    "message": "انقر و اسحب لالتقاط جزء معين من الصفحة. يمكنك أيضًا التحويم لإبراز التحديد."
  },
  "tourHeaderFullPage": {
    "message": "التقط النوافذ أو صفحات كاملة"
  },
  "tourBodyFullPage": {
    "message": "اختر الأزرار في أعلى اليمين لالتقاط المنطقة المرئية في النافذة أو الصفحة كلها."
  },
  "tourHeaderDownloadUpload": {
    "message": "كما تريدها"
  },
  "tourBodyDownloadUpload": {
    "message": "احفظ اللقطات التي أخذتها على الوب لمشاركتها بسهولة، أو نزّلها على حاسوبك. يمكنك أيضًل النقر على زر ”لقطاتي“ للعثور على كل اللقطات التي أخذتها."
  },
  "tourSkip": {
    "message": "تخطَّ"
  },
  "tourNext": {
    "message": "الشريحة التالية"
  },
  "tourPrevious": {
    "message": "الشريحة السابقة"
  },
  "tourDone": {
    "message": "تمّ"
  },
  "termsAndPrivacyNotice2": {
    "message": "استخدامك للقطات شاشة فَيَرفُكس يُعد موافقة على $TERMSANDPRIVACYNOTICETERMSLINK$ و $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "الشروط"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "تنويه الخصوصية"
  },
  "libraryLabel": {
    "message": "لقطات الشاشة"
  }
}PK
!<ÿÈ		'webextension/_locales/ast/messages.json{
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Facer una captura"
  },
  "myShotsLink": {
    "message": "Les mios captures"
  },
  "screenshotInstructions": {
    "message": "Arrastra o primi na páxina pa esbillar una rexón. Primi ESC pa encaboxar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar lo visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar la páxina completa"
  },
  "cancelScreenshot": {
    "message": "Encaboxar"
  },
  "downloadScreenshot": {
    "message": "Baxar"
  },
  "notificationLinkCopiedTitle": {
    "message": "Copióse l'enllaz"
  },
  "requestErrorDetails": {
    "message": "¡Perdón, pero nun pudimos guardar la to captura! Volvi tentalo más sero, por favor."
  },
  "unshootablePageErrorTitle": {
    "message": "Nun pue capturase esta páxina."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta páxina web nun ye estándar, asina que nun pues capturala."
  },
  "emptySelectionErrorTitle": {
    "message": "La esbilla ye perpequeña"
  },
  "privateWindowErrorTitle": {
    "message": "Les captures de pantalla tán desactivaes nel mou Restolar en privao"
  },
  "privateWindowErrorDetails": {
    "message": "Perdón poles molesties. Tamos trabayando nesta carauterística pa llanzamientos futuros."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captura lo que quies"
  },
  "tourHeaderDownloadUpload": {
    "message": "Como te preste"
  },
  "tourSkip": {
    "message": "SALTAR"
  },
  "tourDone": {
    "message": "Fecho"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "libraryLabel": {
    "message": "Captures de pantalla"
  }
}PK
!<¢UÈCC&webextension/_locales/az/messages.json{
  "addonDescription": {
    "message": "Web səhifələrin ekran görüntülərini alın, müvəqqəti və ya qalıcı saxlayın."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ekran görüntüsü al"
  },
  "myShotsLink": {
    "message": "Ekran Görüntülərim"
  },
  "screenshotInstructions": {
    "message": "Səhifədə hər hansı bir yerdə sürüşdürərək və ya basaraq ərazini seçin. Ləğv etmək üçün ESC basın."
  },
  "saveScreenshotSelectedArea": {
    "message": "Saxla"
  },
  "saveScreenshotVisibleArea": {
    "message": "Görünən ərazini saxla"
  },
  "saveScreenshotFullPage": {
    "message": "Tam səhifəni saxla"
  },
  "cancelScreenshot": {
    "message": "Ləğv et"
  },
  "downloadScreenshot": {
    "message": "Endir"
  },
  "downloadOnlyNotice": {
    "message": "Hazırda Ancaq-Endirmə rejimindəsiniz."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots bu vəziyyətlərdə avtomatik olaraq Ancaq-Endirmə rejiminə keçir:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Məxfi Səyahət pəncərəsində."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Üçüncü tərəf çərəzlər söndürülüb."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Tarixçəni heç vaxt xatırlama” aktivdir."
  },
  "downloadOnlyDetailsESR": {
    "message": "Firefox ESR işlədirsiniz."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Yükləmələr söndürülüb."
  },
  "notificationLinkCopiedTitle": {
    "message": "Keçid Köçürüldü"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ekran görüntüsünün keçidi buferə köçürüldü. Yapışdırmaq üçün $META_KEY$-V basın.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Köçür"
  },
  "notificationImageCopiedTitle": {
    "message": "Görüntü Köçürüldü"
  },
  "notificationImageCopiedDetails": {
    "message": "Görüntünüz mübadilə buferinə köçürüldü. Yapışdırmaq üçün $META_KEY$-V basın.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Şəkil $PIXELS$px ölçülərinə kəsildi.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Xəta baş verdi."
  },
  "requestErrorDetails": {
    "message": "Üzr istəyirik! Ekran görüntünüzü saxlaya bilmədik. Lütfən biraz sonra təkrar yoxlayın."
  },
  "connectionErrorTitle": {
    "message": "Ekran görüntülərinizə qoşula bilmirik."
  },
  "connectionErrorDetails": {
    "message": "Lütfən internet bağlantınızı yoxlayın. Əgər internetdə problem yoxdursa Firefox Screenshots xidmətində müvəqqəti xəta ola bilər."
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots xidmətindəki müvəqqəti xəta üzündən ekran görüntünüzü saxlaya bilmədik. Lütfən biraz sonra təkrar yoxlayın."
  },
  "unshootablePageErrorTitle": {
    "message": "Bu səhifənin ekran görüntüsü alına bilmir."
  },
  "unshootablePageErrorDetails": {
    "message": "Bu normal Web səhifəsi deyil, bu səbəbdən ekran görüntüsünü almaq mümkün olmur."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots səhifəsinin ekran görüntüsünü ala bilməzsiz!"
  },
  "emptySelectionErrorTitle": {
    "message": "Seçiminiz çox balacadır"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots özəlliyi Məxfi Səyahət rejimində sönülüdür"
  },
  "privateWindowErrorDetails": {
    "message": "Narahatlıq üçün üzr istəyirik. Gələcək buraxılışlarda bu özəllik üzərində işləyirik."
  },
  "genericErrorTitle": {
    "message": "Off! Firefox Screenshots dəli olub."
  },
  "genericErrorDetails": {
    "message": "Nə baş verdiyindən əmin deyilik. Bir daha yoxlayın və ya başqa səhifənin ekran görüntüsünü alaraq işləyib işləmədiyinə əmin olun."
  },
  "tourBodyIntro": {
    "message": "Firefoxu tərk etmədən ekran görüntüləri alın, saxlayın və paylaşın."
  },
  "tourHeaderPageAction": {
    "message": "Saxlamağın yeni yolu"
  },
  "tourBodyPageAction": {
    "message": "Ekran görüntüsü almaq istədiyinizdə ünvan sətrindəki səhifə əməliyyatları menyusunu açın."
  },
  "tourHeaderClickAndDrag": {
    "message": "İstədiyiniz hər şeyin görüntüsünü alın"
  },
  "tourBodyClickAndDrag": {
    "message": "Səhifənin hər hansı bir hissəsini almaq üçün basın və ya sürüşdürün. Seçiminizi işıqlandırmaq üçün üzərinə gedin."
  },
  "tourHeaderFullPage": {
    "message": "Pəncərəni və ya bütün səhifəni çəkin"
  },
  "tourBodyFullPage": {
    "message": "Sadəcə pəncərədə görünən hissəni və ya bütün səhifəni çəkmək üçün sağ üstdəki düymələrdən birini seçin."
  },
  "tourHeaderDownloadUpload": {
    "message": "İstədiyiniz kimi"
  },
  "tourBodyDownloadUpload": {
    "message": "Kəsdiyiniz hissələri rahat paylaşmaq üçün internetdə saxlayın və ya kompüterinizə endirin. Həmçinin Ekran Görüntülərim düyməsinə basaraq çəkdiyiniz bütün ekran görüntülərini görə bilərsiz."
  },
  "tourSkip": {
    "message": "Ötür"
  },
  "tourNext": {
    "message": "Növbəti Slayd"
  },
  "tourPrevious": {
    "message": "Əvvəlki Slayd"
  },
  "tourDone": {
    "message": "Tamamlandı"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots işlədərək $TERMSANDPRIVACYNOTICETERMSLINK$ və $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ilə razılaşmış olursunuz.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Şərtlər"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Məxfilik Bildirişi"
  },
  "libraryLabel": {
    "message": "Ekran Görüntüləri"
  }
}PK
!<1s¾o[[&webextension/_locales/be/messages.json{
  "addonDescription": {
    "message": "Рабіце кліпы і здымкі экрана ў Сеціве і захоўвайце іх часова або назаўжды."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Зрабіць здымак экрана"
  },
  "myShotsLink": {
    "message": "Мае здымкі"
  },
  "screenshotInstructions": {
    "message": "Пацягніце або пстрыкніце на старонцы для выбару вобласці. Для адмены націсніце ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Захаваць"
  },
  "saveScreenshotVisibleArea": {
    "message": "Захаваць бачную вобласць"
  },
  "saveScreenshotFullPage": {
    "message": "Захаваць усю старонку"
  },
  "cancelScreenshot": {
    "message": "Скасаваць"
  },
  "downloadScreenshot": {
    "message": "Сцягнуць"
  },
  "downloadOnlyNotice": {
    "message": "Вы цяпер у рэжыме толькі сцягвання."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots аўтаматычна пераходзіць у рэжым толькі сцягвання ў наступных выпадках:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "У акне прыватнага аглядання."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Кукі ад трэцяга боку адключаны."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Уключана “не будзе запамінаць гісторыю”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Вы выкарыстоўваеце Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Зацягванне было выключана."
  },
  "notificationLinkCopiedTitle": {
    "message": "Спасылка скапіявана"
  },
  "notificationLinkCopiedDetails": {
    "message": "Спасылка на ваш здымак была скапіявана ў буфер абмену. Націсніце $META_KEY$-V для ўстаўкі.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Капіраваць"
  },
  "notificationImageCopiedTitle": {
    "message": "Скрыншот скапіраваны"
  },
  "notificationImageCopiedDetails": {
    "message": "Скрыншот скапіраваны ў буфер абмену. Націсніце $META_KEY$-V, каб уставіць.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Гэта выява была абрэзана да $PIXELS$пікселяў.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Адбылася памылка."
  },
  "requestErrorDetails": {
    "message": "Выбачайце! Нам не ўдалося захаваць ваш здымак. Паспрабуйце пазней."
  },
  "connectionErrorTitle": {
    "message": "Мы не можам атрымаць доступ да вашых скрыншотаў."
  },
  "connectionErrorDetails": {
    "message": "Калі ласка, праверце ваша злучэнне з Інтэрнэтам. Калі ў вас усё ў парадку з падлучэннем да Інтэрнэту, магчыма, паўсталі часовыя праблемы са службай Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Нам не ўдалося захаваць ваш здымак, таму што ўзніклі праблемы са службай Firefox Screenshots. Паспрабуйце пазней."
  },
  "unshootablePageErrorTitle": {
    "message": "Мы не можам зрабіць скрыншот гэтай старонкі."
  },
  "unshootablePageErrorDetails": {
    "message": "Гэта не стандартная вэб-старонка, таму вы не можаце зрабіць яе скрыншот."
  },
  "selfScreenshotErrorTitle": {
    "message": "Вы не можаце зрабіць здымак старонкі Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Абраная вобласць занадта малая"
  },
  "privateWindowErrorTitle": {
    "message": "Здымкі экрана адключаны ў рэжыме прыватнага аглядання"
  },
  "privateWindowErrorDetails": {
    "message": "Прабачце за нязручнасць. Мы працуем над даданнем гэтай магчымасці у будучыя выпускі."
  },
  "genericErrorTitle": {
    "message": "Вой! З Firefox Screenshots нешта не так."
  },
  "genericErrorDetails": {
    "message": "Мы не ўпэўненыя, у чым праблема. Паспрабаваць яшчэ раз, ці зрабіць здымак іншай старонкі?"
  },
  "tourBodyIntro": {
    "message": "Рабіце здымкі экрана, захоўвайце і дзяліцеся імі не выходзячы з Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Новы спосаб захаваць"
  },
  "tourBodyPageAction": {
    "message": "Разгарніце меню Дзеянні старонкі ў адрасным радку, калі жадаеце зрабіць скрыншот."
  },
  "tourHeaderClickAndDrag": {
    "message": "Рабіце скрыншоты чаго заўгодна"
  },
  "tourBodyClickAndDrag": {
    "message": "Пстрыкніце і пацягніце мышшу для захопу часткі старонкі. Вы таксама можаце навесці курсор мышы для падсвятлення абранай вобласці."
  },
  "tourHeaderFullPage": {
    "message": "Рабіце захоп вокнаў або цэлых старонак"
  },
  "tourBodyFullPage": {
    "message": "З дапамогай кнопак у верхнім правым куце выбірайце захоп бачнай вобласці акна або старонкі цалкам."
  },
  "tourHeaderDownloadUpload": {
    "message": "Як вам падабаецца"
  },
  "tourBodyDownloadUpload": {
    "message": "Захоўваеце свае здымкі ў Інтэрнэце, каб лёгка імі дзяліцца, або загружайце іх на свой камп'ютар. Вы таксама можаце прагледзець усе захаваныя здымкі, націснуўшы на кнопку Мае здымкі."
  },
  "tourSkip": {
    "message": "Прапусьціць"
  },
  "tourNext": {
    "message": "Наступны слайд"
  },
  "tourPrevious": {
    "message": "Папярэдні слайд"
  },
  "tourDone": {
    "message": "Гатова"
  },
  "termsAndPrivacyNotice2": {
    "message": "Выкарыстоўваючы Firefox Screenshots, вы згаджаецеся з нашымі $TERMSANDPRIVACYNOTICETERMSLINK$ і $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Умовамі выкарыстання"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Паведамленнем аб прыватнасці"
  },
  "libraryLabel": {
    "message": "Скрыншоты"
  }
}PK
!<•!ä"ÌÌ&webextension/_locales/bg/messages.json{
  "addonDescription": {
    "message": "Прави клипове и снимки на уебстраница и ги запазва временно или за постоянно."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Снимка на екрана"
  },
  "myShotsLink": {
    "message": "Моите снимки"
  },
  "screenshotInstructions": {
    "message": "За да изберете участък влачете или щракнете с мишката в страницата. Натиснете ESC за отказ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Запазване"
  },
  "saveScreenshotVisibleArea": {
    "message": "Запазване на видимата област"
  },
  "saveScreenshotFullPage": {
    "message": "Запазване на цялата страница"
  },
  "cancelScreenshot": {
    "message": "Отказ"
  },
  "downloadScreenshot": {
    "message": "Изтегляне"
  },
  "downloadOnlyNotice": {
    "message": "В момента сте в режим на изтегляне."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots автоматично преминава в режим на изтегляне в следните ситуации"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "в поверителен прозорец"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Бисквитките от трети страни са забранени"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "настройката „Не помни история“ е включена"
  },
  "downloadOnlyDetailsESR": {
    "message": "Използвате Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Качването на снимки е изключено."
  },
  "notificationLinkCopiedTitle": {
    "message": "Препратката е копирана"
  },
  "notificationLinkCopiedDetails": {
    "message": "Препратка към снимката е копирана в системния буфер. За да я поставите натиснете $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копиране"
  },
  "notificationImageCopiedTitle": {
    "message": "Снимката е копирана"
  },
  "notificationImageCopiedDetails": {
    "message": "Снимката е копирана в системния буфер. За да я поставите натиснете $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Изображението е отрязано до $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Повреда."
  },
  "requestErrorDetails": {
    "message": "Съжаляваме! Снимката не е запазена. Опитайте по-късно."
  },
  "connectionErrorTitle": {
    "message": "Няма връзка с вашите снимки."
  },
  "connectionErrorDetails": {
    "message": "Моля, проверете своята връзка към интернет. Ако имате връзка с Мрежата, в такъв случай може да има временен проблем с услугата на Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Снимката не може да бъде запазена, защото има проблем с услугата на Firefox Screenshots. Опитайте по-късно."
  },
  "unshootablePageErrorTitle": {
    "message": "Снимка на тази страница не може да бъде направена."
  },
  "unshootablePageErrorDetails": {
    "message": "Това не е обикновена уебстраница и за това снимка не може да ѝ бъде направена."
  },
  "selfScreenshotErrorTitle": {
    "message": "Не може да правите снимки на страницата на Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Избраната област е твърде малка"
  },
  "privateWindowErrorTitle": {
    "message": "Снимането е изключено в поверителен режим"
  },
  "privateWindowErrorDetails": {
    "message": "Съжаляваме за неудобството. Очаквайте тази възможност в бъдещите версии."
  },
  "genericErrorTitle": {
    "message": "Леле! Нещо се обърка с Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "Не сме сигурни какво точно се случи. Може да опитате отново, както и да снимате друга страница."
  },
  "tourBodyIntro": {
    "message": "Създавайте, запазвайте и споделяйте снимки на екрана без да напускате Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Нов начин за запазване"
  },
  "tourBodyPageAction": {
    "message": "Отворете менюто за действия със страницата, което се намира в адресната лента, когато желаете да направите снимка на екрана."
  },
  "tourHeaderClickAndDrag": {
    "message": "Уловете само нужното"
  },
  "tourBodyClickAndDrag": {
    "message": "Щракнете с мишката или влачете, за да уловите части от страницата. А когато посочите елементи от страницата – те се осветяват."
  },
  "tourHeaderFullPage": {
    "message": "Улавяйте прозорци и цели страници"
  },
  "tourBodyFullPage": {
    "message": "Използвайте бутоните в горния десен ъгъл, за да уловите само видимата част или цялата страница."
  },
  "tourHeaderDownloadUpload": {
    "message": "Както ви харесва"
  },
  "tourBodyDownloadUpload": {
    "message": "Запазвайте снимките на страници от Мрежата, за да ги споделяте по-лесно или ги изтегляйте на компютъра си. А бутонът „Моите снимки“ ще ви покаже всички направени от вас снимки."
  },
  "tourSkip": {
    "message": "Пропускане"
  },
  "tourNext": {
    "message": "Напред"
  },
  "tourPrevious": {
    "message": "Назад"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Използвайки Firefox Screenshots вие се съгласявате с $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Условията"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Политиката на поверителност"
  },
  "libraryLabel": {
    "message": "Снимки"
  }
}PK
!<„?ƒëÓ$Ó$)webextension/_locales/bn_BD/messages.json{
  "addonDescription": {
    "message": "ওয়েব থেকে ক্লিপ এবং স্ক্রিনশট নিন এবং সেগুলো সাময়িকভাবে বা স্থায়ীভাবে সংরক্ষণ করুন।"
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "একটি স্ক্রীনশট নিন"
  },
  "myShotsLink": {
    "message": "আমার সটসমূহ"
  },
  "screenshotInstructions": {
    "message": "ড্রাগ করে অথবা পেজে ক্লিক করে একটি অংশ নির্বাচন করুন। বাতিল করতে ESC টিপুন।"
  },
  "saveScreenshotSelectedArea": {
    "message": "সংরক্ষণ"
  },
  "saveScreenshotVisibleArea": {
    "message": "যতটুকু দেখা যাচ্ছে সংরক্ষণ করুন"
  },
  "saveScreenshotFullPage": {
    "message": "সম্পূর্ণ পেজ সংরক্ষণ করুন"
  },
  "cancelScreenshot": {
    "message": "বাতিল"
  },
  "downloadScreenshot": {
    "message": "ডাউনলোড"
  },
  "downloadOnlyNotice": {
    "message": "আপনি বর্তমানে Download-Only মোডে আছেন।"
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screeenshots স্বয়ংক্রিয়ভাবে Download-Only এ পরিবর্তণ হয় যেসব অবস্থায়:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "ব্যক্তিগত ব্রাউজিং উইন্ডোতে।"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "তৃতীয়-পক্ষীয় কুকি নিষ্ক্রিয় আছে।"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“ইতিহাস কখনো মনে রাখবেন না” সক্রিয় হয়েছে।"
  },
  "downloadOnlyDetailsESR": {
    "message": "অাপনি Firefox ESR ব্যবহার করছেন।"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "আপলোড নিষ্ক্রিয় করা হয়েছে।"
  },
  "notificationLinkCopiedTitle": {
    "message": "লিঙ্ক কপি করা হয়েছে"
  },
  "notificationLinkCopiedDetails": {
    "message": "আপার সট এর লিংক ক্লিপবোর্ডে কপি করা হয়েছে। পেস্ট করতে $META_KEY$-V চাপুন।",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "অনুলিপি"
  },
  "notificationImageCopiedTitle": {
    "message": "শট অনুলিপি করা হয়েছে"
  },
  "notificationImageCopiedDetails": {
    "message": "আপনার শট ক্লিপবোর্ডে অনুলিপি করা হয়েছে। প্রতিলেপন করতে $META_KEY$-V চাপুন।",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "ইমেজটিকে $PIXELS$পিক্সেলে ক্রপ করা হয়েছে।",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "বিকল।"
  },
  "requestErrorDetails": {
    "message": "দুঃখিত! আমরা আপনার সট সংরক্ষণ করতে পারিনি। অনুগ্রহ পুনরায় চেষ্টা করুন।"
  },
  "connectionErrorTitle": {
    "message": "আমরা আপনার স্ক্রিটসটসমূহ সংযোগ করতে পারছি না।"
  },
  "connectionErrorDetails": {
    "message": "অনুগ্রহ করে আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন। আর যদি আপনার ইন্টারনেট সংযোগ ঠিক থাকে, তাহলে Firefox স্ক্রিনশট সেবাটিতে সাময়িক সমস্যা দেখা দিয়েছে।"
  },
  "loginErrorDetails": {
    "message": "আমরা আপনার শট সংরক্ষণ করতে পারিনি কারণ সেখানে Firefox স্ক্রিণশট সেবার সমস্যা আছে। অনুগ্রহ করে আবার চেস্টা করুন।"
  },
  "unshootablePageErrorTitle": {
    "message": "আমার এই পেজের স্ক্রিনশট নিতে পারব না।"
  },
  "unshootablePageErrorDetails": {
    "message": "এটা কোন আদর্শ ওয়েব পেজ না, তাই আপনি এটার স্ক্রিনশট তুলতে পারবেন না।"
  },
  "selfScreenshotErrorTitle": {
    "message": "আপনি Firefox স্ক্রিনশটের পেজের শট নিতে পারেন না!"
  },
  "emptySelectionErrorTitle": {
    "message": "আপনি অল্প স্থান নির্বাচন করেছেন"
  },
  "privateWindowErrorTitle": {
    "message": "ব্যক্তিগত ব্রাউজিং মোডে স্ক্রিনশট নেওয়া নিস্ক্রিয় করা হয়েছে"
  },
  "privateWindowErrorDetails": {
    "message": "অসুবিধার জন্য দুঃখিত। আমরা এই বৈশিষ্ট্যটি নিয়ে কাজ করছি, খুব শীঘ্রই রিলিজ করা হবে।"
  },
  "genericErrorTitle": {
    "message": "আয় হায়! Firefox স্ক্রিনশট পাগল হয়ে গেছে।"
  },
  "genericErrorDetails": {
    "message": "এই মাত্র কি ঘটেছে আমরা নিশ্চিত নই। আপনি কি অনুগ্রহ করে পুরনায় সট নেবেন কিংবা ভিন্ন একটি পেজে চেষ্টা করবেন?"
  },
  "tourBodyIntro": {
    "message": "Firefox ত্যাগ করা ছাড়াই স্ক্রিনশট তোল, সংরক্ষণ কর এবং শেয়ার কর।"
  },
  "tourHeaderPageAction": {
    "message": "সংরক্ষণ করার এক নতুন পদ্ধতি"
  },
  "tourBodyPageAction": {
    "message": "আপনি যখন কোন স্ক্রিনশট নিবেন, এড্রেস বার থেকে একশন মেনু খুলে নিন।"
  },
  "tourHeaderClickAndDrag": {
    "message": "ক্যাপচার করুন আপনি যা চান"
  },
  "tourBodyClickAndDrag": {
    "message": "একটি পেজের কিয়দংশ ক্যাপচার করতে ক্লিক করে ড্রাগ করুন। অতঃপর আপনি মাউজ হোভার করে আপনার নির্বাচিত অংশ হাইলাইট করতে পারবেন।"
  },
  "tourHeaderFullPage": {
    "message": "উইন্ডো ক্যাপচার করুন অথবা পুরো পেজ"
  },
  "tourBodyFullPage": {
    "message": "ইউন্ডোতে দৃশ্যমান অংশ অথবা সম্পূর্ণ পেজ ক্যাপচার করতে উপরে ডানদিকের বাটনগুলো থেকে নির্বাচন করুন।"
  },
  "tourHeaderDownloadUpload": {
    "message": "আপনি যেমন পছন্দ করেন"
  },
  "tourBodyDownloadUpload": {
    "message": "আপনার ক্রপ করা সটসমূহ ওয়েবে রাখুন সহজে শেয়ার করার সুবিধার্থে, অথবা আপনার কম্পিউটারে ডাউনলোড করুন। আপনার সকল সটসমূহ খুঁজে পেতে আমার সটসমূহ বাটনে ক্লিক করুন।"
  },
  "tourSkip": {
    "message": "এড়িয়ে যান"
  },
  "tourNext": {
    "message": "পরবর্তী স্লাইড"
  },
  "tourPrevious": {
    "message": "পূর্ববর্তী স্লাইড"
  },
  "tourDone": {
    "message": "সম্পন্ন"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots ব্যবহারের জন্য, আপনি আমাদের $TERMSANDPRIVACYNOTICETERMSLINK$ এবং $TERMSANDPRIVACYNOTICEPRIVACYLINK$ নীতিতে সম্মত হয়েছেন।",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "শর্তাবলী"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "গোপনীয়তা নীতি"
  },
  "libraryLabel": {
    "message": "স্ক্রীনশট"
  }
}PK
!<ã@å11&webextension/_locales/br/messages.json{
  "addonDescription": {
    "message": "Tapit skeudennoù war ar Web hag enrollit anezho e-pad ur mare pe da viken."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Kemer un dapadenn-skramm"
  },
  "myShotsLink": {
    "message": "Ma zapadennoù"
  },
  "screenshotInstructions": {
    "message": "Riklit pe klikit war ar bajenn da ziuzañ ur vaezienn. Pouezit war ESC evit nullañ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Enrollañ"
  },
  "saveScreenshotVisibleArea": {
    "message": "Enrollañ ar pezh a vez gwelet"
  },
  "saveScreenshotFullPage": {
    "message": "Enrollañ ar bajenn glok"
  },
  "cancelScreenshot": {
    "message": "Nullañ"
  },
  "downloadScreenshot": {
    "message": "Pellgargañ"
  },
  "downloadOnlyNotice": {
    "message": "E mod pellgargañ hepken emaoc'h bremañ."
  },
  "downloadOnlyDetails": {
    "message": "Mont a raio Firefox Screenshots e mod pellgargañ hepken en degouezhioù da heul:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En ur prenestr merdeiñ prevez."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Diweredekaet eo toupinoù an tredeoù."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Gweredekaet eo \"Na enrollañ ar roll istor\"."
  },
  "downloadOnlyDetailsESR": {
    "message": "Arverañ a rit Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Diweredekaet eo bet an hizivadurioù."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ere eilet"
  },
  "notificationLinkCopiedDetails": {
    "message": "Eilet eo bet ere ho tapadenn er golver. Pouezit war $META_KEY$-V evit pegañ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Eilañ"
  },
  "notificationImageCopiedTitle": {
    "message": "Tapadenn eilet"
  },
  "notificationImageCopiedDetails": {
    "message": "Eilet eo bet ho tapadenn er golver. Pouezit war $META_KEY$-V evit pegañ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Digresket eo bet ho skeudenn da $PIXELS$ piksel.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Degouezhet ez eus bet ur fazi."
  },
  "requestErrorDetails": {
    "message": "Digarezit! N'haller ket enrollañ ho tapadenn. Klaskit en-dro diwezhatoc'h."
  },
  "connectionErrorTitle": {
    "message": "N'haller ket adkennaskañ d'ho tapadennoù-skramm."
  },
  "connectionErrorDetails": {
    "message": "Gwiriekait ho kennask kenrouedad. Ma 'z hoc'h gouest da gennaskañ ouzh ar genrouedad e c'hall bezañ abalamour d'ur gudenn gant ar gwazerezhioù Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "N'haller ket enrollañ ho tapadenn dre ma 'z eus bet ur gudenn gant ar gwazerezh Firefox Screenshots. Klaskit en-dro diwezhatoc'h."
  },
  "unshootablePageErrorTitle": {
    "message": "N'haller ket tapout ar bajenn-mañ."
  },
  "unshootablePageErrorDetails": {
    "message": "N'eo ket ur bajenn web reoliek neuze n'haller ket kemer un dapadenn-skramm ganti."
  },
  "selfScreenshotErrorTitle": {
    "message": "N'hallit ket kemer un dapadenn-skramm eus ur bajenn Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Re vihan eo ho tiuzadenn"
  },
  "privateWindowErrorTitle": {
    "message": "Diweredekaet eo an tapadennoù-skramm er merdeiñ prevez."
  },
  "privateWindowErrorDetails": {
    "message": "Digarezit evit ar gudenn. Labourat a reomp war ar c'heweriuster-mañ evit ermaeziadennoù da zont."
  },
  "genericErrorTitle": {
    "message": "Chaous! Ur gudenn a zo savet gant Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "N'omp ket sur eus ar pezh a zo c'hoarvezet. Gallout a rit adklask pe kemer ur dapadenn eus ur bajenn all."
  },
  "tourBodyIntro": {
    "message": "Kemerit, enrollit ha skignit tapadennoù-skramm he kuitaat Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Un doare nevez da enrollañ"
  },
  "tourBodyPageAction": {
    "message": "Kreskiñ lañser gweredoù ar bajenn er varrenn chomlec'h pa fell deoc'h kemer un dapadenn-skramm."
  },
  "tourHeaderClickAndDrag": {
    "message": "Tapit ar pezh a fell deoc'h hepken"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikit ha riklit evit tapout ul lodenn eus ar bajenn hepken. Gallout a rit ivez tremen a-us evit usskediñ an diuzad."
  },
  "tourHeaderFullPage": {
    "message": "Tapit prenestroù pe pajennoù a-bezh"
  },
  "tourBodyFullPage": {
    "message": "Diuzit an afelloù a-us a-zehou evit skeudenniñ ar vaezienn welus er prenestr pe evit skeudenniñ ar bajenn a-bezh."
  },
  "tourHeaderDownloadUpload": {
    "message": "Evel ma fell deoc'h"
  },
  "tourBodyDownloadUpload": {
    "message": "Enrollit ho tapadennoù didroc'het evit ar web evit skignañ aesoc'h, pe pellgargit anezho war ho urzhiataer. Gallout a rit ivez klikañ war an afell Ma zapadennoù evit kavout an holl dapadennoù kemeret ganeoc'h."
  },
  "tourSkip": {
    "message": "TREMEN"
  },
  "tourNext": {
    "message": "Treyonenn da-heul"
  },
  "tourPrevious": {
    "message": "Treyonenn gent"
  },
  "tourDone": {
    "message": "Graet"
  },
  "termsAndPrivacyNotice2": {
    "message": "En ur implij Firefox Screenshots ec'h asantit d'hor $TERMSANDPRIVACYNOTICETERMSLINK$ ha $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Divizoù"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Evezhiadenn a-fed buhez prevez"
  },
  "libraryLabel": {
    "message": "Tapadennoù-skramm"
  }
}PK
!<!p{{&webextension/_locales/bs/messages.json{
  "addonDescription": {
    "message": "Snimite ili slikajte stvari s weba te ih sačuvajte privremeno ili trajno."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Snimi zaslon"
  },
  "myShotsLink": {
    "message": "Moji snimci"
  },
  "screenshotInstructions": {
    "message": "Povucite ili kliknite na stranicu kako biste izabrali područje. Pritisnite ESC za otkazivanje radnje."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sačuvaj"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sačuvaj vidljivo"
  },
  "saveScreenshotFullPage": {
    "message": "Sačuvaj cijelu stranicu"
  },
  "cancelScreenshot": {
    "message": "Otkaži"
  },
  "downloadScreenshot": {
    "message": "Preuzmi"
  },
  "downloadOnlyNotice": {
    "message": "Trenutno ste u režimu preuzimanja."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se automatski mijenja u režim preuzimanja u sljedećim situacijama:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "U prozoru privatnog pretraživanja."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kada su kolačići trećih strana onemogućeni."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Kada je omogućeno “Nikad ne pamti historiju”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Koristite Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Prijenosi su onemogućeni."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link je kopiran"
  },
  "notificationLinkCopiedDetails": {
    "message": "Veza do vašeg snimka je kopirana u međuspremnik. Pristinite $META_KEY$-V da je zalijepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiraj"
  },
  "notificationImageCopiedTitle": {
    "message": "Snimak kopiran"
  },
  "notificationImageCopiedDetails": {
    "message": "Vaš snimak je kopiran u međuspremnik. Pritisnite $META_KEY$-V da zalijepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Slika je isječena na $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Nije u funkciji."
  },
  "requestErrorDetails": {
    "message": "Žao nam je! Nismo uspjeli sačuvati vaš snimak. Molimo pokušajte ponovo."
  },
  "connectionErrorTitle": {
    "message": "Ne možemo se povezati s vašim snimcima."
  },
  "connectionErrorDetails": {
    "message": "Molimo provjerite vašu internet konekciju. Ako se možete povezati na internet, moguće je da postoji privremeni problem sa Firefox Screenshots servisom."
  },
  "loginErrorDetails": {
    "message": "Nismo uspjeli sačuvati vaš snimak zbog toga što postoji problem s uslugama Firefox Screenshots. Molimo pokušajte kasnije."
  },
  "unshootablePageErrorTitle": {
    "message": "Ovu stranicu ne možemo snimiti."
  },
  "unshootablePageErrorDetails": {
    "message": "Ovo nije standardna web stranica stoga je ne možete snimiti."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ne možete snimiti Firefox Screenshots stranicu!"
  },
  "emptySelectionErrorTitle": {
    "message": "Vaš odabir je premalen"
  },
  "privateWindowErrorTitle": {
    "message": "Snimci ekrana su onemogućeni u načinu privatnog pretraživanja"
  },
  "privateWindowErrorDetails": {
    "message": "Žao nam je na neugodnosti. Radimo na ovoj mogućnosti za buduća izdanja."
  },
  "genericErrorTitle": {
    "message": "Uf! Firefox Screenshots se zbrkao."
  },
  "genericErrorDetails": {
    "message": "Nismo sigurni šta se upravo dogodilo. Možete li pokušati ponovo ili snimiti drukčiju stranicu?"
  },
  "tourBodyIntro": {
    "message": "Snimite, sačuvajte i dijelite snimke bez da napuštate Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Novi način da sačuvate"
  },
  "tourBodyPageAction": {
    "message": "Proširite meni s radnjama stranice u adresnoj traci svaki put kada želite snimiti ekran."
  },
  "tourHeaderClickAndDrag": {
    "message": "Uslikajte baš ono što želite"
  },
  "tourBodyClickAndDrag": {
    "message": "Kliknite i povucite ako želite snimiti samo dio stranice. Također možete označiti vaš odabir tako da preko njega stavite pokazivač miša."
  },
  "tourHeaderFullPage": {
    "message": "Uslikajte prozore ili cijele stranice"
  },
  "tourBodyFullPage": {
    "message": "Izaberite dugmad u gorenjem desnom uglu da uslikate vidljive dijelove prozora ili da uslikate cijelu stranicu."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kao što volite"
  },
  "tourBodyDownloadUpload": {
    "message": "Sačuvajte vaš isječeni snimak na web radi lakšeg dijeljenja ili preuzimanja na vaš računar. Takođe možete kliknuti na dugme Moji snimci da pronađete sve vaše snimke."
  },
  "tourSkip": {
    "message": "PRESKOČI"
  },
  "tourNext": {
    "message": "Sljedeći slajd"
  },
  "tourPrevious": {
    "message": "Prethodni slajd"
  },
  "tourDone": {
    "message": "Gotovo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Koristeći Firefox Screenshots slažete se s našim $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Uslovi"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Obavještenje o privatnosti"
  },
  "libraryLabel": {
    "message": "Snimci ekrana"
  }
}PK
!<A¤Ÿxx&webextension/_locales/ca/messages.json{
  "addonDescription": {
    "message": "Feu captures de pantalla de pàgines web i deseu-les temporalment o per sempre."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Fes una captura de pantalla"
  },
  "myShotsLink": {
    "message": "Les meves captures"
  },
  "screenshotInstructions": {
    "message": "Arrossegueu o feu clic a la pàgina per seleccionar una regió. Premeu ESC per cancel·lar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Desa"
  },
  "saveScreenshotVisibleArea": {
    "message": "Captura la part visible"
  },
  "saveScreenshotFullPage": {
    "message": "Captura tota la pàgina"
  },
  "cancelScreenshot": {
    "message": "Cancel·la"
  },
  "downloadScreenshot": {
    "message": "Baixa"
  },
  "downloadOnlyNotice": {
    "message": "Actualment esteu en mode de només baixada."
  },
  "downloadOnlyDetails": {
    "message": "El Firefox Screenshots canvia automàticament al mode de només baixada en aquestes situacions:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En una finestra de navegació privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "S'han desactivat les galetes de tercers."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "S'ha activat l'opció «No recordarà mai l'historial»."
  },
  "downloadOnlyDetailsESR": {
    "message": "Feu servir el Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Les pujades estan inhabilitades."
  },
  "notificationLinkCopiedTitle": {
    "message": "S'ha copiat l'enllaç"
  },
  "notificationLinkCopiedDetails": {
    "message": "L'enllaç de la captura s'ha copiat al porta-retalls. Premeu $META_KEY$-V per enganxar-lo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copia"
  },
  "notificationImageCopiedTitle": {
    "message": "S'ha copiat la captura"
  },
  "notificationImageCopiedDetails": {
    "message": "La captura s'ha copiat al porta-retalls. Premeu $META_KEY$-V per enganxar-la.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Aquesta imatge s'ha retallat a $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "No funciona."
  },
  "requestErrorDetails": {
    "message": "Malauradament, s'ha pogut desar la vostra captura. Torneu a provar més tard."
  },
  "connectionErrorTitle": {
    "message": "No s'ha pogut accedir a les vostres captures de pantalla."
  },
  "connectionErrorDetails": {
    "message": "Comproveu la connexió a Internet. Si podeu connectar-vos a Internet, podria ser un problema temporal del servei del Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "No s'ha pogut desar la vostra captura perquè hi ha un problema amb el servei del Firefox Screenshots. Torneu-ho a provar més tard."
  },
  "unshootablePageErrorTitle": {
    "message": "No es pot fer una captura de pantalla d'aquesta pàgina."
  },
  "unshootablePageErrorDetails": {
    "message": "No podeu fer una captura de pantalla perquè aquesta no és una pàgina web estàndard."
  },
  "selfScreenshotErrorTitle": {
    "message": "No podeu fer una captura de pantalla de la pàgina del Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "La selecció és massa petita"
  },
  "privateWindowErrorTitle": {
    "message": "Les captures de pantalla estan desactivades en el mode de navegació privada"
  },
  "privateWindowErrorDetails": {
    "message": "Perdoneu les molèsties. Estem treballant en aquesta característica per a versions futures."
  },
  "genericErrorTitle": {
    "message": "El Firefox Screenshots ha tingut un problema."
  },
  "genericErrorDetails": {
    "message": "S'ha produït un error inesperat. Torneu-ho a provar o captureu una altra pàgina."
  },
  "tourBodyIntro": {
    "message": "Feu, deseu i compartiu captures de pantalla sense sortir del Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una forma nova de desar les captures"
  },
  "tourBodyPageAction": {
    "message": "Amplieu el menú d'accions de la pàgina de la barra d'adreces quan vulgueu fer una captura de pantalla."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captureu tot allò que vulgueu"
  },
  "tourBodyClickAndDrag": {
    "message": "Feu clic i arrossegueu per capturar només una part de la pàgina. També podeu moure el ratolí per sobre per ressaltar la vostra selecció."
  },
  "tourHeaderFullPage": {
    "message": "Captureu la finestra o la pàgina sencera"
  },
  "tourBodyFullPage": {
    "message": "Seleccioneu amb els botons de la part superior dreta si voleu capturar l'àrea visible de la finestra o la pàgina sencera."
  },
  "tourHeaderDownloadUpload": {
    "message": "Com vulgueu"
  },
  "tourBodyDownloadUpload": {
    "message": "Deseu les vostres captures al web per compartir-les fàcilment o baixeu-les a l'ordinador. També podeu fer clic al botó «Les meves captures» per veure totes les captures que heu fet."
  },
  "tourSkip": {
    "message": "OMET"
  },
  "tourNext": {
    "message": "Diapositiva següent"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Fet"
  },
  "termsAndPrivacyNotice2": {
    "message": "Si utilitzeu el Firefox Screenshots, esteu acceptant les nostres $TERMSANDPRIVACYNOTICETERMSLINK$ i l'$TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "condicions d'ús"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "avís de privadesa"
  },
  "libraryLabel": {
    "message": "Captures de pantalla"
  }
}PK
!<}§²ˋ‹'webextension/_locales/cak/messages.json{
  "addonDescription": {
    "message": "Ke'achapa' silowachib'al chuqa' chapoj wachib'äl pan Ajk'amaya'l richin ye'ayäk."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Tichap jun Chapoj Wachib'äl"
  },
  "myShotsLink": {
    "message": "Taq Nuwachib'al"
  },
  "screenshotInstructions": {
    "message": "Taqirirej o tapitz'a' ri ruxaq richin nacha' ri k'ojlem. Tapitz'a' ESC richin niq'at."
  },
  "saveScreenshotSelectedArea": {
    "message": "Tiyak"
  },
  "saveScreenshotVisibleArea": {
    "message": "Tiyak wachel"
  },
  "saveScreenshotFullPage": {
    "message": "Tiyak chijun ruxaq"
  },
  "cancelScreenshot": {
    "message": "Tiq'at"
  },
  "downloadScreenshot": {
    "message": "Tiqasäx"
  },
  "downloadOnlyNotice": {
    "message": "Wakami k'o pa rub'eyal Xa Xe Qasanïk."
  },
  "downloadOnlyDetails": {
    "message": "Ri Firefox Chapoj Wachaj pa ruyonil nuk'ëx pa rub'anikil Xa Xe Qasanïk pa ri taq k'ulwachitajinem re':"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Pa jun rutzuwäch Ichin Okem pa K'amaya'l."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "E chupül ri taq kikaxlanwey aj rox winäq."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Majub'ey tinatäx natab'äl” tzijon."
  },
  "downloadOnlyDetailsESR": {
    "message": "Tajin nawokisaj ri Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "E chupül ri kisamajib'exik taq yakb'äl."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ximonel Wachib'en"
  },
  "notificationLinkCopiedDetails": {
    "message": "Xwachib'ëx pa molwuj ri ruximonel awachib'al. Tapitz'a' $META_KEY$-V richin natz'äm.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Tiwachib'ëx"
  },
  "notificationImageCopiedTitle": {
    "message": "Xwachib'ëx chapoj"
  },
  "notificationImageCopiedDetails": {
    "message": "Xwachib'ëx pa molwuj ri ruchapoj awachib'al. Tapitz'a' $META_KEY$-V richin natz'äm.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Re wachib'äl re' xqupïx pa $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Man nisamäj ta."
  },
  "requestErrorDetails": {
    "message": "¡Takuyu! Man yojtikïr ta niqayäk ri awachib'al. Tatojtob'ej jumej."
  },
  "connectionErrorTitle": {
    "message": "Man yojtikïr ta yojok pari taq chapoj awachib'al."
  },
  "connectionErrorDetails": {
    "message": "Tanik'oj awokem pa K'amaya'l. We yatok pa K'amaya'l, rik'in jub'a' xtuya' k'ayewal pa rusamaj ri Firefox taq Chapoj Wachib'äl."
  },
  "loginErrorDetails": {
    "message": "Man xkatikïr ta xtayäk ri awachib'al ruma jun ruk'ayewal toq nisamäj ri Firefox Chapoj Wachib'äl. Tatojtob'ej chik pa jun mej."
  },
  "unshootablePageErrorTitle": {
    "message": "Man yojtikïr ta nichap ruwachib'al re ruxaq re'."
  },
  "unshootablePageErrorDetails": {
    "message": "Re re' man pa rub'eyal ta chi ruxaq Ajk'amaya'l, ruma ri' man yojtikïr ta niqachäp ruwachib'al."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡Man yatikïr ta nawelesaj ruwachib'al jun ruxaq Firefox Chapoj Wachib'äl!"
  },
  "emptySelectionErrorTitle": {
    "message": "Yalan ko'öl ri acha'oj"
  },
  "privateWindowErrorTitle": {
    "message": "Echupun ri Chapoj taq Wachib'äl pa Ichinan Okem pa K'amaya'l"
  },
  "privateWindowErrorDetails": {
    "message": "Takuyu' chi qe ruma ri k'ayewal. Tajin niqasamajij re rub'anikil re' richin ri ch'aqa' chik taq ruwäch."
  },
  "genericErrorTitle": {
    "message": "¡Itz! Itzel xe'el ri Firefox Chapoj Wachib'äl."
  },
  "genericErrorDetails": {
    "message": "Man öj jikïl chi rij ri xk'ulwachitäj. ¿La nawajo' natojtob'ej chik o nachäp ruwachib'al jun chik ruxaq?"
  },
  "tourBodyIntro": {
    "message": "Ke'achapa', ke'ayaka', chuqa' ke'akomonij chapoj taq wachib'äl rik'in man yatel ta el pa Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Jun k'ak'a' rub'anikil richin niyak"
  },
  "tourBodyPageAction": {
    "message": "Tarik'a' ri ruk'utsamaj kisamaj taq ruxaq pa kik'ajtz'ik ochochib'äl xab'achike ramaj toq nawajo' nawelesaj jun chapoj wachib'äl."
  },
  "tourHeaderClickAndDrag": {
    "message": "Tachapa' ri Nawajo'"
  },
  "tourBodyClickAndDrag": {
    "message": "Tapitz'a' chuqa' taqirirej richin nacha' xa jun peraj ruxaq. Chuqa' yatikïr yaq'axaj richin nipe retal ri acha'oj."
  },
  "tourHeaderFullPage": {
    "message": "Chapoj Tzuwäch o Tz'aqät taq Ruxaq"
  },
  "tourBodyFullPage": {
    "message": "Ke'acha' ri ikim ajkiq'a' taq pitz'b'äl richin nachäp ri tz'etel ruk'ojlem tzuwäch o richin nachäp jun tz'aqät ruxaq."
  },
  "tourHeaderDownloadUpload": {
    "message": "Achi'el Niqa Chawäch"
  },
  "tourBodyDownloadUpload": {
    "message": "Ke'ayaka' ri qupin taq awachib'al pa ajk'amaya'l richin man k'ayew ta ye'akomonij o ye'aqasaj pan akematz'ib'. Chuqa' yatikïr napïtz ri Taq Nuwachib'al richin ye'awïl konojel ri taq wachib'al e'elesan."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Jun chik Q'axewäch"
  },
  "tourPrevious": {
    "message": "Jun kan Q'axewäch"
  },
  "tourDone": {
    "message": "Xb'an"
  },
  "termsAndPrivacyNotice2": {
    "message": "Rik'in rokisaxik ri Firefox Chapoj Wachib'äl, nawoqaj $TERMSANDPRIVACYNOTICETERMSLINK$ chuqa' $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Taq ojqanem"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Rutzijol Ichinanem"
  },
  "libraryLabel": {
    "message": "Chapoj taq wachib'äl"
  }
}PK
!<±^îö??'webextension/_locales/crh/messages.json{
  "addonDescription": {
    "message": "Ağ'dan tüyremeler ve ekran körüntilerini al ve olarnı muvaqqat yaki payidar olaraq saqla."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Bir Ekran Körüntisini Al"
  },
  "myShotsLink": {
    "message": "Körüntilerim"
  },
  "screenshotInstructions": {
    "message": "Bir mıntaqanı saylamaq içün saifede süyrekleñiz yaki çertiñiz. Vazgeçmek içün ESC basıñız."
  },
  "saveScreenshotSelectedArea": {
    "message": "Saqla"
  },
  "saveScreenshotVisibleArea": {
    "message": "Körünirni saqla"
  },
  "saveScreenshotFullPage": {
    "message": "Tam saifeni saqla"
  },
  "cancelScreenshot": {
    "message": "Vazgeç"
  },
  "downloadScreenshot": {
    "message": "Endir"
  },
  "tourDone": {
    "message": "Tamam"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Şartlar"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Hususiyat Tebliği"
  },
  "libraryLabel": {
    "message": "Ekran Körüntileri"
  }
}PK
!<Í LL&webextension/_locales/cs/messages.json{
  "addonDescription": {
    "message": "Pořizujte snímky webových stránek a ukládejte je dočasně nebo natrvalo."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Pořídit snímek stránky"
  },
  "myShotsLink": {
    "message": "Mé snímky"
  },
  "screenshotInstructions": {
    "message": "Oblast vyberete kliknutím nebo tahem myší. Pro zrušení stiskněte ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Uložit"
  },
  "saveScreenshotVisibleArea": {
    "message": "Uložit viditelnou oblast"
  },
  "saveScreenshotFullPage": {
    "message": "Uložit celou stránku"
  },
  "cancelScreenshot": {
    "message": "Zrušit"
  },
  "downloadScreenshot": {
    "message": "Stáhnout"
  },
  "downloadOnlyNotice": {
    "message": "Nyní jste v režimu pouze ke stažení."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se automaticky přepne do režimu pouze ke stažení, pokud:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Jste v okně anonymního prohlížení."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Máte zakázané cookies třetích stran."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Máte zcela zakázané ukládání historie."
  },
  "downloadOnlyDetailsESR": {
    "message": "Používáte Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nahrávání bylo zakázáno."
  },
  "notificationLinkCopiedTitle": {
    "message": "Odkaz zkopírován"
  },
  "notificationLinkCopiedDetails": {
    "message": "Odkaz na váš snímek byl zkopírován do schránky. Pro vložení stiskněte $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopírovat"
  },
  "notificationImageCopiedTitle": {
    "message": "Snímek zkopírován"
  },
  "notificationImageCopiedDetails": {
    "message": "Váš snímek byl zkopírován do schránky. Pro vložení stiskněte $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tento obrázek byl oříznutý na $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Mimo provoz."
  },
  "requestErrorDetails": {
    "message": "Je nám líto, ale nemohli jsme vás snímek uložit. Zkuste to prosím znovu později."
  },
  "connectionErrorTitle": {
    "message": "Nedaří se nám připojit k vašim snímkům."
  },
  "connectionErrorDetails": {
    "message": "Zkontrolujte prosím připojení k internetu. Pokud vám připojení funguje, mohlo dojít k dočasnému problému s naší službou Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nemohli jsme uložit váš snímek, protože došlo k problému se službou Firefox Screenshots. Zkuste to prosím znovu později."
  },
  "unshootablePageErrorTitle": {
    "message": "Snímek této stránky nelze pořídit."
  },
  "unshootablePageErrorDetails": {
    "message": "Toto není běžná webová stránka, a proto z ní nelze pořizovat žádné snímky."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nelze pořizovat snímek stránky Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Vybraná oblast je moc malá"
  },
  "privateWindowErrorTitle": {
    "message": "Služba Firefox Screenshots je v anonymním prohlížení vypnutá"
  },
  "privateWindowErrorDetails": {
    "message": "Omlouváme se za nepříjemnosti. Na této funkci pracujeme pro některé příští vydání."
  },
  "genericErrorTitle": {
    "message": "Jejda! Služba Firefox Screenshots přestala pracovat."
  },
  "genericErrorDetails": {
    "message": "Nejsme si jistí, co se právě stalo. Chcete to zkusit znovu, nebo zkusíte pořídit snímek na jiné stránce?"
  },
  "tourBodyIntro": {
    "message": "Pořizujte, ukládejte a sdílejte snímky webových stránek bez opuštění Firefoxu."
  },
  "tourHeaderPageAction": {
    "message": "Nový způsob ukládání"
  },
  "tourBodyPageAction": {
    "message": "Kdykoliv chcete pořídit snímek, otevřete nabídku akcí stránky v adresním řádku."
  },
  "tourHeaderClickAndDrag": {
    "message": "Zachyťte cokoliv chcete"
  },
  "tourBodyClickAndDrag": {
    "message": "Stiskem tlačítka myši a tahem můžete vybrat oblast stránky. Výběr můžete provést také najetím myši na prvek stránky."
  },
  "tourHeaderFullPage": {
    "message": "Pořizujte snímky jen částí nebo i celých stránek"
  },
  "tourBodyFullPage": {
    "message": "Pomocí tlačítek vpravo nahoře můžete pořídit snímek jen viditelné části nebo úplně celé stránky."
  },
  "tourHeaderDownloadUpload": {
    "message": "Jak sami chcete"
  },
  "tourBodyDownloadUpload": {
    "message": "Uložte si oříznutý snímek stránky na web pro rychlejší sdílení, nebo si ho stáhněte do počítače. Pro zobrazení všech snímků stačí klepnout na tlačítko Mé snímky."
  },
  "tourSkip": {
    "message": "Přeskočit"
  },
  "tourNext": {
    "message": "Další snímek"
  },
  "tourPrevious": {
    "message": "Předchozí snímek"
  },
  "tourDone": {
    "message": "Hotovo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Používáním služby Firefox Screenshots souhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "podmínkami"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "zásadami ochrany osobních údajů"
  },
  "libraryLabel": {
    "message": "Snímky stránek"
  }
}PK
!<íD—iii&webextension/_locales/cy/messages.json{
  "addonDescription": {
    "message": "Cymrwch clipiau a lluniau sgrin o'r We a'u cadw dros dro neu'n barhaol."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Cymryd Llun Sgrin Screenshot"
  },
  "myShotsLink": {
    "message": "Fy Lluniau Sgrin"
  },
  "screenshotInstructions": {
    "message": "Llusgwch neu glicio ar y dudalen i ddewis adran. Pwyso ESC i ddiddymu."
  },
  "saveScreenshotSelectedArea": {
    "message": "Cadw"
  },
  "saveScreenshotVisibleArea": {
    "message": "Cadw'r gweladwy"
  },
  "saveScreenshotFullPage": {
    "message": "Cadw tudalen lawn"
  },
  "cancelScreenshot": {
    "message": "Diddymu"
  },
  "downloadScreenshot": {
    "message": "Llwytho i Lawr"
  },
  "downloadOnlyNotice": {
    "message": "Rydych yn y modd Llwytho i Lawr yn Unig."
  },
  "downloadOnlyDetails": {
    "message": "Mae Firefox Screenshots yn newid yn awtomatig i'r modd Llwytho i Lawr y Unig yn y sefyllfaoedd hyn:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Mewn ffenestr Pori Prefat."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Mae cwcis trydydd parti wedi eu hanalluogi."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Mae “Peidio cofio hanes” wedi ei alluogi."
  },
  "downloadOnlyDetailsESR": {
    "message": "Rydych yn defnyddio Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Mae llwytho i fyny wedi ei atal."
  },
  "notificationLinkCopiedTitle": {
    "message": "Dolen wedi ei Chadw"
  },
  "notificationLinkCopiedDetails": {
    "message": "Mae'r ddolen i'ch llun wedi ei gopïo i'r clipfwrdd. Pwyswch $META_KEY$-V i'w ludo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copïo"
  },
  "notificationImageCopiedTitle": {
    "message": "Copïwyd y Llun"
  },
  "notificationImageCopiedDetails": {
    "message": "Mae eich llun wedi ei gopïo i'r clipfwrdd. Pwyswch $META_KEY$-V i'w ludo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Mae'r ddelwedd wedi ei thocio i $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ddim yn gweithio."
  },
  "requestErrorDetails": {
    "message": "Ymddiheuriadau! Nid oedd modd cadw eich llun. Ceisiwch eto'n hwyrach."
  },
  "connectionErrorTitle": {
    "message": "Nid oes modd i ni gysylltu a'ch lluniau sgrin."
  },
  "connectionErrorDetails": {
    "message": "Gwiriwch eich cysylltiad Rhyngrwyd. Os ydych yn gallu cysylltu â'r Rhyngrwyd, efallai bod anhawster dros dro gyda gwasanaeth lluniau sgrin, Firefox Screnshots."
  },
  "loginErrorDetails": {
    "message": "Nid oedd modd i ni gadw eich llun gan fod yna anhawster gyda gwasanaeth Firefox Screenshots. Ceisiwch eto'n hwyrach."
  },
  "unshootablePageErrorTitle": {
    "message": "Nid oes modd tynnu llun sgrin o'r dudalen."
  },
  "unshootablePageErrorDetails": {
    "message": "Nid yw hwn yn dudalen Gwe safonol, felly does dim modd tynnu llun sgrin ohono."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nid oes modd cymryd llun o dudalen lluniau sgrin Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Mae eich dewis yn rhy fach"
  },
  "privateWindowErrorTitle": {
    "message": "Mae Screenshot wedi ei analluogi yn y Modd Pori Preifat"
  },
  "privateWindowErrorDetails": {
    "message": "Ymddiheuriadau am yr anhwylustod. Rydym yn gweithio ar y nodwedd hwn ar gyfer fersiynau'r dyfodol."
  },
  "genericErrorTitle": {
    "message": "Www! Mae Firefox Screenshots wedi mynd yn hurt."
  },
  "genericErrorDetails": {
    "message": "Nid ydym yn gwybod beth sydd wedi ddigwydd. Ceisiwch eto neu dynnu llun o dudalen wahanol?"
  },
  "tourBodyIntro": {
    "message": "Cymryd, cadw a rhannu lluniau sgrin heb adael Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ffordd newydd i gadw"
  },
  "tourBodyPageAction": {
    "message": "Ehangwch y ddewislen gweithredoedd tudalen yn y bar cyfeiriad unrhyw bryd fyddwch am gymryd llun sgrin."
  },
  "tourHeaderClickAndDrag": {
    "message": "Cipio Dim ond Beth Rydych ei Angen"
  },
  "tourBodyClickAndDrag": {
    "message": "Cliciwch a llusgo i gipio rhan o dudalen. Gallwch hofran i amlygu eich dewis."
  },
  "tourHeaderFullPage": {
    "message": "Cipio Ffenestri neu Dudalennau Cyfan"
  },
  "tourBodyFullPage": {
    "message": "Dewiswch y botymau ar y dde uchod i gipio ardal gweladwy mewn ffenestr neu i gipio tudalen gyfan."
  },
  "tourHeaderDownloadUpload": {
    "message": "Yn Ôl eich Dewis"
  },
  "tourBodyDownloadUpload": {
    "message": "Cadwch eich lluniau wedi eu golygu i'r We ar gyfer rhannu haws, neu eu llwytho i lawr i'ch cyfrifiadur. Gallwch hefyd glicio ar Fy Lluniau i weld pob llun sydd gennych."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Sleid Nesaf"
  },
  "tourPrevious": {
    "message": "Sleid Flaenorol"
  },
  "tourDone": {
    "message": "Gorffen"
  },
  "termsAndPrivacyNotice2": {
    "message": "Drwy ddefnyddio Firefox Screenshots, rydych yn cytuno i'n $TERMSANDPRIVACYNOTICETERMSLINK$ a'n $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Telerau"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Hysbysiad Preifatrwydd"
  },
  "libraryLabel": {
    "message": "Rhannu ar Pinterest"
  }
}PK
!<cÞo¨&webextension/_locales/da/messages.json{
  "addonDescription": {
    "message": "Tag udklip og skærmbilleder fra nettet og gem dem midlertidigt eller permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Tag et skærmbillede"
  },
  "myShotsLink": {
    "message": "Mine skærmbilleder"
  },
  "screenshotInstructions": {
    "message": "Træk eller klik på siden for at vælge et område. Tryk på ESC for at fortryde."
  },
  "saveScreenshotSelectedArea": {
    "message": "Gem"
  },
  "saveScreenshotVisibleArea": {
    "message": "Gem synligt område"
  },
  "saveScreenshotFullPage": {
    "message": "Gem hele siden"
  },
  "cancelScreenshot": {
    "message": "Fortryd"
  },
  "downloadScreenshot": {
    "message": "Hent"
  },
  "downloadOnlyNotice": {
    "message": "Du kan i øjeblikket kun hente skærmbilleder."
  },
  "downloadOnlyDetails": {
    "message": "I følgende situationer lader Firefox Screenshots dig kun hente skærmbilleder:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "I et privat browsing-vindue."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Når tredjeparts cookies er deaktiveret."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Når Firefox-indstillingen “Aldrig gemme historik” er valgt."
  },
  "downloadOnlyDetailsESR": {
    "message": "Du bruger Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uploads er blevet deaktiveret."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link kopieret"
  },
  "notificationLinkCopiedDetails": {
    "message": "Linket til dit skærmbillede er blevet gemt i udklipsholderen. Tryk på $META_KEY$-V for at sætte ind. ",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopier"
  },
  "notificationImageCopiedTitle": {
    "message": "Skærmbillede kopieret"
  },
  "notificationImageCopiedDetails": {
    "message": "Dit skærmbillede er blevet kopieret til udklipsholderen. Tryk $META_KEY$-V for at indsætte.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Billedet er blevet beskåret til $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ude af funktion"
  },
  "requestErrorDetails": {
    "message": "Vi kunne desværre ikke gemme dit skærmbillede. Prøv igen senere."
  },
  "connectionErrorTitle": {
    "message": "Vi kan ikke oprette forbindelse til dine skærmbilleder."
  },
  "connectionErrorDetails": {
    "message": "Kontroller din internet-forbindelse. Hvis du ikke kan oprette forbindelse til internettet, kan der være et midlertidigt teknisk problem med Firefox Screenshots. "
  },
  "loginErrorDetails": {
    "message": "Vi kunne ikke gemme dit skærmbillede, fordi der er et teknisk problem med Firefox Screenshots. Prøv igen senere. "
  },
  "unshootablePageErrorTitle": {
    "message": "Vi kan ikke tage et skærmbillede af denne side. "
  },
  "unshootablePageErrorDetails": {
    "message": "Dette er ikke en almindelig webside, så du kan ikke tage skærmbilleder af den. "
  },
  "selfScreenshotErrorTitle": {
    "message": "Du kan ikke tage skærmbilleder af en side i Firefox Screenshots."
  },
  "emptySelectionErrorTitle": {
    "message": "Din markering er for lille"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots er deaktiveret i privat browsing-tilstand"
  },
  "privateWindowErrorDetails": {
    "message": "Vi beklager ulejligheden. Vi arbejder på at få funktionen til at virke i fremtidige udgivelser."
  },
  "genericErrorTitle": {
    "message": "Hov! Noget gik helt galt med Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "Vi er ikke sikre på, hvad der lige skete. Vil du prøve igen - eller vil du tage et skærmbillede af en anden side?"
  },
  "tourBodyIntro": {
    "message": "Tag, gem og del skærmbilleder uden at forlade Firefox. "
  },
  "tourHeaderPageAction": {
    "message": "En ny måde at gemme på"
  },
  "tourBodyPageAction": {
    "message": "Klik på Sidehandlinger i adressefeltet, når du vil tage et skærmbillede."
  },
  "tourHeaderClickAndDrag": {
    "message": "Gem lige hvad du vil."
  },
  "tourBodyClickAndDrag": {
    "message": "Klik og træk for at tage et udklip af en del af en side. Du kan også holde markøren over for at fremhæve din markering."
  },
  "tourHeaderFullPage": {
    "message": "Tag skærmbilleder af vinduer eller hele sider."
  },
  "tourBodyFullPage": {
    "message": "Brug knapperne øverst til højre for at tage et skærmbillede af det synlige område i vinduet eller for at tage et skærmbillede af hele siden."
  },
  "tourHeaderDownloadUpload": {
    "message": "Som du vil have det."
  },
  "tourBodyDownloadUpload": {
    "message": "Gem dine beskårne skærmbilleder på nettet for nemmere at dele dem - eller hent dem ned på din computer. Du kan også klikke på knappen \"Mine skærmbilleder\" for at finde de skærmbilleder, du har taget."
  },
  "tourSkip": {
    "message": "SPRING OVER"
  },
  "tourNext": {
    "message": "Næste side"
  },
  "tourPrevious": {
    "message": "Forrige side"
  },
  "tourDone": {
    "message": "Færdig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ved at anvende Firefox Screenshots godkender du vores $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "vilkår"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "privatlivspolitik"
  },
  "libraryLabel": {
    "message": "Skærmbilleder"
  }
}PK
!<¦é	ǭ­&webextension/_locales/de/messages.json{
  "addonDescription": {
    "message": "Erstellen Sie Bildschirmfotos von vollständigen Webseiten oder Ausschnitten und speichern Sie diese temporär oder dauerhaft."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Bildschirmfoto aufnehmen"
  },
  "myShotsLink": {
    "message": "Meine Bildschirmfotos"
  },
  "screenshotInstructions": {
    "message": "Ziehen oder klicken Sie auf der Seite, um einen Bereich auszuwählen. Drücken Sie ESC zum Abbrechen."
  },
  "saveScreenshotSelectedArea": {
    "message": "Speichern"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sichtbaren Bereich speichern"
  },
  "saveScreenshotFullPage": {
    "message": "Gesamte Seite speichern"
  },
  "cancelScreenshot": {
    "message": "Abbrechen"
  },
  "downloadScreenshot": {
    "message": "Herunterladen"
  },
  "downloadOnlyNotice": {
    "message": "Sie sind aktuell im Modus „Nur herunterladen“."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots schaltet in diesen Fällen automatisch in den Modus „Nur herunterladen“:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In einem privaten Fenster."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies von Drittanbietern sind deaktiviert."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "„Chronik niemals anlegen“ ist aktiviert."
  },
  "downloadOnlyDetailsESR": {
    "message": "Sie verwenden Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uploads wurden deaktiviert."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link kopiert"
  },
  "notificationLinkCopiedDetails": {
    "message": "Der Link zu Ihrem Bildschirmfoto wurde in die Zwischenablage kopiert. Drücken Sie $META_KEY$-V zum Einfügen.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopieren"
  },
  "notificationImageCopiedTitle": {
    "message": "Bildschirmfoto kopiert"
  },
  "notificationImageCopiedDetails": {
    "message": "Ihr Bildschirmfoto wurde in die Zwischenablage kopiert. Drücken Sie Strg-V zum Einfügen.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Diese Grafik wurde auf $PIXELS$ px zugeschnitten.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Außer Betrieb."
  },
  "requestErrorDetails": {
    "message": "Wir konnten Ihr Bildschirmfoto leider nicht speichern. Bitte versuchen Sie es später erneut."
  },
  "connectionErrorTitle": {
    "message": "Es war keine Verbindung zu Ihren Bildschirmfotos möglich."
  },
  "connectionErrorDetails": {
    "message": "Bitte überprüfen Sie Ihre Internetverbindung. Wenn diese funktioniert, gibt es eventuell ein temporäres Problem mit dem Dienst von Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Ihr Bildschirmfoto konnte nicht gespeichert werden, weil ein Problem mit dem Dienst Firefox Screenshots aufgetreten ist. Bitte versuchen Sie es später erneut."
  },
  "unshootablePageErrorTitle": {
    "message": "Ein Bildschirmfoto dieser Seite ist nicht möglich."
  },
  "unshootablePageErrorDetails": {
    "message": "Dies ist keine Standard-Webseite, deshalb sind keine Bildschirmfotos von ihr möglich."
  },
  "selfScreenshotErrorTitle": {
    "message": "Sie können kein Bildschirmfoto einer Firefox-Screenshots-Seite machen!"
  },
  "emptySelectionErrorTitle": {
    "message": "Ihr Auswahlbereich ist zu klein"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots ist im Privaten Modus deaktiviert"
  },
  "privateWindowErrorDetails": {
    "message": "Wir bitten um Entschuldigung für diese Unannehmlichkeiten. Wir arbeiten daran, diese Funktion in zukünftigen Versionen zur Verfügung zu stellen."
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots funktioniert nicht richtig."
  },
  "genericErrorDetails": {
    "message": "Wir wissen auch nicht, was gerade passiert ist. Könnten Sie das Bildschirmfoto erneut oder auf einer anderen Seite aufnehmen?"
  },
  "tourBodyIntro": {
    "message": "Bildschirmfotos aufnehmen, speichern und teilen, ohne Firefox zu verlassen."
  },
  "tourHeaderPageAction": {
    "message": "Neue Speichermöglichkeit"
  },
  "tourBodyPageAction": {
    "message": "Erweitern Sie das Menü „Aktionen für Seite“ in der Adressleiste immer dann, wenn Sie ein Bildschirmfoto machen möchten."
  },
  "tourHeaderClickAndDrag": {
    "message": "Nehmen Sie auf, was Sie möchten"
  },
  "tourBodyClickAndDrag": {
    "message": "Klicken und ziehen Sie, um nur einen Teil einer Seite aufzunehmen. Sie können den Mauszeiger auch darüber bewegen, um Ihre Auswahl hervorzuheben."
  },
  "tourHeaderFullPage": {
    "message": "Fenster oder ganze Seiten speichern"
  },
  "tourBodyFullPage": {
    "message": "Nutzen Sie die Schaltflächen rechts oben, um den sichtbaren Bereich im Fenster oder eine ganze Seite zu speichern."
  },
  "tourHeaderDownloadUpload": {
    "message": "Wie Sie möchten"
  },
  "tourBodyDownloadUpload": {
    "message": "Speichern Sie Ihre zugeschnittenen Bildschirmfotos im Internet, sodass sie leicht zu teilen sind, oder laden Sie sie auf Ihren Computer herunter. Sie können auch auf die Schaltfläche „Meine Bildschirmfotos“ klicken, um alle Ihre Bildschirmfotos zu finden."
  },
  "tourSkip": {
    "message": "Überspringen"
  },
  "tourNext": {
    "message": "Nächste Folie"
  },
  "tourPrevious": {
    "message": "Vorherige Folie"
  },
  "tourDone": {
    "message": "Fertig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Durch die Verwendung von Firefox Screenshots stimmen Sie unseren $TERMSANDPRIVACYNOTICETERMSLINK$ und $TERMSANDPRIVACYNOTICEPRIVACYLINK$ zu.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Nutzungsbedingungen"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Datenschutzhinweis"
  },
  "libraryLabel": {
    "message": "Bildschirmfotos"
  }
}PK
!<f\ì`ÚÚ'webextension/_locales/dsb/messages.json{
  "addonDescription": {
    "message": "Wzejśo klipy a fota wobrazowki z weba a składujśo je nachylu abo na pśecej."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Foto wobrazowki gótowaś"
  },
  "myShotsLink": {
    "message": "Móje fota wobrazowki"
  },
  "screenshotInstructions": {
    "message": "Śěgniśo abo klikniśo na bok, aby wobcerk wubrał. Tłocćo na ESC, aby pśetergnuł."
  },
  "saveScreenshotSelectedArea": {
    "message": "Składowaś"
  },
  "saveScreenshotVisibleArea": {
    "message": "Widobny wobcerk składowaś"
  },
  "saveScreenshotFullPage": {
    "message": "Ceły bok składowaś"
  },
  "cancelScreenshot": {
    "message": "Pśetergnuś"
  },
  "downloadScreenshot": {
    "message": "Ześěgnuś"
  },
  "downloadOnlyNotice": {
    "message": "Tuchylu sćo w modusu „Jano ześěgnuś“."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots w slědujucych situacijach awtomatiski do modusa „Jano ześěgnuś“ pśešaltujo:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "W priwatnem woknje."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookieje tśeśich póbitowarjow su znjemóžnjone."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "„Se historiju nigda njespomnjeś“ jo zmóžnjone."
  },
  "downloadOnlyDetailsESR": {
    "message": "Wužywaśo Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nagraśa su znjemóžnjone."
  },
  "notificationLinkCopiedTitle": {
    "message": "Wótkaz kopěrowany"
  },
  "notificationLinkCopiedDetails": {
    "message": "Wótkaz k wašomu fotoju wobrazowki jo se do mjazywótkłada kopěrował. Tłocćo $META_KEY$-V, aby jen zasajźił.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopěrowaś"
  },
  "notificationImageCopiedTitle": {
    "message": "Foto kopěrowane"
  },
  "notificationImageCopiedDetails": {
    "message": "Wašo foto jo se do mjezywótkłada kopěrowało. Tłocćo $META_KEY$-V, aby jo zasajźił.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Toś ten wobraz jo se na $PIXELS$px pśirězał.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Njeźěła."
  },
  "requestErrorDetails": {
    "message": "Bóžko njejsmy mógli wašo foto wobrazowki składowaś. Pšosym wopytajśo pózdźej hyšći raz."
  },
  "connectionErrorTitle": {
    "message": "Njamóžomy z wašymi fotami wobrazowki zwězaś."
  },
  "connectionErrorDetails": {
    "message": "Pšosym pśekontrolěrujśo swój internetny zwisk. Jolic móžośo z internetom zwězaś, dajo snaź nachylny problem ze słužbu Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Njesjmy mógli swójo foto wobrazowki składowaś, dokulaž dajo problem ze słužbu Firefox Screenshots. Pšosym wopytajśo pózdźej hyšći raz."
  },
  "unshootablePageErrorTitle": {
    "message": "Foto wobrazowki toś togo boka njejo móžne."
  },
  "unshootablePageErrorDetails": {
    "message": "To njejo standardny webbok, togodla foto wobrazowki wót njeje njejo móžne."
  },
  "selfScreenshotErrorTitle": {
    "message": "Njamóžośo wobrazowku boka Firefox Screenshots fotografěrowaś!"
  },
  "emptySelectionErrorTitle": {
    "message": "Waš wuběrk jo pśemały"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots jo w priwatnem modusu znjemóžnjony"
  },
  "privateWindowErrorDetails": {
    "message": "Wódajśo pšosym wobuznosći. Źěłamy na toś tej funkciji za pśichodne wersije."
  },
  "genericErrorTitle": {
    "message": "Hopla! Firefox Screenshots njeźěła."
  },
  "genericErrorDetails": {
    "message": "Njejsmy se wěste, což jo se stało. Cośo hyšći raz wopytaś abo cośo drugi bok fotografěrowaś?"
  },
  "tourBodyIntro": {
    "message": "Gótujśo, składujśo a źělśo fota wobrazowki mimo až Firefox spušćaśo."
  },
  "tourHeaderPageAction": {
    "message": "Nowa wašnja składowanja"
  },
  "tourBodyPageAction": {
    "message": "Wócyńśo meni akcijow boka w adresowem pólu kuždy raz, gaž cośo foto worazowki gótowaś."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fotografěrujśo jadnorje, což cośo"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikniśo a ześěgniśo, aby źěl boka fotografěrował. Móžośo teke špěrku myški nad nim gibaś, aby swój wuběr wuzwignuł."
  },
  "tourHeaderFullPage": {
    "message": "Wokna abo cełe boki składowaś"
  },
  "tourBodyFullPage": {
    "message": "Wubjeŕśo tłocašk górjejce napšawo, aby widobny wobcerk we woknje abo ceły bok fotografěrowaś."
  },
  "tourHeaderDownloadUpload": {
    "message": "Tak, kaž se wam spódoba"
  },
  "tourBodyDownloadUpload": {
    "message": "Składujśo swóje pśirězane fota wobrazowki w interneśe, aby je lažcej źělił, abo ześěgniśo je na swójo licadło. Móžośo teke na tłocašk „Móje fota wobrazowki“ kliknuś, abye wšě fota wobrazowki namakał, kótarež sćo gótował."
  },
  "tourSkip": {
    "message": "Pśeskócyś"
  },
  "tourNext": {
    "message": "Pśiduce foto"
  },
  "tourPrevious": {
    "message": "Pjerwjejšne foto"
  },
  "tourDone": {
    "message": "Gótowo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Pśez wužywanje Firefox ScreenShots, zwolijośo do našych $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Wuměnjenja"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Powěźeńka priwatnosći"
  },
  "libraryLabel": {
    "message": "Fota wobrazowki"
  }
}PK
!<êMë LL&webextension/_locales/el/messages.json{
  "addonDescription": {
    "message": "Πραγματοποιήστε λήψη στιγμιοτύπων από το Διαδίκτυο και αποθηκεύστε τα προσωρινά ή μόνιμα."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Λήψη στιγμιότυπου"
  },
  "myShotsLink": {
    "message": "Οι λήψεις μου"
  },
  "screenshotInstructions": {
    "message": "Σύρετε ή κάντε κλικ στη σελίδα για να επιλέξετε μια περιοχή. Για ακύρωση πιέστε το πλήκτρο ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Αποθήκευση"
  },
  "saveScreenshotVisibleArea": {
    "message": "Αποθήκευση ορατής περιοχής"
  },
  "saveScreenshotFullPage": {
    "message": "Αποθήκευση ολόκληρης σελίδας"
  },
  "cancelScreenshot": {
    "message": "Ακύρωση"
  },
  "downloadScreenshot": {
    "message": "Λήψη"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Σε ένα παράθυρο ιδιωτικής περιήγησης."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Τα cookies τρίτων είναι απενεργοποιημένα."
  },
  "downloadOnlyDetailsESR": {
    "message": "Χρησιμοποιείτε το Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Οι μεταφορτώσεις έχουν απενεργοποιηθεί."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ο σύνδεσμος αντιγράφηκε"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ο σύνδεσμος προς την λήψη σας αντιγράφηκε στο πρόχειρο. Πατήστε $META_KEY$-V για επικόλληση.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Αντιγραφή"
  },
  "notificationImageCopiedTitle": {
    "message": "Το στιγμιότυπο αντιγράφηκε"
  },
  "imageCroppedWarning": {
    "message": "Αυτή η εικόνα έχει περικοπεί σε $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Εκτός λειτουργίας."
  },
  "requestErrorDetails": {
    "message": "Συγνώμη! Δεν μπορέσαμε να αποθηκεύουμε την λήψη σας. Προσπαθήστε ξανά αργότερα."
  },
  "connectionErrorTitle": {
    "message": "Δεν μπορούμε να συνδεθούμε στις λήψεις σας."
  },
  "connectionErrorDetails": {
    "message": "Ελέγξτε τη σύνδεσή σας στο Internet. Εάν είστε σε θέση να συνδεθείτε στο Internet, ίσως υπάρχει ένα προσωρινό πρόβλημα με την υπηρεσία Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Δεν μπορέσαμε να αποθηκεύσουμε την λήψη σας γιατί υπάρχει κάποιο πρόβλημα με την υπηρεσία Firefox Screenshots. Προσπαθήστε ξανά αργότερα."
  },
  "unshootablePageErrorTitle": {
    "message": "Δεν μπορούμε να λάβουμε στιγμιότυπο αυτής της σελίδας."
  },
  "unshootablePageErrorDetails": {
    "message": "Δεν μπορεί να γίνει λήψη στιγμιότυπου καθώς αυτή δεν είναι μια τυπική σελίδα του Διαδικτύου."
  },
  "selfScreenshotErrorTitle": {
    "message": "Δεν μπορεί να γίνει λήψη ενός στιγμιότυπου της σελίδας Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Η επιλογή σας είναι πολύ μικρή"
  },
  "privateWindowErrorTitle": {
    "message": "Το Screenshots είναι απενεργοποιημένο στη λειτουργία ιδιωτικής περιήγησης"
  },
  "privateWindowErrorDetails": {
    "message": "Λυπούμαστε για την ταλαιπωρία. Εργαζόμαστε πάνω σε αυτό το χαρακτηριστικό για μελλοντικές εκδόσεις."
  },
  "genericErrorTitle": {
    "message": "Ωχ! Κάτι πήγε στραβά στην υπηρεσία Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "Δεν είμαστε σίγουροι για το τι ακριβώς συνέβη. Προσπαθήστε ξανά ή κάντε λήψη σε μια άλλη σελίδα."
  },
  "tourBodyIntro": {
    "message": "Λήψη, αποθήκευση και διαμοιρασμός στιγμιοτύπων μέσα από το Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ένας νέος τρόπος αποθήκευσης"
  },
  "tourHeaderClickAndDrag": {
    "message": "Καταγράψτε αυτό που εσείς επιθυμείτε"
  },
  "tourBodyClickAndDrag": {
    "message": "Κάντε κλικ και σύρετε για την καταγραφή ενός τμήματος της σελίδας. Μπορείτε να επισημάνετε την επιλογή σας μετακινώντας τον ποντίκι σας επάνω της."
  },
  "tourHeaderFullPage": {
    "message": "Λήψη παραθύρων ή ολόκληρων σελίδων"
  },
  "tourBodyFullPage": {
    "message": "Επιλέξτε τα κουμπιά επάνω δεξιά για να καταγράψετε την ορατή περιοχή του παραθύρου ή να καταγράψετε μια ολόκληρη σελίδα."
  },
  "tourHeaderDownloadUpload": {
    "message": "Ακριβώς όπως το θέλετε"
  },
  "tourBodyDownloadUpload": {
    "message": "Αποθηκεύστε της λήψεις σας στο Διαδίκτυο για ευκολότερο διαμοιρασμό, η λήψη τους στον υπολογιστή σας. Μπορείτε να βρείτε όλες τις λήψεις σας πατώντας στο κουμπί «Οι λήψεις μου»."
  },
  "tourSkip": {
    "message": "Παράβλεψη"
  },
  "tourNext": {
    "message": "Επόμενη διαφάνεια"
  },
  "tourPrevious": {
    "message": "Προηγούμενη διαφάνεια"
  },
  "tourDone": {
    "message": "Τέλος"
  },
  "termsAndPrivacyNotice2": {
    "message": "Χρησιμοποιώντας το Firefox Screenshots, συμφωνείτε με τους $TERMSANDPRIVACYNOTICETERMSLINK$ και την $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Όρους"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Σημείωση απορρήτου"
  },
  "libraryLabel": {
    "message": "Στιγμιότυπα"
  }
}PK
!<R¾Òûû)webextension/_locales/en_GB/messages.json{
  "addonDescription": {
    "message": "Take clips and screenshots from the Web and save them temporarily or permanently."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Take a Screenshot"
  },
  "myShotsLink": {
    "message": "My Shots"
  },
  "screenshotInstructions": {
    "message": "Drag or click on the page to select a region. Press ESC to cancel."
  },
  "saveScreenshotSelectedArea": {
    "message": "Save"
  },
  "saveScreenshotVisibleArea": {
    "message": "Save visible"
  },
  "saveScreenshotFullPage": {
    "message": "Save full page"
  },
  "cancelScreenshot": {
    "message": "Cancel"
  },
  "downloadScreenshot": {
    "message": "Download"
  },
  "downloadOnlyNotice": {
    "message": "You are currently in Download-Only mode."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automatically changes to Download-Only mode in these situations:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In a Private Browsing window."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Third-party cookies are disabled."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Never remember history” is enabled."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link Copied"
  },
  "notificationLinkCopiedDetails": {
    "message": "The link to your shot has been copied to the clipboard. Press $META_KEY$-V to paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copy"
  },
  "notificationImageCopiedTitle": {
    "message": "Shot Copied"
  },
  "notificationImageCopiedDetails": {
    "message": "Your shot has been copied to the clipboard. Press $META_KEY$-V to paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "This image has been cropped to $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Out of order."
  },
  "requestErrorDetails": {
    "message": "Sorry! We couldn’t save your shot. Please try again later."
  },
  "connectionErrorTitle": {
    "message": "We can’t connect to your screenshots."
  },
  "connectionErrorDetails": {
    "message": "Please check your Internet connection. If you are able to connect to the Internet, there may be a temporary problem with the Firefox Screenshots service."
  },
  "loginErrorDetails": {
    "message": "We couldn’t save your shot because there is a problem with the Firefox Screenshots service. Please try again later."
  },
  "unshootablePageErrorTitle": {
    "message": "We can’t screenshot this page."
  },
  "unshootablePageErrorDetails": {
    "message": "This isn’t a standard Web page, so you can’t take a screenshot of it."
  },
  "selfScreenshotErrorTitle": {
    "message": "You can’t take a shot of a Firefox Screenshots page!"
  },
  "emptySelectionErrorTitle": {
    "message": "Your selection is too small"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots is disabled in Private Browsing Mode"
  },
  "privateWindowErrorDetails": {
    "message": "Sorry for the inconvenience. We are working on this feature for future releases."
  },
  "genericErrorTitle": {
    "message": "Whoa! Firefox Screenshots went haywire."
  },
  "genericErrorDetails": {
    "message": "We’re not sure what just happened. Care to try again or take a shot of a different page?"
  },
  "tourBodyIntro": {
    "message": "Take, save, and share screenshots without leaving Firefox."
  },
  "tourHeaderPageAction": {
    "message": "A new way to save"
  },
  "tourBodyPageAction": {
    "message": "Expand the page actions menu in the address bar any time you want to take a screenshot."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capture Just What You Want"
  },
  "tourBodyClickAndDrag": {
    "message": "Click and drag to capture just a portion of a page. You can also hover to highlight your selection."
  },
  "tourHeaderFullPage": {
    "message": "Capture Windows or Entire Pages"
  },
  "tourBodyFullPage": {
    "message": "Select the buttons in the upper right to capture the visible area in the window or to capture an entire page."
  },
  "tourHeaderDownloadUpload": {
    "message": "As You Like It"
  },
  "tourBodyDownloadUpload": {
    "message": "Save your cropped shots to the web for easier sharing, or download them to your computer. You also can click on the My Shots button to find all the shots you’ve taken."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Next Slide"
  },
  "tourPrevious": {
    "message": "Previous Slide"
  },
  "tourDone": {
    "message": "Done"
  },
  "termsAndPrivacyNotice2": {
    "message": "By using Firefox Screenshots, you agree to our $TERMSANDPRIVACYNOTICETERMSLINK$ and $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Terms"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Privacy Notice"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<¬7W££)webextension/_locales/en_US/messages.json{
  "addonDescription": {
    "message": "Take clips and screenshots from the Web and save them temporarily or permanently."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Take a Screenshot"
  },
  "myShotsLink": {
    "message": "My Shots"
  },
  "screenshotInstructions": {
    "message": "Drag or click on the page to select a region. Press ESC to cancel."
  },
  "saveScreenshotSelectedArea": {
    "message": "Save"
  },
  "saveScreenshotVisibleArea": {
    "message": "Save visible"
  },
  "saveScreenshotFullPage": {
    "message": "Save full page"
  },
  "cancelScreenshot": {
    "message": "Cancel"
  },
  "downloadScreenshot": {
    "message": "Download"
  },
  "downloadOnlyNotice": {
    "message": "You are currently in Download-Only mode."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automatically changes to Download-Only mode in these situations:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In a Private Browsing window."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Third-party cookies are disabled."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Never remember history” is enabled."
  },
  "downloadOnlyDetailsESR": {
    "message": "You are using Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uploads have been disabled."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link Copied"
  },
  "notificationLinkCopiedDetails": {
    "message": "The link to your shot has been copied to the clipboard. Press $META_KEY$-V to paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copy"
  },
  "notificationImageCopiedTitle": {
    "message": "Shot Copied"
  },
  "notificationImageCopiedDetails": {
    "message": "Your shot has been copied to the clipboard. Press $META_KEY$-V to paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "This image has been cropped to $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Out of order."
  },
  "requestErrorDetails": {
    "message": "Sorry! We couldn’t save your shot. Please try again later."
  },
  "connectionErrorTitle": {
    "message": "We can’t connect to your screenshots."
  },
  "connectionErrorDetails": {
    "message": "Please check your Internet connection. If you are able to connect to the Internet, there may be a temporary problem with the Firefox Screenshots service."
  },
  "loginErrorDetails": {
    "message": "We couldn’t save your shot because there is a problem with the Firefox Screenshots service. Please try again later."
  },
  "unshootablePageErrorTitle": {
    "message": "We can’t screenshot this page."
  },
  "unshootablePageErrorDetails": {
    "message": "This isn’t a standard Web page, so you can’t take a screenshot of it."
  },
  "selfScreenshotErrorTitle": {
    "message": "You can’t take a shot of a Firefox Screenshots page!"
  },
  "emptySelectionErrorTitle": {
    "message": "Your selection is too small"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots is disabled in Private Browsing Mode"
  },
  "privateWindowErrorDetails": {
    "message": "Sorry for the inconvenience. We are working on this feature for future releases."
  },
  "genericErrorTitle": {
    "message": "Whoa! Firefox Screenshots went haywire."
  },
  "genericErrorDetails": {
    "message": "We’re not sure what just happened. Care to try again or take a shot of a different page?"
  },
  "tourBodyIntro": {
    "message": "Take, save, and share screenshots without leaving Firefox."
  },
  "tourHeaderPageAction": {
    "message": "A new way to save"
  },
  "tourBodyPageAction": {
    "message": "Expand the page actions menu in the address bar any time you want to take a screenshot."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capture Just What You Want"
  },
  "tourBodyClickAndDrag": {
    "message": "Click and drag to capture just a portion of a page. You can also hover to highlight your selection."
  },
  "tourHeaderFullPage": {
    "message": "Capture Windows or Entire Pages"
  },
  "tourBodyFullPage": {
    "message": "Select the buttons in the upper right to capture the visible area in the window or to capture an entire page."
  },
  "tourHeaderDownloadUpload": {
    "message": "As You Like It"
  },
  "tourBodyDownloadUpload": {
    "message": "Save your cropped shots to the web for easier sharing, or download them to your computer. You also can click on the My Shots button to find all the shots you’ve taken."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Next Slide"
  },
  "tourPrevious": {
    "message": "Previous Slide"
  },
  "tourDone": {
    "message": "Done"
  },
  "termsAndPrivacyNotice2": {
    "message": "By using Firefox Screenshots, you agree to our $TERMSANDPRIVACYNOTICETERMSLINK$ and $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Terms"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Privacy Notice"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<Êîš
&webextension/_locales/eo/messages.json{
  "addonDescription": {
    "message": "Prenu eltondaĵon aŭ faru ekrankopiojn de retpaĝoj kaj konservu ilin ĉu daŭre ĉu provizore."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Fari ekrankopion"
  },
  "myShotsLink": {
    "message": "Miaj ekrankopioj"
  },
  "screenshotInstructions": {
    "message": "Trenu aŭ alklaku sur la paĝo por elekti areon. Premu ESK por nuligi."
  },
  "saveScreenshotSelectedArea": {
    "message": "Konservi"
  },
  "saveScreenshotVisibleArea": {
    "message": "Konservi tion, kio videblas"
  },
  "saveScreenshotFullPage": {
    "message": "Konservi tutan paĝon"
  },
  "cancelScreenshot": {
    "message": "Nuligi"
  },
  "downloadScreenshot": {
    "message": "Elŝuti"
  },
  "downloadOnlyNotice": {
    "message": "Vi estas nun en la reĝimo \"Nur elŝutoj\"."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots aŭtomate transiras al reĝimo \"Nur elŝutoj\" en la jenaj situacioj:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "en fenestro de privata retumo"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "se nerektaj kuketoj estas malaktivaj."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Neniam memori historion” estas aktiva."
  },
  "downloadOnlyDetailsESR": {
    "message": "Vi uzas Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "La alŝutoj estis malaktivigitaj."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ligilo kopiita"
  },
  "notificationLinkCopiedDetails": {
    "message": "La ligilo al via ekrankopio estis kopiita al la tondujo. Premu $META_KEY$-V por alglui.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopii"
  },
  "notificationImageCopiedTitle": {
    "message": "Ekrankopio kopiita"
  },
  "notificationImageCopiedDetails": {
    "message": "Via ekrankopio estis kopiita al la tondujo. Premu $META_KEY$-V por alglui.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tiu ĉi bildo estis pritondita je $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ne funkcianta."
  },
  "requestErrorDetails": {
    "message": "Bedaŭrinde ni ne povis konservi vian ekrankopion. Bonvolu klopodi denove poste."
  },
  "connectionErrorTitle": {
    "message": "Ni ne povas konektiĝi al viaj ekrankopioj."
  },
  "connectionErrorDetails": {
    "message": "Bonvolu kontroli vian retaliron. Se vi povas konektiĝi al la reto, eble estas provizora problemo kun la servo de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Ni ne povis konservi vian ekrankopion ĉar estis problemo kun la servo de Firefox Screenshots. Bonvolu klopodi denove poste."
  },
  "unshootablePageErrorTitle": {
    "message": "Ni ne povas fari ekrankopion de tiu ĉi paĝo."
  },
  "unshootablePageErrorDetails": {
    "message": "Tiu ĉi ne estas norma retpaĝo, do vi ne povas fari ekrankopion de ĝi."
  },
  "selfScreenshotErrorTitle": {
    "message": "Vi ne povas fari ekrankopion de paĝo de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Via elektita areo estas tro eta"
  },
  "privateWindowErrorTitle": {
    "message": "Ekrankopioj estas malaktivaj en la reĝimo de privata retumo"
  },
  "privateWindowErrorDetails": {
    "message": "Bonvolu pardoni la ĝenon. Ni prilaboras tiun ĉi trajton por venontaj eldonoj."
  },
  "genericErrorTitle": {
    "message": "Ŭoo! Firefox Screenshots tute frenezis."
  },
  "genericErrorDetails": {
    "message": "Ni ne tro certas, kio ĵus okazis. Ĉu vi povus klopodi denove aŭ fari ekrankopion de alia paĝo?"
  },
  "tourBodyIntro": {
    "message": "Faru, konservu kaj dividu ekrankopiojn sen forlasi Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Nova maniero konservi ekrankopiojn"
  },
  "tourBodyPageAction": {
    "message": "Kiam vi volas fari ekrankopion, iru al la menuo «Retpaĝaj agoj» en la adresa strio."
  },
  "tourHeaderClickAndDrag": {
    "message": "Kopiu nur tion, kion vi volas."
  },
  "tourBodyClickAndDrag": {
    "message": "Alklaku kaj trenu por kopii nur parton de paĝo. Vi povas ankaŭ ŝvebi por elstarigi vian elekton."
  },
  "tourHeaderFullPage": {
    "message": "Kapti fenestrojn aŭ tutaj paĝojn"
  },
  "tourBodyFullPage": {
    "message": "Elektu la butonojn supre kaj dekstre por kapti la videblan areon en la fenestro aŭ por kapti tutan paĝon."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kiel vi volas"
  },
  "tourBodyDownloadUpload": {
    "message": "Konservu vian eltonditajn ekrankopiojn en la reto, por pli facile dividi ilin, aŭ elŝutu ilin al via komputilo. Vi ankaŭ povas alklaki la butonon 'Miaj ekrankopioj' por trovi ĉiujn ekrankopiojn faritajn de vi."
  },
  "tourSkip": {
    "message": "Pretersalti"
  },
  "tourNext": {
    "message": "Venonta ekrano"
  },
  "tourPrevious": {
    "message": "Antaŭa ekrano"
  },
  "tourDone": {
    "message": "Farita"
  },
  "termsAndPrivacyNotice2": {
    "message": "Se vi uzas Firefox Screenshots, vi akceptas nian $TERMSANDPRIVACYNOTICETERMSLINK$ kaj $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "kondiĉojn"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "rimarkon pri privateco"
  },
  "libraryLabel": {
    "message": "Ekrankopioj"
  }
}PK
!<K¹(‹ÔÔ)webextension/_locales/es_AR/messages.json{
  "addonDescription": {
    "message": "Tomá imágenes y capturas de la web y guardalos temporal o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Hacer captura de pantalla"
  },
  "myShotsLink": {
    "message": "Mis capturas"
  },
  "screenshotInstructions": {
    "message": "Arrastrá o hacé clic en la página para seleccionar una región. Presioná ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descargar"
  },
  "downloadOnlyNotice": {
    "message": "Estás actualmente en modo solo descargas."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots cambia automáticamente al modo solo descargas en estas situaciones:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En una ventana de navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de terceros están deshabilitadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Nunca recordar historial” está habilitado."
  },
  "downloadOnlyDetailsESR": {
    "message": "Está usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Las cargas de archivos están desactivadas."
  },
  "notificationLinkCopiedTitle": {
    "message": "Enlace copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "El enlace a la captura ha sido copiado al portapapeles. Presioná $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu captura ha sido copiada al portapapeles. Presioná $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagen ha sido recortada a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "No funciona."
  },
  "requestErrorDetails": {
    "message": "¡Perdón! No pudimos guardar la captura. Intentá más tarde."
  },
  "connectionErrorTitle": {
    "message": "No podemos conectar a las capturas de pantalla."
  },
  "connectionErrorDetails": {
    "message": "Verificá la conexión a Internet. Si te podés conectar a Internet, hay un problema temporal con el servicio de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "No pudimos guardar la captura porque hay un problema con el servicio de Firefox Screenshots. Intentá más tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "No podemos capturar esta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta no es una página web estándar, así que no podemos guardar una captura."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡No se puede hacer una captura de la página de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "La selección es demasiado chica"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots está deshabilitado en el modo de navegación privada"
  },
  "privateWindowErrorDetails": {
    "message": "Lamentamos el inconveniente. Estamos trabajando en esta característica para versiones futuras."
  },
  "genericErrorTitle": {
    "message": "¡Apa! Firefox Screenshots se volvió loco."
  },
  "genericErrorDetails": {
    "message": "No estamos seguros de lo que pasó. ¿Querés intenar de nuevo o tomar una captura de una página diferente?"
  },
  "tourBodyIntro": {
    "message": "Hacer, guardar y compartir capturas de pantalla sin dejar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una nueva forma de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expandí el menú de acciones de página en la barra de direcciones cuando quieras tomar una captura."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capturar sólo lo que querés"
  },
  "tourBodyClickAndDrag": {
    "message": "Hacé clic y arrastrá para capturar una porción de la página. También podés pasar por encima para resaltar la selección."
  },
  "tourHeaderFullPage": {
    "message": "Capturar ventanas o páginas enteras"
  },
  "tourBodyFullPage": {
    "message": "Seleccioná los botones arriba a la derecha para capturar el área visible en la ventana o la página completa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como te guste"
  },
  "tourBodyDownloadUpload": {
    "message": "Guardá tus capturas recortadas a la web para compartir o descargarlas más fácilmente a tu computadora. También podés hacer clic en el botón Mis capturas para encontrar todas las capturas hechas."
  },
  "tourSkip": {
    "message": "SALTEAR"
  },
  "tourNext": {
    "message": "Próxima diapositiva"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Listo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Al usar Firefox Screenshots, aceptás los $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Nota de privacidad"
  },
  "libraryLabel": {
    "message": "Capturas"
  }
}PK
!<|©FƒZZ)webextension/_locales/es_CL/messages.json{
  "addonDescription": {
    "message": "Toma capturas de un sitio Web para guardarlas de forma temporal o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Tomar una captura de pantalla"
  },
  "myShotsLink": {
    "message": "Mis capturas"
  },
  "screenshotInstructions": {
    "message": "Arrastra o haz clic en la página para seleccionar una región. Presiona ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar lo visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar la página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descargar"
  },
  "downloadOnlyNotice": {
    "message": "Actualmente estás en el modo de solo descarga."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots cambia automáticamente al modo de solo descarga en estas situaciones:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En una ventana de navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de terceros desactivadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Al estar activado \"Nunca recordar el historial\"."
  },
  "downloadOnlyDetailsESR": {
    "message": "Estás usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Las subidas han sido desactivadas."
  },
  "notificationLinkCopiedTitle": {
    "message": "Enlace copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "El enlace a tu captura ha sido copiado al portapapeles. Presiona $META_KEY$-V para pegarla.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu captura ha sido copiada al portapapeles. Presiona $META_KEY$-V para pegarla.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagen ha sido recortada a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Fuera de orden."
  },
  "requestErrorDetails": {
    "message": "¡Lo sentimos! No pudimos guardar tu captura. Por favor, vuelve a intentarlo más tarde."
  },
  "connectionErrorTitle": {
    "message": "No podemos conectar a tus capturas."
  },
  "connectionErrorDetails": {
    "message": "Por favor, revisa tu conexión a Internet. Si eres capaz de conectarte a Internet, puede que haya un problema temporal con el servicio de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "No pudimos guardar tu captura porque hay un problema con el servicio de Firefox Screenshots. Por favor, vuelve a intentarlo más tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "No podemos capturar esta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta no es una página Web estándar, por lo que no puedes tomar una captura de ella."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡No puedes tomar una captura de una página de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tu selección es muy pequeña"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots está desactivado en el modo de navegación privada"
  },
  "privateWindowErrorDetails": {
    "message": "Disculpa las molestias. Estamos trabajando en esta función para una futura versión."
  },
  "genericErrorTitle": {
    "message": "¡Guau! Firefox Screenshots se copetió."
  },
  "genericErrorDetails": {
    "message": "No estamos seguros de lo que sucedió. ¿Te importaría volver a intentarlo o tomar una captura de una página diferente?"
  },
  "tourBodyIntro": {
    "message": "Toma, guarda y comparte capturas sin salir de Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una nueva forma de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expande el menú de acciones de página en la barra de direcciones en cualquier momento en que quieras tomar una captura."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captura lo que necesitas"
  },
  "tourBodyClickAndDrag": {
    "message": "Haz clic y arrastra para captura justo una parte de la página. También puedes colocarte sobre una parte para destacar tu selección."
  },
  "tourHeaderFullPage": {
    "message": "Captura ventanas o páginas completas"
  },
  "tourBodyFullPage": {
    "message": "Selecciona los botones en la parte superior derecha para capturar el área visible ne la ventana o para capturar una página completa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como tu quieras"
  },
  "tourBodyDownloadUpload": {
    "message": "Guarda tus capturas recortadas en la Web para compartirlas fácilmente o descargarlas a tu computador. También puedes hacer clic en el botón Mis capturas para encontrar todas las que hayas tomado."
  },
  "tourSkip": {
    "message": "SALTAR"
  },
  "tourNext": {
    "message": "Siguiente diapositiva"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Hecho"
  },
  "termsAndPrivacyNotice2": {
    "message": "Al usar Firefox Screenshots, aceptas nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y el $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Aviso de privacidad"
  },
  "libraryLabel": {
    "message": "Capturas de pantalla"
  }
}PK
!<\V Q**)webextension/_locales/es_ES/messages.json{
  "addonDescription": {
    "message": "Haz capturas y recortes de la web y guárdalos temporal o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Hacer una captura de pantalla"
  },
  "myShotsLink": {
    "message": "Mis capturas"
  },
  "screenshotInstructions": {
    "message": "Arrastra o haz clic en la página para seleccionar una región. Pulsa ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descargar"
  },
  "downloadOnlyNotice": {
    "message": "Estás en modo Solo descargas."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se cambia automáticamente al modo Solo descargas en los siguientes casos:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Durante la navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cuando las cookies de terceros están deshabilitadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Cuando está activada la opción “No recordar nunca el historial”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Estás usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Las cargas se han deshabilitado."
  },
  "notificationLinkCopiedTitle": {
    "message": "Enlace copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "Se ha copiado el enlace a la captura en el portapapeles. Pulsa $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu captura ha ido copiada al portapapeles. Presiona $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Se recortó la imagen a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "No funciona."
  },
  "requestErrorDetails": {
    "message": "¡Lo sentimos! No hemos podido guardar tu captura. Inténtalo más tarde."
  },
  "connectionErrorTitle": {
    "message": "No podemos acceder a tus capturas de pantalla."
  },
  "connectionErrorDetails": {
    "message": "Comprueba tu conexión a Internet. Si puedes conectarte, puede que haya un problema temporal con el servicio de capturas de pantalla de Firefox."
  },
  "loginErrorDetails": {
    "message": "No se pudo guardar la captura porque hay un problema con el servicio Firefox Screenshots. Inténtalo más tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "No podemos hacer una captura de esta página."
  },
  "unshootablePageErrorDetails": {
    "message": "No es una página web común, por lo que no podemos hacer captura de pantalla."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡No puedes hacer una captura de la página de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tu selección es demasiado pequeña"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots está desactivado en el modo de navegación privada"
  },
  "privateWindowErrorDetails": {
    "message": "Sentimos las molestias. Estamos trabajando en esta característica para próximos lanzamientos."
  },
  "genericErrorTitle": {
    "message": "¡Vaya! Firefox Screenshots se ha vuelto loco."
  },
  "genericErrorDetails": {
    "message": "No estamos seguros de lo que acaba de pasar. ¿Te importa volver a intentarlo o hacer una captura de otra página?"
  },
  "tourBodyIntro": {
    "message": "Hacer, guardar y compartir capturas de pantalla sin salir de Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una nueva forma de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expande el menú de acciones de la página en la barra de direcciones cuando quieras hacer una captura."
  },
  "tourHeaderClickAndDrag": {
    "message": "Haz capturas solo de lo que tú quieras"
  },
  "tourBodyClickAndDrag": {
    "message": "Haz clic y arrastra para capturar solo una parte de la página. También puedes pasar por encima para resaltar tu selección."
  },
  "tourHeaderFullPage": {
    "message": "Haz capturas de ventanas o de páginas completas"
  },
  "tourBodyFullPage": {
    "message": "Selecciona los botones de la parte superior derecha para capturar el área visible en la ventana o en la página completa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como más te guste"
  },
  "tourBodyDownloadUpload": {
    "message": "Guarda las capturas de la Web recortadas para compartirlas mejor o descárgalas en tu ordenador. También puedes hacer clic en Mis capturas para ver todas las capturas que has hecho."
  },
  "tourSkip": {
    "message": "Saltar"
  },
  "tourNext": {
    "message": "Diapositiva siguiente"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Hecho"
  },
  "termsAndPrivacyNotice2": {
    "message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Aviso de privacidad"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<5s¤²ää)webextension/_locales/es_MX/messages.json{
  "addonDescription": {
    "message": "Tomar clips y capturas de pantalla de la web y guardarlos temporalmente o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Tomar captura de pantalla"
  },
  "myShotsLink": {
    "message": "Mis capturas"
  },
  "screenshotInstructions": {
    "message": "Arrastra o haz clic en la página para seleccionar la región. Presiona ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar visible"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descarga"
  },
  "downloadOnlyNotice": {
    "message": "Estás en modo de Solo-Descargas."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automáticamente cambia al modo Solo-Descarga en estas situaciones:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "En una ventana de navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de terceros están desactivadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Nunca recordar el historial” está habilitado."
  },
  "downloadOnlyDetailsESR": {
    "message": "Estás usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Las cargas de archivos están deshabilitadas."
  },
  "notificationLinkCopiedTitle": {
    "message": "Enlace copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "El enlace que has capturado ha sido copiado al portapapeles. Presiona $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu captura ha sido copiada al portapapeles. Presiona $META_KEY$-V para pegar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagen ha sido recortada a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Fuera de orden."
  },
  "requestErrorDetails": {
    "message": "¡Lo sentimos! No pudimos guardar tu captura. Por favor, intenta de nuevo más tarde."
  },
  "connectionErrorTitle": {
    "message": "No podemos conectar a tus capturas de pantalla."
  },
  "connectionErrorDetails": {
    "message": "Por favor, revisa tu conexión a Internet. Si eres capaz de conectarte a Internet, puede ser que exista un error temporal con el servicio de capturas de pantalla de Firefox."
  },
  "loginErrorDetails": {
    "message": "No pudimos guardar tu captura porque hay un problema con el servicio de capturas de pantalla de Firefox. Por favor, intenta de nuevo más tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "No podemos realizar una captura de pantalla a esta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta no es una página web estándar, por lo tanto no podemos tomar una captura de pantalla de ella."
  },
  "selfScreenshotErrorTitle": {
    "message": "¡No puedes tomar una captura de la página de capturas de pantalla de Firefox!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tu selección es demasiado pequeña"
  },
  "privateWindowErrorTitle": {
    "message": "La captura de pantalla está deshabilitada en el modo navegación privada"
  },
  "privateWindowErrorDetails": {
    "message": "Disculpen las molestias. Estamos trabajando en esta característica para las versiones futuras."
  },
  "genericErrorTitle": {
    "message": "¡Oye! Las capturas de pantalla de Firefox salieron mal."
  },
  "genericErrorDetails": {
    "message": "No estamos seguros qué pasó. ¿Te importaría intentarlo de nuevo o tomar una captura de una página diferente?"
  },
  "tourBodyIntro": {
    "message": "Toma, guarda y comparte capturas de pantalla sin dejar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Una nueva forma de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expande el menú de acciones de la página en la barra de direcciones en cualquier momento que quieras tomar una captura de pantalla."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captura sólo lo que necesitas"
  },
  "tourBodyClickAndDrag": {
    "message": "Haz clic y arrastra para capturas sólo una parte de la página. También puedes desplazarte para resaltar tu selección."
  },
  "tourHeaderFullPage": {
    "message": "Captura ventanas o páginas enteras"
  },
  "tourBodyFullPage": {
    "message": "Selecciona los botones en la parte superior derecha para capturar el área visible en la ventana o para capturar una página completa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como te gusta"
  },
  "tourBodyDownloadUpload": {
    "message": "Guarda tus capturas recortadas en la Web para compartirlas más fácilmente o descárgalas en tu computadora. También puedes hacer clic en el botón Mis Capturas para encontrar todas las fotos que has tomado."
  },
  "tourSkip": {
    "message": "Ignorar"
  },
  "tourNext": {
    "message": "Siguiente diapositiva"
  },
  "tourPrevious": {
    "message": "Diapositiva anterior"
  },
  "tourDone": {
    "message": "Terminado"
  },
  "termsAndPrivacyNotice2": {
    "message": "Al usar Firefox Screenshots, estás de acuerdo con nuestros $TERMSANDPRIVACYNOTICETERMSLINK$ y $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Términos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Aviso de privacidad"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<&ææ&webextension/_locales/et/messages.json{
  "addonDescription": {
    "message": "Tee veebist klippe või ekraanipilte ning salvesta need ajutiselt või püsivalt."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Tee ekraanipilt"
  },
  "myShotsLink": {
    "message": "Minu pildid"
  },
  "screenshotInstructions": {
    "message": "Ala valimiseks klõpsavõi lohista lehel. Tühistamiseks vajuta ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salvesta"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salvesta nähtav"
  },
  "saveScreenshotFullPage": {
    "message": "Salvesta terve leht"
  },
  "cancelScreenshot": {
    "message": "Tühista"
  },
  "downloadScreenshot": {
    "message": "Laadi alla"
  },
  "downloadOnlyNotice": {
    "message": "Oled hetkel režiimis, kus saab vaid alla laadida."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots lülitub sellesse režiimi automaatselt, kui:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "oled privaatse veebilehitsemise aknas"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "kolmanda osapoole küpsised on keelatud"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“ei säilita ajalugu” on lubatud"
  },
  "downloadOnlyDetailsESR": {
    "message": "Sa kasutad Firefox ESRi."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Üleslaadimised on keelatud."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link kopeeriti"
  },
  "notificationLinkCopiedDetails": {
    "message": "Link sinu pildile kopeeriti lõikepuhvrisse. Asetamiseks vajuta $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopeeri"
  },
  "notificationImageCopiedTitle": {
    "message": "Pilt kopeeriti"
  },
  "notificationImageCopiedDetails": {
    "message": "Sinu pilt kopeeriti vahemällu. Asetamiseks vajuta $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "See pilt on vähendatud $PIXELS$-le pikslile.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tekkis viga."
  },
  "requestErrorDetails": {
    "message": "Vabandame! Me ei suutnud su pilti salvestada. Palun proovi hiljem uuesti."
  },
  "connectionErrorTitle": {
    "message": "Ühendumine sinu ekraanipiltidega ei õnnestunud."
  },
  "connectionErrorDetails": {
    "message": "Palun kontrolli internetiühenduse toimimist. Kui saad internetiga ühendust, siis võib tegemist olla Firefox Screenshots teenuse ajutise probleemiga."
  },
  "loginErrorDetails": {
    "message": "Ekraanipildi salvestamine ebaõnnestus Firefox Screenshots teenuse probleemi tõttu. Palun proovi hiljem uuesti."
  },
  "unshootablePageErrorTitle": {
    "message": "Sellest lehest ei saa ekraanipilti teha."
  },
  "unshootablePageErrorDetails": {
    "message": "Tegemist pole standardse veebilehega, seetõttu ei saa sellest ekraanipilti teha."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots lehest ei saa ekraanipilti teha!"
  },
  "emptySelectionErrorTitle": {
    "message": "Valik on liiga väike"
  },
  "privateWindowErrorTitle": {
    "message": "Ekraanipilte ei saa privaatsel veebilehitsemisel teha"
  },
  "privateWindowErrorDetails": {
    "message": "Vabandame tüli tekitamise pärast. Töötame selle võimaluse lisamiseks tulevikus."
  },
  "genericErrorTitle": {
    "message": "Oi-oi! Firefox Screenshots läks sassi."
  },
  "genericErrorDetails": {
    "message": "Me pole kindlad, mis just juhtus. Proovid ehk uuesti või teed ekraanipildi mõnest teisest lehest?"
  },
  "tourBodyIntro": {
    "message": "Tee, salvesta ja jaga ekraanipilte Firefoxist lahkumata."
  },
  "tourHeaderPageAction": {
    "message": "Uus viis salvestamiseks"
  },
  "tourBodyPageAction": {
    "message": "Laienda lehe tegevuste menüüd aadressiribal, kui soovid ekraanipildi teha."
  },
  "tourHeaderClickAndDrag": {
    "message": "Salvesta just seda, mida soovid"
  },
  "tourBodyClickAndDrag": {
    "message": "Klõpsa ja lohista lehe osa valimiseks. Samuti võid valiku esile toomiseks kursorit selle kohal hoida."
  },
  "tourHeaderFullPage": {
    "message": "Salvesta aknaid või terveid lehti"
  },
  "tourBodyFullPage": {
    "message": "Kasuta nuppe ülal paremal aknas nähtava ala või terve lehe salvestamiseks."
  },
  "tourHeaderDownloadUpload": {
    "message": "Nii, kuidas sulle meeldib"
  },
  "tourBodyDownloadUpload": {
    "message": "Salvesta kärbitud pilte lihtsamaks jagamiseks veebi või laadi need alla enda arvutisse. Võid ka klõpsata Minu pildid nupul kõigi tehtud piltide vaatamiseks."
  },
  "tourSkip": {
    "message": "Jäta vahele"
  },
  "tourNext": {
    "message": "Järgmine slaid"
  },
  "tourPrevious": {
    "message": "Eelmine slaid"
  },
  "tourDone": {
    "message": "Valmis"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots'i kasutades nõustud meie $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "kasutustingimuste"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "privaatsuspoliitikaga"
  },
  "libraryLabel": {
    "message": "Ekraanipildid"
  }
}PK
!<ºžÉùüü&webextension/_locales/eu/messages.json{
  "addonDescription": {
    "message": "Hartu webetik pantaila-zatiak eta -argazkiak eta gorde aldi baterako edo behin betiko."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Hartu pantaila-argazkia"
  },
  "myShotsLink": {
    "message": "Nire argazkiak"
  },
  "screenshotInstructions": {
    "message": "Eremu bat hautatzeko, arrastatu edo egin klik orrian. Uzteko, sakatu ESK."
  },
  "saveScreenshotSelectedArea": {
    "message": "Gorde"
  },
  "saveScreenshotVisibleArea": {
    "message": "Gorde ikusgai dagoena"
  },
  "saveScreenshotFullPage": {
    "message": "Gorde orri osoa"
  },
  "cancelScreenshot": {
    "message": "Utzi"
  },
  "downloadScreenshot": {
    "message": "Deskargatu"
  },
  "notificationLinkCopiedTitle": {
    "message": "Lotura kopiatuta"
  },
  "notificationLinkCopiedDetails": {
    "message": "Zure argazkirako lotura arbelean kopiatu da. Itsasteko, sakatu $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Zerbitzuz kanpo."
  },
  "requestErrorDetails": {
    "message": "Barkatu! Ezin izan dugu zure argazkia gorde. Saiatu berriro geroago."
  },
  "connectionErrorTitle": {
    "message": "Ezin gara zure pantaila-argazkietara konektatu."
  },
  "connectionErrorDetails": {
    "message": "Egiaztatu zure Internet-konexioa. Internetera konekta bazaitezke, aldi baterako arazo bat egon liteke Firefox Screenshots zerbitzuarekin."
  },
  "loginErrorDetails": {
    "message": "Ezin izan dugu zure argazkia gorde Firefox Screenshots zerbitzuarekin arazo bat dagoelako. Saiatu berriro geroago mesedez."
  },
  "unshootablePageErrorTitle": {
    "message": "Ezin dugu orri honen pantaila-argazkia hartu."
  },
  "unshootablePageErrorDetails": {
    "message": "Hau ez da web orri arrunt bat eta beraz, ezin duzu bere pantaila-argazkirik hartu."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ezin duzu Firefox Screenshots-eko orri baten pantaila-argazkirik hartu!"
  },
  "emptySelectionErrorTitle": {
    "message": "Zure hautapena txikiegia da"
  },
  "privateWindowErrorTitle": {
    "message": "Pantaila-argazkien zerbitzua desgaituta dago nabigatze pribatuko moduan"
  },
  "privateWindowErrorDetails": {
    "message": "Barkatu eragozpenak. Eginbide honetan lanean ari gara etorkizuneko bertsio baterako."
  },
  "genericErrorTitle": {
    "message": "Kontxo! Firefox Screenshots zerbitzua pikutara joan da."
  },
  "genericErrorDetails": {
    "message": "Ez gaude ziur zer gertatu den. Axola dizu berriro saiatzea edo beste orri baten argazkia hartzea?"
  },
  "tourBodyIntro": {
    "message": "Hartu, gorde eta partekatu pantaila-argazkiak Firefox utzi gabe."
  },
  "tourHeaderPageAction": {
    "message": "Gordetzeko modu berri bat"
  },
  "tourBodyPageAction": {
    "message": "Pantaila-argazki bat hartu nahi duzun bakoitzean, zabaldu orri-ekintzen menua helbide-barran."
  },
  "tourHeaderClickAndDrag": {
    "message": "Hartu soilik nahi duzunaren argazkia"
  },
  "tourBodyClickAndDrag": {
    "message": "Egin klik eta arrastatu soilik orriaren zati baten argazkia hartzeko. Sagua gainean jar dezakezu zure hautapena nabarmentzeko."
  },
  "tourHeaderFullPage": {
    "message": "Hartu leiho edo orri osoen argazkiak"
  },
  "tourBodyFullPage": {
    "message": "Hautatu goian eskuinean dauden botoiak leihoko eremu ikusgarriaren edo orri osoaren argazkia hartzeko."
  },
  "tourHeaderDownloadUpload": {
    "message": "Nahi duzun bezala"
  },
  "tourBodyDownloadUpload": {
    "message": "Gorde webean zure moztutako argazkiak, hauek errazago partekatu edo zure ordenagailura deskargatzeko. 'Nire argazkiak' botoian klik eginda hartutako argazki guztiak aurkituko dituzu."
  },
  "tourSkip": {
    "message": "SALTATU"
  },
  "tourNext": {
    "message": "Hurrengo diapositiba"
  },
  "tourPrevious": {
    "message": "Aurreko diapositiba"
  },
  "tourDone": {
    "message": "Eginda"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots erabilita, gure $TERMSANDPRIVACYNOTICETERMSLINK$ eta $TERMSANDPRIVACYNOTICEPRIVACYLINK$ onartzen dituzu.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Baldintzak"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Pribatutasun-oharra"
  },
  "libraryLabel": {
    "message": "Pantaila-argazkiak"
  }
}PK
!<ÅQUˆˆ&webextension/_locales/fa/messages.json{
  "addonDescription": {
    "message": "از وب عکس بگیرید و کلیپ بسازید و به صورت موقت یا دایمی ذخیره کنید."
  },
  "addonAuthorsList": {
    "message": "موزیلا <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "از صفحه عکس بگیرید"
  },
  "myShotsLink": {
    "message": "عکس‌های من"
  },
  "screenshotInstructions": {
    "message": "با کشیدن یا کلیک کردن روی صفحه یک منطقه را انتخاب کنید. برای لغو، ESC را فشار دهید."
  },
  "saveScreenshotSelectedArea": {
    "message": "ذخیره"
  },
  "saveScreenshotVisibleArea": {
    "message": "ذخیره ناحیه قابل مشاهده"
  },
  "saveScreenshotFullPage": {
    "message": "ذخیره صفحه کامل"
  },
  "cancelScreenshot": {
    "message": "لغو"
  },
  "downloadScreenshot": {
    "message": "دریافت"
  },
  "downloadOnlyNotice": {
    "message": "شما در حال حاضر در حالت فقط-دریافت هستید."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots در خصوص چنین موقعیتی به صورت خودکارحالت را به تنها دریافت تبدیل می‌کند:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "در پنجره‌های مرور ناشناس."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "کوکی‌های شخص ثالث غیرفعال شده باشند."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "امکان «هیچ‌وقت تاریخچه ذخیره نشود» فعال باشد."
  },
  "downloadOnlyDetailsESR": {
    "message": "شما از فایرفاکس ESR استفاده می‌کنید."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "بارگیری ها غیرفعال شده اند."
  },
  "notificationLinkCopiedTitle": {
    "message": "پیوند کپی شد"
  },
  "notificationLinkCopiedDetails": {
    "message": "لینک عکس شما در کلیپ‌بورد رونوشت شد. $META_KEY$-V را برای جای‌گذاری فشار دهید.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "رونوشت"
  },
  "notificationImageCopiedTitle": {
    "message": "رونوشت تصویر تهیه شد"
  },
  "notificationImageCopiedDetails": {
    "message": "عکس شما در کلیپ‌بورد رونوشت شد. $META_KEY$-V را برای جای‌گذاری فشار دهید.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "این تصویر برید شده است به $PIXELS$ پیکسل.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "خارج از سرویس."
  },
  "requestErrorDetails": {
    "message": "متاسفم! نتوانستیم عکس شما را ذخیره کنیم. لطفاً بعدا دوباره تلاش کنید."
  },
  "connectionErrorTitle": {
    "message": "نمی‌توانیم به تصاویر صفحه شما متصل شویم."
  },
  "connectionErrorDetails": {
    "message": "لطفا اتصال اینترنت خود را بررسی کنید. اگر قادر به اتصال به اینترنت هستید، ممکن است مشکلی موقتی در سرویس تصاویر صفحهٔ فایرفاکس وجود داشته باشد."
  },
  "loginErrorDetails": {
    "message": "به علت وجود مشکل در سرویس تصاویر صفحه فایرفاکس نتوانستیم عکس شما را ذخیره کنیم. لطفاً بعدا دوباره تلاش کنید."
  },
  "unshootablePageErrorTitle": {
    "message": "نمی‌توانیم از این صفحه تصویر بگیریم."
  },
  "unshootablePageErrorDetails": {
    "message": "این یک صفحه استاندارد وب نیست، بنابراین شما نمی‌توانید از آن تصویر بگیرید."
  },
  "selfScreenshotErrorTitle": {
    "message": "نمی‌توانید از صفحهٔ تصاویرِ فایرفاکس عکس بگیرید!"
  },
  "emptySelectionErrorTitle": {
    "message": "انتخاب شما خیلی کوچک است"
  },
  "privateWindowErrorTitle": {
    "message": "در حالت مرور خصوصی تصاویرصفحه غیرفعال است"
  },
  "privateWindowErrorDetails": {
    "message": "به خاطر مزاحمت متاسفیم. ما در حال کار روی این ویژگی برای انتشار‌های آینده هستیم."
  },
  "genericErrorTitle": {
    "message": "اوه! سرویس تصاویر صفحه فایرفاکس قاطی کرده."
  },
  "genericErrorDetails": {
    "message": "مطمئن نیستیم چه اتفاقی افتاده است. می‌خواهید دوباره امتحان کنید یا از یک صفحهٔ دیگر عکس بگیرید؟"
  },
  "tourBodyIntro": {
    "message": "بدون خارج شدن از فایرفاکس، عکس بگیرید، ذخیره کنید و به اشتراک بگذارید."
  },
  "tourHeaderPageAction": {
    "message": "روش جدیدی برای ذخیره کردن"
  },
  "tourBodyPageAction": {
    "message": "بازکردن صفحه اقدامات فهرست در آدرس بار هر زمانی که شما تمایل داشته باشید از صفحه عکس بگیرید."
  },
  "tourHeaderClickAndDrag": {
    "message": "ضبط آنچه شما می‌خواهید"
  },
  "tourBodyClickAndDrag": {
    "message": "کلیک کنید و بکشید تا فقط از قسمتی از صفحه عکس بگیرید. می‌توانید برای برجسته کردن روی ناحیه انتخاب شده حرکت کنید."
  },
  "tourHeaderFullPage": {
    "message": "ضبط پنجره یا کل صفحه‌ها"
  },
  "tourBodyFullPage": {
    "message": "برای گرفتن عکس از ناحیه قابل مشاهده در پنجره یا تمام صفحه از دکمه‌های بالا سمت راست استفاده کنید."
  },
  "tourHeaderDownloadUpload": {
    "message": "همانطور که می‌پسندید"
  },
  "tourBodyDownloadUpload": {
    "message": "عکس‌های بریده شده خود را برای به اشتراک‌گذاری راحت‌تر روی وب ذخیره کنید، یا آن‌ها را روی رایانه خود دریافت کنید. همچنین برای دیدن همهٔ عکس‌هایی که گرفتید می‌توانید روی دکمه «عکس‌های من» کلیک کنید."
  },
  "tourSkip": {
    "message": "رد کردن"
  },
  "tourNext": {
    "message": "اسلاید بعدی"
  },
  "tourPrevious": {
    "message": "اسلاید قبلی"
  },
  "tourDone": {
    "message": "انجام شد"
  },
  "termsAndPrivacyNotice2": {
    "message": "با استفاده از سرویس تصاویر صفحه فایرفاکس، شما با $TERMSANDPRIVACYNOTICETERMSLINK$ ما و $TERMSANDPRIVACYNOTICEPRIVACYLINK$ موافقت می‌کنید.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "شرایط"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "نکات حریم‌خصوصی"
  },
  "libraryLabel": {
    "message": "تصاویر صفحه"
  }
}PK
!<"ÜǑDD&webextension/_locales/ff/messages.json{
  "addonDescription": {
    "message": "Ƴettu kilip walla nattal yaynirde rewrude e geese, ndaɗndaa ɗum e mudda walla e ko duumii."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "downloadOnlyNotice": {
    "message": "Ngonɗaa e oo sahaa ko e mbaydi Aawto-Tan."
  },
  "downloadOnlyDetails": {
    "message": "Leƴƴande kuurgal Firefox ina wayla ɗoon e ɗoon e mbaydi Aawto-Tan e ɗii ngonkaaji:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Nder henorde Banngogol Suturo."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cuukiije jiggaaɗe ɗee ndaaƴaama."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Woto siiftor aslol abadaa” hurminaama."
  },
  "copyScreenshot": {
    "message": "Natto"
  },
  "notificationImageCopiedTitle": {
    "message": "Natto ngoo nattaama"
  },
  "notificationImageCopiedDetails": {
    "message": "Natto maa nattaama e ɗakkitorde ndee. Ñoƴƴu $META_KEY$-V ngam ɗakkude.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  }
}PK
!<Ð=pÒ""&webextension/_locales/fi/messages.json{
  "addonDescription": {
    "message": "Ota leikkeitä ja kuvakaappauksia verkosta ja tallenna ne tilapäisesti tai pysyvästi."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ota kuvakaappaus"
  },
  "myShotsLink": {
    "message": "Omat kaappaukset"
  },
  "screenshotInstructions": {
    "message": "Valitse alue vetämällä tai napsauttamalla sivua. Peruuta painamalla ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Tallenna"
  },
  "saveScreenshotVisibleArea": {
    "message": "Tallenna näkyvä alue"
  },
  "saveScreenshotFullPage": {
    "message": "Tallenna koko sivu"
  },
  "cancelScreenshot": {
    "message": "Peruuta"
  },
  "downloadScreenshot": {
    "message": "Lataa"
  },
  "downloadOnlyNotice": {
    "message": "Olet vain lataus -tilassa."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots vaihtuu automaattisesti vain lataus -tilaan, kun"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "käytetään yksityisen selaamisen ikkunaa"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "kolmannen osapuolen evästeet ovat estetty"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "”Ei mitään historiatietoja” on valittuna"
  },
  "downloadOnlyDetailsESR": {
    "message": "Käytät Firefox ESR:ää."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Verkkoon tallentaminen on poistettu käytöstä."
  },
  "notificationLinkCopiedTitle": {
    "message": "Linkki kopioitu"
  },
  "notificationLinkCopiedDetails": {
    "message": "Linkki kuvaasi on kopioitu leikepöydälle. Voit liittää sen painamalla $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopioi"
  },
  "notificationImageCopiedTitle": {
    "message": "Kaappaus kopioitu"
  },
  "notificationImageCopiedDetails": {
    "message": "Kaappauksesi on kopioitu leikepöydälle. Liitä se painamalla $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tämä kuva on rajattu $PIXELS$ kuvapisteeseen.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Epäkunnossa."
  },
  "requestErrorDetails": {
    "message": "Kuvan tallentaminen epäonnistui. Yritä myöhemmin uudestaan."
  },
  "connectionErrorTitle": {
    "message": "Emme saa yhteyttä kuvakaappauksiisi."
  },
  "connectionErrorDetails": {
    "message": "Tarkista internetyhteytesi. Jos olet yhteydessä internetiin, Firefox Screenshots -palvelussa voi olla tilapäinen häiriö."
  },
  "loginErrorDetails": {
    "message": "Emme pystyneet tallentamaan kuvaasi, koska Firefox Screenshots -palvelussa on ongelma. Yritä myöhemmin uudestaan."
  },
  "unshootablePageErrorTitle": {
    "message": "Tästä sivusta ei voi ottaa kuvaa."
  },
  "unshootablePageErrorDetails": {
    "message": "Tämä ei ole tavallinen verkkosivu, joten et voi ottaa kuvaa siitä."
  },
  "selfScreenshotErrorTitle": {
    "message": "Et voi ottaa kuvaa Firefox Screenshots -sivusta!"
  },
  "emptySelectionErrorTitle": {
    "message": "Valinta on liian pieni"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots ei ole käytettävisssä yksityisen selauksen tilassa"
  },
  "privateWindowErrorDetails": {
    "message": "Anteeksi häiriö. Tämä ominaisuus on vielä työn alla."
  },
  "genericErrorTitle": {
    "message": "Oho! Firefox Screenshots meni päin prinkkalaa."
  },
  "genericErrorDetails": {
    "message": "Emme oikein tiedä, mitä tapahtui. Haluatko yrittää uudestaan tai ottaa kuvan eri sivusta?"
  },
  "tourBodyIntro": {
    "message": "Ota, tallenna ja jaa kuvakaappaus poistumatta Firefoxista."
  },
  "tourHeaderPageAction": {
    "message": "Uusi tapa tallentaa"
  },
  "tourBodyPageAction": {
    "message": "Avaa osoitepalkissa oleva Sivun toiminnot -valikko milloin vain, kun haluat ottaa kuvakaappauksen."
  },
  "tourHeaderClickAndDrag": {
    "message": "Kaappaa mitä haluat"
  },
  "tourBodyClickAndDrag": {
    "message": "Kaappaa vain osa sivusta napsauttamalla ja vetämällä. Voit myös korostaa valinnan pitämällä hiirtä sen päällä."
  },
  "tourHeaderFullPage": {
    "message": "Kaappaa näkyvä alue tai kokonainen sivu"
  },
  "tourBodyFullPage": {
    "message": "Valitse oikean yläkulman painikkeista joko ikkunassa näkyvän alueen tai koko sivun kaappaus."
  },
  "tourHeaderDownloadUpload": {
    "message": "Haluamallasi tavalla"
  },
  "tourBodyDownloadUpload": {
    "message": "Tallenna rajaamasi kuvat verkkoon helpompaa jakamista varten tai lataa ne tietokoneellesi. Voit myös napsauttaa Omat kaappaukset -painiketta ja nähdä kaikki ottamasi kuvat."
  },
  "tourSkip": {
    "message": "OHITA"
  },
  "tourNext": {
    "message": "Seuraava sivu"
  },
  "tourPrevious": {
    "message": "Edellinen sivu"
  },
  "tourDone": {
    "message": "Valmis"
  },
  "termsAndPrivacyNotice2": {
    "message": "Käyttämällä Firefox Screenshots -ominaisuutta hyväksyt meidän $TERMSANDPRIVACYNOTICETERMSLINK$ ja $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "käyttöehdot"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "tietosuojakäytännön"
  },
  "libraryLabel": {
    "message": "Kuvakaappaukset"
  }
}PK
!<Òü--&webextension/_locales/fr/messages.json{
  "addonDescription": {
    "message": "Effectuez des captures d’écran sur le Web et sauvegardez-les de manière temporaire ou permanente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Effectuer une capture d’écran"
  },
  "myShotsLink": {
    "message": "Mes captures d’écran"
  },
  "screenshotInstructions": {
    "message": "Sélectionnez une zone de la page par cliquer-glisser ou en cliquant sur l’élément à sélectionner. Appuyez sur Échap pour annuler."
  },
  "saveScreenshotSelectedArea": {
    "message": "Enregistrer"
  },
  "saveScreenshotVisibleArea": {
    "message": "Capturer la zone visible"
  },
  "saveScreenshotFullPage": {
    "message": "Capturer la page complète"
  },
  "cancelScreenshot": {
    "message": "Annuler"
  },
  "downloadScreenshot": {
    "message": "Télécharger"
  },
  "downloadOnlyNotice": {
    "message": "Vous êtes actuellement dans un mode ne permettant que le téléchargement."
  },
  "downloadOnlyDetails": {
    "message": "Dans les situations suivantes, Firefox Screenshots permet uniquement les téléchargements :"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "lorsque vous naviguez en navigation privée."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "lorsque les cookies tiers sont désactivés."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "lorsque « Ne jamais conserver l’historique » est activé."
  },
  "downloadOnlyDetailsESR": {
    "message": "Vous utilisez Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "L’envoi de fichiers est désactivé."
  },
  "notificationLinkCopiedTitle": {
    "message": "Lien copié"
  },
  "notificationLinkCopiedDetails": {
    "message": "Le lien de votre capture a été copié dans le presse-papiers. Appuyez sur $META_KEY$-V pour le coller.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copier"
  },
  "notificationImageCopiedTitle": {
    "message": "Capture copiée"
  },
  "notificationImageCopiedDetails": {
    "message": "Votre capture a été copiée dans le presse-papiers. Appuyez sur $META_KEY$-V pour la coller.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Cette image a été rognée à $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Impossible d’effectuer cette action."
  },
  "requestErrorDetails": {
    "message": "Votre capture d’écran n’a pas pu être enregistrée. Veuillez réessayer plus tard."
  },
  "connectionErrorTitle": {
    "message": "Nous ne pouvons pas nous connecter à vos captures d’écran."
  },
  "connectionErrorDetails": {
    "message": "Veuillez vérifier votre connexion à Internet. Si celle-ci fonctionne normalement, il peut y avoir un problème temporaire avec le service de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nous n’avons pas pu enregistrer votre capture d’écran, car le service de Firefox Screenshot rencontre des difficultés. Veuillez réessayer plus tard."
  },
  "unshootablePageErrorTitle": {
    "message": "Impossible d’effectuer une capture de cette page."
  },
  "unshootablePageErrorDetails": {
    "message": "Impossible d’effectuer une capture d’écran, car cette page web n’est pas standard."
  },
  "selfScreenshotErrorTitle": {
    "message": "Vous ne pouvez pas effectuer une capture d’écran d’une page Firefox Screenshots."
  },
  "emptySelectionErrorTitle": {
    "message": "La zone sélectionnée est trop petite"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots est désactivé en mode de navigation privée"
  },
  "privateWindowErrorDetails": {
    "message": "Désolé pour la gêne occasionnée. Nous travaillons sur cette fonctionnalité pour de prochaines versions."
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots semble avoir un problème."
  },
  "genericErrorDetails": {
    "message": "Un problème non identifié est survenu. Vous pouvez réessayer ou effectuer une capture d’écran d’une autre page."
  },
  "tourBodyIntro": {
    "message": "Effectuez des captures d’écran, enregistrez et partagez-les sans quitter Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Une nouvelle façon d’enregistrer ses captures"
  },
  "tourBodyPageAction": {
    "message": "Dès que vous voulez effectuer une capture d’écran, il vous suffit d’ouvrir le menu d’actions de la page, depuis la barre d’adresse."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capturez ce que vous voulez"
  },
  "tourBodyClickAndDrag": {
    "message": "Cliquez et glissez pour capturer seulement une partie de la page. Vous pouvez aussi survoler une zone avec votre curseur pour surligner votre sélection."
  },
  "tourHeaderFullPage": {
    "message": "Effectuez des captures d’écran de fenêtres ou de pages entières"
  },
  "tourBodyFullPage": {
    "message": "Utilisez les boutons en haut à droite pour capturer au choix la zone visible dans la fenêtre ou la page entière."
  },
  "tourHeaderDownloadUpload": {
    "message": "À votre guise"
  },
  "tourBodyDownloadUpload": {
    "message": "Sauvegardez en ligne vos captures recadrées pour les partager plus facilement, ou téléchargez-les sur votre ordinateur. Vous pouvez aussi cliquer sur « Mes captures d’écran » pour retrouver toutes vos captures."
  },
  "tourSkip": {
    "message": "IGNORER"
  },
  "tourNext": {
    "message": "Écran suivant"
  },
  "tourPrevious": {
    "message": "Écran précédent"
  },
  "tourDone": {
    "message": "Terminé"
  },
  "termsAndPrivacyNotice2": {
    "message": "En utilisant Firefox Screenshots, vous acceptez nos $TERMSANDPRIVACYNOTICETERMSLINK$ et notre $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "mentions légales"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "politique de confidentialité"
  },
  "libraryLabel": {
    "message": "Captures d’écran"
  }
}PK
!<(f–)webextension/_locales/fy_NL/messages.json{
  "addonDescription": {
    "message": "Meitsje skermôfdrukken of klips fan it web en bewarje se tydlik of permanint."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Skermôfdruk meitsje"
  },
  "myShotsLink": {
    "message": "Myn skermôfdrukken"
  },
  "screenshotInstructions": {
    "message": "Sleep of klik op de side om in gebiet te selektearjen. Druk op ESC om te annulearjen."
  },
  "saveScreenshotSelectedArea": {
    "message": "Bewarje"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sichtbere bewarje"
  },
  "saveScreenshotFullPage": {
    "message": "Folsleine side bewarje"
  },
  "cancelScreenshot": {
    "message": "Annulearje"
  },
  "downloadScreenshot": {
    "message": "Downloade"
  },
  "downloadOnlyNotice": {
    "message": "Jo binne op dit stuit yn Allinnich-downloademodus."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots wikselet yn de folgjende situaasjes automatysk nei Allinnich-downloademodus:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Yn in priveenavigaasjefinster."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies fan tredden útskeakele binne."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "‘Nea skiednis ûnthâlde’ ynskeakele is."
  },
  "downloadOnlyDetailsESR": {
    "message": "Jo brûke Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Oplaads binne útskeakele."
  },
  "notificationLinkCopiedTitle": {
    "message": "Keppeling kopiearre"
  },
  "notificationLinkCopiedDetails": {
    "message": "De keppeling nei jo skermôfdruk is nei it klamboerd kopiearre. Brûk $META_KEY$-V om te plakken.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiearje"
  },
  "notificationImageCopiedTitle": {
    "message": "Ofbylding kopiearre"
  },
  "notificationImageCopiedDetails": {
    "message": "Jo ôfbylding is nei it klamboerd kopiearre. Druk op $META_KEY$-V om te plakken.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Dizze ôfbylding is ferlytse nei $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Bûten tsjinst."
  },
  "requestErrorDetails": {
    "message": "Sorry! Wy koene jo skermôfdruk net bewarje. Probearje it letter nochris."
  },
  "connectionErrorTitle": {
    "message": "Wy kinne net ferbine nei jo skermôfdrukken."
  },
  "connectionErrorDetails": {
    "message": "Kontrolearje jo ynternetferbining. As jo wol ferbining meitsje kinne mei it ynternet, kin it wêze dat der tydlik in probleem is mei de tsjinst Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Wy koene jo skermôfdruk net bewarje, omdat der in probleem is mei de tsjinst Firefox Screenshots. Probearje it letter nochris."
  },
  "unshootablePageErrorTitle": {
    "message": "It is net mooglik in skermôfdruk fan dizze side te meitsjen."
  },
  "unshootablePageErrorDetails": {
    "message": "Dit is net in standert webside, dus jo kinne der net in skermôfdruk fan meitsje."
  },
  "selfScreenshotErrorTitle": {
    "message": "Jo kinne net in skermôfdruk meitsje fan in Firefox Screenshots-side!"
  },
  "emptySelectionErrorTitle": {
    "message": "Jo seleksje is te lyts"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots is útskeakele yn Priveenavigaasjemodus"
  },
  "privateWindowErrorDetails": {
    "message": "Sorry foar it ûngemak. Foar takomstige útjeften wurdt oan dizze funksje wurke."
  },
  "genericErrorTitle": {
    "message": "Oeps! Firefox Screenshots is yn 'e war."
  },
  "genericErrorDetails": {
    "message": "Wy binne net wis wat der krekt bard is. Wolle jo it nochris probearje of in skermôfdruk fan in oare side meitsje?"
  },
  "tourBodyIntro": {
    "message": "Meitsje, bewarje en diel skermôfdrukken sûnder Firefox te ferlitten."
  },
  "tourHeaderPageAction": {
    "message": "In nije manier om te bewarjen"
  },
  "tourBodyPageAction": {
    "message": "Klap it menu Side-aksjes yn de adresbalke út sa gau as jo in skermôfbylding meitsje wolle."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fetsje wat jo wolle"
  },
  "tourBodyClickAndDrag": {
    "message": "Klik en sleep om in part fan in side te fetsjen. Jo kinne ek oer in gebiet gean om jo seleksje út te ljochtsjen."
  },
  "tourHeaderFullPage": {
    "message": "Fetsje finsters of folsleine websiden"
  },
  "tourBodyFullPage": {
    "message": "Selektearje knoppen rjochts boppe-oan om it sichtbere gebiet yn it finster te fetsjen, of fetsje in folsleine side."
  },
  "tourHeaderDownloadUpload": {
    "message": "Nei jo winsk"
  },
  "tourBodyDownloadUpload": {
    "message": "Bewarje jo byknippe skermôfdrukken nei it web om se maklik te dielen, of download se nei jo kompjûter. Jo kinne ek op de knop Myn skermôfdrukken klikke om al jo makke skermôfdrukken te finen."
  },
  "tourSkip": {
    "message": "Oerslaan"
  },
  "tourNext": {
    "message": "Folgjende ôfbylding"
  },
  "tourPrevious": {
    "message": "Foarige ôfbylding"
  },
  "tourDone": {
    "message": "Dien"
  },
  "termsAndPrivacyNotice2": {
    "message": "Troch Firefox Screenshots te brûken, gean jo akkoard mei ús $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Betingsten"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Privacyferklearring"
  },
  "libraryLabel": {
    "message": "Skermôfbyldingen"
  }
}PK
!<o{•ýuu)webextension/_locales/ga_IE/messages.json{
  "addonDescription": {
    "message": "Glac gearrthóga agus gabhálacha scáileáin ón Ghréasán agus sábháil iad, go sealadach nó go buan."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Glac Gabháil Scáileáin"
  },
  "myShotsLink": {
    "message": "Mo Chuid Gabhálacha"
  },
  "screenshotInstructions": {
    "message": "Tarraing nó cliceáil ar an leathanach chun réigiún a roghnú. Brúigh ESC le cealú."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sábháil"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sábháil an réigiún infheicthe"
  },
  "saveScreenshotFullPage": {
    "message": "Sábháil an leathanach iomlán"
  },
  "cancelScreenshot": {
    "message": "Cealaigh"
  },
  "downloadScreenshot": {
    "message": "Íoslódáil"
  },
  "notificationLinkCopiedTitle": {
    "message": "Cóipeáladh an Nasc"
  },
  "notificationLinkCopiedDetails": {
    "message": "Cóipeáladh nasc leis an ngabháil go dtí an ghearrthaisce. Brúigh $META_KEY$-V lena ghreamú.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tá rud éigin as alt."
  },
  "requestErrorDetails": {
    "message": "Ár leithscéal! Theip orainn an ghabháil a shábháil. Bain triail eile as ar ball."
  },
  "connectionErrorTitle": {
    "message": "Ní féidir linn ceangal le do chuid gabhálacha."
  },
  "connectionErrorDetails": {
    "message": "Deimhnigh go bhfuil tú ceangailte leis an Idirlíon. Mura bhfuil tú ceangailte, ní bheidh tú in ann úsáid a bhaint as seirbhís Gabhálacha Scáileáin Firefox."
  },
  "loginErrorDetails": {
    "message": "Níorbh fhéidir linn an ghabháil scáileáin a shábháil toisc gur tharla earráid le seirbhís Gabhálacha Scáileáin Firefox. Bain triail eile as ar ball."
  },
  "unshootablePageErrorTitle": {
    "message": "Ní féidir linn gabháil scáileáin a ghlacadh ar an leathanach seo."
  },
  "unshootablePageErrorDetails": {
    "message": "Ní féidir gabháil scáileáin a ghlacadh toisc nach gnáthleathanach Gréasáin é seo."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ní féidir leat gabháil scáileáin a ghlacadh ar leathanach Gabhálacha Scáileáin Firefox!"
  },
  "emptySelectionErrorTitle": {
    "message": "Roghnaigh tú réigiún róbheag"
  },
  "genericErrorTitle": {
    "message": "Úps! Tá Gabhálacha Scáileáin Firefox imithe sa fhraoch."
  },
  "genericErrorDetails": {
    "message": "Nílimid cinnte cad a tharla. An bhfuil fonn ort triail eile a bhaint as, nó gabháil scáileáin eile a ghlacadh?"
  },
  "tourBodyIntro": {
    "message": "Glac, sábháil, agus comhroinn gabhálacha scáileáin gan Firefox a fhágáil."
  },
  "tourHeaderClickAndDrag": {
    "message": "An rud atá uait a ghabháil"
  },
  "tourBodyClickAndDrag": {
    "message": "Cliceáil agus tarraing le cuid de leathanach a ghabháil. Nó is féidir leat an luch a chur os cionn an réigiúin le gabháil."
  },
  "tourHeaderFullPage": {
    "message": "Fuinneoga nó leathanaigh iomlána a ghabháil"
  },
  "tourBodyFullPage": {
    "message": "Úsáid na cnaipí ag barr na fuinneoige ar dheis chun an réigiún infheicthe san fhuinneog a ghabháil, nó an leathanach iomlán."
  },
  "tourHeaderDownloadUpload": {
    "message": "Go díreach mar is áil leat"
  },
  "tourBodyDownloadUpload": {
    "message": "Is féidir leat gabhálacha a bhearradh agus a shábháil ar an nGréasán, nó iad a íoslódáil ar do ríomhaire. Is féidir teacht orthu go léir leis an gcnaipe Mo Chuid Gabhálacha."
  },
  "tourSkip": {
    "message": "NÁ BAC LEIS"
  },
  "tourNext": {
    "message": "An chéad sleamhnán eile"
  },
  "tourPrevious": {
    "message": "An sleamhnán roimhe seo"
  },
  "tourDone": {
    "message": "Críochnaithe"
  },
  "termsAndPrivacyNotice2": {
    "message": "Má úsáideann tú Gabhálacha Scáileáin Firefox, glacann tú leis na $TERMSANDPRIVACYNOTICETERMSLINK$ agus leis an $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Téarmaí"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "bhFógra Príobháideachais"
  }
}PK
!<ÎPƒss&webextension/_locales/gd/messages.json{
  "addonDescription": {
    "message": "Tog cliopaichean is glacaidhean-sgrìn on lìon is sàbhail iad rè seal no gu buan."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Tog glacadh-sgrìn"
  },
  "myShotsLink": {
    "message": "Na glacaidhean agam"
  },
  "screenshotInstructions": {
    "message": "Dèan briogadh no slaodadh air an duilleag airson raon a thaghadh. Brùth ESC airson sgur dheth."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sàbhail"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sàbhail na tha ri fhaicinn"
  },
  "saveScreenshotFullPage": {
    "message": "Sàbhail an duilleag shlàn"
  },
  "cancelScreenshot": {
    "message": "Sguir dheth"
  },
  "downloadScreenshot": {
    "message": "Luchdaich a-nuas"
  },
  "downloadOnlyNotice": {
    "message": "Tha thu sa mhodh luchdaidh a-nuas a-mhàin."
  },
  "downloadOnlyDetails": {
    "message": "Bidh gleus glacaidhean-sgrìn Firefox sa mhodh luchdaidh a-nuas gu fèin-obrachail sna suidheachaidhean a leanas:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Ann an uinneag brabhsaidh phrìobhaidich."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Tha briosgaidean threas-phàrtaidhean à comas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Tha “Na cuimhnich an eachdraidh idir” an comas."
  },
  "downloadOnlyDetailsESR": {
    "message": "Tha thu a’ cleachdadh Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Chaidh an luchdadh suas a chur à comas."
  },
  "notificationLinkCopiedTitle": {
    "message": "Chaidh lethbhreac a dhèanamh dhen cheangal"
  },
  "notificationLinkCopiedDetails": {
    "message": "Chaidh lethbhreac de cheangal a’ ghlacaidh agad a chur air an stòr-bhòrd. Brùth $META_KEY$-V airson a chur ann.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Dèan lethbhreac"
  },
  "notificationImageCopiedTitle": {
    "message": "Chaidh lethbhreac a dhèanamh dhen ghlacadh"
  },
  "notificationImageCopiedDetails": {
    "message": "Chaidh lethbhreac dhen ghlacadh agad a chur air an stòr-bhòrd. Brùth $META_KEY$-V airson a chur ann.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Chaidh an dealbh a bhearradh is tha e $PIXELS$px a-nis.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tuibriste."
  },
  "requestErrorDetails": {
    "message": "Tha sinn duilich! Cha b’ urrainn dhuinn an glacadh agad a shàbhaladh. Feuch ris a-rithist an ceann greis."
  },
  "connectionErrorTitle": {
    "message": "Cha b’ urrainn dhuinn na glacaidhean-sgrìn agad a shàbhaladh."
  },
  "connectionErrorDetails": {
    "message": "Thoir sùil air a’ cheangal agad ris an eadar-lìon. Ma tha ceangal agad ris, dh’fhaoidte gu bheil duilgheadas sealach aig seirbheis glacaidhean-sgrìn Firefox."
  },
  "loginErrorDetails": {
    "message": "Cha b’ urrainn dhuinn an glacadh agad a shàbhaladh air sgàth duilgheadas le seirbheis glacaidhean-sgrìn Firefox. Feuch ris a-rithist an ceann greis."
  },
  "unshootablePageErrorTitle": {
    "message": "Chan urrainn dhuinn glacadh-sgrìn a dhèanamh dhen duilleag seo."
  },
  "unshootablePageErrorDetails": {
    "message": "Chan eil duilleag-lìn àbhaisteach a tha seo ’s chan urrainn dhut glacadh-sgrìn a dhèanamh dheth."
  },
  "selfScreenshotErrorTitle": {
    "message": "Chan urrainn dhut glacadh a thogail de dhuilleag ghlacaidhean-sgrìn Firefox!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tha na thagh thu ro bheag"
  },
  "privateWindowErrorTitle": {
    "message": "Tha gleus nan glacaidhean-sgrìn à comas ann am modh a’ bhrabhsaidh phrìobhaidich"
  },
  "privateWindowErrorDetails": {
    "message": "Tha sinn duilich mu dhèidhinn. Tha sinn ag obair air agus an dòchas gum bi e ri làimh a dh’aithghearr."
  },
  "genericErrorTitle": {
    "message": "Ìoc! Sin glacaidhean-sgrìn Firefox air feadh na fìdhle."
  },
  "genericErrorDetails": {
    "message": "Chan eil sinn cinnteach dè thachair. A bheil thu airson feuchainn ris a-rithist no glacadh a thogail de dhuilleag eile?"
  },
  "tourBodyIntro": {
    "message": "Tog, sàbhail is co-roinn glacadh-sgrìn gun Firefix fhàgail."
  },
  "tourHeaderPageAction": {
    "message": "Dòigh ùr airson sàbhaladh"
  },
  "tourBodyPageAction": {
    "message": "Leudaich clàr-taice gnìomhan na duilleige ann am bàr an t-seòlaidh uair sam bith a tha thu airson glacadh-sgrìn a thogail."
  },
  "tourHeaderClickAndDrag": {
    "message": "Na glac ach dìreach na tha a dhìth ort"
  },
  "tourBodyClickAndDrag": {
    "message": "Dèan briogadh is slaodadh airson earrann de dhuilleag a ghlacadh. ’S urrainn dhut fantainn os cionn rud cuideachd airson na thagh thu a shoillseachadh."
  },
  "tourHeaderFullPage": {
    "message": "Glac uinneagan no duilleagan slàna"
  },
  "tourBodyFullPage": {
    "message": "Tagh na putanan air an taobh deas gu h-àrd airson na tha ri fhaicinn san uinneag a ghlacadh no airson duilleag shlàn a ghlacadh."
  },
  "tourHeaderDownloadUpload": {
    "message": "Do thoil fhèin"
  },
  "tourBodyDownloadUpload": {
    "message": "Sàbhail na glacaidhean bearrte air an lìon ach am bi e furasta an co-roinneadh no luchdaich a-nuas iad dhan choimpiutair agad. ’S urrainn dhut briogadh air a’ phutan “Na glacaidhean agam” cuideachd is chì thu gach glacadh a thog thu."
  },
  "tourSkip": {
    "message": "LEUM SEACHAD"
  },
  "tourNext": {
    "message": "An ath-shleamhnag"
  },
  "tourPrevious": {
    "message": "An t-sleamhnag roimhe"
  },
  "tourDone": {
    "message": "Dèanta"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ma chleachdas tu gleus nan glacaidhean-sgrìn aig Firefox, bidh thu ag aontachadh ris na $TERMSANDPRIVACYNOTICETERMSLINK$ agus $TERMSANDPRIVACYNOTICEPRIVACYLINK$ againn.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "na teirmichean"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "an aithris prìobhaideachd"
  },
  "libraryLabel": {
    "message": "Glacaidhean-sgrìn"
  }
}PK
!<BïåVV&webextension/_locales/gl/messages.json{
  "myShotsLink": {
    "message": "As miñas capturas"
  },
  "saveScreenshotSelectedArea": {
    "message": "Gardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Gardar a parte visible"
  },
  "saveScreenshotFullPage": {
    "message": "Gardar a páxina completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Descargar"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Nunha xanela de navegación privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cando as cookies de terceiros están desactivadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Cando está activa a opción \"Nunca gardará o historial\"."
  },
  "downloadOnlyDetailsESR": {
    "message": "Está usando Firefox ESR."
  },
  "notificationLinkCopiedTitle": {
    "message": "Copiouse a ligazón"
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Copiouse a captura"
  },
  "tourDone": {
    "message": "Feito"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ao usar Firefox Screenshots, vostede acepta os nosos $TERMSANDPRIVACYNOTICETERMSLINK$ e a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Política de privacidade"
  },
  "libraryLabel": {
    "message": "Capturas de pantalla"
  }
}PK
!<éڦ››&webextension/_locales/gn/messages.json{
  "addonDescription": {
    "message": "Enohẽ ta’anga ha japyhypy ñandutígui ha eñongatu sapy’aite térã areve."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ejapo mba’erechaha japyhypy"
  },
  "myShotsLink": {
    "message": "Che japyhypy"
  },
  "screenshotInstructions": {
    "message": "Embosyryry térã eikutu kuatiaroguépe embasa'y hag̃ua peteĩ tendaguasu. Ejopy ESC eheja hag̃ua."
  },
  "saveScreenshotSelectedArea": {
    "message": "Ñongatu"
  },
  "saveScreenshotVisibleArea": {
    "message": "Ñongatu hechapy"
  },
  "saveScreenshotFullPage": {
    "message": "Kuatiarogue tuichavéva ñongatu"
  },
  "cancelScreenshot": {
    "message": "Heja"
  },
  "downloadScreenshot": {
    "message": "Mboguejy"
  },
  "downloadOnlyNotice": {
    "message": "Ko’ag̃aite eime ñemboguejy ayvúpe año."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots iñambue ijeheguínte ñemboguejy ayvúpe kóicha jave."
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Peteĩ ovetã kundaha ñemiguápe."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kookie mbohapyha mba’éva ojepe’áma."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Never remember history” eipurukuaáma."
  },
  "downloadOnlyDetailsESR": {
    "message": "Eipuruhína Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Pe marandurenda ñemyanyhẽ ojepe’ahína."
  },
  "notificationLinkCopiedTitle": {
    "message": "Juajuha monguatiapyre"
  },
  "notificationLinkCopiedDetails": {
    "message": "Pe juajuha japyhygua ojegueraháma kuatiajokohápe. Ejopy $META_KEY$ -V emboja hag̃ua.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Monguatia"
  },
  "notificationImageCopiedTitle": {
    "message": "Japyhypy monguatiapyre"
  },
  "notificationImageCopiedDetails": {
    "message": "Nde japyhypy ohóma kuatiajokohápe. Ejopy $META_KEY$ -V emboja hag̃ua.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ko ta'anga oñekytĩkuri $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ndoikói hína."
  },
  "requestErrorDetails": {
    "message": "¡Che ñyrõ! Ndaikatúi roñongatu nde japyhypy. Eha'ãjey ag̃ave."
  },
  "connectionErrorTitle": {
    "message": "Ndaikatúi roike nde japyhypykuéra mba'erechahápe."
  },
  "connectionErrorDetails": {
    "message": "Ehechajey pe Ñandutípe jeike. Eikeséramo Ñandutípe, oĩ apañuãi sapy’agua Firefox Screenshots rembiapópe."
  },
  "loginErrorDetails": {
    "message": "Ndaikatúi roñongatu pe japyhypy oĩ rupi apañuãi Firefox Screenshots rembiapópe. Eha’ãjey ag̃amieve."
  },
  "unshootablePageErrorTitle": {
    "message": "Ndaikatúi rojapyhy ko kuatiarogue."
  },
  "unshootablePageErrorDetails": {
    "message": "Kóva ndaha'éi peteĩ ñanduti kuatiarogue ypykuéva, péicha rupi ndaikatúi roñongatu japyhypy."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ndaikatúi jajapo peteĩ japyhypy Firefox Screenshots kuatiaroguépe!"
  },
  "emptySelectionErrorTitle": {
    "message": "Pe jeporavo michĩeterei"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots ndojepurukuaái kundaha ñemigua rekópe"
  },
  "privateWindowErrorDetails": {
    "message": "Rombyasy ko'ã oikóva. Romba'apohína tembiapo pyahúre osẽ porã hag̃ua."
  },
  "genericErrorTitle": {
    "message": "¡Épa! Firefox Screenshots itavyraíma."
  },
  "genericErrorDetails": {
    "message": "Ndoroikuaái mba'etépa pe oikóva. ¿Ejapose jeýpa térã ejapyhy peteĩ kuatiarogue ambuévagui?"
  },
  "tourBodyIntro": {
    "message": "Ejapo, eñongatu ha emoherakuã mba'erechaha japyhypy eheja'ỹre Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ñongatu ambue hendáicha"
  },
  "tourBodyPageAction": {
    "message": "Emyasãi pe kuatiarogue oku'éva poravorã kundaharape rendápe ejapyhyse vove."
  },
  "tourHeaderClickAndDrag": {
    "message": "Ejapyhy pe reipotáva añoite"
  },
  "tourBodyClickAndDrag": {
    "message": "Ehesakutu ha embosyryry ejapyhy hag̃ua kuatiarogue vore. Ikatu avei ehasa hi’ári ehechauka hag̃ua poravopy."
  },
  "tourHeaderFullPage": {
    "message": "Ejapyhy ovetã térã kuatiarogue tuichaháicha"
  },
  "tourBodyFullPage": {
    "message": "Eiporavo umi votõ yvate akatúa gotyogua ejapyhy hag̃ua ovetãme térã kuatiarogue tuichaháicha."
  },
  "tourHeaderDownloadUpload": {
    "message": "Nde eipotaháicha"
  },
  "tourBodyDownloadUpload": {
    "message": "Eñongatu nde japyhypy kytĩmbyre ñandutígui moherakuãrã térã ñemboguejyrã ne mohendahápe. Ikatu avei ehesakutu pe votõ Che japyhypy ejuhu hag̃ua opaite japyhypy ejapova'kue."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Ta’angarechaha tenondegua"
  },
  "tourPrevious": {
    "message": "Ta’angarechaha mboyvegua"
  },
  "tourDone": {
    "message": "Oĩma"
  },
  "termsAndPrivacyNotice2": {
    "message": "Eipurúvo Firefox Screenshots, emoneĩma ko’ã $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ha $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Jejapopy"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Kuaaukaha ñemigua"
  },
  "libraryLabel": {
    "message": "Japyhypy"
  }
}PK
!<øʁ$$)webextension/_locales/gu_IN/messages.json{
  "addonDescription": {
    "message": "વેબમાંથી ક્લિપ્સ અને સ્ક્રીનશૉટ્સ લો અને તેમને કામચલાઉ અથવા કાયમી રીતે સાચવો."
  },
  "addonAuthorsList": {
    "message": "Mozilla<screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "સ્ક્રીનશૉટ લેવા"
  },
  "myShotsLink": {
    "message": "મારા શોટ્સ"
  },
  "screenshotInstructions": {
    "message": "ખેંચો અથવા એક પ્રદેશ પસંદ કરવા માટે પાનાં પર ક્લિક કરો. રદ કરવા માટે ESC દબાવો."
  },
  "saveScreenshotSelectedArea": {
    "message": "સાચવો"
  },
  "saveScreenshotVisibleArea": {
    "message": "દૃશ્યમાન સાચવો"
  },
  "saveScreenshotFullPage": {
    "message": "સંપૂર્ણ પૃષ્ઠ સાચવો"
  },
  "cancelScreenshot": {
    "message": "રદ"
  },
  "downloadScreenshot": {
    "message": "ડાઉનલોડ"
  },
  "downloadOnlyNotice": {
    "message": "તમે હાલમા ફક્ત ડાઉનલોડ-કરો પ્રકારમાં છો."
  },
  "downloadOnlyDetails": {
    "message": "આ પરિસ્થિતિઓ માં Firefox સ્ક્રિનશોટસ આપમેળે જ ફક્ત-ડાઉનલોડ પ્રકારમાં જતું રહેશે:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "ખાનગી બ્રાઉઝિંગ વિન્ડો માં."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "અન્ય સ્થાનેથી કુકીઓનું વહન અક્ષમ કરેલું છે."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“ઇતિહાસ ક્યારેય ન સંભારવો” સક્ષમ કરેલુ છે."
  },
  "downloadOnlyDetailsESR": {
    "message": "તમે Firefox ESR નો ઉપયોગ કરી રહ્યા છો."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "અપલોડ્સ અક્ષમ કરવામાં આવ્યા છે."
  },
  "notificationLinkCopiedTitle": {
    "message": "લિંક કૉપિ"
  },
  "notificationLinkCopiedDetails": {
    "message": "તમારા શોટ માટે લિંક ક્લિપબોર્ડ પર કૉપિ કરવામાં આવ્યું છે. પ્રેસ $META_KEY$ -V પેસ્ટ કરવા માટે.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "નકલ કરો"
  },
  "notificationImageCopiedTitle": {
    "message": "શોટ નકલ કર્યો"
  },
  "notificationImageCopiedDetails": {
    "message": "તમારા શોટ ક્લિપબોર્ડ પર નકલ કરવામાં આવ્યાં છે. પેસ્ટ કરવા માટે $META_KEY$-V દબાવો.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "આ છબીને $PIXELS$px પર કાપવામાં આવી છે.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "હુકમ બહાર."
  },
  "requestErrorDetails": {
    "message": "માફ કરશો! અમે તમારા શોટ સાચવી શક્યા નથી. પછીથી ફરી પ્રયત્ન કરો."
  },
  "connectionErrorTitle": {
    "message": "અમે તમારા સ્ક્રીનશૉટ્સ ને કનેક્ટ થઈ શકતા નથી."
  },
  "connectionErrorDetails": {
    "message": "તમારું ઇન્ટરનેટ કનેક્શન તપાસો. તમે ઇન્ટરનેટથી કનેક્ટ કરવા માટે સક્ષમ છો, તો ત્યાં ફાયરફોક્સ સ્ક્રીનશોટ્સ સેવા સાથે એક અસ્થાયી સમસ્યા હોઈ શકે છે."
  },
  "loginErrorDetails": {
    "message": "અમે તમારા શોટ સાચવી શક્યા નથી કારણ કે Firefox સ્ક્રીનશોટ્સ સેવા સાથે એક સમસ્યા છે. પછીથી ફરી પ્રયત્ન કરો."
  },
  "unshootablePageErrorTitle": {
    "message": "અમે આ પૃષ્ઠ સ્ક્રીનશૉટ ન કરી શકીએ."
  },
  "unshootablePageErrorDetails": {
    "message": "આ એક પ્રમાણભૂત વેબ પૃષ્ઠ, જેથી તમે તેને એક સ્ક્રીનશૉટ ન લઈ શકો."
  },
  "selfScreenshotErrorTitle": {
    "message": "તમે પૃષ્ઠના Firefox સ્ક્રીનશોટ્સ શોટ લઇ શકો નહિ!"
  },
  "emptySelectionErrorTitle": {
    "message": "તમારી પસંદગી ખૂબ નાની છે"
  },
  "privateWindowErrorTitle": {
    "message": "ખાનગી બ્રાઉઝિંગ મોડમાં સ્ક્રીનશોટ અક્ષમ કરેલ છે"
  },
  "privateWindowErrorDetails": {
    "message": "અસુવીધી બદલ માફી. અમે ભવિષ્યના પ્રકાશનો માટે આ સુવિધા પર કામ કરી રહ્યા છીએ."
  },
  "genericErrorTitle": {
    "message": "થોભો! Firefox સ્ક્રીનશોટ્સ અવ્યવસ્થિત થઈ ગયા."
  },
  "genericErrorDetails": {
    "message": "અમે ખાતરી નથીકે શું માત્ર થયું છે . ફરી પ્રયાસ કરો અથવા એક અલગ પૃષ્ઠ એક શોટ લેવા માટે કાળજી કરો?"
  },
  "tourBodyIntro": {
    "message": "લેવા, સાચવેલા, અને વહેંચાયેલ સ્ક્રીનશૉટ્સ Firefox છોડ્યાં વિના."
  },
  "tourHeaderPageAction": {
    "message": "સાચવવાનો એક નવો રસ્તો"
  },
  "tourBodyPageAction": {
    "message": "જ્યારે પણ સ્ક્રીનશૉટ લેવા માંગો ત્યારે સરનામાં બારમાં પૃષ્ઠ ક્રિયાઓ મેનૂને વિસ્તૃત કરો."
  },
  "tourHeaderClickAndDrag": {
    "message": "કેદ કરો તમને જોઈએ તે"
  },
  "tourBodyClickAndDrag": {
    "message": "પાનાંના માત્ર એક ભાગ મેળવવા માટે ક્લિક કરો અને ખેંચો. તમે પણ તમારી પસંદગી પ્રકાશિત કરવા માટે હૉવર કરી શકો છો."
  },
  "tourHeaderFullPage": {
    "message": "વિન્ડોઝ અથવા સમગ્ર પાના કેદ કરો"
  },
  "tourBodyFullPage": {
    "message": "ઉપર જમણા બટનો પસંદ કરો વિન્ડોમાં દૃશ્યમાન વિસ્તાર મેળવવા માટે અથવા આખુ પાનું કેપ્ચર કરવા માટે."
  },
  "tourHeaderDownloadUpload": {
    "message": "તમને જે ગમે"
  },
  "tourBodyDownloadUpload": {
    "message": "સરળ શેરિંગ માટે વેબ પર તમારા કપાઈ શોટ સાચવો, અથવા તેમને તમારા કમ્પ્યુટર પર ડાઉનલોડ કરો. તમે બધા શોટ મેળવવા માટે મારું શોટ્સ બટન પર ક્લિક કરી પણ શકો છો બધા શોટ તમે લીધેલા શોધવા માટે."
  },
  "tourSkip": {
    "message": "છોડવા"
  },
  "tourNext": {
    "message": "આગલી સ્લાઇડ"
  },
  "tourPrevious": {
    "message": "પહેલાની સ્લાઇડ"
  },
  "tourDone": {
    "message": "થઈ ગયું"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox સ્ક્રિનશોટનો ઉપયોગ કરીને, તમે અમારી સાથે સંમત થાઓ છો $TERMSANDPRIVACYNOTICETERMSLINK$ અને $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "શરતો"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ખાનગી સૂચના"
  },
  "libraryLabel": {
    "message": "સ્ક્રીનશૉટ્સ"
  }
}PK
!<ú-æ³³&webextension/_locales/he/messages.json{
  "addonDescription": {
    "message": "יצירת צילומי מסך של דפי אינטרנט ושמירה שלהם באופן זמני או קבוע."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "צילום מסך"
  },
  "myShotsLink": {
    "message": "צילומי המסך שלי"
  },
  "screenshotInstructions": {
    "message": "נא לגרור או ללחוץ על הדף כדי לבחור תחום או על ESC לביטול."
  },
  "saveScreenshotSelectedArea": {
    "message": "שמירה"
  },
  "saveScreenshotVisibleArea": {
    "message": "שמירת התחום המוצג"
  },
  "saveScreenshotFullPage": {
    "message": "שמירת הדף במלואו"
  },
  "cancelScreenshot": {
    "message": "ביטול"
  },
  "downloadScreenshot": {
    "message": "הורדה"
  },
  "downloadOnlyNotice": {
    "message": "הינך כרגע במצב הורדה בלבד."
  },
  "downloadOnlyDetails": {
    "message": "‏Firefox Screenshots משתנה אוטומטית למצב הורדה בלבד במקרים הבאים:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "בחלון גלישה פרטית."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "כשעוגיות צד שלישי מנוטרלות."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "„לא לזכור היסטוריה” פעיל."
  },
  "downloadOnlyDetailsESR": {
    "message": "הגרסה שלך היא Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "ההעלאות הושבתו."
  },
  "notificationLinkCopiedTitle": {
    "message": "הקישור הועתק"
  },
  "notificationLinkCopiedDetails": {
    "message": "הקישור לתמונה שלך הועתק ללוח. נא ללחוץ על $META_KEY$-V כדי להדביק.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "העתקה"
  },
  "notificationImageCopiedTitle": {
    "message": "צילום המסך הועתק"
  },
  "notificationImageCopiedDetails": {
    "message": "צילום המסך שלך הועתק ללוח העריכה. יש ללחוץ על $META_KEY$-V כדי להדביק.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "תמונה זו נחתכה לגודל של $PIXELS$ פיקסלים.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "לא תקין."
  },
  "requestErrorDetails": {
    "message": "אנו מצטערים, אך לא ניתן היה לשמור את התמונה. נא לנסות שוב מאוחר יותר."
  },
  "connectionErrorTitle": {
    "message": "לא ניתן היה להתחבר אל מאגר צילומי המסך שלך."
  },
  "connectionErrorDetails": {
    "message": "נא לבדוק את החיבור לאינטרנט. אם הצלחת להתחבר לאינטרנט כנראה שקיימת תקלה זמנית עם שירות Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "אין אפשרות לשמור את צילום המסך שלך כיוון שישנה תקלה עם שירות Firefox Screenshots. נא לנסות שוב מאוחר יותר."
  },
  "unshootablePageErrorTitle": {
    "message": "לא ניתן לצלם דף זה."
  },
  "unshootablePageErrorDetails": {
    "message": "דף זה אינו דף אינטרנט תקני, ולכן לא ניתן היה לצלם אותו."
  },
  "selfScreenshotErrorTitle": {
    "message": "לא ניתן לצלם את הדף של Firefox Screenshot עצמו!"
  },
  "emptySelectionErrorTitle": {
    "message": "הבחירה שלך קטנה מידי"
  },
  "privateWindowErrorTitle": {
    "message": "‏Screenshots מנוטרל במצב גלישה פרטית"
  },
  "privateWindowErrorDetails": {
    "message": "מצטערים על אי הנוחות. אנחנו עובדים על תכונה זו בגרסאות עתידיות."
  },
  "genericErrorTitle": {
    "message": "אויש! Firefox Screenshots ירד מהפסים."
  },
  "genericErrorDetails": {
    "message": "אנחנו לא בטוחים מה קרה פה הרגע. אכפת לך לנסות שוב או לצלם דף אחר?"
  },
  "tourBodyIntro": {
    "message": "צילום, שמירה ושיתוף של צילומי מסך מבלי לעזוב את Firefox."
  },
  "tourHeaderPageAction": {
    "message": "דרך חדשה לשמירה"
  },
  "tourBodyPageAction": {
    "message": "יש לפתוח את תפריט פעולות הדף בסרגל הכתובת בכל פעם שברצונך לצלם את המסך."
  },
  "tourHeaderClickAndDrag": {
    "message": "לצלם רק את מה שנחוץ לך"
  },
  "tourBodyClickAndDrag": {
    "message": "ניתן ללחוץ ולגרור כדי לצלם רק מקטע מהעמוד. ניתן גם לרחף מעל כדי לסמן את הבחירה שלך."
  },
  "tourHeaderFullPage": {
    "message": "לצלם חלונות או דפים שלמים"
  },
  "tourBodyFullPage": {
    "message": "בחרו בכפתורים שבחלק העליון כדי לצלם את האזור הגלוי בחלון או כדי לצלם את הדף כולו."
  },
  "tourHeaderDownloadUpload": {
    "message": "לפי טעמך"
  },
  "tourBodyDownloadUpload": {
    "message": "שמירת הצילומים החתוכים שלך לאחסון מקוון לצורך שיתוף פשוט יותר, או להוריד אותם למחשב שלך. ניתן גם ללחוץ על כפתור הצילומים שלי כדי למצוא את כל הצילומים שצילמת."
  },
  "tourSkip": {
    "message": "דילוג"
  },
  "tourNext": {
    "message": "השקופית הבאה"
  },
  "tourPrevious": {
    "message": "השקופית הקודמת"
  },
  "tourDone": {
    "message": "סיום"
  },
  "termsAndPrivacyNotice2": {
    "message": "השימוש ב־Firefox Screenshots מהווה הסכמה ל$TERMSANDPRIVACYNOTICETERMSLINK$ ול$TERMSANDPRIVACYNOTICEPRIVACYLINK$ שלנו.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "תנאים"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "הצהרת פרטיות"
  },
  "libraryLabel": {
    "message": "צילומי מסך"
  }
}PK
!<ó“‡4"4")webextension/_locales/hi_IN/messages.json{
  "addonDescription": {
    "message": "वेब से फ़ोटो और स्क्रीनशॉट लें और उन्हें अस्थायी या स्थायी रूप से सहेजें."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "स्क्रीनशॉट लें"
  },
  "myShotsLink": {
    "message": "मेरे चित्र"
  },
  "screenshotInstructions": {
    "message": "किसी क्षेत्र को चुनने के लिए पृष्ठ पर खींचें या क्लिक करें. रद्द करने के लिए ESC दबाएँ."
  },
  "saveScreenshotSelectedArea": {
    "message": "सहेजें"
  },
  "saveScreenshotVisibleArea": {
    "message": "दृश्यमान सहेजें"
  },
  "saveScreenshotFullPage": {
    "message": "पूर्ण पृष्ठ सहेजें"
  },
  "cancelScreenshot": {
    "message": "रद्द करें"
  },
  "downloadScreenshot": {
    "message": "डाउनलोड करें"
  },
  "downloadOnlyNotice": {
    "message": "आप अभी केवल-डाउनलोड मोड में हैं."
  },
  "downloadOnlyDetailsPrivate": {
    "message": "एक निजी ब्राउज़िंग विंडो में."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "तृतीय-पक्ष कुकीज़ अक्षम हैं."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“कभी इतिहास याद न रखें” सक्षम है."
  },
  "downloadOnlyDetailsESR": {
    "message": "आप Firefox ESR का उपयोग कर रहे हैं."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "अपलोड अक्षम कर दिए गए हैं."
  },
  "notificationLinkCopiedTitle": {
    "message": "लिंक की नक़ल की गयी"
  },
  "notificationLinkCopiedDetails": {
    "message": "आपके शॉट के लिंक क्लिपबोर्ड पर कॉपी किए गए हैं. पेस्ट करने के लिए $META_KEY$-V दबाएँ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "प्रतिलिपि बनाएँ"
  },
  "notificationImageCopiedTitle": {
    "message": "शॉट प्रतिलिपि बनाई गई"
  },
  "notificationImageCopiedDetails": {
    "message": "आपके शॉट के लिंक क्लिपबोर्ड पर कॉपी किए गए हैं. पेस्ट करने के लिए $META_KEY$-V दबाएँ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "इस छवि को $PIXELS$px में छोटा किया गया है.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "कार्यरत नहीं है."
  },
  "requestErrorDetails": {
    "message": "क्षमा करें! हम आपके शॉट को सहेज़ नहीं सके. कृपया बाद में पुन: प्रयास करें."
  },
  "connectionErrorTitle": {
    "message": "हम आपके स्क्रीनशॉट से जुड़ नहीं सकते हैं."
  },
  "connectionErrorDetails": {
    "message": "कृपया अपने इंटरनेट संपर्क की जाँच करें. यदि आप इंटरनेट से जुड़ने में सक्षम हैं, तो Firefox स्क्रीनशॉट सेवा के साथ एक अस्थायी समस्या हो सकती है."
  },
  "loginErrorDetails": {
    "message": "हम आपका शॉट सहेज नहीं सके क्योंकि Firefox स्क्रीनशॉट सेवा में कोई समस्या है. कृपया बाद में पुन: प्रयास करें."
  },
  "unshootablePageErrorTitle": {
    "message": "हम इस पृष्ठ का स्क्रीनशॉट नहीं ले सकते."
  },
  "unshootablePageErrorDetails": {
    "message": "यह एक मानक वेब पेज नहीं है, इसलिए आप इसका स्क्रीनशॉट नहीं ले सकते."
  },
  "selfScreenshotErrorTitle": {
    "message": "आप एक Firefox स्क्रीनशॉट पृष्ठ का शॉट नहीं ले सकते!"
  },
  "emptySelectionErrorTitle": {
    "message": "आपका चयन बहुत छोटा है"
  },
  "privateWindowErrorTitle": {
    "message": "निजी ब्राउज़िंग मोड में स्क्रीनशॉट निष्क्रिय कर दिया गया हैं"
  },
  "privateWindowErrorDetails": {
    "message": "असुविधा के लिए खेद हैं. हमलोग भविष्य संस्करण के लिए इस सुविधा पर काम कर रहे हैं."
  },
  "genericErrorTitle": {
    "message": "ओह! Firefox स्क्रीनशॉट बिगड़ गया."
  },
  "genericErrorDetails": {
    "message": "हम सुनिश्चित नहीं हैं कि अभी क्या हुआ. पुन: प्रयास या एक भिन्न पृष्ठ का एक शॉट लेना चाहते हैं?"
  },
  "tourBodyIntro": {
    "message": "Firefox छोड़े बिना स्क्रीनशॉट लें, सहेजें, और साझा करें."
  },
  "tourHeaderPageAction": {
    "message": "सहेजने का एक नया तरीका"
  },
  "tourHeaderClickAndDrag": {
    "message": "जो आप चाहते हैं उसे कैद करें"
  },
  "tourBodyClickAndDrag": {
    "message": "पृष्ठ के बस एक हिस्से को कैद करने के लिए क्लिक करें और खींचें. आप अपने चयन को हाइलाइट करने के लिए भी जा सकते हैं."
  },
  "tourHeaderFullPage": {
    "message": "विंडोज़ या संपूर्ण पृष्ठों को कैद करें"
  },
  "tourBodyFullPage": {
    "message": "विंडो में दिखाई देने वाले क्षेत्र या एक पूरे पृष्ठ को कैद करने के लिए ऊपर में दाहिनी तरफ़ के बटन का चयन करें."
  },
  "tourHeaderDownloadUpload": {
    "message": "जैसा आप इसे चाहते हैं"
  },
  "tourBodyDownloadUpload": {
    "message": "आसानी से साझा करने या उन्हें अपने कंप्यूटर पर डाउनलोड करने के लिए अपने क्रॉप किये गये शॉट को वेब पर सहेजें. आपके द्वारा लिए गये सभी शॉट्स को ढूंढने के लिए आप मेरे शॉट्स बटन पर भी क्लिक कर सकते हैं."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "अगली स्लाइड"
  },
  "tourPrevious": {
    "message": "पिछली स्लाइड"
  },
  "tourDone": {
    "message": "पूर्ण"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox स्क्रीनशॉट्स का उपयोग करके, आप हमारी $TERMSANDPRIVACYNOTICETERMSLINK$ और $TERMSANDPRIVACYNOTICEPRIVACYLINK$ से सहमत हैं.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "शर्तें"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "गोपनीयता सूचना"
  },
  "libraryLabel": {
    "message": "स्क्रीनशॉट"
  }
}PK
!<"þó²ÛÛ&webextension/_locales/hr/messages.json{
  "addonDescription": {
    "message": "Snimite ili slikajte stvari s Weba te ih spremite privremeno ili trajno."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.org>"
  },
  "contextMenuLabel": {
    "message": "Snimi zaslon"
  },
  "myShotsLink": {
    "message": "Moje snimke"
  },
  "screenshotInstructions": {
    "message": "Povucite ili kliknite na stranicu kako biste izabrali područje. Pritisnite ESC za otkazivanje radnje."
  },
  "saveScreenshotSelectedArea": {
    "message": "Spremi"
  },
  "saveScreenshotVisibleArea": {
    "message": "Spremi vidljivo"
  },
  "saveScreenshotFullPage": {
    "message": "Spremi cijelu stranicu"
  },
  "cancelScreenshot": {
    "message": "Otkaži"
  },
  "downloadScreenshot": {
    "message": "Preuzmi"
  },
  "notificationLinkCopiedTitle": {
    "message": "Poveznica je kopirana"
  },
  "notificationLinkCopiedDetails": {
    "message": "Poveznica do vaše snimke je kopirana u međuspremnik. Pristinite $META_KEY$-V da ju zalijepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ne radi."
  },
  "requestErrorDetails": {
    "message": "Ups! Nismo uspjeli spremiti vašu snimku. Molimo pokušajte ponovo kasnije."
  },
  "connectionErrorTitle": {
    "message": "Ne možemo se spojiti s vašim snimkama."
  },
  "connectionErrorDetails": {
    "message": "Molimo provjerite vašu internet vezu. Ako ste uspješno povezani s internetom, možda postoji privremeni problem sa uslugama Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nismo uspjeli spremiti vaš snimak zbog toga što postoji problem sa uslugama Firefox Screenshots. Molimo pokušajte kasnije."
  },
  "unshootablePageErrorTitle": {
    "message": "Ovu stranicu ne možemo snimiti."
  },
  "unshootablePageErrorDetails": {
    "message": "Ovo nije standardna Web stranica stoga ju ne možete snimiti."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ne možete snimiti Firefox Screenshots stranicu!"
  },
  "emptySelectionErrorTitle": {
    "message": "Vaš odabir je premalen"
  },
  "privateWindowErrorTitle": {
    "message": "Snimke ekrana su onemogućene u načinu privatnog pretraživanja"
  },
  "privateWindowErrorDetails": {
    "message": "Žao nam je na neugodnosti. Radimo na ovoj mogućnosti za buduća izdanja."
  },
  "genericErrorTitle": {
    "message": "Uf! Firefox Screenshots se zbrkao."
  },
  "genericErrorDetails": {
    "message": "Nismo sigurno što se upravo dogodilo. Možete li pokušati ponovno ili snimiti drukčiju stranicu?"
  },
  "tourBodyIntro": {
    "message": "Snimite, spremite i dijelite snimke bez da napuštate Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Novi način za spremanje"
  },
  "tourBodyPageAction": {
    "message": "Proširite izbornik radnji stranice u adresnoj traci svaki puta kada želite snimiti ekran."
  },
  "tourHeaderClickAndDrag": {
    "message": "Snimite ono što želite"
  },
  "tourBodyClickAndDrag": {
    "message": "Kliknite i povucite ako želite snimiti samo dio stranice. Također možete označiti vaš odabir tako da preko njega stavite pokazivač miša."
  },
  "tourHeaderFullPage": {
    "message": "Baš kako vam se sviđa"
  },
  "tourBodyFullPage": {
    "message": "Spremite vaše odrezane snimke na Web kako biste ih jednostavnije dijelili, ili ih jednostavno skinite na vaše računalo. Također možete kliknuti gumb Moje snimke kako biste pronašli sve vaše dosadašnje snimke."
  },
  "tourHeaderDownloadUpload": {
    "message": "Snimajte prozore ili cijele stranice"
  },
  "tourBodyDownloadUpload": {
    "message": "Odaberite gumbove na gornjem desnom kutu kako biste snimili vidljivo područje u prozoru ili cijelu stranicu."
  },
  "tourSkip": {
    "message": "PRESKOČI"
  },
  "tourNext": {
    "message": "Sljedeći slajd"
  },
  "tourPrevious": {
    "message": "Prijašnji slajd"
  },
  "tourDone": {
    "message": "Gotovo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Koristeći Firefox Screenshots slažete se s našim $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Uvjeti"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Pravila o privatnosti"
  },
  "libraryLabel": {
    "message": "Snimke ekrana"
  }
}PK
!<Âg:º'webextension/_locales/hsb/messages.json{
  "addonDescription": {
    "message": "Wzmiće klipy a fota wobrazowki z weba a składujće je nachwilu abo na přeco."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Foto wobrazowki činić"
  },
  "myShotsLink": {
    "message": "Moje fota wobrazowki"
  },
  "screenshotInstructions": {
    "message": "Ćehńće abo klikńće na stronu, zo byšće wobwod wubrał. Tłóčće na ESC, zo byšće přetorhnył."
  },
  "saveScreenshotSelectedArea": {
    "message": "Składować"
  },
  "saveScreenshotVisibleArea": {
    "message": "Widźomny wobwod składować"
  },
  "saveScreenshotFullPage": {
    "message": "Cyłu stronu składować"
  },
  "cancelScreenshot": {
    "message": "Přetorhnyć"
  },
  "downloadScreenshot": {
    "message": "Sćahnyć"
  },
  "downloadOnlyNotice": {
    "message": "Tuchwilu sće w modusu „Jenož sćahnyć“."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots w slědowacych situacijach awtomatisce do modusa „Jenož sćahnyć“ přepina:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "W priwatnym woknje."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Placki třećich poskićowarjow su znjemóžnjene."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "„Sej historiju ženje njespomjatkować“ je zmóžnjene."
  },
  "downloadOnlyDetailsESR": {
    "message": "Wužiwaće Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nahraća su znjemóžnjene."
  },
  "notificationLinkCopiedTitle": {
    "message": "Wotkaz kopěrowany"
  },
  "notificationLinkCopiedDetails": {
    "message": "Wotkaz k wašemu fotu wobrazowki je so do mjezyskłada kopěrował. Tłóčće $META_KEY$-V, zo byšće jón zasadźił.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopěrować"
  },
  "notificationImageCopiedTitle": {
    "message": "Foto kopěrowane"
  },
  "notificationImageCopiedDetails": {
    "message": "Waše foto je so do mjezyskłada kopěrowało. Tłóčće $META_KEY$-V, zo byšće jo zasadźił.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tutón wobraz je so na $PIXELS$px přitřihał.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Skóncowany."
  },
  "requestErrorDetails": {
    "message": "Bohužel njemóžachmy waše foto wobrazowki składować. Prošu spytajće pozdźišo hišće raz."
  },
  "connectionErrorTitle": {
    "message": "Njemóžemy z wašimi fotami wobrazowki zwjazać."
  },
  "connectionErrorDetails": {
    "message": "Prošu přepruwujće swój internetny zwisk. Jeli móžeće z internetom zwjazać, je snano nachwilny problem ze słužbu Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Njemóžachmy swoje foto wobrazowki składować, dokelž je problem ze słužbu Firefox Screenshots. Prošu spytajće pozdźišo hišće raz."
  },
  "unshootablePageErrorTitle": {
    "message": "Foto wobrazowki tuteje strony móžne njeje."
  },
  "unshootablePageErrorDetails": {
    "message": "To standardna webstrona njeje, tohodla foto wobrazowki wot njeje móžne njeje."
  },
  "selfScreenshotErrorTitle": {
    "message": "Njemóžeće wobrazowku strony Firefox Screenshots fotografować!"
  },
  "emptySelectionErrorTitle": {
    "message": "Waš wuběr je přemały"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots je w priwatnym modusu znjemóžnjeny"
  },
  "privateWindowErrorDetails": {
    "message": "Wodajće prošu njepřijomnosće. Dźěłamy na tutej funkciji za přichodne wersije."
  },
  "genericErrorTitle": {
    "message": "Hopla! Firefox Screenshots njefunguje."
  },
  "genericErrorDetails": {
    "message": "Njejsmy sej wěsći, štož je so stało. Chceće hišće raz spytać abo chceće druhu stronu fotografować?"
  },
  "tourBodyIntro": {
    "message": "Čińće, składujće a dźělće fota wobrazowki bjez toho, zo byšće Firefox wopušćił."
  },
  "tourHeaderPageAction": {
    "message": "Nowe wašnje składowanja"
  },
  "tourBodyPageAction": {
    "message": "Wočińće meni akcijow strony w adresowym polu kóždy raz, hdyž chceće foto wobrazowki činić."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fotografujće prosće, štož chceće"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikńće a ćehńće, zo byšće dźěl strony fotografował. Móžeće tež pokazowak myški nad nim pohibować, zo byšće swój wuběr wuzběhnył."
  },
  "tourHeaderFullPage": {
    "message": "Wokna abo cyłe strony składować"
  },
  "tourBodyFullPage": {
    "message": "Wubjerće tłóčatka horjeka naprawo, zo byšće widźomny wobwod we woknje abo cyłu stronu fotografować."
  },
  "tourHeaderDownloadUpload": {
    "message": "Tak, kaž so wam spodoba"
  },
  "tourBodyDownloadUpload": {
    "message": "Składujće swoje přitřihane fota wobrazowki w interneće, zo byšće je lóšo dźělił, abo sćehńće je na swój ličak. Móžeće tež na tłóčatko „Moje fota wobrazowki“ kliknyć, zo byšće wšě fota wobrazowki namakał, kotrež sće činił."
  },
  "tourSkip": {
    "message": "Přeskočić"
  },
  "tourNext": {
    "message": "Přichodne foto"
  },
  "tourPrevious": {
    "message": "Předchadne foto"
  },
  "tourDone": {
    "message": "Hotowo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Přez wužiwanje Firefox ScreenShots, zwoliće do našich $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$ Firefox Screenshots.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Wuměnjenja"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Pokaz priwatnosće"
  },
  "libraryLabel": {
    "message": "Fota wobrazowki"
  }
}PK
!<;þHÈ\\&webextension/_locales/hu/messages.json{
  "addonDescription": {
    "message": "Készítsen videoklipeket és képernyőképeket a webről, és mentse őket ideiglenesen vagy véglegesen."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Készítsen képernyőképet"
  },
  "myShotsLink": {
    "message": "Az Ön képei"
  },
  "screenshotInstructions": {
    "message": "Húzza, vagy kattintson a lapra a terület kiválasztásához. Nyomjon ESC-t a megszakításhoz."
  },
  "saveScreenshotSelectedArea": {
    "message": "Mentés"
  },
  "saveScreenshotVisibleArea": {
    "message": "Láthatóak mentése"
  },
  "saveScreenshotFullPage": {
    "message": "Teljes oldal mentése"
  },
  "cancelScreenshot": {
    "message": "Mégse"
  },
  "downloadScreenshot": {
    "message": "Letöltés"
  },
  "downloadOnlyNotice": {
    "message": "Jelenleg csak letöltési módban van."
  },
  "downloadOnlyDetails": {
    "message": "A Firefox Screenshots ezekben az esetekben automatikusan csak letöltési módba vált:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Privát böngészési ablakban."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Ha a harmadik féltől származó sütik tiltottak."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "A „Soha ne jegyezze meg az előzményeket” engedélyezett."
  },
  "downloadOnlyDetailsESR": {
    "message": "Firefox ESR-t használ."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "A feltöltések le lettek tiltva."
  },
  "notificationLinkCopiedTitle": {
    "message": "Hivatkozás másolva"
  },
  "notificationLinkCopiedDetails": {
    "message": "A képernyőképre mutató hivatkozás a vágólapra lett másolva. Nyomjon $META_KEY$-V-t a beillesztéshez.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Másolás"
  },
  "notificationImageCopiedTitle": {
    "message": "Képernyőkép másolva"
  },
  "notificationImageCopiedDetails": {
    "message": "A képernyőkép a vágólapra lett másolva. Nyomjon $META_KEY$-V-t a beillesztéshez.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "A kép $PIXELS$px méretűre lett vágva.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Nem működik."
  },
  "requestErrorDetails": {
    "message": "Bocsánat! Nem tudtuk menteni a képet. Próbálkozzon később."
  },
  "connectionErrorTitle": {
    "message": "Nem tudunk kapcsolódni a képernyőképekhez."
  },
  "connectionErrorDetails": {
    "message": "Ellenőrizze az internetkapcsolatot. Ha tud kapcsolódni az internetre, akkor lehet, hogy ideiglenes probléma van a Firefox képernyőképek szolgáltatással."
  },
  "loginErrorDetails": {
    "message": "Nem tudtuk elmenteni a képét, mert probléma lépett fel a Firefox képernyőképek szolgáltatással. Próbálja újra később."
  },
  "unshootablePageErrorTitle": {
    "message": "Nem lehet képet készíteni erről a lapról."
  },
  "unshootablePageErrorDetails": {
    "message": "Ez egy nem szabványos weblap, így nem készíthet róla képernyőképet."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nem készíthet képet a Firefox Screenshots oldalról!"
  },
  "emptySelectionErrorTitle": {
    "message": "A kijelölés túl kicsi"
  },
  "privateWindowErrorTitle": {
    "message": "A képernyőképek le vannak tiltva Privát böngészésben"
  },
  "privateWindowErrorDetails": {
    "message": "Sajnáljuk a kényelmetlenséget. Dolgozunk ezen a funkción a jövőbeli kiadásokhoz."
  },
  "genericErrorTitle": {
    "message": "Húha! A Firefox Screenshots megkergült."
  },
  "genericErrorDetails": {
    "message": "Nem vagyunk benne biztosak, hogy mi történt. Próbálja újra, vagy készítsen képet egy másik oldalról."
  },
  "tourBodyIntro": {
    "message": "Készítsen, mentsen és osszon meg képernyőképeket, anélkül, hogy elhagyná a Firefoxot."
  },
  "tourHeaderPageAction": {
    "message": "A mentés új módja"
  },
  "tourBodyPageAction": {
    "message": "Nyissa le a lapműveletek menüt a címsávban bármikor, ha képernyőképet akar készíteni."
  },
  "tourHeaderClickAndDrag": {
    "message": "Csak azt mentse, amit szeretne"
  },
  "tourBodyClickAndDrag": {
    "message": "Kattintson és húzzon, hogy csak a lap egy részét mentse el. Vagy csak rá is mutathat a kijelöléshez."
  },
  "tourHeaderFullPage": {
    "message": "Mentsen ablakokat vagy teljes lapokat"
  },
  "tourBodyFullPage": {
    "message": "Válassza a jobb felső sarokban lévő gombokat, hogy egy látható területet mentsen az ablakból, vagy elmentsen egy teljes oldalt."
  },
  "tourHeaderDownloadUpload": {
    "message": "Ahogy tetszik"
  },
  "tourBodyDownloadUpload": {
    "message": "Mentse a kivágott képeket a webre a könnyebb megosztáshoz, vagy töltse le a számítógépére. Rá is kattinthat a Képernyőképek gombra, hogy megtalálja az összes képét."
  },
  "tourSkip": {
    "message": "Kihagyás"
  },
  "tourNext": {
    "message": "Következő dia"
  },
  "tourPrevious": {
    "message": "Előző dia"
  },
  "tourDone": {
    "message": "Kész"
  },
  "termsAndPrivacyNotice2": {
    "message": "A Firefox képernyőképek használatával, Ön beleegyezik a $TERMSANDPRIVACYNOTICETERMSLINK$ és $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Feltételekbe"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Adatvédelmi nyilatkozatba"
  },
  "libraryLabel": {
    "message": "Képernyőképek"
  }
}PK
!<|'©©)webextension/_locales/hy_AM/messages.json{
  "addonDescription": {
    "message": "Ստացեք հոլովակներ և էկրանի հանույթներ վեբից և պահպանեք դանք ժամանակավոր կամ մշտապես:"
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ստանալ էկրանի հանույթը"
  },
  "myShotsLink": {
    "message": "Իմ պատկերները"
  },
  "screenshotInstructions": {
    "message": "Քաշեք և սեղմեք էջի վրա՝ ընտրելու տարածքը: Սեղմեք ESC՝ չեղարկելու համար:"
  },
  "saveScreenshotSelectedArea": {
    "message": "Պահպանել"
  },
  "saveScreenshotVisibleArea": {
    "message": "Պահպանելի տեսանելի"
  },
  "saveScreenshotFullPage": {
    "message": "Պահպանել ամբողջ էջը"
  },
  "cancelScreenshot": {
    "message": "Չեղարկել"
  },
  "downloadScreenshot": {
    "message": "Ներբեռնել"
  },
  "notificationLinkCopiedTitle": {
    "message": "Հղումը պատճենվել է"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ձեր պատկերի հղումը պատճենվել է: Սեղմեք $META_KEY$-V՝ այն տեղադրելու համար:",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Անսարք:"
  },
  "requestErrorDetails": {
    "message": "Ցավոք մենք չենք կարող պահպանել պատկեր: Կրկին փորձեք ավելի ուշ:"
  },
  "connectionErrorTitle": {
    "message": "Հնարավոր չէ ապակցել էկրանի ձեր հանույթներին:"
  },
  "connectionErrorDetails": {
    "message": "Խնդրում ենք ստուգել համացանցային կապակցումը: Եթե մուտք չունեք համացանց՝ հնարավոր է՝ դա Firefox Screenshots ծառայության հետ կապված ժամանակավոր խնդիր է:"
  },
  "loginErrorDetails": {
    "message": "Մենք չենք կարող պահպանել ձեր պատկերը, քանի որ խնդիր կա Firefox Screenshots ծառայության հետ: Փորձեք ավելի ուշ:"
  },
  "unshootablePageErrorTitle": {
    "message": "Հնարավոր չէ ստանալ էկրանի հանույթը:"
  },
  "unshootablePageErrorDetails": {
    "message": "Սա ստանդարտ վեբ էջ չէ, ուստի դուք չեք կարող ստանալ դրա հանույթը:"
  },
  "selfScreenshotErrorTitle": {
    "message": "Դուք չեք կարող ստանալ Firefox Screenshots-ի էջի հանույթը:"
  },
  "emptySelectionErrorTitle": {
    "message": "Ընտրվածը քիչ է"
  },
  "privateWindowErrorTitle": {
    "message": "Էկրանի հանույթը անջատած է Գաղտնի Դիտարկման կերպում:"
  },
  "privateWindowErrorDetails": {
    "message": "Ներողություն անհարմարության համար: Մենք աշխատում ենք այս յուրահատկության վրա:"
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots-ը գնաց գլխիվայր:"
  },
  "genericErrorDetails": {
    "message": "Մենք վստահ չենք, թե ինչ է տեղի ունեցնել: Կրկին փորձեք կամ փորձեք ստանալ մեկ այլ էջի հանույթ:"
  },
  "tourBodyIntro": {
    "message": "Ստացեք, պահպանեք և համօգտագործեք էկրանի հանույթները՝ առանց Firefox-ը լքելու:"
  },
  "tourHeaderPageAction": {
    "message": "Պահպանելու նոր ճանապարհ"
  },
  "tourBodyPageAction": {
    "message": "Ընդարձակել էջի գործույթների ցանկը հասցեի գոտիում՝ ցանկացած ժամանակ էկրանի հանույթը ստանալու համար:"
  },
  "tourHeaderClickAndDrag": {
    "message": "Ստացեք միայն այն, ինչ Ձեզ պետք է:"
  },
  "tourBodyClickAndDrag": {
    "message": "Սեղմեք և քաշեք՝ ստանալու համար միայն էջի մի մասը: Նաև կարող եք վրայով անցկացնել՝ գունանշելու համար ընտրումը:"
  },
  "tourHeaderFullPage": {
    "message": "Ստանալ պատուհանը կամ ամբողջ էջեր"
  },
  "tourBodyFullPage": {
    "message": "Ընտրեք կոճակները վերևի աջ մասում՝ տեսանելի հատվածը ստանալու համար պատուհանում կամ ամբողջ էջը ստանալու համար:"
  },
  "tourHeaderDownloadUpload": {
    "message": "Ինչպես որ հավանում եք այն"
  },
  "tourBodyDownloadUpload": {
    "message": "Պահպանեք ձեր եզրատած որոշ պատկերներ վեբում՝ դրանք հեշտությամբ համօգտագործելու կամ ներբեռնելու համար ձեր համակարգչում: Նաև կարող եք սեղմել Իմ պատկերները՝ գտնելու ձեր բոլոր ֆայլերը:"
  },
  "tourSkip": {
    "message": "Բաց թողնել"
  },
  "tourNext": {
    "message": "Հաջորդ սահիկը"
  },
  "tourPrevious": {
    "message": "Նախորդ սահիկը"
  },
  "tourDone": {
    "message": "Պատրաստ է"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots-ը օգտագործելով՝ դուք ընդունեւմ եք $TERMSANDPRIVACYNOTICETERMSLINK$ը և $TERMSANDPRIVACYNOTICEPRIVACYLINK$ը:",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Պայմաններ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Գաղտնիության ծանուցում"
  },
  "libraryLabel": {
    "message": "Էկրանի հանույթներ"
  }
}PK
!<|ÅnuTT&webextension/_locales/ia/messages.json{
  "addonDescription": {
    "message": "Prende retalios video e instantaneos de schermo ab le Web e salva los temporarimente o permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Captura un instantaneo de schermo"
  },
  "myShotsLink": {
    "message": "Mi instantaneos"
  },
  "screenshotInstructions": {
    "message": "Trahe o clicca sur le pagina pro seliger un parte. Pulsa ESC pro cancellar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salvar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salvar le area visibile"
  },
  "saveScreenshotFullPage": {
    "message": "Salvar le pagina"
  },
  "cancelScreenshot": {
    "message": "Cancellar"
  },
  "downloadScreenshot": {
    "message": "Discargar"
  },
  "downloadOnlyNotice": {
    "message": "Tu es actualmente in modo solo-discargamento."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automaticamente se converte al modo de solo discargamento in le situationes sequente:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In un fenestra de Navigation Private."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de tertie parte disactivate."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Oblidar le chronologia” activate."
  },
  "downloadOnlyDetailsESR": {
    "message": "Tu usa Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Le cargamentos ha essite disactivate."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ligamine copiate"
  },
  "notificationLinkCopiedDetails": {
    "message": "Le ligamine a tu instantaneo ha essite copiate al area de transferentia. Pulsa $META_KEY$-V pro collar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Instantaneo copiate"
  },
  "notificationImageCopiedDetails": {
    "message": "Tu instantaneo ha essite copiate al area de transferentia. Pulsa $META_KEY$-V pro collar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Iste imagine ha essite retaliate a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Foras de servicio."
  },
  "requestErrorDetails": {
    "message": "Pardono! Nos non pote salvar tu instantaneo. Per favor reproba plus tarde."
  },
  "connectionErrorTitle": {
    "message": "Nos non pote te connecter a tu instantaneos de schermo."
  },
  "connectionErrorDetails": {
    "message": "Per favor controla tu connexion Internet. Si tu pote te connecter a Internet, il pote haber forsan un problema temporanee con le servicio de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nos non pote salvar tu instantaneo pois que il ha un problema con le servicio de Firefox Screenshots. Per favor reproba plus tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "Impossibile capturar iste pagina."
  },
  "unshootablePageErrorDetails": {
    "message": "Isto non es un pagina Web standard, assi tu non pote prender un instantaneo de schermo de illo."
  },
  "selfScreenshotErrorTitle": {
    "message": "Tu non pote prender un instantaneo de un pagina de Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tu selection es troppo micre"
  },
  "privateWindowErrorTitle": {
    "message": "Le instantaneos es disactivate durante le navigation private"
  },
  "privateWindowErrorDetails": {
    "message": "Pardono pro le incommoditate. Nos labora sur iste functionalitate pro futur publicationes."
  },
  "genericErrorTitle": {
    "message": "Problemas de Firefox Screenshots!"
  },
  "genericErrorDetails": {
    "message": "Nos non sape lo que occurreva. Reprobar o capturar un instantaneo de un altere pagina?"
  },
  "tourBodyIntro": {
    "message": "Captura, salva e comparti instantaneos de schermo sin lassar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Un nove modo pro salvar"
  },
  "tourBodyPageAction": {
    "message": "Aperi le menu del actiones de pagina in le barra de adresse quando tu desira prender un instantaneo de schermo."
  },
  "tourHeaderClickAndDrag": {
    "message": "Captura solo lo que tu vole"
  },
  "tourBodyClickAndDrag": {
    "message": "Clicca e trahe pro capturar justo un parte del pagina. Tu pote alsi passar supra pro evidentiar tu selection."
  },
  "tourHeaderFullPage": {
    "message": "Captura fenestras o paginas integre"
  },
  "tourBodyFullPage": {
    "message": "Elige le buttones in alto a dextra pro capturar le area visibile in le fenestra o pro capturar un pagina integre."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como tu lo agrada"
  },
  "tourBodyDownloadUpload": {
    "message": "Salvar tu instantaneos retaliate al web pro los compartir plus facilemente, o los discargar a tu computator. Tu alsi pote cliccar sur le button Mi Instantaneos pro trovar tote le instantaneos que tu ha prendite."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Diapositiva sequente"
  },
  "tourPrevious": {
    "message": "Previe diapositiva"
  },
  "tourDone": {
    "message": "Facite"
  },
  "termsAndPrivacyNotice2": {
    "message": "Usante Firefox Screenshots, tu concorda con nostre $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Terminos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Notification de confidentialitate"
  },
  "libraryLabel": {
    "message": "Instantaneos de schermo"
  }
}PK
!<åD‹®®&webextension/_locales/id/messages.json{
  "addonDescription": {
    "message": "Rekam klip dan tangkapan layar dari Web dan simpan untuk sementara atau secara permanen."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Buat Tangkapan Layar"
  },
  "myShotsLink": {
    "message": "Tangkapan Saya"
  },
  "screenshotInstructions": {
    "message": "Seret atau klik pada laman untuk memilih area. Tekan ESC untuk membatalkan."
  },
  "saveScreenshotSelectedArea": {
    "message": "Simpan"
  },
  "saveScreenshotVisibleArea": {
    "message": "Simpan yang terlihat"
  },
  "saveScreenshotFullPage": {
    "message": "Simpan laman sepenuhnya"
  },
  "cancelScreenshot": {
    "message": "Batal"
  },
  "downloadScreenshot": {
    "message": "Unduh"
  },
  "downloadOnlyNotice": {
    "message": "Anda saat ini berada di mode Hanya-Unduh."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots secara otomatis berganti ke mode Hanya-Unduh pada situasi berikut:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Di jendela Penjelajahan Pribadi."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kuki pihak ketiga dinonaktifkan."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Jangan pernah ingat riwayat” diaktifkan."
  },
  "downloadOnlyDetailsESR": {
    "message": "Anda menggunakan Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Unduhan dinonaktifkan."
  },
  "notificationLinkCopiedTitle": {
    "message": "Tautan Disalin"
  },
  "notificationLinkCopiedDetails": {
    "message": "Tautan ke gambar Anda telah disalin ke papan klip. Tekan $META_KEY$-V untuk menempelkan.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Salin"
  },
  "notificationImageCopiedTitle": {
    "message": "Tangkapan Disalin"
  },
  "notificationImageCopiedDetails": {
    "message": "Tangkapan Anda telah disalin ke papan klip. Tekan $META_KEY$-V untuk menempelkan.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Gambar ini telah dipotong menjadi $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tak dapat digunakan."
  },
  "requestErrorDetails": {
    "message": "Maaf! Kami tidak dapat menyimpan gambar Anda. Silakan coba lagi."
  },
  "connectionErrorTitle": {
    "message": "Kami tidak dapat terhubung dengan tangkapan layar Anda."
  },
  "connectionErrorDetails": {
    "message": "Silakan periksa sambungan Internet Anda. Jika Anda dapat tersambung ke Internet, mungkin terjadi masalah sementara pada layanan Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Kami tidak dapat menyimpan gambar Anda karena ada masalah dengan layanan Firefox Screenshots. Silakan coba kembali nanti."
  },
  "unshootablePageErrorTitle": {
    "message": "Kami tidak dapat menangkap layar laman ini."
  },
  "unshootablePageErrorDetails": {
    "message": "Ini bukan laman Web yang standar, sehingga Anda tidak dapat membuat tangkapan dari layar ini."
  },
  "selfScreenshotErrorTitle": {
    "message": "Anda tidak dapat merekam gambar dari laman Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Seleksi Anda terlalu kecil"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots dinonaktifkan di Mode Penjelajahan Pribadi"
  },
  "privateWindowErrorDetails": {
    "message": "Maaf atas ketidaknyamanannya. Kami sedang mengerjakan fitur ini untuk peluncuran masa mendatang."
  },
  "genericErrorTitle": {
    "message": "Wah! Firefox Screenshots mendadak kacau."
  },
  "genericErrorDetails": {
    "message": "Kami tidak yakin akan apa yang terjadi. Ingin mencoba lagi atau merekam gambar dari laman yang berbeda?"
  },
  "tourBodyIntro": {
    "message": "Ambil, simpan, dan bagikan tangkapan layar tanpa meninggalkan Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Cara baru untuk menyimpan"
  },
  "tourBodyPageAction": {
    "message": "Bentangkan menu tindakan laman di bilah alamat setiap kali Anda ingin buat tangkapan layar."
  },
  "tourHeaderClickAndDrag": {
    "message": "Rekam Bagian Yang Anda Inginkan"
  },
  "tourBodyClickAndDrag": {
    "message": "Klik dan seret untuk merekam sebagian area laman. Anda juga dapat menggeser kursor untuk menyoroti pilihan Anda."
  },
  "tourHeaderFullPage": {
    "message": "Rekam Jendela atau Seluruh Laman"
  },
  "tourBodyFullPage": {
    "message": "Pilih tombol di kanan atas untuk merekam area yang terlihat pada jendela atau rekam seluruh laman."
  },
  "tourHeaderDownloadUpload": {
    "message": "Sesuka Anda"
  },
  "tourBodyDownloadUpload": {
    "message": "Simpan potongan tangkapan Anda ke Web agar mudah dibagikan, atau unduh ke komputer. Anda pun dapat mengeklik pada tombol Gambar Saya untuk menemukan semua tangkapan yang pernah Anda rekam."
  },
  "tourSkip": {
    "message": "LEWATI"
  },
  "tourNext": {
    "message": "Salindia Selanjutnya"
  },
  "tourPrevious": {
    "message": "Salindia Sebelumnya"
  },
  "tourDone": {
    "message": "Selesai"
  },
  "termsAndPrivacyNotice2": {
    "message": "Dengan menggunakan Firefox Screenshots, Anda setuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kami.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Ketentuan"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Kebijakan Privasi"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<ոÂ6êê&webextension/_locales/it/messages.json{
  "addonDescription": {
    "message": "Crea screenshot di contenuti sul Web e salvali, solo per un periodo di tempo o in modo permanente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Cattura screenshot"
  },
  "myShotsLink": {
    "message": "I miei screenshot"
  },
  "screenshotInstructions": {
    "message": "Trascina o fai clic su una pagina per selezionare un’area della pagina. Premi ESC per annullare."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salva"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salva l’area visibile"
  },
  "saveScreenshotFullPage": {
    "message": "Salva l’intera schermata"
  },
  "cancelScreenshot": {
    "message": "Annulla"
  },
  "downloadScreenshot": {
    "message": "Scarica"
  },
  "downloadOnlyNotice": {
    "message": "Al momento è attiva la modalità “Solo download”."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots entra automaticamente in modalità “Solo download” nelle seguenti situazioni:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Se è attiva la modalità Navigazione anonima."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Se i cookie di terze parti sono disattivati."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Se è attiva l’opzione “Non salvare la cronologia”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Stai usando Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Il caricamento è disattivato."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link copiato"
  },
  "notificationLinkCopiedDetails": {
    "message": "Il link all’immagine è stato copiato negli appunti. Utilizza $META_KEY$-V per incollarlo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copia"
  },
  "notificationImageCopiedTitle": {
    "message": "Immagine copiata"
  },
  "notificationImageCopiedDetails": {
    "message": "L’immagine è stata copiata negli appunti. Premi $META_KEY$-V per incollarla.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Questa immagine è stata ritagliata a $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Fuori servizio"
  },
  "requestErrorDetails": {
    "message": "Siamo spiacenti, non è stato possibile salvare l’immagine. Riprova più tardi."
  },
  "connectionErrorTitle": {
    "message": "Non è possibile accedere agli screenshot salvati."
  },
  "connectionErrorDetails": {
    "message": "Verifica che la connessione a Internet stia funzionando correttamente. Se è possibile accedere ad altri siti, potrebbe trattarsi di un problema temporaneo con il servizio Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Non è stato possibile salvare l’immagine in quanto si è verificato un problema con il servizio Firefox Screenshots. Riprova più tardi."
  },
  "unshootablePageErrorTitle": {
    "message": "Non è possibile salvare uno screenshot di questa pagina."
  },
  "unshootablePageErrorDetails": {
    "message": "Non è possibile salvare uno screenshot in quanto non si tratta di una normale pagina web."
  },
  "selfScreenshotErrorTitle": {
    "message": "Non è possibile salvare uno screenshot di una pagina di Firefox Screenshots"
  },
  "emptySelectionErrorTitle": {
    "message": "L’area selezionata è troppo piccola"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots è disattivato in navigazione anonima."
  },
  "privateWindowErrorDetails": {
    "message": "Ci dispiace per l’inconveniente. Stiamo lavorando a questa funzione per le prossime versioni."
  },
  "genericErrorTitle": {
    "message": "Wow! Firefox Screenshots è andato in tilt"
  },
  "genericErrorDetails": {
    "message": "Non sappiamo che cosa sia successo. Riprova, magari con una pagina diversa."
  },
  "tourBodyIntro": {
    "message": "Cattura, salva e condividi screenshot senza mai uscire da Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Un nuovo modo per salvare informazioni"
  },
  "tourBodyPageAction": {
    "message": "Hai bisogno di catturare un’istantanea della pagina? Ti basta aprire il menu nella barra degli indirizzi."
  },
  "tourHeaderClickAndDrag": {
    "message": "Cattura solo ciò che ti serve"
  },
  "tourBodyClickAndDrag": {
    "message": "Fai clic e trascina per catturare solo una parte della pagina. Posiziona il mouse sopra all’area selezionata per evidenziarla."
  },
  "tourHeaderFullPage": {
    "message": "Cattura una finestra o una pagina intera"
  },
  "tourBodyFullPage": {
    "message": "Utilizza i pulsanti in alto a destra per catturare una parte della finestra o l’intera pagina."
  },
  "tourHeaderDownloadUpload": {
    "message": "Come piace a te"
  },
  "tourBodyDownloadUpload": {
    "message": "Cattura lo screenshot di una pagina web, ritaglialo e salvalo online per condividerlo in modo più veloce, oppure scaricalo sul tuo computer. Puoi anche utilizzare il pulsante “I miei screenshot” per ritrovare tutte le immagini che hai salvato."
  },
  "tourSkip": {
    "message": "Ignora"
  },
  "tourNext": {
    "message": "Schermata successiva"
  },
  "tourPrevious": {
    "message": "Schermata precedente"
  },
  "tourDone": {
    "message": "Fine"
  },
  "termsAndPrivacyNotice2": {
    "message": "Utilizzando Firefox Screenshots si accettano le $TERMSANDPRIVACYNOTICETERMSLINK$ e l’$TERMSANDPRIVACYNOTICEPRIVACYLINK$ del servizio.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "condizioni di utilizzo"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "informativa sulla privacy"
  },
  "libraryLabel": {
    "message": "Screenshot"
  }
}PK
!<ëötÍ66&webextension/_locales/ja/messages.json{
  "addonDescription": {
    "message": "ウェブからスクリーンショットを撮って、一時的または永久にそれを保存しましょう。"
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "スクリーンショットを撮る"
  },
  "myShotsLink": {
    "message": "自分のショット"
  },
  "screenshotInstructions": {
    "message": "ページをドラッグまたはクリックして範囲を選択してください。ESC キーを押すとキャンセルできます。"
  },
  "saveScreenshotSelectedArea": {
    "message": "保存"
  },
  "saveScreenshotVisibleArea": {
    "message": "表示範囲を保存"
  },
  "saveScreenshotFullPage": {
    "message": "ページ全体を保存"
  },
  "cancelScreenshot": {
    "message": "キャンセル"
  },
  "downloadScreenshot": {
    "message": "ダウンロード"
  },
  "downloadOnlyNotice": {
    "message": "ダウンロード専用モードが有効になっています。"
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots は以下のような状況では自動的にダウンロード専用モードへ切り替わります。"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "プライベートブラウジングを使用している場合。"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "サードパーティ Cookie が無効になっている場合。"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "「履歴を一切記憶させない」設定が有効になっている場合。"
  },
  "downloadOnlyDetailsESR": {
    "message": "あなたは Firefox ESR をお使いです。"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "アップロードは無効化されています。"
  },
  "notificationLinkCopiedTitle": {
    "message": "リンクをコピーしました"
  },
  "notificationLinkCopiedDetails": {
    "message": "ショットへのリンクがクリップボードへコピーされました。$META_KEY$+V キーで貼り付けられます。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "コピー"
  },
  "notificationImageCopiedTitle": {
    "message": "ショットをコピーしました"
  },
  "notificationImageCopiedDetails": {
    "message": "ショットがクリップボードへコピーされました。$META_KEY$+V キーで貼り付けられます。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "この画像は $PIXELS$px にトリミングされました。",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "問題が発生しました。"
  },
  "requestErrorDetails": {
    "message": "申し訳ありませんが、ショットを保存できませんでした。また後で試してください。"
  },
  "connectionErrorTitle": {
    "message": "Screenshots ライブラリへ接続できません。"
  },
  "connectionErrorDetails": {
    "message": "お使いのインターネット接続を確認してください。インターネットへ接続できる場合は、Firefox Screenshots サービスに一時的な問題が発生しているものと思われます。"
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots サービスに問題があるため、ショットを保存できませんでした。また後で試してください。"
  },
  "unshootablePageErrorTitle": {
    "message": "このページはスクリーンショットを撮れません。"
  },
  "unshootablePageErrorDetails": {
    "message": "これは通常のウェブページでないため、スクリーンショットを撮ることができません。"
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots ページのショットは撮れません。"
  },
  "emptySelectionErrorTitle": {
    "message": "選択範囲が小さすぎます"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots はプライベートブラウジングモードでは使用できません"
  },
  "privateWindowErrorDetails": {
    "message": "ご不便をおかけして申し訳ありません。今後のリリースでこの機能を提供できるよう取り組んでいます。"
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots に問題が発生しました。"
  },
  "genericErrorDetails": {
    "message": "何か問題が発生したようです。再度試すか、別のページのショットを撮ってみてください。"
  },
  "tourBodyIntro": {
    "message": "Firefox を離れることなく、スクリーンショットを撮影、保存、共有。"
  },
  "tourHeaderPageAction": {
    "message": "新たな保存方法"
  },
  "tourBodyPageAction": {
    "message": "スクリーンショットを撮りたいときは、いつでもアドレスバー内のページアクションメニューを開いてください。"
  },
  "tourHeaderClickAndDrag": {
    "message": "必要な部分だけをキャプチャ"
  },
  "tourBodyClickAndDrag": {
    "message": "クリック&ドラッグでページの一部だけをキャプチャできます。また、マウスを当てれば選択範囲が強調表示されます。"
  },
  "tourHeaderFullPage": {
    "message": "ウィンドウもしくはページ全体をキャプチャ"
  },
  "tourBodyFullPage": {
    "message": "右上のボタンを選択して、ウィンドウ内の表示範囲もしくはページ全体をキャプチャしましょう。"
  },
  "tourHeaderDownloadUpload": {
    "message": "お好きなように"
  },
  "tourBodyDownloadUpload": {
    "message": "切り取ったショットを簡単に共有できるようウェブ上に保存したり、手元へダウンロードしたり。また「自分のショット」ボタンをクリックすれば、これまでに撮ったすべてのショットを見られます。"
  },
  "tourSkip": {
    "message": "スキップ"
  },
  "tourNext": {
    "message": "次のスライド"
  },
  "tourPrevious": {
    "message": "前のスライド"
  },
  "tourDone": {
    "message": "完了"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots を使うことで、あなたは $TERMSANDPRIVACYNOTICETERMSLINK$ と $TERMSANDPRIVACYNOTICEPRIVACYLINK$ に同意したことになります。",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "利用規約"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "プライバシー通知"
  },
  "libraryLabel": {
    "message": "スクリーンショット"
  }
}PK
!<¿Þ,tÊ&Ê&&webextension/_locales/ka/messages.json{
  "addonDescription": {
    "message": "გადაუღეთ ვიდეოები და სურათები ვებგვერდებს და შეინახეთ დროებით, ან მუდმივად."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "ეკრანისთვის სურათის გადაღება"
  },
  "myShotsLink": {
    "message": "ჩემი გადაღებულები"
  },
  "screenshotInstructions": {
    "message": "გადაადგილეთ ან დააწკაპეთ გვერდზე სივრცის მოსანიშნად. გასაუქმებლად დააჭირეთ ESC-ს."
  },
  "saveScreenshotSelectedArea": {
    "message": "შენახვა"
  },
  "saveScreenshotVisibleArea": {
    "message": "ხილული ნაწილის შენახვა"
  },
  "saveScreenshotFullPage": {
    "message": "მთლიანი გვერდის შენახვა"
  },
  "cancelScreenshot": {
    "message": "გაუქმება"
  },
  "downloadScreenshot": {
    "message": "ჩამოტვირთვა"
  },
  "downloadOnlyNotice": {
    "message": "თქვენ ახლა იმყოფებით „მხოლოდ ჩამოტვირთვის“ რეჟიმში."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots გადადის „მხოლოდ ჩამოტვირთვის“ რეჟიმზე, შემდეგ შემთხვევებში:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "პირადი ფანჯრით სარგებლობისას."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "მესამე მხარის ფუნთუშების შენახვა, შეზღუდულია."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "მითითებულია, რომ “არასოდეს დაიმახსოვრებს ისტორიას” ბრაუზერი."
  },
  "downloadOnlyDetailsESR": {
    "message": "თქვენ იყენებთ Firefox ESR-ს."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "ატვირთვა შეზღუდულია."
  },
  "notificationLinkCopiedTitle": {
    "message": "ბმული დაკოპირებულია"
  },
  "notificationLinkCopiedDetails": {
    "message": "თქვენი სურათის ბმული დაკოპირებულია. ჩასმისთვის დააწექით $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "კოპირება"
  },
  "notificationImageCopiedTitle": {
    "message": "სურათი დაკოპირებულია"
  },
  "notificationImageCopiedDetails": {
    "message": "თქვენი სურათი დაკოპირებულია. ჩასმისთვის დააწექით $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "სურათი მოიჭრა $PIXELS$ პიქსელამდე.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "გაფუჭებულია."
  },
  "requestErrorDetails": {
    "message": "ვწუხვარ! გადაღებული სურათის შენახვა ვერ ხერხდება. მოგვიანებით სცადეთ."
  },
  "connectionErrorTitle": {
    "message": "თქვენს გადაღებულ სურათებთან კავშირი ვერ ხერხდება."
  },
  "connectionErrorDetails": {
    "message": "გთხოვთ შეამოწმოთ ქსელთან კავშირი. თუ ინტერნეტში თავისუფლად გადიხართ, ე.ი. Firefox Screenshot-ის მომსახურებას აქვს დროებითი პრობლემა."
  },
  "loginErrorDetails": {
    "message": "თქვენი სურათის შენახვა ვერ ხერხდება, რადგან შეფერხებაა Firefox Screenshots მომსახურებასთან დაკავშირებით. გთხოვთ სცადოთ მოგვიანებით."
  },
  "unshootablePageErrorTitle": {
    "message": "ამ გვერდისთვის სურათის გადაღება ვერ ხერხდება."
  },
  "unshootablePageErrorDetails": {
    "message": "ეს არ არის ჩვეულებრივი ვებგვერდი, ამიტომაც შეუძლებელია სურათის გადაღება."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots-ის გვერდისთვის სურათის გადაღება არ შეგიძლიათ!"
  },
  "emptySelectionErrorTitle": {
    "message": "შერჩეული სივრცე ძალიან მცირეა"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots გათიშულია პირადი თვალიერების რეჟიმისას"
  },
  "privateWindowErrorDetails": {
    "message": "ბოდიშს გიხდით გაუგებრობის გამო. ჩვენ ვმუშაობთ ამ შესაძლებლობის დამატებაზე, სამომავლო ვერსიებში."
  },
  "genericErrorTitle": {
    "message": "ვაი! Firefox Screenshots მწყობრიდან გამოვიდა."
  },
  "genericErrorDetails": {
    "message": "გაუგებარია რა მოხდა. ისევ ცდით ხელახლა, თუ სხვა ვებგვერდს გადაუღებთ სურათს?"
  },
  "tourBodyIntro": {
    "message": "გადაიღეთ, შეინახეთ და გააზიარეთ ეკრანის სურათები Firefox-იდან გაუსვლელად."
  },
  "tourHeaderPageAction": {
    "message": "შენახვის ახალი ხერხი"
  },
  "tourBodyPageAction": {
    "message": "როცა მოგესურვებათ ეკრანისთვის სურათის გადაღება, ჩამოშალეთ გვერდზე მოქმედებების მენიუ, რომელიც მდებარეობს მისამართების ველში."
  },
  "tourHeaderClickAndDrag": {
    "message": "გადაუღეთ სურათი რასაც გინდათ"
  },
  "tourBodyClickAndDrag": {
    "message": "გადაადგილეთ ან დააწკაპეთ გვერდზე გადასაღები სივრცის შესარჩევად. ასევე, მაჩვენებელი ისრის გადატარებით შეგიძლიათ მონიშნოთ სასურველი არე."
  },
  "tourHeaderFullPage": {
    "message": "გადაუღეთ სურათები ფანჯრებს ან მთლიან ვებგვერდებს"
  },
  "tourBodyFullPage": {
    "message": "მარჯვენა ზედა კუთხეში არსებული ღილაკების საშუალებით, შეგიძლიათ გადაუღოთ სურათი ხილულ ნაწილს ან მთლიან გვერდს."
  },
  "tourHeaderDownloadUpload": {
    "message": "როგორც გენებოთ"
  },
  "tourBodyDownloadUpload": {
    "message": "ამოჭრილი სურათები შეგიძლიათ განათავსოთ ინტერნეტში, მარტივად გასაზიარებლად, ან ჩამოტვირთოთ კომპიუტერში. ასევე, „ჩემი გადაღებულების“ ღილაკზე დაწკაპებით, იხილავთ თქვენ მიერ გადაღებულ ყველა სურათს."
  },
  "tourSkip": {
    "message": "გამოტოვება"
  },
  "tourNext": {
    "message": "შემდეგი"
  },
  "tourPrevious": {
    "message": "წინა"
  },
  "tourDone": {
    "message": "მზადაა"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots-ის გამოყენებით, თქვენ ეთანხმებით $TERMSANDPRIVACYNOTICETERMSLINK$ და $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "პირობებსა"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "პირადი მონაცემების დაცვის განაცხადს"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<¼j똘'webextension/_locales/kab/messages.json{
  "addonDescription": {
    "message": "Ṭṭef imrayen akked igdilen si Web sakin sekles-iten s wudem askudan neγ s wudem yezgan."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ṭṭef agdil"
  },
  "myShotsLink": {
    "message": "Tuṭṭfiwin-iw"
  },
  "screenshotInstructions": {
    "message": "Zuγer sakin sit γef af usebter akken ad tferneḍ tamnaṭ. Senned γef ESC akken ad tesfesxeḍ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sekles"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sekles ayen ibanen"
  },
  "saveScreenshotFullPage": {
    "message": "Sekles asebter meṛṛa"
  },
  "cancelScreenshot": {
    "message": "Sefsex"
  },
  "downloadScreenshot": {
    "message": "Sider"
  },
  "downloadOnlyNotice": {
    "message": "Aql-ak tura deg umskar n usider kan."
  },
  "downloadOnlyDetails": {
    "message": "Deg isekaren-agi, Firefox Screenshots ad k-yeǧǧ kan ad tsidreḍ:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Deg iccer n tungin uslig."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Inagan n tuqna n tama tis kraḍ ttwasensen."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Werǧin ad tecfuḍ γef umazray” insa."
  },
  "downloadOnlyDetailsESR": {
    "message": "Aql-ak teseqdaceḍ Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Tuzna n ifayluyen tensa."
  },
  "notificationLinkCopiedTitle": {
    "message": "Aseγwen yettwanγel"
  },
  "notificationLinkCopiedDetails": {
    "message": "Aseγwen ar tuṭṭfa-ik yettwanγel yef afus. Senned yef $META_KEY$-V akken ad tsenṭḍeḍ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Nγel"
  },
  "notificationImageCopiedTitle": {
    "message": "Tuṭṭfa tettwanγel"
  },
  "notificationImageCopiedDetails": {
    "message": "Tuṭṭfa-inek tettwanγel yer ufus. Senned yef $META_KEY$-V akken ad tsenṭḍeḍ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tugna-agi tettwaẓreg ɣer $PIXELS$ ipiksilen.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Yeffeγ i talast."
  },
  "requestErrorDetails": {
    "message": "Suref-aγ! Ur nezmir ara ad nsekles tuṭṭfa-ik. Ɛreḍ tikelt-nniḍen."
  },
  "connectionErrorTitle": {
    "message": "Ur nezmir ara ad neqqen ar tuṭṭfiwin-ik n ugdil."
  },
  "connectionErrorDetails": {
    "message": "Senqed tuqqna-ik Internet. Ma yella tzemred ad teqqneḍ ar Internet, ahat d ugur kan meẓẓiyen deg umeẓlu Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "UR nseklas ara tuṭṭfa-ik acku yella ugur akked umezlu Firefox Screenshots. Ma ulac aɣilif ɛreḍ tikelt-nniḍen."
  },
  "unshootablePageErrorTitle": {
    "message": "Ur nezmir ara ad neṭṭef agdil n usebter-agi."
  },
  "unshootablePageErrorDetails": {
    "message": "Mačči d asebter Web am iyaḍ, ur tizmireḍ ara ad s-teṭṭfeḍ agdil."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ur tezmireḍ ar ad teṭṭfeḍ agdil n usebter Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tafrant inek wezzil-t aṭas"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots yensa deg uskar uslig"
  },
  "privateWindowErrorDetails": {
    "message": "Suref-aɣ ɣef aya. Aqlaɣ nxeddem ɣef tmahilt i yileqman d-iteddun."
  },
  "genericErrorTitle": {
    "message": "Ihuh! Firefox Screenshots ur iteddu ara."
  },
  "genericErrorDetails": {
    "message": "Ur neẓri ara acu yeḍran. Ɛreḍ tikelt-nniḍen neɣ ṭṭef agdil n usebter-nniḍen?"
  },
  "tourBodyIntro": {
    "message": "Ṭṭef, sekles, bḍu igdilen war ma teffɣeḍ si Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Abrid amaynut i wsekles"
  },
  "tourBodyPageAction": {
    "message": "Mi tebγiḍ ad teṭṭfeḍ agdil ldi umuγ n tigawin n usebter illan deg ufeggag n tansiwin."
  },
  "tourHeaderClickAndDrag": {
    "message": "Ṭṭef kan ayen tebγiḍ"
  },
  "tourBodyClickAndDrag": {
    "message": "Sit sakin zuɣer akken ad teṭṭfeḍ aḥric seg usebter. Tzemreḍ daɣen ad tesrifgeḍ akken ad tsebṛuṛqeḍ afran-ik."
  },
  "tourHeaderFullPage": {
    "message": "Ṭṭef isfuyla neγ isebtar meṛṛa"
  },
  "tourBodyFullPage": {
    "message": "Fren tiqeffalin s afella ayeffus akken ad teṭṭfeḍ tamnaṭ yettbanen deg usfaylu neɣ asebter i meṛṛa."
  },
  "tourHeaderDownloadUpload": {
    "message": "Akken tebγiḍ"
  },
  "tourBodyDownloadUpload": {
    "message": "Sekles tuṭṭfiwin-ik ar Web i beṭṭu fessusen, neɣ sider-itent-id ar uselkim-ik. Tzemr€d daɣen ad tiseḍ ɣef tqeffalt Tiṭṭfiwin-iw akken ad tafeḍ akk tuṭṭfiwin n ugdil i teggid."
  },
  "tourSkip": {
    "message": "Zgel"
  },
  "tourNext": {
    "message": "Tigri n zdat"
  },
  "tourPrevious": {
    "message": "Tigri n deffir"
  },
  "tourDone": {
    "message": "Immed"
  },
  "termsAndPrivacyNotice2": {
    "message": "S useqdec Firefox Screenshots, ad tqebleḍ $TERMSANDPRIVACYNOTICETERMSLINK$ akked $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Tiwtilin"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Tasertit n tbaḍnit"
  },
  "libraryLabel": {
    "message": "Tuṭṭfiwin n ugdil"
  }
}PK
!<èLR…ØØ&webextension/_locales/kk/messages.json{
  "addonDescription": {
    "message": "Интернеттен скриншоттарды түсіріп, оларды уақытша немесе тұрақты түрде сақтаңыз."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Скриншотты түсіру"
  },
  "myShotsLink": {
    "message": "Менің скриншоттарым"
  },
  "screenshotInstructions": {
    "message": "Аймақты таңдау үшін бетте шертіңіз. Бас тарту үшін ESC басыңыз."
  },
  "saveScreenshotSelectedArea": {
    "message": "Сақтау"
  },
  "saveScreenshotVisibleArea": {
    "message": "Көрінетінді сақтау"
  },
  "saveScreenshotFullPage": {
    "message": "Толық парақты сақтау"
  },
  "cancelScreenshot": {
    "message": "Бас тарту"
  },
  "downloadScreenshot": {
    "message": "Жүктеп алу"
  },
  "downloadOnlyNotice": {
    "message": "Сіз тек жүктеп алу режиміндесіз."
  },
  "downloadOnlyDetails": {
    "message": "Firefox скриншоттары тек жүктеп алу режиміне келесі жағдайларда ауысады:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Жекелік шолу терезесінде."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Үшінші жақты cookies сөндірілген."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "\"Тарихты ешқашан сақтамау\" іске қосылған."
  },
  "downloadOnlyDetailsESR": {
    "message": "Сіз Firefox ESR қолданып отырсыз."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Жүктеп жіберу сөндірілген."
  },
  "notificationLinkCopiedTitle": {
    "message": "Сілтеме көшірілді"
  },
  "notificationLinkCopiedDetails": {
    "message": "Сіздің скриншотыңызға сілтеме алмасу буферіне көшірілді. Кірістіру үшін $META_KEY$-V басыңыз.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Көшіріп алу"
  },
  "notificationImageCopiedTitle": {
    "message": "Скриншот көшірілді"
  },
  "notificationImageCopiedDetails": {
    "message": "Сіздің скриншотыңыз алмасу буферіне көшірілді. Кірістіру үшін $META_KEY$-V басыңыз.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Бұл сурет $PIXELS$ пиксельге дейін қиылды.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Жұмыс істемейді."
  },
  "requestErrorDetails": {
    "message": "Кешіріңіз! Сіздің скриншотыңызды сақтай алмадық. Кейінірек қайталап көріңіз."
  },
  "connectionErrorTitle": {
    "message": "Скриншоттарыңызға байланыса алмадық."
  },
  "connectionErrorDetails": {
    "message": "Интернетпен байланысыңызды тексеріңіз. Егер сізде интернетпен байланыс бар болса, онда Firefox скриншоттары қызметімен уақытша мәселелер болуы мүмкін."
  },
  "loginErrorDetails": {
    "message": "Скриншотыңызды сақтай алмадық, өйткені Firefox скриншоттары қызметімен мәселе бар болып тұр. Кейінірек қайталап көріңіз."
  },
  "unshootablePageErrorTitle": {
    "message": "Бұл беттің скриншотын түсіре алмаймыз."
  },
  "unshootablePageErrorDetails": {
    "message": "Бұл қалыпты веб беті емес, сондықтан оның скриншотын түсіру мүмкін емес."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox скриншоттары бетінің скриншотын түсіру мүмкін емес!"
  },
  "emptySelectionErrorTitle": {
    "message": "Сіздің таңдауыңыз тым кішкентай"
  },
  "privateWindowErrorTitle": {
    "message": "Скриншоттар жекелік шолу режимінде сөнідірілген"
  },
  "privateWindowErrorDetails": {
    "message": "Қолайсыздық үшін кешірім сұраймыз. Бұл мүмкіндікті болашақ шығарылымдарда іске асыруға жұмысты жасаймыз."
  },
  "genericErrorTitle": {
    "message": "Қап! Firefox скриншоттары жасамай қалған сияқты."
  },
  "genericErrorDetails": {
    "message": "Не болғанын білмейміз. Қайталап көресіз бе, немесе басқа парақтың скриншотын түсіріп көресіз бе?"
  },
  "tourBodyIntro": {
    "message": "Firefox ішінен скриншоттарды түсіру, сақтау және олармен бөлісу."
  },
  "tourHeaderPageAction": {
    "message": "Сақтаудың жаңа жолы"
  },
  "tourBodyPageAction": {
    "message": "Скриншотты жасағыңыз келген уақытта адрестік жолақтың бет әрекеттері мәзірін ашыңыз."
  },
  "tourHeaderClickAndDrag": {
    "message": "Тек керек нәрсені түсіріңіз"
  },
  "tourBodyClickAndDrag": {
    "message": "Беттің тек бір бөлігін түсіру үшін тышқанды шертіп, тартыңыз. Таңдауыңызды түспен ерекшелеу үшін үстінен өткізсеңіз болады."
  },
  "tourHeaderFullPage": {
    "message": "Терезелер немесе толық беттерді түсіріңіз"
  },
  "tourBodyFullPage": {
    "message": "Жоғарғы оң жақта орналасқан батырмаларды терезенің көрінетін аймағын, немесе толық бетті түсіру үшін қолданыңыз."
  },
  "tourHeaderDownloadUpload": {
    "message": "Өзіңізге керек түрде"
  },
  "tourBodyDownloadUpload": {
    "message": "Қиылған скриншоттармен оңай бөлісу үшін оларды интернетте сақтауға, немесе сіздің компьютеріңізге жүктеп алуға болады. Сонымен қатар, сіз жасаған барлық скриншоттарды табу үшін Менің скриншоттарым батырмасына шерте аласыз."
  },
  "tourSkip": {
    "message": "Аттап кету"
  },
  "tourNext": {
    "message": "Келесі слайд"
  },
  "tourPrevious": {
    "message": "Алдыңғы слайд"
  },
  "tourDone": {
    "message": "Дайын"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox скриншоттарын қолдану арқылы, сіз біздің $TERMSANDPRIVACYNOTICETERMSLINK$ және $TERMSANDPRIVACYNOTICEPRIVACYLINK$ келісесіз.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Қолдану шарттары"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Жекелік ескертуі"
  },
  "libraryLabel": {
    "message": "Скриншоттар"
  }
}PK
!<حîJVV&webextension/_locales/km/messages.json{
  "saveScreenshotSelectedArea": {
    "message": "រក្សា​ទុក"
  }
}PK
!<,n°°&webextension/_locales/kn/messages.json{
  "saveScreenshotSelectedArea": {
    "message": "ಉಳಿಸು"
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourDone": {
    "message": "ಆಯಿತು"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "ನಿಯಮಗಳು"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ಗೌಪ್ಯತಾ ಸೂಚನೆ"
  },
  "libraryLabel": {
    "message": "ತೆರೆಚಿತ್ರಗಳು"
  }
}PK
!<9úß??&webextension/_locales/ko/messages.json{
  "addonDescription": {
    "message": "웹 페이지를 찍거나 영상으로 만들어 임시로, 혹은 영구히 보관하세요."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "스크린샷 찍기"
  },
  "myShotsLink": {
    "message": "내 스크린샷"
  },
  "screenshotInstructions": {
    "message": "캡처 할 범위를 드래그하거나 클릭하세요. ESC를 누르면 취소됩니다."
  },
  "saveScreenshotSelectedArea": {
    "message": "저장"
  },
  "saveScreenshotVisibleArea": {
    "message": "보이는 내용 저장"
  },
  "saveScreenshotFullPage": {
    "message": "전체 페이지 저장"
  },
  "cancelScreenshot": {
    "message": "취소"
  },
  "downloadScreenshot": {
    "message": "다운로드"
  },
  "downloadOnlyNotice": {
    "message": "현재 다운로드 전용 모드에 있습니다."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots은 다음과 같은 경우에만 다운로드 전용 모드로 전환됩니다:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "개인정보 보호 창에 있을 때"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "제 3자 쿠키가 비활성화되어 있을 때"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“히스토리 기억 안함”이 활성화되어 있을 때"
  },
  "downloadOnlyDetailsESR": {
    "message": "Firefox ESR을 사용중입니다."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "업로드가 비활성화 되었습니다."
  },
  "notificationLinkCopiedTitle": {
    "message": "링크 복사됨"
  },
  "notificationLinkCopiedDetails": {
    "message": "방금 찍은 스냅샷의 링크가 클립보드에 저장됐습니다. 붙여넣으려면 $META_KEY$-V를 누르세요.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "복사"
  },
  "notificationImageCopiedTitle": {
    "message": "스크린샷 복사됨"
  },
  "notificationImageCopiedDetails": {
    "message": "스크린샷이 클립보드에 복사되었습니다. 붙여넣으려면 $META_KEY$-V를 누르세요.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "이 이미지는 $PIXELS$px로 잘렸습니다.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "문제가 발생했습니다."
  },
  "requestErrorDetails": {
    "message": "죄송합니다. 스크린샷을 저장하지 못했습니다. 잠시 후에 다시 시도해주세요."
  },
  "connectionErrorTitle": {
    "message": "스크린샷에 접속할 수 없습니다."
  },
  "connectionErrorDetails": {
    "message": "인터넷 연결 상태를 확인해주세요. 만약 인터넷이 연결돼있다면, Firefox Screenshots 서비스에 잠깐 문제가 있을 수도 있습니다."
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots 서비스에 잠시 문제가 있어 저장에 실패했습니다. 잠시 후에 다시 시도해주세요."
  },
  "unshootablePageErrorTitle": {
    "message": "이 페이지를 캡처할 수 없습니다."
  },
  "unshootablePageErrorDetails": {
    "message": "표준 웹 페이지가 아니어서 스크린샷을 찍을 수 없습니다."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots 페이지는 캡처할 수 없어요!"
  },
  "emptySelectionErrorTitle": {
    "message": "선택영역이 너무 작음"
  },
  "privateWindowErrorTitle": {
    "message": "개인정보 보호 모드에서는 스크린샷이 비활성화 됨"
  },
  "privateWindowErrorDetails": {
    "message": "불편을 끼쳐 드려서 죄송합니다. 다음 출시에 넣을 수 있도록 기능을 개선중입니다."
  },
  "genericErrorTitle": {
    "message": "이런! Firefox Screenshots이 망가졌네요."
  },
  "genericErrorDetails": {
    "message": "무슨 일이 있었는지 모르겠네요. 다시 시도하시거나 다른 페이지 스크린샷을 찍어 보시겠어요?"
  },
  "tourBodyIntro": {
    "message": "Firefox를 떠나지 않은 채로 찍고, 저장하고, 공유하세요."
  },
  "tourHeaderPageAction": {
    "message": "새로운 저장방법"
  },
  "tourBodyPageAction": {
    "message": "스크린 샷을 찍고 싶을 때는 언제든지 주소창의 페이지 작업 메뉴를 열어주세요."
  },
  "tourHeaderClickAndDrag": {
    "message": "원하는 것을 캡처하세요"
  },
  "tourBodyClickAndDrag": {
    "message": "캡처할 페이지의 부분을 클릭해서 드래그 해 보세요. 마우스를 올려서 선택한 부분을 확인할 수 있습니다."
  },
  "tourHeaderFullPage": {
    "message": "창이나 페이지 전체를 캡처할 수 있습니다"
  },
  "tourBodyFullPage": {
    "message": "우측 위에 있는 버튼을 눌러 창을 캡처하거나 페이지 전체를 캡처할 수 있습니다."
  },
  "tourHeaderDownloadUpload": {
    "message": "내가 원하는 대로"
  },
  "tourBodyDownloadUpload": {
    "message": "스크린샷을 공유하거나, 컴퓨터로 다운로드할 수도 있습니다. 내 스크린샷 버튼을 눌러서 지금까지 찍었던 모든 스크린샷을 찾을 수도 있습니다."
  },
  "tourSkip": {
    "message": "건너뛰기"
  },
  "tourNext": {
    "message": "다음 슬라이드"
  },
  "tourPrevious": {
    "message": "이전 슬라이드"
  },
  "tourDone": {
    "message": "완료"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots을 사용함으로써, $TERMSANDPRIVACYNOTICETERMSLINK$과 $TERMSANDPRIVACYNOTICEPRIVACYLINK$에 동의하게 됩니다.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "이용약관"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "개인 정보 취급 방침"
  },
  "libraryLabel": {
    "message": "스크린샷"
  }
}PK
!<J®×1??'webextension/_locales/lij/messages.json{
  "addonDescription": {
    "message": "Fanni de föto do schermo da-o Web e sarvale in mòddo tenporaneo ò cin mòddo che restan."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Fanni 'na föto do schermo"
  },
  "myShotsLink": {
    "message": "E mæ föto do schermo"
  },
  "screenshotInstructions": {
    "message": "Rebela ò sciacca in sciâ pagina pe seleçionâ 'na region. Sciacca ESC pe anulâ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Sarva"
  },
  "saveScreenshotVisibleArea": {
    "message": "Sarva o vixibile"
  },
  "saveScreenshotFullPage": {
    "message": "Sarva tutta a pagina"
  },
  "cancelScreenshot": {
    "message": "Anulla"
  },
  "downloadScreenshot": {
    "message": "Descarega"
  },
  "notificationLinkCopiedTitle": {
    "message": "Colegamento copiou inti aponti"
  },
  "notificationLinkCopiedDetails": {
    "message": "O colegamento a l'inmagine o l'é stæto copiou inti aponti. Sciacca$META_KEY$-V pe incolalo.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Còpia"
  },
  "requestErrorTitle": {
    "message": "Feua serviçio."
  },
  "requestErrorDetails": {
    "message": "Ne spiaxe! No poemmo sarvâ l'inmagine. Pe piaxei preuva torna dòppo."
  },
  "connectionErrorTitle": {
    "message": "No poemmo conetise a-e teu föto do schermo."
  },
  "connectionErrorDetails": {
    "message": "Pe piaxei contròlla a teu conescion a l'Internet. Se ti riesci a conetite a l'Internet, ghe poeiva ese 'n problema tenporaneo co-o serviçio de Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "No poemmo sarvâ a teu inmagine perché gh'é 'n problema co-o serviçio de Firefox Screenshot. Pe piaxei preuva torna dòppo."
  },
  "unshootablePageErrorTitle": {
    "message": "No poemmo fâ 'na föto do schermo de sta pagina."
  },
  "unshootablePageErrorDetails": {
    "message": "Sta chi a no l'é 'na pagina Web standard, coscì no peu faghe 'na föto do schermo."
  },
  "selfScreenshotErrorTitle": {
    "message": "No ti peu fâ 'na föto do schermo a 'na pagina de Firefox Screenshots!"
  },
  "genericErrorTitle": {
    "message": "Ahime mi! Firefox Screeshot o s'é ciantou."
  },
  "genericErrorDetails": {
    "message": "Niatri no emmo ben acapio cöse l'é sucesso. Ti peu miga preuvâ co-ina pagina dispægia?"
  },
  "tourBodyIntro": {
    "message": "Fanni, sarva e condividdi föto do schermo sensa sciortî da Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Un neuvo mòddo de sarvâ"
  },
  "tourHeaderClickAndDrag": {
    "message": "Catua solo quello che t'eu"
  },
  "tourBodyClickAndDrag": {
    "message": "Sciacca e rebela pe catuâ solo 'na porçion de 'na pagina. Ti peu anche anâ co-o ratto sorvia l'area seleçionâ pe evidençiala."
  },
  "tourHeaderFullPage": {
    "message": "Catua 'n barcon ò 'na pagina intrega"
  },
  "tourBodyFullPage": {
    "message": "Seleçionn-a i pomelli de d'ato a drita pe catuâ l'area vixibile into barcon ò a pagina intrega."
  },
  "tourHeaderDownloadUpload": {
    "message": "Comme te piaxe"
  },
  "tourBodyDownloadUpload": {
    "message": "Sarva 'n ritaggio de 'na pagina Web pe condividila in mòddo ciù façile ò scaregala into teu computer. Ti peu anche sciacâ into pomello  “E mæ föto do schermo pe atrovâ” quello che t'æ za pigiou."
  },
  "tourSkip": {
    "message": "Ignòra"
  },
  "tourNext": {
    "message": "Pròscima schermâ"
  },
  "tourPrevious": {
    "message": "Schermâ de primma"
  },
  "tourDone": {
    "message": "Fæto"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termini"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Informativa in sciâ privacy"
  },
  "libraryLabel": {
    "message": "Föto do schermo"
  }
}PK
!<~‚uÝØØ&webextension/_locales/lo/messages.json{
  "addonDescription": {
    "message": "ຖ່າຍຄຣິບ ແລະ ພາບຫນ້າຈໍຈາກຫນ້າເວັບ ແລ້ວບັນທຶກໄວ້ຊົ່ວຄາວ ຫລື ຖາວອນ."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "ຖ່າຍພາບຫນ້າຈໍ"
  },
  "myShotsLink": {
    "message": "ພາບຂອງຂ້ອຍ"
  },
  "screenshotInstructions": {
    "message": "ລາກ ຫລື ຄິກໃສ່ຫນ້າເວັບເພື່ອເລືອກເອົາບ່ອນທີ່ຕ້ອງການ. ກົດ ESC ເພື່ອຍົກເລີກ."
  },
  "saveScreenshotSelectedArea": {
    "message": "ບັນທຶກ"
  },
  "saveScreenshotVisibleArea": {
    "message": "ບັນທຶກສ່ວນທີ່ເບິງເຫັນໄດ້"
  },
  "saveScreenshotFullPage": {
    "message": "ບັນທຶກຫມົດຫນ້າ"
  },
  "cancelScreenshot": {
    "message": "ຍົກເລີກ"
  },
  "downloadScreenshot": {
    "message": "ດາວໂຫລດ"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "ໃນຫນ້າຕ່າງການທ່ອງເວັບແບບສ່ວນຕົວ."
  },
  "notificationLinkCopiedTitle": {
    "message": "ໄດ້ສຳເນົາລີ້ງໄວ້ແລ້ວ"
  },
  "notificationLinkCopiedDetails": {
    "message": "ລີ້ງໄປຫາຮູບພາບຂອງທ່ານໄດ້ຖືກບັນທຶກໄວ້ໃນຄຣິບບອດ. ກົດ $META_KEY$-V ເພື່ອວາງ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "ສຳເນົາ"
  },
  "notificationImageCopiedDetails": {
    "message": "ຮູບພາບຂອງທ່ານໄດ້ຖືກສຳເນົາລົງໃນຄລິບບອດ. ກົດ $META_KEY$-V ເພື່ອວາງ.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "ໃຊ້ວຽກບໍ່ໄດ້."
  },
  "requestErrorDetails": {
    "message": "ຂໍອະໄພ! ພວກເຮົາບໍ່ສາມາດບັນທຶກພາບຂອງທ່ານໄດ້. ກະລູນາລອງໃຫມ່ອີກຄັ້ງ."
  },
  "connectionErrorTitle": {
    "message": "ພວກເຮົາບໍ່ສາມາດເຊື່ອມຕໍ່ໄປຫາພາບຫນ້າຈໍຂອງທ່ານໄດ້."
  },
  "connectionErrorDetails": {
    "message": "ກະລູນາກວດເບິງການເຊື່ອມຕໍ່ກັບອິນເຕີເນັດຂອງທ່ານ. ຖ້າຫາກວ່າທ່ານສາມາດເຊື່ອມຕໍ່ກັບອິນເຕີເນັດໄດ້ແມ່ນ ບໍລິການພາບຖ່າຍຫນ້າຈໍຂອງ Firefox ອາດຈະເກີດມີບັນຫາຊົ່ວຄາວ."
  },
  "loginErrorDetails": {
    "message": "ພວກເຮົາບໍ່ສາມາດບັນທຶກພາບຖ່າຍຂອງທ່ານໄດ້ ເພາະວ່າບໍລິການພາບຖ່າຍຫນ້າຈໍຂອງ Firefox ໄດ້ເກີດມີບັນຫາ. ກະລູນາລອງໃຫມ່ອີກຄັ້ງ."
  },
  "unshootablePageErrorTitle": {
    "message": "ພວກເຮົາບໍ່ສາມາດຖ່າຍຮູບຫນ້າຈໍຂອງຫນ້ານີ້ໄດ້."
  },
  "unshootablePageErrorDetails": {
    "message": "ນີ້ບໍ່ແມ່ນຫນ້າເວັບມາດຕະຖານ, ສະນັ້ນທ່ານຈຶ່ງບໍ່ສາມາດຖ່າຍພາບຫນ້າຈໍໄດ້."
  },
  "selfScreenshotErrorTitle": {
    "message": "ທ່ານບໍ່ສາມາດຖ່າຍພາບຫນ້າຈໍຂອງ Firefox ໄດ້!"
  },
  "emptySelectionErrorTitle": {
    "message": "ການເລືອກຂອງທ່ານນ້ອຍເກີນໄປ"
  },
  "genericErrorTitle": {
    "message": "ໂອ! Firefox Screenshots ລວນ."
  },
  "genericErrorDetails": {
    "message": "ພວກເຮົາບໍ່ແນ່ໃຈວ່າມັນຫາກະເກີດຫຍັງຂື້ນ. ກະລຸນາລອງໃຫມ່ອີກຄັ້ງ ຫລື ຖ່າຍພາບຫນ້າຈໍອື່ນລອງເບິງ"
  },
  "tourBodyIntro": {
    "message": "ຖ່າຍ, ບັນທຶກ ແລະ ແບ່ງປັນພາບຫນ້າຈໍໂດຍບໍ່ຕ້ອງອອກຈາກ Firefox."
  },
  "tourHeaderPageAction": {
    "message": "ບັນທຶກໃນຮູບແບບໃໝ່"
  },
  "tourHeaderClickAndDrag": {
    "message": "ຖ່າຍພາບຕາມທີ່ທ່ານຕ້ອງການ"
  },
  "tourBodyClickAndDrag": {
    "message": "ຄິກ ຫລື ລາກເພື່ອຖ່າຍພາບສະເພາະບາງສ່ວນຂອງຫນ້າເວັບ. ພ້ອມດຽວກັນນັ້ນທ່ານຍັງສາມາດເລື່ອນມາເພື່ອເນັ້ນພາບທີ່ທ່ານເລືອກ."
  },
  "tourHeaderFullPage": {
    "message": "ຖ່າຍພາບວິນໂດ ຫລື ຫມົດທັ້ງຫນ້າ"
  },
  "tourBodyFullPage": {
    "message": "ເລືອກປຸ່ມກົດທີ່ຢູ່ເທິງເບື້ອງຂວາມືເພື່ອຈັບພາບໃນບໍລິເວນທີ່ເບິງເຫັນໄດ້ໃນວິນໂດ ຫລື ເພື່ອຈັບພາບທັງຫມົດໃນຫນ້າເວັບ."
  },
  "tourHeaderDownloadUpload": {
    "message": "ຕາມທີ່ທ່ານມັກ"
  },
  "tourBodyDownloadUpload": {
    "message": "ບັນທຶກຮູບພາບທີ່ທ່ານໄດ້ຄັອບເອົາໄວ້ລົງໄປໄວ້ໃນເວັບເພື່ອເຮັດໃຫ້ແບ່ງປັນໄດ້ງ່າຍ ຫລື ດາວໂຫລດໄປໄວ້ໃນຄອມພິວເຕີຂອງທ່ານ. ທ່ານຍັງສາມາດຄິກໃສ່ໃນປຸ່ມກົດ \"ຮູບພາບຂອງຂ້ອຍ\" ເພື່ອຊອກຫາຮູບພາບທັງຫມົດທີ່ທ່ານໄດ້ຖ່າຍເອົາໄວ້."
  },
  "tourSkip": {
    "message": "ຂ້າມໄປ"
  },
  "tourNext": {
    "message": "ສະໄລດ໌ຕໍ່ໄປ"
  },
  "tourPrevious": {
    "message": "ສະໄລດ໌ກ່ອນຫນ້ານີ້"
  },
  "tourDone": {
    "message": "ສຳເລັດ"
  },
  "termsAndPrivacyNotice2": {
    "message": "ເພື່ອນຳໃຊ້ Firefox Screenshots ທ່ານໄດ້ຍອມຮັບ $TERMSANDPRIVACYNOTICETERMSLINK$ ແລະ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ຂອງພວກເຮົາ.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "ຂໍ້ກຳນົດ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ຄຳເຕືອນກ່ຽວກັບຄວາມເປັນສ່ວນຕົວ"
  },
  "libraryLabel": {
    "message": "ຖ່າຍພາບໜ້າຈໍ"
  }
}PK
!<ªf 9´´&webextension/_locales/lt/messages.json{
  "addonDescription": {
    "message": "Darykite iškarpas ir ekrano nuotraukos su interneto turiniu bei saugokite jas laikinai arba visąlaik."
  },
  "addonAuthorsList": {
    "message": "„Mozilla“ <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Padaryti ekrano nuotrauką"
  },
  "myShotsLink": {
    "message": "Mano nuotraukos"
  },
  "screenshotInstructions": {
    "message": "Tempkite arba spustelėkite tinklalapyje norėdami pasirinkti regioną. Spustelėkite „ESC“ norėdami atsisakyti."
  },
  "saveScreenshotSelectedArea": {
    "message": "Įrašyti"
  },
  "saveScreenshotVisibleArea": {
    "message": "Įrašyti matomą"
  },
  "saveScreenshotFullPage": {
    "message": "Įrašyti visą tinklalapį"
  },
  "cancelScreenshot": {
    "message": "Atsisakyti"
  },
  "downloadScreenshot": {
    "message": "Atsisiųsti"
  },
  "downloadOnlyNotice": {
    "message": "Dabar esate tik atsiuntimo veiksenoje."
  },
  "downloadOnlyDetails": {
    "message": "„Firefox“ ekrano nuotraukos automatiškai įjungia tik atsiuntimo veikseną tokiais atvejais:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "privačiojo naršymo lange"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "kai išjungti trečiųjų šalių slapukai"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "kai įjungta „niekada nevesti žurnalo“ nuostata"
  },
  "downloadOnlyDetailsESR": {
    "message": "Jūs naudojate „Firefox“ ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Įkėlimai išjungti."
  },
  "notificationLinkCopiedTitle": {
    "message": "Saitas nukopijuotas"
  },
  "notificationLinkCopiedDetails": {
    "message": "Jūsų nuotraukos saitas buvo nukopijuotas į iškarpinę. Spustelėkite „$META_KEY$-V“ norėdami įdėti.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopijuoti"
  },
  "notificationImageCopiedTitle": {
    "message": "Nuotrauka nukopijuota"
  },
  "notificationImageCopiedDetails": {
    "message": "Jūsų nuotrauka nukopijuota į iškarpinę. Spustelėkite $META_KEY$-V, norėdami įdėti.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ši nuotrauka buvo apkirpta iki $PIXELS$ taškų.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Neveikia."
  },
  "requestErrorDetails": {
    "message": "Atsiprašome! Mums nepavyko įrašyti jūsų nuotraukos. Prašome pabandyti vėliau."
  },
  "connectionErrorTitle": {
    "message": "Mums nepavyko prisijungti prie jūsų ekrano nuotraukų."
  },
  "connectionErrorDetails": {
    "message": "Patikrinkite savo interneto ryšį. Jeigu galite prisijungti prie interneto, gali būti, kad yra laikina problema su „Firefox Screenshots“ paslauga."
  },
  "loginErrorDetails": {
    "message": "Mums nepavyko įrašyti jūsų nuotraukos, nes yra problema su „Firefox Screenshots“ paslauga. Prašome pabandyti vėliau."
  },
  "unshootablePageErrorTitle": {
    "message": "Mums nepavyko nufotografuoti šio tinklalapio."
  },
  "unshootablePageErrorDetails": {
    "message": "Tai nėra įprastas tinklalapis, tad negalite padaryti jo nuotraukos."
  },
  "selfScreenshotErrorTitle": {
    "message": "Negalite padaryti „Firefox Screenshots“ tinklalapio nuotraukos!"
  },
  "emptySelectionErrorTitle": {
    "message": "Jūsų pasirinkimas yra per mažas"
  },
  "privateWindowErrorTitle": {
    "message": "Ekrano nuotraukos privačiajame naršyme neveikia"
  },
  "privateWindowErrorDetails": {
    "message": "Atsiprašome už nepatogumą. Mes dirbame prie šio funkcionalumo vėlesnėms versijoms."
  },
  "genericErrorTitle": {
    "message": "Vau! „Firefox Screenshots“ sugedo."
  },
  "genericErrorDetails": {
    "message": "Mes nesame tikri, kas ką tik nutiko. Norite pabandyti dar kartą arba nufotografuoti kitą tinklalapį?"
  },
  "tourBodyIntro": {
    "message": "Darykite, įrašykite ir dalinkitės ekrano nuotraukomis nepalikdami „Firefox“."
  },
  "tourHeaderPageAction": {
    "message": "Naujas būdas įrašyti"
  },
  "tourBodyPageAction": {
    "message": "Išskleiskite tinklalapio veiksmų meniu, esantį adreso juostoje, bet kada, kai norite padaryti ekrano nuotrauką."
  },
  "tourHeaderClickAndDrag": {
    "message": "Užfiksuokite būtent tai, ką norite"
  },
  "tourBodyClickAndDrag": {
    "message": "Spustelėkite ir tempkite, kad užfiksuotumėte tik dalį tinklalapio. Taip pat galite užvesti pelę, norėdami paryškinti savo pasirinkimą."
  },
  "tourHeaderFullPage": {
    "message": "Fiksuokite langus arba ištisus tinklalapius"
  },
  "tourBodyFullPage": {
    "message": "Pasirinkite mygtukus aukščiau dešinėje, norėdami užfiksuoti matomą lango dalį arba visą tinklalapį."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kaip jums patogiau"
  },
  "tourBodyDownloadUpload": {
    "message": "Įrašykite padarytas nuotraukas saityne patogesniam dalinimuisi, arba atsisiųskite jas į savo kompiuterį. Spustelėję mygtuką „Mano nuotraukos“, matysite visas savo padarytas nuotraukas."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Kita skaidrė"
  },
  "tourPrevious": {
    "message": "Buvusi skaidrė"
  },
  "tourDone": {
    "message": "Baigta"
  },
  "termsAndPrivacyNotice2": {
    "message": "Naudodamiesi „Firefox“ ekrano nuotraukomis, sutinkate su mūsų $TERMSANDPRIVACYNOTICETERMSLINK$ bei $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "sąlygomis"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "privatumo nuostatais"
  },
  "libraryLabel": {
    "message": "Ekrano nuotraukos"
  }
}PK
!<îZö)†!†!'webextension/_locales/mai/messages.json{
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "स्क्रीनशॉट लिअ"
  },
  "myShotsLink": {
    "message": "हमर शॉट"
  },
  "screenshotInstructions": {
    "message": "क्षेत्र चुनब लेल पेज पर घीँचू अथवा क्लिक करू. कैंसिल करए लेल ESC दाबू."
  },
  "saveScreenshotSelectedArea": {
    "message": "सहेजू"
  },
  "saveScreenshotVisibleArea": {
    "message": "विजिबल सहेजू"
  },
  "saveScreenshotFullPage": {
    "message": "पूरा पेज सहजू"
  },
  "cancelScreenshot": {
    "message": "कैंसिल करू"
  },
  "downloadScreenshot": {
    "message": "डाउनलोड करू"
  },
  "downloadOnlyNotice": {
    "message": "अहाँ तत्कालिक रूप सँ केवल-डाउनलोड-मोड मे छी. "
  },
  "downloadOnlyDetails": {
    "message": "एहन स्थिति मे फ़ायरफॉक्स स्क्रीनशॉट ऑटोमेटिक रूप सँ केवल-डाउनलोड-मोड मे बदैल जाएत."
  },
  "downloadOnlyDetailsPrivate": {
    "message": "निजी ब्रॉउजिंग विंडो मे."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "तेसर-पक्ष कुकीज़ अक्षम अछि."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“कभी इतिहास याद नहि राखू“ सक्षम अछि."
  },
  "downloadOnlyDetailsESR": {
    "message": "अहाँ Firefox ESR क उपयोग क रहल छी."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "अपडेट अक्षम कएल गेल."
  },
  "notificationLinkCopiedTitle": {
    "message": "लिंक नकल बनैलक"
  },
  "notificationLinkCopiedDetails": {
    "message": "अहाँक शॉट क लिंक क्लिपबोर्ड पर नकल कएल गेल. साटबाक लेल $META_KEY$ दाबू.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "कॉपी करू"
  },
  "notificationImageCopiedTitle": {
    "message": "शॉट कॉपी कएल गेल"
  },
  "notificationImageCopiedDetails": {
    "message": "अहाँक शॉट क्लिपबोर्ड पर नकल कएल गेल. साटबाक लेल $META_KEY$ दाबू.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "ई छवि केँ $PIXELS$px छोट बनाएल गेल.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "कार्यरत नहि अछि."
  },
  "requestErrorDetails": {
    "message": "माफ करू! हम अहाँक शॉट नहि सहेज सकलहुँ. कृपया बाद मे फेन प्रयास करू."
  },
  "connectionErrorTitle": {
    "message": "हम अहाँक स्क्रीनशॉट सँ नहि जुड़ि सकब."
  },
  "connectionErrorDetails": {
    "message": "कृपया अपन इंटरनेट कनेक्शन जाँचू. जँ अहाँ अपन इंटरनेट सँ जुड़ै मे सक्षम छी,  Firefox स्क्रीनशॉट सेवा मे कोनो अस्थायी समस्या भ सकैत अछि. "
  },
  "loginErrorDetails": {
    "message": "हम अहाँक स्क्रीनशॉट नहि सहेज सकलहुँ Firefox स्क्रीनशॉट सेवा मे कोनो समस्या अछि. कृपया बाद मे फिनु कोसिस करू.  "
  },
  "unshootablePageErrorTitle": {
    "message": "ई पेजक स्क्रीनशॉट नहि लिअ सकलहुँ."
  },
  "unshootablePageErrorDetails": {
    "message": "ई एकटा मान्य वेब पेज नहि अछि, तँ अहाँ एकर स्क्रीनशॉट नहि लिअ सकैत छी."
  },
  "selfScreenshotErrorTitle": {
    "message": "अहाँ एकटा Firefox स्क्रीनशॉट पेजक शॉट नहि लिअ सकैत छी!"
  },
  "emptySelectionErrorTitle": {
    "message": "अहाँक चयन बड छोट अछि"
  },
  "privateWindowErrorTitle": {
    "message": "निजी ब्राउज़िंग मोड मे स्क्रीनशॉट निष्क्रिय कए देल गेल अछि"
  },
  "privateWindowErrorDetails": {
    "message": "असुविधा खातिर क्षमा करू. भविष्य संस्करण कलेल हमसभ एहि फीचर पर काज क रहल छी."
  },
  "genericErrorTitle": {
    "message": "ओह! Firefox स्क्रीनशॉट बिगड़ गेल."
  },
  "genericErrorDetails": {
    "message": "अखन कथि भेल हम सुनिश्चित नहि छी. फिनु प्रयास अथवा आन पेजक भिन्न शॉट लिअ चाहैत छी?"
  },
  "tourBodyIntro": {
    "message": "Firefox छोड़ने बिनु स्क्रीनशॉट लिअ, सहेजू, आओर साझा करू."
  },
  "tourHeaderPageAction": {
    "message": "सहेजबाक एकटा नवीन तरीका"
  },
  "tourBodyPageAction": {
    "message": "जखन अहाँ एकटा शॉट लिअ चाहैत छी एड्रेसबार मे पेज एक्शन मेनू केँ पसारू."
  },
  "tourHeaderClickAndDrag": {
    "message": "जे अहाँ चाहैत छी कैप्चर करू"
  },
  "tourBodyClickAndDrag": {
    "message": "पेजक एकटा हिस्सा खातिर सिर्फ क्लिक आओर ड्रैग करू. अहाँ अपन चयनक हाइलाइट सेहो क सकैत छी."
  },
  "tourHeaderFullPage": {
    "message": "विंडोज़ या संपूर्ण पेज केँ कैद करू"
  },
  "tourBodyFullPage": {
    "message": "विंडो मे देखाइ दिए बला क्षेत्र या पूरा पेज केँ कैप्चर करए लेल उप्पर मे दायाँ तरफ बला बटन क चयन करू."
  },
  "tourHeaderDownloadUpload": {
    "message": "जेहन अहाँ एकरा चाहैत छी"
  },
  "tourBodyDownloadUpload": {
    "message": "आसानी सँ शेयर करए अथवा ओकरा अपन कंप्यूटर पर डाउनलोड करए कलेल अपन क्रॉप कएल शॉट केँ वेब पर सहेजू. अहाँ द्वारा लेल गेल सभ शॉट केँ खोजब लेल अहाँ हमर शॉट्स सेहो पर क्लिक क सकैत छी."
  },
  "tourSkip": {
    "message": "छोड़ू"
  },
  "tourNext": {
    "message": "अगिला स्लाइड"
  },
  "tourPrevious": {
    "message": "पछिला स्लाइड"
  },
  "tourDone": {
    "message": "भ गेल"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox स्क्रीनशॉट्स क उपयोग कएक, अहाँ हमर $TERMSANDPRIVACYNOTICETERMSLINK$ आओर $TERMSANDPRIVACYNOTICEPRIVACYLINK$ सँ सहमत छी.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "शर्त"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "गोपनीयता सूचना"
  },
  "libraryLabel": {
    "message": "स्क्रीनशॉट"
  }
}PK
!<îj!<gg&webextension/_locales/mk/messages.json{
  "addonDescription": {
    "message": "Земете исечоци и слики од Интернет и зачувајте ги привремено или трајно."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Фати слика"
  },
  "myShotsLink": {
    "message": "Мои слики"
  },
  "screenshotInstructions": {
    "message": "Влечете и кликнете на страницата за да означите регион. Притиснете ESC за да се откажете."
  },
  "saveScreenshotSelectedArea": {
    "message": "Сними"
  },
  "saveScreenshotVisibleArea": {
    "message": "Сними видлив дел"
  },
  "saveScreenshotFullPage": {
    "message": "Сними цела страница"
  },
  "cancelScreenshot": {
    "message": "Откажи"
  },
  "downloadScreenshot": {
    "message": "Преземи"
  },
  "downloadOnlyNotice": {
    "message": "Во моментов сте во режим Само Преземање."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots се префрла во режим Само Преземање во овие случаи:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Во приватен прозорец."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Колачињата од трети страни се оневозможени."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Никогаш нема да ја памти историјата” е вклучена."
  },
  "downloadOnlyDetailsESR": {
    "message": "Користите Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Качувањето на датотеки е оневозможено."
  },
  "notificationLinkCopiedTitle": {
    "message": "Врската е ископирана"
  },
  "notificationLinkCopiedDetails": {
    "message": "Врската до вашата слика е ископирана во меморија. Притиснете $META_KEY$-V за да ја вметнете.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копирај"
  },
  "notificationImageCopiedTitle": {
    "message": "Слика е ископирана"
  },
  "notificationImageCopiedDetails": {
    "message": "Вашата слика беше ископирана во меморија. Притиснете $META_KEY$-V за да ја вметнете.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Оваа слика е скратена до $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Не работи."
  },
  "requestErrorDetails": {
    "message": "Извинете! Не можевме да ја снимиме вашата слика. Ве молиме обидете се повторно подоцна."
  },
  "connectionErrorTitle": {
    "message": "Не можеме да пристапиме до вашите слики од екран."
  },
  "connectionErrorDetails": {
    "message": "Ве молиме проверете ја вашата Интернет-врска. Ако можете да се поврзете на Интернет, тогаш можно е да има привремен проблем со сервисот Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Не можевме да ја зачуваме вашата слика бидејќи има проблем со сервисот Firefox Screenshots. Ве молиме обидете се повторно подоцна."
  },
  "unshootablePageErrorTitle": {
    "message": "Не можеме да фатиме слика од оваа страница."
  },
  "unshootablePageErrorDetails": {
    "message": "Ова не е обична веб-страница, па не можете да фатите слика од неа."
  },
  "selfScreenshotErrorTitle": {
    "message": "Не можете да фатите слика од страницата на Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Делот што го избравте е премногу мал"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots е деактивиран во текот на Приватното прелистување"
  },
  "privateWindowErrorDetails": {
    "message": "Извинете за незгодата. Работиме на оваа функционалност за во идните верзии."
  },
  "genericErrorTitle": {
    "message": "Ајдее! Firefox Screenshots излезе од контрола."
  },
  "genericErrorDetails": {
    "message": "Не сме баш сигурни што се случи. Сакате да се обидете повторно или да направите слика од друга страница?"
  },
  "tourBodyIntro": {
    "message": "Фаќајте, снимајте и споделувајте слики од екран без да го напуштите Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Нов начин за снимање"
  },
  "tourBodyPageAction": {
    "message": "Отворете го менито со активности за страница во адресната лента кога и да сакате да фатите слика."
  },
  "tourHeaderClickAndDrag": {
    "message": "Фати слика од тоа што сакаш"
  },
  "tourBodyClickAndDrag": {
    "message": "Кликнете и влечете за да фатите само дел од страницата. Исто така можете да означите дел и со покажувачот."
  },
  "tourHeaderFullPage": {
    "message": "Фати слики од прозорци или цели страници"
  },
  "tourBodyFullPage": {
    "message": "Кликнете на копчињата во горниот десен дел за да го снимите видливиот дел на прозорецот или пак, целата страница."
  },
  "tourHeaderDownloadUpload": {
    "message": "Како што Вие сакате"
  },
  "tourBodyDownloadUpload": {
    "message": "Снимете ги вашите исечоци на Интернет за полесно споделување или преземете ги на вашиот компјутер. Исто така можете да кликнете на копчето Мои слики за да ги најдете сите слики што ги имате направено."
  },
  "tourSkip": {
    "message": "ПРЕСКОКНИ"
  },
  "tourNext": {
    "message": "Следен слајд"
  },
  "tourPrevious": {
    "message": "Претходен слајд"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Со користење на Firefox Screenshots, се согласувате со нашите $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Услови"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Известување за приватност"
  },
  "libraryLabel": {
    "message": "Слики од екран"
  }
}PK
!<ÿAD``&webextension/_locales/ml/messages.json{
  "addonDescription": {
    "message": "വെബിൽ നിന്ന് ക്ലിപ്പുകളും സ്ക്രീൻഷോട്ടുകളും എടുത്ത് അവ താൽക്കാലികമായോ അല്ലെങ്കിൽ സ്ഥിരമായോ സംരക്ഷിക്കുക."
  },
  "addonAuthorsList": {
    "message": "മോസില്ല <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "സ്ക്രീൻഷോട്ട് എടുക്കുക"
  },
  "myShotsLink": {
    "message": "എന്റെ ഷോട്ടുകള്‍"
  },
  "screenshotInstructions": {
    "message": "ഒരു പ്രദേശം തിരഞ്ഞെടുക്കാൻ താളില്‍ ഡ്രാഗ് ചെയ്യുക അല്ലെങ്കിൽ ക്ലിക്കുചെയ്യുക. റദ്ദാക്കാൻ ESC അമർത്തുക."
  },
  "saveScreenshotSelectedArea": {
    "message": "സംരക്ഷിക്കുക"
  },
  "saveScreenshotVisibleArea": {
    "message": "കാണുന്നതു സംരക്ഷിക്കുക"
  },
  "saveScreenshotFullPage": {
    "message": "താള്‍ മുഴുവന്‍ സംരക്ഷിക്കുക"
  },
  "cancelScreenshot": {
    "message": "റദ്ദാക്കുക"
  },
  "downloadScreenshot": {
    "message": "ഡൗണ്‍ലോഡ് ചെയ്യുക"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "സ്വകാര്യ ബ്രൌസിങ്ങ് ജാലകത്തില്‍."
  },
  "notificationLinkCopiedTitle": {
    "message": "ലിങ്ക് പകര്‍ത്തി"
  },
  "notificationLinkCopiedDetails": {
    "message": "നിങ്ങളുടെ ഷോട്ടിലേക്കുള്ള ലിങ്ക് ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി. ഒട്ടിക്കാൻ $META_KEY$-V അമർത്തുക.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "പകര്‍ത്തുക"
  },
  "notificationImageCopiedTitle": {
    "message": "ഷോട്ട് പകര്‍ത്തി"
  },
  "requestErrorTitle": {
    "message": "പണി പാളി."
  },
  "requestErrorDetails": {
    "message": "ക്ഷമിക്കണം! താങ്കളുടെ സ്ക്രീൻഷോട്ട് സൂക്ഷിക്കാന്‍ കഴിഞ്ഞില്ല. ദയവായി പിന്നീടു ശ്രമിക്കുക."
  },
  "connectionErrorTitle": {
    "message": "നിങ്ങളുടെ സ്ക്രീൻഷോട്ടുകളിലേക്കു ബന്ധിപ്പിക്കാന്‍ കഴിയുന്നില്ല."
  },
  "connectionErrorDetails": {
    "message": "നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക. നിങ്ങൾക്ക് ഇന്റർനെറ്റിലേക്ക് ബന്ധിപ്പിക്കാൻ കഴിയുന്നുണ്ടെങ്കിൽ, ഫയർഫോക്സ് സ്ക്രീൻഷോട്ടുകൾ സേവനത്തിൽ താൽക്കാലിക പ്രശ്നം ഉണ്ടായേക്കാം."
  },
  "loginErrorDetails": {
    "message": "ഫയർഫോക്സ് സ്ക്രീൻഷോട്ടുകൾ സേവനത്തിൽ ഒരു പ്രശ്നമുള്ളതിനാൽ ഞങ്ങൾക്ക് നിങ്ങളുടെ ഷോട്ട് സംരക്ഷിക്കാൻ കഴിഞ്ഞില്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."
  },
  "unshootablePageErrorTitle": {
    "message": "ഈ താളിന്റെ സ്ക്രീൻഷോട്ട് എടുക്കാന്‍ സാധ്യമല്ല."
  },
  "unshootablePageErrorDetails": {
    "message": "ഇതൊരു സാധാരണ താള്‍ അല്ല, അതിനാൽ അതിന്റെ ഒരു സ്ക്രീൻഷോട്ട് എടുക്കാനാകില്ല."
  },
  "selfScreenshotErrorTitle": {
    "message": "സ്ക്രീൻഷോട്ട് താളിന്റെ സ്ക്രീൻഷോട്ട് എടുക്കാന്‍ പറ്റില്ല‌!"
  },
  "emptySelectionErrorTitle": {
    "message": "നിങ്ങളുടെ തെരഞ്ഞെടുപ്പ് തീരെ ചെറുതാണ്"
  },
  "privateWindowErrorDetails": {
    "message": "അസൗകര്യം നേരിടേണ്ടി വന്നതിൽ ഖേദിക്കുന്നു. ഈ സവിശേഷതയുള്ള ഭാവിയിലെ റിലീസുകൾക്കായി ഞങ്ങൾ പ്രവർത്തിക്കുന്നു."
  },
  "genericErrorTitle": {
    "message": "അയ്യോ! ഫയര്‍ഫോക്സ് സ്ക്രീൻഷോട്ടിനു എന്തോ പറ്റി."
  },
  "genericErrorDetails": {
    "message": "എന്താ സംഭവിച്ചതെന്ന് വല്യ പിടി ഇല്ല. ഒന്നുകൂടി നോക്കുകയോ അല്ലെങ്കില്‍ വേറെ താളിന്റെ സ്ക്രീൻഷോട്ട് എടുക്കുകയോ ചെയ്യുന്നോ?"
  },
  "tourHeaderPageAction": {
    "message": "സൂക്ഷിക്കാന്‍ പുതിയൊരു മാർഗ്ഗം"
  },
  "tourHeaderDownloadUpload": {
    "message": "നിങ്ങളുടെ ഇഷ്ടാനുസൃതം"
  },
  "tourSkip": {
    "message": "ഒഴിവാക്കുക"
  },
  "tourNext": {
    "message": "അടുത്ത സ്ലൈഡ്"
  },
  "tourPrevious": {
    "message": "മുമ്പത്തെ സ്ലൈഡ്"
  },
  "tourDone": {
    "message": "തീര്‍ന്നു"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "നിബന്ധനകൾ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "സ്വകാര്യതാ അറിയിപ്പ്"
  },
  "libraryLabel": {
    "message": "സ്ക്രീൻഷോട്ടുകൾ"
  }
}PK
!<7剔ÏÏ&webextension/_locales/mn/messages.json{
  "addonDescription": {
    "message": "Вэбээс авсан клип болон дэлгэцийн зургийг аваад тэдгээрийг түр эсвэл бүрмөсөн хадгал."
  }
}PK
!<p)ÙÙ&webextension/_locales/mr/messages.json{
  "addonDescription": {
    "message": "वेबवरून क्लिप आणि स्क्रीनशॉट घ्या आणि त्यांना तात्पुरते किंवा कायमचे जतन करा."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "स्क्रीनशॉट घ्या"
  },
  "myShotsLink": {
    "message": "माझे शॉट"
  },
  "screenshotInstructions": {
    "message": "प्रदेश निवडण्यासाठी पृष्ठावर ड्रॅग करा किंवा क्लिक करा. रद्द करण्यासाठी ESC दाबा."
  },
  "saveScreenshotSelectedArea": {
    "message": "साठवा"
  },
  "saveScreenshotVisibleArea": {
    "message": "दृश्यमय साठवा"
  },
  "saveScreenshotFullPage": {
    "message": "संपूर्ण पृष्ठ साठवा"
  },
  "cancelScreenshot": {
    "message": "रद्द करा"
  },
  "downloadScreenshot": {
    "message": "डाउनलोड करा"
  },
  "notificationLinkCopiedTitle": {
    "message": "दुवा कॉपी केला"
  },
  "notificationLinkCopiedDetails": {
    "message": "आपल्या शॉटचा दुवा क्लिपबोर्डवर कॉपी झाला आहे. चिटकवण्यासाठी $META_KEY$ -V दाबा.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "नादुरुस्त."
  },
  "requestErrorDetails": {
    "message": "क्षमस्व! आम्ही आपला शॉट साठवु शकलो नाही. कृपया नंतर प्रयत्न करा."
  },
  "connectionErrorTitle": {
    "message": "आम्ही आपल्या स्क्रीनशॉटशी जोडणी करु शकत नाही."
  },
  "connectionErrorDetails": {
    "message": "कृपया आपले इंटरनेट जोडणी तपासा. आपण इंटरनेटशी जुळण्यास अक्षम असल्यास, Firefox स्क्रीनशॉट सेवेमध्ये एक तात्पुरती समस्या असु शकते."
  },
  "loginErrorDetails": {
    "message": "Firefox स्क्रीनशॉट सेवेमध्ये समस्या असल्या कारणाने आम्ही आपला शॉट साठवु शकलो नाही. कृपया नंतर प्रयत्न करा."
  },
  "unshootablePageErrorTitle": {
    "message": "आम्ही हे पृष्ठ स्क्रीनशॉट करू शकत नाही."
  },
  "unshootablePageErrorDetails": {
    "message": "हे मानक वेब पृष्ठ नाही, म्हणून आपण त्याचा स्क्रीनशॉट घेऊ शकत नाही."
  },
  "selfScreenshotErrorTitle": {
    "message": "आपण Firefox स्क्रीनशॉट पृष्ठाचा शॉट घेऊ शकत नाही!"
  },
  "emptySelectionErrorTitle": {
    "message": "आपली निवड खूप लहान आहे"
  },
  "privateWindowErrorTitle": {
    "message": "खाजगी ब्राउझिंग पद्धतीमध्ये स्क्रीनशॉट्स निष्क्रिय केले आहेत"
  },
  "privateWindowErrorDetails": {
    "message": "गैरसोयीबद्दल क्षमस्व. आम्ही भविष्यातील प्रकाशनासाठी या वैशिष्ट्यांवर कार्यरत आहोत."
  },
  "genericErrorTitle": {
    "message": "हुअ! Firefox स्क्रीनशॉट अव्यवस्थित झाले आहे."
  },
  "genericErrorDetails": {
    "message": "काय घडले याची आम्हाला खात्री नाही. पुन्हा प्रयत्न करा किंवा भिन्न पृष्ठाचा शॉट घ्या?"
  },
  "tourBodyIntro": {
    "message": "Firefox न सोडता स्क्रीनशॉट घ्या, जतन करा आणि सामायिक करा."
  },
  "tourHeaderClickAndDrag": {
    "message": "आपल्याला पाहिजे असलेल्या गोष्टी फक्त कॅप्चर करा"
  },
  "tourBodyClickAndDrag": {
    "message": "पृष्ठाचा फक्त एक भाग कॅप्चर करण्यासाठी क्लिक आणि ड्रॅग करा. आपण आपल्या निवडीवर ठळकपणे होव्हर देखील करू शकता."
  },
  "tourHeaderFullPage": {
    "message": "Windows किंवा संपूर्ण पृष्ठे कॅप्चर करा"
  },
  "tourBodyFullPage": {
    "message": "पटलामध्ये दृश्यमान क्षेत्र कॅप्चर करण्यासाठी किंवा संपूर्ण पृष्ठ कॅप्चर करण्यासाठी वरील उजवीकडील बटणे निवडा."
  },
  "tourHeaderDownloadUpload": {
    "message": "जसे आपल्याला आवडते"
  },
  "tourBodyDownloadUpload": {
    "message": "आपले क्रॉप केलेले शॉट्स वेबवर सुलभ सामायिक करण्यासाठी जतन करा, किंवा त्यांना आपल्या संगणकावर डाउनलोड करा. आपण घेतलेले सर्व शॉट्स शोधण्यासाठी आपण माझे शॉट्स बटणावर क्लिक करू शकता."
  },
  "tourSkip": {
    "message": "दुर्लक्षित करा"
  },
  "tourNext": {
    "message": "पुढील स्लाइड"
  },
  "tourPrevious": {
    "message": "मागची स्लाइड"
  },
  "tourDone": {
    "message": "झाले"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots वापरून, आपण आमच्या $TERMSANDPRIVACYNOTICETERMSLINK$आणि $TERMSANDPRIVACYNOTICEPRIVACYLINK$ शी सहमत आहात.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "अटी"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "गोपनीयता सूचना"
  },
  "libraryLabel": {
    "message": "स्क्रीनशॉट"
  }
}PK
!<^š§§&webextension/_locales/ms/messages.json{
  "addonDescription": {
    "message": "Ambil klip dan skrinsyot dari Web dan simpan untuk sementara waktu atau kekal."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ambil skrinsyot"
  },
  "myShotsLink": {
    "message": "Syot Saya"
  },
  "screenshotInstructions": {
    "message": "Seret atau klik pada halaman untuk memilih kawasan. Tekan ESC untuk batalkan."
  },
  "saveScreenshotSelectedArea": {
    "message": "Simpan"
  },
  "saveScreenshotVisibleArea": {
    "message": "Simpan yang terpapar"
  },
  "saveScreenshotFullPage": {
    "message": "Simpan halaman penuh"
  },
  "cancelScreenshot": {
    "message": "Batal"
  },
  "downloadScreenshot": {
    "message": "Muat turun"
  },
  "downloadOnlyNotice": {
    "message": "Anda sedang dalam mod Muat turun-Sahaja."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots secara automatik bertukar ke mod Muat turun-Sahaja dalam situasi berikut:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Dalam tetingkap Pelayaran Peribadi."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kuki pihak ketiga dinyahdayakan."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Jangan sesekali ingat sejarah” didayakan."
  },
  "downloadOnlyDetailsESR": {
    "message": "Anda sedang menggunakan Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Muat naik telah dinyahdayakan."
  },
  "notificationLinkCopiedTitle": {
    "message": "Pautan Disalin"
  },
  "notificationLinkCopiedDetails": {
    "message": "Pautan ke syot anda telah disalin ke klipbod. Tekan $META_KEY$-V untuk tampal.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Salin"
  },
  "notificationImageCopiedTitle": {
    "message": "Syot Disalin"
  },
  "notificationImageCopiedDetails": {
    "message": "Syot anda telah disalin ke klipbod. Tekan $META_KEY$-V untuk tampal.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Imej ini akan dipangkas menjadi $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Tidak berfungsi."
  },
  "requestErrorDetails": {
    "message": "Maaf! Kita tidak dapat menyimpan syot anda. Sila cuba lagi nanti."
  },
  "connectionErrorTitle": {
    "message": "Kami tidak dapat menyambungkan ke skrinsyot anda."
  },
  "connectionErrorDetails": {
    "message": "Sila semak sambungan Internet anda. Jika anda boleh dapat sambungan ke Internet, mungkin ada masalah sementara dengan perkhidmatan Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Kami tidak dapat menyimpan skrinsyot anda kerana ada masalah dengan perkhidmatan Firefox Screenshots. Sila cuba lagi nanti."
  },
  "unshootablePageErrorTitle": {
    "message": "Kami tidak boleh skrinsyot halaman ini."
  },
  "unshootablePageErrorDetails": {
    "message": "Ini bukan halaman Web piawai, jadi anda tidak boleh membuat skrinsyot."
  },
  "selfScreenshotErrorTitle": {
    "message": "Anda tidak boleh syot halaman Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Pilihan anda terlalu kecil"
  },
  "privateWindowErrorTitle": {
    "message": "Skrinsyot dinyahdayakan dalam Mod Pelayaran Peribadi"
  },
  "privateWindowErrorDetails": {
    "message": "Maaf atas sebarang kesulitan. Kami sedang berusaha untuk menyediakan ciri ini dalam keluaran akan datang."
  },
  "genericErrorTitle": {
    "message": "Oh tidak! Firefox Screenshots tidak berfungsi dengan betul."
  },
  "genericErrorDetails": {
    "message": "Kami tidak pasti apa yang baru berlaku. Anda mahu cuba lagi atau mengambil gambar halaman lain?"
  },
  "tourBodyIntro": {
    "message": "Ambil, simpan, dan kongsi skrinsyot tanpa meninggalkan pelayar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Satu cara baru untuk menyimpan"
  },
  "tourBodyPageAction": {
    "message": "Kembangkan menu tindakan halaman di dalam bar alamat apabila anda mahu mengambil skrinsyot."
  },
  "tourHeaderClickAndDrag": {
    "message": "Ambil gambar hanya yang anda mahu"
  },
  "tourBodyClickAndDrag": {
    "message": "Klik dan seret untuk mengambil gambar sebahagian daripada halaman. Anda boleh juga serlahkan pilihan anda."
  },
  "tourHeaderFullPage": {
    "message": "Tangkap Tetingkap atau Keseluruhan Halaman"
  },
  "tourBodyFullPage": {
    "message": "Pilih butang di bahagian atas kanan untuk merakam kawasan paparan dalam tetingkap atau untuk merakamkan keseluruhan halaman."
  },
  "tourHeaderDownloadUpload": {
    "message": "Seperti Yang Anda Suka"
  },
  "tourBodyDownloadUpload": {
    "message": "Simpan rakaman yang dipotong ke Web, cara yang lebih mudah untuk berkongsi, atau memuat turun ke komputer anda. Anda juga boleh klik pada butang Syot Saya untuk mencari semua rakaman yang telah dibuat."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Slaid Seterusnya"
  },
  "tourPrevious": {
    "message": "Slaid Dahulu"
  },
  "tourDone": {
    "message": "Selesai"
  },
  "termsAndPrivacyNotice2": {
    "message": "Apabila menggunakan Firefox Screenshots, anda bersetuju dengan $TERMSANDPRIVACYNOTICETERMSLINK$ dan $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Terma"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Notis Privasi"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<‘Ÿ´ä

&webextension/_locales/my/messages.json{
  "addonDescription": {
    "message": "ဝဘ်ထံမှ ဓါတ်ပုံများနှင့် မျက်နှာပြင်ပုံဖမ်းချက်များကို ရိုက်ယူပြီး ယာယီ သို့မဟုတ် အမြဲတမ်းသိုလှောင်ရာတွင် သိမ်းဆည်းပါ။"
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "မျက်နှာပြင်ပုံရိပ် ဖမ်းယူပါ"
  },
  "myShotsLink": {
    "message": "ရိုက်ကူးထားသော ပုံများ"
  },
  "saveScreenshotSelectedArea": {
    "message": "သိမ်းရန်"
  },
  "saveScreenshotVisibleArea": {
    "message": "မြင်ရသည်များကို သိမ်းပါ"
  },
  "saveScreenshotFullPage": {
    "message": "စာမျက်နှာတစ်ခုလုံးကို သိမ်းပါ"
  },
  "cancelScreenshot": {
    "message": "မဆောင်ရွက်တော့ပါ"
  },
  "downloadScreenshot": {
    "message": "ဆွဲယူရန်"
  },
  "notificationLinkCopiedTitle": {
    "message": "လင့်ခ်ကို ကူယူပြီး"
  },
  "requestErrorTitle": {
    "message": "ပျက်နေသည်"
  },
  "requestErrorDetails": {
    "message": "စိတ်မကောင်းပါ၊ သင်ရိုက်ကူးထားသော ပုံကို မသိမ်းနိုင်ပါ။ နောင်တွင် ပြန်စမ်းကြည့်ပါ။"
  },
  "connectionErrorTitle": {
    "message": "သင်ရိုက်ကူးထားသော မျက်နှာပြင်ပုံရိပ်များထံ မချိတ်ဆက်နိုင်ပါ။"
  },
  "unshootablePageErrorTitle": {
    "message": "ဒီစာမျက်နှာ၏ မျက်နှာပြင်ပုံရိပ်ကို မရိုက်ကူးနိုင်ပါ။"
  },
  "tourBodyIntro": {
    "message": "Firefox ကနေ ထွက်ခွာရန် မလိုဘဲ မျက်နှာပြင်ပုံရိပ်များကို ရိုက်ကူး၊ သိမ်းဆည်း၊ မျှဝေပါ။"
  },
  "tourHeaderClickAndDrag": {
    "message": "ကိုယ်နှစ်သက်ရာ စာမျက်နှာများကို ဖမ်းယူပါ"
  },
  "tourHeaderFullPage": {
    "message": "ဝင်ဒိုးများ သို့မဟုတ် စာမျက်နှာတစ်ခုလုံးကို ဖမ်းယူပါ"
  },
  "tourHeaderDownloadUpload": {
    "message": "နှစ်သက်သလို"
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "နောက်ဆလိုက်"
  },
  "tourPrevious": {
    "message": "အရင်ကဆလိုက်"
  },
  "tourDone": {
    "message": "ပြီးပြီ"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "စကားရပ်များ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ကိုယ်ရေးကာကွယ်မှု သတိပေးချက်"
  }
}PK
!<Œ˓uu)webextension/_locales/nb_NO/messages.json{
  "addonDescription": {
    "message": "Ta klipp og skjermbilder fra nettet og lagre de midlertidig eller permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ta et skjermbilde"
  },
  "myShotsLink": {
    "message": "Mine skjermbilder"
  },
  "screenshotInstructions": {
    "message": "Dra eller klikk på siden for å velge et område. Trykk på ESC for å avbryte."
  },
  "saveScreenshotSelectedArea": {
    "message": "Lagre"
  },
  "saveScreenshotVisibleArea": {
    "message": "Lagre synlig område"
  },
  "saveScreenshotFullPage": {
    "message": "Lagre hele siden"
  },
  "cancelScreenshot": {
    "message": "Avbryt"
  },
  "downloadScreenshot": {
    "message": "Last ned"
  },
  "downloadOnlyNotice": {
    "message": "Du er for tiden i nedlastingsmodus."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots endres automatisk til nedlastingsmodus i disse situasjonene:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "I et privat nettlesingsvindu."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Tredjeparts infokapsler er deaktivert."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "«Husk aldri historikk» er aktivert."
  },
  "downloadOnlyDetailsESR": {
    "message": "Du bruker Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Opplastinger er slått av."
  },
  "notificationLinkCopiedTitle": {
    "message": "Lenke kopiert"
  },
  "notificationLinkCopiedDetails": {
    "message": "Lenken til skjermbildet ditt er kopiert til utklippstavlen. Trykk på $META_KEY$-V for å lime inn.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopier"
  },
  "notificationImageCopiedTitle": {
    "message": "Bilde kopiert"
  },
  "notificationImageCopiedDetails": {
    "message": "Bildet ditt er kopiert til utklippstavlen. Trykk på $META_KEY$-V for å lime det inn.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Dette bildet har blitt beskåret til $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "I ustand."
  },
  "requestErrorDetails": {
    "message": "Beklager! Vi klarte ikke å lagre skjermbildet ditt. Prøv igjen senere."
  },
  "connectionErrorTitle": {
    "message": "Vi kan ikke koble til dine skjermbilder."
  },
  "connectionErrorDetails": {
    "message": "Kontroller din internett-tilkopling. Om du kan koble til internett, kan det være et midlertidig problem med tjenesten Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Vi klarte ikke å lagre skjermbildet ditt, fordi det er et problem med tjenesten Firefox Screenshots. Prøv igjen senere."
  },
  "unshootablePageErrorTitle": {
    "message": "Vi kan ikke ta skjermbilde av siden."
  },
  "unshootablePageErrorDetails": {
    "message": "Dette er ikke en vanlig nettside, og du kan ikke ta skjermbilde av den."
  },
  "selfScreenshotErrorTitle": {
    "message": "Du kan ikke ta skjermbilde av siden Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Det valgte området er for liten"
  },
  "privateWindowErrorTitle": {
    "message": "Skjermbildetaking er deaktivert i privat nettlesings-modus"
  },
  "privateWindowErrorDetails": {
    "message": "Beklager ulempen. Vi jobber med denne funksjonen for fremtidige utgivelser."
  },
  "genericErrorTitle": {
    "message": "Oi! Det ser ut til at Firefox Screenshots ikke fungerer korrekt."
  },
  "genericErrorDetails": {
    "message": "Vi er ikke sikre på hva som hendte. Kan du prøve igjen eller ta et bilde av en annen side?"
  },
  "tourBodyIntro": {
    "message": "Ta, lagre og del skjermbilder uten å forlate Firefox."
  },
  "tourHeaderPageAction": {
    "message": "En ny måte å lagre på"
  },
  "tourBodyPageAction": {
    "message": "Utvid sidehandlingsmenyen i adresselinjen når du vil ta et skjermbilde."
  },
  "tourHeaderClickAndDrag": {
    "message": "Ta bilde av akkurat hva du vil"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikk for å dra og ta skjermbilde av bare en del av siden. Du kan også føre musen over for å framheve merket område."
  },
  "tourHeaderFullPage": {
    "message": "Ta skjermbilde av vinduer eller hele sider."
  },
  "tourBodyFullPage": {
    "message": "Bruk knappene i det øvre høyre hjørnet for å ta skjermbilde av det synlige området i vinduet eller for å ta skjermbilde av en hel side."
  },
  "tourHeaderDownloadUpload": {
    "message": "Som du vil ha det"
  },
  "tourBodyDownloadUpload": {
    "message": "Lagre de beskjærte skjermbildene dine på nettet for enklere deling, eller last de ned til din datamaskin. Du kan også klikke på knappen Mine skjermbilde for å finne alle skjermbildene du har tatt."
  },
  "tourSkip": {
    "message": "Hopp over"
  },
  "tourNext": {
    "message": "Neste slide"
  },
  "tourPrevious": {
    "message": "Forrige slide"
  },
  "tourDone": {
    "message": "Ferdig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ved å bruke Firefox Screenshots, godtar du vår $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "vilkår"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "personvernbestemmelser"
  },
  "libraryLabel": {
    "message": "Skjermbilder"
  }
}PK
!<€eÑåêê)webextension/_locales/ne_NP/messages.json{
  "addonDescription": {
    "message": "वेबबाट फोटो र सिक्रिनसट या क्लिपहरू लिएर क्षणिक वा सदाको लागि सङ्ग्रह गर्न ।"
  },
  "contextMenuLabel": {
    "message": "स्क्रिनसट लिनुहोस्"
  },
  "myShotsLink": {
    "message": "मेरा सटहरू"
  },
  "saveScreenshotSelectedArea": {
    "message": "सङ्ग्रह गर्नुहोस्"
  },
  "saveScreenshotVisibleArea": {
    "message": "दृश्यात्मक सङ्ग्रह गर्नुहोस्"
  },
  "cancelScreenshot": {
    "message": "रद्द गर्नुहोस"
  }
}PK
!<³Ggg&webextension/_locales/nl/messages.json{
  "addonDescription": {
    "message": "Maak clips en schermafbeeldingen van het web en sla deze tijdelijk of permanent op."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Een schermafbeelding maken"
  },
  "myShotsLink": {
    "message": "Mijn afbeeldingen"
  },
  "screenshotInstructions": {
    "message": "Sleep of klik op de pagina om een gebied te selecteren. Druk op ESC om te annuleren."
  },
  "saveScreenshotSelectedArea": {
    "message": "Opslaan"
  },
  "saveScreenshotVisibleArea": {
    "message": "Zichtbaar gebied opslaan"
  },
  "saveScreenshotFullPage": {
    "message": "Volledige pagina opslaan"
  },
  "cancelScreenshot": {
    "message": "Annuleren"
  },
  "downloadScreenshot": {
    "message": "Downloaden"
  },
  "downloadOnlyNotice": {
    "message": "U bevindt zich momenteel in Alleen-downloadenmodus."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots wisselt in de volgende situaties automatisch naar Alleen-downloadenmodus:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "In een privénavigatievenster."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies van derden zijn uitgeschakeld."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "‘Nooit geschiedenis onthouden’ is ingeschakeld."
  },
  "downloadOnlyDetailsESR": {
    "message": "U gebruikt Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uploads zijn uitgeschakeld."
  },
  "notificationLinkCopiedTitle": {
    "message": "Koppeling gekopieerd"
  },
  "notificationLinkCopiedDetails": {
    "message": "De koppeling naar uw afbeelding is naar het klembord gekopieerd. Druk op $META_KEY$-V om te plakken.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiëren"
  },
  "notificationImageCopiedTitle": {
    "message": "Afbeelding gekopieerd"
  },
  "notificationImageCopiedDetails": {
    "message": "Uw afbeelding is naar het klembord gekopieerd. Druk op $META_KEY$-V om te plakken.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Deze afbeelding is bijgesneden naar $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Buiten werking."
  },
  "requestErrorDetails": {
    "message": "Sorry! Uw afbeelding kon niet worden opgeslagen. Probeer het later opnieuw."
  },
  "connectionErrorTitle": {
    "message": "We kunnen geen verbinding met uw schermafdrukken maken."
  },
  "connectionErrorDetails": {
    "message": "Controleer uw internetverbinding. Als u verbinding met het internet kunt maken, kan er sprake zijn van een tijdelijk probleem met de Firefox Screenshots-service."
  },
  "loginErrorDetails": {
    "message": "Uw afbeelding kon niet worden opgeslagen, omdat er een probleem is met de Firefox Screenshots-service. Probeer het later opnieuw."
  },
  "unshootablePageErrorTitle": {
    "message": "Van deze pagina kan geen schermafbeelding worden gemaakt."
  },
  "unshootablePageErrorDetails": {
    "message": "Dit is geen standaardwebpagina, dus u kunt er geen schermafbeelding van maken."
  },
  "selfScreenshotErrorTitle": {
    "message": "U kunt geen afbeelding van een Firefox Screenshots-pagina maken!"
  },
  "emptySelectionErrorTitle": {
    "message": "Uw selectie is te klein"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots is uitgeschakeld in Privénavigatiemodus"
  },
  "privateWindowErrorDetails": {
    "message": "Sorry voor het ongemak. Voor toekomstige releases wordt aan deze functie gewerkt."
  },
  "genericErrorTitle": {
    "message": "Ho! Er is iets mis met Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "We weten niet precies wat er zonet is gebeurd. Wilt u het nogmaals proberen, of een schermafbeelding van een andere pagina maken?"
  },
  "tourBodyIntro": {
    "message": "Maak, bewaar en deel schermafbeeldingen zonder Firefox te verlaten."
  },
  "tourHeaderPageAction": {
    "message": "Een nieuwe manier om op te slaan"
  },
  "tourBodyPageAction": {
    "message": "Vouw het menu Pagina-acties in de adresbalk uit zodra u een schermafbeelding wilt maken."
  },
  "tourHeaderClickAndDrag": {
    "message": "Leg alleen vast wat u wilt"
  },
  "tourBodyClickAndDrag": {
    "message": "Klik en sleep om alleen een gedeelte van een pagina vast te leggen. U kunt ook de muisaanwijzer boven een gebied houden om uw selectie te accentueren."
  },
  "tourHeaderFullPage": {
    "message": "Leg vensters of hele pagina’s vast"
  },
  "tourBodyFullPage": {
    "message": "Selecteer de knoppen rechtsboven om het zichtbare gebied in het venster vast te leggen, of om een hele pagina vast te leggen."
  },
  "tourHeaderDownloadUpload": {
    "message": "Zoals u wilt"
  },
  "tourBodyDownloadUpload": {
    "message": "Bewaar uw bijgesneden afbeeldingen op het web voor makkelijker delen, of download ze naar uw computer. U kunt ook op de knop Mijn afbeeldingen klikken om al uw gemaakte afbeeldingen te vinden."
  },
  "tourSkip": {
    "message": "Overslaan"
  },
  "tourNext": {
    "message": "Volgende slide"
  },
  "tourPrevious": {
    "message": "Vorige slide"
  },
  "tourDone": {
    "message": "Gereed"
  },
  "termsAndPrivacyNotice2": {
    "message": "Door Firefox Screenshots te gebruiken, gaat u akkoord met onze $TERMSANDPRIVACYNOTICETERMSLINK$ en $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Voorwaarden"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Privacyverklaring"
  },
  "libraryLabel": {
    "message": "Schermafbeeldingen"
  }
}PK
!<î“ÉGG)webextension/_locales/nn_NO/messages.json{
  "addonDescription": {
    "message": "Ta klipp og skjermbilde frå nettet og lagre dei mellombels eller permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ta eit skjermbilde"
  },
  "myShotsLink": {
    "message": "Mine skjermbilde"
  },
  "screenshotInstructions": {
    "message": "Drag eller klikk på sida for å velje eit område. Trykk på ESC for å avbryte."
  },
  "saveScreenshotSelectedArea": {
    "message": "Lagre"
  },
  "saveScreenshotVisibleArea": {
    "message": "Lagre synleg område"
  },
  "saveScreenshotFullPage": {
    "message": "Lagre heile sida"
  },
  "cancelScreenshot": {
    "message": "Avbryt"
  },
  "downloadScreenshot": {
    "message": "Last ned"
  },
  "downloadOnlyNotice": {
    "message": "Du er for tida i nedlastingsmodus."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots endrar automatisk til nedlastingsmodus i følgjande situasjonar:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "I eit privat nettlesingsvindauge."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Tredjeparts infokapslar er deaktiverte."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "«Hugs aldri historikk» er aktivert."
  },
  "downloadOnlyDetailsESR": {
    "message": "Du brukar Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Opplastingar er slått av."
  },
  "notificationLinkCopiedTitle": {
    "message": "Lenke kopiert"
  },
  "notificationLinkCopiedDetails": {
    "message": "Lenka til skjermbildet ditt er kopiert til utklippstavla. Trykk på $META_KEY$-V for å lime inn.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopier"
  },
  "notificationImageCopiedTitle": {
    "message": "Bilde kopiert"
  },
  "notificationImageCopiedDetails": {
    "message": "Bildet ditt er kopiert til utklippstavla. Trykk på $META_KEY$-V for å lime det inn.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Dette bildet har vorte skore til til $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "I ustand."
  },
  "requestErrorDetails": {
    "message": "Beklagar! Vi klarte ikkje å lagre skjermbiildet ditt. Prøv igjen seinare."
  },
  "connectionErrorTitle": {
    "message": "Vi kan ikkje kople til skjermbilda dine."
  },
  "connectionErrorDetails": {
    "message": "Kontroller internett-tilkoplinga di. Om du kan kople til internett, kan det vere eit mellombels problem med tenesta Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Vi klarte ikkje å lagre skjermbildet ditt, fordi det er eit problem med tenesta Firefox Screenshots. Prøv igjen seinare."
  },
  "unshootablePageErrorTitle": {
    "message": "Vi kan ikkje ta skjermbilde av sida."
  },
  "unshootablePageErrorDetails": {
    "message": "Dette er ikkje ei vanleg nettside, og du kan ikkje ta skjermbilde av henne."
  },
  "selfScreenshotErrorTitle": {
    "message": "Du kan ikkje ta skjermbilde av sida Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Markeringa di er for lita"
  },
  "privateWindowErrorTitle": {
    "message": "Skjermbildeknipsing er slått av i Privat nettlesings-modus"
  },
  "privateWindowErrorDetails": {
    "message": "Ein er lei for ulempa. Vi jobbar med denne funksjonen for framtidige versjonar."
  },
  "genericErrorTitle": {
    "message": "Oj! Det ser ut til at Firefox Screenshots ikkje fungerer korrekt."
  },
  "genericErrorDetails": {
    "message": "Vi er ikkje sikre på kva som hende. Kan du prøve igjen eller ta eit bilde på ei anna side?"
  },
  "tourBodyIntro": {
    "message": "Ta, lagre og del skjermbilde utan å forlate Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ein ny måte å lagre på"
  },
  "tourBodyPageAction": {
    "message": "Utvid sidehandlingsmenyen i adresselinja når du vil ta eit skjermbilde."
  },
  "tourHeaderClickAndDrag": {
    "message": "Knips akkurat det du vil"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikk for å drage og knipse berre ein del av sida. Du kan også føre musa over for å framheve merkt område."
  },
  "tourHeaderFullPage": {
    "message": "Knips vindauge eller heile sider"
  },
  "tourBodyFullPage": {
    "message": "Vel knappane i det øvre høgre hjørnet for å knipse det synlege området i vindauget eller for å knipse ei heil side."
  },
  "tourHeaderDownloadUpload": {
    "message": "Som du vil ha det"
  },
  "tourBodyDownloadUpload": {
    "message": "Lagre dei tilskjerte bilda dine på nettet for enklare deling, eller last dei ned til datamaskina di. Du kan også klikke på knappen Mine skjermbilde for å finne alle bilda du har tatt."
  },
  "tourSkip": {
    "message": "Hopp over"
  },
  "tourNext": {
    "message": "Neste slide"
  },
  "tourPrevious": {
    "message": "Føregåande slide"
  },
  "tourDone": {
    "message": "Ferdig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ved å bruke Firefox Screenshots, seier du deg samd i $TERMSANDPRIVACYNOTICETERMSLINK$ og $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Vilkår"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Personvernmerknad"
  },
  "libraryLabel": {
    "message": "Skjermbilde"
  }
}PK
!<¶ÚþØÍÍ)webextension/_locales/pa_IN/messages.json{
  "addonAuthorsList": {
    "message": "ਮੌਜ਼ੀਲਾ <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "ਸਕਰੀਨ-ਸ਼ਾਟ ਲਵੋ"
  },
  "myShotsLink": {
    "message": "ਮੇਰੇ ਸ਼ਾਟ"
  },
  "screenshotInstructions": {
    "message": "ਖੇਤਰ ਨੂੰ ਚੁਣਨ ਵਾਸਤੇ ਖਿੱਚੋ ਜਾਂ ਕਲਿੱਕ ਕਰੋ। ਰੱਦ ਕਰਨ ਵਾਸਤੇ ESC ਦੱਬੋ।"
  },
  "saveScreenshotSelectedArea": {
    "message": "ਸੰਭਾਲੋ"
  },
  "saveScreenshotVisibleArea": {
    "message": "ਦਿੱਖ ਨੂੰ ਸੰਭਾਲੋ"
  },
  "saveScreenshotFullPage": {
    "message": "ਪੂਰੇ ਸਫ਼ੇ ਨੂੰ ਸੰਭਾਲੋ"
  },
  "cancelScreenshot": {
    "message": "ਰੱਦ ਕਰੋ"
  },
  "downloadScreenshot": {
    "message": "ਡਾਊਨਲੋਡ ਕਰੋ"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "ਇੱਕ ਨਿੱਜੀ ਬਰਾਊਜਿੰਗ ਵਿੰਡੋ ਵਿੱਚ"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "ਤੀਜੀ ਧਿਰ ਦੀਆਂ ਕੂਕੀਜ ਆਯੋਗ ਹਨ।"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "\"ਅਤੀਤ ਕਦੇ ਵੀ ਯਾਦ ਨਾ ਰੱਖੋ\" ਆਯੋਗ ਕੀਤਾ ਗਿਆ ਹੈ।"
  },
  "downloadOnlyDetailsESR": {
    "message": "ਤੁਸੀਂ ESR ਫਾਇਰਫਾਕਸ ਵਰਤ ਰਹੇ ਹੋ।"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "ਅੱਪਲ੍ਹੋਡ ਆਯੋਗ ਕੀਤੇ ਗਏ ਹਨ।"
  },
  "notificationLinkCopiedTitle": {
    "message": "ਲਿੰਕ ਕਾਪੀ ਕੀਤਾ ਗਿਆ"
  },
  "copyScreenshot": {
    "message": "ਕਾਪੀ"
  },
  "notificationImageCopiedTitle": {
    "message": "ਸ਼ਾਟ ਕਾਪੀ ਕੀਤਾ ਗਿਆ"
  },
  "notificationImageCopiedDetails": {
    "message": "ਤੁਹਾਡਾ ਸ਼ਾਟ ਕਲਿੱਪਬੋਰਡ ਤੋਂ ਕਾਪੀ ਕੀਤਾ ਗਿਆ ਹੈ। ਪੇਸਟ ਕਰਨ ਲਈ  $META_KEY$-V  ਨੂੰ ਦਬਾਓ।",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "ਖ਼ਰਾਬ ਹੈ।"
  },
  "connectionErrorTitle": {
    "message": "ਅਸੀਂ ਤੁਹਾਡੇ ਸਕਰੀਨਸ਼ਾਟ ਨਾਲ ਕੁਨੈੱਕਟ ਨਹੀਂ ਕਰ ਸਕਦੇ।"
  },
  "unshootablePageErrorTitle": {
    "message": "ਅਸੀਂ ਇਸ ਸਫੇ ਦਾ ਸਕਰੀਨਸ਼ਾਟ ਨਹੀਂ ਲੈ ਸਕਦੇ।"
  },
  "emptySelectionErrorTitle": {
    "message": "ਤੁਹਾਡੀ ਚੋਣ ਬਹੁਤ ਛੋਟੀ ਹੈ"
  },
  "privateWindowErrorTitle": {
    "message": "ਨਿੱਜੀ ਬਰਾਊਜਿੰਗ ਮੋਡ ਵਿੱਚ ਸਕਰੀਨਸ਼ਾਟ ਆਯੋਗ ਹੋਇਆ"
  },
  "genericErrorTitle": {
    "message": "ਠਹਿਰੋ! ਫਾਇਰਫਾਕਸ ਸਕਰੀਨਸ਼ਾਟ ਲੈਣ 'ਚ ਸਮੱਸਿਆ ਆਈ"
  },
  "tourBodyIntro": {
    "message": "ਬਿਨਾਂ ਫਾਇਰਫਾਕਸ ਨੂੰ ਛੱਡੇ ਸਕਰੀਨਸ਼ਾਟ ਲਓ, ਸੰਭਾਲੋ, ਅਤੇ ਸਾਂਝਾ ਕਰੋ।"
  },
  "tourHeaderPageAction": {
    "message": "ਸੰਭਾਲਣ ਦਾ ਨਵਾਂ ਢੰਗ"
  },
  "tourHeaderClickAndDrag": {
    "message": "ਕੈਪਚਰ ਕਰੋ ਤੁਸੀਂ ਕੀ ਚਾਹੁੰਦੇ ਹੋ"
  },
  "tourSkip": {
    "message": "ਛੱਡੋ"
  },
  "tourNext": {
    "message": "ਅਗਲੀ ਸਲਾਈਡ"
  },
  "tourPrevious": {
    "message": "ਪਿਛਲੀ ਸਲਾਈਡ"
  },
  "tourDone": {
    "message": "ਮੁਕੰਮਲ"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ਨਿੱਜੀ ਨੋਟਿਸ"
  }
}PK
!<0Ü}f’’&webextension/_locales/pl/messages.json{
  "addonDescription": {
    "message": "Twórz wycinki i zrzuty stron internetowych i zapisuj je tymczasowo lub trwale."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Wykonaj zrzut ekranu"
  },
  "myShotsLink": {
    "message": "Moje zrzuty"
  },
  "screenshotInstructions": {
    "message": "Przeciągnij lub kliknij na stronie, aby wybrać obszar. Naciśnij klawisz Esc, aby anulować."
  },
  "saveScreenshotSelectedArea": {
    "message": "Zapisz"
  },
  "saveScreenshotVisibleArea": {
    "message": "Zapisz widoczne"
  },
  "saveScreenshotFullPage": {
    "message": "Zapisz całą stronę"
  },
  "cancelScreenshot": {
    "message": "Anuluj"
  },
  "downloadScreenshot": {
    "message": "Pobierz"
  },
  "downloadOnlyNotice": {
    "message": "Obecnie używany jest tryb umożliwiający tylko pobieranie."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automatycznie przełącza na tryb umożliwiający tylko pobieranie w tych sytuacjach:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Okno jest prywatne."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Ciasteczka witryn zewnętrznych podmiotów są wyłączone."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Zachowywanie historii jest wyłączone."
  },
  "downloadOnlyDetailsESR": {
    "message": "Używany jest Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Wysyłanie zostało wyłączone."
  },
  "notificationLinkCopiedTitle": {
    "message": "Skopiowano odnośnik"
  },
  "notificationLinkCopiedDetails": {
    "message": "Odnośnik do zrzutu został skopiowany do schowka. Naciśnij $META_KEY$-V, aby go wkleić.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiuj"
  },
  "notificationImageCopiedTitle": {
    "message": "Skopiowano zrzut"
  },
  "notificationImageCopiedDetails": {
    "message": "Zrzut został skopiowany do schowka. Naciśnij $META_KEY$-V, aby go wkleić.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ten obraz został przycięty do $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Awaria."
  },
  "requestErrorDetails": {
    "message": "Nie można zapisać zrzutu. Spróbuj ponownie później."
  },
  "connectionErrorTitle": {
    "message": "Nie można połączyć się z zrzutami ekranu."
  },
  "connectionErrorDetails": {
    "message": "Sprawdź swoje połączenie z Internetem. Jeśli działa ono prawidłowo, to może występować tymczasowy problem z usługą Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nie można zapisać zrzutu, ponieważ występuje problem z usługą Firefox Screenshots. Spróbuj ponownie później."
  },
  "unshootablePageErrorTitle": {
    "message": "Nie można wykonać zrzutu tej strony."
  },
  "unshootablePageErrorDetails": {
    "message": "To nie jest standardowa strona internetowa, więc nie można wykonać jej zrzutu."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nie można wykonać zrzutu strony Firefox Screenshots."
  },
  "emptySelectionErrorTitle": {
    "message": "Zaznaczenie jest za małe"
  },
  "privateWindowErrorTitle": {
    "message": "Firefox Screenshots jest wyłączony w trybie prywatnym"
  },
  "privateWindowErrorDetails": {
    "message": "Przepraszamy za utrudnienia. Pracujemy nad dodaniem tej funkcji."
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshots wymknął się spod kontroli."
  },
  "genericErrorDetails": {
    "message": "Nie bardzo wiemy, co się wydarzyło. Spróbujesz ponownie lub wykonasz zrzut innej strony?"
  },
  "tourBodyIntro": {
    "message": "Wykonuj, zapisuj i udostępniaj zrzuty ekranu bez wychodzenia z Firefoksa."
  },
  "tourHeaderPageAction": {
    "message": "Nowy sposób zapisywania"
  },
  "tourBodyPageAction": {
    "message": "Rozwiń menu interakcji na pasku adresu, kiedy chcesz wykonać zrzut ekranu."
  },
  "tourHeaderClickAndDrag": {
    "message": "Zapisuj tylko to, co potrzebujesz"
  },
  "tourBodyClickAndDrag": {
    "message": "Kliknij i przeciągnij, aby zapisać tylko część strony. Możesz także najechać, aby wyróżnić zaznaczony obszar."
  },
  "tourHeaderFullPage": {
    "message": "Zapisuj zrzuty okien lub całych stron"
  },
  "tourBodyFullPage": {
    "message": "Kliknij przycisk w górnym prawym rogu, aby zapisać obszar widoczny w oknie lub całą stronę."
  },
  "tourHeaderDownloadUpload": {
    "message": "Tak, jak lubisz"
  },
  "tourBodyDownloadUpload": {
    "message": "Zapisuj przycięte zrzuty w Internecie, aby łatwiej je udostępniać, albo pobierz je na swój komputer. Możesz też kliknąć przycisk „Moje zrzuty”, aby przeglądać wszystkie wykonane zrzuty."
  },
  "tourSkip": {
    "message": "Pomiń"
  },
  "tourNext": {
    "message": "Dalej"
  },
  "tourPrevious": {
    "message": "Wstecz"
  },
  "tourDone": {
    "message": "Zamknij"
  },
  "termsAndPrivacyNotice2": {
    "message": "Używając Firefox Screenshots, zgadzasz się na $TERMSANDPRIVACYNOTICETERMSLINK$ i $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "warunki korzystania"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "zasady ochrony prywatności"
  },
  "libraryLabel": {
    "message": "Zrzuty ekranu"
  }
}PK
!<·5ë¤(()webextension/_locales/pt_BR/messages.json{
  "addonDescription": {
    "message": "Tire capturas de tela da Web e guarde-as temporariamente ou permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Capturar tela"
  },
  "myShotsLink": {
    "message": "Minhas capturas"
  },
  "screenshotInstructions": {
    "message": "Arraste ou clique na página para selecionar uma região. Pressione ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salvar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salvar área visível"
  },
  "saveScreenshotFullPage": {
    "message": "Salvar página completa"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Baixar"
  },
  "downloadOnlyNotice": {
    "message": "Você está atualmente no modo somente baixar."
  },
  "downloadOnlyDetails": {
    "message": "O Firefox Screenshots muda automaticamente para o modo Somente baixar nessas situações:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Em uma janela de navegação privativa."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies de terceiros estão desabilitados."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Nunca lembrar o histórico” está habilitado."
  },
  "downloadOnlyDetailsESR": {
    "message": "Você está usando o Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Os envios foram desabilitados."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link copiado"
  },
  "notificationLinkCopiedDetails": {
    "message": "O link da sua captura foi copiado para a área de transferência. Pressione $META_KEY$-V para colar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Capturado"
  },
  "notificationImageCopiedDetails": {
    "message": "Sua captura de tela foi copiada para a área de transferência. Pressione $META_KEY$-V para colar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagem foi recortada para $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Oops! Fora do ar."
  },
  "requestErrorDetails": {
    "message": "Desculpe! Não conseguimos salvar a sua captura de tela. Tente novamente mais tarde."
  },
  "connectionErrorTitle": {
    "message": "Não conseguimos nos conectar às suas capturas de tela."
  },
  "connectionErrorDetails": {
    "message": "Por favor, verifique a sua conexão com a Internet. Se consegue conectar-se à Internet, pode haver um problema temporário com o serviço Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Não conseguimos salvar sua captura porque há um problema com o serviço Firefox Screenshots. Por favor, tente novamente mais tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "Não conseguimos capturar a tela nesta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta não é uma página web padrão, por isso não podemos capturar sua tela."
  },
  "selfScreenshotErrorTitle": {
    "message": "Você não pode capturar uma página do Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Sua seleção é muito pequena"
  },
  "privateWindowErrorTitle": {
    "message": "As capturas de tela é desativadas no modo de navegação privativa"
  },
  "privateWindowErrorDetails": {
    "message": "Lamentamos o inconveniente. Estamos trabalhando neste recurso para lançamentos futuros."
  },
  "genericErrorTitle": {
    "message": "Uoou! O Firefox Screenshot enlouqueceu."
  },
  "genericErrorDetails": {
    "message": "Não temos certeza do que acabou de acontecer. Tentar novamente ou fazer uma captura de uma página diferente?"
  },
  "tourBodyIntro": {
    "message": "Capture, salve e compartilhe telas sem sair do Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Um novo jeito de salvar"
  },
  "tourBodyPageAction": {
    "message": "Abra o menu de ações da página na barra de endereços sempre que quiser fazer uma captura de tela."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capture apenas o que você quer"
  },
  "tourBodyClickAndDrag": {
    "message": "Clique e arraste para capturar apenas uma parte de uma página. Você também pode passar o mouse para realçar sua seleção."
  },
  "tourHeaderFullPage": {
    "message": "Capture janelas ou páginas inteiras"
  },
  "tourBodyFullPage": {
    "message": "Selecione os botões no canto superior direito para capturar a área visível na janela ou capturar uma página inteira."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como você quiser"
  },
  "tourBodyDownloadUpload": {
    "message": "Salve suas capturas na web para compartilhar mais facilmente, ou baixe-as no seu computador. Você também pode clicar no botão Minhas capturas para encontrar todas as capturas que tirou."
  },
  "tourSkip": {
    "message": "Pular"
  },
  "tourNext": {
    "message": "Próximo slide"
  },
  "tourPrevious": {
    "message": "Slide anterior"
  },
  "tourDone": {
    "message": "Concluído"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ao usar o Firefox Screenshots, você concorda com os $TERMSANDPRIVACYNOTICETERMSLINK$ e a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Política de privacidade"
  },
  "libraryLabel": {
    "message": "Screenshots"
  }
}PK
!<t×
¤¤)webextension/_locales/pt_PT/messages.json{
  "addonDescription": {
    "message": "Tire clipes e capturas de ecrã da Web e guarde-as temporariamente ou permanentemente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Tirar uma captura de ecrã"
  },
  "myShotsLink": {
    "message": "Minhas capturas"
  },
  "screenshotInstructions": {
    "message": "Arraste ou clique na página para selecionar uma região. Pressione ESC para cancelar."
  },
  "saveScreenshotSelectedArea": {
    "message": "Guardar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Guardar visível"
  },
  "saveScreenshotFullPage": {
    "message": "Guardar página inteira"
  },
  "cancelScreenshot": {
    "message": "Cancelar"
  },
  "downloadScreenshot": {
    "message": "Transferir"
  },
  "downloadOnlyNotice": {
    "message": "Está atualmente no modo Transferências-apenas."
  },
  "downloadOnlyDetails": {
    "message": "O Firefox Screenshots muda automaticamente para o modo Transferências-apenas nestas situações:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Numa janela de navegação privada."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "As cookies de terceiros estão desativadas."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Nunca memorizar histórico” está ativado."
  },
  "downloadOnlyDetailsESR": {
    "message": "Está a utilizar o Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Os carregamentos foram desativados."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ligação copiada"
  },
  "notificationLinkCopiedDetails": {
    "message": "A ligação para a sua captura foi copiada para a área de transferência. Pressione $META_KEY$-V para colar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Captura copiada"
  },
  "notificationImageCopiedDetails": {
    "message": "A sua captura foi copiada para a área de transferência. Pressione $META_KEY$-V para colar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Esta imagem foi recortada para $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Fora de serviço."
  },
  "requestErrorDetails": {
    "message": "Desculpe! Não conseguimos guardar a sua captura. Por favor tente novamente mais tarde."
  },
  "connectionErrorTitle": {
    "message": "Não conseguimos ligar às suas capturas de ecrã."
  },
  "connectionErrorDetails": {
    "message": "Por favor, verifique a sua ligação à Internet. Se consegue ligar-se à Internet, pode existir um problema temporário com o serviço Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Não conseguimos guardar a sua captura porque existe um problema com o serviço Firefox Screenshots. Por favor tente novamente mais tarde."
  },
  "unshootablePageErrorTitle": {
    "message": "Não conseguimos capturar o ecrã nesta página."
  },
  "unshootablePageErrorDetails": {
    "message": "Esta não é uma página Web padrão, por isso não podemos tirar uma captura de ecrã da mesma."
  },
  "selfScreenshotErrorTitle": {
    "message": "Não pode tirar uma captura de uma página Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "A sua seleção é demasiado pequena"
  },
  "privateWindowErrorTitle": {
    "message": "O Screenshots está desativado no modo de navegação privada"
  },
  "privateWindowErrorDetails": {
    "message": "Desculpe pela inconveniência. Estamos a trabalhar nesta funcionalidade para futuros lançamentos."
  },
  "genericErrorTitle": {
    "message": "Uau! Algo correu mal com o Firefox Screenshots."
  },
  "genericErrorDetails": {
    "message": "Não temos a certeza do que acabou de acontecer. Importa-se de tentar novamente ou tirar uma captura de uma página diferente?"
  },
  "tourBodyIntro": {
    "message": "Tire, guarde e partilhe capturas de ecrã sem sair do Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Uma nova maneira de guardar"
  },
  "tourBodyPageAction": {
    "message": "Expanda o menu de ações da página na barra de endereço sempre que quiser tirar uma captura de ecrã."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capture exatamente o que quer"
  },
  "tourBodyClickAndDrag": {
    "message": "Clique e arraste para capturar apenas uma parte de uma página. Pode também pairar para destacar a sua seleção."
  },
  "tourHeaderFullPage": {
    "message": "Capture janelas ou páginas inteiras"
  },
  "tourBodyFullPage": {
    "message": "Selecione os botões no canto superior direito para capturar a área visível na janela ou para capturar uma página inteira."
  },
  "tourHeaderDownloadUpload": {
    "message": "Como você gosta"
  },
  "tourBodyDownloadUpload": {
    "message": "Guarde as suas capturas na web para partilhar mais facilmente ou transfira-as para o seu computador. Pode também clicar no botão Minhas capturas para encontrar todas as capturas que tirou."
  },
  "tourSkip": {
    "message": "SALTAR"
  },
  "tourNext": {
    "message": "Diapositivo seguinte"
  },
  "tourPrevious": {
    "message": "Diapositivo anterior"
  },
  "tourDone": {
    "message": "Feito"
  },
  "termsAndPrivacyNotice2": {
    "message": "Ao utilizar o Firefox Screenshots, concorda com os nossos $TERMSANDPRIVACYNOTICETERMSLINK$ e com o $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termos"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Aviso de privacidade"
  },
  "libraryLabel": {
    "message": "Capturas de ecrã"
  }
}PK
!<ϥ·99&webextension/_locales/rm/messages.json{
  "addonDescription": {
    "message": "Fai maletgs da visur dal web ed als memorisescha temporarmain u permanentamain."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Far in maletg dal visur"
  },
  "myShotsLink": {
    "message": "Mes maletgs da visur"
  },
  "screenshotInstructions": {
    "message": "Tira u clicca sin la pagina per tscherner ina regiun. Smatga ESC per interrumper."
  },
  "saveScreenshotSelectedArea": {
    "message": "Memorisar"
  },
  "saveScreenshotVisibleArea": {
    "message": "Memorisar la regiun visibla"
  },
  "saveScreenshotFullPage": {
    "message": "Memorisar la pagina cumpletta"
  },
  "cancelScreenshot": {
    "message": "Interrumper"
  },
  "downloadScreenshot": {
    "message": "Telechargiar"
  },
  "downloadOnlyNotice": {
    "message": "Ti es actualmain en il modus che permetta mo da telechargiar."
  },
  "downloadOnlyDetails": {
    "message": "En suandantas situaziuns permetta Firefox Screenshots mo da telechargiar:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Sche ti navigheschas en il modus privat."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Sche cookies da terzs èn deactivads."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Sche l'opziun «Mai memorisar la cronologia» è activada."
  },
  "notificationLinkCopiedTitle": {
    "message": "Copià la colliaziun"
  },
  "notificationLinkCopiedDetails": {
    "message": "La colliaziun tar tes maletg da visur è vegnida copiada en l'archiv provisoric. Smatga $META_KEY$-V per l'encollar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiar"
  },
  "notificationImageCopiedTitle": {
    "message": "Copià il maletg"
  },
  "notificationImageCopiedDetails": {
    "message": "Tes maletg dal visur è vegnì copià en l'archiv provisoric. Smatga $META_KEY$-V per l'encollar.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Quest maletg è vegnì retaglià a $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ord funcziun."
  },
  "requestErrorDetails": {
    "message": "Perstgisa! I è actualmain betg pussibel da memorisar tes maletg da visur. Emprova p.pl. pli tard anc ina giada."
  },
  "connectionErrorTitle": {
    "message": "Impussibel da connectar a tes maletgs da visur."
  },
  "connectionErrorDetails": {
    "message": "Controllescha tia connexiun a l'internet. Sche ti has access a l'internet ha il servetsch da Firefox Screenshots forsa temporarmain in problem."
  },
  "loginErrorDetails": {
    "message": "Impussibel da memorisar tes maletg da virus perquai ch'i dat in problem un il servetsch da Firefox Screenshots. Emprova p.pl. pli tard."
  },
  "unshootablePageErrorTitle": {
    "message": "Impussibel da far in maletg da visur da questa pagina."
  },
  "unshootablePageErrorDetails": {
    "message": "Quai n'è betg ina pagina web da standard, perquai n'èsi betg pussaivel da far in maletg da visur dad ella."
  },
  "selfScreenshotErrorTitle": {
    "message": "Impussibel da far in maletg da visur dad ina pagina da Firefox Screenshots."
  },
  "emptySelectionErrorTitle": {
    "message": "La zona selecziunada è memia pitschna"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots è deactivà en il modus privat"
  },
  "privateWindowErrorDetails": {
    "message": "Perstgisa las malempernaivladads. Nus furnin questa funcziun en ina da las proximas versiuns."
  },
  "genericErrorTitle": {
    "message": "Oh dieu! Firefox Screenshots ha il singlut."
  },
  "genericErrorDetails": {
    "message": "Nus na savain betg tge ch'è gist capità. Vuls empruvar anc ina giada, forsa cun in'autra pagina?"
  },
  "tourBodyIntro": {
    "message": "Far, memorisar e cundivider maletgs da visur senza bandunar Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ina nova pussaivladad da memorisar"
  },
  "tourBodyPageAction": {
    "message": "Vuls far in maletg dal visur? Avra il menu da las «Acziuns da pagina» en la trav d'adressas."
  },
  "tourHeaderClickAndDrag": {
    "message": "Far maletgs da visur da tut che vi vuls"
  },
  "tourBodyClickAndDrag": {
    "message": "Clicca e tira per far in maletg da be ina part da la pagina. Ti pos posiziunar la mieur sur la selecziun per la relevar."
  },
  "tourHeaderFullPage": {
    "message": "Far maletgs da fanestras u paginas cumplettas"
  },
  "tourBodyFullPage": {
    "message": "Tscherna il buttun sura dretg per far in maletg da la part visibla en la fanestra u per far in maletg da la pagina cumpletta."
  },
  "tourHeaderDownloadUpload": {
    "message": "Co che ti prefereschas"
  },
  "tourBodyDownloadUpload": {
    "message": "Memorisescha ils maletgs da visur en il web per als pudair cundivider u telechargiar sin tes computer. Ti pos era cliccar sin il buttun «Mes maletgs da visur» per vesair tut ils maletgs dal visur che ti has fatg."
  },
  "tourSkip": {
    "message": "Sursiglir"
  },
  "tourNext": {
    "message": "Proxim pass"
  },
  "tourPrevious": {
    "message": "Ultim pass"
  },
  "tourDone": {
    "message": "Finì"
  },
  "termsAndPrivacyNotice2": {
    "message": "Cun utilisar Firefox Screenshots acceptas ti $TERMSANDPRIVACYNOTICETERMSLINK$ e $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "las cundiziuns d'utilisaziun"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "la decleraziun da protecziun da datas"
  },
  "libraryLabel": {
    "message": "Maletgs dal visur"
  }
}PK
!<Šê‡‡&webextension/_locales/ro/messages.json{
  "addonDescription": {
    "message": "Realizează decupaje și capturi de ecran de pe web și salvează-le temporar sau permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Realizează o captură de ecran"
  },
  "myShotsLink": {
    "message": "Capturile mele"
  },
  "screenshotInstructions": {
    "message": "Trage sau dă clic pe pagină pentru a selecta o regiune. Apasă ESC pentru a renunța."
  },
  "saveScreenshotSelectedArea": {
    "message": "Salvează"
  },
  "saveScreenshotVisibleArea": {
    "message": "Salvează porțiunea vizibilă"
  },
  "saveScreenshotFullPage": {
    "message": "Salvează pagina completă"
  },
  "cancelScreenshot": {
    "message": "Renunță"
  },
  "downloadScreenshot": {
    "message": "Descarcă"
  },
  "downloadOnlyNotice": {
    "message": "În prezent ești în modul numai descărcare."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se schimbă automat în modul numai descărcare în aceste situații:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "În fereastra de navigare privată."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Atunci când cookie-urile terțe sunt dezactivate."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Atunci când este activată opțiunea „Nu memora istoricul”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Acum folosești Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Încărcările au fost dezactivate."
  },
  "notificationLinkCopiedTitle": {
    "message": "Link copiat"
  },
  "notificationLinkCopiedDetails": {
    "message": "Linkul către captura ta a fost copiat în clipboard. Apasă $META_KEY$-V pentru lipire.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Copiază"
  },
  "notificationImageCopiedTitle": {
    "message": "Captură copiată"
  },
  "notificationImageCopiedDetails": {
    "message": "Captura a fost copiată în clipboard. Apasă $META_KEY$-V pentru a lipi.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Imaginea a fost decupată la $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Nefuncțional."
  },
  "requestErrorDetails": {
    "message": "Ne pare rău! Nu am putut salva captura. Încearcă din nou mai târziu."
  },
  "connectionErrorTitle": {
    "message": "Nu ne putem conecta la capturile tale."
  },
  "connectionErrorDetails": {
    "message": "Verifică conexiunea la internet. Dacă te poți conecta la internet ar putea fi o problemă temporară cu serviciul Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nu am putut să salvăm captura ta deoarece este o problemă cu serviciul Firefox Screenshots. Încearcă din nou mai târziu."
  },
  "unshootablePageErrorTitle": {
    "message": "Nu putem realiza o captură de ecran a acestei pagini."
  },
  "unshootablePageErrorDetails": {
    "message": "Aceasta este o pagină web standard așa că nu putem lua o captură a acesteia."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nu poți realiza o captură a paginii Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Selecția este prea mică"
  },
  "privateWindowErrorTitle": {
    "message": "Capturile de ecran sunt dezactivate în modul de navigare privată"
  },
  "privateWindowErrorDetails": {
    "message": "Ne pare rău pentru inconveniență. Lucrăm să introducem această funcție în versiunile viitoare."
  },
  "genericErrorTitle": {
    "message": "Ups! Firefox Screenshots a întâmpinat o eroare."
  },
  "genericErrorDetails": {
    "message": "Nu știm ce s-a întâmplat. Poți încerca să iei o nouă captură sau o captură de la o altă pagină?"
  },
  "tourBodyIntro": {
    "message": "Preia, salvează și împărtășește capturi de ecran fără a părăsi Firefox."
  },
  "tourHeaderPageAction": {
    "message": "O nouă modalitate de salvare"
  },
  "tourBodyPageAction": {
    "message": "Extinde meniul de acțiuni ale paginii în bara de adrese oricând vrei să faci o captură."
  },
  "tourHeaderClickAndDrag": {
    "message": "Capturează întocmai ceea ce vrei"
  },
  "tourBodyClickAndDrag": {
    "message": "Clic și trage pentru a captura doar o porțiune a unei pagini. Poți și să poziționezi cursorul peste porțiune pentru a evidenția selecția."
  },
  "tourHeaderFullPage": {
    "message": "Capturează ferestre sau pagini întregi"
  },
  "tourBodyFullPage": {
    "message": "Selectează butoanele din partea dreaptă sus pentru a captura zona vizibilă din fereastră sau pentru a captura o pagină întreagă."
  },
  "tourHeaderDownloadUpload": {
    "message": "Pe placul tău"
  },
  "tourBodyDownloadUpload": {
    "message": "Salvează capturile decupate pe web pentru a le împărtăși mai ușor, sau descarcă-le pe calculator. Mai poți face clic pe butonul My Shots (capturile mele) pentru a găsi toate capturile luate."
  },
  "tourSkip": {
    "message": "OMITE"
  },
  "tourNext": {
    "message": "Diapozitivul următor"
  },
  "tourPrevious": {
    "message": "Diapozitivul anterior"
  },
  "tourDone": {
    "message": "Terminat"
  },
  "termsAndPrivacyNotice2": {
    "message": "Folosind Firefox Screenshots, ești de acord cu $TERMSANDPRIVACYNOTICETERMSLINK$ și $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Termenii"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Politica de confidenţialitate"
  },
  "libraryLabel": {
    "message": "Capturi de ecran"
  }
}PK
!<µà@Jll&webextension/_locales/ru/messages.json{
  "addonDescription": {
    "message": "Делайте вырезки и скриншоты из Интернета и сохраняйте их временно или навсегда."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Сделать скриншот"
  },
  "myShotsLink": {
    "message": "Мои снимки"
  },
  "screenshotInstructions": {
    "message": "Потяните мышью или щёлкните по странице, чтобы выбрать область. Нажмите ESC для отмены."
  },
  "saveScreenshotSelectedArea": {
    "message": "Сохранить"
  },
  "saveScreenshotVisibleArea": {
    "message": "Сохранить видимую область"
  },
  "saveScreenshotFullPage": {
    "message": "Сохранить всю страницу"
  },
  "cancelScreenshot": {
    "message": "Отмена"
  },
  "downloadScreenshot": {
    "message": "Загрузить"
  },
  "downloadOnlyNotice": {
    "message": "Сейчас вы в режиме только загрузки."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots автоматически переходит в режим только загрузки в следующих ситуациях:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "В приватном окне."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Сторонние куки отключены."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Включено «не будет запоминать историю»."
  },
  "downloadOnlyDetailsESR": {
    "message": "Вы используете Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Загрузка была отключена."
  },
  "notificationLinkCopiedTitle": {
    "message": "Ссылка скопирована"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ссылка на ваш снимок была скопирована в буфер обмена. Нажмите $META_KEY$-V для её вставки.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копировать"
  },
  "notificationImageCopiedTitle": {
    "message": "Снимок скопирован"
  },
  "notificationImageCopiedDetails": {
    "message": "Ваш снимок был скопирован в буфер обмена. Нажмите $META_KEY$-V для его вставки.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Это изображение было обрезано до $PIXELS$ пикселей.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Произошла ошибка."
  },
  "requestErrorDetails": {
    "message": "Извините! Мы не смогли сохранить ваш снимок. Пожалуйста, попробуйте позже."
  },
  "connectionErrorTitle": {
    "message": "Мы не смогли получить доступ к вашим скриншотам."
  },
  "connectionErrorDetails": {
    "message": "Пожалуйста, проверьте соединение с Интернетом. Если у вам удаётся войти в Интернет, то возможно, возникла временная проблема со службой Скриншотов Firefox."
  },
  "loginErrorDetails": {
    "message": "Мы не можем сохранить ваш снимок, так как возникла проблема с сервисом Скриншотов Firefox. Пожалуйста, попробуйте позже."
  },
  "unshootablePageErrorTitle": {
    "message": "Мы не можем сделать скриншот этой страницы."
  },
  "unshootablePageErrorDetails": {
    "message": "Так как это не обычная веб-страница, мы не сможем сделать её скриншот."
  },
  "selfScreenshotErrorTitle": {
    "message": "Вы не можете сделать скриншот страницы Скриншотов Firefox."
  },
  "emptySelectionErrorTitle": {
    "message": "Выбрана слишком небольшая область"
  },
  "privateWindowErrorTitle": {
    "message": "Скриншоты отключены в режиме Приватного просмотра"
  },
  "privateWindowErrorDetails": {
    "message": "Приносим извинения за неудобства. Мы работаем над включением этой функции в будущие релизы."
  },
  "genericErrorTitle": {
    "message": "Ого! Скриншоты Firefox вышли из строя."
  },
  "genericErrorDetails": {
    "message": "Мы не уверены, в чём проблема. Попробуете ещё раз или сделаете снимок другой страницы?"
  },
  "tourBodyIntro": {
    "message": "Делайте, сохраняйте и делитесь скриншотами прямо в Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Новый способ сохранения"
  },
  "tourBodyPageAction": {
    "message": "Раскройте меню действий на странице в адресной строке в любой момент, когда вы захотите сделать снимок экрана."
  },
  "tourHeaderClickAndDrag": {
    "message": "Делайте снимки чего угодно"
  },
  "tourBodyClickAndDrag": {
    "message": "Щелкните и потяните мышью для захвата части страницы. Вы также можете навести курсор мыши для подсветки выбранной области."
  },
  "tourHeaderFullPage": {
    "message": "Захватывайте окна или целые страницы"
  },
  "tourBodyFullPage": {
    "message": "С помощью кнопок в верхнем правом углу выбирайте захват видимой области окна или страницы целиком."
  },
  "tourHeaderDownloadUpload": {
    "message": "Как вам нравится"
  },
  "tourBodyDownloadUpload": {
    "message": "Сохраняйте свои снимки в Интернете, чтобы легко ими делиться, или загружайте их на свой компьютер. Вы также можете просмотреть все сохранённые снимки, нажав на кнопку Мои снимки."
  },
  "tourSkip": {
    "message": "Пропустить"
  },
  "tourNext": {
    "message": "Следующий слайд"
  },
  "tourPrevious": {
    "message": "Предыдущий слайд"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Используя Firefox Screenshots, вы соглашаетесь с нашими $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Условиями использования"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Уведомлением о приватности"
  },
  "libraryLabel": {
    "message": "Скриншоты"
  }
}PK
!<ÒÈãÏ÷÷&webextension/_locales/sk/messages.json{
  "addonDescription": {
    "message": "Vytvorte si snímky obrazovky na webe a uložte si ich dočasne či navždy."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Urobiť snímku obrazovky"
  },
  "myShotsLink": {
    "message": "Moje snímky"
  },
  "screenshotInstructions": {
    "message": "Potiahnutím alebo kliknutím si vyberte oblasť, ktorú chcete zachytiť. Výber zrušíte stlačením klávesa ESC."
  },
  "saveScreenshotSelectedArea": {
    "message": "Uložiť"
  },
  "saveScreenshotVisibleArea": {
    "message": "Uložiť viditeľnú časť"
  },
  "saveScreenshotFullPage": {
    "message": "Uložiť celú stránku"
  },
  "cancelScreenshot": {
    "message": "Zrušiť"
  },
  "downloadScreenshot": {
    "message": "Prevziať"
  },
  "downloadOnlyNotice": {
    "message": "Ste v režime len na prevzatie."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots automaticky prejde do režimu len na prevzatie v nasledujúcich situáciách:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Ste v režime Súkromné prehliadanie."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Máte zakázané cookies tretích strán."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Máte úplne zakázané ukladanie histórie prehliadania."
  },
  "downloadOnlyDetailsESR": {
    "message": "Používate Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nahrávanie bolo zakázané."
  },
  "notificationLinkCopiedTitle": {
    "message": "Odkaz bol skopírovaný"
  },
  "notificationLinkCopiedDetails": {
    "message": "Odkaz na vašu snímku bol skopírovaný do schránky. Stlačením $META_KEY$-V ho prilepíte.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopírovať"
  },
  "notificationImageCopiedTitle": {
    "message": "Snímka bola skopírovaná"
  },
  "notificationImageCopiedDetails": {
    "message": "Vaša snímka bola skopírovaná do schránky. Stlačením $META_KEY$-V ju prilepíte.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Tento obrázok bol orezaný na $PIXELS$ px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Mimo prevádzky."
  },
  "requestErrorDetails": {
    "message": "Mrzí nás to, no nemôžeme uložiť vašu snímku. Skúste to, prosím, neskôr."
  },
  "connectionErrorTitle": {
    "message": "Nemôžeme sa spojiť s vašimi snímkami."
  },
  "connectionErrorDetails": {
    "message": "Prosím, skontrolujte svoje internetové pripojenie. Ak ste pripojení na internet, môže ísť o dočasný problém na strane služby Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Nemohli sme uložiť vašu snímku, pretože nastal problém so službou Firefox Screenshots. Skúste to, prosím, neskôr."
  },
  "unshootablePageErrorTitle": {
    "message": "Túto stránku nemôžeme zachytiť."
  },
  "unshootablePageErrorDetails": {
    "message": "Toto nie je štandardná webová stránka, takže z nej nemôžeme vytvoriť snímku obrazovky."
  },
  "selfScreenshotErrorTitle": {
    "message": "Nemôžete vytvoriť snímku obrazovky stránky Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Váš výber je príliš malý"
  },
  "privateWindowErrorTitle": {
    "message": "Služba Firefox Screenshots je v režime Súkromné prehliadanie zakázaná"
  },
  "privateWindowErrorDetails": {
    "message": "Ospravedlňujeme sa za spôsobené nepríjemnosti. Pracujeme na vylepšení tejto funkcie v budúcich verziách."
  },
  "genericErrorTitle": {
    "message": "Ups! Služba Firefox Screenshots prestala pracovať."
  },
  "genericErrorDetails": {
    "message": "Nie sme si istí, čo sa práve stalo. Chcete tú skúsiť znova alebo chcete vytvoriť snímku inej stránky?"
  },
  "tourBodyIntro": {
    "message": "Tvorte, ukladajte a zdieľajte snímky obrazovky bez toho, aby ste museli opustiť Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Nový spôsob ukladania"
  },
  "tourBodyPageAction": {
    "message": "Kedykoľvek chcete urobiť snímku, otvorte ponuku akcii stránky v paneli s adresou."
  },
  "tourHeaderClickAndDrag": {
    "message": "Zachyťte to, čo chcete"
  },
  "tourBodyClickAndDrag": {
    "message": "Ak chcete zachytiť časť stránky, urobíte to kliknutím a potiahnutím. Váš výber zvýrazníte tak, že sa naň presuniete myšou."
  },
  "tourHeaderFullPage": {
    "message": "Zachyťte okná alebo celé webové stránky"
  },
  "tourBodyFullPage": {
    "message": "Kliknutím na tlačidlo v pravom hornom rohu môžete zachytiť viditeľnú časť stránky. Pomocou ďalšieho tlačidla zachytíte celú stránku."
  },
  "tourHeaderDownloadUpload": {
    "message": "Urobte to, čo chcete"
  },
  "tourBodyDownloadUpload": {
    "message": "Uložte si orezanú snímku na web, aby ste ju mohli ľahšie zdieľať alebo si ju prevziať do počítača. Môžete si taktiež pozrieť všetky vaše snímky - stačí, ak kliknete na tlačidlo Moje snímky."
  },
  "tourSkip": {
    "message": "Preskočiť"
  },
  "tourNext": {
    "message": "Ďalšia snímka"
  },
  "tourPrevious": {
    "message": "Predchádzajúca snímka"
  },
  "tourDone": {
    "message": "Hotovo"
  },
  "termsAndPrivacyNotice2": {
    "message": "Používaním služby Firefox Screenshots súhlasíte s našimi $TERMSANDPRIVACYNOTICETERMSLINK$ a $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "podmienkami"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "zásadami ochrany súkromia"
  },
  "libraryLabel": {
    "message": "Snímky obrazovky"
  }
}PK
!<XOÀP&webextension/_locales/sl/messages.json{
  "addonDescription": {
    "message": "Zajemajte posnetke zaslona s spleta ter jih shranite začasno ali trajno."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Zajemi posnetek zaslona"
  },
  "myShotsLink": {
    "message": "Moji posnetki"
  },
  "screenshotInstructions": {
    "message": "Povlecite ali kliknite na strani za izbiro območja. Pritisnite ESC za preklic."
  },
  "saveScreenshotSelectedArea": {
    "message": "Shrani"
  },
  "saveScreenshotVisibleArea": {
    "message": "Shrani vidno"
  },
  "saveScreenshotFullPage": {
    "message": "Shrani celotno stran"
  },
  "cancelScreenshot": {
    "message": "Prekliči"
  },
  "downloadScreenshot": {
    "message": "Prenesi"
  },
  "downloadOnlyNotice": {
    "message": "Trenutno ste v načinu samo za prenos."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots se samodejno preklopi v način samo za prenos v naslednjih primerih:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "V oknu zasebnega brskanja."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Ko so piškotki tretjih strani onemogočeni."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Ko je Firefox nastavljen, naj ne shranjuje zgodovine."
  },
  "downloadOnlyDetailsESR": {
    "message": "Uporabljate Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Nalaganje je onemogočeno."
  },
  "notificationLinkCopiedTitle": {
    "message": "Povezava kopirana"
  },
  "notificationLinkCopiedDetails": {
    "message": "Povezava do vašega posnetka zaslona je bila kopirana v odložišče. Pritisnite $META_KEY$-V, da jo prilepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiraj"
  },
  "notificationImageCopiedTitle": {
    "message": "Posnetek kopiran"
  },
  "notificationImageCopiedDetails": {
    "message": "Posnetek zaslona je bil kopiran na odložišče. Pritisnite $META_KEY$-V, da ga prilepite.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ta slika je bila obrezana na $PIXELS$ pikslov.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ne dela."
  },
  "requestErrorDetails": {
    "message": "Vašega posnetka nismo uspeli shraniti. Poskusite znova kasneje."
  },
  "connectionErrorTitle": {
    "message": "Ne moremo vzpostaviti povezave do vaših posnetkov."
  },
  "connectionErrorDetails": {
    "message": "Preverite svojo internetno povezavo. V kolikor povezava deluje, gre morda za začasno težavo s storitvijo Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Ne moremo shraniti vašega posnetka, ker je prišlo do težave s storitvijo Firefox Screenshots. Poskusite znova kasneje."
  },
  "unshootablePageErrorTitle": {
    "message": "Ne moremo zajeti posnetka te strani."
  },
  "unshootablePageErrorDetails": {
    "message": "To ni običajna spletna stran, zato ne morete zajeti njenega zaslonskega posnetka."
  },
  "selfScreenshotErrorTitle": {
    "message": "Posnetka strani Firefox Screenshots ni mogoče zajeti!"
  },
  "emptySelectionErrorTitle": {
    "message": "Vaš izbor je premajhen"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots je onemogočen v zasebnem načinu brskanja"
  },
  "privateWindowErrorDetails": {
    "message": "Oprostite za nevšečnost. To možnost izboljšujemo za prihodnje izdaje."
  },
  "genericErrorTitle": {
    "message": "Uf! Firefox Screenshots se je pokvaril."
  },
  "genericErrorDetails": {
    "message": "Ne vemo točno, kaj se je pravkar zgodilo. Bi radi poskusili znova ali pa zajeli posnetek kakšne druge strani?"
  },
  "tourBodyIntro": {
    "message": "Zajemite, shranite in delite zaslonske posnetke, ne da bi zapustili Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Nov način shranjevanja"
  },
  "tourBodyPageAction": {
    "message": "Kadarkoli želite zajeti posnetek zaslona, v naslovni vrstici razširite meni dejanj strani."
  },
  "tourHeaderClickAndDrag": {
    "message": "Zajemite to, kar hočete"
  },
  "tourBodyClickAndDrag": {
    "message": "Kliknite in povlecite, če želite zajeti samo del strani. Svojo izbiro lahko tudi poudarite, tako da preko nje povlečete miškin kazalec."
  },
  "tourHeaderFullPage": {
    "message": "Zajemite okna ali celotne strani"
  },
  "tourBodyFullPage": {
    "message": "V zgornjem desnem kotu izberite gumb za zajem vidnega območja v oknu ali celotne strani."
  },
  "tourHeaderDownloadUpload": {
    "message": "Kot vi želite"
  },
  "tourBodyDownloadUpload": {
    "message": "Shranite obrezane posnetke na splet za lažje deljenje ali jih prenesite na svoj računalnik. Vse zajete posnetke lahko najdete s klikom na gumb Moji posnetki."
  },
  "tourSkip": {
    "message": "Preskoči"
  },
  "tourNext": {
    "message": "Naslednji diapozitiv"
  },
  "tourPrevious": {
    "message": "Prejšnji diapozitiv"
  },
  "tourDone": {
    "message": "Končano"
  },
  "termsAndPrivacyNotice2": {
    "message": "Z uporabo razširitve Firefox Screenshots se strinjate z našimi $TERMSANDPRIVACYNOTICETERMSLINK$ in $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "pogoji"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "obvestilom o zasebnosti"
  },
  "libraryLabel": {
    "message": "Posnetki zaslona"
  }
}PK
!<¹îZvv&webextension/_locales/sq/messages.json{
  "addonDescription": {
    "message": "Përftoni copëza dhe bëni foto në Web dhe ruajini ato përkohësisht ose përfundimisht."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Bëni një Foto"
  },
  "myShotsLink": {
    "message": "Shkrepjet e Mia"
  },
  "screenshotInstructions": {
    "message": "Tërhiqni kursorin ose klikoni te faqja që të përzgjidhni një zonë. Shtypni ESC që të anulohet."
  },
  "saveScreenshotSelectedArea": {
    "message": "Ruaje"
  },
  "saveScreenshotVisibleArea": {
    "message": "Ruaj pjesën e dukshme"
  },
  "saveScreenshotFullPage": {
    "message": "Ruaj krejt faqen"
  },
  "cancelScreenshot": {
    "message": "Anuloje"
  },
  "downloadScreenshot": {
    "message": "Shkarkoje"
  },
  "downloadOnlyNotice": {
    "message": "Gjendeni nën mënyrën Vetëm Shkarkim."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots kalon vetvetiu nën mënyrën Vetëm Shkarkim në këto situata:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Në një dritare Shfletimi Privat."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookie-t e palëve të treta janë të çaktivizuara."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Mos mbaj kurrë mend historikun” është e aktivizuar."
  },
  "downloadOnlyDetailsESR": {
    "message": "Po përdorni Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Ngarkimet janë çaktivizuar."
  },
  "notificationLinkCopiedTitle": {
    "message": "Lidhja u Kopjua"
  },
  "notificationLinkCopiedDetails": {
    "message": "Lidhja për te fotoja juaj u kopjua në të papastër. Shtypni $META_KEY$-V për ta ngjitur diku.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopjoje"
  },
  "notificationImageCopiedTitle": {
    "message": "Fotoja u Kopjua"
  },
  "notificationImageCopiedDetails": {
    "message": "Fotoja juaj u kopjua në të papastër. Për ta ngjitur diku, shtypni $META_KEY$-V.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Kjo figurë është qethur në $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "S’ka gjendje."
  },
  "requestErrorDetails": {
    "message": "Na ndjeni! S’e ruajtëm dot foton tuaj. Ju lutemi, riprovoni më vonë."
  },
  "connectionErrorTitle": {
    "message": "S’lidhemi dot te fotot tuaja."
  },
  "connectionErrorDetails": {
    "message": "Ju lutemi, kontrolloni lidhjen tuaj Internet. Nëse jeni në gjendje të lidheni në Internet, mund të bëhet fjalë për një problem të përkohshëm me shërbimin Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "S’e ruajtëm dot foton tuaj, ngaqë pati një problem me shërbimin Firefox Screenshots. Ju lutemi, riprovoni më vonë."
  },
  "unshootablePageErrorTitle": {
    "message": "S’bëjmë dot foto të kësaj faqeje."
  },
  "unshootablePageErrorDetails": {
    "message": "Kjo s’është një faqe Web standarde, ndaj s’mund të bëni një foto ekrani të saj."
  },
  "selfScreenshotErrorTitle": {
    "message": "S’mund të bëni foto të një faqeje të Firefox Screenshots-it!"
  },
  "emptySelectionErrorTitle": {
    "message": "Përzgjedhja juaj është shumë e vogël"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots çaktivizohet nën Mënyrën Shfletim Privat"
  },
  "privateWindowErrorDetails": {
    "message": "Na ndjeni për mungesën. Po punojmë mbi këtë veçori për hedhjet e ardhshme në qarkullim."
  },
  "genericErrorTitle": {
    "message": "Yhaaa! Firefox Screenshots shkalloi."
  },
  "genericErrorDetails": {
    "message": "S’jemi të sigurt se ç’ndodhi. Ju prish punë të bëni një foto të një faqeje tjetër?"
  },
  "tourBodyIntro": {
    "message": "Bëni, ruani dhe ndani foto ekrani me të tjerët pa dalë nga Firefox-i."
  },
  "tourHeaderPageAction": {
    "message": "Një mënyrë e re për të ruajtur"
  },
  "tourBodyPageAction": {
    "message": "Kurdo që doni të bëni një foto ekrani, zgjeroni menunë e veprimeve mbi faqen, te shtylla e adresave."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fiksoni Në Foto Aq Sa Doni"
  },
  "tourBodyClickAndDrag": {
    "message": "Klikoni dhe tërhiqeni që të fotografoni thjesht një copë të faqes. Mund edhe të kaloni kursorin përsipër që të theksoni përzgjedhjen tuaj."
  },
  "tourHeaderFullPage": {
    "message": "Fiksoni Dritare ose Krejt Faqet"
  },
  "tourBodyFullPage": {
    "message": "Përzgjidhni butonat në cepin e sipërm djathtas që të fotografoni zonën e dukshme te dritarja ose një faqe të tërë."
  },
  "tourHeaderDownloadUpload": {
    "message": "Si T’ju Pëlqejë"
  },
  "tourBodyDownloadUpload": {
    "message": "Ruajini fotot tuaja në web, për ndarje më të lehtë me të tjerët, ose shkarkojini në kompjuterin tuaj. Mund edhe të klikoni te butoni Shkrepjet e Mia që të gjeni krejt shkrepjet që keni bërë."
  },
  "tourSkip": {
    "message": "ANASHKALOJE"
  },
  "tourNext": {
    "message": "Diapozitivi Pasues"
  },
  "tourPrevious": {
    "message": "Diapozitivi i Mëparshëm"
  },
  "tourDone": {
    "message": "U bë"
  },
  "termsAndPrivacyNotice2": {
    "message": "Duke përdorur Firefox Screenshots, pajtoheni me $TERMSANDPRIVACYNOTICETERMSLINK$ dhe $TERMSANDPRIVACYNOTICEPRIVACYLINK$ tonat.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Kushte"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Shënim Privatësie"
  },
  "libraryLabel": {
    "message": "Foto ekrani"
  }
}PK
!<³××ç§&webextension/_locales/sr/messages.json{
  "addonDescription": {
    "message": "Бележите снимке екрана са веба и сачувајте их привремено или трајно."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Усликај екран"
  },
  "myShotsLink": {
    "message": "Моји снимци"
  },
  "screenshotInstructions": {
    "message": "Превуците или кликните на страницу да изаберете област. Притисните ESC да прекинете."
  },
  "saveScreenshotSelectedArea": {
    "message": "Сачувај"
  },
  "saveScreenshotVisibleArea": {
    "message": "Сачувај видљиво"
  },
  "saveScreenshotFullPage": {
    "message": "Сачувај целу страницу"
  },
  "cancelScreenshot": {
    "message": "Откажи"
  },
  "downloadScreenshot": {
    "message": "Преузми"
  },
  "downloadOnlyNotice": {
    "message": "Тренутно сте у режиму где можете само преузимати."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots се пребацује у режим где се само преузима у следећим ситуацијама:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "У прозору приватног прегледања."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Колачићи трећих страна су онемогућени."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Опција „Никада не памти историјат“ је омогућена."
  },
  "downloadOnlyDetailsESR": {
    "message": "Користите Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Отпремања су онемогућена."
  },
  "notificationLinkCopiedTitle": {
    "message": "Веза копирана"
  },
  "notificationLinkCopiedDetails": {
    "message": "Веза коју сте забележили је копирана у бележницу. Притисните $META_KEY$-V да налепите.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копирај"
  },
  "notificationImageCopiedTitle": {
    "message": "Снимак је копиран"
  },
  "notificationImageCopiedDetails": {
    "message": "Ваш снимак је копиран. Притисните $META_KEY$-V да налепите.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Слика је исечена на $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Не ради."
  },
  "requestErrorDetails": {
    "message": "Жао нам је! Нисмо могли сачувати ваш снимак. Покушајте поново касније."
  },
  "connectionErrorTitle": {
    "message": "Не можемо се повезати на ваше снимке."
  },
  "connectionErrorDetails": {
    "message": "Проверите вашу интернет конекцију. Ако можете да се конектујете, онда можда постоји привремени проблем са Firefox Screenshots-ом."
  },
  "loginErrorDetails": {
    "message": "Нисмо могли сачувати ваш снимак јер постоји проблем са Firefox Screenshots-ом. Покушајте поново касније."
  },
  "unshootablePageErrorTitle": {
    "message": "Не можемо забележити снимак ове странице."
  },
  "unshootablePageErrorDetails": {
    "message": "Ово није стандардна веб страница, тако да не можете забележити њен снимак."
  },
  "selfScreenshotErrorTitle": {
    "message": "Не можете усликати Firefox Screenshots страницу!"
  },
  "emptySelectionErrorTitle": {
    "message": "Ваша селекција је премала"
  },
  "privateWindowErrorTitle": {
    "message": "Снимци екрана су онемогућени у приватном режиму"
  },
  "privateWindowErrorDetails": {
    "message": "Жао нам је због овог неспоразума. Радимо на овој могућности за следећа издања."
  },
  "genericErrorTitle": {
    "message": "Ајој! Firefox Screenshots је пошашавио."
  },
  "genericErrorDetails": {
    "message": "Нисмо сигурни шта се управо догодило. Желите ли покушати поново или да усликате другачију страницу?"
  },
  "tourBodyIntro": {
    "message": "Забележите, сачувајте и поделите снимке екрана без напуштања Firefox-а."
  },
  "tourHeaderPageAction": {
    "message": "Нови начин да сачувате"
  },
  "tourBodyPageAction": {
    "message": "Проширите страницу из менија у адресној траци кад год желите да усликате екран."
  },
  "tourHeaderClickAndDrag": {
    "message": "Усликајте баш оно што желите"
  },
  "tourBodyClickAndDrag": {
    "message": "Кликните и превуците да усликате само део странице. Такође можете означити вашу селекцију."
  },
  "tourHeaderFullPage": {
    "message": "Усликајте прозоре или целе странице"
  },
  "tourBodyFullPage": {
    "message": "Изаберите дугмад у горњем десном углу да усликате видљиве делове прозора или да усликате целу страницу."
  },
  "tourHeaderDownloadUpload": {
    "message": "Као што волите"
  },
  "tourBodyDownloadUpload": {
    "message": "Сачувајте ваш исечени снимак на веб ради лакшег дељења или преузимања на ваш рачунар. Такође можете кликнути на дугме \"Моји снимци\" да пронађете све ваше снимке."
  },
  "tourSkip": {
    "message": "Прескочи"
  },
  "tourNext": {
    "message": "Следећи слајд"
  },
  "tourPrevious": {
    "message": "Претходни слајд"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Коришћењем Firefox Screenshots прихватате наше $TERMSANDPRIVACYNOTICETERMSLINK$ и $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "услове"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "обавештење о приватности"
  },
  "libraryLabel": {
    "message": "Снимци екрана"
  }
}PK
!<ò8’­cc)webextension/_locales/sv_SE/messages.json{
  "addonDescription": {
    "message": "Ta klipp och skärmbilder från webben och spara dem tillfälligt eller permanent."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ta en skärmbild"
  },
  "myShotsLink": {
    "message": "Mina skärmbilder"
  },
  "screenshotInstructions": {
    "message": "Dra eller klicka på sidan för att välja en region. Tryck på ESC för att avbryta."
  },
  "saveScreenshotSelectedArea": {
    "message": "Spara"
  },
  "saveScreenshotVisibleArea": {
    "message": "Spara synligt område"
  },
  "saveScreenshotFullPage": {
    "message": "Spara hela sidan"
  },
  "cancelScreenshot": {
    "message": "Avbryt"
  },
  "downloadScreenshot": {
    "message": "Ladda ner"
  },
  "downloadOnlyNotice": {
    "message": "Du är för närvarande i nedladdningsbart läge."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots ändrar automatiskt till nedladdningsbart läge i följande situationer:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "I ett privat surffönster."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Kakor från tredje part är inaktiverade."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "\"Inte spara någon historik\" är aktiverad."
  },
  "downloadOnlyDetailsESR": {
    "message": "Du använder Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Uppladdningar har inaktiverats."
  },
  "notificationLinkCopiedTitle": {
    "message": "Länk kopierad"
  },
  "notificationLinkCopiedDetails": {
    "message": "Länken till din skärmbild har kopierats till urklipp. Tryck på $META_KEY$-V för att klistra in.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopiera"
  },
  "notificationImageCopiedTitle": {
    "message": "Bild kopierad"
  },
  "notificationImageCopiedDetails": {
    "message": "Din bild har kopierats till urklipp. Tryck på $META_KEY$-V för att klistra in.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Den här bilden har beskurits till $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Ur funktion."
  },
  "requestErrorDetails": {
    "message": "Förlåt! Vi kunde inte spara din skärmbild. Försök igen senare."
  },
  "connectionErrorTitle": {
    "message": "Vi kan inte ansluta till dina skärmbilder."
  },
  "connectionErrorDetails": {
    "message": "Kontrollera din internetanslutning. Om du kan ansluta till internet, kan det vara ett tillfälligt problem med tjänsten Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Vi kunde inte spara din skärmbild eftersom det finns ett problem med tjänsten Firefox Screenshots. Försök igen senare."
  },
  "unshootablePageErrorTitle": {
    "message": "Vi kan inte ta en skärmbild av sidan."
  },
  "unshootablePageErrorDetails": {
    "message": "Detta är inte en vanlig webbsida, så du kan inte ta en skärmbild av den."
  },
  "selfScreenshotErrorTitle": {
    "message": "Du kan inte ta en skärmbild av sidan Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Ditt val är för litet"
  },
  "privateWindowErrorTitle": {
    "message": "Skärmbilder är inaktiverad i privat surfläge"
  },
  "privateWindowErrorDetails": {
    "message": "Ledsen för besväret. Vi arbetar med den här funktionen för framtida versioner."
  },
  "genericErrorTitle": {
    "message": "Oj! Firefox Screenshots verkar inte fungera korrekt."
  },
  "genericErrorDetails": {
    "message": "Vi är inte säkra på vad som just hände. Kan du försöka igen eller ta en bild på en annan sida?"
  },
  "tourBodyIntro": {
    "message": "Ta, spara, och dela skärmbilder utan att lämna Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ett nytt sätt att spara"
  },
  "tourBodyPageAction": {
    "message": "Expandera sidåtgärdsmenyn i adressfältet när du vill ta en skärmbild."
  },
  "tourHeaderClickAndDrag": {
    "message": "Fånga precis vad du vill"
  },
  "tourBodyClickAndDrag": {
    "message": "Klicka och dra för att fånga bara en del av en sida. Du kan också hovra för att markera ditt val."
  },
  "tourHeaderFullPage": {
    "message": "Fånga fönster eller hela sidor"
  },
  "tourBodyFullPage": {
    "message": "Välj knapparna i det övre högra hörnet för att fånga det synliga området i fönstret eller för att fånga en hel sida."
  },
  "tourHeaderDownloadUpload": {
    "message": "Som du vill ha det"
  },
  "tourBodyDownloadUpload": {
    "message": "Spara dina beskurna bilder till webben för enklare delning, eller hämta dem till datorn. Du kan också klicka på knappen Mina skärmbilder för att hitta alla bilder du tagit."
  },
  "tourSkip": {
    "message": "Hoppa över"
  },
  "tourNext": {
    "message": "Nästa sida"
  },
  "tourPrevious": {
    "message": "Föregående sida"
  },
  "tourDone": {
    "message": "Färdig"
  },
  "termsAndPrivacyNotice2": {
    "message": "Genom att använda Firefox Screenshots, godkänner du $TERMSANDPRIVACYNOTICETERMSLINK$ och $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Villkor"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Sekretesspolicy"
  },
  "libraryLabel": {
    "message": "Skärmbilder"
  }
}PK
!<QWãºì!ì!&webextension/_locales/ta/messages.json{
  "addonDescription": {
    "message": "வலைபக்கங்களை நிரந்தரமாக (அ) தற்காலிகமாக துணுக்குகளாக (அ) திரைப்பிடிப்புகளாக சேமியுங்கள்."
  },
  "addonAuthorsList": {
    "message": "மொசில்லா <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "ஒரு திரைப்பிடிப்பு செய்"
  },
  "myShotsLink": {
    "message": "எனது திரைகள்"
  },
  "screenshotInstructions": {
    "message": "பக்கத்தில் இழுத்தோ (அ) சொடுக்கியோ ஒரு பகுதியைத் தேர்வுச்செய்க. இரத்து செய்ய ESC விசையை அழுத்தவும்."
  },
  "saveScreenshotSelectedArea": {
    "message": "சேமி"
  },
  "saveScreenshotVisibleArea": {
    "message": "பார்ப்பதைச் சேமி"
  },
  "saveScreenshotFullPage": {
    "message": "முழு பக்கத்தைச் சேமி"
  },
  "cancelScreenshot": {
    "message": "இரத்து"
  },
  "downloadScreenshot": {
    "message": "பதிவிறக்கு"
  },
  "notificationLinkCopiedTitle": {
    "message": "தொடுப்பு நகலெடுக்கப்பட்டது"
  },
  "notificationLinkCopiedDetails": {
    "message": "நீங்கள் எடுத்த திரைப்பிடிப்பிற்கான தொடுப்பு ஒட்டுபலகைக்கு நகலெடுக்கப்பட்டது. ஒட்ட $META_KEY$ விசையை அழுத்தவும்.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "சேவை இணைப்பில் இல்லை."
  },
  "requestErrorDetails": {
    "message": "மன்னிக்க! உங்களின் திரைப்பிடிப்பைச் சேமிக்க முடியவில்லை. மீண்டும் முயற்சிக்கவும்."
  },
  "connectionErrorTitle": {
    "message": "உங்களின் திரைப்பிடிப்பு சேவையகத்தை அணுக முடியவில்லை."
  },
  "connectionErrorDetails": {
    "message": "தயவுச்செய்து உங்கள் இணைய இணைப்பைச் சரிபாருங்கள். உங்களால் இணையத்தை அணுக முடிந்தால் இது பயர்பாஃசு திரைப்பிடிப்பிற்கான இடைப்பட்ட சேவை துண்டிப்பாகும்."
  },
  "loginErrorDetails": {
    "message": "பயர்பாஃசின் திரைப்பிடிப்பு சேவை தடைப்பட்டதால் உங்களின் திரைப்பிடிப்பைச் சேமிக்க முடியவில்லை. மீண்டும் முயற்சிக்கவும்."
  },
  "unshootablePageErrorTitle": {
    "message": "இப்பக்கத்தை திரைப்பிடிப்பு செய்ய முடியாது."
  },
  "unshootablePageErrorDetails": {
    "message": "இது ஒரு இணையத்தளம் போன்று தெரிவில்லை, எனவே உங்களால் திரைப்பிடிப்பு எடுக்க முடியாது."
  },
  "selfScreenshotErrorTitle": {
    "message": "பயர்பாஃசு திரைப்பிடிப்பு பக்கத்தை உங்களால் திரைப்பிடிப்பு செய்ய முடியாது!"
  },
  "emptySelectionErrorTitle": {
    "message": "உங்களின் தேர்வு மிகச் சிறியது"
  },
  "privateWindowErrorTitle": {
    "message": "அந்தரங்க உலாவல் முறையில் திரைபிடிப்பு முடக்கப்பட்டுள்ளது"
  },
  "privateWindowErrorDetails": {
    "message": "சிரமத்திற்கு வருந்துகிறோம். எதிர்கால வெளியீடுகளில் நாங்கள் இந்த வசதியைச் செய்து தருகிறோம்."
  },
  "genericErrorTitle": {
    "message": "அய் அய்யோ! பயர்பாஃசு திரைப்பிடிப்பு வீணாய் போனது. "
  },
  "genericErrorDetails": {
    "message": "என்ன நடந்தது என எங்களுக்குத் தெரியவில்லை. முடிந்தால் மீண்டும் முயற்சியுங்கள் (அ) வேறொரு பக்கத்தில் முயற்சியுங்கள்?"
  },
  "tourBodyIntro": {
    "message": "பயர்பாஃசை விட்டு வெளியேறாமல் திரைப்பிடிப்புகளை எடுக்கலாம், சேமித்து மற்றவருடன் பகிர்ந்துக்கொள்ளலாம்."
  },
  "tourHeaderPageAction": {
    "message": "சேமிப்பதற்கானபுதியவழி"
  },
  "tourHeaderClickAndDrag": {
    "message": "உங்களுக்கு என்ன வேண்டுமோ அதைக் கைப்பற்றுங்கள்"
  },
  "tourBodyClickAndDrag": {
    "message": "சொடுக்கி இழுத்து சும்மா ஒரு பகுதியைத் தேர்வுச்செய்க. நீங்கள் இங்கும் அங்குமாக நகர்த்திக் கூட நீங்கள் தேர்வுச்செய்த பக்கத்தை மிளிர்க்கச் செய்யலாம்."
  },
  "tourHeaderFullPage": {
    "message": "சாளரங்களை (அ) முழுப் பக்கங்களை கைப்பற்றவும்"
  },
  "tourBodyFullPage": {
    "message": "வலது மேல்முனையில் உள்ள கத்திரிகோல் போன்ற பயன்படுத்தி பார்வையில் இருக்கும் வலைப்பக்கத்தையோ (அ) முழு பக்கத்தையோ திரைப்பிடிப்புச் செய்யுங்கள்."
  },
  "tourHeaderDownloadUpload": {
    "message": "நீங்கள் விரும்பியவாறே"
  },
  "tourBodyDownloadUpload": {
    "message": "நீங்கள் எடுத்த வெட்டிய திரைப்பிடிப்புகளை இணையத்தில் எளிதில் சேமித்து பகிரவோ (அ) கணினியில் பதிவிறக்கவோ முடியும். 'எனது பிடிப்புகள்' மீது சொடுக்கி உங்களின் திரைப்பிடிப்புகளைக் காணலாம்."
  },
  "tourSkip": {
    "message": "தாவு"
  },
  "tourNext": {
    "message": "அடுத்த வில்லை"
  },
  "tourPrevious": {
    "message": "முந்தைய வில்லை"
  },
  "tourDone": {
    "message": "முடிந்தது"
  },
  "termsAndPrivacyNotice2": {
    "message": "பயர்பாஃசு திரைப்பிடிப்புகளைப் பயன்படுத்துவதன் மூலம் $TERMSANDPRIVACYNOTICETERMSLINK$ மற்றும் $TERMSANDPRIVACYNOTICEPRIVACYLINK$ சேவை நிபற்தனைகளை ஏற்கிறீர்கள்.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "நிபந்தனைகள்"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "தனியுரிம கொள்கை"
  },
  "libraryLabel": {
    "message": "திரைபிடிப்புகள்"
  }
}PK
!<©˜kYY&webextension/_locales/te/messages.json{
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "ఒక తెరపట్టు తీసుకోండి"
  },
  "myShotsLink": {
    "message": "నా తెరపట్లు"
  },
  "saveScreenshotSelectedArea": {
    "message": "భద్రపరచు"
  },
  "saveScreenshotVisibleArea": {
    "message": "కనిపించే దానిని బద్రపరచండి"
  },
  "saveScreenshotFullPage": {
    "message": "పూర్తి పేజీని భద్రపరచు"
  },
  "cancelScreenshot": {
    "message": "రద్దుచేయి"
  },
  "downloadScreenshot": {
    "message": "దింపుకోండి"
  },
  "downloadOnlyNotice": {
    "message": "మీరు ప్రస్తుతం దింపుకోలు-మాత్రమే రీతిలో ఉన్నారు."
  },
  "downloadOnlyDetailsPrivate": {
    "message": "అంతరంగిక విహారణ కిటికీలో."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "మూడవ-పక్ష కుకీలు అచేతనమయ్యాయి."
  },
  "downloadOnlyDetailsESR": {
    "message": "మీరు Firefox ESR ఉపయోగిస్తున్నారు."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "ఎక్కింపులు అచేతమై ఉన్నాయి."
  },
  "notificationLinkCopiedTitle": {
    "message": "లంకె కాపీ అయింది"
  },
  "copyScreenshot": {
    "message": "కాపీచెయ్యి"
  },
  "notificationImageCopiedTitle": {
    "message": "పట్టు కాపీఅయ్యింది"
  },
  "requestErrorTitle": {
    "message": "పని చెయుట లేదు."
  },
  "requestErrorDetails": {
    "message": "క్షమిచండి! మీ తెరను భద్రపరచలేకపోయాం. దయచేసి కాసేపాగి మళ్ళీ ప్రయత్నించండి."
  },
  "connectionErrorTitle": {
    "message": "మేము మీ స్క్రీన్షాట్లకు కనెక్ట్ చేయలేము."
  },
  "unshootablePageErrorTitle": {
    "message": "మేము ఈ పేజీని స్క్రీన్షాట్ చేయలేము."
  },
  "unshootablePageErrorDetails": {
    "message": "ఇది ప్రామాణిక వెబ్ పేజీ కాదు, కాబట్టి దాని యొక్క స్క్రీన్షాట్ని మీరు తీసుకోలేరు."
  },
  "selfScreenshotErrorTitle": {
    "message": "మీరు Firefox స్క్రీన్షాట్స్ పేజీ యొక్క షాట్ ను తీసుకోలేరు!"
  },
  "emptySelectionErrorTitle": {
    "message": "మీ ఎంపిక చాలా చిన్న్దగా ఉంది"
  },
  "genericErrorTitle": {
    "message": "అయ్యో! Firefox స్క్రీన్షాట్లు haywire వెళ్ళింది."
  },
  "tourBodyIntro": {
    "message": "Firefoxను వదలకుండానే తెరపట్లు తీసుకోండి, భద్రపరచుకోండి, పంచుకోండి."
  },
  "tourHeaderPageAction": {
    "message": "భద్రపరచుకోడానికి కొత్త మార్గం"
  },
  "tourHeaderClickAndDrag": {
    "message": ""
  },
  "tourHeaderDownloadUpload": {
    "message": "మీకు నచ్చినట్టుగా"
  },
  "tourSkip": {
    "message": "దాటవేయి"
  },
  "tourNext": {
    "message": "తర్వాతి ఫలకం"
  },
  "tourPrevious": {
    "message": "మునుపటి ఫలకం"
  },
  "tourDone": {
    "message": "పూర్తయింది"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "నియమాలు"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "గోప్యతా నోటీసు"
  },
  "libraryLabel": {
    "message": "తెరపట్లు"
  }
}PK
!<ÃِSòò&webextension/_locales/th/messages.json{
  "addonDescription": {
    "message": "จับภาพหน้าจอจากเว็บและบันทึกไว้ชั่วคราวหรือถาวร"
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "จับภาพหน้าจอ"
  },
  "myShotsLink": {
    "message": "ภาพของฉัน"
  },
  "screenshotInstructions": {
    "message": "ลากหรือคลิกที่หน้าเพื่อเลือกบริเวณ กด ESC เพื่อยกเลิก"
  },
  "saveScreenshotSelectedArea": {
    "message": "บันทึก"
  },
  "saveScreenshotVisibleArea": {
    "message": "บันทึกส่วนที่มองเห็น"
  },
  "saveScreenshotFullPage": {
    "message": "บันทึกเต็มหน้า"
  },
  "cancelScreenshot": {
    "message": "ยกเลิก"
  },
  "downloadScreenshot": {
    "message": "ดาวน์โหลด"
  },
  "downloadOnlyNotice": {
    "message": "คุณกำลังอยู่ในโหมดดาวน์โหลดเท่านั้น"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "ในหน้าต่างการท่องเว็บแบบส่วนตัว"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "คุกกี้บุคคลที่สามถูกปิดการใช้งาน"
  },
  "downloadOnlyDetailsESR": {
    "message": "คุณกำลังใช้ Firefox ESR"
  },
  "notificationLinkCopiedTitle": {
    "message": "คัดลอกลิงก์แล้ว"
  },
  "notificationLinkCopiedDetails": {
    "message": "คัดลอกลิงก์ไปยังภาพของคุณไปยังคลิปบอร์ดแล้ว กด $META_KEY$-V เพื่อวาง",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "คัดลอก"
  },
  "notificationImageCopiedTitle": {
    "message": "คัดลอกภาพแล้ว"
  },
  "imageCroppedWarning": {
    "message": "ภาพนี้ถูกตัดเป็น $PIXELS$ พิกเซล",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "ใช้งานไม่ได้"
  },
  "requestErrorDetails": {
    "message": "ขออภัย! เราไม่สามารถบันทึกภาพของคุณ โปรดลองอีกครั้งในภายหลัง"
  },
  "connectionErrorTitle": {
    "message": "เราไม่สามารถเชื่อมต่อกับภาพหน้าจอของคุณ"
  },
  "connectionErrorDetails": {
    "message": "โปรดตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณ หากคุณสามารถเชื่อมต่ออินเทอร์เน็ต บริการ Firefox Screenshots อาจมีปัญหาชั่วคราว"
  },
  "loginErrorDetails": {
    "message": "เราไม่สามารถบันทึกภาพของคุณเนื่องจากบริการ Firefox Screenshots มีปัญหา โปรดลองอีกครั้งในภายหลัง"
  },
  "unshootablePageErrorTitle": {
    "message": "เราไม่สามารถจับภาพหน้าจอหน้านี้"
  },
  "unshootablePageErrorDetails": {
    "message": "นี่ไม่ใช่หน้าเว็บมาตรฐาน คุณจึงไม่สามารถจับภาพหน้าจอได้"
  },
  "selfScreenshotErrorTitle": {
    "message": "คุณไม่สามารถจับภาพของหน้า Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "การเลือกของคุณเล็กเกินไป"
  },
  "privateWindowErrorTitle": {
    "message": "Screenshots ถูกปิดใช้งานในโหมดการท่องเว็บแบบส่วนตัว"
  },
  "privateWindowErrorDetails": {
    "message": "ขออภัยในความไม่สะดวก เรากำลังพัฒนาคุณลักษณะนี้สำหรับรุ่นในอนาคต"
  },
  "genericErrorTitle": {
    "message": "โอ๊ย! Firefox Screenshots รวน"
  },
  "genericErrorDetails": {
    "message": "เราไม่แน่ใจว่าเกิดอะไรขึ้น ต้องการลองอีกครั้งหรือจับภาพของหน้าอื่น?"
  },
  "tourBodyIntro": {
    "message": "จับ บันทึก และแบ่งปันภาพหน้าจอโดยไม่ต้องออกจาก Firefox"
  },
  "tourHeaderPageAction": {
    "message": "หนทางใหม่ในการบันทึก"
  },
  "tourHeaderClickAndDrag": {
    "message": "จับภาพแค่สิ่งที่คุณต้องการ"
  },
  "tourBodyClickAndDrag": {
    "message": "คลิกแล้วลากเพื่อจับภาพแค่บางส่วนของหน้า คุณยังสามารถวางเมาส์เพื่อเน้นการเลือกของคุณ"
  },
  "tourHeaderFullPage": {
    "message": "จับภาพหน้าต่างหรือทั้งหน้า"
  },
  "tourBodyFullPage": {
    "message": "คลิกที่ปุ่มด้านบนขวาเพื่อจับภาพพื้นที่ที่มองเห็นในหน้าต่างหรือเพื่อจับภาพทั้งหน้า"
  },
  "tourHeaderDownloadUpload": {
    "message": "ตามใจชอบ"
  },
  "tourBodyDownloadUpload": {
    "message": "บันทึกภาพที่ครอบตัดของคุณไปยังเว็บเพื่อการแบ่งปันที่ง่ายขึ้น หรือดาวน์โหลดไปยังคอมพิวเตอร์ของคุณ คุณยังสามารถคลิกที่ปุ่ม ภาพของฉัน เพื่อค้นหาภาพทั้งหมดที่คุณจับไว้"
  },
  "tourSkip": {
    "message": "ข้าม"
  },
  "tourNext": {
    "message": "ภาพนิ่งถัดไป"
  },
  "tourPrevious": {
    "message": "ภาพนิ่งก่อนหน้า"
  },
  "tourDone": {
    "message": "เสร็จสิ้น"
  },
  "termsAndPrivacyNotice2": {
    "message": "เพื่อใช้ Firefox Screenshots คุณยอมรับ $TERMSANDPRIVACYNOTICETERMSLINK$ และ $TERMSANDPRIVACYNOTICEPRIVACYLINK$ ของเรา",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "ข้อกำหนด"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "ประกาศความเป็นส่วนตัว"
  },
  "libraryLabel": {
    "message": "ภาพหน้าจอ"
  }
}PK
!<º±ñESS&webextension/_locales/tl/messages.json{
  "addonDescription": {
    "message": "Dalhin ang clip at mga screenshot mula sa Web at i-save ang mga ito pansamantala o permanente."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Kumuha ng Screenshot"
  },
  "myShotsLink": {
    "message": "Aking Shots"
  },
  "screenshotInstructions": {
    "message": "I-drag o i-click sa pahina upang pumili ng rehiyon. Pindutin ang ESC upang kanselahin."
  },
  "saveScreenshotSelectedArea": {
    "message": "I-save"
  },
  "saveScreenshotVisibleArea": {
    "message": "I-save na nakikita"
  },
  "saveScreenshotFullPage": {
    "message": "I-save ang buong pahina"
  },
  "cancelScreenshot": {
    "message": "Kanselahin"
  },
  "downloadScreenshot": {
    "message": "Download"
  },
  "notificationLinkCopiedTitle": {
    "message": "Kinopya ang Link"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ang link na ito sa iyong shot ay kinopya sa clipboard. Pindutin $META_KEY$-V i-paste.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Mula sa pagkakasunod-sunod."
  },
  "requestErrorDetails": {
    "message": "Paumanhin! Hindi namin mai-save ang iyong mga shot. Subukang muli mamaya."
  },
  "connectionErrorTitle": {
    "message": "Hindi namin maaaring i-kunekta sa iyong mga screenshot."
  },
  "connectionErrorDetails": {
    "message": "Mangyaring suriin ang iyong koneksyon sa Internet. Kung ikaw ay kumonekta sa Internet, maaaring may isang pansamantalang problema sa serbisyo Firefox screenshot."
  },
  "loginErrorDetails": {
    "message": "Hindi namin mai-save ang iyong mga shot dahil may problema sa serbisyo Firefox screenshot. Subukang muli mamaya."
  },
  "unshootablePageErrorTitle": {
    "message": "Hindi namin maaaring screenshot pahinang ito."
  },
  "unshootablePageErrorDetails": {
    "message": "Ito ay hindi isang standard na Web page, kaya hindi ka maaaring kumuha ng isang screenshot ng mga ito."
  },
  "selfScreenshotErrorTitle": {
    "message": "Hindi ka maaaring kumuha ng isang shot ng isang pahina ng Firefox screenshot!"
  },
  "genericErrorTitle": {
    "message": "Whoa! Nagiging magulo ang Firefox screenshot."
  },
  "genericErrorDetails": {
    "message": "Hindi kami sigurado kung ano ang nangyari. Pag-aalaga upang subukang muli o kumuha ng isang shot ng isang iba't ibang mga pahina?"
  },
  "tourBodyIntro": {
    "message": "Dumaan, i-save, at ibahagi ang mga screenshot nang hindi umaalis sa Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Ang bagong paraan para mag-save"
  },
  "tourHeaderClickAndDrag": {
    "message": "Kunan Kung Ano Ang Gusto Mo"
  },
  "tourBodyClickAndDrag": {
    "message": "I-click at i-drag upang makuha lamang ang isang bahagi ng isang pahina. Maaari mo ring i-hover upang i-highlight ang iyong pagpili."
  },
  "tourHeaderFullPage": {
    "message": "I-capture ang Windows o Buong Pahina"
  },
  "tourBodyFullPage": {
    "message": "Piliin ang pindutan sa kanang itaas upang makuha ang nakikitang lugar sa window o upang makuha ang isang buong pahina."
  },
  "tourHeaderDownloadUpload": {
    "message": "Bilang Nagustuhan Mo ito"
  },
  "tourBodyDownloadUpload": {
    "message": "I-save ang iyong crop shot sa Web para sa madaling pagbabahagi, o i-download ito sa iyong computer. Maaari mo ring i-click sa pindutan ng My Shots upang mahanap ang lahat ng mga pag-shot na kinunan mo."
  },
  "tourSkip": {
    "message": "Laktawan"
  },
  "tourNext": {
    "message": "Susunod na Slide"
  },
  "tourPrevious": {
    "message": "Nakaraan na Slide"
  },
  "tourDone": {
    "message": "Tapos"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Mga tuntunin"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Abiso sa Privacy"
  },
  "libraryLabel": {
    "message": "Mga screenshot"
  }
}PK
!<)¡g9ØØ&webextension/_locales/tr/messages.json{
  "addonDescription": {
    "message": "Web sayfalarının ekran görüntülerini alın, ister geçici ister kalıcı olarak kaydedin."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Ekran görüntüsü al"
  },
  "myShotsLink": {
    "message": "Ekran görüntülerim"
  },
  "screenshotInstructions": {
    "message": "Bir bölgeyi seçmek için işaretçiyi sürükleyin veya tıklayın. İptal etmek için ESC tuşuna basın."
  },
  "saveScreenshotSelectedArea": {
    "message": "Kaydet"
  },
  "saveScreenshotVisibleArea": {
    "message": "Görünür alanı kaydet"
  },
  "saveScreenshotFullPage": {
    "message": "Tüm sayfayı kaydet"
  },
  "cancelScreenshot": {
    "message": "Vazgeç"
  },
  "downloadScreenshot": {
    "message": "İndir"
  },
  "downloadOnlyNotice": {
    "message": "Şu anda Yalnızca İndirme modundasınız."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots şu durumlarda kendiliğinden Yalnızca İndirme moduna geçer:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Gizli Gezinti penceresindeyken"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Üçüncü taraf çerezleri devre dışıyken"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Geçmişi asla hatırlama” devredeyken"
  },
  "downloadOnlyDetailsESR": {
    "message": "Firefox ESR kullanıyorsunuz."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Gönderme işlemi devre dışı bırakılmıştır."
  },
  "notificationLinkCopiedTitle": {
    "message": "Bağlantı kopyalandı"
  },
  "notificationLinkCopiedDetails": {
    "message": "Ekran görüntünüzün bağlantısı panoya kopyalandı. Yapıştırmak için $META_KEY$-V tuşlarına basabilirsiniz.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Kopyala"
  },
  "notificationImageCopiedTitle": {
    "message": "Görüntü kopyalandı"
  },
  "notificationImageCopiedDetails": {
    "message": "Ekran görüntünüz panoya kopyalandı. Yapıştırmak için $META_KEY$-V tuşlarına basabilirsiniz.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Resim $PIXELS$ piksele kırpıldı.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Arıza var."
  },
  "requestErrorDetails": {
    "message": "Ekran görüntünüzü kaydedemedik. Lütfen daha sonra yeniden deneyin."
  },
  "connectionErrorTitle": {
    "message": "Ekran görüntülerinize bağlanamadık."
  },
  "connectionErrorDetails": {
    "message": "Lütfen internet bağlantınızı kontrol edin. İnternete bağlanabiliyorsanız Firefox Screenhosts hizmeti ile ilgili geçici bir sorun olabilir."
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshosts hizmetinde bir sorun yaşandığı için ekran görüntünüzü kaydedemedik. Lütfen daha sonra yeniden deneyin."
  },
  "unshootablePageErrorTitle": {
    "message": "Bu sayfanın ekran görüntüsü alınamıyor."
  },
  "unshootablePageErrorDetails": {
    "message": "Bu sayfa standart bir web sayfası olmadığı için ekran görüntüsünü alamazsınız."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshots sayfalarının ekran görüntüsünü alamazsınz."
  },
  "emptySelectionErrorTitle": {
    "message": "Seçiminiz çok küçük"
  },
  "privateWindowErrorTitle": {
    "message": "Gizli Gezinti modunda Screenshosts özelliği kullanılamaz"
  },
  "privateWindowErrorDetails": {
    "message": "Aksaklıktan dolayı özür dileriz. Gelecek sürümlerde bu özelliği devreye almak için çalışıyoruz."
  },
  "genericErrorTitle": {
    "message": "Firefox Screenshosts kafayı yedi!"
  },
  "genericErrorDetails": {
    "message": "Ne olduğunu biz de anlamadık. Bir daha denemeye veya başka bir sayfanın ekran görüntüsünü almaya ne dersiniz?"
  },
  "tourBodyIntro": {
    "message": "Firefox'tan çıkmadan ekran görüntüleri alın, kaydedin ve paylaşın."
  },
  "tourHeaderPageAction": {
    "message": "Kaydetmenin yeni yolu"
  },
  "tourBodyPageAction": {
    "message": "Ekran görüntüsü almak istediğiniz zaman adres çubuğundaki sayfa eylemleri menüsünü açın."
  },
  "tourHeaderClickAndDrag": {
    "message": "İstediğini yakala"
  },
  "tourBodyClickAndDrag": {
    "message": "Sayfanın belli bir kısmını yakalamak için tıklayıp sürükleyin. Seçiminizi işaretlemek için fareyle üzerine de gidebilirsiniz."
  },
  "tourHeaderFullPage": {
    "message": "Pencereleri veya sayfaların tamamını yakala"
  },
  "tourBodyFullPage": {
    "message": "Yalnızca pencerede gördüğünüz alanı veya sayfanın tamamını yakalamak için sağ üstteki düğmelerden uygun olanı seçin."
  },
  "tourHeaderDownloadUpload": {
    "message": "İstediğin gibi yakala"
  },
  "tourBodyDownloadUpload": {
    "message": "Ekran görüntülerinizi daha kolay paylaşmak web’e kaydedebilir veya bilgisayarınıza indirebilirsiniz. Kaydettiğiniz tüm görüntüleri bulmak için “Ekran görüntülerim” düğmesine tıklayabilirsiniz."
  },
  "tourSkip": {
    "message": "GEÇ"
  },
  "tourNext": {
    "message": "Sonraki slayt"
  },
  "tourPrevious": {
    "message": "Önceki slayt"
  },
  "tourDone": {
    "message": "Tamam"
  },
  "termsAndPrivacyNotice2": {
    "message": "Firefox Screenshots'ı kullandığınızda $TERMSANDPRIVACYNOTICETERMSLINK$ ve $TERMSANDPRIVACYNOTICEPRIVACYLINK$ kabul etmiş sayılırsınız.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Koşullarımızı"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Gizlilik Bildirimimizi"
  },
  "libraryLabel": {
    "message": "Ekran görüntüleri"
  }
}PK
!<ä<pp&webextension/_locales/uk/messages.json{
  "addonDescription": {
    "message": "Робіть вирізки та знімки екрану в Інтернеті та зберігайте їх для подальшої роботи."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Зробити знімок екрану"
  },
  "myShotsLink": {
    "message": "Мої знімки"
  },
  "screenshotInstructions": {
    "message": "Потягніть або клацніть на сторінці для вибору області. Натисніть ESC для скасування."
  },
  "saveScreenshotSelectedArea": {
    "message": "Зберегти"
  },
  "saveScreenshotVisibleArea": {
    "message": "Зберегти видиму область"
  },
  "saveScreenshotFullPage": {
    "message": "Зберегти всю сторінку"
  },
  "cancelScreenshot": {
    "message": "Скасувати"
  },
  "downloadScreenshot": {
    "message": "Завантажити"
  },
  "downloadOnlyNotice": {
    "message": "Ви зараз в режимі лише завантаження."
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots автоматично переходить в режим лише завантаження в таких випадках:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "У вікні приватного перегляду."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Сторонні куки вимкнено."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "Активовано налаштування “Ніколи не пам'ятати історії”."
  },
  "downloadOnlyDetailsESR": {
    "message": "Ви використовуєте Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Вивантаження було вимкнено."
  },
  "notificationLinkCopiedTitle": {
    "message": "Посилання скопійовано"
  },
  "notificationLinkCopiedDetails": {
    "message": "Посилання на ваш знімок було скопійоване до буфера обміну. Натисніть $META_KEY$-V для вставлення.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Копіювати"
  },
  "notificationImageCopiedTitle": {
    "message": "Знімок скопійовано"
  },
  "notificationImageCopiedDetails": {
    "message": "Ваш знімок був скопійований в буфер обміну. Натисніть $META_KEY$-V, щоб вставити.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Зображення було обрізано до $PIXELS$ пікселів.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Сталася помилка."
  },
  "requestErrorDetails": {
    "message": "Вибачте! Нам не вдалося зберегти ваш знімок. Спробуйте знову пізніше."
  },
  "connectionErrorTitle": {
    "message": "Ми не можемо отримати доступ до ваших знімків."
  },
  "connectionErrorDetails": {
    "message": "Будь ласка, перевірте ваше підключення до Інтернету. Якщо у вас все в порядку з Інтернетом, можливо, виникли тимчасові проблеми зі службою Firefox Screenshots."
  },
  "loginErrorDetails": {
    "message": "Нам не вдалося зберегти ваш знімок, тому що виникли проблеми зі службою Firefox Screenshots. Спробуйте знову пізніше."
  },
  "unshootablePageErrorTitle": {
    "message": "Ми не можемо зробити знімок цієї сторінки."
  },
  "unshootablePageErrorDetails": {
    "message": "Це не стандартна веб-сторінка, тому ви не можете зробити її знімок."
  },
  "selfScreenshotErrorTitle": {
    "message": "Ви не можете зробити знімок сторінки Firefox Screenshots!"
  },
  "emptySelectionErrorTitle": {
    "message": "Обрана область є замалою"
  },
  "privateWindowErrorTitle": {
    "message": "Знімки екрану вимкнено в приватному перегляді"
  },
  "privateWindowErrorDetails": {
    "message": "Вибачте за незручності. Ми працюємо над цією функцією для майбутніх випусків."
  },
  "genericErrorTitle": {
    "message": "Оу! З Firefox Screenshots щось негаразд."
  },
  "genericErrorDetails": {
    "message": "Ми не впевнені, в чому проблема. Спробувати ще раз, або ж зробити знімок іншої сторінки?"
  },
  "tourBodyIntro": {
    "message": "Робіть знімки екрану, зберігайте та діліться ними прямо в Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Новий спосіб збереження"
  },
  "tourBodyPageAction": {
    "message": "Розгорніть меню дій для сторінки в панелі адреси, коли ви хочете зробити знімок екрану."
  },
  "tourHeaderClickAndDrag": {
    "message": "Робіть знімки чого завгодно"
  },
  "tourBodyClickAndDrag": {
    "message": "Клацніть і потягніть мишею для захоплення частини сторінки. Ви також можете навести курсор миші для підсвічення вибраної області."
  },
  "tourHeaderFullPage": {
    "message": "Захоплюйте вікна або цілі сторінки"
  },
  "tourBodyFullPage": {
    "message": "За допомогою кнопок у верхній правій частині обирайте захоплення видимої області вікна, або сторінки повністю."
  },
  "tourHeaderDownloadUpload": {
    "message": "Як вам подобається"
  },
  "tourBodyDownloadUpload": {
    "message": "Зберігайте свої знімки в Інтернеті, щоб легко ними ділитися, або завантажуйте їх на свій комп'ютер. Ви також можете переглянути всі збережені знімки, натиснувши на кнопку Мої знімки."
  },
  "tourSkip": {
    "message": "Пропустити"
  },
  "tourNext": {
    "message": "Наступний слайд"
  },
  "tourPrevious": {
    "message": "Попередній слайд"
  },
  "tourDone": {
    "message": "Готово"
  },
  "termsAndPrivacyNotice2": {
    "message": "Використовуючи Firefox Screenshots, ви погоджуєтеся з нашими $TERMSANDPRIVACYNOTICETERMSLINK$ та $TERMSANDPRIVACYNOTICEPRIVACYLINK$.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Умовами використання"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Повідомленням про приватність"
  },
  "libraryLabel": {
    "message": "Знімки екрану"
  }
}PK
!<î¿##&webextension/_locales/ur/messages.json{
  "addonDescription": {
    "message": "ویب سے کللبس یاا اسکرین شاٹیں لیں اور ان کو عارظی یا مستقل طور پر محفوظ کریں۔"
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "ایک سکرین شاٹ لیں"
  },
  "myShotsLink": {
    "message": "میری شاٹس"
  },
  "screenshotInstructions": {
    "message": "علاقہ منتخب کرنے کے لیئے گھسیٹیں یا صفحہ پر کلک کریں۔ منسوخ کرنے کے لیئے ESC دبائیں۔"
  },
  "saveScreenshotSelectedArea": {
    "message": "محفوظ کریں"
  },
  "saveScreenshotVisibleArea": {
    "message": "مرئی محفوظ کریں"
  },
  "saveScreenshotFullPage": {
    "message": "پورا صفحہ محفوظ کریں"
  },
  "cancelScreenshot": {
    "message": "منسوخ کریں"
  },
  "downloadScreenshot": {
    "message": "ڈاؤن لوڈ"
  },
  "downloadOnlyDetailsESR": {
    "message": "آپ Firefox ESR استعمال کر رہے ہیں۔"
  },
  "notificationLinkCopiedTitle": {
    "message": "تبط نقل کر دیا گیا"
  },
  "notificationLinkCopiedDetails": {
    "message": "آُپ کی شاٹس کا ربط و تختہ تراشہ پر نقل کر دیا گیا ہے۔ چسپاں کرنے کے لیئے $META_KEY$-V دبائِں۔",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "نقل کریں"
  },
  "requestErrorTitle": {
    "message": "خراب ہے۔"
  },
  "requestErrorDetails": {
    "message": "معاف کیجیئے گا! ہم آپ کی شاٹ محفوظ نہیں کر سکے۔ براہ مہربانی کچھ دیر بعد کوشش کریں۔"
  },
  "connectionErrorTitle": {
    "message": "ہم آپ کی اسکرین شاٹس سے نہیں جڑ سکتے۔"
  },
  "connectionErrorDetails": {
    "message": "براہ مہربانی اپنے انٹرنیٹ کنکشن کی پڑتال کریں۔ اگر آپ انٹرنیٹ سے جڑنے کے قابل ہیں، تو شاید Firefox اسکرین شاٹ خدمات کے ساتھ عارظی مسلہ ہو۔"
  },
  "loginErrorDetails": {
    "message": "ہم آُپ کی شاٹ محفوظ نہیں کر سکے کیونکہ Firefox اسکرین شاٹ خدمت کے ساتھ مسلہ ہے۔ براہ مہربانی کچھ دیربعد کوشش کیجیئے۔"
  },
  "unshootablePageErrorTitle": {
    "message": "ہم اس صفحہ کی اسکرین شاٹ نہیں کر سکتے۔"
  },
  "unshootablePageErrorDetails": {
    "message": "یہ ایک میعاری صفحہ نہہیں، تو آپ اسکی اسکرین شاٹ نہیں لے سکتے۔"
  },
  "selfScreenshotErrorTitle": {
    "message": "آپ Firefox اسکرین شاٹس صفحے! کی ایک شاٹ نہیں لے سکت"
  },
  "emptySelectionErrorTitle": {
    "message": "آپ کا انتخاب بہت چھوٹا ہے"
  },
  "genericErrorTitle": {
    "message": "لاجواب! Firefox Screenshots بہت مشہور ہو گیا۔"
  },
  "genericErrorDetails": {
    "message": "ہمیں یقین نہیں کہ کیا ہوا تھا۔ خیال رکھ کر پھر کوشش کریں یا بھر مختلف صفحہ کی تصویرلیں؟"
  },
  "tourBodyIntro": {
    "message": "۔Firefox کو چھوڑے بغیر اسکرینشاٹس لیں، محفوظ کریں اور شیئر کریں۔"
  },
  "tourHeaderPageAction": {
    "message": "محفوظ کرنے کا نیا طریقہ"
  },
  "tourHeaderClickAndDrag": {
    "message": "جو آپ چاہتے ہیں وہ گرفت کریں"
  },
  "tourBodyClickAndDrag": {
    "message": "صفحہ کا ایک حصہ گرفت کرنے کے لیئے گھسیتیں اور کلک کریں.آُپ اپنے انتخاب کو نمایاں کرنے کے لیئے منڈلا سکتے ہیں۔"
  },
  "tourHeaderFullPage": {
    "message": "دریچہ ہا مکمل صفحہ گرفت کریں"
  },
  "tourBodyFullPage": {
    "message": "دریچہ میں نظر آنے والے علاقے یا مکمل صفحہ کو گرفت کرنے کے لیئے بالائی دائیں جانب بٹن کا انتخاب کریں۔"
  },
  "tourHeaderDownloadUpload": {
    "message": "جس طرح آپ کو پسند ہے"
  },
  "tourBodyDownloadUpload": {
    "message": "اپنے کمپیوٹڑ میں ڈائونلوڈ کرنے یا ویب پر آسانی سے شیئر کرنے کے لیئےاپنی کتری ہوئی شاٹس محفوظ کریں۔ آپ میری شاٹس کے بٹن پ کلک کر کے بھی اتمام پنی لی گئی شاٹس ڈھّونڈ سکتےہیں۔"
  },
  "tourSkip": {
    "message": "اچٹیں"
  },
  "tourNext": {
    "message": "اگلى سلائيڈ"
  },
  "tourPrevious": {
    "message": "پچھلی سلائڈ"
  },
  "tourDone": {
    "message": "ہوگیا"
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "شرائط"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "اطلاع نامہ نجی نوعیت"
  },
  "libraryLabel": {
    "message": "اسکرین شاٹس"
  }
}PK
!<)±S{

&webextension/_locales/uz/messages.json{
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Rasmini olish"
  },
  "myShotsLink": {
    "message": "Rasmlarim"
  },
  "screenshotInstructions": {
    "message": "Hududni belgilash uchun sahifa ustiga tashlang yoki bosing. Chiqish uchun “ESC” tugmasidan foydalaning."
  },
  "saveScreenshotSelectedArea": {
    "message": "Saqlash"
  },
  "saveScreenshotVisibleArea": {
    "message": "Ko‘rinadiganini saqlash"
  },
  "saveScreenshotFullPage": {
    "message": "To‘liq sahifani saqlash"
  },
  "cancelScreenshot": {
    "message": "Bekor qilish"
  },
  "downloadScreenshot": {
    "message": "Yuklab olish"
  },
  "notificationLinkCopiedTitle": {
    "message": "Havoladan nusxa olindi"
  },
  "notificationLinkCopiedDetails": {
    "message": "Rasm havolasidan vaqtinchalik xotiraga nusxa olindi. Qo‘yish uchun $META_KEY$-V tugmalarini bosing.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Bu rasm $PIXELS$px hajmida kesildi.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Xizmat hozircha ishlamayapti."
  },
  "requestErrorDetails": {
    "message": "Uzr! Rasmni saqlay olmaymiz. Keyinroq urinib ko‘ring."
  },
  "connectionErrorTitle": {
    "message": "Ekran rasmiga ulana olmadik."
  },
  "connectionErrorDetails": {
    "message": "Internetga ulanishni tekshiring. Ulana olsangiz, demak Firefox Screenshot xizmatida vaqtinchalik muammo bo‘lishi mumkin."
  },
  "loginErrorDetails": {
    "message": "Olingan rasmni saqlay olmaymiz, chunki Firefox Screenshot xizmatida muammo mavjud. Keyinroq urinib ko‘ring."
  },
  "unshootablePageErrorTitle": {
    "message": "Bu sahifani rasmga tushira olmaymiz."
  },
  "unshootablePageErrorDetails": {
    "message": "Bu sahifa standart sahifa emas, shuning uchun uni rasmga tushira olmaymiz."
  },
  "selfScreenshotErrorTitle": {
    "message": "Firefox Screenshot sahifasini rasmga tushirish mumkin emas!"
  },
  "emptySelectionErrorTitle": {
    "message": "Tanlangan hudud juda kichik"
  },
  "privateWindowErrorTitle": {
    "message": "Maxfiy ko‘rish rejimida rasmga olib bo‘lmaydi"
  },
  "privateWindowErrorDetails": {
    "message": "Noqulaylik uchun uzr. Biz keyingi versiyalar uchun bu funksiya ustida ishlayapmiz."
  },
  "tourBodyIntro": {
    "message": "Firefox brauzeridan chiqmasdan sahifalarni rasmga olish, saqlash va bo‘lishish mumkin."
  },
  "tourHeaderPageAction": {
    "message": "Saqlashning yangi usuli"
  },
  "libraryLabel": {
    "message": "Rasmlar"
  }
}PK
!<‘„wïää&webextension/_locales/vi/messages.json{
  "addonDescription": {
    "message": "Chụp ảnh và chụp màn hình từ Web và lưu chúng tạm thời hoặc vĩnh viễn."
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "Chụp ảnh màn hình"
  },
  "myShotsLink": {
    "message": "Các ảnh chụp của tôi"
  },
  "screenshotInstructions": {
    "message": "Kéo hoặc nhấp vào trang để chọn một khu vực. Nhấn ESC để hủy bỏ."
  },
  "saveScreenshotSelectedArea": {
    "message": "Lưu lại"
  },
  "saveScreenshotVisibleArea": {
    "message": "Lưu phần nhìn thấy"
  },
  "saveScreenshotFullPage": {
    "message": "Lưu toàn trang"
  },
  "cancelScreenshot": {
    "message": "Hủy bỏ"
  },
  "downloadScreenshot": {
    "message": "Tải xuống"
  },
  "downloadOnlyNotice": {
    "message": "Bạn hiện đang ở chế độ chỉ tải về."
  },
  "downloadOnlyDetails": {
    "message": "Ảnh chụp màn hình của Firefox sẽ tự động chuyển sang chế độ chỉ tải về trong các tình huống:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "Trong một cửa sổ duyệt web riêng tư."
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "Cookies của bên thứ ba đã bị vô hiệu hóa."
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "“Không bao giờ ghi nhớ lược sử” đã được kích hoạt."
  },
  "downloadOnlyDetailsESR": {
    "message": "Bạn đang sử dụng Firefox ESR."
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "Tải lên đã bị vô hiệu hóa."
  },
  "notificationLinkCopiedTitle": {
    "message": "Đã sao chép liên kết"
  },
  "notificationLinkCopiedDetails": {
    "message": "Liên kết ảnh chụp màn hình của bạn đã được sao chép vào clipboard. Nhấn $META_KEY$-V để dán.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "Sao chép"
  },
  "notificationImageCopiedTitle": {
    "message": "Ảnh chụp màn hình đã được sao chép"
  },
  "notificationImageCopiedDetails": {
    "message": "Ảnh chụp màn hình của bạn đã được sao chép vào clipboard. Nhấn $META_KEY$-V để dán.",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "Ảnh này đã được cắt đến $PIXELS$px.",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "Không sử dụng được."
  },
  "requestErrorDetails": {
    "message": "Xin lỗi! Chúng tôi không thể sao lưu ảnh chụp của bạn. Vui lòng thử lại sau."
  },
  "connectionErrorTitle": {
    "message": "Chúng tôi không thể kết nối với ảnh chụp màn hình của bạn."
  },
  "connectionErrorDetails": {
    "message": "Vui lòng kiểm tra kết nối Internet của bạn. Nếu bạn có thể kết nối với Internet, đó có thể là sự cố tạm thời với dịch vụ Ảnh chụp màn hình của Firefox."
  },
  "loginErrorDetails": {
    "message": "Chúng tôi không thể lưu hình của bạn vì có sự cố với dịch vụ Ảnh chụp màn hình của Firefox. Vui lòng thử lại sau."
  },
  "unshootablePageErrorTitle": {
    "message": "Chúng tôi không thể chụp màn hình trang này."
  },
  "unshootablePageErrorDetails": {
    "message": "Đây không phải là trang Web bình thường, bạn không thể chụp ảnh màn hình nó."
  },
  "selfScreenshotErrorTitle": {
    "message": "Bạn không thể chụp một trang của Ảnh chụp màn hình Firefox !"
  },
  "emptySelectionErrorTitle": {
    "message": "Vùng chọn của bạn quá nhỏ"
  },
  "privateWindowErrorTitle": {
    "message": "Ảnh chụp màn hình đã bị vô hiệu hóa ở chế độ duyệt Web riêng tư"
  },
  "privateWindowErrorDetails": {
    "message": "Xin lỗi vì sự bất tiện này. Chúng tôi đang làm việc trên các tính năng này cho bản phát hành trong tương lai."
  },
  "genericErrorTitle": {
    "message": "Whoa! Ảnh chụp màn hình của Firefox đã bị hoãn."
  },
  "genericErrorDetails": {
    "message": "Chúng tôi không chắc những gì vừa xảy ra. Thử lại hoặc chụp một trang khác?"
  },
  "tourBodyIntro": {
    "message": "Tạo, lưu và chia sẻ ảnh chụp màn hình mà không rời khỏi Firefox."
  },
  "tourHeaderPageAction": {
    "message": "Một cách mới để lưu"
  },
  "tourBodyPageAction": {
    "message": "Mở rộng trình đơn tác vụ trên trang trong thanh địa chỉ bất kỳ lúc nào bạn muốn chụp ảnh màn hình."
  },
  "tourHeaderClickAndDrag": {
    "message": "Chỉ chụp những gì bạn muốn"
  },
  "tourBodyClickAndDrag": {
    "message": "Nhấp và kéo để chụp một phần của một trang. Bạn cũng có thể di chuột để làm nổi bật lựa chọn của bạn."
  },
  "tourHeaderFullPage": {
    "message": "Chụp Windows hoặc Toàn bộ trang"
  },
  "tourBodyFullPage": {
    "message": "Chọn các nút ở phía trên bên phải để chụp khu vực nhìn thấy được trong cửa sổ hoặc để chụp toàn bộ trang."
  },
  "tourHeaderDownloadUpload": {
    "message": "Như bạn thích"
  },
  "tourBodyDownloadUpload": {
    "message": "Lưu ảnh đã cắt của bạn lên web để chia sẻ dễ dàng hơn hoặc tải chúng xuống máy tính của bạn. Bạn cũng có thể nhấp vào nút Ảnh chụp của tôi để tìm tất cả ảnh bạn đã chụp."
  },
  "tourSkip": {
    "message": "SKIP"
  },
  "tourNext": {
    "message": "Slide tiếp theo"
  },
  "tourPrevious": {
    "message": "Slide trước đó"
  },
  "tourDone": {
    "message": "Xong"
  },
  "termsAndPrivacyNotice2": {
    "message": "Bằng cách sử dụng Ảnh chụp màn hình Firefox, bạn đồng ý với $TERMSANDPRIVACYNOTICETERMSLINK$ và $TERMSANDPRIVACYNOTICEPRIVACYLINK$ của chúng tôi.",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "Điều khoản"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "Chính sách riêng tư"
  },
  "libraryLabel": {
    "message": "Các ảnh chụp màn hình"
  }
}PK
!<Y»ê{úú)webextension/_locales/zh_CN/messages.json{
  "addonDescription": {
    "message": "截取网页截图,可临时或永久存储。"
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "截图"
  },
  "myShotsLink": {
    "message": "我的截图"
  },
  "screenshotInstructions": {
    "message": "在此页上拖拽或单击选择截图区域。按 ESC 键取消截图。"
  },
  "saveScreenshotSelectedArea": {
    "message": "保存"
  },
  "saveScreenshotVisibleArea": {
    "message": "截取可见范围"
  },
  "saveScreenshotFullPage": {
    "message": "截取整个页面"
  },
  "cancelScreenshot": {
    "message": "取消"
  },
  "downloadScreenshot": {
    "message": "下载"
  },
  "downloadOnlyNotice": {
    "message": "您目前处在仅下载模式。"
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots 在如下情况将自动变更为仅下载模式:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "处于隐私浏览窗口。"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "第三方 Cookie 已禁用。"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "已启用“不记录历史记录”。"
  },
  "downloadOnlyDetailsESR": {
    "message": "您目前使用 Firefox ESR 版本。"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "上传已被禁用。"
  },
  "notificationLinkCopiedTitle": {
    "message": "链接已复制"
  },
  "notificationLinkCopiedDetails": {
    "message": "您的截图的链接已复制到剪贴板。按 $META_KEY$-V 可粘贴。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "复制"
  },
  "notificationImageCopiedTitle": {
    "message": "截图已复制"
  },
  "notificationImageCopiedDetails": {
    "message": "您的截图已复制到剪贴板。按 $META_KEY$+-V 粘贴。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "此图片已裁剪为 $PIXELS$px。",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "出故障了。"
  },
  "requestErrorDetails": {
    "message": "很抱歉,我们无法为您保存截图。请稍后再试。"
  },
  "connectionErrorTitle": {
    "message": "我们无法连接到您的截图。"
  },
  "connectionErrorDetails": {
    "message": "请检查您的互联网连接。如果您正常连接到互联网,可能是 Firefox Screenshots 的服务器临时出了问题。"
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots 服务遇到问题,我们现在无法保存您的截图。请稍后再试。"
  },
  "unshootablePageErrorTitle": {
    "message": "我们无法截图此页面。"
  },
  "unshootablePageErrorDetails": {
    "message": "这不是一个标准的网页,所以无法截图。"
  },
  "selfScreenshotErrorTitle": {
    "message": "您不能截取 Firefox Screenshots 的页面!"
  },
  "emptySelectionErrorTitle": {
    "message": "您选择的范围太小"
  },
  "privateWindowErrorTitle": {
    "message": "隐私浏览模式下屏幕截图已被禁用"
  },
  "privateWindowErrorDetails": {
    "message": "很抱歉因此带来的不便。我们将在后续版本中提供此功能。"
  },
  "genericErrorTitle": {
    "message": "哎呀,Firefox Screenshots 遇到问题。"
  },
  "genericErrorDetails": {
    "message": "我们不确定发生了什么。您可以再试一次或者试试另一个页面。"
  },
  "tourBodyIntro": {
    "message": "截取、保存和分享屏幕截图,无需 Firefox 以外的工具。"
  },
  "tourHeaderPageAction": {
    "message": "新的保存方法"
  },
  "tourBodyPageAction": {
    "message": "随时可以展开地址栏中的页面操作菜单来截图。"
  },
  "tourHeaderClickAndDrag": {
    "message": "截取你所需"
  },
  "tourBodyClickAndDrag": {
    "message": "单击并拖动以截取页面某个区域。您也可以把光标移到你要的地方,高亮后单击即可截图。"
  },
  "tourHeaderFullPage": {
    "message": "截取窗口或整个页面"
  },
  "tourBodyFullPage": {
    "message": "选择右上角的按钮可以截取窗口中的可见区域或者整个页面。"
  },
  "tourHeaderDownloadUpload": {
    "message": "做您所想"
  },
  "tourBodyDownloadUpload": {
    "message": "将您裁剪后的截图保存到网上以便共享,或者下载到您的计算机。您也可以点击“我的截图”按钮找到您截取的所有截图。"
  },
  "tourSkip": {
    "message": "跳过"
  },
  "tourNext": {
    "message": "下一页"
  },
  "tourPrevious": {
    "message": "上一页"
  },
  "tourDone": {
    "message": "完成"
  },
  "termsAndPrivacyNotice2": {
    "message": "使用 Firefox Screenshots 即代表您同意我们的$TERMSANDPRIVACYNOTICETERMSLINK$和$TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "条款"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "隐私声明"
  },
  "libraryLabel": {
    "message": "屏幕截图"
  }
}PK
!<ÛáåVV)webextension/_locales/zh_TW/messages.json{
  "addonDescription": {
    "message": "拍攝網頁的擷圖,可暫時儲存或永久儲存。"
  },
  "addonAuthorsList": {
    "message": "Mozilla <screenshots-feedback@mozilla.com>"
  },
  "contextMenuLabel": {
    "message": "拍攝畫面擷圖"
  },
  "myShotsLink": {
    "message": "我的擷圖"
  },
  "screenshotInstructions": {
    "message": "拖曳或點擊頁面來選擇區域,按下 ESC 取消。"
  },
  "saveScreenshotSelectedArea": {
    "message": "儲存"
  },
  "saveScreenshotVisibleArea": {
    "message": "儲存可見範圍"
  },
  "saveScreenshotFullPage": {
    "message": "儲存完整頁面"
  },
  "cancelScreenshot": {
    "message": "取消"
  },
  "downloadScreenshot": {
    "message": "下載"
  },
  "downloadOnlyNotice": {
    "message": "您目前處於「僅可下載模式」。"
  },
  "downloadOnlyDetails": {
    "message": "Firefox Screenshots 會在下列狀況時,進入「僅可下載模式」:"
  },
  "downloadOnlyDetailsPrivate": {
    "message": "使用隱私瀏覽模式開啟時。"
  },
  "downloadOnlyDetailsThirdParty": {
    "message": "停用第三方 Cookie 時。"
  },
  "downloadOnlyDetailsNeverRemember": {
    "message": "開啟「永不保留瀏覽紀錄」時。"
  },
  "downloadOnlyDetailsESR": {
    "message": "您使用的是 Firefox ESR 版本。"
  },
  "downloadOnlyDetailsNoUploadPref": {
    "message": "已停用上傳。"
  },
  "notificationLinkCopiedTitle": {
    "message": "已複製鏈結"
  },
  "notificationLinkCopiedDetails": {
    "message": "已將您拍攝的圖片鏈結複製到剪貼簿,按下 $META_KEY$+V 即可貼上。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "copyScreenshot": {
    "message": "複製"
  },
  "notificationImageCopiedTitle": {
    "message": "已複製擷圖"
  },
  "notificationImageCopiedDetails": {
    "message": "已將擷圖複製到剪貼簿,按下 $META_KEY$-V 即可貼上。",
    "placeholders": {
      "meta_key": {
        "content": "$1"
      }
    }
  },
  "imageCroppedWarning": {
    "message": "已將圖片裁切為 $PIXELS$px 大小。",
    "placeholders": {
      "pixels": {
        "content": "$1"
      }
    }
  },
  "requestErrorTitle": {
    "message": "系統維護中。"
  },
  "requestErrorDetails": {
    "message": "抱歉!無法儲存您拍攝的圖片,請稍候再試一次。"
  },
  "connectionErrorTitle": {
    "message": "無法連線至您的畫面擷圖。"
  },
  "connectionErrorDetails": {
    "message": "請檢查您的網路連線。若您可以正常上網,可能是 Firefox Screenshots 臨時出了問題。"
  },
  "loginErrorDetails": {
    "message": "Firefox Screenshots 服務發生問題,我們無法儲存您拍攝的擷圖。請稍候再試。"
  },
  "unshootablePageErrorTitle": {
    "message": "無法幫此頁面拍照。"
  },
  "unshootablePageErrorDetails": {
    "message": "這不是標準的網頁,無法拍照。"
  },
  "selfScreenshotErrorTitle": {
    "message": "您不能幫 Firefox Screenshots 的頁面拍照!"
  },
  "emptySelectionErrorTitle": {
    "message": "您的選擇範圍太小"
  },
  "privateWindowErrorTitle": {
    "message": "隱私瀏覽模式中將停用 Screenshots 套件"
  },
  "privateWindowErrorDetails": {
    "message": "很抱歉帶來不便,我們將在未來提供此功能。"
  },
  "genericErrorTitle": {
    "message": "唉呀,Firefox Screenshots 有點秀逗了。"
  },
  "genericErrorDetails": {
    "message": "我們不確定剛剛發生了什麼事,您可以再試一次,或拍攝其他頁面的擷圖嗎?"
  },
  "tourBodyIntro": {
    "message": "不用離開 Firefox 就可以拍攝、儲存、分享畫面擷圖。"
  },
  "tourHeaderPageAction": {
    "message": "全新的存檔方式"
  },
  "tourBodyPageAction": {
    "message": "想要拍攝擷圖時,打開網址列當中的頁面操作選單即可拍照。"
  },
  "tourHeaderClickAndDrag": {
    "message": "只拍你想拍的"
  },
  "tourBodyClickAndDrag": {
    "message": "點擊並拖曳出要擷取的範圍。或者您也可以用滑鼠移上頁面中的各部分,擷取該範圍。"
  },
  "tourHeaderFullPage": {
    "message": "擷取可見範圍或整張網頁"
  },
  "tourBodyFullPage": {
    "message": "透過右上角的不同按鈕來選擇只拍攝視窗中的可見區域,或是整張網頁。"
  },
  "tourHeaderDownloadUpload": {
    "message": "用您想要的方式分享"
  },
  "tourBodyDownloadUpload": {
    "message": "裁切過的擷圖,可直接傳到網路上方便分享,也能下載到電腦裡;也可以點擊「我的擷圖」按鈕,尋找拍過的所有擷圖。"
  },
  "tourSkip": {
    "message": "略過"
  },
  "tourNext": {
    "message": "下一頁"
  },
  "tourPrevious": {
    "message": "上一頁"
  },
  "tourDone": {
    "message": "完成"
  },
  "termsAndPrivacyNotice2": {
    "message": "使用 Firefox Screenshots 時,代表您同意我們的 $TERMSANDPRIVACYNOTICETERMSLINK$ 及 $TERMSANDPRIVACYNOTICEPRIVACYLINK$。",
    "placeholders": {
      "termsandprivacynoticetermslink": {
        "content": "$1"
      },
      "termsandprivacynoticeprivacylink": {
        "content": "$2"
      }
    }
  },
  "termsAndPrivacyNoticeTermsLink": {
    "message": "使用條款"
  },
  "termsAndPrivacyNoticyPrivacyLink": {
    "message": "隱私權保護政策"
  },
  "libraryLabel": {
    "message": "擷圖"
  }
}PK
!<@i ߪª%webextension/assertIsBlankDocument.js/** For use inside an iframe onload function, throws an Error if iframe src is not blank.html

    Should be applied *inside* catcher.watchFunction
*/
this.assertIsBlankDocument = function assertIsBlankDocument(doc) {
  if (doc.documentURI !== browser.extension.getURL("blank.html")) {
    const exc = new Error("iframe URL does not match expected blank.html");
    exc.foundURL = doc.documentURI;
    throw exc;
  }
};
null;
PK
!<Y9™™webextension/assertIsTrusted.js/** For use with addEventListener, assures that any events have event.isTrusted set to true
      https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted
    Should be applied *inside* catcher.watchFunction
*/
this.assertIsTrusted = function assertIsTrusted(handlerFunction) {
  return function(event) {
    if (!event) {
      const exc = new Error("assertIsTrusted did not get an event");
      exc.noPopup = true;
      throw exc;
    }
    if (!event.isTrusted) {
      const exc = new Error(`Received untrusted event (type: ${event.type})`);
      exc.noPopup = true;
      throw exc;
    }
    return handlerFunction.call(this, event);
  };
};
null;
PK
!<IK¶'¶'$webextension/background/analytics.js/* globals main, auth, catcher, deviceInfo, communication, log */

"use strict";

this.analytics = (function() {
  const exports = {};

  let telemetryPrefKnown = false;
  let telemetryEnabled;

  const EVENT_BATCH_DURATION = 1000; // ms for setTimeout
  let pendingEvents = [];
  let pendingTimings = [];
  let eventsTimeoutHandle, timingsTimeoutHandle;
  const fetchOptions = {
    method: "POST",
    mode: "cors",
    headers: { "content-type": "application/json" },
    credentials: "include"
  };

  function flushEvents() {
    if (pendingEvents.length === 0) {
      return;
    }

    const eventsUrl = `${main.getBackend()}/event`;
    const deviceId = auth.getDeviceId();
    const sendTime = Date.now();

    pendingEvents.forEach(event => {
      event.queueTime = sendTime - event.eventTime;
      log.info(`sendEvent ${event.event}/${event.action}/${event.label || "none"} ${JSON.stringify(event.options)}`);
    });

    const body = JSON.stringify({deviceId, events: pendingEvents});
    const fetchRequest = fetch(eventsUrl, Object.assign({body}, fetchOptions));
    fetchWatcher(fetchRequest);
    pendingEvents = [];
  }

  function flushTimings() {
    if (pendingTimings.length === 0) {
      return;
    }

    const timingsUrl = `${main.getBackend()}/timing`;
    const deviceId = auth.getDeviceId();
    const body = JSON.stringify({deviceId, timings: pendingTimings});
    const fetchRequest = fetch(timingsUrl, Object.assign({body}, fetchOptions));
    fetchWatcher(fetchRequest);
    pendingTimings.forEach(t => {
      log.info(`sendTiming ${t.timingCategory}/${t.timingLabel}/${t.timingVar}: ${t.timingValue}`);
    });
    pendingTimings = [];
  }

  function sendTiming(timingLabel, timingVar, timingValue) {
    // sendTiming is only called in response to sendEvent, so no need to check
    // the telemetry pref again here.
    const timingCategory = "addon";
    pendingTimings.push({
      timingCategory,
      timingLabel,
      timingVar,
      timingValue
    });
    if (!timingsTimeoutHandle) {
      timingsTimeoutHandle = setTimeout(() => {
        timingsTimeoutHandle = null;
        flushTimings();
      }, EVENT_BATCH_DURATION);
    }
  }

  exports.sendEvent = function(action, label, options) {
    const eventCategory = "addon";
    if (!telemetryPrefKnown) {
      log.warn("sendEvent called before we were able to refresh");
      return Promise.resolve();
    }
    if (!telemetryEnabled) {
      log.info(`Cancelled sendEvent ${eventCategory}/${action}/${label || "none"} ${JSON.stringify(options)}`);
      return Promise.resolve();
    }
    measureTiming(action, label);
    // Internal-only events are used for measuring time between events,
    // but aren't submitted to GA.
    if (action === "internal") {
      return Promise.resolve();
    }
    if (typeof label === "object" && (!options)) {
      options = label;
      label = undefined;
    }
    options = options || {};

    // Don't send events if in private browsing.
    if (options.incognito) {
      return Promise.resolve();
    }

    // Don't include in event data.
    delete options.incognito;

    const di = deviceInfo();
    options.applicationName = di.appName;
    options.applicationVersion = di.addonVersion;
    const abTests = auth.getAbTests();
    for (const [gaField, value] of Object.entries(abTests)) {
      options[gaField] = value;
    }
    pendingEvents.push({
      eventTime: Date.now(),
      event: eventCategory,
      action,
      label,
      options
    });
    if (!eventsTimeoutHandle) {
      eventsTimeoutHandle = setTimeout(() => {
        eventsTimeoutHandle = null;
        flushEvents();
      }, EVENT_BATCH_DURATION);
    }
    // This function used to return a Promise that was not used at any of the
    // call sites; doing this simply maintains that interface.
    return Promise.resolve();
  };

  exports.refreshTelemetryPref = function() {
    return communication.sendToBootstrap("isTelemetryEnabled").then((result) => {
      telemetryPrefKnown = true;
      if (result === communication.NO_BOOTSTRAP) {
        telemetryEnabled = true;
      } else {
        telemetryEnabled = result;
      }
    }, (error) => {
      // If there's an error reading the pref, we should assume that we shouldn't send data
      telemetryPrefKnown = true;
      telemetryEnabled = false;
      throw error;
    });
  };

  exports.isTelemetryEnabled = function() {
    catcher.watchPromise(exports.refreshTelemetryPref());
    return telemetryEnabled;
  };

  const timingData = new Map();

  // Configuration for filtering the sendEvent stream on start/end events.
  // When start or end events occur, the time is recorded.
  // When end events occur, the elapsed time is calculated and submitted
  // via `sendEvent`, where action = "perf-response-time", label = name of rule,
  // and cd1 value is the elapsed time in milliseconds.
  // If a cancel event happens between the start and end events, the start time
  // is deleted.
  const rules = [{
    name: "page-action",
    start: { action: "start-shot", label: "toolbar-button" },
    end: { action: "internal", label: "unhide-preselection-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" },
      { action: "internal", label: "unhide-onboarding-frame" }
    ]
  }, {
    name: "context-menu",
    start: { action: "start-shot", label: "context-menu" },
    end: { action: "internal", label: "unhide-preselection-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" },
      { action: "internal", label: "unhide-onboarding-frame" }
    ]
  }, {
    name: "page-action-onboarding",
    start: { action: "start-shot", label: "toolbar-button" },
    end: { action: "internal", label: "unhide-onboarding-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" },
      { action: "internal", label: "unhide-preselection-frame" }
    ]
  }, {
    name: "context-menu-onboarding",
    start: { action: "start-shot", label: "context-menu" },
    end: { action: "internal", label: "unhide-onboarding-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" },
      { action: "internal", label: "unhide-preselection-frame" }
    ]
  }, {
    name: "capture-full-page",
    start: { action: "capture-full-page" },
    end: { action: "internal", label: "unhide-preview-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "capture-visible",
    start: { action: "capture-visible" },
    end: { action: "internal", label: "unhide-preview-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "make-selection",
    start: { action: "make-selection" },
    end: { action: "internal", label: "unhide-selection-frame" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "save-shot",
    start: { action: "save-shot" },
    end: { action: "internal", label: "open-shot-tab" },
    cancel: [{ action: "cancel-shot" }, { action: "upload-failed" }]
  }, {
    name: "save-visible",
    start: { action: "save-visible" },
    end: { action: "internal", label: "open-shot-tab" },
    cancel: [{ action: "cancel-shot" }, { action: "upload-failed" }]
  }, {
    name: "save-full-page",
    start: { action: "save-full-page" },
    end: { action: "internal", label: "open-shot-tab" },
    cancel: [{ action: "cancel-shot" }, { action: "upload-failed" }]
  }, {
    name: "save-full-page-truncated",
    start: { action: "save-full-page-truncated" },
    end: { action: "internal", label: "open-shot-tab" },
    cancel: [{ action: "cancel-shot" }, { action: "upload-failed" }]
  }, {
    name: "download-shot",
    start: { action: "download-shot" },
    end: { action: "internal", label: "deactivate" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "download-full-page",
    start: { action: "download-full-page" },
    end: { action: "internal", label: "deactivate" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "download-full-page-truncated",
    start: { action: "download-full-page-truncated" },
    end: { action: "internal", label: "deactivate" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }, {
    name: "download-visible",
    start: { action: "download-visible" },
    end: { action: "internal", label: "deactivate" },
    cancel: [
      { action: "cancel-shot" },
      { action: "internal", label: "document-hidden" }
    ]
  }];

  // Match a filter (action and optional label) against an action and label.
  function match(filter, action, label) {
    return filter.label ?
      filter.action === action && filter.label === label :
      filter.action === action;
  }

  function anyMatches(filters, action, label) {
    return filters.some(filter => match(filter, action, label));
  }

  function measureTiming(action, label) {
    rules.forEach(r => {
      if (anyMatches(r.cancel, action, label)) {
        delete timingData[r.name];
      } else if (match(r.start, action, label)) {
        timingData[r.name] = Math.round(performance.now());
      } else if (timingData[r.name] && match(r.end, action, label)) {
        const endTime = Math.round(performance.now());
        const elapsed = endTime - timingData[r.name];
        sendTiming("perf-response-time", r.name, elapsed);
        delete timingData[r.name];
      }
    });
  }

  function fetchWatcher(request) {
    catcher.watchPromise(
      request.then(response => {
        if (!response.ok) {
          throw new Error(`Bad response from ${request.url}: ${response.status} ${response.statusText}`);
        }
        return response;
      }),
      true
    );
  }

  return exports;
})();
PK
!<|ôñMnnwebextension/background/auth.js/* globals log */
/* globals main, makeUuid, deviceInfo, analytics, catcher, buildSettings, communication */

"use strict";

this.auth = (function() {
  const exports = {};

  let registrationInfo;
  let initialized = false;
  let authHeader = null;
  let sentryPublicDSN = null;
  let abTests = {};

  const registrationInfoFetched = catcher.watchPromise(browser.storage.local.get(["registrationInfo", "abTests"]).then((result) => {
    if (result.abTests) {
      abTests = result.abTests;
    }
    if (result.registrationInfo) {
      registrationInfo = result.registrationInfo;
    } else {
      registrationInfo = generateRegistrationInfo();
      log.info("Generating new device authentication ID", registrationInfo);
      browser.storage.local.set({registrationInfo});
    }
  }));

  exports.getDeviceId = function() {
    return registrationInfo && registrationInfo.deviceId;
  };

  function generateRegistrationInfo() {
    const info = {
      deviceId: `anon${makeUuid()}`,
      secret: makeUuid(),
      registered: false
    };
    return info;
  }

  function register() {
    return new Promise((resolve, reject) => {
      const registerUrl = main.getBackend() + "/api/register";
      // TODO: replace xhr with Fetch #2261
      const req = new XMLHttpRequest();
      req.open("POST", registerUrl);
      req.setRequestHeader("content-type", "application/json");
      req.onload = catcher.watchFunction(() => {
        if (req.status === 200) {
          log.info("Registered login");
          initialized = true;
          saveAuthInfo(JSON.parse(req.responseText));
          resolve(true);
          analytics.sendEvent("registered");
        } else {
          analytics.sendEvent("register-failed", `bad-response-${req.status}`);
          log.warn("Error in response:", req.responseText);
          const exc = new Error("Bad response: " + req.status);
          exc.popupMessage = "LOGIN_ERROR";
          reject(exc);
        }
      });
      req.onerror = catcher.watchFunction(() => {
        analytics.sendEvent("register-failed", "connection-error");
        const exc = new Error("Error contacting server");
        exc.popupMessage = "LOGIN_CONNECTION_ERROR";
        reject(exc);
      });
      req.send(JSON.stringify({
        deviceId: registrationInfo.deviceId,
        secret: registrationInfo.secret,
        deviceInfo: JSON.stringify(deviceInfo())
      }));
    });
  }

  function login(options) {
    const { ownershipCheck, noRegister } = options || {};
    return new Promise((resolve, reject) => {
      const loginUrl = main.getBackend() + "/api/login";
      // TODO: replace xhr with Fetch #2261
      const req = new XMLHttpRequest();
      req.open("POST", loginUrl);
      req.onload = catcher.watchFunction(() => {
        if (req.status === 404) {
          if (noRegister) {
            resolve(false);
          } else {
            resolve(register());
          }
        } else if (req.status >= 300) {
          log.warn("Error in response:", req.responseText);
          const exc = new Error("Could not log in: " + req.status);
          exc.popupMessage = "LOGIN_ERROR";
          analytics.sendEvent("login-failed", `bad-response-${req.status}`);
          reject(exc);
        } else if (req.status === 0) {
          const error = new Error("Could not log in, server unavailable");
          error.popupMessage = "LOGIN_CONNECTION_ERROR";
          analytics.sendEvent("login-failed", "connection-error");
          reject(error);
        } else {
          initialized = true;
          const jsonResponse = JSON.parse(req.responseText);
          log.info("Screenshots logged in");
          analytics.sendEvent("login");
          saveAuthInfo(jsonResponse);
          if (ownershipCheck) {
            resolve({isOwner: jsonResponse.isOwner});
          } else {
            resolve(true);
          }
        }
      });
      req.onerror = catcher.watchFunction(() => {
        analytics.sendEvent("login-failed", "connection-error");
        const exc = new Error("Connection failed");
        exc.url = loginUrl;
        exc.popupMessage = "CONNECTION_ERROR";
        reject(exc);
      });
      req.setRequestHeader("content-type", "application/json");
      req.send(JSON.stringify({
        deviceId: registrationInfo.deviceId,
        secret: registrationInfo.secret,
        deviceInfo: JSON.stringify(deviceInfo()),
        ownershipCheck
      }));
    });
  }

  function saveAuthInfo(responseJson) {
    if (responseJson.sentryPublicDSN) {
      sentryPublicDSN = responseJson.sentryPublicDSN;
    }
    if (responseJson.authHeader) {
      authHeader = responseJson.authHeader;
      if (!registrationInfo.registered) {
        registrationInfo.registered = true;
        catcher.watchPromise(browser.storage.local.set({registrationInfo}));
      }
    }
    if (responseJson.abTests) {
      abTests = responseJson.abTests;
      catcher.watchPromise(browser.storage.local.set({abTests}));
    }
  }

  exports.getDeviceId = function() {
    return registrationInfo.deviceId;
  };

  exports.authHeaders = function() {
    let initPromise = Promise.resolve();
    if (!initialized) {
      initPromise = login();
    }
    return initPromise.then(() => {
      if (authHeader) {
        return {"x-screenshots-auth": authHeader};
      }
      log.warn("No auth header available");
      return {};
    });
  };

  exports.getSentryPublicDSN = function() {
    return sentryPublicDSN || buildSettings.defaultSentryDsn;
  };

  exports.getAbTests = function() {
    return abTests;
  };

  exports.isRegistered = function() {
    return registrationInfo.registered;
  };

  communication.register("getAuthInfo", (sender, ownershipCheck) => {
    return registrationInfoFetched.then(() => {
      return exports.authHeaders();
    }).then((authHeaders) => {
      let info = registrationInfo;
      if (info.registered) {
        return login({ownershipCheck}).then((result) => {
          return {
            isOwner: result && result.isOwner,
            deviceId: registrationInfo.deviceId,
            authHeaders
          };
        });
      }
      info = Object.assign({authHeaders}, info);
      return info;
    });
  });

  return exports;
})();
PK
!<øWҠf
f
(webextension/background/communication.js/* globals catcher, log */

"use strict";

this.communication = (function() {
  const exports = {};

  const registeredFunctions = {};

  exports.onMessage = catcher.watchFunction((req, sender, sendResponse) => {
    if (!(req.funcName in registeredFunctions)) {
      log.error(`Received unknown internal message type ${req.funcName}`);
      sendResponse({type: "error", name: "Unknown message type"});
      return;
    }
    if (!Array.isArray(req.args)) {
      log.error("Received message with no .args list");
      sendResponse({type: "error", name: "No .args"});
      return;
    }
    const func = registeredFunctions[req.funcName];
    let result;
    try {
      req.args.unshift(sender);
      result = func.apply(null, req.args);
    } catch (e) {
      log.error(`Error in ${req.funcName}:`, e, e.stack);
      // FIXME: should consider using makeError from catcher here:
      sendResponse({type: "error", message: e + "", errorCode: e.errorCode, popupMessage: e.popupMessage});
      return;
    }
    if (result && result.then) {
      result.then((concreteResult) => {
        sendResponse({type: "success", value: concreteResult});
      }).catch((errorResult) => {
        log.error(`Promise error in ${req.funcName}:`, errorResult, errorResult && errorResult.stack);
        sendResponse({type: "error", message: errorResult + "", errorCode: errorResult.errorCode, popupMessage: errorResult.popupMessage});
      });
      return;
    }
    sendResponse({type: "success", value: result});
  });

  exports.register = function(name, func) {
    registeredFunctions[name] = func;
  };

  /** Send a message to bootstrap.js
      Technically any worker can listen to this.  If the bootstrap wrapper is not in place, then this
      will *not* fail, and will return a value of exports.NO_BOOTSTRAP  */
  exports.sendToBootstrap = function(funcName, ...args) {
    return browser.runtime.sendMessage({funcName, args}).then((result) => {
      if (result.type === "success") {
        return result.value;
      }
      throw new Error(`Error in ${funcName}: ${result.name || "unknown"}`);
    }, (error) => {
      if (isBootstrapMissingError(error)) {
        return exports.NO_BOOTSTRAP;
      }
      throw error;
    });
  };

  function isBootstrapMissingError(error) {
    if (!error) {
      return false;
    }
    return ("errorCode" in error && error.errorCode === "NO_RECEIVING_END") ||
      (!error.errorCode && error.message === "Could not establish connection. Receiving end does not exist.");
  }


  // A singleton/sentinel (with a name):
  exports.NO_BOOTSTRAP = {name: "communication.NO_BOOTSTRAP"};

  return exports;
})();
PK
!<õYµÒÝÝ%webextension/background/deviceInfo.js/* globals catcher */

"use strict";

this.deviceInfo = (function() {
  const manifest = browser.runtime.getManifest();

  let platformInfo = {};
  catcher.watchPromise(browser.runtime.getPlatformInfo().then((info) => {
    platformInfo = info;
  }));

  return function deviceInfo() {
    let match = navigator.userAgent.match(/Chrom(?:e|ium)\/([0-9.]{1,1000})/);
    const chromeVersion = match ? match[1] : null;
    match = navigator.userAgent.match(/Firefox\/([0-9.]{1,1000})/);
    const firefoxVersion = match ? match[1] : null;
    const appName = chromeVersion ? "chrome" : "firefox";

    return {
      addonVersion: manifest.version,
      platform: platformInfo.os,
      architecture: platformInfo.arch,
      version: firefoxVersion || chromeVersion,
      // These don't seem to apply to Chrome:
      // build: system.build,
      // platformVersion: system.platformVersion,
      userAgent: navigator.userAgent,
      appVendor: appName,
      appName
    };
  };

})();
PK
!<„à_ž++webextension/background/main.js/* globals selectorLoader, analytics, communication, catcher, log, makeUuid, auth, senderror, startBackground, blobConverters buildSettings */

"use strict";

this.main = (function() {
  const exports = {};

  const pasteSymbol = (window.navigator.platform.match(/Mac/i)) ? "\u2318" : "Ctrl";
  const { sendEvent } = analytics;

  const manifest = browser.runtime.getManifest();
  let backend;

  let hasSeenOnboarding = browser.storage.local.get(["hasSeenOnboarding"]).then((result) => {
    const onboarded = !!result.hasSeenOnboarding;
    if (!onboarded) {
      setIconActive(false, null);
      // Note that the branded name 'Firefox Screenshots' is not localized:
      startBackground.photonPageActionPort.postMessage({
        type: "setProperties",
        title: "Firefox Screenshots"
      });
    }
    hasSeenOnboarding = Promise.resolve(onboarded);
    return hasSeenOnboarding;
  }).catch((error) => {
    log.error("Error getting hasSeenOnboarding:", error);
  });

  exports.setBackend = function(newBackend) {
    backend = newBackend;
    backend = backend.replace(/\/*$/, "");
  };

  exports.getBackend = function() {
    return backend;
  };

  communication.register("getBackend", () => {
    return backend;
  });

  function getOnboardingUrl() {
    return backend + "/#hello";
  }

  for (const permission of manifest.permissions) {
    if (/^https?:\/\//.test(permission)) {
      exports.setBackend(permission);
      break;
    }
  }

  function setIconActive(active, tabId) {
    const path = active ? "icons/icon-highlight-32-v2.svg" : "icons/icon-v2.svg";
    startBackground.photonPageActionPort.postMessage({
      type: "setProperties",
      iconPath: path
    });
  }

  function toggleSelector(tab) {
    return analytics.refreshTelemetryPref()
      .then(() => selectorLoader.toggle(tab.id, hasSeenOnboarding))
      .then(active => {
        setIconActive(active, tab.id);
        return active;
      })
      .catch((error) => {
        if (error.message && /Missing host permission for the tab/.test(error.message)) {
          error.noReport = true;
        }
        error.popupMessage = "UNSHOOTABLE_PAGE";
        throw error;
      });
  }

  function startSelectionWithOnboarding(tab) {
    return analytics.refreshTelemetryPref().then(() => {
      return selectorLoader.testIfLoaded(tab.id);
    }).then((isLoaded) => {
      if (!isLoaded) {
        sendEvent("start-shot", "site-request", {incognito: tab.incognito});
        setIconActive(true, tab.id);
        selectorLoader.toggle(tab.id, false);
      }
    });
  }

  function shouldOpenMyShots(url) {
    return /^about:(?:newtab|blank|home)/i.test(url) || /^resource:\/\/activity-streams\//i.test(url);
  }

  // This is called by startBackground.js, directly in response to clicks on the Photon page action
  exports.onClicked = catcher.watchFunction((tab) => {
    catcher.watchPromise(hasSeenOnboarding.then(onboarded => {
      if (shouldOpenMyShots(tab.url)) {
        if (!onboarded) {
          catcher.watchPromise(analytics.refreshTelemetryPref().then(() => {
            sendEvent("goto-onboarding", "selection-button", {incognito: tab.incognito});
            return forceOnboarding();
          }));
          return;
        }
        catcher.watchPromise(analytics.refreshTelemetryPref().then(() => {
          sendEvent("goto-myshots", "about-newtab", {incognito: tab.incognito});
        }));
        catcher.watchPromise(
          auth.authHeaders()
          .then(() => browser.tabs.update({url: backend + "/shots"})));
      } else {
        catcher.watchPromise(
          toggleSelector(tab)
            .then(active => {
              const event = active ? "start-shot" : "cancel-shot";
              sendEvent(event, "toolbar-button", {incognito: tab.incognito});
            }, (error) => {
              if ((!onboarded) && error.popupMessage === "UNSHOOTABLE_PAGE") {
                sendEvent("goto-onboarding", "selection-button", {incognito: tab.incognito});
                return forceOnboarding();
              }
              throw error;
            }));
      }
    }));
  });

  function forceOnboarding() {
    return browser.tabs.create({url: getOnboardingUrl()});
  }

  exports.onClickedContextMenu = catcher.watchFunction((info, tab) => {
    catcher.watchPromise(hasSeenOnboarding.then(onboarded => {
      if (!tab) {
        // Not in a page/tab context, ignore
        return;
      }
      if (!urlEnabled(tab.url)) {
        if (!onboarded) {
          sendEvent("goto-onboarding", "selection-button", {incognito: tab.incognito});
          forceOnboarding();
          return;
        }
        senderror.showError({
          popupMessage: "UNSHOOTABLE_PAGE"
        });
        return;
      }
      // No need to catch() here because of watchPromise().
      // eslint-disable-next-line promise/catch-or-return
      toggleSelector(tab)
        .then(() => sendEvent("start-shot", "context-menu", {incognito: tab.incognito}));
    }));
  });

  function urlEnabled(url) {
    if (shouldOpenMyShots(url)) {
      return true;
    }
    if (isShotOrMyShotPage(url) || /^(?:about|data|moz-extension):/i.test(url) || isBlacklistedUrl(url)) {
      return false;
    }
    return true;
  }

  function isShotOrMyShotPage(url) {
    // It's okay to take a shot of any pages except shot pages and My Shots
    if (!url.startsWith(backend)) {
      return false;
    }
    const path = url.substr(backend.length).replace(/^\/*/, "").replace(/[?#].*/, "");
    if (path === "shots") {
      return true;
    }
    if (/^[^/]{1,4000}\/[^/]{1,4000}$/.test(path)) {
      // Blocks {:id}/{:domain}, but not /, /privacy, etc
      return true;
    }
    return false;
  }

  function isBlacklistedUrl(url) {
    // These specific domains are not allowed for general WebExtension permission reasons
    // Discussion: https://bugzilla.mozilla.org/show_bug.cgi?id=1310082
    // List of domains copied from: https://dxr.mozilla.org/mozilla-central/source/browser/app/permissions#18-19
    // Note we disable it here to be informative, the security check is done in WebExtension code
    const badDomains = ["addons.mozilla.org", "testpilot.firefox.com"];
    let domain = url.replace(/^https?:\/\//i, "");
    domain = domain.replace(/\/.*/, "").replace(/:.*/, "");
    domain = domain.toLowerCase();
    return badDomains.includes(domain);
  }

  communication.register("sendEvent", (sender, ...args) => {
    catcher.watchPromise(sendEvent(...args));
    // We don't wait for it to complete:
    return null;
  });

  communication.register("openMyShots", (sender) => {
    return catcher.watchPromise(
      auth.authHeaders()
      .then(() => browser.tabs.create({url: backend + "/shots"})));
  });

  communication.register("openShot", (sender, {url, copied}) => {
    if (copied) {
      const id = makeUuid();
      return browser.notifications.create(id, {
        type: "basic",
        iconUrl: "../icons/copied-notification.svg",
        title: browser.i18n.getMessage("notificationLinkCopiedTitle"),
        message: browser.i18n.getMessage("notificationLinkCopiedDetails", pasteSymbol)
      });
    }
    return null;
  });

  // This is used for truncated full page downloads and copy to clipboards.
  // Those longer operations need to display an animated spinner/loader, so
  // it's preferable to perform toDataURL() in the background.
  communication.register("canvasToDataURL", (sender, imageData) => {
    const canvas = document.createElement("canvas");
    canvas.width = imageData.width;
    canvas.height = imageData.height;
    canvas.getContext("2d").putImageData(imageData, 0, 0);
    let dataUrl = canvas.toDataURL();
    if (buildSettings.pngToJpegCutoff && dataUrl.length > buildSettings.pngToJpegCutoff) {
      const jpegDataUrl = canvas.toDataURL("image/jpeg");
      if (jpegDataUrl.length < dataUrl.length) {
        // Only use the JPEG if it is actually smaller
        dataUrl = jpegDataUrl;
      }
    }
    return dataUrl;
  });

  communication.register("copyShotToClipboard", (sender, blob) => {
    return blobConverters.blobToArray(blob).then(buffer => {
      return browser.clipboard.setImageData(
        buffer, blob.type.split("/", 2)[1]).then(() => {
          catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "copy"}));
          return browser.notifications.create({
            type: "basic",
            iconUrl: "../icons/copied-notification.svg",
            title: browser.i18n.getMessage("notificationImageCopiedTitle"),
            message: browser.i18n.getMessage("notificationImageCopiedDetails", pasteSymbol)
          });
        });
    });
  });

  communication.register("downloadShot", (sender, info) => {
    // 'data:' urls don't work directly, let's use a Blob
    // see http://stackoverflow.com/questions/40269862/save-data-uri-as-file-using-downloads-download-api
    const blob = blobConverters.dataUrlToBlob(info.url);
    const url = URL.createObjectURL(blob);
    let downloadId;
    const onChangedCallback = catcher.watchFunction(function(change) {
      if (!downloadId || downloadId !== change.id) {
        return;
      }
      if (change.state && change.state.current !== "in_progress") {
        URL.revokeObjectURL(url);
        browser.downloads.onChanged.removeListener(onChangedCallback);
      }
    });
    browser.downloads.onChanged.addListener(onChangedCallback);
    catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "download"}));
    return browser.windows.getLastFocused().then(windowInfo => {
      return browser.downloads.download({
        url,
        incognito: windowInfo.incognito,
        filename: info.filename
      }).catch((error) => {
        // We are not logging error message when user cancels download
        if (error && error.message && !error.message.includes("canceled")) {
          log.error(error.message);
        }
      }).then((id) => {
        downloadId = id;
      });
    });
  });

  communication.register("closeSelector", (sender) => {
    setIconActive(false, sender.tab.id);
  });

  communication.register("hasSeenOnboarding", () => {
    hasSeenOnboarding = Promise.resolve(true);
    catcher.watchPromise(browser.storage.local.set({hasSeenOnboarding: true}));
    setIconActive(false, null);
    startBackground.photonPageActionPort.postMessage({
      type: "setProperties",
      title: browser.i18n.getMessage("contextMenuLabel")
    });
  });

  communication.register("abortStartShot", () => {
    // Note, we only show the error but don't report it, as we know that we can't
    // take shots of these pages:
    senderror.showError({
      popupMessage: "UNSHOOTABLE_PAGE"
    });
  });

  // A Screenshots page wants us to start/force onboarding
  communication.register("requestOnboarding", (sender) => {
    return startSelectionWithOnboarding(sender.tab);
  });

  communication.register("getPlatformOs", () => {
    return catcher.watchPromise(browser.runtime.getPlatformInfo().then(platformInfo => {
      return platformInfo.os;
    }));
  });

  return exports;
})();
PK
!<tzϋ‹)webextension/background/selectorLoader.js/* globals catcher, communication, log */

"use strict";

// eslint-disable-next-line no-var
var global = this;

this.selectorLoader = (function() {
  const exports = {};

  // These modules are loaded in order, first standardScripts, then optionally onboardingScripts, and then selectorScripts
  // The order is important due to dependencies
  const standardScripts = [
    "build/buildSettings.js",
    "log.js",
    "catcher.js",
    "assertIsTrusted.js",
    "assertIsBlankDocument.js",
    "blobConverters.js",
    "background/selectorLoader.js",
    "selector/callBackground.js",
    "selector/util.js"
  ];

  const selectorScripts = [
    "clipboard.js",
    "makeUuid.js",
    "build/selection.js",
    "build/shot.js",
    "randomString.js",
    "domainFromUrl.js",
    "build/inlineSelectionCss.js",
    "selector/documentMetadata.js",
    "selector/ui.js",
    "selector/shooter.js",
    "selector/uicontrol.js"
  ];

  // These are loaded on request (by the selector worker) to activate the onboarding:
  const onboardingScripts = [
    "build/onboardingCss.js",
    "build/onboardingHtml.js",
    "onboarding/slides.js"
  ];

  exports.unloadIfLoaded = function(tabId) {
    return browser.tabs.executeScript(tabId, {
      code: "this.selectorLoader && this.selectorLoader.unloadModules()",
      runAt: "document_start"
    }).then(result => {
      return result && result[0];
    });
  };

  exports.testIfLoaded = function(tabId) {
    if (loadingTabs.has(tabId)) {
      return true;
    }
    return browser.tabs.executeScript(tabId, {
      code: "!!this.selectorLoader",
      runAt: "document_start"
    }).then(result => {
      return result && result[0];
    });
  };

  const loadingTabs = new Set();

  exports.loadModules = function(tabId, hasSeenOnboarding) {
    catcher.watchPromise(hasSeenOnboarding.then(onboarded => {
      loadingTabs.add(tabId);
      let promise = downloadOnlyCheck(tabId);
      if (onboarded) {
        promise = promise.then(() => {
          return executeModules(tabId, standardScripts.concat(selectorScripts));
        });
      } else {
        promise = promise.then(() => {
          return executeModules(tabId, standardScripts.concat(onboardingScripts).concat(selectorScripts));
        });
      }
      return promise.then((result) => {
        loadingTabs.delete(tabId);
        return result;
      }, (error) => {
        loadingTabs.delete(tabId);
        throw error;
      });
    }));
  };

  // TODO: since bootstrap communication is now required, would this function
  // make more sense inside background/main?
  function downloadOnlyCheck(tabId) {
    return communication.sendToBootstrap("isHistoryEnabled").then((historyEnabled) => {
      return communication.sendToBootstrap("isUploadDisabled").then((uploadDisabled) => {
        return browser.tabs.get(tabId).then(tab => {
          const downloadOnly = !historyEnabled || uploadDisabled || tab.incognito;
          return browser.tabs.executeScript(tabId, {
            // Note: `window` here refers to a global accessible to content
            // scripts, but not the scripts in the underlying page. For more
            // details, see https://mdn.io/WebExtensions/Content_scripts#Content_script_environment
            code: `window.downloadOnly = ${downloadOnly}`,
            runAt: "document_start"
          });
        });
      });
    });
  }

  function executeModules(tabId, scripts) {
    let lastPromise = Promise.resolve(null);
    scripts.forEach((file) => {
      lastPromise = lastPromise.then(() => {
        return browser.tabs.executeScript(tabId, {
          file,
          runAt: "document_start"
        }).catch((error) => {
          log.error("error in script:", file, error);
          error.scriptName = file;
          throw error;
        });
      });
    });
    return lastPromise.then(() => {
      log.debug("finished loading scripts:", scripts.join(" "));
    },
    (error) => {
      exports.unloadIfLoaded(tabId);
      catcher.unhandled(error);
      throw error;
    });
  }

  exports.unloadModules = function() {
    const watchFunction = catcher.watchFunction;
    const allScripts = standardScripts.concat(onboardingScripts).concat(selectorScripts);
    const moduleNames = allScripts.map((filename) =>
      filename.replace(/^.*\//, "").replace(/\.js$/, ""));
    moduleNames.reverse();
    for (const moduleName of moduleNames) {
      const moduleObj = global[moduleName];
      if (moduleObj && moduleObj.unload) {
        try {
          watchFunction(moduleObj.unload)();
        } catch (e) {
          // ignore (watchFunction handles it)
        }
      }
      delete global[moduleName];
    }
    return true;
  };

  exports.toggle = function(tabId, hasSeenOnboarding) {
    return exports.unloadIfLoaded(tabId)
      .then(wasLoaded => {
        if (!wasLoaded) {
          exports.loadModules(tabId, hasSeenOnboarding);
        }
        return !wasLoaded;
      });
  };

  return exports;
})();
null;
PK
!<	6©;šš$webextension/background/senderror.js/* globals startBackground, analytics, communication, makeUuid, Raven, catcher, auth, log */

"use strict";

this.senderror = (function() {
  const exports = {};

  const manifest = browser.runtime.getManifest();

  // Do not show an error more than every ERROR_TIME_LIMIT milliseconds:
  const ERROR_TIME_LIMIT = 3000;

  const messages = {
    REQUEST_ERROR: {
      title: browser.i18n.getMessage("requestErrorTitle"),
      info: browser.i18n.getMessage("requestErrorDetails")
    },
    CONNECTION_ERROR: {
      title: browser.i18n.getMessage("connectionErrorTitle"),
      info: browser.i18n.getMessage("connectionErrorDetails")
    },
    LOGIN_ERROR: {
      title: browser.i18n.getMessage("requestErrorTitle"),
      info: browser.i18n.getMessage("loginErrorDetails")
    },
    LOGIN_CONNECTION_ERROR: {
      title: browser.i18n.getMessage("connectionErrorTitle"),
      info: browser.i18n.getMessage("connectionErrorDetails")
    },
    UNSHOOTABLE_PAGE: {
      title: browser.i18n.getMessage("unshootablePageErrorTitle"),
      info: browser.i18n.getMessage("unshootablePageErrorDetails")
    },
    SHOT_PAGE: {
      title: browser.i18n.getMessage("selfScreenshotErrorTitle")
    },
    MY_SHOTS: {
      title: browser.i18n.getMessage("selfScreenshotErrorTitle")
    },
    EMPTY_SELECTION: {
      title: browser.i18n.getMessage("emptySelectionErrorTitle")
    },
    PRIVATE_WINDOW: {
      title: browser.i18n.getMessage("privateWindowErrorTitle"),
      info: browser.i18n.getMessage("privateWindowErrorDetails")
    },
    generic: {
      title: browser.i18n.getMessage("genericErrorTitle"),
      info: browser.i18n.getMessage("genericErrorDetails"),
      showMessage: true
    }
  };

  communication.register("reportError", (sender, error) => {
    catcher.unhandled(error);
  });

  let lastErrorTime;

  exports.showError = function(error) {
    if (lastErrorTime && (Date.now() - lastErrorTime) < ERROR_TIME_LIMIT) {
      return;
    }
    lastErrorTime = Date.now();
    const id = makeUuid();
    let popupMessage = error.popupMessage || "generic";
    if (!messages[popupMessage]) {
      popupMessage = "generic";
    }
    const title = messages[popupMessage].title;
    let message = messages[popupMessage].info || "";
    const showMessage = messages[popupMessage].showMessage;
    if (error.message && showMessage) {
      if (message) {
        message += "\n" + error.message;
      } else {
        message = error.message;
      }
    }
    if (Date.now() - startBackground.startTime > 5 * 1000) {
      browser.notifications.create(id, {
        type: "basic",
        // FIXME: need iconUrl for an image, see #2239
        title,
        message
      });
    }
  };

  exports.reportError = function(e) {
    if (!analytics.isTelemetryEnabled()) {
      log.error("Telemetry disabled. Not sending critical error:", e);
      return;
    }
    const dsn = auth.getSentryPublicDSN();
    if (!dsn) {
      log.warn("Screenshots error:", e);
      return;
    }
    if (!Raven.isSetup()) {
      Raven.config(dsn, {allowSecretKey: true}).install();
    }
    const exception = new Error(e.message);
    exception.stack = e.multilineStack || e.stack || undefined;

    // To improve Sentry reporting & grouping, replace the
    // moz-extension://$uuid base URL with a generic resource:// URL.
    if (exception.stack) {
      exception.stack = exception.stack.replace(
        /moz-extension:\/\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g,
        "resource://screenshots-addon"
      );
    }
    const rest = {};
    for (const attr in e) {
      if (!["name", "message", "stack", "multilineStack", "popupMessage", "version", "sentryPublicDSN", "help", "fromMakeError"].includes(attr)) {
        rest[attr] = e[attr];
      }
    }
    rest.stack = exception.stack;
    Raven.captureException(exception, {
      logger: "addon",
      tags: {category: e.popupMessage},
      release: manifest.version,
      message: exception.message,
      extra: rest
    });
  };

  catcher.registerHandler((errorObj) => {
    if (!errorObj.noPopup) {
      exports.showError(errorObj);
    }
    if (!errorObj.noReport) {
      exports.reportError(errorObj);
    }
  });

  return exports;
})();
PK
!<0°D8DD*webextension/background/startBackground.js/* globals browser, main, communication */
/* This file handles:
     clicks on the Photon page action
     browser.contextMenus.onClicked
     browser.runtime.onMessage
   and loads the rest of the background page in response to those events, forwarding
   the events to main.onClicked, main.onClickedContextMenu, or communication.onMessage
*/
const startTime = Date.now();

this.startBackground = (function() {
  const exports = {startTime};

  const backgroundScripts = [
    "log.js",
    "makeUuid.js",
    "catcher.js",
    "blobConverters.js",
    "background/selectorLoader.js",
    "background/communication.js",
    "background/auth.js",
    "background/senderror.js",
    "build/raven.js",
    "build/shot.js",
    "build/thumbnailGenerator.js",
    "background/analytics.js",
    "background/deviceInfo.js",
    "background/takeshot.js",
    "background/main.js"
  ];

  browser.contextMenus.create({
    id: "create-screenshot",
    title: browser.i18n.getMessage("contextMenuLabel"),
    contexts: ["page"],
    documentUrlPatterns: ["<all_urls>"]
  });

  browser.contextMenus.onClicked.addListener((info, tab) => {
    loadIfNecessary().then(() => {
      main.onClickedContextMenu(info, tab);
    }).catch((error) => {
      console.error("Error loading Screenshots:", error);
    });
  });

  browser.runtime.onMessage.addListener((req, sender, sendResponse) => {
    loadIfNecessary().then(() => {
      return communication.onMessage(req, sender, sendResponse);
    }).catch((error) => {
      console.error("Error loading Screenshots:", error);
    });
    return true;
  });

  let photonPageActionPort = null;
  initPhotonPageAction();

  let loadedPromise;

  function loadIfNecessary() {
    if (loadedPromise) {
      return loadedPromise;
    }
    loadedPromise = Promise.resolve();
    backgroundScripts.forEach((script) => {
      loadedPromise = loadedPromise.then(() => {
        return new Promise((resolve, reject) => {
          const tag = document.createElement("script");
          tag.src = browser.extension.getURL(script);
          tag.onload = () => {
            resolve();
          };
          tag.onerror = (error) => {
            const exc = new Error(`Error loading script: ${error.message}`);
            exc.scriptName = script;
            reject(exc);
          };
          document.head.appendChild(tag);
        });
      });
    });
    return loadedPromise;
  }

  function initPhotonPageAction() {
    // Set up this side of the Photon page action port.  The other side is in
    // bootstrap.js.  Ideally, in the future, WebExtension page actions and
    // Photon page actions would be one in the same, but they aren't right now.
    photonPageActionPort = browser.runtime.connect({ name: "photonPageActionPort" });
    photonPageActionPort.onMessage.addListener((message) => {
      switch (message.type) {
      case "click":
        loadIfNecessary().then(() => {
          return browser.tabs.get(message.tab.id);
        }).then((tab) => {
          main.onClicked(tab);
        }).catch((error) => {
          console.error("Error loading Screenshots:", error);
        });
        break;
      default:
        console.error("Unrecognized message:", message);
        break;
      }
    });
    photonPageActionPort.postMessage({
      type: "setProperties",
      title: browser.i18n.getMessage("contextMenuLabel")
    });

    // Export these so that main.js can use them.
    Object.defineProperties(exports, {
      "photonPageActionPort": {
        enumerable: true,
        get() {
          return photonPageActionPort;
        }
      }
    });
  }

  return exports;
})();
PK
!<),sX88#webextension/background/takeshot.js/* globals communication, shot, main, auth, catcher, analytics, buildSettings, blobConverters, thumbnailGenerator */

"use strict";

this.takeshot = (function() {
  const exports = {};
  const Shot = shot.AbstractShot;
  const { sendEvent } = analytics;

  communication.register("takeShot", catcher.watchFunction((sender, options) => {
    const { captureType, captureText, scroll, selectedPos, shotId } = options;
    const shot = new Shot(main.getBackend(), shotId, options.shot);
    shot.favicon = sender.tab.favIconUrl;
    let imageBlob = options.imageBlob;
    let capturePromise = Promise.resolve();
    let openedTab;
    let thumbnailBlob;
    if (!shot.clipNames().length) {
      // canvas.drawWindow isn't available, so we fall back to captureVisibleTab
      capturePromise = screenshotPage(selectedPos, scroll).then((dataUrl) => {
        imageBlob = buildSettings.uploadBinary ? blobConverters.dataUrlToBlob(dataUrl) : null;
        shot.addClip({
          createdDate: Date.now(),
          image: {
            url: buildSettings.uploadBinary ? "" : dataUrl,
            captureType,
            text: captureText,
            location: selectedPos,
            dimensions: {
              x: selectedPos.right - selectedPos.left,
              y: selectedPos.bottom - selectedPos.top
            }
          }
        });
      });
    }
    const shotAbTests = {};
    const abTests = auth.getAbTests();
    for (const testName of Object.keys(abTests)) {
      if (abTests[testName].shotField) {
        shotAbTests[testName] = abTests[testName].value;
      }
    }
    if (Object.keys(shotAbTests).length) {
      shot.abTests = shotAbTests;
    }
    return catcher.watchPromise(capturePromise.then(() => {
      if (buildSettings.uploadBinary) {
        const blobToUrlPromise = blobConverters.blobToDataUrl(imageBlob);
        return thumbnailGenerator.createThumbnailBlobFromPromise(shot, blobToUrlPromise);
      }
      return thumbnailGenerator.createThumbnailUrl(shot);
    }).then((thumbnailImage) => {
      if (buildSettings.uploadBinary) {
        thumbnailBlob = thumbnailImage;
      } else {
        shot.thumbnail = thumbnailImage;
      }
    }).then(() => {
      return browser.tabs.create({url: shot.creatingUrl});
    }).then((tab) => {
      openedTab = tab;
      sendEvent("internal", "open-shot-tab");
      return uploadShot(shot, imageBlob, thumbnailBlob);
    }).then(() => {
      return browser.tabs.update(openedTab.id, {url: shot.viewUrl, loadReplace: true}).then(
        null,
        (error) => {
          // FIXME: If https://bugzilla.mozilla.org/show_bug.cgi?id=1365718 is resolved,
          // use the errorCode added as an additional check:
          if ((/invalid tab id/i).test(error)) {
            // This happens if the tab was closed before the upload completed
            return browser.tabs.create({url: shot.viewUrl});
          }
          throw error;
        }
      );
    }).then(() => {
      catcher.watchPromise(communication.sendToBootstrap("incrementCount", {scalar: "upload"}));
      return shot.viewUrl;
    }).catch((error) => {
      browser.tabs.remove(openedTab.id);
      throw error;
    }));
  }));

  communication.register("screenshotPage", (sender, selectedPos, scroll) => {
    return screenshotPage(selectedPos, scroll);
  });

  function screenshotPage(pos, scroll) {
    pos = {
      top: pos.top - scroll.scrollY,
      left: pos.left - scroll.scrollX,
      bottom: pos.bottom - scroll.scrollY,
      right: pos.right - scroll.scrollX
    };
    pos.width = pos.right - pos.left;
    pos.height = pos.bottom - pos.top;
    return catcher.watchPromise(browser.tabs.captureVisibleTab(
      null,
      {format: "png"}
    ).then((dataUrl) => {
      const image = new Image();
      image.src = dataUrl;
      return new Promise((resolve, reject) => {
        image.onload = catcher.watchFunction(() => {
          const xScale = image.width / scroll.innerWidth;
          const yScale = image.height / scroll.innerHeight;
          const canvas = document.createElement("canvas");
          canvas.height = pos.height * yScale;
          canvas.width = pos.width * xScale;
          const context = canvas.getContext("2d");
          context.drawImage(
            image,
            pos.left * xScale, pos.top * yScale,
            pos.width * xScale, pos.height * yScale,
            0, 0,
            pos.width * xScale, pos.height * yScale
          );
          const result = canvas.toDataURL();
          resolve(result);
        });
      });
    }));
  }

  /** Combines two buffers or Uint8Array's */
  function concatBuffers(buffer1, buffer2) {
    const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);
    tmp.set(new Uint8Array(buffer1), 0);
    tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
    return tmp.buffer;
  }

  /** Creates a multipart TypedArray, given {name: value} fields
      and a files array in the format of
      [{fieldName: "NAME", filename: "NAME.png", blob: fileBlob}, {...}, ...]

      Returns {body, "content-type"}
      */
  function createMultipart(fields, files) {
    const boundary = "---------------------------ScreenshotBoundary" + Date.now();
    let body = [];
    for (const name in fields) {
      body.push("--" + boundary);
      body.push(`Content-Disposition: form-data; name="${name}"`);
      body.push("");
      body.push(fields[name]);
    }
    body.push("");
    body = body.join("\r\n");
    const enc = new TextEncoder("utf-8");
    body = enc.encode(body).buffer;

    const blobToArrayPromises = files.map(f => {
      return blobConverters.blobToArray(f.blob);
    });

    return Promise.all(blobToArrayPromises).then(buffers => {
      for (let i = 0; i < buffers.length; i++) {
        let filePart = [];
        filePart.push("--" + boundary);
        filePart.push(`Content-Disposition: form-data; name="${files[i].fieldName}"; filename="${files[i].filename}"`);
        filePart.push(`Content-Type: ${files[i].blob.type}`);
        filePart.push("");
        filePart.push("");
        filePart = filePart.join("\r\n");
        filePart = concatBuffers(enc.encode(filePart).buffer, buffers[i]);
        body = concatBuffers(body, filePart);
        body = concatBuffers(body, enc.encode("\r\n").buffer);
      }

      let tail = `\r\n--${boundary}--`;
      tail = enc.encode(tail);
      body = concatBuffers(body, tail.buffer);
      return {
        "content-type": `multipart/form-data; boundary=${boundary}`,
        body
      };
    });
  }

  function uploadShot(shot, blob, thumbnail) {
    let headers;
    return auth.authHeaders().then((_headers) => {
      headers = _headers;
      if (blob) {
        const files = [ {fieldName: "blob", filename: "screenshot.png", blob} ];
        if (thumbnail) {
          files.push({fieldName: "thumbnail", filename: "thumbnail.png", blob: thumbnail});
        }
        return createMultipart(
          {shot: JSON.stringify(shot)},

          files
        );
      }
      return {
        "content-type": "application/json",
        body: JSON.stringify(shot)
      };

    }).then((submission) => {
      headers["content-type"] = submission["content-type"];
      sendEvent("upload", "started", {eventValue: Math.floor(submission.body.length / 1000)});
      return fetch(shot.jsonUrl, {
        method: "PUT",
        mode: "cors",
        headers,
        body: submission.body
      });
    }).then((resp) => {
      if (!resp.ok) {
        sendEvent("upload-failed", `status-${resp.status}`);
        const exc = new Error(`Response failed with status ${resp.status}`);
        exc.popupMessage = "REQUEST_ERROR";
        throw exc;
      } else {
        sendEvent("upload", "success");
      }
    }, (error) => {
      // FIXME: I'm not sure what exceptions we can expect
      sendEvent("upload-failed", "connection");
      error.popupMessage = "CONNECTION_ERROR";
      throw error;
    });
  }

  return exports;
})();
PK
!<á¿¿webextension/blank.html<html></html>
PK
!<{ڌççwebextension/blobConverters.jsthis.blobConverters = (function() {
  const exports = {};

  exports.dataUrlToBlob = function(url) {
    const binary = atob(url.split(",", 2)[1]);
    let contentType = exports.getTypeFromDataUrl(url);
    if (contentType !== "image/png" && contentType !== "image/jpeg") {
      contentType = "image/png";
    }
    const data = Uint8Array.from(binary, char => char.charCodeAt(0));
    const blob = new Blob([data], {type: contentType});
    return blob;
  };

  exports.getTypeFromDataUrl = function(url) {
    let contentType = url.split(",", 1)[0];
    contentType = contentType.split(";", 1)[0];
    contentType = contentType.split(":", 2)[1];
    return contentType;
  };

  exports.blobToArray = function(blob) {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.addEventListener("loadend", function() {
        resolve(reader.result);
      });
      reader.readAsArrayBuffer(blob);
    });
  };

  exports.blobToDataUrl = function(blob) {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.addEventListener("loadend", function() {
        resolve(reader.result);
      });
      reader.readAsDataURL(blob);
    });
  };

  return exports;
})();
null;
PK
!<5ðü̂‚#webextension/build/buildSettings.jswindow.buildSettings = {
  defaultSentryDsn: "https://904ccdd4866247c092ae8fc1a4764a63:940d44bdc71d4daea133c19080ccd38d@sentry.prod.mozaws.net/224",
  logLevel: "" || "warn",
  captureText: ("" === "true"),
  uploadBinary: ("" === "true"),
  pngToJpegCutoff: parseInt("" || 2500000, 10),
  maxImageHeight: parseInt("" || 10000, 10),
  maxImageWidth: parseInt("" || 10000, 10)
};
null;

PK
!<h™­Þ6c6c(webextension/build/inlineSelectionCss.js/* Created from build/server/static/css/inline-selection.css */
window.inlineSelectionCss = `
.button, .highlight-button-cancel, .highlight-button-save, .highlight-button-download, .highlight-button-copy, .preview-button-save {
  display: flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: 3px;
  cursor: pointer;
  font-size: 16px;
  font-weight: 400;
  height: 40px;
  min-width: 40px;
  outline: none;
  padding: 0 10px;
  position: relative;
  text-align: center;
  text-decoration: none;
  transition: background 150ms cubic-bezier(0.07, 0.95, 0, 1), border 150ms cubic-bezier(0.07, 0.95, 0, 1);
  user-select: none;
  white-space: nowrap; }
  .button.small, .small.highlight-button-cancel, .small.highlight-button-save, .small.highlight-button-download, .small.highlight-button-copy, .small.preview-button-save {
    height: 32px;
    line-height: 32px;
    padding: 0 8px; }
  .button.active, .active.highlight-button-cancel, .active.highlight-button-save, .active.highlight-button-download, .active.highlight-button-copy, .active.preview-button-save {
    background-color: #dedede; }
  .button.tiny, .tiny.highlight-button-cancel, .tiny.highlight-button-save, .tiny.highlight-button-download, .tiny.highlight-button-copy, .tiny.preview-button-save {
    font-size: 14px;
    height: 26px;
    border: 1px solid #c7c7c7; }
    .button.tiny:hover, .tiny.highlight-button-cancel:hover, .tiny.highlight-button-save:hover, .tiny.highlight-button-download:hover, .tiny.highlight-button-copy:hover, .tiny.preview-button-save:hover, .button.tiny:focus, .tiny.highlight-button-cancel:focus, .tiny.highlight-button-save:focus, .tiny.highlight-button-download:focus, .tiny.highlight-button-copy:focus, .tiny.preview-button-save:focus {
      background: #ededf0;
      border-color: #989898; }
    .button.tiny:active, .tiny.highlight-button-cancel:active, .tiny.highlight-button-save:active, .tiny.highlight-button-download:active, .tiny.highlight-button-copy:active, .tiny.preview-button-save:active {
      background: #dedede;
      border-color: #989898; }
  .button.block-button, .block-button.highlight-button-cancel, .block-button.highlight-button-save, .block-button.highlight-button-download, .block-button.highlight-button-copy, .block-button.preview-button-save {
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    border: 0;
    border-right: 1px solid #c7c7c7;
    box-shadow: 0;
    border-radius: 0;
    flex-shrink: 0;
    font-size: 20px;
    height: 100px;
    line-height: 100%;
    overflow: hidden; }
    @media (max-width: 719px) {
      .button.block-button, .block-button.highlight-button-cancel, .block-button.highlight-button-save, .block-button.highlight-button-download, .block-button.highlight-button-copy, .block-button.preview-button-save {
        justify-content: flex-start;
        font-size: 16px;
        height: 72px;
        margin-right: 10px;
        padding: 0 5px; } }
    .button.block-button:hover, .block-button.highlight-button-cancel:hover, .block-button.highlight-button-save:hover, .block-button.highlight-button-download:hover, .block-button.highlight-button-copy:hover, .block-button.preview-button-save:hover {
      background: #ededf0; }
    .button.block-button:active, .block-button.highlight-button-cancel:active, .block-button.highlight-button-save:active, .block-button.highlight-button-download:active, .block-button.highlight-button-copy:active, .block-button.preview-button-save:active {
      background: #dedede; }
  .button.download, .download.highlight-button-cancel, .download.highlight-button-save, .download.highlight-button-download, .download.highlight-button-copy, .download.preview-button-save, .button.edit, .edit.highlight-button-cancel, .edit.highlight-button-save, .edit.highlight-button-download, .edit.highlight-button-copy, .edit.preview-button-save, .button.trash, .trash.highlight-button-cancel, .trash.highlight-button-save, .trash.highlight-button-download, .trash.highlight-button-copy, .trash.preview-button-save, .button.share, .share.highlight-button-cancel, .share.highlight-button-save, .share.highlight-button-download, .share.highlight-button-copy, .share.preview-button-save, .button.flag, .flag.highlight-button-cancel, .flag.highlight-button-save, .flag.highlight-button-download, .flag.highlight-button-copy, .flag.preview-button-save {
    background-repeat: no-repeat;
    background-size: 50%;
    background-position: center;
    margin-right: 10px;
    transition: background-color 150ms cubic-bezier(0.07, 0.95, 0, 1); }
  .button.download, .download.highlight-button-cancel, .download.highlight-button-save, .download.highlight-button-download, .download.highlight-button-copy, .download.preview-button-save {
    background-image: url("../img/icon-download.svg"); }
    .button.download:hover, .download.highlight-button-cancel:hover, .download.highlight-button-save:hover, .download.highlight-button-download:hover, .download.highlight-button-copy:hover, .download.preview-button-save:hover {
      background-color: #ededf0; }
    .button.download:active, .download.highlight-button-cancel:active, .download.highlight-button-save:active, .download.highlight-button-download:active, .download.highlight-button-copy:active, .download.preview-button-save:active {
      background-color: #dedede; }
  .button.share, .share.highlight-button-cancel, .share.highlight-button-save, .share.highlight-button-download, .share.highlight-button-copy, .share.preview-button-save {
    background-image: url("../img/icon-share.svg"); }
    .button.share:hover, .share.highlight-button-cancel:hover, .share.highlight-button-save:hover, .share.highlight-button-download:hover, .share.highlight-button-copy:hover, .share.preview-button-save:hover {
      background-color: #ededf0; }
    .button.share.active, .share.active.highlight-button-cancel, .share.active.highlight-button-save, .share.active.highlight-button-download, .share.active.highlight-button-copy, .share.active.preview-button-save, .button.share:active, .share.highlight-button-cancel:active, .share.highlight-button-save:active, .share.highlight-button-download:active, .share.highlight-button-copy:active, .share.preview-button-save:active {
      background-color: #dedede; }
  .button.share.newicon, .share.newicon.highlight-button-cancel, .share.newicon.highlight-button-save, .share.newicon.highlight-button-download, .share.newicon.highlight-button-copy, .share.newicon.preview-button-save {
    background-image: url("../img/icon-share-alternate.svg"); }
  .button.trash, .trash.highlight-button-cancel, .trash.highlight-button-save, .trash.highlight-button-download, .trash.highlight-button-copy, .trash.preview-button-save {
    background-image: url("../img/icon-trash.svg"); }
    .button.trash:hover, .trash.highlight-button-cancel:hover, .trash.highlight-button-save:hover, .trash.highlight-button-download:hover, .trash.highlight-button-copy:hover, .trash.preview-button-save:hover {
      background-color: #ededf0; }
    .button.trash:active, .trash.highlight-button-cancel:active, .trash.highlight-button-save:active, .trash.highlight-button-download:active, .trash.highlight-button-copy:active, .trash.preview-button-save:active {
      background-color: #dedede; }
  .button.edit, .edit.highlight-button-cancel, .edit.highlight-button-save, .edit.highlight-button-download, .edit.highlight-button-copy, .edit.preview-button-save {
    background-image: url("../img/icon-edit.svg"); }
    .button.edit:hover, .edit.highlight-button-cancel:hover, .edit.highlight-button-save:hover, .edit.highlight-button-download:hover, .edit.highlight-button-copy:hover, .edit.preview-button-save:hover {
      background-color: #ededf0; }
    .button.edit:active, .edit.highlight-button-cancel:active, .edit.highlight-button-save:active, .edit.highlight-button-download:active, .edit.highlight-button-copy:active, .edit.preview-button-save:active {
      background-color: #dedede; }
  .button.flag, .flag.highlight-button-cancel, .flag.highlight-button-save, .flag.highlight-button-download, .flag.highlight-button-copy, .flag.preview-button-save {
    background-image: url("../img/icon-flag.svg"); }
    .button.flag:hover, .flag.highlight-button-cancel:hover, .flag.highlight-button-save:hover, .flag.highlight-button-download:hover, .flag.highlight-button-copy:hover, .flag.preview-button-save:hover {
      background-color: #ededf0; }
    .button.flag:active, .flag.highlight-button-cancel:active, .flag.highlight-button-save:active, .flag.highlight-button-download:active, .flag.highlight-button-copy:active, .flag.preview-button-save:active {
      background-color: #dedede; }

.inverse-color-scheme {
  background: #38383d;
  color: #f9f9fa; }
  .inverse-color-scheme a {
    color: #e1e1e6; }

.default-color-scheme {
  background: #f9f9fa;
  color: #38383d; }
  .default-color-scheme a {
    color: #009ec0; }

.highlight-color-scheme {
  background: #009ec0;
  color: #fff; }
  .highlight-color-scheme a {
    color: #fff;
    text-decoration: underline; }

.alt-color-scheme {
  background: #38383d;
  color: #f9f9fa; }
  .alt-color-scheme h1 {
    color: #6f7fb6; }
  .alt-color-scheme a {
    color: #e1e1e6;
    text-decoration: underline; }

.button.primary, .primary.highlight-button-cancel, .highlight-button-save, .primary.highlight-button-download, .primary.highlight-button-copy, .preview-button-save {
  background-color: #009ec0;
  color: #fff; }
  .button.primary:hover, .primary.highlight-button-cancel:hover, .highlight-button-save:hover, .primary.highlight-button-download:hover, .primary.highlight-button-copy:hover, .preview-button-save:hover, .button.primary:focus, .primary.highlight-button-cancel:focus, .highlight-button-save:focus, .primary.highlight-button-download:focus, .primary.highlight-button-copy:focus, .preview-button-save:focus {
    background-color: #00819c; }
  .button.primary:active, .primary.highlight-button-cancel:active, .highlight-button-save:active, .primary.highlight-button-download:active, .primary.highlight-button-copy:active, .preview-button-save:active {
    background-color: #006c83; }

.button.secondary, .highlight-button-cancel, .secondary.highlight-button-save, .highlight-button-download, .highlight-button-copy, .secondary.preview-button-save {
  background-color: #f9f9fa;
  color: #38383d; }
  .button.secondary:hover, .highlight-button-cancel:hover, .secondary.highlight-button-save:hover, .highlight-button-download:hover, .highlight-button-copy:hover, .secondary.preview-button-save:hover {
    background-color: #ededf0; }
  .button.secondary:active, .highlight-button-cancel:active, .secondary.highlight-button-save:active, .highlight-button-download:active, .highlight-button-copy:active, .secondary.preview-button-save:active {
    background-color: #dedede; }

.button.transparent, .transparent.highlight-button-cancel, .transparent.highlight-button-save, .transparent.highlight-button-download, .transparent.highlight-button-copy, .transparent.preview-button-save {
  background-color: transparent;
  color: #38383d; }
  .button.transparent:hover, .transparent.highlight-button-cancel:hover, .transparent.highlight-button-save:hover, .transparent.highlight-button-download:hover, .transparent.highlight-button-copy:hover, .transparent.preview-button-save:hover {
    background-color: #ededf0; }
  .button.transparent:focus, .transparent.highlight-button-cancel:focus, .transparent.highlight-button-save:focus, .transparent.highlight-button-download:focus, .transparent.highlight-button-copy:focus, .transparent.preview-button-save:focus, .button.transparent:active, .transparent.highlight-button-cancel:active, .transparent.highlight-button-save:active, .transparent.highlight-button-download:active, .transparent.highlight-button-copy:active, .transparent.preview-button-save:active {
    background-color: #dedede; }

.button.warning, .warning.highlight-button-cancel, .warning.highlight-button-save, .warning.highlight-button-download, .warning.highlight-button-copy, .warning.preview-button-save {
  color: #fff;
  background: #d92215; }
  .button.warning:hover, .warning.highlight-button-cancel:hover, .warning.highlight-button-save:hover, .warning.highlight-button-download:hover, .warning.highlight-button-copy:hover, .warning.preview-button-save:hover, .button.warning:focus, .warning.highlight-button-cancel:focus, .warning.highlight-button-save:focus, .warning.highlight-button-download:focus, .warning.highlight-button-copy:focus, .warning.preview-button-save:focus {
    background: #b81d12; }
  .button.warning:active, .warning.highlight-button-cancel:active, .warning.highlight-button-save:active, .warning.highlight-button-download:active, .warning.highlight-button-copy:active, .warning.preview-button-save:active {
    background: #a11910; }

.subtitle-link {
  color: #009ec0; }

.loader {
  background: #2e2d30;
  border-radius: 2px;
  height: 4px;
  overflow: hidden;
  position: relative;
  width: 200px; }
  #shot-index .loader {
    background-color: #dedede; }

.loader-inner {
  animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
  background: #04d1e6;
  border-radius: 2px;
  height: 4px;
  transform: translateX(-40px);
  width: 50px; }

@keyframes bounce {
  0% {
    transform: translateX(-40px); }
  100% {
    transform: translate(190px); } }

@keyframes fade-in {
  0% {
    opacity: 0; }
  100% {
    opacity: 1; } }

@keyframes pop {
  0% {
    transform: scale(1); }
  97% {
    transform: scale(1.04); }
  100% {
    transform: scale(1); } }

@keyframes pulse {
  0% {
    opacity: 0.3;
    transform: scale(1); }
  70% {
    opacity: 0.25;
    transform: scale(1.04); }
  100% {
    opacity: 0.3;
    transform: scale(1); } }

@keyframes slide-left {
  0% {
    opacity: 0;
    transform: translate3d(160px, 0, 0); }
  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0); } }

@keyframes bounce-in {
  0% {
    opacity: 0;
    transform: scale(1); }
  60% {
    opacity: 1;
    transform: scale(1.02); }
  100% {
    transform: scale(1); } }

.mover-target {
  display: flex;
  align-items: center;
  justify-content: center;
  pointer-events: auto;
  position: absolute;
  z-index: 5; }

.highlight,
.mover-target {
  background-color: transparent;
  background-image: none; }

.mover-target,
.bghighlight {
  border: 0; }

.hover-highlight {
  animation: fade-in 125ms forwards cubic-bezier(0.07, 0.95, 0, 1);
  background: rgba(255, 255, 255, 0.2);
  border-radius: 1px;
  pointer-events: none;
  position: absolute;
  z-index: 10000000000; }
  .hover-highlight::before {
    border: 2px dashed rgba(255, 255, 255, 0.4);
    bottom: 0;
    content: "";
    left: 0;
    position: absolute;
    right: 0;
    top: 0; }
  body.hcm .hover-highlight {
    background-color: white;
    opacity: 0.2; }

.mover-target.direction-topLeft {
  cursor: nwse-resize;
  height: 60px;
  left: -30px;
  top: -30px;
  width: 60px; }

.mover-target.direction-top {
  cursor: ns-resize;
  height: 60px;
  left: 0;
  top: -30px;
  width: 100%;
  z-index: 4; }

.mover-target.direction-topRight {
  cursor: nesw-resize;
  height: 60px;
  right: -30px;
  top: -30px;
  width: 60px; }

.mover-target.direction-left {
  cursor: ew-resize;
  height: 100%;
  left: -30px;
  top: 0;
  width: 60px;
  z-index: 4; }

.mover-target.direction-right {
  cursor: ew-resize;
  height: 100%;
  right: -30px;
  top: 0;
  width: 60px;
  z-index: 4; }

.mover-target.direction-bottomLeft {
  bottom: -30px;
  cursor: nesw-resize;
  height: 60px;
  left: -30px;
  width: 60px; }

.mover-target.direction-bottom {
  bottom: -30px;
  cursor: ns-resize;
  height: 60px;
  left: 0;
  width: 100%;
  z-index: 4; }

.mover-target.direction-bottomRight {
  bottom: -30px;
  cursor: nwse-resize;
  height: 60px;
  right: -30px;
  width: 60px; }

.mover-target:hover .mover {
  transform: scale(1.05); }

.mover {
  background-color: #fff;
  border-radius: 50%;
  box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);
  height: 16px;
  opacity: 1;
  position: relative;
  transition: transform 125ms cubic-bezier(0.07, 0.95, 0, 1);
  width: 16px; }
  .small-selection .mover {
    height: 10px;
    width: 10px; }

.direction-topLeft .mover,
.direction-left .mover,
.direction-bottomLeft .mover {
  left: -1px; }

.direction-topLeft .mover,
.direction-top .mover,
.direction-topRight .mover {
  top: -1px; }

.direction-topRight .mover,
.direction-right .mover,
.direction-bottomRight .mover {
  right: -1px; }

.direction-bottomRight .mover,
.direction-bottom .mover,
.direction-bottomLeft .mover {
  bottom: -1px; }

.bghighlight {
  background-color: rgba(0, 0, 0, 0.7);
  position: absolute;
  z-index: 9999999999; }
  body.hcm .bghighlight {
    background-color: black;
    opacity: 0.7; }

.notice {
  display: flex;
  height: 41px;
  left: 50%;
  position: fixed;
  transform: translate(-50%, 0);
  transition: top 125ms ease-out, translate 125ms ease-out;
  user-select: none;
  will-change: top, translate;
  z-index: 10000000000; }
  .notice .notice-wrapper {
    align-items: center;
    background: #737373;
    border-radius: 100px;
    display: flex;
    flex-wrap: nowrap;
    justify-content: space-between;
    padding: 10px 15px; }
  .notice .notice-content {
    color: #fff;
    flex: 1;
    font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
    font-size: 14px;
    font-weight: bold;
    white-space: nowrap; }
  .notice .notice-help {
    background-image: url("MOZ_EXTENSION/icons/help-16.svg");
    background-position: center center;
    background-repeat: no-repeat;
    height: 16px;
    width: 16px; }

.notice-tooltip {
  background: #fff;
  border-radius: 3px;
  border: 1px solid #9d9d9e;
  bottom: 60px;
  color: #000;
  cursor: default;
  display: none;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  font-size: 14px;
  font-weight: normal;
  line-height: 22px;
  overflow-wrap: break-word;
  padding: 15px;
  position: absolute;
  right: -14px;
  white-space: normal;
  width: 300px;
  z-index: 10000000000;
  /* down-arrow for the tooltip */ }
  .notice:hover .notice-tooltip {
    display: block; }
  .notice-tooltip p {
    margin: 0; }
  .notice-tooltip ul {
    margin-bottom: 0; }
  .notice-tooltip::after {
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
    border-top: 10px solid #f9f9fa;
    content: "";
    height: 0;
    left: 86%;
    position: absolute;
    top: 100%;
    width: 0; }

.preview-overlay {
  align-items: center;
  background-color: rgba(0, 0, 0, 0.7);
  display: flex;
  height: 100%;
  justify-content: center;
  left: 0;
  margin: 0;
  padding: 0;
  position: fixed;
  top: 0;
  width: 100%;
  z-index: 9999999999; }
  body.hcm .preview-overlay {
    background-color: black;
    opacity: 0.7; }

.precision-cursor {
  cursor: crosshair; }

.highlight {
  border-radius: 2px;
  border: 2px dashed rgba(255, 255, 255, 0.8);
  box-sizing: border-box;
  cursor: move;
  position: absolute;
  z-index: 9999999999; }
  body.hcm .highlight {
    border: 2px dashed white;
    opacity: 1.0; }

.highlight-buttons {
  display: flex;
  align-items: center;
  justify-content: center;
  bottom: -55px;
  position: absolute;
  z-index: 6; }
  html[dir="rtl"] .highlight-buttons {
    left: 5px; }
  html[dir="ltr"] .highlight-buttons {
    right: 5px; }
  .bottom-selection .highlight-buttons {
    bottom: 5px; }
  .left-selection .highlight-buttons {
    right: auto;
    left: 5px; }

.highlight-button-cancel {
  border: 1px solid #dedede;
  margin: 5px;
  width: 40px; }

.highlight-button-save {
  font-size: 18px;
  margin: 5px;
  min-width: 80px; }
  html[dir="ltr"] .highlight-button-save img {
    padding-right: 8px; }
  html[dir="rtl"] .highlight-button-save img {
    padding-left: 8px; }

.highlight-button-download {
  border: 1px solid #dedede;
  display: block;
  margin: 5px;
  width: 40px; }
  .highlight-button-download.download-only-button {
    font-size: 18px;
    width: auto; }
    .highlight-button-download.download-only-button img {
      height: 16px;
      width: 16px; }
      html[dir="ltr"] .highlight-button-download.download-only-button img {
        padding-right: 8px; }
      html[dir="rtl"] .highlight-button-download.download-only-button img {
        padding-left: 8px; }

.highlight-button-copy {
  border: 1px solid #dedede;
  display: block;
  margin: 5px;
  width: 40px; }

.pixel-dimensions {
  position: absolute;
  pointer-events: none;
  font-weight: bold;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  font-size: 70%;
  color: #000;
  text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff; }

.preview-buttons {
  display: flex;
  align-items: center;
  justify-content: center;
  position: absolute;
  top: -2px; }
  html[dir="rtl"] .preview-buttons {
    left: 0; }
  html[dir="ltr"] .preview-buttons {
    right: 0; }

.preview-image {
  position: relative;
  height: 80%;
  max-width: 100%;
  margin: auto 2em;
  text-align: center;
  animation-delay: 50ms;
  animation: bounce-in 300ms forwards ease-in-out; }

.preview-image > img {
  display: block;
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 90%;
  margin: 50px auto;
  border: 1px solid rgba(255, 255, 255, 0.8); }

.preview-button-save {
  font-size: 18px;
  margin: 5px;
  min-width: 80px; }
  html[dir="ltr"] .preview-button-save img {
    padding-right: 8px; }
  html[dir="rtl"] .preview-button-save img {
    padding-left: 8px; }

.fixed-container {
  align-items: center;
  display: flex;
  flex-direction: column;
  height: 100vh;
  justify-content: center;
  left: 0;
  margin: 0;
  padding: 0;
  pointer-events: none;
  position: fixed;
  top: 0;
  width: 100%; }

.face-container {
  position: relative;
  width: 64px;
  height: 64px; }

.face {
  width: 62.4px;
  height: 62.4px;
  display: block;
  background-image: url("MOZ_EXTENSION/icons/icon-welcome-face-without-eyes.svg"); }

.eye {
  background-color: #fff;
  width: 10.8px;
  height: 14.6px;
  position: absolute;
  border-radius: 100%;
  overflow: hidden;
  left: 16.4px;
  top: 19.8px; }

.eyeball {
  position: absolute;
  width: 6px;
  height: 6px;
  background-color: #000;
  border-radius: 50%;
  left: 2.4px;
  top: 4.3px;
  z-index: 10; }

.left {
  margin-left: 0; }

.right {
  margin-left: 20px; }

.preview-instructions {
  display: flex;
  align-items: center;
  justify-content: center;
  animation: pulse 125mm cubic-bezier(0.07, 0.95, 0, 1);
  color: #fff;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  font-size: 24px;
  line-height: 32px;
  text-align: center;
  padding-top: 20px;
  width: 400px;
  user-select: none; }

.cancel-shot {
  background-color: transparent;
  cursor: pointer;
  outline: none;
  border-radius: 3px;
  border: 1px #9b9b9b solid;
  color: #fff;
  cursor: pointer;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  font-size: 16px;
  margin-top: 40px;
  padding: 10px 25px;
  pointer-events: all; }

.myshots-all-buttons-container {
  display: flex;
  flex-direction: row-reverse;
  background: #f5f5f5;
  border-radius: 2px;
  box-sizing: border-box;
  height: 80px;
  padding: 8px;
  position: absolute;
  right: 5px;
  top: 5px; }
  html[dir="rtl"] .myshots-all-buttons-container {
    left: 5px;
    right: inherit; }
  .myshots-all-buttons-container .spacer {
    background-color: #c9c9c9;
    flex: 0 0 1px;
    height: 80px;
    margin: 0 10px;
    position: relative;
    top: -8px; }
  .myshots-all-buttons-container button {
    display: flex;
    align-items: center;
    flex-direction: column;
    justify-content: flex-end;
    background-color: #f5f5f5;
    background-position: center top;
    background-repeat: no-repeat;
    background-size: 46px 46px;
    border: 1px solid transparent;
    cursor: pointer;
    height: 100%;
    min-width: 90px;
    padding: 46px 5px 5px;
    pointer-events: all;
    transition: border 150ms cubic-bezier(0.07, 0.95, 0, 1), background-color 150ms cubic-bezier(0.07, 0.95, 0, 1);
    white-space: nowrap; }
    .myshots-all-buttons-container button:hover {
      background-color: #ebebeb;
      border: 1px solid #c7c7c7; }
    .myshots-all-buttons-container button:active {
      background-color: #dedede;
      border: 1px solid #989898; }
  .myshots-all-buttons-container .myshots-button {
    background-image: url("MOZ_EXTENSION/icons/menu-myshot.svg"); }
  .myshots-all-buttons-container .full-page {
    background-image: url("MOZ_EXTENSION/icons/menu-fullpage.svg"); }
  .myshots-all-buttons-container .visible {
    background-image: url("MOZ_EXTENSION/icons/menu-visible.svg"); }

.myshots-button-container {
  display: flex;
  align-items: center;
  justify-content: center; }

@keyframes pulse {
  0% {
    transform: scale(1); }
  50% {
    transform: scale(1.06); }
  100% {
    transform: scale(1); } }

@keyframes fade-in {
  0% {
    opacity: 0; }
  100% {
    opacity: 1; } }

`;
null;

PK
!<½WÊíí#webextension/build/onboardingCss.js/* Created from build/server/static/css/onboarding.css */
window.onboardingCss = `
.loader {
  background: #2e2d30;
  border-radius: 2px;
  height: 4px;
  overflow: hidden;
  position: relative;
  width: 200px; }
  #shot-index .loader {
    background-color: #dedede; }

.loader-inner {
  animation: bounce infinite alternate 1250ms cubic-bezier(0.7, 0, 0.3, 1);
  background: #04d1e6;
  border-radius: 2px;
  height: 4px;
  transform: translateX(-40px);
  width: 50px; }

@keyframes bounce {
  0% {
    transform: translateX(-40px); }
  100% {
    transform: translate(190px); } }

@keyframes fade-in {
  0% {
    opacity: 0; }
  100% {
    opacity: 1; } }

@keyframes pop {
  0% {
    transform: scale(1); }
  97% {
    transform: scale(1.04); }
  100% {
    transform: scale(1); } }

@keyframes pulse {
  0% {
    opacity: 0.3;
    transform: scale(1); }
  70% {
    opacity: 0.25;
    transform: scale(1.04); }
  100% {
    opacity: 0.3;
    transform: scale(1); } }

@keyframes slide-left {
  0% {
    opacity: 0;
    transform: translate3d(160px, 0, 0); }
  100% {
    opacity: 1;
    transform: translate3d(0, 0, 0); } }

@keyframes bounce-in {
  0% {
    opacity: 0;
    transform: scale(1); }
  60% {
    opacity: 1;
    transform: scale(1.02); }
  100% {
    transform: scale(1); } }

html,
body {
  box-sizing: border-box;
  font-family: -apple-system, BlinkMacSystemFont, "segoe ui", "helvetica neue", helvetica, ubuntu, roboto, noto, arial, sans-serif;
  height: 100%;
  margin: 0;
  width: 100%; }

#slide-overlay {
  display: flex;
  align-items: center;
  flex-direction: column;
  justify-content: center;
  animation: fade-in 250ms forwards cubic-bezier(0.07, 0.95, 0, 1);
  background: rgba(0, 0, 0, 0.8);
  height: 100%;
  opacity: 0;
  width: 100%; }

#slide-container {
  animation-delay: 50ms;
  animation: fade-in 250ms forwards cubic-bezier(0.07, 0.95, 0, 1);
  opacity: 0; }

.slide {
  display: flex;
  align-items: center;
  flex-direction: column;
  justify-content: center;
  background-color: #f9f9fa;
  border-radius: 5px;
  height: 520px;
  overflow: hidden;
  width: 700px; }
  .slide .slide-image {
    background-size: 700px 378px;
    flex: 0 0 360px;
    font-size: 16px;
    width: 100%; }
  .slide .slide-content {
    display: flex;
    align-items: center;
    flex-direction: column;
    justify-content: center;
    box-sizing: border-box;
    flex: 0 0 160px;
    padding: 5px;
    text-align: center; }
  .slide h1 {
    font-size: 30px;
    font-weight: 400;
    margin: 0 0 10px; }
    .slide h1 sup {
      background: #00d1e6;
      border-radius: 2px;
      color: #fff;
      font-size: 16px;
      margin-left: 5px;
      padding: 2px; }
  .slide p {
    animation-duration: 350ms;
    font-size: 16px;
    line-height: 23px;
    margin: 0;
    width: 75%; }
  .slide .slide-content-aligner h1 {
    font-size: 34px; }
  .slide .slide-content-aligner p {
    margin: 0 auto; }
  .slide .onboarding-legal-notice {
    font-size: 12px;
    color: #858585; }
    .slide .onboarding-legal-notice a {
      color: #009ec0;
      text-decoration: none; }
  .slide:not(.slide-1) h1 {
    opacity: 0;
    transform: translate3d(160px, 0, 0);
    animation: slide-left 500ms forwards cubic-bezier(0.07, 0.95, 0, 1); }
  .slide:not(.slide-1) p {
    opacity: 0;
    transform: translate3d(160px, 0, 0);
    animation: slide-left 600ms forwards cubic-bezier(0.07, 0.95, 0, 1); }
  .slide:not(.slide-1) .slide-image {
    background-color: #00d1e6; }
  .slide.slide-1 {
    background: #fff; }
    .slide.slide-1 .slide-content {
      justify-content: space-between;
      width: 100%; }

.slide-1,
.slide-2,
.slide-3,
.slide-4,
.slide-5 {
  display: none; }

.active-slide-1 .slide-1,
.active-slide-2 .slide-2,
.active-slide-3 .slide-3,
.active-slide-4 .slide-4,
.active-slide-5 .slide-5 {
  display: flex; }

#slide-status-container {
  display: flex;
  align-items: center;
  justify-content: center;
  padding-top: 15px; }

.goto-slide {
  background: transparent;
  background-color: #f9f9fa;
  border-radius: 50%;
  border: 0;
  flex: 0 0 9px;
  height: 9px;
  margin: 0 4px;
  opacity: 0.7;
  padding: 0;
  transition: height 100ms cubic-bezier(0.07, 0.95, 0, 1), opacity 100ms cubic-bezier(0.07, 0.95, 0, 1); }

.goto-slide:hover {
  opacity: 1; }

.active-slide-1 .goto-slide-1,
.active-slide-2 .goto-slide-2,
.active-slide-3 .goto-slide-3,
.active-slide-4 .goto-slide-4,
.active-slide-5 .goto-slide-5 {
  opacity: 1;
  transform: scale(1.1); }

#prev, #next,
#done {
  background-color: #f0f0f0;
  border-radius: 50%;
  border: 0;
  box-shadow: 0 0 12px rgba(0, 0, 0, 0.2);
  display: inline-block;
  height: 70px;
  margin-top: -70px;
  position: absolute;
  text-align: center;
  top: 50%;
  transition: background-color 150ms cubic-bezier(0.07, 0.95, 0, 1), background-size 250ms cubic-bezier(0.07, 0.95, 0, 1);
  width: 70px; }

#prev {
  background-image: url("MOZ_EXTENSION/icons/back.svg");
  left: 50%; }
  html[dir="ltr"] #prev {
    margin-left: -385px; }
  html[dir="rtl"] #prev {
    margin-left: 315px; }

#next,
#done {
  left: 50%; }
  html[dir="ltr"] #next, html[dir="ltr"]
  #done {
    margin-left: 315px; }
  html[dir="rtl"] #next, html[dir="rtl"]
  #done {
    margin-left: -385px; }

#prev,
#next,
#done {
  background-position: center center;
  background-repeat: no-repeat;
  background-size: 20px 20px; }
  #prev:hover,
  #next:hover,
  #done:hover {
    background-color: #fff;
    background-size: 22px 22px; }
  #prev:active,
  #next:active,
  #done:active {
    background-color: #fff;
    background-size: 24px 24px; }

#next {
  background-image: url("MOZ_EXTENSION/icons/back.svg");
  transform: rotate(180deg); }
  .active-slide-1 #next {
    background-image: url("MOZ_EXTENSION/icons/back-highlight.svg"); }

[dir='rtl'] #next {
  transform: rotate(0deg); }

[dir='rtl'] #prev {
  transform: rotate(180deg); }

#skip {
  background: none;
  border: 0;
  color: #fff;
  font-size: 16px;
  left: 50%;
  margin-left: -330px;
  margin-top: 257px;
  opacity: 0.7;
  position: absolute;
  top: 50%;
  transition: opacity 100ms cubic-bezier(0.07, 0.95, 0, 1);
  z-index: 10; }

#skip:hover {
  opacity: 1; }

.active-slide-1 #prev,
.active-slide-5 #next {
  display: none; }

#done {
  background-image: url("MOZ_EXTENSION/icons/done.svg");
  display: none; }

.active-slide-5 #done {
  display: inline-block; }

/* for smaller screen sizes */
@media screen and (max-width: 768px) {
  .slide {
    height: 360px;
    width: 450px; }
    .slide .slide-image {
      background-size: contain;
      background-repeat: no-repeat;
      background-position: center;
      flex: 0 0 200px; }
    .slide .slide-content {
      flex: 0 0 160px; }
      .slide .slide-content h1 {
        font-size: 24px; }
      .slide .slide-content p {
        font-size: 14px;
        line-height: 21px;
        width: 85%; }
      .slide .slide-content .onboarding-legal-notice {
        font-size: 10px;
        line-height: 16px; }
  #skip {
    margin-left: -205px;
    margin-top: 177px; }
  #prev {
    margin-left: -260px; }
  #next,
  #done {
    margin-left: 190px; } }

`;
null;

PK
!<œ¬Á”
”
$webextension/build/onboardingHtml.js/* Created from addon/webextension/onboarding/slides.html */
window.onboardingHtml = `
<!DOCTYPE html>
<html>
  <head>
    <!-- onboarding.scss is automatically inserted here: -->
    <style></style>
    <!-- Here and in onboarding.scss use MOZ_EXTENSION/path to refer to local files -->
  </head>
  <body>
    <div id="slide-overlay">
      <!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
      <div id="slide-container" data-number-of-slides="5" class="active-slide-1">
        <div class="slide slide-1">
          <!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
          <div class="slide-content">
            <div class="slide-content-aligner">
              <h1><span><strong>Firefox</strong> Screenshots</span><sup>Beta</sup></h1>
              <p data-l10n-id="tourBodyIntro"></p>
            </div>
            <p class="onboarding-legal-notice"><!-- Substituted with termsAndPrivacyNotice --></p>
          </div>
        </div>
        <div class="slide slide-2">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-2.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderPageAction"></h1>
            <p data-l10n-id="tourBodyPageAction"></p>
          </div>
        </div>
        <div class="slide slide-3">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-3.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderClickAndDrag"></h1>
            <p data-l10n-id="tourBodyClickAndDrag"></p>
          </div>
        </div>
        <div class="slide slide-4">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-4.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderFullPage"></h1>
            <p data-l10n-id="tourBodyFullPage"></p>
          </div>
        </div>
        <div class="slide slide-5">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-5.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderDownloadUpload"></h1>
            <p data-l10n-id="tourBodyDownloadUpload"></p>
          </div>
        </div>

        <!-- Clickable elements should be buttons for accessibility -->
        <button id="skip" data-l10n-id="tourSkip" tabindex=1>Skip</button>
        <button id="prev" tabindex=2 data-l10n-label-id="tourPrevious"></button>
        <button id="next" tabindex=3 data-l10n-label-id="tourNext"></button>
        <button id="done" tabindex=4 data-l10n-label-id="tourDone"></button>
        <div id="slide-status-container">
          <button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
          <button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
          <button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
          <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
          <button class="goto-slide goto-slide-5" data-number="5" tabindex=8></button>
        </div>
        <!-- FIXME: Need to put in privacy / etc links -->
      </div>
    </div>
  </body>
</html>

`;
null;

PK
!<^Eh
Ø
Øwebextension/build/raven.js/*! Raven.js 3.25.2 (30b6d4e) | github.com/getsentry/raven-js */

/*
 * Includes TraceKit
 * https://github.com/getsentry/TraceKit
 *
 * Copyright 2018 Matt Robenolt and other contributors
 * Released under the BSD license
 * https://github.com/getsentry/raven-js/blob/master/LICENSE
 *
 */

(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Raven = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
function RavenConfigError(message) {
  this.name = 'RavenConfigError';
  this.message = message;
}
RavenConfigError.prototype = new Error();
RavenConfigError.prototype.constructor = RavenConfigError;

module.exports = RavenConfigError;

},{}],2:[function(_dereq_,module,exports){
var utils = _dereq_(5);

var wrapMethod = function(console, level, callback) {
  var originalConsoleLevel = console[level];
  var originalConsole = console;

  if (!(level in console)) {
    return;
  }

  var sentryLevel = level === 'warn' ? 'warning' : level;

  console[level] = function() {
    var args = [].slice.call(arguments);

    var msg = utils.safeJoin(args, ' ');
    var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};

    if (level === 'assert') {
      if (args[0] === false) {
        // Default browsers message
        msg =
          'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');
        data.extra.arguments = args.slice(1);
        callback && callback(msg, data);
      }
    } else {
      callback && callback(msg, data);
    }

    // this fails for some browsers. :(
    if (originalConsoleLevel) {
      // IE9 doesn't allow calling apply on console functions directly
      // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
      Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);
    }
  };
};

module.exports = {
  wrapMethod: wrapMethod
};

},{"5":5}],3:[function(_dereq_,module,exports){
(function (global){
/*global XDomainRequest:false */

var TraceKit = _dereq_(6);
var stringify = _dereq_(7);
var md5 = _dereq_(8);
var RavenConfigError = _dereq_(1);

var utils = _dereq_(5);
var isErrorEvent = utils.isErrorEvent;
var isDOMError = utils.isDOMError;
var isDOMException = utils.isDOMException;
var isError = utils.isError;
var isObject = utils.isObject;
var isPlainObject = utils.isPlainObject;
var isUndefined = utils.isUndefined;
var isFunction = utils.isFunction;
var isString = utils.isString;
var isArray = utils.isArray;
var isEmptyObject = utils.isEmptyObject;
var each = utils.each;
var objectMerge = utils.objectMerge;
var truncate = utils.truncate;
var objectFrozen = utils.objectFrozen;
var hasKey = utils.hasKey;
var joinRegExp = utils.joinRegExp;
var urlencode = utils.urlencode;
var uuid4 = utils.uuid4;
var htmlTreeAsString = utils.htmlTreeAsString;
var isSameException = utils.isSameException;
var isSameStacktrace = utils.isSameStacktrace;
var parseUrl = utils.parseUrl;
var fill = utils.fill;
var supportsFetch = utils.supportsFetch;
var supportsReferrerPolicy = utils.supportsReferrerPolicy;
var serializeKeysForMessage = utils.serializeKeysForMessage;
var serializeException = utils.serializeException;
var sanitize = utils.sanitize;

var wrapConsoleMethod = _dereq_(2).wrapMethod;

var dsnKeys = 'source protocol user pass host port path'.split(' '),
  dsnPattern = /^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;

function now() {
  return +new Date();
}

// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
var _window =
  typeof window !== 'undefined'
    ? window
    : typeof global !== 'undefined'
      ? global
      : typeof self !== 'undefined'
        ? self
        : {};
var _document = _window.document;
var _navigator = _window.navigator;

function keepOriginalCallback(original, callback) {
  return isFunction(callback)
    ? function(data) {
        return callback(data, original);
      }
    : callback;
}

// First, check for JSON support
// If there is no JSON, we no-op the core features of Raven
// since JSON is required to encode the payload
function Raven() {
  this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);
  // Raven can run in contexts where there's no document (react-native)
  this._hasDocument = !isUndefined(_document);
  this._hasNavigator = !isUndefined(_navigator);
  this._lastCapturedException = null;
  this._lastData = null;
  this._lastEventId = null;
  this._globalServer = null;
  this._globalKey = null;
  this._globalProject = null;
  this._globalContext = {};
  this._globalOptions = {
    // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin
    release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,
    logger: 'javascript',
    ignoreErrors: [],
    ignoreUrls: [],
    whitelistUrls: [],
    includePaths: [],
    headers: null,
    collectWindowErrors: true,
    captureUnhandledRejections: true,
    maxMessageLength: 0,
    // By default, truncates URL values to 250 chars
    maxUrlLength: 250,
    stackTraceLimit: 50,
    autoBreadcrumbs: true,
    instrument: true,
    sampleRate: 1,
    sanitizeKeys: []
  };
  this._fetchDefaults = {
    method: 'POST',
    keepalive: true,
    // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
    // https://caniuse.com/#feat=referrer-policy
    // It doesn't. And it throw exception instead of ignoring this parameter...
    // REF: https://github.com/getsentry/raven-js/issues/1233
    referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''
  };
  this._ignoreOnError = 0;
  this._isRavenInstalled = false;
  this._originalErrorStackTraceLimit = Error.stackTraceLimit;
  // capture references to window.console *and* all its methods first
  // before the console plugin has a chance to monkey patch
  this._originalConsole = _window.console || {};
  this._originalConsoleMethods = {};
  this._plugins = [];
  this._startTime = now();
  this._wrappedBuiltIns = [];
  this._breadcrumbs = [];
  this._lastCapturedEvent = null;
  this._keypressTimeout;
  this._location = _window.location;
  this._lastHref = this._location && this._location.href;
  this._resetBackoff();

  // eslint-disable-next-line guard-for-in
  for (var method in this._originalConsole) {
    this._originalConsoleMethods[method] = this._originalConsole[method];
  }
}

/*
 * The core Raven singleton
 *
 * @this {Raven}
 */

Raven.prototype = {
  // Hardcode version string so that raven source can be loaded directly via
  // webpack (using a build step causes webpack #1617). Grunt verifies that
  // this value matches package.json during build.
  //   See: https://github.com/getsentry/raven-js/issues/465
  VERSION: '3.25.2',

  debug: false,

  TraceKit: TraceKit, // alias to TraceKit

  /*
     * Configure Raven with a DSN and extra options
     *
     * @param {string} dsn The public Sentry DSN
     * @param {object} options Set of global options [optional]
     * @return {Raven}
     */
  config: function(dsn, options) {
    var self = this;

    if (self._globalServer) {
      this._logDebug('error', 'Error: Raven has already been configured');
      return self;
    }
    if (!dsn) return self;

    var globalOptions = self._globalOptions;

    // merge in options
    if (options) {
      each(options, function(key, value) {
        // tags and extra are special and need to be put into context
        if (key === 'tags' || key === 'extra' || key === 'user') {
          self._globalContext[key] = value;
        } else {
          globalOptions[key] = value;
        }
      });
    }

    self.setDSN(dsn);

    // "Script error." is hard coded into browsers for errors that it can't read.
    // this is the result of a script being pulled in from an external domain and CORS.
    globalOptions.ignoreErrors.push(/^Script error\.?$/);
    globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/);

    // join regexp rules into one big rule
    globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
    globalOptions.ignoreUrls = globalOptions.ignoreUrls.length
      ? joinRegExp(globalOptions.ignoreUrls)
      : false;
    globalOptions.whitelistUrls = globalOptions.whitelistUrls.length
      ? joinRegExp(globalOptions.whitelistUrls)
      : false;
    globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
    globalOptions.maxBreadcrumbs = Math.max(
      0,
      Math.min(globalOptions.maxBreadcrumbs || 100, 100)
    ); // default and hard limit is 100

    var autoBreadcrumbDefaults = {
      xhr: true,
      console: true,
      dom: true,
      location: true,
      sentry: true
    };

    var autoBreadcrumbs = globalOptions.autoBreadcrumbs;
    if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {
      autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);
    } else if (autoBreadcrumbs !== false) {
      autoBreadcrumbs = autoBreadcrumbDefaults;
    }
    globalOptions.autoBreadcrumbs = autoBreadcrumbs;

    var instrumentDefaults = {
      tryCatch: true
    };

    var instrument = globalOptions.instrument;
    if ({}.toString.call(instrument) === '[object Object]') {
      instrument = objectMerge(instrumentDefaults, instrument);
    } else if (instrument !== false) {
      instrument = instrumentDefaults;
    }
    globalOptions.instrument = instrument;

    TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;

    // return for chaining
    return self;
  },

  /*
     * Installs a global window.onerror error handler
     * to capture and report uncaught exceptions.
     * At this point, install() is required to be called due
     * to the way TraceKit is set up.
     *
     * @return {Raven}
     */
  install: function() {
    var self = this;
    if (self.isSetup() && !self._isRavenInstalled) {
      TraceKit.report.subscribe(function() {
        self._handleOnErrorStackInfo.apply(self, arguments);
      });

      if (self._globalOptions.captureUnhandledRejections) {
        self._attachPromiseRejectionHandler();
      }

      self._patchFunctionToString();

      if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {
        self._instrumentTryCatch();
      }

      if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();

      // Install all of the plugins
      self._drainPlugins();

      self._isRavenInstalled = true;
    }

    Error.stackTraceLimit = self._globalOptions.stackTraceLimit;
    return this;
  },

  /*
     * Set the DSN (can be called multiple time unlike config)
     *
     * @param {string} dsn The public Sentry DSN
     */
  setDSN: function(dsn) {
    var self = this,
      uri = self._parseDSN(dsn),
      lastSlash = uri.path.lastIndexOf('/'),
      path = uri.path.substr(1, lastSlash);

    self._dsn = dsn;
    self._globalKey = uri.user;
    self._globalSecret = uri.pass && uri.pass.substr(1);
    self._globalProject = uri.path.substr(lastSlash + 1);

    self._globalServer = self._getGlobalServer(uri);

    self._globalEndpoint =
      self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';

    // Reset backoff state since we may be pointing at a
    // new project/server
    this._resetBackoff();
  },

  /*
     * Wrap code within a context so Raven can capture errors
     * reliably across domains that is executed immediately.
     *
     * @param {object} options A specific set of options for this context [optional]
     * @param {function} func The callback to be immediately executed within the context
     * @param {array} args An array of arguments to be called with the callback [optional]
     */
  context: function(options, func, args) {
    if (isFunction(options)) {
      args = func || [];
      func = options;
      options = undefined;
    }

    return this.wrap(options, func).apply(this, args);
  },

  /*
     * Wrap code within a context and returns back a new function to be executed
     *
     * @param {object} options A specific set of options for this context [optional]
     * @param {function} func The function to be wrapped in a new context
     * @param {function} func A function to call before the try/catch wrapper [optional, private]
     * @return {function} The newly wrapped functions with a context
     */
  wrap: function(options, func, _before) {
    var self = this;
    // 1 argument has been passed, and it's not a function
    // so just return it
    if (isUndefined(func) && !isFunction(options)) {
      return options;
    }

    // options is optional
    if (isFunction(options)) {
      func = options;
      options = undefined;
    }

    // At this point, we've passed along 2 arguments, and the second one
    // is not a function either, so we'll just return the second argument.
    if (!isFunction(func)) {
      return func;
    }

    // We don't wanna wrap it twice!
    try {
      if (func.__raven__) {
        return func;
      }

      // If this has already been wrapped in the past, return that
      if (func.__raven_wrapper__) {
        return func.__raven_wrapper__;
      }
    } catch (e) {
      // Just accessing custom props in some Selenium environments
      // can cause a "Permission denied" exception (see raven-js#495).
      // Bail on wrapping and return the function as-is (defers to window.onerror).
      return func;
    }

    function wrapped() {
      var args = [],
        i = arguments.length,
        deep = !options || (options && options.deep !== false);

      if (_before && isFunction(_before)) {
        _before.apply(this, arguments);
      }

      // Recursively wrap all of a function's arguments that are
      // functions themselves.
      while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];

      try {
        // Attempt to invoke user-land function
        // NOTE: If you are a Sentry user, and you are seeing this stack frame, it
        //       means Raven caught an error invoking your application code. This is
        //       expected behavior and NOT indicative of a bug with Raven.js.
        return func.apply(this, args);
      } catch (e) {
        self._ignoreNextOnError();
        self.captureException(e, options);
        throw e;
      }
    }

    // copy over properties of the old function
    for (var property in func) {
      if (hasKey(func, property)) {
        wrapped[property] = func[property];
      }
    }
    wrapped.prototype = func.prototype;

    func.__raven_wrapper__ = wrapped;
    // Signal that this function has been wrapped/filled already
    // for both debugging and to prevent it to being wrapped/filled twice
    wrapped.__raven__ = true;
    wrapped.__orig__ = func;

    return wrapped;
  },

  /**
   * Uninstalls the global error handler.
   *
   * @return {Raven}
   */
  uninstall: function() {
    TraceKit.report.uninstall();

    this._detachPromiseRejectionHandler();
    this._unpatchFunctionToString();
    this._restoreBuiltIns();
    this._restoreConsole();

    Error.stackTraceLimit = this._originalErrorStackTraceLimit;
    this._isRavenInstalled = false;

    return this;
  },

  /**
   * Callback used for `unhandledrejection` event
   *
   * @param {PromiseRejectionEvent} event An object containing
   *   promise: the Promise that was rejected
   *   reason: the value with which the Promise was rejected
   * @return void
   */
  _promiseRejectionHandler: function(event) {
    this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);
    this.captureException(event.reason, {
      extra: {
        unhandledPromiseRejection: true
      }
    });
  },

  /**
   * Installs the global promise rejection handler.
   *
   * @return {raven}
   */
  _attachPromiseRejectionHandler: function() {
    this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);
    _window.addEventListener &&
      _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);
    return this;
  },

  /**
   * Uninstalls the global promise rejection handler.
   *
   * @return {raven}
   */
  _detachPromiseRejectionHandler: function() {
    _window.removeEventListener &&
      _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);
    return this;
  },

  /**
   * Manually capture an exception and send it over to Sentry
   *
   * @param {error} ex An exception to be logged
   * @param {object} options A specific set of options for this error [optional]
   * @return {Raven}
   */
  captureException: function(ex, options) {
    options = objectMerge({trimHeadFrames: 0}, options ? options : {});

    if (isErrorEvent(ex) && ex.error) {
      // If it is an ErrorEvent with `error` property, extract it to get actual Error
      ex = ex.error;
    } else if (isDOMError(ex) || isDOMException(ex)) {
      // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
      // then we just extract the name and message, as they don't provide anything else
      // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
      // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
      var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');
      var message = ex.message ? name + ': ' + ex.message : name;

      return this.captureMessage(
        message,
        objectMerge(options, {
          // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well
          // but it's barely any overhead so we may at least try
          stacktrace: true,
          trimHeadFrames: options.trimHeadFrames + 1
        })
      );
    } else if (isError(ex)) {
      // we have a real Error object
      ex = ex;
    } else if (isPlainObject(ex)) {
      // If it is plain Object, serialize it manually and extract options
      // This will allow us to group events based on top-level keys
      // which is much better than creating new group when any key/value change
      options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);
      ex = new Error(options.message);
    } else {
      // If none of previous checks were valid, then it means that
      // it's not a DOMError/DOMException
      // it's not a plain Object
      // it's not a valid ErrorEvent (one with an error property)
      // it's not an Error
      // So bail out and capture it as a simple message:
      return this.captureMessage(
        ex,
        objectMerge(options, {
          stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace
          trimHeadFrames: options.trimHeadFrames + 1
        })
      );
    }

    // Store the raw exception object for potential debugging and introspection
    this._lastCapturedException = ex;

    // TraceKit.report will re-raise any exception passed to it,
    // which means you have to wrap it in try/catch. Instead, we
    // can wrap it here and only re-raise if TraceKit.report
    // raises an exception different from the one we asked to
    // report on.
    try {
      var stack = TraceKit.computeStackTrace(ex);
      this._handleStackInfo(stack, options);
    } catch (ex1) {
      if (ex !== ex1) {
        throw ex1;
      }
    }

    return this;
  },

  _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {
    var exKeys = Object.keys(ex).sort();
    var options = objectMerge(currentOptions, {
      message:
        'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),
      fingerprint: [md5(exKeys)],
      extra: currentOptions.extra || {}
    });
    options.extra.__serialized__ = serializeException(ex);

    return options;
  },

  /*
     * Manually send a message to Sentry
     *
     * @param {string} msg A plain message to be captured in Sentry
     * @param {object} options A specific set of options for this message [optional]
     * @return {Raven}
     */
  captureMessage: function(msg, options) {
    // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an
    // early call; we'll error on the side of logging anything called before configuration since it's
    // probably something you should see:
    if (
      !!this._globalOptions.ignoreErrors.test &&
      this._globalOptions.ignoreErrors.test(msg)
    ) {
      return;
    }

    options = options || {};
    msg = msg + ''; // Make sure it's actually a string

    var data = objectMerge(
      {
        message: msg
      },
      options
    );

    var ex;
    // Generate a "synthetic" stack trace from this point.
    // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative
    //       of a bug with Raven.js. Sentry generates synthetic traces either by configuration,
    //       or if it catches a thrown object without a "stack" property.
    try {
      throw new Error(msg);
    } catch (ex1) {
      ex = ex1;
    }

    // null exception name so `Error` isn't prefixed to msg
    ex.name = null;
    var stack = TraceKit.computeStackTrace(ex);

    // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]
    var initialCall = isArray(stack.stack) && stack.stack[1];

    // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call
    // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd
    // initialCall => captureException(string) => captureMessage(string)
    if (initialCall && initialCall.func === 'Raven.captureException') {
      initialCall = stack.stack[2];
    }

    var fileurl = (initialCall && initialCall.url) || '';

    if (
      !!this._globalOptions.ignoreUrls.test &&
      this._globalOptions.ignoreUrls.test(fileurl)
    ) {
      return;
    }

    if (
      !!this._globalOptions.whitelistUrls.test &&
      !this._globalOptions.whitelistUrls.test(fileurl)
    ) {
      return;
    }

    if (this._globalOptions.stacktrace || (options && options.stacktrace)) {
      // fingerprint on msg, not stack trace (legacy behavior, could be revisited)
      data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;

      options = objectMerge(
        {
          trimHeadFrames: 0
        },
        options
      );
      // Since we know this is a synthetic trace, the top frame (this function call)
      // MUST be from Raven.js, so mark it for trimming
      // We add to the trim counter so that callers can choose to trim extra frames, such
      // as utility functions.
      options.trimHeadFrames += 1;

      var frames = this._prepareFrames(stack, options);
      data.stacktrace = {
        // Sentry expects frames oldest to newest
        frames: frames.reverse()
      };
    }

    // Make sure that fingerprint is always wrapped in an array
    if (data.fingerprint) {
      data.fingerprint = isArray(data.fingerprint)
        ? data.fingerprint
        : [data.fingerprint];
    }

    // Fire away!
    this._send(data);

    return this;
  },

  captureBreadcrumb: function(obj) {
    var crumb = objectMerge(
      {
        timestamp: now() / 1000
      },
      obj
    );

    if (isFunction(this._globalOptions.breadcrumbCallback)) {
      var result = this._globalOptions.breadcrumbCallback(crumb);

      if (isObject(result) && !isEmptyObject(result)) {
        crumb = result;
      } else if (result === false) {
        return this;
      }
    }

    this._breadcrumbs.push(crumb);
    if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {
      this._breadcrumbs.shift();
    }
    return this;
  },

  addPlugin: function(plugin /*arg1, arg2, ... argN*/) {
    var pluginArgs = [].slice.call(arguments, 1);

    this._plugins.push([plugin, pluginArgs]);
    if (this._isRavenInstalled) {
      this._drainPlugins();
    }

    return this;
  },

  /*
     * Set/clear a user to be sent along with the payload.
     *
     * @param {object} user An object representing user data [optional]
     * @return {Raven}
     */
  setUserContext: function(user) {
    // Intentionally do not merge here since that's an unexpected behavior.
    this._globalContext.user = user;

    return this;
  },

  /*
     * Merge extra attributes to be sent along with the payload.
     *
     * @param {object} extra An object representing extra data [optional]
     * @return {Raven}
     */
  setExtraContext: function(extra) {
    this._mergeContext('extra', extra);

    return this;
  },

  /*
     * Merge tags to be sent along with the payload.
     *
     * @param {object} tags An object representing tags [optional]
     * @return {Raven}
     */
  setTagsContext: function(tags) {
    this._mergeContext('tags', tags);

    return this;
  },

  /*
     * Clear all of the context.
     *
     * @return {Raven}
     */
  clearContext: function() {
    this._globalContext = {};

    return this;
  },

  /*
     * Get a copy of the current context. This cannot be mutated.
     *
     * @return {object} copy of context
     */
  getContext: function() {
    // lol javascript
    return JSON.parse(stringify(this._globalContext));
  },

  /*
     * Set environment of application
     *
     * @param {string} environment Typically something like 'production'.
     * @return {Raven}
     */
  setEnvironment: function(environment) {
    this._globalOptions.environment = environment;

    return this;
  },

  /*
     * Set release version of application
     *
     * @param {string} release Typically something like a git SHA to identify version
     * @return {Raven}
     */
  setRelease: function(release) {
    this._globalOptions.release = release;

    return this;
  },

  /*
     * Set the dataCallback option
     *
     * @param {function} callback The callback to run which allows the
     *                            data blob to be mutated before sending
     * @return {Raven}
     */
  setDataCallback: function(callback) {
    var original = this._globalOptions.dataCallback;
    this._globalOptions.dataCallback = keepOriginalCallback(original, callback);
    return this;
  },

  /*
     * Set the breadcrumbCallback option
     *
     * @param {function} callback The callback to run which allows filtering
     *                            or mutating breadcrumbs
     * @return {Raven}
     */
  setBreadcrumbCallback: function(callback) {
    var original = this._globalOptions.breadcrumbCallback;
    this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);
    return this;
  },

  /*
     * Set the shouldSendCallback option
     *
     * @param {function} callback The callback to run which allows
     *                            introspecting the blob before sending
     * @return {Raven}
     */
  setShouldSendCallback: function(callback) {
    var original = this._globalOptions.shouldSendCallback;
    this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);
    return this;
  },

  /**
   * Override the default HTTP transport mechanism that transmits data
   * to the Sentry server.
   *
   * @param {function} transport Function invoked instead of the default
   *                             `makeRequest` handler.
   *
   * @return {Raven}
   */
  setTransport: function(transport) {
    this._globalOptions.transport = transport;

    return this;
  },

  /*
     * Get the latest raw exception that was captured by Raven.
     *
     * @return {error}
     */
  lastException: function() {
    return this._lastCapturedException;
  },

  /*
     * Get the last event id
     *
     * @return {string}
     */
  lastEventId: function() {
    return this._lastEventId;
  },

  /*
     * Determine if Raven is setup and ready to go.
     *
     * @return {boolean}
     */
  isSetup: function() {
    if (!this._hasJSON) return false; // needs JSON support
    if (!this._globalServer) {
      if (!this.ravenNotConfiguredError) {
        this.ravenNotConfiguredError = true;
        this._logDebug('error', 'Error: Raven has not been configured.');
      }
      return false;
    }
    return true;
  },

  afterLoad: function() {
    // TODO: remove window dependence?

    // Attempt to initialize Raven on load
    var RavenConfig = _window.RavenConfig;
    if (RavenConfig) {
      this.config(RavenConfig.dsn, RavenConfig.config).install();
    }
  },

  showReportDialog: function(options) {
    if (
      !_document // doesn't work without a document (React native)
    )
      return;

    options = options || {};

    var lastEventId = options.eventId || this.lastEventId();
    if (!lastEventId) {
      throw new RavenConfigError('Missing eventId');
    }

    var dsn = options.dsn || this._dsn;
    if (!dsn) {
      throw new RavenConfigError('Missing DSN');
    }

    var encode = encodeURIComponent;
    var qs = '';
    qs += '?eventId=' + encode(lastEventId);
    qs += '&dsn=' + encode(dsn);

    var user = options.user || this._globalContext.user;
    if (user) {
      if (user.name) qs += '&name=' + encode(user.name);
      if (user.email) qs += '&email=' + encode(user.email);
    }

    var globalServer = this._getGlobalServer(this._parseDSN(dsn));

    var script = _document.createElement('script');
    script.async = true;
    script.src = globalServer + '/api/embed/error-page/' + qs;
    (_document.head || _document.body).appendChild(script);
  },

  /**** Private functions ****/
  _ignoreNextOnError: function() {
    var self = this;
    this._ignoreOnError += 1;
    setTimeout(function() {
      // onerror should trigger before setTimeout
      self._ignoreOnError -= 1;
    });
  },

  _triggerEvent: function(eventType, options) {
    // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it
    var evt, key;

    if (!this._hasDocument) return;

    options = options || {};

    eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);

    if (_document.createEvent) {
      evt = _document.createEvent('HTMLEvents');
      evt.initEvent(eventType, true, true);
    } else {
      evt = _document.createEventObject();
      evt.eventType = eventType;
    }

    for (key in options)
      if (hasKey(options, key)) {
        evt[key] = options[key];
      }

    if (_document.createEvent) {
      // IE9 if standards
      _document.dispatchEvent(evt);
    } else {
      // IE8 regardless of Quirks or Standards
      // IE9 if quirks
      try {
        _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);
      } catch (e) {
        // Do nothing
      }
    }
  },

  /**
   * Wraps addEventListener to capture UI breadcrumbs
   * @param evtName the event name (e.g. "click")
   * @returns {Function}
   * @private
   */
  _breadcrumbEventHandler: function(evtName) {
    var self = this;
    return function(evt) {
      // reset keypress timeout; e.g. triggering a 'click' after
      // a 'keypress' will reset the keypress debounce so that a new
      // set of keypresses can be recorded
      self._keypressTimeout = null;

      // It's possible this handler might trigger multiple times for the same
      // event (e.g. event propagation through node ancestors). Ignore if we've
      // already captured the event.
      if (self._lastCapturedEvent === evt) return;

      self._lastCapturedEvent = evt;

      // try/catch both:
      // - accessing evt.target (see getsentry/raven-js#838, #768)
      // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly
      //   can throw an exception in some circumstances.
      var target;
      try {
        target = htmlTreeAsString(evt.target);
      } catch (e) {
        target = '<unknown>';
      }

      self.captureBreadcrumb({
        category: 'ui.' + evtName, // e.g. ui.click, ui.input
        message: target
      });
    };
  },

  /**
   * Wraps addEventListener to capture keypress UI events
   * @returns {Function}
   * @private
   */
  _keypressEventHandler: function() {
    var self = this,
      debounceDuration = 1000; // milliseconds

    // TODO: if somehow user switches keypress target before
    //       debounce timeout is triggered, we will only capture
    //       a single breadcrumb from the FIRST target (acceptable?)
    return function(evt) {
      var target;
      try {
        target = evt.target;
      } catch (e) {
        // just accessing event properties can throw an exception in some rare circumstances
        // see: https://github.com/getsentry/raven-js/issues/838
        return;
      }
      var tagName = target && target.tagName;

      // only consider keypress events on actual input elements
      // this will disregard keypresses targeting body (e.g. tabbing
      // through elements, hotkeys, etc)
      if (
        !tagName ||
        (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)
      )
        return;

      // record first keypress in a series, but ignore subsequent
      // keypresses until debounce clears
      var timeout = self._keypressTimeout;
      if (!timeout) {
        self._breadcrumbEventHandler('input')(evt);
      }
      clearTimeout(timeout);
      self._keypressTimeout = setTimeout(function() {
        self._keypressTimeout = null;
      }, debounceDuration);
    };
  },

  /**
   * Captures a breadcrumb of type "navigation", normalizing input URLs
   * @param to the originating URL
   * @param from the target URL
   * @private
   */
  _captureUrlChange: function(from, to) {
    var parsedLoc = parseUrl(this._location.href);
    var parsedTo = parseUrl(to);
    var parsedFrom = parseUrl(from);

    // because onpopstate only tells you the "new" (to) value of location.href, and
    // not the previous (from) value, we need to track the value of the current URL
    // state ourselves
    this._lastHref = to;

    // Use only the path component of the URL if the URL matches the current
    // document (almost all the time when using pushState)
    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)
      to = parsedTo.relative;
    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)
      from = parsedFrom.relative;

    this.captureBreadcrumb({
      category: 'navigation',
      data: {
        to: to,
        from: from
      }
    });
  },

  _patchFunctionToString: function() {
    var self = this;
    self._originalFunctionToString = Function.prototype.toString;
    // eslint-disable-next-line no-extend-native
    Function.prototype.toString = function() {
      if (typeof this === 'function' && this.__raven__) {
        return self._originalFunctionToString.apply(this.__orig__, arguments);
      }
      return self._originalFunctionToString.apply(this, arguments);
    };
  },

  _unpatchFunctionToString: function() {
    if (this._originalFunctionToString) {
      // eslint-disable-next-line no-extend-native
      Function.prototype.toString = this._originalFunctionToString;
    }
  },

  /**
   * Wrap timer functions and event targets to catch errors and provide
   * better metadata.
   */
  _instrumentTryCatch: function() {
    var self = this;

    var wrappedBuiltIns = self._wrappedBuiltIns;

    function wrapTimeFn(orig) {
      return function(fn, t) {
        // preserve arity
        // Make a copy of the arguments to prevent deoptimization
        // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
        var args = new Array(arguments.length);
        for (var i = 0; i < args.length; ++i) {
          args[i] = arguments[i];
        }
        var originalCallback = args[0];
        if (isFunction(originalCallback)) {
          args[0] = self.wrap(originalCallback);
        }

        // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
        // also supports only two arguments and doesn't care what this is, so we
        // can just call the original function directly.
        if (orig.apply) {
          return orig.apply(this, args);
        } else {
          return orig(args[0], args[1]);
        }
      };
    }

    var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;

    function wrapEventTarget(global) {
      var proto = _window[global] && _window[global].prototype;
      if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {
        fill(
          proto,
          'addEventListener',
          function(orig) {
            return function(evtName, fn, capture, secure) {
              // preserve arity
              try {
                if (fn && fn.handleEvent) {
                  fn.handleEvent = self.wrap(fn.handleEvent);
                }
              } catch (err) {
                // can sometimes get 'Permission denied to access property "handle Event'
              }

              // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`
              // so that we don't have more than one wrapper function
              var before, clickHandler, keypressHandler;

              if (
                autoBreadcrumbs &&
                autoBreadcrumbs.dom &&
                (global === 'EventTarget' || global === 'Node')
              ) {
                // NOTE: generating multiple handlers per addEventListener invocation, should
                //       revisit and verify we can just use one (almost certainly)
                clickHandler = self._breadcrumbEventHandler('click');
                keypressHandler = self._keypressEventHandler();
                before = function(evt) {
                  // need to intercept every DOM event in `before` argument, in case that
                  // same wrapped method is re-used for different events (e.g. mousemove THEN click)
                  // see #724
                  if (!evt) return;

                  var eventType;
                  try {
                    eventType = evt.type;
                  } catch (e) {
                    // just accessing event properties can throw an exception in some rare circumstances
                    // see: https://github.com/getsentry/raven-js/issues/838
                    return;
                  }
                  if (eventType === 'click') return clickHandler(evt);
                  else if (eventType === 'keypress') return keypressHandler(evt);
                };
              }
              return orig.call(
                this,
                evtName,
                self.wrap(fn, undefined, before),
                capture,
                secure
              );
            };
          },
          wrappedBuiltIns
        );
        fill(
          proto,
          'removeEventListener',
          function(orig) {
            return function(evt, fn, capture, secure) {
              try {
                fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);
              } catch (e) {
                // ignore, accessing __raven_wrapper__ will throw in some Selenium environments
              }
              return orig.call(this, evt, fn, capture, secure);
            };
          },
          wrappedBuiltIns
        );
      }
    }

    fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);
    fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);
    if (_window.requestAnimationFrame) {
      fill(
        _window,
        'requestAnimationFrame',
        function(orig) {
          return function(cb) {
            return orig(self.wrap(cb));
          };
        },
        wrappedBuiltIns
      );
    }

    // event targets borrowed from bugsnag-js:
    // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666
    var eventTargets = [
      'EventTarget',
      'Window',
      'Node',
      'ApplicationCache',
      'AudioTrackList',
      'ChannelMergerNode',
      'CryptoOperation',
      'EventSource',
      'FileReader',
      'HTMLUnknownElement',
      'IDBDatabase',
      'IDBRequest',
      'IDBTransaction',
      'KeyOperation',
      'MediaController',
      'MessagePort',
      'ModalWindow',
      'Notification',
      'SVGElementInstance',
      'Screen',
      'TextTrack',
      'TextTrackCue',
      'TextTrackList',
      'WebSocket',
      'WebSocketWorker',
      'Worker',
      'XMLHttpRequest',
      'XMLHttpRequestEventTarget',
      'XMLHttpRequestUpload'
    ];
    for (var i = 0; i < eventTargets.length; i++) {
      wrapEventTarget(eventTargets[i]);
    }
  },

  /**
   * Instrument browser built-ins w/ breadcrumb capturing
   *  - XMLHttpRequests
   *  - DOM interactions (click/typing)
   *  - window.location changes
   *  - console
   *
   * Can be disabled or individually configured via the `autoBreadcrumbs` config option
   */
  _instrumentBreadcrumbs: function() {
    var self = this;
    var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;

    var wrappedBuiltIns = self._wrappedBuiltIns;

    function wrapProp(prop, xhr) {
      if (prop in xhr && isFunction(xhr[prop])) {
        fill(xhr, prop, function(orig) {
          return self.wrap(orig);
        }); // intentionally don't track filled methods on XHR instances
      }
    }

    if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {
      var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;
      fill(
        xhrproto,
        'open',
        function(origOpen) {
          return function(method, url) {
            // preserve arity

            // if Sentry key appears in URL, don't capture
            if (isString(url) && url.indexOf(self._globalKey) === -1) {
              this.__raven_xhr = {
                method: method,
                url: url,
                status_code: null
              };
            }

            return origOpen.apply(this, arguments);
          };
        },
        wrappedBuiltIns
      );

      fill(
        xhrproto,
        'send',
        function(origSend) {
          return function() {
            // preserve arity
            var xhr = this;

            function onreadystatechangeHandler() {
              if (xhr.__raven_xhr && xhr.readyState === 4) {
                try {
                  // touching statusCode in some platforms throws
                  // an exception
                  xhr.__raven_xhr.status_code = xhr.status;
                } catch (e) {
                  /* do nothing */
                }

                self.captureBreadcrumb({
                  type: 'http',
                  category: 'xhr',
                  data: xhr.__raven_xhr
                });
              }
            }

            var props = ['onload', 'onerror', 'onprogress'];
            for (var j = 0; j < props.length; j++) {
              wrapProp(props[j], xhr);
            }

            if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {
              fill(
                xhr,
                'onreadystatechange',
                function(orig) {
                  return self.wrap(orig, undefined, onreadystatechangeHandler);
                } /* intentionally don't track this instrumentation */
              );
            } else {
              // if onreadystatechange wasn't actually set by the page on this xhr, we
              // are free to set our own and capture the breadcrumb
              xhr.onreadystatechange = onreadystatechangeHandler;
            }

            return origSend.apply(this, arguments);
          };
        },
        wrappedBuiltIns
      );
    }

    if (autoBreadcrumbs.xhr && supportsFetch()) {
      fill(
        _window,
        'fetch',
        function(origFetch) {
          return function() {
            // preserve arity
            // Make a copy of the arguments to prevent deoptimization
            // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
            var args = new Array(arguments.length);
            for (var i = 0; i < args.length; ++i) {
              args[i] = arguments[i];
            }

            var fetchInput = args[0];
            var method = 'GET';
            var url;

            if (typeof fetchInput === 'string') {
              url = fetchInput;
            } else if ('Request' in _window && fetchInput instanceof _window.Request) {
              url = fetchInput.url;
              if (fetchInput.method) {
                method = fetchInput.method;
              }
            } else {
              url = '' + fetchInput;
            }

            // if Sentry key appears in URL, don't capture, as it's our own request
            if (url.indexOf(self._globalKey) !== -1) {
              return origFetch.apply(this, args);
            }

            if (args[1] && args[1].method) {
              method = args[1].method;
            }

            var fetchData = {
              method: method,
              url: url,
              status_code: null
            };

            return origFetch
              .apply(this, args)
              .then(function(response) {
                fetchData.status_code = response.status;

                self.captureBreadcrumb({
                  type: 'http',
                  category: 'fetch',
                  data: fetchData
                });

                return response;
              })
              ['catch'](function(err) {
                // if there is an error performing the request
                self.captureBreadcrumb({
                  type: 'http',
                  category: 'fetch',
                  data: fetchData,
                  level: 'error'
                });

                throw err;
              });
          };
        },
        wrappedBuiltIns
      );
    }

    // Capture breadcrumbs from any click that is unhandled / bubbled up all the way
    // to the document. Do this before we instrument addEventListener.
    if (autoBreadcrumbs.dom && this._hasDocument) {
      if (_document.addEventListener) {
        _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);
        _document.addEventListener('keypress', self._keypressEventHandler(), false);
      } else if (_document.attachEvent) {
        // IE8 Compatibility
        _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));
        _document.attachEvent('onkeypress', self._keypressEventHandler());
      }
    }

    // record navigation (URL) changes
    // NOTE: in Chrome App environment, touching history.pushState, *even inside
    //       a try/catch block*, will cause Chrome to output an error to console.error
    // borrowed from: https://github.com/angular/angular.js/pull/13945/files
    var chrome = _window.chrome;
    var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;
    var hasPushAndReplaceState =
      !isChromePackagedApp &&
      _window.history &&
      _window.history.pushState &&
      _window.history.replaceState;
    if (autoBreadcrumbs.location && hasPushAndReplaceState) {
      // TODO: remove onpopstate handler on uninstall()
      var oldOnPopState = _window.onpopstate;
      _window.onpopstate = function() {
        var currentHref = self._location.href;
        self._captureUrlChange(self._lastHref, currentHref);

        if (oldOnPopState) {
          return oldOnPopState.apply(this, arguments);
        }
      };

      var historyReplacementFunction = function(origHistFunction) {
        // note history.pushState.length is 0; intentionally not declaring
        // params to preserve 0 arity
        return function(/* state, title, url */) {
          var url = arguments.length > 2 ? arguments[2] : undefined;

          // url argument is optional
          if (url) {
            // coerce to string (this is what pushState does)
            self._captureUrlChange(self._lastHref, url + '');
          }

          return origHistFunction.apply(this, arguments);
        };
      };

      fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);
      fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);
    }

    if (autoBreadcrumbs.console && 'console' in _window && console.log) {
      // console
      var consoleMethodCallback = function(msg, data) {
        self.captureBreadcrumb({
          message: msg,
          level: data.level,
          category: 'console'
        });
      };

      each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {
        wrapConsoleMethod(console, level, consoleMethodCallback);
      });
    }
  },

  _restoreBuiltIns: function() {
    // restore any wrapped builtins
    var builtin;
    while (this._wrappedBuiltIns.length) {
      builtin = this._wrappedBuiltIns.shift();

      var obj = builtin[0],
        name = builtin[1],
        orig = builtin[2];

      obj[name] = orig;
    }
  },

  _restoreConsole: function() {
    // eslint-disable-next-line guard-for-in
    for (var method in this._originalConsoleMethods) {
      this._originalConsole[method] = this._originalConsoleMethods[method];
    }
  },

  _drainPlugins: function() {
    var self = this;

    // FIX ME TODO
    each(this._plugins, function(_, plugin) {
      var installer = plugin[0];
      var args = plugin[1];
      installer.apply(self, [self].concat(args));
    });
  },

  _parseDSN: function(str) {
    var m = dsnPattern.exec(str),
      dsn = {},
      i = 7;

    try {
      while (i--) dsn[dsnKeys[i]] = m[i] || '';
    } catch (e) {
      throw new RavenConfigError('Invalid DSN: ' + str);
    }

    if (dsn.pass && !this._globalOptions.allowSecretKey) {
      throw new RavenConfigError(
        'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'
      );
    }

    return dsn;
  },

  _getGlobalServer: function(uri) {
    // assemble the endpoint from the uri pieces
    var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');

    if (uri.protocol) {
      globalServer = uri.protocol + ':' + globalServer;
    }
    return globalServer;
  },

  _handleOnErrorStackInfo: function() {
    // if we are intentionally ignoring errors via onerror, bail out
    if (!this._ignoreOnError) {
      this._handleStackInfo.apply(this, arguments);
    }
  },

  _handleStackInfo: function(stackInfo, options) {
    var frames = this._prepareFrames(stackInfo, options);

    this._triggerEvent('handle', {
      stackInfo: stackInfo,
      options: options
    });

    this._processException(
      stackInfo.name,
      stackInfo.message,
      stackInfo.url,
      stackInfo.lineno,
      frames,
      options
    );
  },

  _prepareFrames: function(stackInfo, options) {
    var self = this;
    var frames = [];
    if (stackInfo.stack && stackInfo.stack.length) {
      each(stackInfo.stack, function(i, stack) {
        var frame = self._normalizeFrame(stack, stackInfo.url);
        if (frame) {
          frames.push(frame);
        }
      });

      // e.g. frames captured via captureMessage throw
      if (options && options.trimHeadFrames) {
        for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {
          frames[j].in_app = false;
        }
      }
    }
    frames = frames.slice(0, this._globalOptions.stackTraceLimit);
    return frames;
  },

  _normalizeFrame: function(frame, stackInfoUrl) {
    // normalize the frames data
    var normalized = {
      filename: frame.url,
      lineno: frame.line,
      colno: frame.column,
      function: frame.func || '?'
    };

    // Case when we don't have any information about the error
    // E.g. throwing a string or raw object, instead of an `Error` in Firefox
    // Generating synthetic error doesn't add any value here
    //
    // We should probably somehow let a user know that they should fix their code
    if (!frame.url) {
      normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler
    }

    normalized.in_app = !// determine if an exception came from outside of our app
    // first we check the global includePaths list.
    (
      (!!this._globalOptions.includePaths.test &&
        !this._globalOptions.includePaths.test(normalized.filename)) ||
      // Now we check for fun, if the function name is Raven or TraceKit
      /(Raven|TraceKit)\./.test(normalized['function']) ||
      // finally, we do a last ditch effort and check for raven.min.js
      /raven\.(min\.)?js$/.test(normalized.filename)
    );

    return normalized;
  },

  _processException: function(type, message, fileurl, lineno, frames, options) {
    var prefixedMessage = (type ? type + ': ' : '') + (message || '');
    if (
      !!this._globalOptions.ignoreErrors.test &&
      (this._globalOptions.ignoreErrors.test(message) ||
        this._globalOptions.ignoreErrors.test(prefixedMessage))
    ) {
      return;
    }

    var stacktrace;

    if (frames && frames.length) {
      fileurl = frames[0].filename || fileurl;
      // Sentry expects frames oldest to newest
      // and JS sends them as newest to oldest
      frames.reverse();
      stacktrace = {frames: frames};
    } else if (fileurl) {
      stacktrace = {
        frames: [
          {
            filename: fileurl,
            lineno: lineno,
            in_app: true
          }
        ]
      };
    }

    if (
      !!this._globalOptions.ignoreUrls.test &&
      this._globalOptions.ignoreUrls.test(fileurl)
    ) {
      return;
    }

    if (
      !!this._globalOptions.whitelistUrls.test &&
      !this._globalOptions.whitelistUrls.test(fileurl)
    ) {
      return;
    }

    var data = objectMerge(
      {
        // sentry.interfaces.Exception
        exception: {
          values: [
            {
              type: type,
              value: message,
              stacktrace: stacktrace
            }
          ]
        },
        transaction: fileurl
      },
      options
    );

    // Fire away!
    this._send(data);
  },

  _trimPacket: function(data) {
    // For now, we only want to truncate the two different messages
    // but this could/should be expanded to just trim everything
    var max = this._globalOptions.maxMessageLength;
    if (data.message) {
      data.message = truncate(data.message, max);
    }
    if (data.exception) {
      var exception = data.exception.values[0];
      exception.value = truncate(exception.value, max);
    }

    var request = data.request;
    if (request) {
      if (request.url) {
        request.url = truncate(request.url, this._globalOptions.maxUrlLength);
      }
      if (request.Referer) {
        request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);
      }
    }

    if (data.breadcrumbs && data.breadcrumbs.values)
      this._trimBreadcrumbs(data.breadcrumbs);

    return data;
  },

  /**
   * Truncate breadcrumb values (right now just URLs)
   */
  _trimBreadcrumbs: function(breadcrumbs) {
    // known breadcrumb properties with urls
    // TODO: also consider arbitrary prop values that start with (https?)?://
    var urlProps = ['to', 'from', 'url'],
      urlProp,
      crumb,
      data;

    for (var i = 0; i < breadcrumbs.values.length; ++i) {
      crumb = breadcrumbs.values[i];
      if (
        !crumb.hasOwnProperty('data') ||
        !isObject(crumb.data) ||
        objectFrozen(crumb.data)
      )
        continue;

      data = objectMerge({}, crumb.data);
      for (var j = 0; j < urlProps.length; ++j) {
        urlProp = urlProps[j];
        if (data.hasOwnProperty(urlProp) && data[urlProp]) {
          data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);
        }
      }
      breadcrumbs.values[i].data = data;
    }
  },

  _getHttpData: function() {
    if (!this._hasNavigator && !this._hasDocument) return;
    var httpData = {};

    if (this._hasNavigator && _navigator.userAgent) {
      httpData.headers = {
        'User-Agent': _navigator.userAgent
      };
    }

    // Check in `window` instead of `document`, as we may be in ServiceWorker environment
    if (_window.location && _window.location.href) {
      httpData.url = _window.location.href;
    }

    if (this._hasDocument && _document.referrer) {
      if (!httpData.headers) httpData.headers = {};
      httpData.headers.Referer = _document.referrer;
    }

    return httpData;
  },

  _resetBackoff: function() {
    this._backoffDuration = 0;
    this._backoffStart = null;
  },

  _shouldBackoff: function() {
    return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;
  },

  /**
   * Returns true if the in-process data payload matches the signature
   * of the previously-sent data
   *
   * NOTE: This has to be done at this level because TraceKit can generate
   *       data from window.onerror WITHOUT an exception object (IE8, IE9,
   *       other old browsers). This can take the form of an "exception"
   *       data object with a single frame (derived from the onerror args).
   */
  _isRepeatData: function(current) {
    var last = this._lastData;

    if (
      !last ||
      current.message !== last.message || // defined for captureMessage
      current.transaction !== last.transaction // defined for captureException/onerror
    )
      return false;

    // Stacktrace interface (i.e. from captureMessage)
    if (current.stacktrace || last.stacktrace) {
      return isSameStacktrace(current.stacktrace, last.stacktrace);
    } else if (current.exception || last.exception) {
      // Exception interface (i.e. from captureException/onerror)
      return isSameException(current.exception, last.exception);
    }

    return true;
  },

  _setBackoffState: function(request) {
    // If we are already in a backoff state, don't change anything
    if (this._shouldBackoff()) {
      return;
    }

    var status = request.status;

    // 400 - project_id doesn't exist or some other fatal
    // 401 - invalid/revoked dsn
    // 429 - too many requests
    if (!(status === 400 || status === 401 || status === 429)) return;

    var retry;
    try {
      // If Retry-After is not in Access-Control-Expose-Headers, most
      // browsers will throw an exception trying to access it
      if (supportsFetch()) {
        retry = request.headers.get('Retry-After');
      } else {
        retry = request.getResponseHeader('Retry-After');
      }

      // Retry-After is returned in seconds
      retry = parseInt(retry, 10) * 1000;
    } catch (e) {
      /* eslint no-empty:0 */
    }

    this._backoffDuration = retry
      ? // If Sentry server returned a Retry-After value, use it
        retry
      : // Otherwise, double the last backoff duration (starts at 1 sec)
        this._backoffDuration * 2 || 1000;

    this._backoffStart = now();
  },

  _send: function(data) {
    var globalOptions = this._globalOptions;

    var baseData = {
        project: this._globalProject,
        logger: globalOptions.logger,
        platform: 'javascript'
      },
      httpData = this._getHttpData();

    if (httpData) {
      baseData.request = httpData;
    }

    // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload
    if (data.trimHeadFrames) delete data.trimHeadFrames;

    data = objectMerge(baseData, data);

    // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
    data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);
    data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);

    // Send along our own collected metadata with extra
    data.extra['session:duration'] = now() - this._startTime;

    if (this._breadcrumbs && this._breadcrumbs.length > 0) {
      // intentionally make shallow copy so that additions
      // to breadcrumbs aren't accidentally sent in this request
      data.breadcrumbs = {
        values: [].slice.call(this._breadcrumbs, 0)
      };
    }

    if (this._globalContext.user) {
      // sentry.interfaces.User
      data.user = this._globalContext.user;
    }

    // Include the environment if it's defined in globalOptions
    if (globalOptions.environment) data.environment = globalOptions.environment;

    // Include the release if it's defined in globalOptions
    if (globalOptions.release) data.release = globalOptions.release;

    // Include server_name if it's defined in globalOptions
    if (globalOptions.serverName) data.server_name = globalOptions.serverName;

    data = this._sanitizeData(data);

    // Cleanup empty properties before sending them to the server
    Object.keys(data).forEach(function(key) {
      if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {
        delete data[key];
      }
    });

    if (isFunction(globalOptions.dataCallback)) {
      data = globalOptions.dataCallback(data) || data;
    }

    // Why??????????
    if (!data || isEmptyObject(data)) {
      return;
    }

    // Check if the request should be filtered or not
    if (
      isFunction(globalOptions.shouldSendCallback) &&
      !globalOptions.shouldSendCallback(data)
    ) {
      return;
    }

    // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),
    // so drop requests until "cool-off" period has elapsed.
    if (this._shouldBackoff()) {
      this._logDebug('warn', 'Raven dropped error due to backoff: ', data);
      return;
    }

    if (typeof globalOptions.sampleRate === 'number') {
      if (Math.random() < globalOptions.sampleRate) {
        this._sendProcessedPayload(data);
      }
    } else {
      this._sendProcessedPayload(data);
    }
  },

  _sanitizeData: function(data) {
    return sanitize(data, this._globalOptions.sanitizeKeys);
  },

  _getUuid: function() {
    return uuid4();
  },

  _sendProcessedPayload: function(data, callback) {
    var self = this;
    var globalOptions = this._globalOptions;

    if (!this.isSetup()) return;

    // Try and clean up the packet before sending by truncating long values
    data = this._trimPacket(data);

    // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,
    // but this would require copying an un-truncated copy of the data packet, which can be
    // arbitrarily deep (extra_data) -- could be worthwhile? will revisit
    if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {
      this._logDebug('warn', 'Raven dropped repeat event: ', data);
      return;
    }

    // Send along an event_id if not explicitly passed.
    // This event_id can be used to reference the error within Sentry itself.
    // Set lastEventId after we know the error should actually be sent
    this._lastEventId = data.event_id || (data.event_id = this._getUuid());

    // Store outbound payload after trim
    this._lastData = data;

    this._logDebug('debug', 'Raven about to send:', data);

    var auth = {
      sentry_version: '7',
      sentry_client: 'raven-js/' + this.VERSION,
      sentry_key: this._globalKey
    };

    if (this._globalSecret) {
      auth.sentry_secret = this._globalSecret;
    }

    var exception = data.exception && data.exception.values[0];

    // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy
    if (
      this._globalOptions.autoBreadcrumbs &&
      this._globalOptions.autoBreadcrumbs.sentry
    ) {
      this.captureBreadcrumb({
        category: 'sentry',
        message: exception
          ? (exception.type ? exception.type + ': ' : '') + exception.value
          : data.message,
        event_id: data.event_id,
        level: data.level || 'error' // presume error unless specified
      });
    }

    var url = this._globalEndpoint;
    (globalOptions.transport || this._makeRequest).call(this, {
      url: url,
      auth: auth,
      data: data,
      options: globalOptions,
      onSuccess: function success() {
        self._resetBackoff();

        self._triggerEvent('success', {
          data: data,
          src: url
        });
        callback && callback();
      },
      onError: function failure(error) {
        self._logDebug('error', 'Raven transport failed to send: ', error);

        if (error.request) {
          self._setBackoffState(error.request);
        }

        self._triggerEvent('failure', {
          data: data,
          src: url
        });
        error = error || new Error('Raven send failed (no additional details provided)');
        callback && callback(error);
      }
    });
  },

  _makeRequest: function(opts) {
    // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests
    var url = opts.url + '?' + urlencode(opts.auth);

    var evaluatedHeaders = null;
    var evaluatedFetchParameters = {};

    if (opts.options.headers) {
      evaluatedHeaders = this._evaluateHash(opts.options.headers);
    }

    if (opts.options.fetchParameters) {
      evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);
    }

    if (supportsFetch()) {
      evaluatedFetchParameters.body = stringify(opts.data);

      var defaultFetchOptions = objectMerge({}, this._fetchDefaults);
      var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);

      if (evaluatedHeaders) {
        fetchOptions.headers = evaluatedHeaders;
      }

      return _window
        .fetch(url, fetchOptions)
        .then(function(response) {
          if (response.ok) {
            opts.onSuccess && opts.onSuccess();
          } else {
            var error = new Error('Sentry error code: ' + response.status);
            // It's called request only to keep compatibility with XHR interface
            // and not add more redundant checks in setBackoffState method
            error.request = response;
            opts.onError && opts.onError(error);
          }
        })
        ['catch'](function() {
          opts.onError &&
            opts.onError(new Error('Sentry error code: network unavailable'));
        });
    }

    var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();
    if (!request) return;

    // if browser doesn't support CORS (e.g. IE7), we are out of luck
    var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';

    if (!hasCORS) return;

    if ('withCredentials' in request) {
      request.onreadystatechange = function() {
        if (request.readyState !== 4) {
          return;
        } else if (request.status === 200) {
          opts.onSuccess && opts.onSuccess();
        } else if (opts.onError) {
          var err = new Error('Sentry error code: ' + request.status);
          err.request = request;
          opts.onError(err);
        }
      };
    } else {
      request = new XDomainRequest();
      // xdomainrequest cannot go http -> https (or vice versa),
      // so always use protocol relative
      url = url.replace(/^https?:/, '');

      // onreadystatechange not supported by XDomainRequest
      if (opts.onSuccess) {
        request.onload = opts.onSuccess;
      }
      if (opts.onError) {
        request.onerror = function() {
          var err = new Error('Sentry error code: XDomainRequest');
          err.request = request;
          opts.onError(err);
        };
      }
    }

    request.open('POST', url);

    if (evaluatedHeaders) {
      each(evaluatedHeaders, function(key, value) {
        request.setRequestHeader(key, value);
      });
    }

    request.send(stringify(opts.data));
  },

  _evaluateHash: function(hash) {
    var evaluated = {};

    for (var key in hash) {
      if (hash.hasOwnProperty(key)) {
        var value = hash[key];
        evaluated[key] = typeof value === 'function' ? value() : value;
      }
    }

    return evaluated;
  },

  _logDebug: function(level) {
    // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change
    if (
      this._originalConsoleMethods[level] &&
      (this.debug || this._globalOptions.debug)
    ) {
      // In IE<10 console methods do not have their own 'apply' method
      Function.prototype.apply.call(
        this._originalConsoleMethods[level],
        this._originalConsole,
        [].slice.call(arguments, 1)
      );
    }
  },

  _mergeContext: function(key, context) {
    if (isUndefined(context)) {
      delete this._globalContext[key];
    } else {
      this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);
    }
  }
};

// Deprecations
Raven.prototype.setUser = Raven.prototype.setUserContext;
Raven.prototype.setReleaseContext = Raven.prototype.setRelease;

module.exports = Raven;

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"1":1,"2":2,"5":5,"6":6,"7":7,"8":8}],4:[function(_dereq_,module,exports){
(function (global){
/**
 * Enforces a single instance of the Raven client, and the
 * main entry point for Raven. If you are a consumer of the
 * Raven library, you SHOULD load this file (vs raven.js).
 **/

var RavenConstructor = _dereq_(3);

// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
var _window =
  typeof window !== 'undefined'
    ? window
    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
var _Raven = _window.Raven;

var Raven = new RavenConstructor();

/*
 * Allow multiple versions of Raven to be installed.
 * Strip Raven from the global context and returns the instance.
 *
 * @return {Raven}
 */
Raven.noConflict = function() {
  _window.Raven = _Raven;
  return Raven;
};

Raven.afterLoad();

module.exports = Raven;

/**
 * DISCLAIMER:
 *
 * Expose `Client` constructor for cases where user want to track multiple "sub-applications" in one larger app.
 * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.
 * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.
 *
 * It's called `Client' to be in-line with Raven Node implementation.
 *
 * HOWTO:
 *
 * import Raven from 'raven-js';
 *
 * const someAppReporter = new Raven.Client();
 * const someOtherAppReporter = new Raven.Client();
 *
 * someAppReporter.config('__DSN__', {
 *   ...config goes here
 * });
 *
 * someOtherAppReporter.config('__OTHER_DSN__', {
 *   ...config goes here
 * });
 *
 * someAppReporter.captureMessage(...);
 * someAppReporter.captureException(...);
 * someAppReporter.captureBreadcrumb(...);
 *
 * someOtherAppReporter.captureMessage(...);
 * someOtherAppReporter.captureException(...);
 * someOtherAppReporter.captureBreadcrumb(...);
 *
 * It should "just work".
 */
module.exports.Client = RavenConstructor;

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"3":3}],5:[function(_dereq_,module,exports){
(function (global){
var stringify = _dereq_(7);

var _window =
  typeof window !== 'undefined'
    ? window
    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

function isObject(what) {
  return typeof what === 'object' && what !== null;
}

// Yanked from https://git.io/vS8DV re-used under CC0
// with some tiny modifications
function isError(value) {
  switch (Object.prototype.toString.call(value)) {
    case '[object Error]':
      return true;
    case '[object Exception]':
      return true;
    case '[object DOMException]':
      return true;
    default:
      return value instanceof Error;
  }
}

function isErrorEvent(value) {
  return Object.prototype.toString.call(value) === '[object ErrorEvent]';
}

function isDOMError(value) {
  return Object.prototype.toString.call(value) === '[object DOMError]';
}

function isDOMException(value) {
  return Object.prototype.toString.call(value) === '[object DOMException]';
}

function isUndefined(what) {
  return what === void 0;
}

function isFunction(what) {
  return typeof what === 'function';
}

function isPlainObject(what) {
  return Object.prototype.toString.call(what) === '[object Object]';
}

function isString(what) {
  return Object.prototype.toString.call(what) === '[object String]';
}

function isArray(what) {
  return Object.prototype.toString.call(what) === '[object Array]';
}

function isEmptyObject(what) {
  if (!isPlainObject(what)) return false;

  for (var _ in what) {
    if (what.hasOwnProperty(_)) {
      return false;
    }
  }
  return true;
}

function supportsErrorEvent() {
  try {
    new ErrorEvent(''); // eslint-disable-line no-new
    return true;
  } catch (e) {
    return false;
  }
}

function supportsDOMError() {
  try {
    new DOMError(''); // eslint-disable-line no-new
    return true;
  } catch (e) {
    return false;
  }
}

function supportsDOMException() {
  try {
    new DOMException(''); // eslint-disable-line no-new
    return true;
  } catch (e) {
    return false;
  }
}

function supportsFetch() {
  if (!('fetch' in _window)) return false;

  try {
    new Headers(); // eslint-disable-line no-new
    new Request(''); // eslint-disable-line no-new
    new Response(); // eslint-disable-line no-new
    return true;
  } catch (e) {
    return false;
  }
}

// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default
// https://caniuse.com/#feat=referrer-policy
// It doesn't. And it throw exception instead of ignoring this parameter...
// REF: https://github.com/getsentry/raven-js/issues/1233
function supportsReferrerPolicy() {
  if (!supportsFetch()) return false;

  try {
    // eslint-disable-next-line no-new
    new Request('pickleRick', {
      referrerPolicy: 'origin'
    });
    return true;
  } catch (e) {
    return false;
  }
}

function supportsPromiseRejectionEvent() {
  return typeof PromiseRejectionEvent === 'function';
}

function wrappedCallback(callback) {
  function dataCallback(data, original) {
    var normalizedData = callback(data) || data;
    if (original) {
      return original(normalizedData) || normalizedData;
    }
    return normalizedData;
  }

  return dataCallback;
}

function each(obj, callback) {
  var i, j;

  if (isUndefined(obj.length)) {
    for (i in obj) {
      if (hasKey(obj, i)) {
        callback.call(null, i, obj[i]);
      }
    }
  } else {
    j = obj.length;
    if (j) {
      for (i = 0; i < j; i++) {
        callback.call(null, i, obj[i]);
      }
    }
  }
}

function objectMerge(obj1, obj2) {
  if (!obj2) {
    return obj1;
  }
  each(obj2, function(key, value) {
    obj1[key] = value;
  });
  return obj1;
}

/**
 * This function is only used for react-native.
 * react-native freezes object that have already been sent over the
 * js bridge. We need this function in order to check if the object is frozen.
 * So it's ok that objectFrozen returns false if Object.isFrozen is not
 * supported because it's not relevant for other "platforms". See related issue:
 * https://github.com/getsentry/react-native-sentry/issues/57
 */
function objectFrozen(obj) {
  if (!Object.isFrozen) {
    return false;
  }
  return Object.isFrozen(obj);
}

function truncate(str, max) {
  if (typeof max !== 'number') {
    throw new Error('2nd argument to `truncate` function should be a number');
  }
  if (typeof str !== 'string' || max === 0) {
    return str;
  }
  return str.length <= max ? str : str.substr(0, max) + '\u2026';
}

/**
 * hasKey, a better form of hasOwnProperty
 * Example: hasKey(MainHostObject, property) === true/false
 *
 * @param {Object} host object to check property
 * @param {string} key to check
 */
function hasKey(object, key) {
  return Object.prototype.hasOwnProperty.call(object, key);
}

function joinRegExp(patterns) {
  // Combine an array of regular expressions and strings into one large regexp
  // Be mad.
  var sources = [],
    i = 0,
    len = patterns.length,
    pattern;

  for (; i < len; i++) {
    pattern = patterns[i];
    if (isString(pattern)) {
      // If it's a string, we need to escape it
      // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
      sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1'));
    } else if (pattern && pattern.source) {
      // If it's a regexp already, we want to extract the source
      sources.push(pattern.source);
    }
    // Intentionally skip other cases
  }
  return new RegExp(sources.join('|'), 'i');
}

function urlencode(o) {
  var pairs = [];
  each(o, function(key, value) {
    pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
  });
  return pairs.join('&');
}

// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B
// intentionally using regex and not <a/> href parsing trick because React Native and other
// environments where DOM might not be available
function parseUrl(url) {
  if (typeof url !== 'string') return {};
  var match = url.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);

  // coerce to undefined values to empty string so we don't get 'undefined'
  var query = match[6] || '';
  var fragment = match[8] || '';
  return {
    protocol: match[2],
    host: match[4],
    path: match[5],
    relative: match[5] + query + fragment // everything minus origin
  };
}
function uuid4() {
  var crypto = _window.crypto || _window.msCrypto;

  if (!isUndefined(crypto) && crypto.getRandomValues) {
    // Use window.crypto API if available
    // eslint-disable-next-line no-undef
    var arr = new Uint16Array(8);
    crypto.getRandomValues(arr);

    // set 4 in byte 7
    arr[3] = (arr[3] & 0xfff) | 0x4000;
    // set 2 most significant bits of byte 9 to '10'
    arr[4] = (arr[4] & 0x3fff) | 0x8000;

    var pad = function(num) {
      var v = num.toString(16);
      while (v.length < 4) {
        v = '0' + v;
      }
      return v;
    };

    return (
      pad(arr[0]) +
      pad(arr[1]) +
      pad(arr[2]) +
      pad(arr[3]) +
      pad(arr[4]) +
      pad(arr[5]) +
      pad(arr[6]) +
      pad(arr[7])
    );
  } else {
    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
    return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = (Math.random() * 16) | 0,
        v = c === 'x' ? r : (r & 0x3) | 0x8;
      return v.toString(16);
    });
  }
}

/**
 * Given a child DOM element, returns a query-selector statement describing that
 * and its ancestors
 * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]
 * @param elem
 * @returns {string}
 */
function htmlTreeAsString(elem) {
  /* eslint no-extra-parens:0*/
  var MAX_TRAVERSE_HEIGHT = 5,
    MAX_OUTPUT_LEN = 80,
    out = [],
    height = 0,
    len = 0,
    separator = ' > ',
    sepLength = separator.length,
    nextStr;

  while (elem && height++ < MAX_TRAVERSE_HEIGHT) {
    nextStr = htmlElementAsString(elem);
    // bail out if
    // - nextStr is the 'html' element
    // - the length of the string that would be created exceeds MAX_OUTPUT_LEN
    //   (ignore this limit if we are on the first iteration)
    if (
      nextStr === 'html' ||
      (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)
    ) {
      break;
    }

    out.push(nextStr);

    len += nextStr.length;
    elem = elem.parentNode;
  }

  return out.reverse().join(separator);
}

/**
 * Returns a simple, query-selector representation of a DOM element
 * e.g. [HTMLElement] => input#foo.btn[name=baz]
 * @param HTMLElement
 * @returns {string}
 */
function htmlElementAsString(elem) {
  var out = [],
    className,
    classes,
    key,
    attr,
    i;

  if (!elem || !elem.tagName) {
    return '';
  }

  out.push(elem.tagName.toLowerCase());
  if (elem.id) {
    out.push('#' + elem.id);
  }

  className = elem.className;
  if (className && isString(className)) {
    classes = className.split(/\s+/);
    for (i = 0; i < classes.length; i++) {
      out.push('.' + classes[i]);
    }
  }
  var attrWhitelist = ['type', 'name', 'title', 'alt'];
  for (i = 0; i < attrWhitelist.length; i++) {
    key = attrWhitelist[i];
    attr = elem.getAttribute(key);
    if (attr) {
      out.push('[' + key + '="' + attr + '"]');
    }
  }
  return out.join('');
}

/**
 * Returns true if either a OR b is truthy, but not both
 */
function isOnlyOneTruthy(a, b) {
  return !!(!!a ^ !!b);
}

/**
 * Returns true if both parameters are undefined
 */
function isBothUndefined(a, b) {
  return isUndefined(a) && isUndefined(b);
}

/**
 * Returns true if the two input exception interfaces have the same content
 */
function isSameException(ex1, ex2) {
  if (isOnlyOneTruthy(ex1, ex2)) return false;

  ex1 = ex1.values[0];
  ex2 = ex2.values[0];

  if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;

  // in case both stacktraces are undefined, we can't decide so default to false
  if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;

  return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);
}

/**
 * Returns true if the two input stack trace interfaces have the same content
 */
function isSameStacktrace(stack1, stack2) {
  if (isOnlyOneTruthy(stack1, stack2)) return false;

  var frames1 = stack1.frames;
  var frames2 = stack2.frames;

  // Exit early if frame count differs
  if (frames1.length !== frames2.length) return false;

  // Iterate through every frame; bail out if anything differs
  var a, b;
  for (var i = 0; i < frames1.length; i++) {
    a = frames1[i];
    b = frames2[i];
    if (
      a.filename !== b.filename ||
      a.lineno !== b.lineno ||
      a.colno !== b.colno ||
      a['function'] !== b['function']
    )
      return false;
  }
  return true;
}

/**
 * Polyfill a method
 * @param obj object e.g. `document`
 * @param name method name present on object e.g. `addEventListener`
 * @param replacement replacement function
 * @param track {optional} record instrumentation to an array
 */
function fill(obj, name, replacement, track) {
  if (obj == null) return;
  var orig = obj[name];
  obj[name] = replacement(orig);
  obj[name].__raven__ = true;
  obj[name].__orig__ = orig;
  if (track) {
    track.push([obj, name, orig]);
  }
}

/**
 * Join values in array
 * @param input array of values to be joined together
 * @param delimiter string to be placed in-between values
 * @returns {string}
 */
function safeJoin(input, delimiter) {
  if (!isArray(input)) return '';

  var output = [];

  for (var i = 0; i < input.length; i++) {
    try {
      output.push(String(input[i]));
    } catch (e) {
      output.push('[value cannot be serialized]');
    }
  }

  return output.join(delimiter);
}

// Default Node.js REPL depth
var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
// 50kB, as 100kB is max payload size, so half sounds reasonable
var MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;
var MAX_SERIALIZE_KEYS_LENGTH = 40;

function utf8Length(value) {
  return ~-encodeURI(value).split(/%..|./).length;
}

function jsonSize(value) {
  return utf8Length(JSON.stringify(value));
}

function serializeValue(value) {
  if (typeof value === 'string') {
    var maxLength = 40;
    return truncate(value, maxLength);
  } else if (
    typeof value === 'number' ||
    typeof value === 'boolean' ||
    typeof value === 'undefined'
  ) {
    return value;
  }

  var type = Object.prototype.toString.call(value);

  // Node.js REPL notation
  if (type === '[object Object]') return '[Object]';
  if (type === '[object Array]') return '[Array]';
  if (type === '[object Function]')
    return value.name ? '[Function: ' + value.name + ']' : '[Function]';

  return value;
}

function serializeObject(value, depth) {
  if (depth === 0) return serializeValue(value);

  if (isPlainObject(value)) {
    return Object.keys(value).reduce(function(acc, key) {
      acc[key] = serializeObject(value[key], depth - 1);
      return acc;
    }, {});
  } else if (Array.isArray(value)) {
    return value.map(function(val) {
      return serializeObject(val, depth - 1);
    });
  }

  return serializeValue(value);
}

function serializeException(ex, depth, maxSize) {
  if (!isPlainObject(ex)) return ex;

  depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;
  maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;

  var serialized = serializeObject(ex, depth);

  if (jsonSize(stringify(serialized)) > maxSize) {
    return serializeException(ex, depth - 1);
  }

  return serialized;
}

function serializeKeysForMessage(keys, maxLength) {
  if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();
  if (!Array.isArray(keys)) return '';

  keys = keys.filter(function(key) {
    return typeof key === 'string';
  });
  if (keys.length === 0) return '[object has no keys]';

  maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;
  if (keys[0].length >= maxLength) return keys[0];

  for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {
    var serialized = keys.slice(0, usedKeys).join(', ');
    if (serialized.length > maxLength) continue;
    if (usedKeys === keys.length) return serialized;
    return serialized + '\u2026';
  }

  return '';
}

function sanitize(input, sanitizeKeys) {
  if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))
    return input;

  var sanitizeRegExp = joinRegExp(sanitizeKeys);
  var sanitizeMask = '********';
  var safeInput;

  try {
    safeInput = JSON.parse(stringify(input));
  } catch (o_O) {
    return input;
  }

  function sanitizeWorker(workerInput) {
    if (isArray(workerInput)) {
      return workerInput.map(function(val) {
        return sanitizeWorker(val);
      });
    }

    if (isPlainObject(workerInput)) {
      return Object.keys(workerInput).reduce(function(acc, k) {
        if (sanitizeRegExp.test(k)) {
          acc[k] = sanitizeMask;
        } else {
          acc[k] = sanitizeWorker(workerInput[k]);
        }
        return acc;
      }, {});
    }

    return workerInput;
  }

  return sanitizeWorker(safeInput);
}

module.exports = {
  isObject: isObject,
  isError: isError,
  isErrorEvent: isErrorEvent,
  isDOMError: isDOMError,
  isDOMException: isDOMException,
  isUndefined: isUndefined,
  isFunction: isFunction,
  isPlainObject: isPlainObject,
  isString: isString,
  isArray: isArray,
  isEmptyObject: isEmptyObject,
  supportsErrorEvent: supportsErrorEvent,
  supportsDOMError: supportsDOMError,
  supportsDOMException: supportsDOMException,
  supportsFetch: supportsFetch,
  supportsReferrerPolicy: supportsReferrerPolicy,
  supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,
  wrappedCallback: wrappedCallback,
  each: each,
  objectMerge: objectMerge,
  truncate: truncate,
  objectFrozen: objectFrozen,
  hasKey: hasKey,
  joinRegExp: joinRegExp,
  urlencode: urlencode,
  uuid4: uuid4,
  htmlTreeAsString: htmlTreeAsString,
  htmlElementAsString: htmlElementAsString,
  isSameException: isSameException,
  isSameStacktrace: isSameStacktrace,
  parseUrl: parseUrl,
  fill: fill,
  safeJoin: safeJoin,
  serializeException: serializeException,
  serializeKeysForMessage: serializeKeysForMessage,
  sanitize: sanitize
};

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"7":7}],6:[function(_dereq_,module,exports){
(function (global){
var utils = _dereq_(5);

/*
 TraceKit - Cross brower stack traces

 This was originally forked from github.com/occ/TraceKit, but has since been
 largely re-written and is now maintained as part of raven-js.  Tests for
 this are in test/vendor.

 MIT license
*/

var TraceKit = {
  collectWindowErrors: true,
  debug: false
};

// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)
var _window =
  typeof window !== 'undefined'
    ? window
    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

// global reference to slice
var _slice = [].slice;
var UNKNOWN_FUNCTION = '?';

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
var ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;

function getLocationHref() {
  if (typeof document === 'undefined' || document.location == null) return '';
  return document.location.href;
}

function getLocationOrigin() {
  if (typeof document === 'undefined' || document.location == null) return '';

  // Oh dear IE10...
  if (!document.location.origin) {
    document.location.origin =
      document.location.protocol +
      '//' +
      document.location.hostname +
      (document.location.port ? ':' + document.location.port : '');
  }

  return document.location.origin;
}

/**
 * TraceKit.report: cross-browser processing of unhandled exceptions
 *
 * Syntax:
 *   TraceKit.report.subscribe(function(stackInfo) { ... })
 *   TraceKit.report.unsubscribe(function(stackInfo) { ... })
 *   TraceKit.report(exception)
 *   try { ...code... } catch(ex) { TraceKit.report(ex); }
 *
 * Supports:
 *   - Firefox: full stack trace with line numbers, plus column number
 *              on top frame; column number is not guaranteed
 *   - Opera:   full stack trace with line and column numbers
 *   - Chrome:  full stack trace with line and column numbers
 *   - Safari:  line and column number for the top frame only; some frames
 *              may be missing, and column number is not guaranteed
 *   - IE:      line and column number for the top frame only; some frames
 *              may be missing, and column number is not guaranteed
 *
 * In theory, TraceKit should work on all of the following versions:
 *   - IE5.5+ (only 8.0 tested)
 *   - Firefox 0.9+ (only 3.5+ tested)
 *   - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
 *     Exceptions Have Stacktrace to be enabled in opera:config)
 *   - Safari 3+ (only 4+ tested)
 *   - Chrome 1+ (only 5+ tested)
 *   - Konqueror 3.5+ (untested)
 *
 * Requires TraceKit.computeStackTrace.
 *
 * Tries to catch all unhandled exceptions and report them to the
 * subscribed handlers. Please note that TraceKit.report will rethrow the
 * exception. This is REQUIRED in order to get a useful stack trace in IE.
 * If the exception does not reach the top of the browser, you will only
 * get a stack trace from the point where TraceKit.report was called.
 *
 * Handlers receive a stackInfo object as described in the
 * TraceKit.computeStackTrace docs.
 */
TraceKit.report = (function reportModuleWrapper() {
  var handlers = [],
    lastArgs = null,
    lastException = null,
    lastExceptionStack = null;

  /**
   * Add a crash handler.
   * @param {Function} handler
   */
  function subscribe(handler) {
    installGlobalHandler();
    handlers.push(handler);
  }

  /**
   * Remove a crash handler.
   * @param {Function} handler
   */
  function unsubscribe(handler) {
    for (var i = handlers.length - 1; i >= 0; --i) {
      if (handlers[i] === handler) {
        handlers.splice(i, 1);
      }
    }
  }

  /**
   * Remove all crash handlers.
   */
  function unsubscribeAll() {
    uninstallGlobalHandler();
    handlers = [];
  }

  /**
   * Dispatch stack information to all handlers.
   * @param {Object.<string, *>} stack
   */
  function notifyHandlers(stack, isWindowError) {
    var exception = null;
    if (isWindowError && !TraceKit.collectWindowErrors) {
      return;
    }
    for (var i in handlers) {
      if (handlers.hasOwnProperty(i)) {
        try {
          handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
        } catch (inner) {
          exception = inner;
        }
      }
    }

    if (exception) {
      throw exception;
    }
  }

  var _oldOnerrorHandler, _onErrorHandlerInstalled;

  /**
   * Ensures all global unhandled exceptions are recorded.
   * Supported by Gecko and IE.
   * @param {string} msg Error message.
   * @param {string} url URL of script that generated the exception.
   * @param {(number|string)} lineNo The line number at which the error
   * occurred.
   * @param {?(number|string)} colNo The column number at which the error
   * occurred.
   * @param {?Error} ex The actual Error object.
   */
  function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {
    var stack = null;
    // If 'ex' is ErrorEvent, get real Error from inside
    var exception = utils.isErrorEvent(ex) ? ex.error : ex;
    // If 'msg' is ErrorEvent, get real message from inside
    var message = utils.isErrorEvent(msg) ? msg.message : msg;

    if (lastExceptionStack) {
      TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(
        lastExceptionStack,
        url,
        lineNo,
        message
      );
      processLastException();
    } else if (exception && utils.isError(exception)) {
      // non-string `exception` arg; attempt to extract stack trace

      // New chrome and blink send along a real error object
      // Let's just report that like a normal error.
      // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
      stack = TraceKit.computeStackTrace(exception);
      notifyHandlers(stack, true);
    } else {
      var location = {
        url: url,
        line: lineNo,
        column: colNo
      };

      var name = undefined;
      var groups;

      if ({}.toString.call(message) === '[object String]') {
        var groups = message.match(ERROR_TYPES_RE);
        if (groups) {
          name = groups[1];
          message = groups[2];
        }
      }

      location.func = UNKNOWN_FUNCTION;

      stack = {
        name: name,
        message: message,
        url: getLocationHref(),
        stack: [location]
      };
      notifyHandlers(stack, true);
    }

    if (_oldOnerrorHandler) {
      return _oldOnerrorHandler.apply(this, arguments);
    }

    return false;
  }

  function installGlobalHandler() {
    if (_onErrorHandlerInstalled) {
      return;
    }
    _oldOnerrorHandler = _window.onerror;
    _window.onerror = traceKitWindowOnError;
    _onErrorHandlerInstalled = true;
  }

  function uninstallGlobalHandler() {
    if (!_onErrorHandlerInstalled) {
      return;
    }
    _window.onerror = _oldOnerrorHandler;
    _onErrorHandlerInstalled = false;
    _oldOnerrorHandler = undefined;
  }

  function processLastException() {
    var _lastExceptionStack = lastExceptionStack,
      _lastArgs = lastArgs;
    lastArgs = null;
    lastExceptionStack = null;
    lastException = null;
    notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
  }

  /**
   * Reports an unhandled Error to TraceKit.
   * @param {Error} ex
   * @param {?boolean} rethrow If false, do not re-throw the exception.
   * Only used for window.onerror to not cause an infinite loop of
   * rethrowing.
   */
  function report(ex, rethrow) {
    var args = _slice.call(arguments, 1);
    if (lastExceptionStack) {
      if (lastException === ex) {
        return; // already caught by an inner catch block, ignore
      } else {
        processLastException();
      }
    }

    var stack = TraceKit.computeStackTrace(ex);
    lastExceptionStack = stack;
    lastException = ex;
    lastArgs = args;

    // If the stack trace is incomplete, wait for 2 seconds for
    // slow slow IE to see if onerror occurs or not before reporting
    // this exception; otherwise, we will end up with an incomplete
    // stack trace
    setTimeout(function() {
      if (lastException === ex) {
        processLastException();
      }
    }, stack.incomplete ? 2000 : 0);

    if (rethrow !== false) {
      throw ex; // re-throw to propagate to the top level (and cause window.onerror)
    }
  }

  report.subscribe = subscribe;
  report.unsubscribe = unsubscribe;
  report.uninstall = unsubscribeAll;
  return report;
})();

/**
 * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
 *
 * Syntax:
 *   s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
 * Returns:
 *   s.name              - exception name
 *   s.message           - exception message
 *   s.stack[i].url      - JavaScript or HTML file URL
 *   s.stack[i].func     - function name, or empty for anonymous functions (if guessing did not work)
 *   s.stack[i].args     - arguments passed to the function, if known
 *   s.stack[i].line     - line number, if known
 *   s.stack[i].column   - column number, if known
 *
 * Supports:
 *   - Firefox:  full stack trace with line numbers and unreliable column
 *               number on top frame
 *   - Opera 10: full stack trace with line and column numbers
 *   - Opera 9-: full stack trace with line numbers
 *   - Chrome:   full stack trace with line and column numbers
 *   - Safari:   line and column number for the topmost stacktrace element
 *               only
 *   - IE:       no line numbers whatsoever
 *
 * Tries to guess names of anonymous functions by looking for assignments
 * in the source code. In IE and Safari, we have to guess source file names
 * by searching for function bodies inside all page scripts. This will not
 * work for scripts that are loaded cross-domain.
 * Here be dragons: some function names may be guessed incorrectly, and
 * duplicate functions may be mismatched.
 *
 * TraceKit.computeStackTrace should only be used for tracing purposes.
 * Logging of unhandled exceptions should be done with TraceKit.report,
 * which builds on top of TraceKit.computeStackTrace and provides better
 * IE support by utilizing the window.onerror event to retrieve information
 * about the top of the stack.
 *
 * Note: In IE and Safari, no stack trace is recorded on the Error object,
 * so computeStackTrace instead walks its *own* chain of callers.
 * This means that:
 *  * in Safari, some methods may be missing from the stack trace;
 *  * in IE, the topmost function in the stack trace will always be the
 *    caller of computeStackTrace.
 *
 * This is okay for tracing (because you are likely to be calling
 * computeStackTrace from the function you want to be the topmost element
 * of the stack trace anyway), but not okay for logging unhandled
 * exceptions (because your catch block will likely be far away from the
 * inner function that actually caused the exception).
 *
 */
TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
  // Contents of Exception in various browsers.
  //
  // SAFARI:
  // ex.message = Can't find variable: qq
  // ex.line = 59
  // ex.sourceId = 580238192
  // ex.sourceURL = http://...
  // ex.expressionBeginOffset = 96
  // ex.expressionCaretOffset = 98
  // ex.expressionEndOffset = 98
  // ex.name = ReferenceError
  //
  // FIREFOX:
  // ex.message = qq is not defined
  // ex.fileName = http://...
  // ex.lineNumber = 59
  // ex.columnNumber = 69
  // ex.stack = ...stack trace... (see the example below)
  // ex.name = ReferenceError
  //
  // CHROME:
  // ex.message = qq is not defined
  // ex.name = ReferenceError
  // ex.type = not_defined
  // ex.arguments = ['aa']
  // ex.stack = ...stack trace...
  //
  // INTERNET EXPLORER:
  // ex.message = ...
  // ex.name = ReferenceError
  //
  // OPERA:
  // ex.message = ...message... (see the example below)
  // ex.name = ReferenceError
  // ex.opera#sourceloc = 11  (pretty much useless, duplicates the info in ex.message)
  // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'

  /**
   * Computes stack trace information from the stack property.
   * Chrome and Gecko use this property.
   * @param {Error} ex
   * @return {?Object.<string, *>} Stack trace information.
   */
  function computeStackTraceFromStackProp(ex) {
    if (typeof ex.stack === 'undefined' || !ex.stack) return;

    var chrome = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
    var winjs = /^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;
    // NOTE: blob urls are now supposed to always have an origin, therefore it's format
    // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\/` as well
    var gecko = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i;
    // Used to additionally parse URL/line/column from eval frames
    var geckoEval = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i;
    var chromeEval = /\((\S*)(?::(\d+))(?::(\d+))\)/;
    var lines = ex.stack.split('\n');
    var stack = [];
    var submatch;
    var parts;
    var element;
    var reference = /^(.*) is undefined$/.exec(ex.message);

    for (var i = 0, j = lines.length; i < j; ++i) {
      if ((parts = chrome.exec(lines[i]))) {
        var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line
        var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line
        if (isEval && (submatch = chromeEval.exec(parts[2]))) {
          // throw out eval line/column and use top-most line/column number
          parts[2] = submatch[1]; // url
          parts[3] = submatch[2]; // line
          parts[4] = submatch[3]; // column
        }
        element = {
          url: !isNative ? parts[2] : null,
          func: parts[1] || UNKNOWN_FUNCTION,
          args: isNative ? [parts[2]] : [],
          line: parts[3] ? +parts[3] : null,
          column: parts[4] ? +parts[4] : null
        };
      } else if ((parts = winjs.exec(lines[i]))) {
        element = {
          url: parts[2],
          func: parts[1] || UNKNOWN_FUNCTION,
          args: [],
          line: +parts[3],
          column: parts[4] ? +parts[4] : null
        };
      } else if ((parts = gecko.exec(lines[i]))) {
        var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;
        if (isEval && (submatch = geckoEval.exec(parts[3]))) {
          // throw out eval line/column and use top-most line number
          parts[3] = submatch[1];
          parts[4] = submatch[2];
          parts[5] = null; // no column when eval
        } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {
          // FireFox uses this awesome columnNumber property for its top frame
          // Also note, Firefox's column number is 0-based and everything else expects 1-based,
          // so adding 1
          // NOTE: this hack doesn't work if top-most frame is eval
          stack[0].column = ex.columnNumber + 1;
        }
        element = {
          url: parts[3],
          func: parts[1] || UNKNOWN_FUNCTION,
          args: parts[2] ? parts[2].split(',') : [],
          line: parts[4] ? +parts[4] : null,
          column: parts[5] ? +parts[5] : null
        };
      } else {
        continue;
      }

      if (!element.func && element.line) {
        element.func = UNKNOWN_FUNCTION;
      }

      if (element.url && element.url.substr(0, 5) === 'blob:') {
        // Special case for handling JavaScript loaded into a blob.
        // We use a synchronous AJAX request here as a blob is already in
        // memory - it's not making a network request.  This will generate a warning
        // in the browser console, but there has already been an error so that's not
        // that much of an issue.
        var xhr = new XMLHttpRequest();
        xhr.open('GET', element.url, false);
        xhr.send(null);

        // If we failed to download the source, skip this patch
        if (xhr.status === 200) {
          var source = xhr.responseText || '';

          // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.
          // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175
          source = source.slice(-300);

          // Now we dig out the source map URL
          var sourceMaps = source.match(/\/\/# sourceMappingURL=(.*)$/);

          // If we don't find a source map comment or we find more than one, continue on to the next element.
          if (sourceMaps) {
            var sourceMapAddress = sourceMaps[1];

            // Now we check to see if it's a relative URL.
            // If it is, convert it to an absolute one.
            if (sourceMapAddress.charAt(0) === '~') {
              sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);
            }

            // Now we strip the '.map' off of the end of the URL and update the
            // element so that Sentry can match the map to the blob.
            element.url = sourceMapAddress.slice(0, -4);
          }
        }
      }

      stack.push(element);
    }

    if (!stack.length) {
      return null;
    }

    return {
      name: ex.name,
      message: ex.message,
      url: getLocationHref(),
      stack: stack
    };
  }

  /**
   * Adds information about the first frame to incomplete stack traces.
   * Safari and IE require this to get complete data on the first frame.
   * @param {Object.<string, *>} stackInfo Stack trace information from
   * one of the compute* methods.
   * @param {string} url The URL of the script that caused an error.
   * @param {(number|string)} lineNo The line number of the script that
   * caused an error.
   * @param {string=} message The error generated by the browser, which
   * hopefully contains the name of the object that caused the error.
   * @return {boolean} Whether or not the stack information was
   * augmented.
   */
  function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {
    var initial = {
      url: url,
      line: lineNo
    };

    if (initial.url && initial.line) {
      stackInfo.incomplete = false;

      if (!initial.func) {
        initial.func = UNKNOWN_FUNCTION;
      }

      if (stackInfo.stack.length > 0) {
        if (stackInfo.stack[0].url === initial.url) {
          if (stackInfo.stack[0].line === initial.line) {
            return false; // already in stack trace
          } else if (
            !stackInfo.stack[0].line &&
            stackInfo.stack[0].func === initial.func
          ) {
            stackInfo.stack[0].line = initial.line;
            return false;
          }
        }
      }

      stackInfo.stack.unshift(initial);
      stackInfo.partial = true;
      return true;
    } else {
      stackInfo.incomplete = true;
    }

    return false;
  }

  /**
   * Computes stack trace information by walking the arguments.caller
   * chain at the time the exception occurred. This will cause earlier
   * frames to be missed but is the only way to get any stack trace in
   * Safari and IE. The top frame is restored by
   * {@link augmentStackTraceWithInitialElement}.
   * @param {Error} ex
   * @return {?Object.<string, *>} Stack trace information.
   */
  function computeStackTraceByWalkingCallerChain(ex, depth) {
    var functionName = /function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,
      stack = [],
      funcs = {},
      recursion = false,
      parts,
      item,
      source;

    for (
      var curr = computeStackTraceByWalkingCallerChain.caller;
      curr && !recursion;
      curr = curr.caller
    ) {
      if (curr === computeStackTrace || curr === TraceKit.report) {
        // console.log('skipping internal function');
        continue;
      }

      item = {
        url: null,
        func: UNKNOWN_FUNCTION,
        line: null,
        column: null
      };

      if (curr.name) {
        item.func = curr.name;
      } else if ((parts = functionName.exec(curr.toString()))) {
        item.func = parts[1];
      }

      if (typeof item.func === 'undefined') {
        try {
          item.func = parts.input.substring(0, parts.input.indexOf('{'));
        } catch (e) {}
      }

      if (funcs['' + curr]) {
        recursion = true;
      } else {
        funcs['' + curr] = true;
      }

      stack.push(item);
    }

    if (depth) {
      // console.log('depth is ' + depth);
      // console.log('stack is ' + stack.length);
      stack.splice(0, depth);
    }

    var result = {
      name: ex.name,
      message: ex.message,
      url: getLocationHref(),
      stack: stack
    };
    augmentStackTraceWithInitialElement(
      result,
      ex.sourceURL || ex.fileName,
      ex.line || ex.lineNumber,
      ex.message || ex.description
    );
    return result;
  }

  /**
   * Computes a stack trace for an exception.
   * @param {Error} ex
   * @param {(string|number)=} depth
   */
  function computeStackTrace(ex, depth) {
    var stack = null;
    depth = depth == null ? 0 : +depth;

    try {
      stack = computeStackTraceFromStackProp(ex);
      if (stack) {
        return stack;
      }
    } catch (e) {
      if (TraceKit.debug) {
        throw e;
      }
    }

    try {
      stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);
      if (stack) {
        return stack;
      }
    } catch (e) {
      if (TraceKit.debug) {
        throw e;
      }
    }
    return {
      name: ex.name,
      message: ex.message,
      url: getLocationHref()
    };
  }

  computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
  computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;

  return computeStackTrace;
})();

module.exports = TraceKit;

}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"5":5}],7:[function(_dereq_,module,exports){
/*
 json-stringify-safe
 Like JSON.stringify, but doesn't throw on circular references.

 Originally forked from https://github.com/isaacs/json-stringify-safe
 version 5.0.1 on 3/8/2017 and modified to handle Errors serialization
 and IE8 compatibility. Tests for this are in test/vendor.

 ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE
*/

exports = module.exports = stringify;
exports.getSerialize = serializer;

function indexOf(haystack, needle) {
  for (var i = 0; i < haystack.length; ++i) {
    if (haystack[i] === needle) return i;
  }
  return -1;
}

function stringify(obj, replacer, spaces, cycleReplacer) {
  return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);
}

// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106
function stringifyError(value) {
  var err = {
    // These properties are implemented as magical getters and don't show up in for in
    stack: value.stack,
    message: value.message,
    name: value.name
  };

  for (var i in value) {
    if (Object.prototype.hasOwnProperty.call(value, i)) {
      err[i] = value[i];
    }
  }

  return err;
}

function serializer(replacer, cycleReplacer) {
  var stack = [];
  var keys = [];

  if (cycleReplacer == null) {
    cycleReplacer = function(key, value) {
      if (stack[0] === value) {
        return '[Circular ~]';
      }
      return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';
    };
  }

  return function(key, value) {
    if (stack.length > 0) {
      var thisPos = indexOf(stack, this);
      ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
      ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);

      if (~indexOf(stack, value)) {
        value = cycleReplacer.call(this, key, value);
      }
    } else {
      stack.push(value);
    }

    return replacer == null
      ? value instanceof Error ? stringifyError(value) : value
      : replacer.call(this, key, value);
  };
}

},{}],8:[function(_dereq_,module,exports){
/*
 * JavaScript MD5
 * https://github.com/blueimp/JavaScript-MD5
 *
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * https://opensource.org/licenses/MIT
 *
 * Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safeAdd(x, y) {
  var lsw = (x & 0xffff) + (y & 0xffff);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xffff);
}

/*
* Bitwise rotate a 32-bit number to the left.
*/
function bitRotateLeft(num, cnt) {
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5cmn(q, a, b, x, s, t) {
  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
}
function md5ff(a, b, c, d, x, s, t) {
  return md5cmn((b & c) | (~b & d), a, b, x, s, t);
}
function md5gg(a, b, c, d, x, s, t) {
  return md5cmn((b & d) | (c & ~d), a, b, x, s, t);
}
function md5hh(a, b, c, d, x, s, t) {
  return md5cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5ii(a, b, c, d, x, s, t) {
  return md5cmn(c ^ (b | ~d), a, b, x, s, t);
}

/*
* Calculate the MD5 of an array of little-endian words, and a bit length.
*/
function binlMD5(x, len) {
  /* append padding */
  x[len >> 5] |= 0x80 << (len % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var i;
  var olda;
  var oldb;
  var oldc;
  var oldd;
  var a = 1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d = 271733878;

  for (i = 0; i < x.length; i += 16) {
    olda = a;
    oldb = b;
    oldc = c;
    oldd = d;

    a = md5ff(a, b, c, d, x[i], 7, -680876936);
    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);

    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
    b = md5gg(b, c, d, a, x[i], 20, -373897302);
    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);

    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
    d = md5hh(d, a, b, c, x[i], 11, -358537222);
    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);

    a = md5ii(a, b, c, d, x[i], 6, -198630844);
    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);

    a = safeAdd(a, olda);
    b = safeAdd(b, oldb);
    c = safeAdd(c, oldc);
    d = safeAdd(d, oldd);
  }
  return [a, b, c, d];
}

/*
* Convert an array of little-endian words to a string
*/
function binl2rstr(input) {
  var i;
  var output = '';
  var length32 = input.length * 32;
  for (i = 0; i < length32; i += 8) {
    output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
  }
  return output;
}

/*
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*/
function rstr2binl(input) {
  var i;
  var output = [];
  output[(input.length >> 2) - 1] = undefined;
  for (i = 0; i < output.length; i += 1) {
    output[i] = 0;
  }
  var length8 = input.length * 8;
  for (i = 0; i < length8; i += 8) {
    output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
  }
  return output;
}

/*
* Calculate the MD5 of a raw string
*/
function rstrMD5(s) {
  return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));
}

/*
* Calculate the HMAC-MD5, of a key and some data (raw strings)
*/
function rstrHMACMD5(key, data) {
  var i;
  var bkey = rstr2binl(key);
  var ipad = [];
  var opad = [];
  var hash;
  ipad[15] = opad[15] = undefined;
  if (bkey.length > 16) {
    bkey = binlMD5(bkey, key.length * 8);
  }
  for (i = 0; i < 16; i += 1) {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5c5c5c5c;
  }
  hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
  return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));
}

/*
* Convert a raw string to a hex string
*/
function rstr2hex(input) {
  var hexTab = '0123456789abcdef';
  var output = '';
  var x;
  var i;
  for (i = 0; i < input.length; i += 1) {
    x = input.charCodeAt(i);
    output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
  }
  return output;
}

/*
* Encode a string as utf-8
*/
function str2rstrUTF8(input) {
  return unescape(encodeURIComponent(input));
}

/*
* Take string arguments and return either raw or hex encoded strings
*/
function rawMD5(s) {
  return rstrMD5(str2rstrUTF8(s));
}
function hexMD5(s) {
  return rstr2hex(rawMD5(s));
}
function rawHMACMD5(k, d) {
  return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
}
function hexHMACMD5(k, d) {
  return rstr2hex(rawHMACMD5(k, d));
}

function md5(string, key, raw) {
  if (!key) {
    if (!raw) {
      return hexMD5(string);
    }
    return rawMD5(string);
  }
  if (!raw) {
    return hexHMACMD5(key, string);
  }
  return rawHMACMD5(key, string);
}

module.exports = md5;

},{}]},{},[4])(4)
});PK
!<á{VI¿¿webextension/build/selection.jsthis.selection = (function () {let exports={}; class Selection {
  constructor(x1, y1, x2, y2) {
    this.x1 = x1;
    this.y1 = y1;
    this.x2 = x2;
    this.y2 = y2;
  }

  get top() {
    return Math.min(this.y1, this.y2);
  }
  set top(val) {
    if (this.y1 < this.y2) {
      this.y1 = val;
    } else {
      this.y2 = val;
    }
  }

  get bottom() {
    return Math.max(this.y1, this.y2);
  }
  set bottom(val) {
    if (this.y1 > this.y2) {
      this.y1 = val;
    } else {
      this.y2 = val;
    }
  }

  get left() {
    return Math.min(this.x1, this.x2);
  }
  set left(val) {
    if (this.x1 < this.x2) {
      this.x1 = val;
    } else {
      this.x2 = val;
    }
  }

  get right() {
    return Math.max(this.x1, this.x2);
  }
  set right(val) {
    if (this.x1 > this.x2) {
      this.x1 = val;
    } else {
      this.x2 = val;
    }
  }

  get width() {
    return Math.abs(this.x2 - this.x1);
  }
  get height() {
    return Math.abs(this.y2 - this.y1);
  }

  rect() {
    return {
      top: Math.floor(this.top),
      left: Math.floor(this.left),
      bottom: Math.floor(this.bottom),
      right: Math.floor(this.right)
    };
  }

  union(other) {
    return new Selection(
      Math.min(this.left, other.left),
      Math.min(this.top, other.top),
      Math.max(this.right, other.right),
      Math.max(this.bottom, other.bottom)
    );
  }

  /** Sort x1/x2 and y1/y2 so x1<x2, y1<y2 */
  sortCoords() {
    if (this.x1 > this.x2) {
      [this.x1, this.x2] = [this.x2, this.x1];
    }
    if (this.y1 > this.y2) {
      [this.y1, this.y2] = [this.y2, this.y1];
    }
  }

  clone() {
    return new Selection(this.x1, this.y1, this.x2, this.y2);
  }

  toJSON() {
    return {
      left: this.left,
      right: this.right,
      top: this.top,
      bottom: this.bottom
    };
  }

  static getBoundingClientRect(el) {
    if (!el.getBoundingClientRect) {
      // Typically the <html> element or somesuch
      return null;
    }
    const rect = el.getBoundingClientRect();
    if (!rect) {
      return null;
    }
    return new Selection(rect.left, rect.top, rect.right, rect.bottom);
  }
}

if (typeof exports !== "undefined") {
  exports.Selection = Selection;
}

return exports;
})();
null;

PK
!<œ2¢S¢Swebextension/build/shot.jsthis.shot = (function () {let exports={}; // Note: in this library we can't use any "system" dependencies because this can be used from multiple
// environments

const isNode = typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]";
const URL = (isNode && require("url").URL) || window.URL;

/** Throws an error if the condition isn't true.  Any extra arguments after the condition
    are used as console.error() arguments. */
function assert(condition, ...args) {
  if (condition) {
    return;
  }
  console.error("Failed assertion", ...args);
  throw new Error(`Failed assertion: ${args.join(" ")}`);
}

/** True if `url` is a valid URL */
function isUrl(url) {
  try {
    const parsed = new URL(url);

    if (parsed.protocol === "view-source:") {
      return isUrl(url.substr("view-source:".length));
    }

    return true;
  } catch (e) {
    return false;
  }
}

function isValidClipImageUrl(url) {
    return isUrl(url) && !(url.indexOf(")") > -1);
}

function assertUrl(url) {
  if (!url) {
    throw new Error("Empty value is not URL");
  }
  if (!isUrl(url)) {
    const exc = new Error("Not a URL");
    exc.scheme = url.split(":")[0];
    throw exc;
  }
}

function isSecureWebUri(url) {
  return isUrl(url) && url.toLowerCase().startsWith("https");
}

function assertOrigin(url) {
  assertUrl(url);
  if (url.search(/^https?:/i) !== -1) {
    const match = (/^https?:\/\/[^/:]{1,4000}\/?$/i).exec(url);
    if (!match) {
      throw new Error("Bad origin, might include path");
    }
  }
}

function originFromUrl(url) {
  if (!url) {
    return null;
  }
  if (url.search(/^https?:/i) === -1) {
    // Non-HTTP URLs don't have an origin
    return null;
  }
  const match = (/^https?:\/\/[^/:]{1,4000}/i).exec(url);
  if (match) {
    return match[0];
  }
  return null;
}

/** Check if the given object has all of the required attributes, and no extra
    attributes exception those in optional */
function checkObject(obj, required, optional) {
  if (typeof obj !== "object" || obj === null) {
    throw new Error("Cannot check non-object: " + (typeof obj) + " that is " + JSON.stringify(obj));
  }
  required = required || [];
  for (const attr of required) {
    if (!(attr in obj)) {
      return false;
    }
  }
  optional = optional || [];
  for (const attr in obj) {
    if (!required.includes(attr) && !optional.includes(attr)) {
      return false;
    }
  }
  return true;
}

/** Create a JSON object from a normal object, given the required and optional
    attributes (filtering out any other attributes).  Optional attributes are
    only kept when they are truthy. */
function jsonify(obj, required, optional) {
  required = required || [];
  const result = {};
  for (const attr of required) {
    result[attr] = obj[attr];
  }
  optional = optional || [];
  for (const attr of optional) {
    if (obj[attr]) {
      result[attr] = obj[attr];
    }
  }
  return result;
}

/** True if the two objects look alike.  Null, undefined, and absent properties
    are all treated as equivalent.  Traverses objects and arrays */
function deepEqual(a, b) {
  if ((a === null || a === undefined) && (b === null || b === undefined)) {
    return true;
  }
  if (typeof a !== "object" || typeof b !== "object") {
    return a === b;
  }
  if (Array.isArray(a)) {
    if (!Array.isArray(b)) {
      return false;
    }
    if (a.length !== b.length) {
      return false;
    }
    for (let i = 0; i < a.length; i++) {
      if (!deepEqual(a[i], b[i])) {
        return false;
      }
    }
  }
  if (Array.isArray(b)) {
    return false;
  }
  const seen = new Set();
  for (const attr of Object.keys(a)) {
    if (!deepEqual(a[attr], b[attr])) {
      return false;
    }
    seen.add(attr);
  }
  for (const attr of Object.keys(b)) {
    if (!seen.has(attr)) {
      if (!deepEqual(a[attr], b[attr])) {
        return false;
      }
    }
  }
  return true;
}

function makeRandomId() {
  // Note: this isn't for secure contexts, only for non-conflicting IDs
  let id = "";
  while (id.length < 12) {
    let num;
    if (!id) {
      num = Date.now() % Math.pow(36, 3);
    } else {
      num = Math.floor(Math.random() * Math.pow(36, 3));
    }
    id += num.toString(36);
  }
  return id;
}

class AbstractShot {

  constructor(backend, id, attrs) {
    attrs = attrs || {};
    assert((/^[a-zA-Z0-9]{1,4000}\/[a-z0-9._-]{1,4000}$/).test(id), "Bad ID (should be alphanumeric):", JSON.stringify(id));
    this._backend = backend;
    this._id = id;
    this.origin = attrs.origin || null;
    this.fullUrl = attrs.fullUrl || null;
    if ((!attrs.fullUrl) && attrs.url) {
      console.warn("Received deprecated attribute .url");
      this.fullUrl = attrs.url;
    }
    if (this.origin && !isSecureWebUri(this.origin)) {
      this.origin = "";
    }
    if (this.fullUrl && !isSecureWebUri(this.fullUrl)) {
      this.fullUrl = "";
    }
    this.docTitle = attrs.docTitle || null;
    this.userTitle = attrs.userTitle || null;
    this.createdDate = attrs.createdDate || Date.now();
    this.favicon = attrs.favicon || null;
    this.siteName = attrs.siteName || null;
    this.images = [];
    if (attrs.images) {
      this.images = attrs.images.map(
        (json) => new this.Image(json));
    }
    this.openGraph = attrs.openGraph || null;
    this.twitterCard = attrs.twitterCard || null;
    this.documentSize = attrs.documentSize || null;
    this.thumbnail = attrs.thumbnail || null;
    this.abTests = attrs.abTests || null;
    this._clips = {};
    if (attrs.clips) {
      for (const clipId in attrs.clips) {
        const clip = attrs.clips[clipId];
        this._clips[clipId] = new this.Clip(this, clipId, clip);
      }
    }

    const isProd = typeof process !== "undefined" && process.env.NODE_ENV === "production";

    for (const attr in attrs) {
      if (attr !== "clips" && attr !== "id" && !this.REGULAR_ATTRS.includes(attr) && !this.DEPRECATED_ATTRS.includes(attr)) {
        if (isProd) {
          console.warn("Unexpected attribute: " + attr);
        } else {
          throw new Error("Unexpected attribute: " + attr);
        }
      } else if (attr === "id") {
        console.warn("passing id in attrs in AbstractShot constructor");
        console.trace();
        assert(attrs.id === this.id);
      }
    }
  }

  /** Update any and all attributes in the json object, with deep updating
      of `json.clips` */
  update(json) {
    const ALL_ATTRS = ["clips"].concat(this.REGULAR_ATTRS);
    assert(checkObject(json, [], ALL_ATTRS), "Bad attr to new Shot():", Object.keys(json));
    for (const attr in json) {
      if (attr === "clips") {
        continue;
      }
      if (typeof json[attr] === "object" && typeof this[attr] === "object" && this[attr] !== null) {
        let val = this[attr];
        if (val.toJSON) {
          val = val.toJSON();
        }
        if (!deepEqual(json[attr], val)) {
          this[attr] = json[attr];
        }
      } else if (json[attr] !== this[attr] &&
          (json[attr] || this[attr])) {
        this[attr] = json[attr];
      }
    }
    if (json.clips) {
      for (const clipId in json.clips) {
        if (!json.clips[clipId]) {
          this.delClip(clipId);
        } else if (!this.getClip(clipId)) {
          this.setClip(clipId, json.clips[clipId]);
        } else if (!deepEqual(this.getClip(clipId).toJSON(), json.clips[clipId])) {
          this.setClip(clipId, json.clips[clipId]);
        }
      }
    }

  }

  /** Returns a JSON version of this shot */
  toJSON() {
    const result = {};
    for (const attr of this.REGULAR_ATTRS) {
      let val = this[attr];
      if (val && val.toJSON) {
        val = val.toJSON();
      }
      result[attr] = val;
    }
    result.clips = {};
    for (const attr in this._clips) {
      result.clips[attr] = this._clips[attr].toJSON();
    }
    return result;
  }

  /** A more minimal JSON representation for creating indexes of shots */
  asRecallJson() {
    const result = {clips: {}};
    for (const attr of this.RECALL_ATTRS) {
      let val = this[attr];
      if (val && val.toJSON) {
        val = val.toJSON();
      }
      result[attr] = val;
    }
    for (const name of this.clipNames()) {
      result.clips[name] = this.getClip(name).toJSON();
    }
    return result;
  }

  get backend() {
    return this._backend;
  }

  get id() {
    return this._id;
  }

  get url() {
    return this.fullUrl || this.origin;
  }
  set url(val) {
    throw new Error(".url is read-only");
  }

  get fullUrl() {
    return this._fullUrl;
  }
  set fullUrl(val) {
    if (val) {
      assertUrl(val);
    }
    this._fullUrl = val || undefined;
  }

  get origin() {
    return this._origin;
  }
  set origin(val) {
    if (val) {
      assertOrigin(val);
    }
    this._origin = val || undefined;
  }

  get filename() {
    let filenameTitle = this.title;
    const date = new Date(this.createdDate);
    // eslint-disable-next-line no-control-regex
    filenameTitle = filenameTitle.replace(/[:\\<>/!@&?"*.|\x00-\x1F]/g, " ");
    filenameTitle = filenameTitle.replace(/\s{1,4000}/g, " ");
    const filenameDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000).toISOString().substring(0, 10);
    let clipFilename = `Screenshot_${filenameDate} ${filenameTitle}`;
    const clipFilenameBytesSize = clipFilename.length * 2; // JS STrings are UTF-16
    if (clipFilenameBytesSize > 251) { // 255 bytes (Usual filesystems max) - 4 for the ".png" file extension string
      const excedingchars = (clipFilenameBytesSize - 246) / 2; // 251 - 5 for ellipsis "[...]"
      clipFilename = clipFilename.substring(0, clipFilename.length - excedingchars);
      clipFilename = clipFilename + "[...]";
    }
    const clip = this.getClip(this.clipNames()[0]);
    let extension = ".png";
    if (clip && clip.image && clip.image.type) {
      if (clip.image.type === "jpeg") {
        extension = ".jpg";
      }
    }
    return clipFilename + extension;
  }

  get urlDisplay() {
    if (!this.url) {
      return null;
    }
    if (/^https?:\/\//i.test(this.url)) {
      let txt = this.url;
      txt = txt.replace(/^[a-z]{1,4000}:\/\//i, "");
      txt = txt.replace(/\/.{0,4000}/, "");
      txt = txt.replace(/^www\./i, "");
      return txt;
    } else if (this.url.startsWith("data:")) {
      return "data:url";
    }
    let txt = this.url;
    txt = txt.replace(/\?.{0,4000}/, "");
    return txt;
  }

  get viewUrl() {
    const url = this.backend + "/" + this.id;
    return url;
  }

  get creatingUrl() {
    let url = `${this.backend}/creating/${this.id}`;
    url += `?title=${encodeURIComponent(this.title || "")}`;
    url += `&url=${encodeURIComponent(this.url)}`;
    return url;
  }

  get jsonUrl() {
    return this.backend + "/data/" + this.id;
  }

  get oembedUrl() {
    return this.backend + "/oembed?url=" + encodeURIComponent(this.viewUrl);
  }

  get docTitle() {
    return this._title;
  }
  set docTitle(val) {
    assert(val === null || typeof val === "string", "Bad docTitle:", val);
    this._title = val;
  }

  get openGraph() {
    return this._openGraph || null;
  }
  set openGraph(val) {
    assert(val === null || typeof val === "object", "Bad openGraph:", val);
    if (val) {
      assert(checkObject(val, [], this._OPENGRAPH_PROPERTIES), "Bad attr to openGraph:", Object.keys(val));
      this._openGraph = val;
    } else {
      this._openGraph = null;
    }
  }

  get twitterCard() {
    return this._twitterCard || null;
  }
  set twitterCard(val) {
    assert(val === null || typeof val === "object", "Bad twitterCard:", val);
    if (val) {
      assert(checkObject(val, [], this._TWITTERCARD_PROPERTIES), "Bad attr to twitterCard:", Object.keys(val));
      this._twitterCard = val;
    } else {
      this._twitterCard = null;
    }
  }

  get userTitle() {
    return this._userTitle;
  }
  set userTitle(val) {
    assert(val === null || typeof val === "string", "Bad userTitle:", val);
    this._userTitle = val;
  }

  get title() {
    // FIXME: we shouldn't support both openGraph.title and ogTitle
    const ogTitle = this.openGraph && this.openGraph.title;
    const twitterTitle = this.twitterCard && this.twitterCard.title;
    let title = this.userTitle || ogTitle || twitterTitle || this.docTitle || this.url;
    if (Array.isArray(title)) {
      title = title[0];
    }
    if (!title) {
      title = "Screenshot";
    }
    return title;
  }

  get createdDate() {
    return this._createdDate;
  }
  set createdDate(val) {
    assert(val === null || typeof val === "number", "Bad createdDate:", val);
    this._createdDate = val;
  }

  get favicon() {
    return this._favicon;
  }
  set favicon(val) {
    // We set the favicon with tabs.Tab.faviConUrl, which is a full URL.
    val = val || null;
    this._favicon = val;
  }

  clipNames() {
    const names = Object.getOwnPropertyNames(this._clips);
    names.sort(function(a, b) {
      return a.sortOrder < b.sortOrder ? 1 : 0;
    });
    return names;
  }
  getClip(name) {
    return this._clips[name];
  }
  addClip(val) {
    const name = makeRandomId();
    this.setClip(name, val);
    return name;
  }
  setClip(name, val) {
    const clip = new this.Clip(this, name, val);
    this._clips[name] = clip;
  }
  delClip(name) {
    if (!this._clips[name]) {
      throw new Error("No existing clip with id: " + name);
    }
    delete this._clips[name];
  }
  delAllClips() {
    this._clips = {};
  }
  biggestClipSortOrder() {
    let biggest = 0;
    for (const clipId in this._clips) {
      biggest = Math.max(biggest, this._clips[clipId].sortOrder);
    }
    return biggest;
  }
  updateClipUrl(clipId, clipUrl) {
    const clip = this.getClip(clipId);
    if ( clip && clip.image ) {
      clip.image.url = clipUrl;
    } else {
      console.warn("Tried to update the url of a clip with no image:", clip);
    }
  }

  get siteName() {
    return this._siteName || null;
  }
  set siteName(val) {
    assert(typeof val === "string" || !val);
    this._siteName = val;
  }

  get documentSize() {
    return this._documentSize;
  }
  set documentSize(val) {
    assert(typeof val === "object" || !val);
    if (val) {
      assert(checkObject(val, ["height", "width"], "Bad attr to documentSize:", Object.keys(val)));
      assert(typeof val.height === "number");
      assert(typeof val.width === "number");
      this._documentSize = val;
    } else {
      this._documentSize = null;
    }
  }

  get thumbnail() {
    return this._thumbnail;
  }
  set thumbnail(val) {
    assert(typeof val === "string" || !val);
    if (val) {
      assert(isUrl(val));
      this._thumbnail = val;
    } else {
      this._thumbnail = null;
    }
  }

  get abTests() {
    return this._abTests;
  }
  set abTests(val) {
    if (val === null || val === undefined) {
      this._abTests = null;
      return;
    }
    assert(typeof val === "object", "abTests should be an object, not:", typeof val);
    assert(!Array.isArray(val), "abTests should not be an Array");
    for (const name in val) {
      assert(val[name] && typeof val[name] === "string", `abTests.${name} should be a string:`, typeof val[name]);
    }
    this._abTests = val;
  }

}

AbstractShot.prototype.REGULAR_ATTRS = (`
origin fullUrl docTitle userTitle createdDate favicon images
siteName openGraph twitterCard documentSize
thumbnail abTests
`).split(/\s+/g);

// Attributes that will be accepted in the constructor, but ignored/dropped
AbstractShot.prototype.DEPRECATED_ATTRS = (`
microdata history ogTitle createdDevice head body htmlAttrs bodyAttrs headAttrs
readable hashtags comments showPage isPublic resources deviceId url
fullScreenThumbnail
`).split(/\s+/g);

AbstractShot.prototype.RECALL_ATTRS = (`
url docTitle userTitle createdDate favicon
openGraph twitterCard images thumbnail
`).split(/\s+/g);

AbstractShot.prototype._OPENGRAPH_PROPERTIES = (`
title type url image audio description determiner locale site_name video
image:secure_url image:type image:width image:height
video:secure_url video:type video:width image:height
audio:secure_url audio:type
article:published_time article:modified_time article:expiration_time article:author article:section article:tag
book:author book:isbn book:release_date book:tag
profile:first_name profile:last_name profile:username profile:gender
`).split(/\s+/g);

AbstractShot.prototype._TWITTERCARD_PROPERTIES = (`
card site title description image
player player:width player:height player:stream player:stream:content_type
`).split(/\s+/g);

/** Represents one found image in the document (not a clip) */
class _Image {
  // FIXME: either we have to notify the shot of updates, or make
  // this read-only
  constructor(json) {
    assert(typeof json === "object", "Clip Image given a non-object", json);
    assert(checkObject(json, ["url"], ["dimensions", "title", "alt"]), "Bad attrs for Image:", Object.keys(json));
    assert(isUrl(json.url), "Bad Image url:", json.url);
    this.url = json.url;
    assert((!json.dimensions) ||
           (typeof json.dimensions.x === "number" && typeof json.dimensions.y === "number"),
           "Bad Image dimensions:", json.dimensions);
    this.dimensions = json.dimensions;
    assert(typeof json.title === "string" || !json.title, "Bad Image title:", json.title);
    this.title = json.title;
    assert(typeof json.alt === "string" || !json.alt, "Bad Image alt:", json.alt);
    this.alt = json.alt;
  }

  toJSON() {
    return jsonify(this, ["url"], ["dimensions"]);
  }
}

AbstractShot.prototype.Image = _Image;

/** Represents a clip, either a text or image clip */
class _Clip {
  constructor(shot, id, json) {
    this._shot = shot;
    assert(checkObject(json, ["createdDate", "image"], ["sortOrder"]), "Bad attrs for Clip:", Object.keys(json));
    assert(typeof id === "string" && id, "Bad Clip id:", id);
    this._id = id;
    this.createdDate = json.createdDate;
    if ("sortOrder" in json) {
      assert(typeof json.sortOrder === "number" || !json.sortOrder, "Bad Clip sortOrder:", json.sortOrder);
    }
    if ("sortOrder" in json) {
      this.sortOrder = json.sortOrder;
    } else {
      const biggestOrder = shot.biggestClipSortOrder();
      this.sortOrder = biggestOrder + 100;
    }
    this.image = json.image;
  }

  toString() {
    return `[Shot Clip id=${this.id} sortOrder=${this.sortOrder} image ${this.image.dimensions.x}x${this.image.dimensions.y}]`;
  }

  toJSON() {
    return jsonify(this, ["createdDate"], ["sortOrder", "image"]);
  }

  get id() {
    return this._id;
  }

  get createdDate() {
    return this._createdDate;
  }
  set createdDate(val) {
    assert(typeof val === "number" || !val, "Bad Clip createdDate:", val);
    this._createdDate = val;
  }

  get image() {
    return this._image;
  }
  set image(image) {
    if (!image) {
      this._image = undefined;
      return;
    }
    assert(checkObject(image, ["url"], ["dimensions", "text", "location", "captureType", "type"]), "Bad attrs for Clip Image:", Object.keys(image));
    assert(isValidClipImageUrl(image.url), "Bad Clip image URL:", image.url);
    assert(
      image.captureType === "madeSelection" ||
      image.captureType === "selection" ||
      image.captureType === "visible" ||
      image.captureType === "auto" ||
      image.captureType === "fullPage" ||
      image.captureType === "fullPageTruncated" ||
      !image.captureType, "Bad image.captureType:", image.captureType);
    assert(typeof image.text === "string" || !image.text, "Bad Clip image text:", image.text);
    if (image.dimensions) {
      assert(typeof image.dimensions.x === "number" && typeof image.dimensions.y === "number", "Bad Clip image dimensions:", image.dimensions);
    }
    if (image.type) {
      assert(image.type === "png" || image.type === "jpeg", "Unexpected image type:", image.type);
    }
    assert(image.location &&
      typeof image.location.left === "number" &&
      typeof image.location.right === "number" &&
      typeof image.location.top === "number" &&
      typeof image.location.bottom === "number", "Bad Clip image pixel location:", image.location);
    if (image.location.topLeftElement || image.location.topLeftOffset ||
        image.location.bottomRightElement || image.location.bottomRightOffset) {
      assert(typeof image.location.topLeftElement === "string" &&
        image.location.topLeftOffset &&
        typeof image.location.topLeftOffset.x === "number" &&
        typeof image.location.topLeftOffset.y === "number" &&
        typeof image.location.bottomRightElement === "string" &&
        image.location.bottomRightOffset &&
        typeof image.location.bottomRightOffset.x === "number" &&
        typeof image.location.bottomRightOffset.y === "number",
        "Bad Clip image element location:", image.location);
    }
    this._image = image;
  }

  isDataUrl() {
    if (this.image) {
      return this.image.url.startsWith("data:");
    }
    return false;
  }

  get sortOrder() {
    return this._sortOrder || null;
  }
  set sortOrder(val) {
    assert(typeof val === "number" || !val, "Bad Clip sortOrder:", val);
    this._sortOrder = val;
  }

}

AbstractShot.prototype.Clip = _Clip;

if (typeof exports !== "undefined") {
  exports.AbstractShot = AbstractShot;
  exports.originFromUrl = originFromUrl;
  exports.isValidClipImageUrl = isValidClipImageUrl;
}

return exports;
})();
null;

PK
!<á8?¢¢(webextension/build/thumbnailGenerator.jsthis.thumbnailGenerator = (function () {let exports={}; // This is used in addon/webextension/background/takeshot.js,
// server/src/pages/shot/controller.js, and
// server/scr/pages/shotindex/view.js. It is used in a browser
// environment.

// Resize down 1/2 at a time produces better image quality.
// Not quite as good as using a third-party filter (which will be
// slower), but good enough.
const maxResizeScaleFactor = 0.5;

// The shot will be scaled or cropped down to 210px on x, and cropped or
// scaled down to a maximum of 280px on y.
// x: 210
// y: <= 280
const maxThumbnailWidth = 210;
const maxThumbnailHeight = 280;

/**
 * @param {int} imageHeight Height in pixels of the original image.
 * @param {int} imageWidth Width in pixels of the original image.
 * @returns {width, height, scaledX, scaledY}
 */
function getThumbnailDimensions(imageWidth, imageHeight) {
  const displayAspectRatio = 3 / 4;
  const imageAspectRatio = imageWidth / imageHeight;
  let thumbnailImageWidth, thumbnailImageHeight;
  let scaledX, scaledY;

  if (imageAspectRatio > displayAspectRatio) {
    // "Landscape" mode
    // Scale on y, crop on x
    const yScaleFactor = (imageHeight > maxThumbnailHeight) ? (maxThumbnailHeight / imageHeight) : 1.0;
    thumbnailImageHeight = scaledY = Math.round(imageHeight * yScaleFactor);
    scaledX = Math.round(imageWidth * yScaleFactor);
    thumbnailImageWidth = Math.min(scaledX, maxThumbnailWidth);
  } else {
    // "Portrait" mode
    // Scale on x, crop on y
    const xScaleFactor = (imageWidth > maxThumbnailWidth) ? (maxThumbnailWidth / imageWidth) : 1.0;
    thumbnailImageWidth = scaledX = Math.round(imageWidth * xScaleFactor);
    scaledY = Math.round(imageHeight * xScaleFactor);
    // The CSS could widen the image, in which case we crop more off of y.
    thumbnailImageHeight = Math.min(scaledY, maxThumbnailHeight,
                                    maxThumbnailHeight / (maxThumbnailWidth / imageWidth));
  }

  return {
    width: thumbnailImageWidth,
    height: thumbnailImageHeight,
    scaledX,
    scaledY
  };
}

/**
 * @param {dataUrl} String Data URL of the original image.
 * @param {int} imageHeight Height in pixels of the original image.
 * @param {int} imageWidth Width in pixels of the original image.
 * @param {String} urlOrBlob 'blob' for a blob, otherwise data url.
 * @returns A promise that resolves to the data URL or blob of the thumbnail image, or null.
 */
function createThumbnail(dataUrl, imageWidth, imageHeight, urlOrBlob) {
  // There's cost associated with generating, transmitting, and storing
  // thumbnails, so we'll opt out if the image size is below a certain threshold
  const thumbnailThresholdFactor = 1.20;
  const thumbnailWidthThreshold = maxThumbnailWidth * thumbnailThresholdFactor;
  const thumbnailHeightThreshold = maxThumbnailHeight * thumbnailThresholdFactor;

  if (imageWidth <= thumbnailWidthThreshold &&
      imageHeight <= thumbnailHeightThreshold) {
    // Do not create a thumbnail.
    return Promise.resolve(null);
  }

  const thumbnailDimensions = getThumbnailDimensions(imageWidth, imageHeight);

  return new Promise((resolve, reject) => {
    const thumbnailImage = new Image();
    let srcWidth = imageWidth;
    let srcHeight = imageHeight;
    let destWidth, destHeight;

    thumbnailImage.onload = function() {
      destWidth = Math.round(srcWidth * maxResizeScaleFactor);
      destHeight = Math.round(srcHeight * maxResizeScaleFactor);
      if (destWidth <= thumbnailDimensions.scaledX || destHeight <= thumbnailDimensions.scaledY) {
        srcWidth = Math.round(srcWidth * (thumbnailDimensions.width / thumbnailDimensions.scaledX));
        srcHeight = Math.round(srcHeight * (thumbnailDimensions.height / thumbnailDimensions.scaledY));
        destWidth = thumbnailDimensions.width;
        destHeight = thumbnailDimensions.height;
      }

      const thumbnailCanvas = document.createElement("canvas");
      thumbnailCanvas.width = destWidth;
      thumbnailCanvas.height = destHeight;
      const ctx = thumbnailCanvas.getContext("2d");
      ctx.imageSmoothingEnabled = false;

      ctx.drawImage(
        thumbnailImage,
        0, 0, srcWidth, srcHeight,
        0, 0, destWidth, destHeight);

      if (thumbnailCanvas.width <= thumbnailDimensions.width ||
        thumbnailCanvas.height <= thumbnailDimensions.height) {
        if (urlOrBlob === "blob") {
          thumbnailCanvas.toBlob((blob) => {
            resolve(blob);
          });
        } else {
          resolve(thumbnailCanvas.toDataURL("image/png"));
        }
        return;
      }

      srcWidth = destWidth;
      srcHeight = destHeight;
      thumbnailImage.src = thumbnailCanvas.toDataURL();
    };
    thumbnailImage.src = dataUrl;
  });
}

function createThumbnailUrl(shot) {
  const image = shot.getClip(shot.clipNames()[0]).image;
  if (!image.url) {
    return Promise.resolve(null);
  }
  return createThumbnail(
    image.url, image.dimensions.x, image.dimensions.y, "dataurl");
}

function createThumbnailBlobFromPromise(shot, blobToUrlPromise) {
  return blobToUrlPromise.then(dataUrl => {
    const image = shot.getClip(shot.clipNames()[0]).image;
    return createThumbnail(
      dataUrl, image.dimensions.x, image.dimensions.y, "blob");
  });
}

if (typeof exports !== "undefined") {
  exports.getThumbnailDimensions = getThumbnailDimensions;
  exports.createThumbnailUrl = createThumbnailUrl;
  exports.createThumbnailBlobFromPromise = createThumbnailBlobFromPromise;
}

return exports;
})();
null;

PK
!<4<۷ùùwebextension/catcher.js"use strict";

// eslint-disable-next-line no-var
var global = this;

this.catcher = (function() {
  const exports = {};

  let handler;

  let queue = [];

  const log = global.log;

  exports.unhandled = function(error, info) {
    if (!error.noReport) {
      log.error("Unhandled error:", error, info);
    }
    const e = makeError(error, info);
    if (!handler) {
      queue.push(e);
    } else {
      handler(e);
    }
  };

  /** Turn an exception into an error object */
  function makeError(exc, info) {
    let result;
    if (exc.fromMakeError) {
      result = exc;
    } else {
      result = {
        fromMakeError: true,
        name: exc.name || "ERROR",
        message: String(exc),
        stack: exc.stack
      };
      for (const attr in exc) {
        result[attr] = exc[attr];
      }
    }
    if (info) {
      for (const attr of Object.keys(info)) {
        result[attr] = info[attr];
      }
    }
    return result;
  }

  /** Wrap the function, and if it raises any exceptions then call unhandled() */
  exports.watchFunction = function watchFunction(func, quiet) {
    return function() {
      try {
        return func.apply(this, arguments);
      } catch (e) {
        if (!quiet) {
          exports.unhandled(e);
        }
        throw e;
      }
    };
  };

  exports.watchPromise = function watchPromise(promise, quiet) {
    return promise.catch((e) => {
      if (quiet) {
        if (!e.noReport) {
          log.debug("------Error in promise:", e);
          log.debug(e.stack);
        }
      } else {
        if (!e.noReport) {
          log.error("------Error in promise:", e);
          log.error(e.stack);
        }
        exports.unhandled(makeError(e));
      }
      throw e;
    });
  };

  exports.registerHandler = function(h) {
    if (handler) {
      log.error("registerHandler called after handler was already registered");
      return;
    }
    handler = h;
    for (const error of queue) {
      handler(error);
    }
    queue = [];
  };

  return exports;
})();
null;
PK
!<RۭjÕÕwebextension/clipboard.js/* globals catcher, assertIsBlankDocument */

"use strict";

this.clipboard = (function() {
  const exports = {};

  exports.copy = function(text) {
    return new Promise((resolve, reject) => {
      const element = document.createElement("iframe");
      element.src = browser.extension.getURL("blank.html");
      // We can't actually hide the iframe while copying, but we can make
      // it close to invisible:
      element.style.opacity = "0";
      element.style.width = "1px";
      element.style.height = "1px";
      element.style.display = "block";
      element.addEventListener("load", catcher.watchFunction(() => {
        try {
          const doc = element.contentDocument;
          assertIsBlankDocument(doc);
          const el = doc.createElement("textarea");
          doc.body.appendChild(el);
          el.value = text;
          if (!text) {
            const exc = new Error("Clipboard copy given empty text");
            exc.noPopup = true;
            catcher.unhandled(exc);
          }
          el.select();
          if (doc.activeElement !== el) {
            const unhandledTag = doc.activeElement ? doc.activeElement.tagName : "No active element";
            const exc = new Error("Clipboard el.select failed");
            exc.activeElement = unhandledTag;
            exc.noPopup = true;
            catcher.unhandled(exc);
          }
          const copied = doc.execCommand("copy");
          if (!copied) {
            catcher.unhandled(new Error("Clipboard copy failed"));
          }
          el.remove();
          resolve(copied);
        } finally {
          element.remove();
        }
      }), {once: true});
      document.body.appendChild(element);
    });
  };

  return exports;
})();
null;
PK
!<s¡`00webextension/domainFromUrl.js/** Returns the domain of a URL, but safely and in ASCII; URLs without domains
    (such as about:blank) return the scheme, Unicode domains get stripped down
    to ASCII */

"use strict";

this.domainFromUrl = (function() {

  return function urlDomainForId(location) { // eslint-disable-line no-unused-vars
    let domain = location.hostname;
    if (!domain) {
      domain = location.origin.split(":")[0];
      if (!domain) {
        domain = "unknown";
      }
    }
    if (domain.search(/^[a-z0-9._-]{1,1000}$/i) === -1) {
      // Probably a unicode domain; we could use punycode but it wouldn't decode
      // well in the URL anyway.  Instead we'll punt.
      domain = domain.replace(/[^a-z0-9._-]/ig, "");
      if (!domain) {
        domain = "site";
      }
    }
    return domain;
  };

})();
null;
PK
!<­6Û%webextension/icons/back-highlight.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="#009ec0" d="M18.8 8.5H4.2l5.4-5.4c.5-.5.5-1.2 0-1.8s-1.2-.5-1.8 0L.4 8.9c-.5.5-.5 1.2 0 1.8l7.5 7.5c.2.2.5.4.9.4s.6-.1.9-.4c.5-.5.5-1.2 0-1.8L4.2 11h14.5c.8 0 1.2-.5 1.2-1.2s-.4-1.3-1.1-1.3z"/></svg>PK
!<0º¸webextension/icons/back.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill="#3d3d40" d="M18.8 8.5H4.2l5.4-5.4c.5-.5.5-1.2 0-1.8s-1.2-.5-1.8 0L.4 8.9c-.5.5-.5 1.2 0 1.8l7.5 7.5c.2.2.5.4.9.4s.6-.1.9-.4c.5-.5.5-1.2 0-1.8L4.2 11h14.5c.8 0 1.2-.5 1.2-1.2s-.4-1.3-1.1-1.3z"/></svg>PK
!<SÇ:(((webextension/icons/cancel.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M10.5 8.7L5.2 3.3c-.5-.5-1.3-.5-1.8 0s-.5 1.3 0 1.8l5.3 5.3-5.3 5.3c-.5.5-.5 1.3 0 1.8s1.3.5 1.8 0l5.3-5.3 5.3 5.3c.5.5 1.3.5 1.8 0s.5-1.3 0-1.8l-5.3-5.3 5.3-5.3c.5-.5.5-1.3 0-1.8s-1.3-.5-1.8 0l-5.3 5.4z" fill="#3e3d40"/></svg>PK
!<û26GYYwebextension/icons/cloud.svg<svg width="20" height="18" xmlns="http://www.w3.org/2000/svg"><g fill="#FFF" fill-rule="evenodd"><path d="M15 5.6h-.3C14.5 2.7 12 .5 9.2.5c-3 0-5.4 2.4-5.5 5.3C1.5 6.4 0 8.3 0 10.6c0 2.8 2.2 5 5 5a1 1 0 0 0 1-1v-.1a1 1 0 0 0-1-1c-1.7 0-3-1.3-3-3 0-1.3.8-2.5 2.2-2.9l1.4-.4.1-1.4c.1-1.9 1.6-3.3 3.5-3.3 1.8 0 3.4 1.4 3.5 3.2l.1 1.8h2.1c1.7 0 3 1.3 3 3s-1.3 3-3 3h-1.85a1.05 1.05 0 1 0 0 2.1H15c2.8 0 5-2.2 5-5s-2.2-5-5-5z" fill-rule="nonzero"/><path d="M10 11.414V17c0 .667-.333 1-1 1s-1-.333-1-1v-5.586l-.293.293a1 1 0 1 1-1.414-1.414L9 7.586l2.707 2.707a1 1 0 0 1-1.414 1.414L10 11.414z"/></g></svg>PK
!<ñ9~ŸŸ*webextension/icons/copied-notification.svg<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48"><path fill="context-fill" d="M44.121 24.879l-9-9A3 3 0 0 0 33 15h-3v-3a3 3 0 0 0-.879-2.121l-9-9A3 3 0 0 0 18 0H9a6 6 0 0 0-6 6v21a6 6 0 0 0 6 6h9v9a6 6 0 0 0 6 6h15a6 6 0 0 0 6-6V27a3 3 0 0 0-.879-2.121zM37.758 27H33v-4.758zm-15-15H18V7.242zM18 21v6H9V6h6v7.5a1.5 1.5 0 0 0 1.5 1.5H24a6 6 0 0 0-6 6zm6 21V21h6v7.5a1.5 1.5 0 0 0 1.5 1.5H39v12z"/></svg>PK
!<©? zzwebextension/icons/copy.svg<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#3e3d40" d="M14.707 8.293l-3-3A1 1 0 0 0 11 5h-1V4a1 1 0 0 0-.293-.707l-3-3A1 1 0 0 0 6 0H3a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h3v3a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2V9a1 1 0 0 0-.293-.707zM12.586 9H11V7.414zm-5-5H6V2.414zM6 7v2H3V2h2v2.5a.5.5 0 0 0 .5.5H8a2 2 0 0 0-2 2zm2 7V7h2v2.5a.5.5 0 0 0 .5.5H13v4z"/></svg>PK
!<*—çððwebextension/icons/done.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M19.5 4c-.6-.6-1.6-.6-2.2 0l-10 10-4.6-4.6c-.6-.6-1.6-.6-2.2 0-.6.6-.6 1.6 0 2.2l5.8 5.8c.3.3.7.5 1.1.5.4 0 .8-.2 1.1-.5l11-11.1c.7-.6.7-1.6 0-2.3z" fill="#009ec0"/></svg>PK
!<Èf&¿ZZwebextension/icons/download.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M9.1 12L4.9 7.9c-.5-.5-1.3-.5-1.8 0s-.5 1.3 0 1.8l6.2 6.2c.5.5 1.3.5 1.8 0l6.2-6.2c.5-.5.5-1.3 0-1.8s-1.3-.5-1.8 0L11.6 12V1.2C11.6.6 11 0 10.3 0c-.7 0-1.2.6-1.2 1.2V12zM4 20c-.7 0-1.2-.6-1.2-1.2s.6-1.2 1.2-1.2h12.5c.7 0 1.2.6 1.2 1.2s-.5 1.2-1.2 1.2H4z" fill="#3e3d40"/></svg>PK
!<ðҫ

webextension/icons/help-16.svg<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="rgba(249, 249, 250, .8)" d="M8 1a7 7 0 1 0 7 7 7.008 7.008 0 0 0-7-7zm0 13a6 6 0 1 1 6-6 6.007 6.007 0 0 1-6 6zM8 3.125A2.7 2.7 0 0 0 5.125 6a.875.875 0 0 0 1.75 0c0-1 .6-1.125 1.125-1.125a1.105 1.105 0 0 1 1.13.744.894.894 0 0 1-.53 1.016A2.738 2.738 0 0 0 7.125 9v.337a.875.875 0 0 0 1.75 0v-.37a1.041 1.041 0 0 1 .609-.824A2.637 2.637 0 0 0 10.82 5.16 2.838 2.838 0 0 0 8 3.125zm0 7.625A1.25 1.25 0 1 0 9.25 12 1.25 1.25 0 0 0 8 10.75z"/></svg>PK
!<h.ÇSS+webextension/icons/icon-highlight-32-v2.svg<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a4 4 0 0 0-4 4h4V2zm12 0h-4v4h4V2zm8 0v4h4a4 4 0 0 0-4-4zM14 2h-4v4h4V2zm12 0h-4v4h4V2zm2 10h4V8h-4v4zm0 12a4 4 0 0 0 4-4h-4v4zm0-6h4v-4h-4v4zm-.882-4.334a4 4 0 0 0-5.57-.984l-7.67 5.662-3.936-2.76c.031-.193.05-.388.058-.584a4.976 4.976 0 0 0-2-3.978V8H4v2.1a5 5 0 1 0 3.916 8.948l2.484 1.738-2.8 1.964a4.988 4.988 0 1 0 2.3 3.266l17.218-12.35zM5 17.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm0 12a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm10.8-4.858l6.034 4.6a4 4 0 0 0 5.57-.984L19.28 22.2l-3.48 2.442z" fill="#989898"/></svg>PK
!<Wúè‘‘webextension/icons/icon-v2.svg<svg viewBox="0 0 32 32" width="32" height="32" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity"><path d="M8 2a4 4 0 0 0-4 4h4V2zm12 0h-4v4h4V2zm8 0v4h4a4 4 0 0 0-4-4zM14 2h-4v4h4V2zm12 0h-4v4h4V2zm2 10h4V8h-4v4zm0 12a4 4 0 0 0 4-4h-4v4zm0-6h4v-4h-4v4zm-.882-4.334a4 4 0 0 0-5.57-.984l-7.67 5.662-3.936-2.76c.031-.193.05-.388.058-.584a4.976 4.976 0 0 0-2-3.978V8H4v2.1a5 5 0 1 0 3.916 8.948l2.484 1.738-2.8 1.964a4.988 4.988 0 1 0 2.3 3.266l17.218-12.35zM5 17.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm0 12a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5zm10.8-4.858l6.034 4.6a4 4 0 0 0 5.57-.984L19.28 22.2l-3.48 2.442z"/></svg>
PK
!<à9Ãéé5webextension/icons/icon-welcome-face-without-eyes.svg<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.st0{fill:#fff}</style><g id="Visual-design"><g id="_x31_.2-Div-selection" transform="translate(-575 -503)"><g id="Introduction" transform="translate(250 503)"><g id="icon-welcomeface" transform="translate(325)"><g id="Layer_1_1_"><path id="Shape" class="st0" d="M11.4.9v2.9h-6c-.9 0-1.5.8-1.5 1.5v6H.8V3.8C.8 2.1 2.2.7 3.9.7h7.6v.2h-.1z"/><path id="Shape_1_" class="st0" d="M63.2 11.4h-3.1v-6c0-.8-.6-1.5-1.5-1.5h-6v-3h7.6c1.7 0 3.1 1.4 3.1 3.1l-.1 7.4z"/><path id="Shape_2_" class="st0" d="M52.6 63.2v-3.1h6c.9 0 1.5-.6 1.5-1.5v-6h3.1v7.6c0 1.7-1.4 3.1-3.1 3.1l-7.5-.1z"/><path id="Shape_3_" class="st0" d="M.8 52.7h3.1v6c0 .9.6 1.5 1.5 1.5h6v3.1H3.8c-1.7 0-3.1-1.4-3.1-3.1l.1-7.5z"/><path id="Shape_6_" class="st0" d="M33.3 49.2H33c-4.6-.1-7.8-3.6-7.9-3.8-.6-.8-.6-2 .1-2.7.8-.8 1.9-.6 2.6.1 0 0 2.3 2.6 5.2 2.6 1.8 0 3.6-.9 5.2-2.6.8-.8 1.9-.8 2.7 0s.8 1.9 0 2.7c-2.2 2.4-4.9 3.7-7.6 3.7z"/></g></g></g></g></g></svg>PK
!<Í4Ä^PP$webextension/icons/menu-fullpage.svg<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 46 46"><style>.st2{fill:#004c66}</style><path id="bg" d="M7 42h32V5.1H7z" fill="#00fdff"/><g id="frame" transform="translate(0 6)"><path d="M40 5c.5 0 1 .4 1 1v24c0 .5-.5 1-1 1H6c-.6 0-1-.5-1-1V6c0-.6.4-1 1-1h34zM7 29h32V7H7v22z" fill="#3e3d40"/><path id="Fill-4" class="st2" d="M7 7h32V5H7z"/><path id="Fill-6" class="st2" d="M7 31h32v-2H7z"/></g><path id="dash" d="M38 11h1V9h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm-1 1h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-2-3H7v3h2v-1H8v-2zm-1-1h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1V9H7v2zm2-6H7v3h1V6h1V5zm1 1h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm3 0h2V5h-2v1zm5-1h-2v1h1v2h1V5z" fill="#00d1e6"/></svg>PK
!<$v°¢YY(webextension/icons/menu-myshot-white.svg<svg width="40" height="40" viewBox="0 0 46 46" xmlns="http://www.w3.org/2000/svg"><path d="M11 11.995a1 1 0 0 1 .995-.995h23.01a1 1 0 0 1 .995.995v23.01a1 1 0 0 1-.995.995h-23.01a1 1 0 0 1-.995-.995v-23.01zM11 25v-2h7v2h-7zm9-5h7v-2h-7v2zm9 5h7v-2h-7v2zm-9 4h7v-2h-7v2zm-2-18h2v25h-2V11zm9 0h2v25h-2V11z" fill="#FFF" fill-rule="evenodd"/></svg>PK
!< PúHH"webextension/icons/menu-myshot.svg<svg width="46" height="46" xmlns="http://www.w3.org/2000/svg"><path d="M11 11.995a1 1 0 0 1 .995-.995h23.01a1 1 0 0 1 .995.995v23.01a1 1 0 0 1-.995.995h-23.01a1 1 0 0 1-.995-.995v-23.01zM11 25v-2h7v2h-7zm9-5h7v-2h-7v2zm9 5h7v-2h-7v2zm-9 4h7v-2h-7v2zm-2-18h2v25h-2V11zm9 0h2v25h-2V11z" fill="#3E3D40" fill-rule="evenodd"/></svg>PK
!<Óöiðÿÿ#webextension/icons/menu-visible.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 46 46"><path d="M5 12c0-.6.5-1 1-1h34c.6 0 1 .5 1 1v24c0 .6-.5 1-1 1H6c-.6 0-1-.5-1-1V12zm2 23V13h32v22H7z" fill="#3e3d40"/><path d="M7 35h32V13H7z" fill="#00fdff"/><path d="M38 19h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm0 3h1v-2h-1v2zm-1 1h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-3 0h2v-1h-2v1zm-2-3H7v3h2v-1H8v-2zm-1-1h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm0-3h1v-2H7v2zm2-6H7v3h1v-2h1v-1zm1 1h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm3 0h2v-1h-2v1zm5-1h-2v1h1v2h1v-3z" fill="#00d1e6"/></svg>PK
!<¯’èÌkÌk#webextension/icons/onboarding-1.png‰PNG


IHDRxÐ*ã:k“IDATxìÜèaÆá‹cæyÙZ¶›•]³—ÛŒ´4۶í--Ïa¶Íw7ۼzžzÓe÷»ïûНIR_®g¹u厖»þ”Û厾n²=_7ÚâKû҇Úr“Ê=	ÿʓr“ËÕ~oàmUîVþÜ*×ú[·w¹§ùßð´\ï/ÞVâ.Ày[xk=ËP™çjß¼“@UL~xëË=	Uñ¤\}‘¤g¨šžE’uªÖIަj8Z$¹ªàv‘J@àxxx^^^@à@à@àxxxx^^^@à@à@àxxx^^€¯Bà@àxxx^^^@à@à@àxxxx^^^@à@à@àxxx^^^^@à@à@à@àxxx^^^^@à@à@à@àxxx^^^@à@à@àxxxx^^^@à@à@àxxxx^^^@à@à@à@àxxx^^^^@à@à@à@àxxx^^^@à@à@àxxxx^€»eÏᙾe_Æ,ݘ¡ÖfÈ/ÍÌ̆/Z—±«¶fɾƒ9ræBž@à~£×o¥ÇøyiؾgŠ–]þàÌ̬Y—A™½ý€Ð¼/›µí@švê󗇙™502§._€Àü”³WüoÁÃ̞³w0²¬i‡¿µmÅØ8ë6\ïÌ۶mÛöµm­m۶ùn*}3Ý5wjzjž'ùÅSÕ$ùwõ×êP½ªÿ´øìw~^ &ÛO]­ƒqC’ôځ3⧿ýCT0ð|áû?ާ7®“qC’ô®Yë¢*€à=6T$©Î:ú‰/Ä
^€O~ëû†IªÃÞ2iyÜ`à˜ºÿ>CŠ$Õi¿ú㟠Àxû”•u:lH’>þï@Š'ðÒޓëtؐ$ÿÔ ÅxZӨ:6$I÷~䳐â	<¥ad’¤{>ò™Hñ¸¼’dà¼€W’dà¼€W’dà¼€W’¼€0ðJ’¼€0ðªÿŒHã–Gš¶¾}$MYiä¢H]Çy~;äÀxoèH}gFº0Ҁ9‘º´ÂPÔil¤þ³"
Y©߬HM£ëg¨é4&Òê›#]úr¤/þ¬}&}îǑî»iì²úB»MŠ4pn¤!"õžÖ:÷è9µrýAó"uŸÔA^ÀÀx»MŒ4oo¤Ýç#¸úPû¯DZ}O¤ÁóZ~l8^v{¤}—y=—"-¾9R¯©m;>
žérɆ]iϱH£ÚöÙ½"ÒÆ#ÙóþȶŸŽ4}K¤¦1-»~ö!ÑÔ͑¶zì=64vU¤†‘^ÀÀ”tàº(ÒîÙrãfïÊ?’LސÅ7¾þ¾ËÙÓ6Ԡ9‘>ñ=c ÊÙÛèø±‘VÞÙüÿ–­'ó¿ћ}0´ùxó÷Xuwö/`à-0ðf_cÞW^«jîîÚï1q}õ×Ͻ¢Ø*{ûï◌€*w+û\eǽ¬¾·úç~ÇÙڏTè6!{¸ú{¬;©q´0ð–x›F?0ŽÔ֐Õߣ÷ôHû/×vý½³##Š¢–î5þ©üeo¨wŸPÜs5usíÿ[VÝ]Û=–Ý^û=fl3ðޒoåÍÚÚ[w°ú{,¾9ß=fï*nˆ:õãŸ:FvóL5Ž~à<ïÚ0§Ú3½ó]ϥìè/`à-0ðV¾>¯î«yFEÚs!ßõ·.fˆê:Þ觎Ó-g‹y®†-ΞãÖýpgƶü÷µÌÀxK¼»ÎåGj8¦¡çÔü×Ïê<¦õ‡¨!s~ê8ýx1ï”MùŸû•wç>ž¡†c¼€·ÀÀ[97_#«x®߬
¼5üàRþF-6ú©ãtæ3Å¼3wäî×jýo ÌÝmà¼%Þígò$ç6ýl Í?ðæøµû
˜eôSÇéNjx'mÈÿÜ/¿£º{,¹%ÿ=¦m6ðÞïÒÛò#ûjø‘¢í§óÝcÑb†¨Nc"}îGcܓö/æ¹0'ÿø:¥ÊñuÒúü÷<¿/`à¼#–æG–ÜÒú_՞¼!ûûbºïZÇ÷¤©ëŠ{®¶œ¨ý¹ώé9¥ºëwŸ˜}ØTû=²F•`à¼€7kí}µ¿½Ûkjõ×ï<.ÒÎÌmëÉ<Ç3äoòšò{ҥ/EjÌ1lùÒÜݭÖïèÙߖdà¼€·ۤH;NWùvݕ|ãȠyտi·çB¤¾3²¿+¶».•wؓ¾ðÓ샌⟫Y5°ëÖþÁNö&«¿Ǽ½Ùߕhà¼€÷‘wíÁ#»ÎE¾¸egrnkfHÞ|<RŸéŏPY]ÆE:ý™rŽ{Òòmó\eMÞØü<‹oÉÎÃÎwýl^x ™o\‰4mK¾ëx/Pð¿‘Ë*¿`¿ëþ#ö\Š´þP¤©›³£Z~ýlˆ™°®r,Ä{ì¾PyoÜê*ÎÅ,`ä½ùLyF=éc߉4sSÛ>WY=&Gš½«ò!ξ˕ol?iÑM‘Î}rîÑv¤û+gìf×ÏFݭ'*Ç>ô¬+S‚0ðÞ*kU‚{älÄÂH{ŽGºúÕHŸûIûô¤O}?҉OFZ}s¤®ãëókYôõK0ð^À/uÛ’š?æ@^ÀÀx%I^ÀÀx%ÉÀx¯$ÉÀx¯$ÉÀx¯$x/€W’¼€0ðJ’¼€0ðJ’¼€0ðJ’0ð^I’0ð^I’0ð^I2ð^ÀÀ+I2ð^ÀÀ+I2ð^ÀÀ+I^€^I2ðV0ðÞQ"Ýz¤üIҞ{J6ð^À;bg¤ˆò'Iø“÷±/`à•$/@
¯$x/P¯$xRx%ÉÀx€âx%ÉÀÀÀ+I^ÀÀÇÀ+I^€^I2ð^ 8^I2ð¤0ðJ’·¼€W’¼€0ð>­qx|pâÀxA—a^I2ð^ =
¼ãöøHCìÛÞÓÀ+I^Ú¼€÷âí]³7~u¾)žÚ`à•$/`àmÀËðÏk‘
¼Yï9ÈÀ+I^ÀÀ´‡wàìþŽ»Y›6õ2ðJ’·=/`à½tG·G¼¿<ßOo4ðJ’0ðÖ50ð¾qàÐø_6ì>ªžÓÔóÀ+I^ÀÀxwoë™
ºé“÷u©ׁW’¼€0ð¾¡ÏÐøǵlÐ}üÞ3~P=¼’dà¼€wÿŽǼ½ûˆ>s°K<¥¾^I2ð^ÀÀûæaCâ?׳!÷†
šݯ^^I2ð^ÀÀûԆñéƒ]šw³~}¾)^Ö}X=¼’dà¼€wöò>Ùx[u÷îëÑÖ¯$x/`à}ûðÁñ¯ÇÍÐ|ƒçôo«W’¼€0ð¾ªçÐøÑéN5»Y»Úo6¸èW’¼€à9GÄÇî钍µ¹ûÉ٦x]¯a…
¼’dà¼ÿûOœºµ[6Ҷ¸¯ë/ï1ÜÀ+©Õ3ð^€ÿý;âë˳qöIë‡;Ç+{3ðJjµ¼€àÿìÝtiº‡ñãîëîîî‹Ãî6îÂ0îî>¸»KÐâ$$wï¸'íõn¾3d’iïêçwÎÿޕPIU¯>çۊ½E$y‘вn_ÆöÑrý„™n¼Œ1Fà^s™HÂm*Æzl¡#å÷ï<ë¶xÂc^@਎‰¾EEXÏzt„Ü_¼YB\
'Œ1Fà0Hpö&‘¬·Txõú&?*_1—J¨aŒ1/ ðßb“=fvz¥6‡ø†&RqP$v²Š­>[KÔ8y´hvXAŒ1xH6ÛĐTʾ°fVŠ×UG‹œ¸]V¿YIÜ4™gÜ#5Aˆ1æ#ð/͚ÈԢ:ùWn
kݿójäݪfjx[$~ž
ª~»²Ø)òXáZ¹ÆRÕM8aŒ1/€AôØE*ÃDÒ_‰£jÀÌ1R$?ªNõÊu–J"c¬“x¢O û]‘ˆQ*–êba§–þšXÄë0¯þ/H¼S7qW­!ú&fo!1Æ:Œ+?€Àì-Ÿ½ž!ã‘è[2êš"Çʎԧe¾q·\i­!1Æ:Œ+€À4›HU¤Hê“"#ü>ìÆ$Ý+³ÊBå|{³a…1Ƽz¼ ¥X$ûm¿|?¯:­ûۆT—b
cŒxõx€©T$ýE¿»'ß4¤d¼¹Ì\.‘-u[Η»2_'f1Ƽ€À¼¨ö„HüŸ„ݚè[ԫ$$€ãÍKI÷‹¬7¨‰mc?¹ÒTJÐbŒxðÀaÉz˫q÷PòB¹ÚRðñ&}Ï7?¼j³s?"h1Ƽ€À| â°HäXÇݧWß-}Døp󕦜³â®Úֈ‘-Ɓx€4f‰ÄNñHØ5‡
—ïŸ,†çÞ×E¸¹-ë큷qóPజù:³MIbˆÎrmi%bÐ|Ås+ĝݻŸ76G¥µ=»~}‹âózÿL’‹Ä`wt}­u饽¿~\®ª{rêëÔ×÷þ{d”ŠAëÁõmu¿½¿¾z®êùЏ6õœSŠ]ÿÇñ©"1Øì^^@àü¶ã3Ýw¿Ü:UE	ÝÞ}áÿèxÕþeÜsæëv$ˆañ÷L2ï.­ÄùŸwI˜Ê뻾¾Õ.†ÕΏÃ)ÝßC\Žó×_.†FS××o0©¯sþ{Äåt‡Rœ¿¾z¾V£ê‘T÷ýãxÿ)¯Ç/ ðX*¥p÷(·ÄÝæÃ#äwó§« ¡›À{…É(ö
};
¼+b&‰—*h¹kÛ⽯®†½S…]_¿²u믍êþvºÙó*º?áìÊõwèþÖDºö=Ôsq~ë¢:^ӕh.âéxà›SgJEèH—â®5|„ü뎩*Fè*ðޓñj§qW­yójkƒÅæÞTàý{ͯT'qûy—‡‹¡¶¹›ÿé¿&†M±ž=՜\äÚéW“µëë·X];…œ\Ôý=De9}õ|í.¾Þ#&»Ãu]:Ù-âéx dø\ùý¼i*Ò:xç-š¤B„îobèUÌ=ç¦æ/íx—Cj‰s+­õÝýª÷˦õòçUï–m0õìú»²ËzÿLŠª{~ƺÞßC¦Q-–ž]¿Ţ¾¾w×W?ú¹Dz¶¢êÞ?#õ\-ön®íò÷ï~^/ ðú^æ/šäTÜýèݛԟ×]àýIm|—qW-üðï;ÞUb	¾1Fà%ð¯ï@àUۼx|¯ânê¶Ñ2xÔl=^õŽ]q»ÝÏʣ¼Œx	¼î¼«ˆ,«m‘g˛ºcg…„‹ÇÏêñûxíá#äÇ3§«?§»À{uK±X7öïQà]q—1/×}pSA­’JëÉ:ĄÉMîQà}íõ›Õ×ë2ð>ò¡Å]5ۆ¾ríÒõ^Ƽ^÷^ÀÐä2¢¥Ó#ðª[;¶˸[:R†Ž™­ËÀ{±¥J규×ã+öު‘^Ƽ^÷^(ü¢¥K#ðþ~޴.ïíOT_§ËÀûrÒ}½Š»jÖõ}å«KWx—ÀKàu ðLšÈûÕÍòHYC·cì\QaÿÊqÆݒ½£dÀÈٺ¼êݻ¦MƒzxÕV­ú«w/c^/ ð„ŸÛiTø×S;
¼?;Aýýº¼ŸÄÍt*îªi­ûñҏ}x#ðxxCZ—±}ôYq×6\.7K—÷×U‘¢mq:ðªE¯ý¶ôYuԷ÷—À¼€+¶ð¹	gÞ
ŸŽW»îo?Í&I¡?P‘ÖåÍ_s¯ïï‰1/x÷ú	3Ï
¼£ËÀ{_ÆËn‰»jµë‡Êåæ2ßÞc^/ ð¯ÚÉ-c>=ÐÑstx¿ݐ*-›»-ðªm?6Ü÷÷Ɓ—À¼€ÀûÜ˷ˆ
¼{–S]Ww€Ã"‰¡?TQÖí[ý®oï1/x÷Š›fÉ{oß,?š1]w÷ÕÄ{<wÕԩàïԧOàblùÑ3wÅ1/x€OoÇé*ðŽ(Ù&چ^µä}ߕ¡¶Æà\ŒÅdŸ	¼q9^Ï^@à ð~·>Y¶SÖãÛ1RBDŽÈÅXE}ë<sm/ ðx/¶TIÎøêµ=sj!á1WFà^ï ‡IÂÿAEW¯ojþRÜ3cŒÀ¼@¼ý5«ì<ú_[}2û†¾2ªd‹ûï1Fà^ gÞ>â5Ñ7«Ðêә7
”¿•ïwÇ=1Ƽ€À ÿÀÛW³ËÒة*°úŚ6IþZ~{bŒx@ÿw Ã,›#Fw­¾?ÉëÂëc^@àÐyàjk”aí.¶úô¼Sò—u{Œ1/€A‚(ðÞМ'‰¡?T!կ§m‘§’Iˆh2Ƽ^@àÞ?V‘Êm—¨€0Û1J8îæÞc^@àÐqà½3ó
±n쯢iÀíԾïɷÒ:ÜcŒÀ`ÞËÍe²ûè¿U(
è5o"ss>8ëÞc^ƒè4ð/Ý.åÛ/ST7Û1R.5Wˆº?ƁÀ :¼W·ˆÈq*ˆêrÕ[/’Y¹¿€1/€Atxûi6¹+óuiØ2L…PÝ/âÐoäûu'	hŒx¸ËûÕÍòӬJù‰¦B ÞÑ䦵’¹çë*|ÕìúʒØir}s>!1¯«ŒɯCR©>æçW…Ýÿ•?R±3¨gÙ8@Þ<q‡\a2Ô#ð/pV‹&’`²I|KàÏ_ï`{‹ÌÎýHR÷~»“ØIèU'zP—DXcŒÀ¼ÀðÞïԧÈ'”Êm—ô v²aõêŠA‘1/ ð¿¦ÙDìMº¼״‰úÅiñûâdèdu[ΗOâfÊ+ŽH_ÍNpcŒÀ¼/”l‰'rl¸ȩGDl
xU€üCe˜<ò!I
ý›c'«Þz‘¬Ž¾E&¬K,•Ä7Ƽ€À|ª.I…ݳ—ñJ@Þk[
%sÏ׽;™mc?y*y‘çc
&1„¥}¶F—Àû9@à¯t¼‘£Eì-xŸN~Ôˑ“iBä"KµgcÛâŰøÈgۑ@à%ð~x€C$f‚ŠºWpwjþR/NVºãJé¯Y=¸[v&ð.
#ðxҐÖyÜUËz+ ßÁ;#ïS9røêõ›¬lûåê¯É73<¸k‹»jK¼^@àŸ)XqîÀ;% oÛηÖÉø¢õ²$všÔl½(ë†ßÿSy,åIùiÍq	èȼnØùMިª“„ârYS^-?²X	¼=¼ ñNsϽ¦œÀ¼í6Ða–±Åe۱bÝ؟Xۋî¼Vž?ù|»!Õq‹1µRPP*mË/4ÊS5õ2LÓ¼€Àº`©V·ë­
üÀÛn—š+äÑԧŸý
nÛö7ù·q·ô‡‡ÂcÞX¬*êvº˜’rù¹ÅJà=@àƝÝÞwè.ð¶m€Ã"Óò–ȩ}ß#螞:ݬ^iñýº“E/Œx?©¬Q1÷œË-4ʜò*o'$ݣ"n÷kÎÓeàm›:¡:±`¥äìþJІ]mCˆ¬Šž _mÊ&$êtª©•O“ÓdåÉTùoe×ö-«M

*äv»76ì•~#æxO^ÐR¬âmϖ·Xׁ·mý5«ÌÏ~O*¶]TqwOø¿äuIDPî"›MžËʑèèãgí5µ^ïݪZo{¼%»ÂdÐè[	¼­ä/ïy͝""Ý޶]d©–ÏR§Zuv‹w\­~ñœŽã&ûm]½„Æ'ª Û~²>)Yúx}¶¯Úì’ßvz·[w ²5ò.úÀ¼ n†Š·=_m|Ð޶ý¦*B—ïçulè#oœ¸S†Ùt6YH릗%*&^ÅÜsndEeàܗŠºmwixÀF¯Wש`ëÔ>ØzPúŸ´x@]’ж½[ÆËAxÕ:Ì*†êæ4oÑÎkäO‡u7Y?M“g³rUÀív[Nœ’~ro»Ï޽ýJ‘ëìvÉm;½ëäž\¶%h/ ð€´çzx#LjXk‚.ð¶í_Æ=bÜ~E@ÇÝ
‘ãäBkŽã& iòjF¶Š·=Þø²Š8?³UÇsÅß:³- ?§çÛNﺸÑO¾tx€É(1REÛޯ`EÐ^µËÍerìÐo.ìÚ6ö“۲ÞÖyÜdý5MÞJÏTѶWە¤þ,ÏÐK»Âîì¶ӻ..5#_¾<ýá 
¼€Àr?R±ֹÅLqX‚6ðª
pX䓸™w«·^$)?áŒ=‘“§‚­S›h,ãziOÖԫ8ë¶í?®Þǁx€½I$êFkŸqwP޶ݑõ¦úee~wS÷~[¾ҔьÍ,.u:âäñS¼ì‡C2‹ÚNïºoS^ú8(/ ð€âM®Å]µø¹Þӻ¹pX7ö÷˸wàgr‰¥2¢ûM]½Š´.oz‰‘çéá-¬mPAÖí;•–+—Ür·®/ ðÍ*7Íõ+VIà=½ÿwI˦Á~wþ£³5A0cØl²;!É-w_|¢q8x®ÚMҊÊTõȞ\¶Eׁx@ñfgݳ„ù"â ðžޟ*ûMä

û»r˜‚$š±—2³UœuÛæ•øïý–ԈacŒ6Ŋ¡´6à>«ûêUˆõØ2³äÒ	wë2ð/°7‹ÄLPqÖ}+ßOàmw’×ׯkˆ<økù’½)Hâ&ûmܸ۫Çe˜ÝîŸ÷¼>Z‹|¶
1õY
Ó49Õvz׃[øéF]^@à+T”uïâfˆh6ïvSáZŸýâµÄÐÊÖÚ ‰›¬Ÿ¦Éú¤deݾÛ‹ýó¾UØmے°€ú¼î¨÷ÜéÝöïâ4z®/ ðk­HÔxeݿ’mÞv»-ëm¯Ç݂×Éåæ² 
œl|Y…бÙá¸r±ÕFàuӆhš$·ÞõüF<þ–®/ ð€œ÷UŒõÌb&Š؛	¼íöáñ9^‹»͛‡ȏjOQÜdýZ·õÄ)c=¶{ó	¼nڼ†&^½¶{Ãux4åˆDŒR1ÖsËù€ÀÛný5«„þ½Ç㮶!DÆ­²ÀÉþYU­"¬G›à†S¼ÞA­;^\îÕ›W,ÃÆÝNà^Ÿ&’tŠ°ž]ÄH‘Æ,o»]j®’Wy4ð¾pòÁ œlqršŠ°ßC¹^7½±YEW¯ïŸ_'ð/ϸSXï,ñ.qxÛíoåûÕ)[ÄÝØ?W'…ƒ,n²ëLf_½²c±	r¹ÅJàurZ]Rî“ÀûÜÊí^@à  YkD¢oRñÕ{+ÝNàíd/'Ýçö¸۸y¨|­1+'›]\ªâ«×öxN×ÉMðÑé]µ½‘	^@à  ¥¿¨¢«w§‚²¥ŠÀÛnIý¡[ïÌÜO‚4p²5'S¼x#bâåz“™ÀÛËõmÝђ
ŸÞìœ"é?r>xHGTpõ͒ŠˆFàm·_TLjcC·ÄÝäq“]l³©èêõ=›•KàíåÆ6µ¨ÐêÓ}kÎ"/ ðpÌåm¯fð݊7x;ٻ	\Ž»–uýä[«Wiàd¯®ñI͊‰—L&ß?ƒeágïò£~û9õiݡÒ
ŸÞ-|=°/ ð‡ÈÉTdõí"G‹4exÛí|k·_áRà}zåd1¬ŠÒÀÉîÏ/TÁÕ'{93Û÷Ï <ýLà=–ᷟÓðf“
¬>ßÄ>¨À¼ pµ
¬þ±øy"3·ÝԻs»¥ë.’K÷qàeï¥e¨Øê›ÅÄËכ[|û´ÖT¶®Êo?£Öí3VúEà½ë½UxԧˆDŒRqÕ–õ&·ÝújvIßóM§ï¼w«“‹AxÙî„$[}¶7ӳøºÙ?[Ì*®úÅ-ށx€¥R$v²Šªþ7ãNo»+ÚÐ븛µöjé·ø@^ö%‡CEVŸï{M|]lGY•ßÞG ð/pXDïT1Õ?1JþrÛ4ï"šÄïÿI¯ïÄåUÜ
âÀˮ2[ü"𾕞ÉçqŽýÉä?§wÕ~º‘Àü>ð€ôUHõëU)_™4“Àû…Ý\¸¦Çq·`ǵêôn^ö­æfXýb?¯oà3éd›üèô®Ú­%𿼠h­
¨±ä-cdؘYÞÓë§٤pçµ=
¼��Ân^öÓú¿	¼§¤ûîY˜mj~÷ùüÆlQQկ6ãÕÅ^ශT‰0WmÏòqҁ·m÷e¼ÜmÜmØ2LÎk®/ûiC£Š«~³ßÖÖyÿ9¤‹aI˜–¶.­į>Ÿ5åÕ~xÿ»èM/ðËÀªcԻmU4
¸­ûøFé3œ+vµVL›uxßI¸Uv‡ŠZgﺨ œìûM~x?MNóþsXyìÌ?VGøO|·XUPõ»ý쎧	¼@ÿÿgﮣÛ:¼+TfffffhRš)·y;eLi;)wËÌéÊ
—’LØv̖Ì2ÈÌlYÒý½¹ǧÉxǖE¤ïçœߢVpûïyö
qúФŒíX·ûǓ'x'¦3O>dàýVOÎÄcw–î[yuOîÁkÄ~ÞÓÍk0ù$ûŠc~6«:zŒ¼oþÓå^£@àƒURæŸíH÷{à¡S	¼’~ßúú”q·|Ëg÷?ÖڻÆ.9Zz‰Iº÷xǍ¼Ï—iN’Þ/ŽûŒŒ»©y%ößI/0&ð€¡:)û4;Ž&Ìn¹紤¼��½òžƒޥåwí{có$¥g;‹¼¿éêNêÀû÷N3Oï.۰ÀŒ	¼` \Ê:Վ¢	·û<%©¯½§œ4ð~b¨fÒãې_l\à}±¨Ts“4ð~Ú>½ÛØjdà=íî¿xôº¤̓µ¡ߓwî±ÉxÿØòêq·ró§xcWTÛQոÛѕ”÷‰®^;¦¹÷ž~MÌ/ ð€®t)ã;‚&ü^úǟµ`arޣüÃ]wĤÀûPU<ޱ¿xZŒ¼kJ4?ÉïÇ|~¹
=½»iÓþÓÀ¼ m‹”¾ȎŸI³ÍOŸ¤cN8/鯽ͩ¿xپíÀÇ
É1:NèLâ}§¯ßªFîÄöޤ
¼u÷{z÷ÂGWÅ.ð/Hu·ƒgR®xãñúØç$]à=©i;¸[÷úÇì/_›ü—{"j­L‘£º-I';ÚPzŽÓÈÀûj~‘XVRÞùýª3ôônMm“Þ~ʕޘ€À|ƒRɍvèLêum[¤Ÿ]¼8©¯½ãš7èæÒÛô‘áúÉÿ»€e‡ÝýakMvGNöˆ¡÷áµwjk{R޻{ú=½ûøºw	¼€À@¸Œ4JÎó'"'“/õX]rË^æõM[ϥ'qàd‹::
¼¯»
ux$Oñ>»'æ¿ïñTcèé]{_¹äVoÔ@à]iRÖÉ	ì_ËNÖQÇx	¼썽ÍçӞ—±‘÷ìæÖÈ}þ⦉“»öJ=1¹þ·|z÷éͩAÇ]/ ðŠ(Týè4‘“U¼r¼¾~î9^/{#2ָ
¼[œ…:*ˆÜçöNLŠúÞ¨ªÉÜӻ߻ò.oÔ@àƒ•AܒySêÚÛO×/—ésCÃÆ^{çyZòº_ß;`lÜݒášn	¼€À@¤¤¦—¤ôãf:َçNÒN9—À+±$ßßÊ*
¼Ûò
ôf¿?¡®÷[–ʚڌ
¼¿¿éa/ ðqƒURR#'ë߹P—Ýrºæ޵ŒÀ˒vßì0úï%ž„ºÞW÷
w3òË5á…¼€ÀüCRíSRú"m—·ù}s°šÀ˒vËKʍ
¼;sóõ_bœâ}“e©Øàӻ§Ýý7;ÔF$ð/èL‘rΊPädôEz¼öoz³„À˒nßíë7úï•õMáÿܞ9š{¢z/ë7÷ônaYŽ<áR/{àý%RÑÿD)t²öœ3uy˫:ÌòxYRmUq™±7%ץwøÂø;™^¹ÿ÷ £**×÷(ËRÇÜӻ—<öŒi	¼ lÕJ¥·Æ(t²ú¼¿hqûvÍS q"^ceêþ°µ6›°¹oì½}FŸâ½ÎݾÏûôü<“•ë{þ±q·ª¦Ao?åʰ^/#©ò>)}¡¡“•¹.Ö	Ýš“(!¯ ~"j١·¦°¹olޤg‹Ì=ś–ãһ½ãaù¬“N²¯H‰øµ=BR®§ÝØÀ{Óòu!Ç]/ ðÐ_"•ßÁ¨º
×Eº m‹Žxã?捌OܮAš4Æ~Ücö)ޛjëã2ð.66îºÝÍúðâÿ!ð/³bù¥ŽÝRR8	¬+ûtÝÑðŒÞ;ޛqŠ÷…¢Rcoz¶SóÆUà] )³ÙÜӻ­ÞtÈ%ð/£-RÃsRîâ8
̛q‚ž«|@¿îÍ×\Y	øûyO¯ѧxo¯©‹«À{ÚЈRÝ.¼™À¼̈oPjÝ$^›`±“5ç.ÖýîåúÒp}ÜÇ=ÆæJZ]XblàÍÈvê#£cqxçIJké06î.m÷!ƒ-xï•ڷKåwJ'C“`ù—놦ÕúÚPmÜ~1c¿îî1úï½UµqxO6ûô¸“À¼LfIƒ•RãsRáURúB¢g¯%çlý«ú1ؕ¡7ûG̈w–%G}§žB&;äÉӵ%æFÞl§>52btà+iGK§±q÷õ4ç¤8Kà^<k¥œ³›ì Ï8^ëÊïÖ½]±wÛKö‡­ܩOA2ö»®n£Oñ>\Qmtàýãð¨ѧwsÃÃ^@à`ϺE>ÆJ]—hž±‰v¾€³��2§|,có%m((6:ò~nhØØ;¥ÕÜӻiÎRÍ[xxاàÊ>ƾ<ìŽM´óú&‡­çÒùxÆþØÙetà}²¼jvŸíÅÌý¿«³Âã‘1£Oïžr×ÿM
³^@à äæ…=Ƭô…ú·3./có-K/çy¿28ügkê¶O°ۋÈý¨_ië26îæ7¶êˆã/&ð/“ô—J'N÷[Vû”RÜ^Æutx—•Uu½~2ê5úôîEíݍ³^@à`¤Iªý?)÷œIA±‘̓ôZÙÿêÏ]iš#ÅUàeì0Ëҫ.³Oñ~¿¯ߘ뵶ÝÜӻMmzko?wZ€ÀÀpÃį/•ҏK¨ÉjóÎÓãµÓïz:Ÿ>x;±½ÃèÀû¯Ò
#®Ó÷ÆÌ>½»´w@޾oPÿ°ԙ*•ݖ౗U9/ÐMM/ê³#ó"]—±Ã-K›\…FGޟôôÆü:=ßÞmlܭklÕüoH€ñ>©åe©`I‚DM֝}šìûê~w0ô„&^ÆþÜfö)ާ‹Ëbz”¯yǍ>½{_wŸx›‘©îïRæŸã0l²ÝÅKubW†³|“CO‚^Ǝ´Ùiö)Þ_w÷Ìüw¡ ~ïäðúÃr}Vvôx?;î#ðF ðà’<ëãàËÙØxÆñz¶êA}}¨vRØI–ÀËة­íFÞŠJ5w&ŸeKáþ߃­E!_—/ŽûŒŽ»ÿèœßވ^RgŠTp¥aa“õfª{êWéÞîøtÏîÙ¶^v-YP;*ÐVgё÷]Ó–•)ûV¥†|]þÖÙktàýî˜7ªx@w–äº4Æa“
gž$;ì¾Í?”8‘®¾SŽÕYr¬ϕ£c€hɂÞ-mFÞ5%š7Íg˜t’}EJH×ãÓ>Ÿ[»kÛ'‚wÔ/ ðKêØ)坃¸ɭì/N{ßøßϓ1vt  myfŸâ=¾½3j÷ñ.³OïþrtŒÀ¼Ĕå“Z^•²O‹BÜd/Tޯµ"è0Æ7·x7ækeE<ð~Ôç—Ûàӻ)-š+xø¤ªG"6Y¥óBý¼¯pQ‡1vŒ߯yùFGÞSÚÚ#xìî3úôîIC#rD1ð~cŠNièeAìŒÆ>Žú”L^Ð_"¹.SØd£»êæg¯Öá–/ˆ°Ãû‹§ÅèÀûš«H‡[VÄïý~Õ|z7ÏӮå¨^ÇsÛä(laAA%X~ɳFÊ81„¸ɶ>s’>yæ9rÜõTq‡1ö¿_;sÍ>Å{VK[Äï]=ýFŸÞ=o`HŽ(Þ˷f腾QÄÖöjȲ”¬^0Ü å_6‹¸ɩÝËn9}˜˜UàeŒßÔltàÝâ,ԑ@Øï{üU|z·¬©Možtz™{ðš
/|	[Ýߥô…3ˆ›¬hÃ	úââsìbàeŒ½ÕçÓnÃOñڷ’wཱུ×ìӻÿcG\‰À¼ĕ^§”sÖa“Y{÷È#§èðE“ƒDh—1v±á§x·åØ_
7uà]\à}G  Ê&sOïÚ÷~¯?@à^âÒxŸT¼ô¿â&ë۱H¸âìÉ1",—1övŸO)9.£#¯¡'½ïyûï+Π>ïÒÞ£OïÞÝÓ/‡Dà޸àØj—i"n²ÊWŽ×gΚ¸%Cd/cìòFс×þ2¸·øüÿ9‡åØQ*Çνë™ùË,ûþ¶æÞÆV}Êç#ð/	¡u³”q|RÇÝ-Ϝ¤·žt®"xcïWªá§x¯hh
ùs^Õ7hôéݧ:{吼€À@Âè/‘²OOʸûÀC§jÞÂóìè…ÀË»²¡Éè’ëÒ;&N·Îjo²,|z×޷¼ã^@à ጶHyç&MØ
¤«‹n:crxˆxàeŒ½Û;®=†Ÿâ½ÖÝ8ëÏwiÿÑq÷¥ön9$/ 𐐼ݒëℏ»¾ÔcuÚug١!—1vM}£с7-Çe‡è ?ב–”ïi7:ðþttŒÀ¼$4߀TpeÂÆÝÑÝõÇ%q76—1ö>¯Wé9N£#ïuõA®óÌ>½»£¥Ss$/ ððü#Rñ҄‹»;é'/¶CŒ/cì:wƒс×ÐïóÎøó.)×ðӻǏʑ$x@P‘wpçB}��ûÀËûWéÙfŸ⽭Æ=ãÏsöà°Ñq7·¹]‡IIxøGâv
c)Çê—NÄ]s/c솺z£oF¶S™Á=kHÊl6ûôî9ƒÃr$ià^¸'¯ëâ¸þBµEWNÜs׬ÀËûðؘ2?Å{wU�ãԡ£ãnIS›Ž±¬¤
¼€À¼ÝR޹qw­½;ó¯gÚAÁÐÀË»¹ÖmtàÍÊvê“##S¾ÿy’R[:Œ¼W÷
Ê!%uà^0Ú*eŸW÷Š[O%Bxý9VD_ƒ±ŽŽ*ÓàS¼)yº·¼zÊ÷°٧w«[õî@@^	x@‰”q|\Äݿ=qr(‚À[æ‘ceŠϤÉÑÐÑ×bì¶3Oñް%KVìÖa+wë}¥¼ï9’v´txïèéÿ÷Là^жÅø¸›úâ‰Z°pÖñÀkYr¬J•cùˉèë1ö‰‘QexŠ÷ͫRöý¼é™ÔÞ÷†GŽ»õ­ú¸Ïo\à}ßêútE‹óýÎݣŠ1¿ ðjŸ27ðæýEï:ù¼Pâ×볃Öþ=—ñ×dìŽê:£ânÆÞýçï\½ûÊàФ÷¼¹ÕìӻOvõÊ!xÏm“£°…%À~XÓ%¼ĥ€Trƒyq7óOҰ[s޽€ÀKàeq¶O
x—•Wî{¿¿³#ªÑûšwœÀË":û$/^╯_Ê9ˬÀ۱K6/—Åç5:ðÚÿóïöMÜÓö•¶.£ãîsíÝrH^±Qܪ—úF€xÖë’Òšw+ÀKàeñ»Ï
xÿYZ¡z?½ûÃQ¯±÷áÝ9ªôúYœoȲ€Dàþ§÷Ý=Wòx	¼,veс×ÞÖæ6£ãî¶ÖN9$cïK{òà€å“ò/]ÜM?N(—ÀKàeñ¿/
x]®"ãOï.%ðxÀH£”yRloãó²x	¼,qöPEµ±·ªÊmtÜÍjn×|‰À$@àžµя»öÉa¼^–`ûÊБ×é4ÿôîكÃrxƒ¼ÀòKù—FñÖ¥
Ù¼^–x{¬¢ʸÀ[Yiöéݢ¦6eY^@à³4Pf‡×èޚ'e#ðxYbîëƒFÞ/¬É4þôî’þÁ¯;x@õ㑏»9gJþ!/—%ø–•Wxÿ/·Êè¸[Õتw^@à!ò
J٧G6ðv쒍ÀKàe‰½ox?ýR†ñ§woíéÓu'ð/hݹ¸[x­l^/KŽý£´"æ÷±ì
£㮻±Uñù	¼a¼ð…kÎó#xû‹	¼Ñ¼Ïkpvóúœ†ƒý± ^l<øçï™ùó[–=CÆxánØüóŒÎüùý–ÝA~ûñþÙß:àÛý!…ÚM{rµbwNÐû׮lÙÿþ?úBºÜõfŸÞ}´«W‰ÀF€À:SÂwKo‘ÀåÀÊV¥ÊQßÚû±Ã覂ٿ¾»cúרm—ceêì^cK¡Ö®éúÜÙ=ÿ3{ähë›þ36ʱ"ev¯‘V1ýóÛ!øÅÌÙ=ÿ‹rôOÄðÙlyIù¬âîÒÍYš»"´Ãd™}z×ޗ¼ã^@àyøânúBi¨–Ào×ޫ®ÐÞOsOh¯ÿ²súטˆ¯³ßt¶²%´çßQ:ýgx:-´×;ôóçՅöü9µ³þ7ð½¾þYÞ÷=›Ò{þÀó骭o6:î>ÝÑ#‡Dà^=¹á¼÷ÉFàÒVg…/ðî,
ýÖ+RBˆ£%ӿÆ֢Ù?ÿʔéosà	1Rg×LÿÖåÌþùŸI“Ã7Ím*BŒԥžþ¬*.:ð~õÅТ÷åƟÞýþ˜—À¼ ‚
¯
Ïé݁7š³­XŽWœ³Ÿ}r7µ\Ž‘ñÐßOm»}›†à_?Å~ý0ûôêî²à?ãæ9ê:föJšäx=?øϐQ5³ûðö˱½$øÏðï"9ZfpWkïœn9^s÷üöãóê&nµ!Íz?êí:ð®OËÑ/ÖîÑgŸO
z?X›®·٧w7·vÊ!xDPWF職ìvÙ¼Œ%ïæHz¶hâo4VVVeüéÝ?ŒŒxDZ@Ê;/´ÀÛ_,/cì§=½Q‰»99.Õ~ïÝôæ͓¼Q¼ å•ÙÇ݂%z—1Nñ¾PTÊéݽ;}pXŽ8
¼«Òr5dYFoÄ ð€}£RÖ)³¼»¼Œ±}ûEwODãnv¶ù§w<m:ÒRÜ^ÇsÛä(l1~K[ô@àîåÁÇÝÜŒå'ð2Æöm®¤Յ%¼%%•Ɵ޽´HÅoà=üùí:º¸Í轩¤M÷vé
€ÀF[‚¼
Ïè¿xc¿îê‰Ðé]§ÜnÑq·²©UoX1¼܃x@ѵÁÞÑf/cì€͓´¶ $)OïÞÔ; ‡Dà@à­›gw¯ÑT¼Œ±ßwv‡û޻ƟޭklÕý~oŒ/ðI'Ì,ð¶¾NàeŒM¹ù’6‡-ð—z÷¡î>9$o/¨¸{ú¸›q¼ä ð2ƹc;ºÂxïÝ&ãïçÇ}Þ^Н5}à-¿SÓ!ð2Ææ[–^Î/
9ð™zwEG7Ɓ¼RƉ‡¼íÛ¼Œ±í¸öΐOïÖՙz÷Ûcã^C/(½u긛¾Pï!ð2Æf´Ã,K¯ºŠB8½[f|Ü}­­K‰Àk@à-¯Nx–(^ÆØIí³¼uuÆÞߌŒx
¼`¬mêÀÛð—1Ô·,mrwÍ?½›Úҡ¹×0€À\<ð”xcAö oMÍÌOïÖÖ6¨¬¬Zö-

Š•Ÿ_¬Â•”T¨²²VõõÍ	¼§ÈAà5 ð€ú•Æݜ³$¼Œ± wD  ÍΠNï–Ì(°VTÔÈ9£çuÚ'‚ÃzË—§]GH^C/ܦ!ëäɁ·ùé—1vzk[§wWëêš&‡Ý.;;O¥¥•a	¼
ÉAà5 ð€¡Z©â>©ä&©m‹BAàeŒh«³`Ú[PpèӻUUuÊÉqMó<ӿF}½gÖq·¼©Mo	XÞ䁀ÀË;«¥-¤ӻ55neg;íDž<§³hÖ÷潾w@‰< ðxcGûږ7õ)^—«ø·ehTvö䓻¡®¸¸<è¸[Ûت÷ùÞ䁀ÀËûͭS×êêú©¿ÔÌUd?&쫬¬*ðÞßÝ'‡DàM>x¼Œ±7ùýڑ—ӻE‡¸ï®Û~LDætÌ<ð6¶êÓã>oò€À@àeŒçi9Èé]÷!Nïۏ‰تªfvŠ÷Ÿ=rHÞ䁀ÀË{‹߯¹ùÿqжpʨêv{ìÇDtEEe3
¼ß'ð/ ðxc65Ïè>¸••µ¼yyùÓÆÝuí]rH^@à^/cì­>Ÿvçæòô®½ÒҪˆ^{õõžC¾_ŽŒx€ÀûÆc—4zTQqèûß—G%ðÖÕ5Mùr"ð/÷1ƾ9::í­ŠŠbx÷”Uê0Ë"ð/÷1Æíê6ð–”TD%ðºÝ¿EC]GÙÙNÖÚNà^/cÌÞG|~¹[§
¼åå‘ÿ’µœ×!n1˜79uD @à^@à%ð2Æîïî³괫«kŠxà-((9èk»ÝÍvüÝ÷¸ÅͭÞ䁀ÀËû€? ډӻ3šÓYÑÀ[QQ{Ð×--­œô¸­y:Ú ð&/¼^ÆØ=ýv@ñÊËk"|{†æ^³¾Þ>½›ÀãÏ÷´x“^/cì=€ªftzwrlÍÍ͏Hà-+«š"*Wôñ;òòõf¿Ÿ| ðxc7÷Ø5èUW×+;;¼q×é,œòõòò¦¾-ĥor€À@àeŒ½=`©²iâôîlfŸ¶
WܵO»ݞƒ¾NeeÝ!ÿowçæëí>7y@à ð2Ʈë›8½ÊJK«Âwkk§|
—«hÚ縪¾‘ ðxco±,•6µ…xíUVÖ*'Ç9«¸›Ÿ_¬úzϡn1£çIÍqé]ãã^@à‰ÀË»²Ð¨a[]]“ŠŠʔ=³Л—W ŠŠšiŸ×À3Åu7x$6/cìËRÑÄéݰϾnyyµ

JeG܉“½Nåä¸dßj¡¸¸Ü>•;£窩iê4ðž—Þïõx„ŒÀ{û“„4CÇØÅýCv@5~……¥AßòáæZwô¯iW/xޫî&¤8Ǝ´$—§Ýø¸[W×4ÓÛ=LZF¶S‹îu­n ðo‚€À{ò9ü‚šacì/Ãqqz·¨¨Â¶³ÚÕuѽ®»²¼€` ðÚ+ª ¨4Æ—”Ûlþé]·ÛìéÝIËÌvêã#£ѻ¶÷üÀ¼	ïˈj±3ããônii•jCÚ}U5ѹ®mrwx^{ùe„5ÆØIÍÆÇÝúúfåä¸B¼YÙN}vx8ò×ö®§ì¿u^@àMPxO»JŽÖN[ŒÇØÉC#qqz·¼¼Ú´aÙ#Ց½®k6Ûç¼€À ðÚ;óZ9*ëˆl1có$¥´tÄEàÍÍ-°ãlØö¥að_S˒cåzûï7	@à^{‹.’ã©çåèê%¸EyŒ7<q·²²֎²aÝåUá
»®R9®¸Ãþ»FàMxwҮ¾{"ö®Þ$ÇÆmŒ±nÎÞm¯tÇEàu:í(ö}sӮÙ_Ã
{÷ÌF9ü—ýÿÂß>¯a ð¯ùcŒýþ¦‡ã"îVU¹#wíý}Íkñ÷³#ð/ ð2Æ6íqÆEàu¹Š#xíý`É^@àñƒÀËûÅ_ˆ‹¸[[ÛѸkoå†Í^@àñƒÀË۸;'.oAAiį½Ÿ^}×|€À¼Œ±^}O\Äݺº&;¾FeϾ¼Us¼¦^@àeŒ­ޞ·¸¸܎¯Qۯ¯»Àk.@à^Æط®¸3.ân}½GÙÙΨÞկo׼…xͼ€ÀË{vKZ\ÞÒÒJ;ºF}ÇÞø ×<€À¼Œ±¯\rkÄ]{ÍÊÉɏIà]¿e§æ/¼À¼À,^ÆØò×vÅEà-+«¶ckÌvÂ-x˜ƒÀËûü7ÇEܵ———ÓÀûê¶¶è"/ ð3xcË6l‹¸[QQkG֘ï”ÿ}œÀ{€À¼Œ±Ož{ƒêë›ã"ð:…FÞMÛÓtÄñxcx—1öȚ-qw«ªêì¸jÌξ{x@ü:â„KˆcŒÅù>²ø¯r»ããôn~~±Qwë®=:úDsÿ®ËÈ€CSøô7È‹óÝûükqwkjì¨jÜνïoÆþlwVÀ!€)\¸ì9cq¼÷Ÿy­jë<qx
J¼;R2ôæ“.3òçëéî€CSØYTA$c,ŽwûÓã"îÖÖ6Ù1ÕØ]üà?ûÙ~ö¢›5-@àøéÒ	eŒÅáÞ}ÚUªªiŒ‹À[TTftàݕš©·ýùr³¾`--OÓ^€’†󧉰Á3G,:GŸ?ýOZ¾êVµ¿¨–òíjp×wÝn²²œF^{K]aÌÏø÷·>./˜±My%š¿è"âcGݿ,ù±¶>ò¾0OZí˜4k͍nùºœªÁí6*ðfåwí¥îÉֻN]óŸõחܡÁÑ1xÒJ«��%¦1fØ~wÁoհü;äÎhþïVoÖõj¬­ˆyܭ¨nÐw-3:ìæelWaÚK*L}Q·?õhLÖ'Ýý7
ŒŒ	€Àf¥{pX׭\¯£cþòŒ±9<OwÝüUYv¸ÅëŽVڅòT;cxo^±^‡-ºH¯nK1*ꖤ,Wû¦ãä]÷®®[ϳGhýÕ	ÿJóŽ=7*?ë/]z›Öe¸@àa1ìõ*µ´Z¿¼C×,_«‹Ÿz^=õc,Šۺê³	»½}ÃஓÕ\¾;º÷ޭoÖu+×ٟE®ÝdDØ-ßý„^þʌ¯]ëïÓcÿ¼.ì?ÛËþö¢nzöe­ڙ©ª–%@àP÷w;0†uÖÞ
oý•ÚJ6D%ðvw÷é
–eÉå*ŒYحØõˆ7~av×nÍ©è:I–¼ÍÛ)m|«#¶±MßPGÁr544G,ðŽûôŸZ[ۣvsU¹ë
mülx®›óxšëb;(Feã¯~R]¹¨Á]ָÛÑѣÿätFãoŽªvޣ፟ÿ5«~T@à0Ö&­;މQã»Փyƒk+ÂxÇƼ:˜––¶ȅÝÌlUï¸C#>¹kµîHi¸^^*^j‡Ę-°îõ§]$OkÖq·­­KS™8Å[氛¥š·jtÇ¢s²NÑd^¾I÷ލå¬54¸ëd5W¤xGFÆt(Íͭa	»ÙYYªÝ~£F× º×gÍ\i \ûxT>`D£fíÝðÖ_«µdãŒânKK‡¦ã÷”—W0û°›™¡ºmÕغ÷ÆîÚdŸ®	^ָôÚíxhìFÿý#5—ï>dàÑL47·v3öȽíy׽+ö×cÍ<i°J^’{…Ÿµfžz2o<hÜõxÚ5S~¿_yyù3
»9™{T¿u‰¼kßaÖõÈY,/Àñ]iËçíh7H=ç€ÀÛß?¤`x<-ӄÝ45üûR¯}«™×aí|i¨N^ ™µ¼bø[OömûânSS›,ËR0ìS¼¹¹?Å[±óÁÉ÷Ø5uyç
€À$³?ŒËÀk­™¯–²-vàUoï€f£©©ù€¸۲匸¹kHÃ
 ðɨ+Ý…q»Ñ-ßWcc«üþ€fÃçóM:Å۶éÄø»Î@à’Qú¢¸¼öúö(;îªfǭñy
Ö.x@à’É@¹´fNÜÞ@Ñ
…}Š7?c‹ükŽŒß됙¼@´X~i¤QêL“ž“ª“*î‘Jn–
¯™XñõRÙíRÍ2©iõÄíÆÚ6¹ÿώƒñ¿Ý?W¨RÇ÷5Xw„4Ú"/n1©3UªzXÊ>SÚòyiíüÙǼõÇH;¿/¹.–꟞ݗl6KkKŒÀûڇBþùXëßÿסàJ…ÝX»ԓ+µn’êWJ5OJUI÷HUHu—ž•Z^‘z]’·K€ÀĿj‰S¹i¿—Öù¸·éãRþåRûvÉòiZ…×&Fܵ·ñ­
Iûöĸ돚²³bI}RíSR޹ҶoHÞ<û÷±õËRÎÙRõ£§Ôý#^Àlcmö)];ŽÅ6ô½òž‰Ӝ}…:¨ñ¾àãÉ{å½
Iމs-ìp?Sã}RÃ3R柤—ßù[H¤üJª¼âß% ðÆèØ)í9VZ3ϼà·ëǒg$KûTܓ8AÓÞöo+$ù—'εX´äíԔ,ŸԼAÚóÇØޢcóg¤ÒۤÁj/}–oâô㶯ÅGøû÷'Bo`Ô>ñšX×u©Bâ¼0±®GñRÀÛ9T_yyï׾Ÿt㋒åSä/дFÚü鸌¯¾?±b¦½¶­
IñÒĺÞ$÷Ȧ±)ÿ
iݑqðey”Êï’Æû¼@øu얶ˤ(Æì/—S@!©_™xץð©ìíØ‡_š÷¶‰ۈø‡:@à¼]RÎbbª‰«yR!v'äµùÿìÝc”\Yۇñ7ÛÆc۶m۶mÛö¨;­¨ãtìtìLÒv—]çÿ>{=ë¬ՓQº»ö>¨ë·Öý}ê®Óõáʞ}bñò¼ÿFÀ^àØ?¥֋ÃÖK¤JN5±ìqì3¬³ôÑÒØf/"Èó<™©V«2S©TT.—åO©T’™b±(
…‚Ìäóyù“Ëån3Ùlö6“Édn;ã½*­zE˜Ãc® ¨•î›Ùg˜§a¦´íCR%#‹€ëGØã«\ýØ:1¬¦Ói™I¥RJ&“2“H$›ôñ%ªν6ÌKi:K*ŽªvªRûýÙkØgá}¤±M:9€À@ õã¬fý(ë(ȺŸܮÉk˜öÐÅlÿ˜jîøØk¦q¶´ï;Ǘ n‚íÄX{W¡ÖÎúñQֿ‡x1ÞËSÍyi}ÙqTfõ‹¤rRQþ)Û£-Ávª3ҥҲgÌ"2Åկ5ߛyÆͳnžyóæoÀü-˜¿	ó·aþFÌߊ&åØßÙq”Æ\«‘> Ð€À€‰'n…‚ÚÖD,¢­…IŽS¹ý„²Mª{ͤ¿çC°ùÛ2cårù¶Ø+Kîɞ£4-çKC+¼.®ò֏·&@\Orè°*L ‹Д–?ÛʳàG`s
¾°ï7ì:j3çt©¯M€ÀPþõ	þ	\Bp‰»‡T™¿ˆ…,&}t®ƒû˜‡Um»š}GñåkÇÿ¥“¼€˜ù'q£q™‘nUÚ±€ŔÛéìÉíþ;â4̐¹Gxî,ärnÔglHåeO`¼b2þáð9Tµõ
öÅi˜%õ4	xë܏[*•Ìݸ1=‘ËW½2‚ъ©̻§‰1§ÏJn׏Ø}T§ñTi`±ÔQ̍ÿ©\&¿ýk
VLn÷Ï8í= jëeì?ªÓt¶”ء€ÀxñY¡PP6›­Ó¹LæH³¼[fD0T1ՖK̕	<7¹ߍòî˜ù×KÅaE^@Ðåt.“ìߡjó¡P&<WۮTyñãUZñ<;^¡RÇËTZö•Û!¯ù¼ºŽtùí_
îùíSµåâ(ïYñTÉ+) ð®\(‹æ„Ë0c*/~l¸‚nã©*-{–r;¾£ô±Åæ*€»ԃû•9xƒ
ëߥêÜëê&ÎyMg+1|,Ðg(×ùM"©™–¤…÷“–>FZùti٤ŕZ#7T€ÀB¨\.›;t¹r¹ÓÉw~=¡ò¿S^úe÷ýA‰ÑÞi®ôÑy*®zµ¼†ٱŽŠ…Mü2ßWµùÂúй
3¤%’võ/+Ë÷é.U2ÒØ&éðo¤
oZ/
ßgêŸ/@à!‰º¹\în£.äº×Êk8%ذÛ0KÅկSªg½ë'ú:U\ó†XÞ/lâur`//ès9s¯ö|MÊõhzªÒp‡´ù]Ró¹áølm—J…/àú…B¡pòQ—aÆGUih A©´âùJõnvòyÍU•ù÷‹Ul,®ycxž§‘nU›ΏwØ=úG;wՖSÒ_Jó®	þs®~€À8­›Éd&c&·ëGE¤jÛUÊnpÿ¹ÇU\÷¶xœÞýï¤z6„뺏m_ŠáU3¥ÎOJ•Œ¬«ÿz[¾î¢ëY T*)NO)Â0Lrøˆ¼æ`N[šë#]ÁÆíÝ?‹ú•
æôsøž­áãòš΍Mܭ¶^¦rÿr9W•6½=+.“Jã²/àÄî´Ã.Ã׹G^ãéÊîùUhv=ð÷H¿€-}¬=œ/íÛòÙXÄÝrû#”Üg>“ùÍ5¿½rn ÝÄÖ`v°õ}ª!¼žç)›ÍN;¾0Lªw£óӫÕ拔>¾$t»Èîûƒ¼(ÆÇŏ
ïéð‘còšΎvÜ]òD%Fznò;—3¿Årª0 ­|fWS̐ª¼•J¥f/Oc˜bÇ+ÜÆݹ×)ÕßÚ}ä·}9r2sð†P?cù͟ŒnÜ]ôh%Fûîô³™ßbó›ì”W6'j£úÂ5¼€+’ÉdM¢äzÖ;=½[w½’»C¾—q•–?'2²2ÿ¾æ¿9üw<Ï9Óþ>,ücDrèÐݾd2˜+ö}×ý^†Vjê ðNîÖ8î2œÞ}¹ÃT]¡dÿ®ȼt®Ú|a$"dvϯ#±ÓÂæE*îz
§(ݵò䟙dRÕjUÎü™ÛÝ,{¼¦/@M_¦Æ0æšW§w½¦s”ê^©ýd÷þ>ü'L[/Wbl(û4'a½9gD&ðæ¶cҟ1“ÉȈýIÞeš¼€ӻµŒ-SØð~7q×Ü{èæHèQ᎐ߌÖ3·ñCѸöbვÒgô<OØþQw;êxŽ&	/@©Tª]ha˜Ñ^sªÖIÊoùtd÷”>ÚÞ+šÎUb¤;RûL×xZèoúօSýŒÁÜÅkx^Ýí)ѩÉ€Àx¹Z­"Ø{[D òâÇ*‘‹ô®Êíe„ÌoúxDOŽ¿7Ôq·´ì™Óú|æÞÀG¥ù׹ÙÕÖ÷i’ ð¤R©š†)/~œõdî[Mõm~ßÿçðÞm<՜†ä>“{ÍÌÂ{z÷Xû”?›ùÜð*©a¦ý]5-•S“¼Åb‘89ía’}Ž^RõõxìllP^óy¡ŠÅuo‹öýÏëÞһwbþûl_Ï`ßÎϻÙÙÑ?	L2ðär9"崆Éw~Ý~(›w/%Ɔb³³âÚ7‡çôî-3”êÛé}&ûwÉk˜¾—ÖíúÉԣu¡ Шæ¥��O˜BàÈçóSŽSi¸õð“9xC¬v–9tcxîˆíxI<¢ùº·…f§~8Oš|¬N&Ãw}ýìï­a†”ë˜Bà(•JÜÉËLz’ƒûlG㷻‘îМ8M_›«B¼†Y¡	¼å%Oœҝ»æZ†Ðêx¶ýÝú¥À/€çyæÊs‚ŒxyRÃdwÿÒvð1§]c¹»rû#C!Ÿ«׾)47¿õ“:µ›Ïçzc›íïÎDd0½ÀP­V•Íf	˜w;L±ãåVcOuÞõJ$Æ-ý÷ób°Ìá[bµÓTß6y·ÌÇÉè£óN*ìær9ó›«ÈXõ|»»k<E*§¼ F¡—½Ì]MµåR»/©ÚþõØî.·ûçÈʂÆr¯Åկ
Áý»ÿg®ḻ»Ñ
»¾EöwØ7O€Àj|uC±XT:&j2NKnµÉOUrøHl÷—9Úh„Ìîý}<ŸËÞMægî¶:÷š;üo3¿¡æ·4ò=Èî;?)`)ðT*sòŒ²1ÊîûƒÕÈSZñ¼˜òmÁȶ«•‰ïÕ!«^ìÝÆ˞>ñÅi®OëÚwèvw¸ôÑ–/±—)lü Ý¦{~ëý%GŽ s;¾ïx޳^^€·´öæ·ÑüF*–òýRƒŻŽO•ª/p|_o¡PP&“áÎÞ:™òÒ'[¼Ãt¦’C‡ã½ÃñÑ`Nï6¯ÄhoìŸÏRÇ˂;Ż󳊽•ϰ»Ãэ^€r¹lN°™;'	¾1jË%ÖâN¹ýáu±C¯a¶óø˜ßòéú¸#º{up§x÷|]±wø×vwxôá	¼€—´ùÁ7.'|™‘.«q§°á½õxo™é4<z§û'£ëbJ+_LàÝÿÅ^rå­}B äpo±XT.—ãßNª«Ãîý»ûÿ\{wëÞYgÏéÊ`ï¾ïª.´]jo‡«ž/@à<åkîñÍf³!¿ځɺÉj Kõm­ñ3/Y3§…Sýu��?×}àÝýUՅu¯²·Ãöûx@|Nú†ìz&·ûgVCdb|8î;4Ûit,v¼¼.ŸÕôñeîoçÇUö|ÍÞ›Î ð€˜Ÿö~¹æÁíä·}ÙZةν¶>NA¼ÁitLw­¬‹½šßó›`~ÌoD¥R‘×áøïúש.tßlw¥q/¨³ðkbN©T2W=˜û}-]õÀ6}ÄZÔ)/}r}Dò͟pË˞«ݙ¿iqÍ߸ù[7óæoÿN¬ux—?Qu!±Ãî3‡¼wý“¿SÀLqÝۭEÒÊÖÅËKŸâ,8fŽ4G.àšœ1÷qŸqÍßò”t<Ë]às†T-*ö
Cv÷8¶Y`J€œÏçý—½qýÃLqÍíÝ»êÕñßáؐ¼9g:‰•ö‡†.ޚ¿)?àúW)L¸V­t{ŠwxµbϫH
3ìíph¹@Í/ªժýûý“ÀuwDqõëìÞuo‹ýþÒGZœ…Æìþ¿¸>yë_Ÿ0…xkي§¹¼û¾£ºÐr¾½´xÁþ‹à&žöcpԯ†(®~­½;öMñ¿Ãx㇜DÆêÜë”­Éi[óìú'nÍ3mžmóŒ›gÝ<ó‘0¸Ì]à]ñTՅÖKì�M 쁀«!&aÿŠÿtph£pqÝ[íÝ{êå±¼•y÷vs»~ä‡Ú;Œµþý¶þ)ۉÁÖ<›±´ü‰noÃL©0¤Øk¹Ðbà'@àˆu>1O<1|G‘xb(žN,.¬½;üٱŽ»©ލN£×r‘¼röÄP‹vw§xþY±×|žÅ+xp±xâIâ‰Á؏Æ~8öãqyûç,¾ìa¡z!ØÄ1qÜ?˜û'býS±þ˜¸nƏíþþ*þî,ϞoèN`écÝ|«_¨x«J
³,¾¨®CÀFàþÔÞÉӦsüè쏠k2žçÝá¸áIó¯·›ΒŠ#ºè›ç&ð6Ζ
Š­|ŸÝý%vؼÀñÙ
;…AÅÒð*7aqûGu7°ä‘n¾‹ý?Plm±»»\—€ÀwØ
;CËK›ßáæÔhö˜îz[Üޅ÷SluÝhwwռ€Àdqìd•Ƥ9gØŠߤ“OZü07‘wxµbiÇgìí¬õ[ð*ҜÓìŝŽg)vüÈÿ|a¹·Ý
n¾“õ¯U,u<ËÞΖ<JÀfàlž~l:Sªä^Yšw­ý¸êùÂdxҢÙÿ^fIÙ㊕jAj:ÛÞÎ6¼^6@à6¾Énë¾Y±ÑuƒÝ]¹¾»˜{dyñÝÀ"»ûÚûMف8ø3»gíËå´4ïûqéc„©¨Jí÷÷÷h÷TzaH±±ý#v÷Õ3G6@àF×Û
<§Jù~BØÉN×MÂÿ§x'£Z”Ú.µ»«\—¶#Ϝ3ìFžŸþÿÆÞ0Ã~8l½Ø|Â4^¸àÞö¿'ó,.QäuÝdwOm—xàªçÚ
=-çKå¤"ɜ>ž{…›“¡Ÿ¦éֿ¸ù®æ^%•Æi+žjwGë^-@à€~d?ˆíøL4O7/’›`Ø0Sʦ©š—Z/r󝭝"kp‰ýýù.¤öُ=§H©ýŠ”Mo·¿־L5‚Ÿq÷½ü¹"iécìï&}H€ÀWÚh?ø¬xš¤ª"aççÜEB3£T#Èu›Pptòz–Կ@‘rë_íï¥ý^¸´û+n‚؞¯±‹gõTcØô6wß_әÒȚèÄïæóìïd×¼p)}ÈÝ]³í
'OÚñi·q×ÌØ&ÕÒ¥ÆÙî¾CMGÖ)ԼŠÔñ,7ûß.@à€k+žâèÄãYỒ Z0/Írw׼X–`ëûü=»{®—*´¶}ØÍ=D€À€ ÿ—»Ör¡4¶Y¡½UZò(Çq×ñÜ>Y‚|¯4ç÷ßéÑ?+tþÜÝüX€À€ x%iînO<öµ)P]7H-¸»fv|Z–aׂùn·}Pª
ûàîs› ^ ð ({¿í6„5̒ö|]òÊr*×%­}E0ñό	éå”,C%#ͻ&˜ïxñåÄÎ`ïÜÝùY·Ÿyó»¼R)!µœï>†-}Œ”Ü-ëLT5A¹éÌà⮙®Gz[ý½s
Çî¯J•œœÊõH+žêøkfrå^„žoÃÌiÞÍïr]ª¹ ´÷›æîß`î™u¯[ûò`¿ssŠøØ?$¯"»ªґ?H­Õís
(§¤¶˂=õ¸þ5ÒàIž¦¬Züß¿^/5ž|Ø5cöZËõøw-;î%ùTþöîر(ÃèضmÛ6
c۶m۶§m۶mëÉ?8c¶s“¬Uu
í~{³wGίz²oL2én
z8s©2Ž¢"@à€m߯FyÝdÁs“í?LŽ-þa¬žôHNI6|.™ýä²ĭü9Õ9[*Ǟ!չïZæÕ˜X–ž­ž½ɦ/%ãnÓØÿϢ¨Tà€Z2å>Õ¤¿¿dùøùØ[&ïšL¸S2öæÉÐ+”Ÿ¯òYñ¶4K^Qµ{QDÌ~b!ò§§6$ƒ]ÿya܉•e~óªw—%nUù÷wï
 ðP5Ǘ'C.s>"3ãI} 
E	§îØwfèÊÌè×(ó©«úïÜð™/Uµú½ç€œ17)Kި†ŽMçk¯3ñ.eÄ ðPQõþ³Õà”Y«Ǘ†Š90é\ߊu†\Ö݁€¦б©„JQëØ咃“CEmþš;zö§Ì^šĞaeY°uúËàvý:´äg棓Ô¼4“5¶N7înýnhË^çΞÉ}c3¥@à i-zÑ?N™ëºã'¡™ÔO÷^;îdî.¼MÀҵÙOüOñÇr™d×oB3ª%K_ãÿ¿‡{‡xhvµždÖãþ1þ8ï–˜Ìämٱ#Û@à •"ïì''âW2ö–Éɵ¡ElúRòûK¹×ÿw7=€À@«©$‹^ÒÞñkúÓ¾áÅ쟌¸FÄÝK%۾@à •­ûD	Aí6t͇’ú`hQ“	wh߸;ô
ÉîßxhûF·Ïcn’žÚÀ@G²ø¥íwG]?9º €À@;éڙL{HkÏ"]òʤÿxh+åMÖ×j¸;íÁI÷ž/�,Øð™dè[+zM¸crxvh[%zÎ{ZkÏÛ]õž2[xhs›“™mþè5ò:ɦ/'µ¾í›Œ½ekÅÝñ·MŽÌ
 ð?ÏæmÆEUù`2p*ðo»ËrÁ×hþEjk?’Ôz¼ðßÇ6ìøY2þöM°\êɺ'}GÿWÿ±dõ{“aWn¾qŸŸtm ðÀiª%{‡'3Y½à5õþÉöÅÀÙé=”¬ýhy@Pé°{édþ3“«¼pöN­+Æܴq±kܭ“5J:6å<€ò€`çϓiªRØ-£$–¿1éܚóx ž]˜¬~2ù^å£ãrÞè¬Ç%¿˜œ\¸€ÊøƒõŸL&޹1QwÈe“YOvþâ"ÍØ^è?‘웬ûX2÷©enïÐ˟Å,Ýë%Sî—,ye²õ;ɱÅI­7НÛÊ=œ÷´»˜m􍒅/(o÷O/ԒîÝɱ%Ɂ	ɮß$;~šlû~²ã'Éîß%ûÆ$‡f$+þ¶"ÔÿtOË=^õ®dÖ’	w<“EmåíÜñ·Kf?)YùŽdׯ“ŽÍ^¥ïh™O}lIrxVy ±\rpjrdnù¹¾#%///€À€À€À ð ð ð ð¼¼¼////€À€À€À ð ð ð ð¼¼¼///€À€À€À€À ð ð ð¼¼¼¼///€À@»^^^@à@à@à@àxxx^^^^@à@à@à@àxxx^^àí؁À ë{|…^Á€àà¼^UDÚ÷™®ÛäIEND®B`‚PK
!<0D¼° ° #webextension/icons/onboarding-2.png‰PNG


IHDRxÐ*ã:sRGB®Îé jIDATxìÝEr,Ù{÷ñ_f¡˜.ßæ~_3ìøOLÃìGfœš½?3ÃeK%U¦C‘†Fé¶ZªÊÒý|"NœW;ñÄsŠœæ³O_K1úå$?Ÿº~7Eq'u½.^Q줮ï¥(¾™ä?S÷ÿ5?»ñƒ|Œ"å+ïdtôû©‹_KêN¦€bœ²þëôz¿—»~ïìÀû…¿˜ªþÇÔõR¦€¢ØN]üJ~öֿå=ʼ×çünªú_Zw8i¶EýÏ9i¸ïQ潓»uý‡©ë2í@]—9i¸Ÿ}ðKI£üߝ»ÍZ†2í òõ?ä¤é&)râó÷þ<U~#í@™¿ÈOßùÍ"Ÿ}úZ2úNRw2(ÆIÿ­"Ÿ»ÿ۩ë?Íì (~§Lòó™5ü|‘ÏÞûj’É,àkeŠâNfEqçd‚·ÎÌ ///€À€À€À ð ð ð ð¼¼¼//ï¥xxx^^^@à@à@àxxxx¨êä`”윜滪2[€n®>ê$[»ɋdg¿	ºeØO–撕Ådy!)´X‘Ïޫs5P×ɣÉÃçÉÑq>‘~7¹±–\_IÊ2€À$lí%ß}˜ŒŽò©ô{É7’•…\6@ààޓäþ³\¨kÉkג¢ÈE<²@äÛ÷›¸{Ñ=O¾yïRc^¾÷0y¶K³¹›|ë~RçÂ/^$O6sɚÈûƒǹ€ÀÀþád£ë£çMèý”€ï>Jêzòë ª*€À'Y™°»Ÿ‰'?|@àà¼>ŸîÞ߽Ã|R€ÀÀáq²½—©úîäÎ'¼lîdêö’Ç/òI/;{i…>NFG^^ÖÞ(­PÕÉ÷xxYGÇi;ɋí“Ó
ít<NFÇÉhÔÜ'çøäTiÎ8©ª´Ê÷'ˋIY¸ځ€:MÀÝ?LŽ’ýQrÐ|§ªfs¢ø‡O’ׯ¸Z€ãd÷ Ù;Hs6!÷*yô<5º™:'u•TuERIyrÊæît’N™t;ÿwzÍI·›滗ޣÈgïչŒ’í½4g¿‰œ[z»I¿Ÿô»iN/t“A¯	Å ðp.Gãdk·9Ûû“~n™ôûi‚o¿‰¾Ã~óÝë^ U¬;ØOFMXWIY4!¯ßOÉÜ0)&0¥ûb'ÙÜMvöCë4Á÷îdm1`/À4ñz²™<ÛnÂêYº&êm¬$Ã\˜½ƒäÙvuF¡¥zÝäöFrm9)ŠL˜à“>mân]ç\æ‡Éõ•dm9éç›~¾<ÝuۮÛIn¯'×W…ݩ@àØÜI¾óðâ(ë”ÉÆrÿ†ýœj\5“º϶feý‚°{k½	ùe™iàޓäþ³\šŹ&ô®-¾Òs÷àÿVATUh¹n™ÜXOn®
»¼­ðýGɣ™ˆ^§™ê-;̓i{™”euo¬7‘^€¸ÿ¬™ޅÓt;Ínåa¿9s͝n'Ó/Àö^òµ„KT4q4“S$eٜ"IQ$©“4WÆUR×ÉqÕ<vwT%©Û~ß}Éàäî%ý^@à¸,U•|ñ;Éè8ÄnÚa638¹;I·ÛÐ"ç7®’ãæ:<n¾FIU§Õ:E24¿Éü ¹±–E@à¸÷Ÿ&÷ž†s(Šd®×L¬Îõ›ïN'S§	½û£d÷ Ù;loðí”É۷“•…€Àpª:ùܷš5¼œA7Y&‹Ãd8HʴG]7‘w{?Ù:Hª*­Ðï%ÿÿn2ì^€‹òt+ù΃œùA²ÔDÝôº™
u²s˜¼ØKv÷“:ӱ8Ÿ¼{ûÊ<ÂÝ´Åóíð1†½dy>YšKz̞"Y6çxœ<ßI^ì&ã:³±œ¼yÓÎ]^€W'ÙÞïÑ)’å…du!tset;Éõ•dc©™è}ºsùk9^»–Ü\XÑpGɾ’Ì��<÷jL›VUòl§9U}ñ‘ü­ÛÉêbÀ/Àe9<Ê+oi.ÙX|õÿ*ËäÚrµn^Ü$w¿—¼{§ÙY|E@€68ç•TÉê|òÎÍäîzw_UÝNó¼¾q1{†WÄ]^€‰¨ój)“¬-&ïÞJn­%ýnhda˜¼}3Y™ÏùÙé€À09"¯„¢™,Í;·’›+I·¡,’Ûkɝµóï!Þ?LÆU@à¸l½^®¼åùf2õÖjÒ턗üÍ޺‘ôº9—ý€Àpنý\Ysý&RޱŠá\Ýä­kÉ\_àh¥N™Ì
r¥ô:ɝõäÍëɰ>…N'yãZ²0x@àZie!WBQ$ËÉ;7“å¹p¿ëkÉâ0/m÷ ©ª€ÀpÙ֗3óÉÛ7’ëKIQ䈼w×_~’·®“ÝÀÀ0‰]µKó™Ie™Ü^K^¿fÏî¤"ï°gM­"ðÜÙÈÌYžkÖ1¬̇	õ»I§“3mîd@àXœK6–3Êf’4w֓n¦ñˆÝêËíá­3 ð¼~#ôÒjEš¿–æÂ-“µŜéޓL¼2y÷Ns·ÕÆR2?-pc9éurªÇ/’ºÎ$€À07HþßÝvFÞn§	¼´CQ$7Vrªq•<ÙÌ$€ÀØÇû£¯·o]ÃÆbR¡E–æ’a/§zø<“/`’÷ÇßlÏÃke‘¬̇Z_ʩ’ÍÝL¼€¼oÝJ~ìdeaú“¢eZhy˜t:9ճ­€À0
Ãf/ïO¼™\_™Nh]žmUœýÿlî$Ux¦¹¶፛ÉϾÛÜýn&¢,“…Ah­³ï¸N6÷/4•E3ɻ¼‰Xè')B‹Íõ“^'§z¾xÚb{/1?Ì`q˜Smí%u@à˜º£ãäð(1ßÏ`ñ¬5
ãdw/ ðLÛöþäÖAô{™ÌÎ~€Ï^^€ØÙÏDûI‘Y@ñÓÖ[»`Úv2ƒ^fŒ)ÞÓì&ÇU@à˜–ªJö2Ãn¸B7±‡`ªöGIÉè÷2Cö’²<{½¼S²˜%ð²0ȩv/ÀU¼2é™1Ì÷ÏÞÃ[יeÐ
íS×y	Àþ(Ñïf1읽Ãyïð½ûz(Š 𞇠{4NŽ«æ¼`ï0Ñëd1èçLÏw’qx¯nٜ^çÌà‹
ŒÆÉÎ(98þ$qø/öî8ªí»ø¹Ò'„…q×uÝÝÝÝÝÝÝÝÝ]×݇Yßw†$m¹ö}ow
5,I:„N:œ_Õ\O=õ¿yYFO”bú ó×]£	ç“$IRšC=m7«fÆR䯊ê)$—I’n
^4(¬€¼(ȃ€‚€Ȋ‚œ€œ‚"Ɂ¼€<hÿ¹ò¢àl’òz$ŽècÎ4$)Ëj$¬D’$É~•@–C5†  M^­wK†ۑ$I“”Ø6É!€¶‚¥å,çþ¬ٻÀ[
QŸª”`®Ær‚fÂh’$IZÈ
R–d´”WÍ켸{M?:ñ‘%
¶;I’kšI“õøÛù‚ž‰"ÔǁwE–ó–=ãq„$I’ÚÞXËøÙ3¥O‹¼Qå¹Áëi{#=/î¾ìò7w%I—Œ8ŽY¯㍌ŽœhP9¢“Gç8G’$I%ŠV«ú¿fuMç4R(
dུ%ùyß~d<b8D’¤KJ).°§’œž‰Cú”J1ª¥H’$éBÃa»]SäÈÀ{iK3ž¦5Ë Iҥ&¢(b=¦’‚žC6[i~«þí¹ã—~‡ÿä¯:zœUPtœØ8ÞH$IÒ–nWi†¼—¶¬àéÊH’t)*—ʬÇtšÓQÀf‹kunùí?a÷Ûï¦úäiÆx„›þð¯(Ïͳ
*E¬äD=E’$IXº]e2ðºK$IŠã¸?.x£ÍvÙÁwQ™šæé¢ZñÜËv5òønýÍ?ä¹?üóÜò{Æè£O\´ÞŒ.H’$ٶdà•$I
Ð(ŒX‹˜íÙoÄf{ðÑeg¶£ÒÜ7þÉß0tä8a£Îðc‡¸áÿÿ}urê¢ìðžh¤tI’$I2ðJ’$ÅQÌZ̧À%1ÑæÏf)‹{÷°í¼ç¾VØ}º0IØõî°&QèDƒ$I’¼’$Im­/Z›Ïz&ÙLC‡Ž·âæR殽Šíhä‘ÇYJ¼¸pQït’ÑÈz@’$I2ðJ’$wxçÒü’¹àyìq–Rۻ›dhˆ¾4_‡3óÐHXÊè2wqïދ¶£<ätI’$I2ðJ’$wxà ¤[µœÞ	z¯s윻æjúÒñi8:§fà‰'áÌO7pê4ñ2Û³×]uÑï\šÑ%I’$ÉÀ+I’´–­5‹Kb¢¡½¿ûđα³_,Ôa¶Æ9íЛf<eô±'XJ26B}×ÄÆ޵ï:K’$I^I’¤(ŽèRo÷RÀÍR=5IØl.sÁ{}§žp¡NÏvÜߝ]ÏÅrÒÉ\–±’$I’W’$9ÓЭfÎ%xór	€"¨Ž1¿{Oë9sýµ$ƒôJ™%Í,ž›jyô	–2wÝÕçoøžšiïøæņÌl̥9’$IR?Š‘$I곉†¤(.‰
Þúà~Ê'³0qi¥Êy:冪06Õ[Þp*14R.pê,áüa­±ü$E–Ó30³x~¾b7„^I’$yÁ+I’ú‚¼Àö¼O¡IföhÇݥ4S83ß~YÙѩößou—í`9ùBÂû¿ð‹8ü‚qöÀjãã,NLðäm·ROBxä$Ì,^8û0·HG+šÏ
$I’$/x%I’ºa’9«l߉†3íù
º2_‡Å:ìÙcC[ûŠw|Î,°”t`€“wÜÑz.˜qXNš­.Ô˩g9k'I’$yÁ+I’¼âՓ3pê,P°&9pâ,Lͱ¥íÞÃlˆ®®û»@’$IêO!’$IÞͿݚƒéy6Ää,$[VìÛ	£ƒ¬K¾	¨”Ö}ô¬…$I’dà•$I
èFôNÀEWk¶£ìJJQ;ˆŽÃØÐÊ/U+€f–ûÆaÏD]„köÀHuC¾
$I’$7x%I’zÐPKA°}^²V'Ï@ÁÒʰ{*\ ™³0_¿0žVKô…ñáv¬š#œš¥<7Oyaž¨™dažµþL’—bÒÑҽ4GË$QȪ+)X#I’$ÉÀ+I’|ÑZ7Êa@ÏÕ\
)KÚ1{Æ!`iåìŸhO;œž…¢€ €ËÇ!Šت‚¼`ðÄIF?Ìà±œ8Ieê,ñâ"ÝÈ+U÷íaîê+8{ëÌ]uÅÚoÁZH’$I^I’¤0éF9`ûL4,ÔXÒHµjWcç0Œ
B#…JQÈV¦);î}¼±&ªÕY¯°QgøñC­gïëßÂÂûyôK>—ú®\ `ã'$I’$¯$IR÷q­Ûû•A{ƻáØ`™­¦<;Çåo~;—|Ñb‹ièðQnüã¿æƒ?ømäaÔUà
ƒI’$©…Hê3’äKֆ¢`Ûð2>Apá?‹CúY˜¦ìåë¸óç~ƒËßð¶vÜíÊÔ4;î{ˆnOx«!½ I’$x%I’¼ÃQ6)¼Õìß	ƒ¨–aÏ죟UÎÎrû¯üû^ó&‚4¥×žìz`w YI’$ɉI’¤‚®E!ÛÊPµýl^ö**“Sl–dxˆóä9D= I’$yÁ+I’¼à!تõ
?vˆMœ½åzΓ«¼!’$I’W’$©
5ªáVí»ÊË6ËԳ櫓sœóäFk I’$x%I’ò"§3/.ûÅé<‹͐Œqø3?‘äùÅÚà•$I’¼’$IyžӭjÈ¥“þfn¼Ž^JG†xèk¾˜dpd9Å!’$I’W’$i
Š¢ [a°E'T„õsöö›酅û¹÷;¾‘…gìeIyN'ã¥I’$ÉÀ+I’´†¸›eÝ*‡[—ò8æá¯ü"Ž}ÒÇ@rQD!Ç?þ£¸ï۾–ÆøËJs:™(EH’$I^I’¤µÌ3t-Ëz¢(ÐÚ1ýîýŽo`áŠg°‘殽Š{¾û[8ú	EÑ) §+)…#qH?’$I’b$I’6Q–g¬EZЁW­é„û¾ãØu÷»9ð²×Ï/°Vµ½»9ö‰Ãôm7³ji~1®w%I’$/x%I’²lúhƒWpúùÏáý?úÝù˜" ­àG¿ü¸ç{¾¥›¸ۖfcW’$Iò‚W’$)IÖ"-
ú²R‰·ÞƩ+¯aâ‘GÙsï=NM²”¼Zaúö[8ýÂç0wÕt°æÀ;Qސ$I’¼’$Ik˜gȋœµ˜Mz¢ÈÙ@j&Pk’G1§o¼±õMN1þÄcŒœ<	@íÀ>fn¹žٛ®káuKsV²«#I’$x%I’º”&)k‘óYя
šœçC-ìšh=çUàÀ.6D–wÜQÞ[$I’Üà•$Iêr{·Ñl°gÓ軗¬i¶³‹t´Ѐ3ólˆfJ'û«%$I’$¯$IRjõښç¦ӂžÉÑzÕpt
ŽO³j§f`r
Ö'YEà­ÄH’$I^I’¤.ânš¥¬ՑzJÏ9ZƒZNÏÀc§àÐ$Ì×YV°¤ÉYxâLͷ#q’]”;o F’$IrƒW’$i•ÓÍf“õ8ÜÈ陼@«ÐL`±	‹
Xh@–³*£0TgYR#m…âsFaß `UšÙ*&b:$I’¼’$IEQ°X[¤ `=ճÍ¼J3¨'PK Þl?YN׆ª°w‚)LÏÓÑì"T"˜ݐ
ޱRÄpҁ$I’dà•$Ij4dyÆz=VË|ÉZ/¤9$	4Rh$�Bž³.a—Âø0çìX]äkÀÄÆL4<£с$I’dà•$IÊóœF³Áze<°èï†Åëfi
IÍÒöŸ[ÿ<ÏÙPQcC01Üþëóµ#ï@NÍ@𱬁«’çæ¬äªÎ–$I’dà•$IªÕj¬×#õŒz^xW«‘Âb’²Ҝö_gåôÄ`ÆÚû¹A
F`¨
g`f	ç)—V?ÏÐHé亡2’$I’W’$iIšd	áƒó)=Uäô­©Y8=GυUڡv¸
qÔýÿ¿s¸ý¤ԛæ†0R… `U	\;Xb+ʲœ¿úÛÿåo~7I’²g÷Nöïßõ×ìç–¯æºëöE’$IRŒ$IR®w7Ê]³MVÁ
ÞFғ¸»o6⦩7Ÿ­pót‰›OÆ.f¼è×Êlˆ8‚á֤‘ôíïßÿã+yÙ+ÞÊSŽ=ÕzÞqרTÊ<óÎxáónçϿµõ÷’$Iº4…H’$]ä«åEÎFÈ[7¡§²‚¾Tk²Q¢®ŸŠùôû«üÀÛFù‹ÿžàîßßÅԏŽóàOòo¿?ùÇ|ö?MrýëŽRyt’-¡™®₷ÌVôš×d%F“ƒwßÃoýÞ?ðÕßðÓüÁÿ[+oI’$yÁ+I’TfƒrïBÊLZÐ[}©ӭÁ$àÆÓ17MÅÜ<Uæöc!7…½§Sh¦$iJšΒf)yQ0ÏÒþ÷c†Ùê	+¹¼1ô»z½Ék_°õ¼ày·ñe_òÉì½|’$I2ðJ’$m‘ëݶםi²J¾dm »FÛ;¼ç™hÄÜ<]áæɈ;ŽEÜz¨àšã9;Φ¤­ˆÛ IçÏ}ÝÍНßÿÂ!6]Úù%rו٪>òßӞhèÒÁwÞûÞs?Ÿü	/æ?ÿ¨VËH’$ÉÀ+I’´É׻m¯œ6ðve×ì„$…0„(âö'
Þð­Ódi$MÈòœ§̰~“{8yY´ůwÛnځ÷+¾ôS)Åqkªaa¡F7²,ã^þ–VèýžïøR®¾z’$I2ðJ’$u¥ÑlPP°Q>°r¬‘ÑsiN_‹£öÓÆ÷þåYX¯8ŒˆãR+BÆqL).µþþ~¤̖PoÒɭ#¶ª(
ÿoj¡õÌÌ̷öu~ôïÿàC<ðÀ$IJ''NNòƒ?ö;|Ã×~6ý‘ÏC’$I^I’¤U_ï6›M6Òœn°)ŠœíäÅw/°ZPÐVŠKŒŒ¶Cn„!jf^[C=é“ÀÛÙØØpë¹íÖkù¬OÿH&¼÷Þü–÷r÷»î]1ö¦iÆïýῴvz?ù_‚$I’¶Ÿ
&I’ÔLšº½;Ÿ¼lªΦ(€<g;xî=MÊó	O´¢í`uѡQ&Æv²gbûwï#Bž2>:ÎàÀ¥R¹w—ð²g4ãþ¼¥0àú¡ý¨R)óÜgßÂwǗð‡¿ûÃ|Îg~t럭äÏþò¿xÕkÞAG’$Iò‚W’$i£¯wÿgªA-gód„ô½/yUƒ‘Áaâ¸D{R!&Žb¸@­V#+òssÕJ•Nþãl
iiÆJn*S
úݎ±a¾ø?‘Oü„ówÿ
Þø–w¯yÿ›+¯ØËM7^Œ$I’ä¯$IRûÅ]ن¶տ>YcSå9ÛÁù0ã;v22<BµZm^–´P›ç)ƒƒ°¢z^ñì öw‡Ël†,Ëùó¿úo¾ük~‚/úòá;¿÷×øÕßü[þã¿ßȃ"Ë2Öbçø(ßö-_À÷÷—3<<¸ÜË×Zײ/m“$I’¼’$IFƒôš3MŽ6r6UVÐïšð‰ï-X<ϩÕë<ehpˆN^}',TØj[÷kÿ¯äe¯x+O9rôTëyÇ]87¿ðÌ;oà…ϻ<ÿÖÖßwãϿ}û.ã§îO˜>3ˇ:sf–ù·×ò•_þiH’$É^I’¤óäENš¦l”ø“ã‹lº,§ß}Ì
›¬Êbm‚€r\jíîvòÏ€þ	¼wlRà}Íë²’F£É{ïá·~ïøêoøiþàÿ­€»q`ÿ~ú'¿qÙKޗ¿êíœ85‰$I’¼’$Içi6š°a^5Ýä¡ZÆú9Ñðá÷³j‹‹O»Þ¦“,„ÿynÀÖPt¼qpÛH…­®^oòÚ×lÍ8üò¯ý5'NNrÿÇÞ]@ÇqŸ{ÿ͒vW+–Œ’lǎv¬Xv8qs̅pŠ¡rº
§La|o8)sSJãbíØS‘-°láòÎμwιe9’wGÒîêû9Ç»3çß&ùžgŸف©“ëõÙOž¹ÃU
¿ùÝ3ú ð¤3i¹Ŵ¥;¶Äåï®¶FÂ4M¥2)9I塰†ó×=¥í*‰ŒdÛîgz
‡C—,R.^xéu}úóßÖC<.'üŽÄÞ-»iÉmÊSO/ÿǾ_xœXdٖÜòãî¤6%³r+*’#ލéo‚eAy¼^
çgû×z†·¢Iµüu£Þ÷êÝß֯AÓÒX9ÿœtʉ‡ª¼<”ÓÿÆÿÍSºôÊ[´aC»Fâì3Ž‘Çcèß
ÆôêòՁÀõéÝÓ֝®NïxC#KÄô7å¡rÄÏ÷)®¶¤žLVÏ÷&uýšmú¯çÚôToBcÁëõèܳÓ#÷ߠî½V7\s¡Î9ë8íµ×ùý>„³ªáÊkn×ÿü’†S__­–s5”+×
^‡2™ŒÜrO{\}¦­‚‘µUì64hX©TRf֔Ãcx
†5œ—gKmõ*ñ”vVWÚÔ9ËÚõ@[¿ÆRUUDóçÍ֩'ª믺@ßw½þûòê Z†½¦™՝÷ühD»t܁†²îí6€Ààêz†µ‰¬¾»5)w±ƒ÷ÙÝ4¬X"®¿	C2<††óÓý
ŒT&çik˖®[³M×þïK㣬, ŭ{êsŸ>[÷Üñ~ÊaÎÏéÝÜÿÐ/ôēÏéÝì:§YCټe«@àPÆÌÈ-_Þ…YV4ü¶ÕP2 w•H&ô7åárď0T0b)åëv~]°¢S‰qŽúÕUuÆ1ºã–Ëuè!‹†‰¼¿ԪÕµ#Ó'
¹‡7O*•J^0Y¦)7ü|[J¯fTp̬Š]Xzø=†ÞMșڕTæ¨,Ôp–.0´nŠ
G"%7<ÑәË:Ôgf5Þjk*õɏ@—î<E"áNÐë–Ç‹%4Ã0T
i(±xR ð€	̲,™YSùê3m}»-¦ÑÁ¯ãê³m«ÐÕVתiZ³&7L‘½«ŒWºô<–xZny¥/©Ó^nWGÊT!ØoßùúÒõ;ÁWCéíЏ~²T;²£8l[¶@à—+q×qÓf÷¬æ˖l[ÅΉ»_`ÈVþnx¿¡×f*Ɍë!~m,­S_ޢ
ñŒ
ASãdÝxýE;Œµ¿yâYutmÓPæÌir
DMM¥@à¬gÈ˫QS?ëNª ™–JO0ôñÊÇÇúÊé†
J,©Ѱ%iê´W¶è­hZ…`êäz}ö“gîpUÃo~÷Œ†rÖǪ®®Jã÷ûtáÇN—Çc^09Q)¦-}qcTcƒ5
Ž»6ôÏyÔÑNIû¤«Î2ôɏ²U`b)–mé¬Þ÷j»–$UönÙMKnÕPžzzùÿ›œÔP£[¿u©>uɺà#§궛.Ӿ‹ç	^0ٲ•µ²ÊÇ÷·&´.‘UÁ3³*%?<Pšw‹G÷f(å74œ߷jý¦G_9ÍPq,)‘ÒhêÏduƫz©/©BpöÇ9};8ӫËWk(¡P™޳¤UGy€|/˜à̌©|ô˜–îjOHwtVK½ÄÐäû
ýC÷.=µ‡¡•ÍÒKsä¬sÐåçš{»GG_cè&¦XZ²5êbYKç,o×ó}	·úújµ,˜«¡¬X¹V˜8|0N€õ·´Å5hÚr°¢aüô‡¥ïl8_ä•XRc%žµuÞò=²÷Tí_Òx:pÿZ6ĴÛ4,0Á`Y–rõFÌÔ϶¥T4Ҧ@àu$þ/ò¾؟ÔxÚuN³†²yËV
^€|öï޺%¡¢O«!•‘2Y
çâ5îGÞeZ6Òxiœ>iÈ=¼ñxR©TZ£^ÀïKƒ¦žëO«¨dL)žRÁ`RÙSÐæÔêÖy“å3Ww򞻼CoES†a¨<ÒPbñ¤Þ¼€ý»¶låâÞö¸ŠRg¿$[Ѥ†³¤6$ÇiS"z°eŠB^CnéÏduöòmLd4"‘°†b[¶v^˶r޽ûÂ@FE)‘¶G…zð]2­áZþ—ïátUù½rKw*«³–u¨sö4ϙӨW]QMM¥v^+k)u%TԶ
J™¬
¢	
'èñhÿš þYkU™~Ô:Mõ¯ÜҖÈèìW;Ôkf5–Î:ãXÕÕUéoü~Ÿ.üØéòx¹
^Àï`Ö֓½5ۖºúTؿ{PmP!GÿnH@?]4]Sʼr˚XZYީ”ek¬Lj¨ѭߺTŸºä]ð‘SuÛM—ißÅóä:xXûíö”¿Jcïë`BG–%ÅRΑ
åڑYa¿~¼xº¦}rËKýI}öͭ²5vB¡2½gI«Ž>ò'øjT€À°´7­’ÑÕ/Y–0N¢)ɶ5œÃëÃz73‚~ýdÑt5…ürËã]Q}eÝv^P2¼Ѭ­—M•3+u
ãd0¡áìUY¦)Ÿ†Óô釭Ó4ÝÅIÞ{6õé‘-*H ðض­ñJԔiÛ*)½Q)™Æar4©áQÖH9‘÷‹¦¹º“÷ÚÕÝz¶7!€ÀŠÞòhF%©³W²…±ށlÛÎQ
åÚꆶNפ2Ÿܐµ¥Wvª-a
 ð€¢¶"jª$%3RoTc	
§1äÓüŠ2í,çÁkßY8UÕ>¯ÜЗ±ôáŠgmx,ÛÒÎؘ̪dm2YX#[ÏplCD¹ڽ< GNUØkÈ
«¢i}î­.^P”ûwS–´5m•vtìêÓ@41¢õÇ5”++Ët_ËTù=†Üð뮘î}§OŒ;Ã0´3:Óى±v0!Œÿz†ÉŸU•¯CjBºyÏIrË×ÖõhÙ@R•hÖքÐÕ'e-a”dm)–ÒpŽ\.Cî8yrDWïZ'7˜¶­K^ïRÆ@àãËֈÅ-M¦%míFÉàH×3D䦛«õá¦*¹asÂÔe«¶
 ð€¢YӐ±mMýq)–FÁ@\éxµouPn»nn½Ž¨/—~»5¦G¶ ð€¢¼CKgŸänÔF&+ÅSΉ“#òrGÒó'k÷H™Üð¥µ۴)™QÁ è14¡dL©{@.Â@|Ä;sGK¹×Ѓ-STð*_‰¬­KßÜ*[^ÀoØchÂéJɌàâê‹a4†|ZTÔhjúô?{M‘Ï0”¯ç{“zxs¿Æ¼G#5¥̫	ǖÔÑ+ÙÊ’i)mj8'MŠh,ìSԵ»ÖÉ
_Y·]ï$2*!Ͽ}€Qfèµv[cIý³×kâ*àº
ƒúIwJnùTcXL«ôʷõëí)åk¿J¿î߽J¥PUU¥Ößß/ ØÍï
ë_TU˜à'›ÊUéóÈ-wo‰kC2«҃ëgE´kا|½0ÑosŀO³fͳ$ÝèéÖg^Þ(7dléËí=yøyTjðý†„þý›Jd-åã¦ö¤ÎÛ{®">ŭ§§§dþ{ذaƒÀ/@ÑùÈì-¬	Ë-Ïo‹ê®5]*=ؽ2¤o´6+_‰ŒnZա<€À¤[ϔ!÷\¿b³ގ¦Tzðá]tâôåëÖUڒÈ(O ð`Qm¹><»AnId-]ôâÙ*E¸kߙš
(ɬ¥/½¾E._li’íÜòl÷ î^ۥ҃ڀO·,š¡|}gC7“Þn ð ÊïÕM­Írӵ¯mÖz^I:qzµNkªU>²¶ôÕ7¶È ðàäÆg¿ª««..ÙU
øvk³jË|ÊÇ6mצXZ.7/ž¡J¿Wnyº{P÷®ݪ҃IA¿nܫQù°léö՝r¼˜ôëK-MrÓ5+ڴ!–RéÁù³ÔRS®|<¼¡[ý™¬\/><»A6TÈ-qÓÒE/”âªx$}saSÞçã{·Ë ðtç>3ð®®j¸cM—Jj¨Ð)5ÊÇ}oo•K@àÀ܊ .ßsšÜt݊6­H¨ôàªùӕ·úZÖ“K@à%{N•³_Õ-©¬­>¿^¦­ƒ=«ByOñþð¹^ø
Cÿoߙò{¹eYo\ßxs‹J®˜7MùøI[\/æW‡uÍüérÓ×Þh×+=1•,¨먩ÕÊՖxZ¯÷Åå"xð™ݧjߺˆܒµ¥?¿^ñ¬¥҂æ4(OtôËE ðÀkHÿ³ß,…¼¹eÝ`Rÿ½ì•=­ZSC~åê¯݃r¼˜SÔ[šä¦ûÞîÖïÚûT:à‘ôuÊՋۢ²å:xpѮ“´dR¥ÜtñKµ5™QéÀ)MµÊÕ@&«5I¹^’îÝo–">¯ÜâÄ݋^ڨҁŵåjú•«U	^€QÐè[­ÍrÓí}ºkm—JIÕG
1ð€À€sgÕëôæZ¹éªåmz½/®Ҁýò¼›ã^€Qtûâ™j
䖴eëüçÖ+žµ„â7¯*”Çڎ´/À(ªò{õà³å1äç£ù—¾úŽPüfF‚Êն”)€À0ʨèÊ=§ÉM¯ï֏ÞéŠÛä _¹Š™–Ƽ¸rÞtí_‘›>ùòF­¦„âñyržYxà5$gUCUÀ+·f²:��²l¡˜#¯W¹HdmxÐÈy蚛–÷Ät٫›TܘâÍE*ki€À€ӛjuþ.
rÓýowë›¶Å)”ãoʲ4Æ@à7[›5¯:,7}âåZ5Šß0”‹¬mkŒ€À€ףG˜­rŸGn‰›–Î|fͬP\^C¹°l^€ñ°[eP·º¼wÍ@R{~ƒl¡˜xCn|¸J§Ór¬^½Z tµJ:­. ŸnOË-oéÕ]¡L.Sq@<‘P.<ãüï‹>ŸOÁ`P‘HD•••2Õ
`‚—7µGØ+7ÝՑÒ3¦Š,ʅWãË4ME£QuvvjÆ
êïï˜àÅ?Y¸p¡@éûÍܔZùŠzS¹Vtõ洞?a¾v¯
©°{á%)×Î*øÇíß-ËR:ÖÀ¶o߮d2é„^ç[Mž<Y¼˜)ӣKvwõ#îýiS'.]©ž´©†˜™U.B>ƋÇãqÖ3hҤIÚc=ÔÔÔäœ_õõ��K
Ç7ÖêڽgÈMëzߟޔi«€!fZÊEÄçU¡¨¯¯×ìٳÿyY×0ñ/®Û{†Nhª“›þØޫ‹ž]£Âëÿ¦­sQðªTTT¨±±Qgmƒmۚ0¼0$=öž=´kUXnºM‡n|m“
úҦ¬Chm™_…ƙäuV7d2g?¯&/ªü^ýì°yŠø½rÓu¯nÔÃëºTXЕH+Wõe~¢ºº:9¢Ѩ&/æU‡õؒ=d†Üô±gÖèכ{T8°9–R®¦„*D•••r$“IMH^œÜ\§Δ›2–¥÷þé
ý¹³_…›¢)åjzy@…(Èaš¦&,/®niÖ{g6ÈMIÓ҉KWêÅmƒX;P®š˃*DG†¤‡—ì®Öú
¹)šÉê¨'VèùîA/¼ÙS®v©ª€€À€°ף_>_ÓÂerSÚԑO¼¦¿võküàµޘra†æT†Tà@àÀôp@¿8b¾B>¯듼Çþ~¥~ÃׯEg"£¶hR¹˜)s⿊¼X\ÑcKv—Ç0䦸™ÕÉx]÷®îÐØÂS]}ÊՂšˆŠ¼8mF½¾±Ï.r›iٺèÙ5º乵J[¶ÆžlïU®ÕG´#€O	ŸŸרõƒIÝõÖ¹íîUí΃×ôè’Ý5¯:¬ÑKÒãmە«'U©P`š¦–.]ªgžyF›7oV"‘ÐD
…ÔØبƒ:HGq„|>Ÿv`‚·í7G'6×k4,Û>¨…¿xEW¼¼A=iS£OnéUg<­\ø=ÐP©B@oo¯®ºê*=ôÐCZ»v턋»皝kwîs/œ{²C¼ðÒÝC‡ÿn…žÛÚ/·e,KßXùŽî\µEïŸ٠í:E‡L®’;`KúÚÊw”«}*Tîóhb‚mK¦i*›µþþ؜/¶$ÛùVǐdÈãq¾xäõþã‹3Yfr8`r÷k_ûš6mÚ$8äÜçžèË_þòŽ'y/B^?b¾þÍ2­ê‹k4Ä2Y=¸¶S­ëÒU-ͺqáL‚«0þÜѧ\ØT§‰¦™U:Q&“U&cj$þô$)«ç÷ûä÷{øåóy…\p>g-ÃÐq—ÈëܛcŽ9F;°¢ue>ýî¨j,/Óh²m[_Z¾I§ÿñM¥,[ȝiK_]ñŽòqrsPú,ËR<žToï úú¢ŠÇSN¼“[œ¿Ëù;¿Ûy
絜×ÄÎà|Ï>û¬=y˜Q^¦'nQ}ЯÑö³MÝ:iéëDÞ<¼Ø= ͱ”rÕRÑUa¡´§1âêéq¢ZJ٬¥Ñ漆óZÎk:¯í¼Œçhkk¸7 ð O»W…œI^Uø}m¿ßң>µJÈ͊ޘòáìCFi‡;gb2Îhœ8¯�±yà|¼XTѯœ¯°ϫÑöýõ[uû[íÂÎKä1mWî÷êü9S„Òb۶¢фKáÎýç¼7ç=ºœ”‚ææf¹„{xpÈä*çÁk
ú<mW¾¼^m±”°s¦…ÊÕs§ª:àJG:mª·7ªd2­Bå¼7ç=:ïÕeà| rÈ!r÷ ð఩Õúùa£yãfV_Þ釅á€I•2#§éÝ+4¥Ù|ˆŃ«œ÷è¼Wç=»œ”€#Ž8B³fÍҿ‚sOœ{x“£§×藇ÏWh”×5|oýV¸¶“šËËtĴí¬/,hÖä _ÅNëësg*s¦5÷îftç%àšk®ù·ÈKÜuî	@à@^ŽœVãìäu&?5ZҦþÒÙ'윛��ף‘ZXW¡ËöjJãAYNs¾åÀù@©(//×7¿ùM]pÁÚm·Ý
…4Ñ8×ì\»sœ{áܓñøTôð_SªµôèÿäJõ¤2
kú:j§&R1¿:¬ïº‡>𧷔fÒmNeH?;|žü†¡â†L&ë|Œ½$HeY¶úûcª¬,—ßï8œhš¦Ž:ê({ì±òx<2cÂÝ˲”Íf{!×^ìßP¡¿··Žzb…Úã)¹-ƔVNNm®×ó',ÔÅϭՋÝúw^¡óçLÑ72ŸP
ñ.*Û.­˜á\See„ˆ—;ÎJŠ6/.
̫ë…[µ 6"·M—	¹i­‹è…ꕓé¦ýæèóó›tù^ÍzàݵåèþƒæwK€iþm2S%Ƕå\ÇçÀ/òÓèéã÷֙~K¿nÛ.7†¡#¦Uù‡^çJòY%ñ±ûá'5cª®ŽÈãñhxà|˜à@N*|^=~Ä|]¿p¦<†¡|¹Ë$M
`hqY–­Rç\£s­Ãç@à@^I×í=CO½@͑ r5«"¤›ö-C‹Fê£éε:×<p>Ü ð఩ÕZqÊb}z^£üvƢú
ýñ˜Múà?¥Ӧ’ɴ&皝kǻá|¸@à@•߫[ö­5§ï«+4;a{×Õ
{ÕFt÷sõü	­šùÿìÝ1H\yðߌO㨘⎀©R¤\ˆx•„Òғ֔I}BªôUzÄÒVƒé®¢\¼ƒ¹dwTgŽßËÝâ͎·¾yïóÝuf^~ßý5ùò÷½;\yÏÑZŸTÌÙ3ì‡ý¸]EÔYÖþå‡ûý×?/.ã¯_~Š¿µÏãËÙELcñÇÉñøá3CÜoøùçÓþóê*gÏffZý°
^náTïŸÿt7€ÿí>£ùkèu—LNNDQŒöc$öÀ-h·ςÌB&²Pð8y~~ôeýL°ö@ÁàD¢Ld!¼ÿ—G9y…Ì$³)+ûa?¼Œꃳd#Ù(x8;»d#Ù(xFðáY——Ýàj™Mfd?°
^€²qoU•rvP¿éâÂéC™]Ft:ØÚڊííí8<<Œ“““¨“V«sss±¸¸ËËËQE€¼%×ëe9Õ	ˌ2+ûý¨¦ãããX]]õõõØÛ۫]¹›ræœ=3È,2PðPY߾}‹÷ïßǫW¯âùóçùÊÎÿ–?sý‘âIJ2sݳòÿnmm-ö÷÷£Ì"3±×Tó
ðáÇx÷î]´ÛíøwŸ>}ê¿666bee%\$x@Ãg5>n?°U“·ePî^]òf6Ož<	p‚€J•»y¢%ËÍÿ&–ïÉ÷º>
<Y™YV”ÛÎÎN ¼Ôä¶yrµ7čó=ùÞüŒë—J)Y™YV²AÁ@
lnnöO§)ߛŸqýR£Ûí²2³¬¼TÞîîn\×Ǐ]¿ä”R½@Vf–UÍÏϲAÁ@
Åu}þüÙõKŽ^ +3˪Ζ––٠àpêPVfA²byy9î߿ü§Ì$³/•qï޽øŒë—
¼yóæW%¯r73/•òèѣøŒë—Íf#•™eUwÓÓÓñöíÛxùòe<xð Z­VÔMΜ³g™Ef·­¸AϞ=‹h·Û1Œ©©©üŒë—
÷ZÃ~`?*ª×ëE§ӉǏÇӧO£ÙlF£Ѩ]Ýn7.//ûY€‚€ʙ•••X[[ëÿ%hF£‘ïÍϸ~é9uØíÊ!9¡i?ìYlæp‹*jaa!^¿~§S\Í÷ä{]¿ôÈSjÈÊ̲¨Õ	^”¼>ŒÍÍÍØÝݍ£££_(–÷œÍÛäÉU×gŒ5Y™YV
^jw»†/^äËõ‡„RJVf–nÑ ”’•™eà/EQ²2³¬Fð/FÄøxƒ‘5ö£t쀂@95ÈÈì2PðŒ ‰‰ñ@Ff—€‚`Å؀D‘ÙdFöû à(¥;wÆÙÈ@6
^€499ÈF²PðŒ f³é>¢WÈL2›R³ö@ÁÀÔԝ@&²	@YQaÐëõâ·4¸<l-O$žŸ_DÐÏ"3¹yöÃ~ à@;Üw(€¯͉DžәöÃ~\€‚…n)®©ôuJ3uzzu–dƒÙû€‚¥nIÿLŠÞúšžžŒóóNt»ÝÚ>P,3À~؏zét:±µµÛÛÛqxx'''Q'­V+æææbqq1–——£(Š€ÛÖPîþ®?_¾¨Ÿ,÷gfZQW9{f€ý°õq||«««±¾¾{{{µ+wSΜ³g™Ef
^\œ*¢)­‰‰¢ÿkèu“3çìƒ`?ªÇÉݵµµØßßúúYd&™
(xÀicFø¤bî3š³æ̃`?ª‡¼-ÃÕ宒7³/(Ja³³SÑl6¢êrƜuìG5±³³È/·F¹›ßûë—rš›| Ôììt¥ï9š³åŒ9ë ؏jâàà 
åTD% Üü=ùP”ÓÓÓþÏ&''ó)Ø‹Šß{ýüê¥(Æú׷o?EÕzþ\çœ-gdxö'xPîgàÉܯ_¿æS®)yó߿|ù’ïþ»œäeããYâÍTªàÏYr¦œmìGµ1??7D6 à@¹;|ûýû÷h·Ûq~щƒ¿ÿ‡ÿø1ڧgqvv–EïÐ׸%¯ïîÝéJÜs5gÈY”wöÃ~°´´$٠à€±wÌmkiǟT±ƒm¸ÌÌÌÌmö;u¨Ãý:Ë|™™Ñe9lÜy.ß3Ѭ×+o¼ñÿ7£q,Õ[£ѩ¿zÏÿ6vÅn6›U©T҃ç#:~p¯Žث©ق¦gfåà×Û-頗—Ûñ»»;ýÈgç„˗/kÆ
ÁZø˜øØ$ /€P×6o·\.'·e°¿¾£Á§e¶oçV½ðú;ڰr@®ðmnnvOޠoýu¹û³Uû}üÄZÀ&&Ü$§ÿ'­­iuv¶©ràü@#¸qã†n޼©L&#Èᮏ‰ªðp]ŒßV,ê±ûї
^<£йã‡ôÇ^ÑîMë+Š"¥Óépa³=qŒu($v–N§乚¼ÞCÇÞo³Bàüàü@GG‡nݺ¥?ÿùÏzá…t÷î]ß-£Fâ„Ýs÷ܹsºzõªÿÏÁw·¤€€s€`׼nhhÈ_¸ôíýGºxú˜â\?wJüÇËڵy_£Wó†û‹Ã혧ó£þC_b==šœœ©ÛjMWevt´VpüÀùÑȸæ
›tèßp焏Œñÿ3|,ªð¡.І!v«qóù¼ž
hÇÖÍjI§eq.>®—ßx[›׭rȫþþ~a
ƒ°j— ·îÔ…µߋ«”MMÍ*—˫¸z´½½…^ªãülz	 ààúXɿ‰_ï~º¾UtrjZm‹µ´¯·‚훵o÷N}ýmFËû{«··×aK\h;÷ú`[\ÀÂ^eK–´«P(†AÁÖù àÂ]e¨$ص©©)e³Yß6©çÙ)>²_•êí^¢¾¾>e'Æecccêêêr †Ao_‹™d-˜ ¯î‚<Ÿ³¾-v6¯b±¤ZŠ¢EjiI¹Jԕêª-p~x€`—×Ï
ֹ%Ãèè¨ì³Ì}
^8­ÿԦu«õևŸ¨5——4é^¼žL¦¢P7ù*QÆÈäeý¶ÒpÖÞÞêÅU›®ØT>_T>_P\¥žJE®ȜjLp~x€p7~@Ï]Orâ޹®rû,sWƒΨZGöîÒ__yC[V/w`¬(ŠÔÚÚ¸aP˜|‹Ä˅XÍTmz1üB¡àª͟–RÉKÙ[xtØä£ãG‡Š¢ŸÿP‘üÇ瀀+Ø¡0*xf8ÜuțyðXNÓëò©cúÝß^ÐîÍë5<<ìIהJ¥bƒÝ0ü¥ECíÚ3Çz!†¼Á1ú±ºR@½ž^ ܭ|„¸è·>w•m.—ÓÐȘ¶o٬–tZIøÍųúã?_֎
k k``Àռñ¼Tï&:ÎUrÜÂã_û€€w“ŸI¾aC`TðzB5O¬655­¶ÎÅZ>Ч¤8ð;âˆÞ|÷­[¹Ì!¯+y}{sXE>{¿TðVކ¯©<è%ä¼Pçè?éžkžTȏ¾EÙ€……k`|õ®—éééï[4LLëÌÑJZ[k«¶m٤û÷§Ë!¯ûU†¡cø·5TïøøøOÕÔIpˆîÅÇ:•Jù1ѓzxÉWÖÆôštµš‡»
R¹€ëiüó/î<Ôà…Ӫ•åý×ÔôŒlvv¶¢p×ëÇ%í汩=x򶵵©½½}Î
꤂^ªx/ ¦ᮿ8ýT©;•Ëëñx^År“š~¨vú·ʚ'@¹Ê×4ùQ*{ŠÛg¹,ûÅküàõÁ+¹QÞ¬÷ã/ÿÖ/wöÃêp{¸MÁûžc?Áß¼‹ùìœKéTº&ánhÇæ
zï“/tÿޣ0¢lø±«\*)הvšªo>SåʱOKå²Ç:EQ“Vôõ¨C򏚚˜˜В%Kô†¡,mâ/ÖVñïã«vGFF433#»7:­E©6ڲNۢH€Ú;°kw̃\>¯×ÞýP…\Nk—÷»
„+†ÕÓÓã6ÊݪC^Ba@À¨I¸[,ÝóѕKšÉõtF:µg«h„=éTJ玒ýí•7´´«S汱··WQ…álŶ‹”<àKt³ÂÏU¹;<<ìpWC9©u±Ní\¯F%Sǵ´éùHÖc£ïnñX?ž&1NPÁ¨ ܝó¹g%Ïårš˜)¨·¿_kú—x›;·lTæÞC=ÓâÆJ÷å
[4„U»á:*x5%ޕIþÒZ(–4³¨Åᮀ´aÍJå©P(zâ5™±cjòx€0·‚íÙlV–™Õþ+ô3plÿn}óàñOw¼T1Ö&€
xï½÷,(·•·fþ.
bY:râŒB@:¸g—†Ÿ?“4ã±SÍÍÍA+†Š[501Û|Tðâ_ìÝoãjàãÜ8vÚé–™þ¿ö¬`…Ë8Ô)ÆnÜds„¹Ðܹٶ±ï<ô)ý¶dùՙÏJá;?nÛ6R39ˆÏ?‰÷>ÿ™OÅßÿû<¯1›Í6^[€	^&“I¤¯}íkñq¶^øðr7åônÓ4ñ¬›Ä݀qYEʇ’nšÞ]ÿøÁ&tLð(‰ó5“¯Ÿ;~w¾ø¹Ϭ_;Mì
^¶·íôn¾®»½½ôYÛ3ÀF_øì§ׯ®±®É¶hà¾Êàõµ_O¸ÛÁþÞ{ËÜÇÛzÀ/€«½÷õÍoP€¢(¶¸Æ(xx³Bw‹¯oq
®·[_{¼lÁd<Æÿ”PðpŸ7;˜ÞS¼Û^g¼
Ýíö»Wø
^îí¦PÉГë©âPð°ÝCÕÜTÀ6]CMí
^í¡jùq.`;€ël.]Þ6ãè½`+¼nL5@ÁpÜTÚsv°'¯B°EÀ=Pön¾µ=C/°ðöFEQ¬}ýó´ù{&x¶¥ð5I®­&x‡pó¹yÂ7€-lœÐ5¹˜à`5@Á€‚`ÐSEù5G°½M×R×W@Áð¨ܘæÚX¿n*r/
^<ü\s¼(x¼ø/¢àZ à`[〜”jÛyÜÜÜD7ïb¾Z‹Åbµ–‘F£bµFQ–ã¯Öd2‰ª*£(ŠØPð@Ӵq}ÝÄlµ6Ȣwµn£ën#fmD\Ešîձ·Zu]`‹ÁlÖijÿ¾Œ—/^G–»ÛÊ›ÇÈcå1(x 'p_¾8W/Ï"·a¸/y¬<f;ÏÑK`‹þüç?Çð§q¯míã|½ûëk+={ö,òãýøÇ19m{zzþ O&oš›hÿû2ŽŸFnßÐGí*ãUõäcûóC¾¿½¯ûþûÞÞ?þñ(Š"r¿÷”¯¯”¯)múú{Ø~+Àááá0î÷/œŸ_ÅÅù壕é¯^ÅAwOŸîGÀÙÙY¼…/ŸúÞâí&xßûñúŠÕê#?î»ׯ/âêò:[ʋÅ"ŽŽN¾ñ­ÈIÛO~þóEq×o.¼<ÿãï£ÿÅ0¹›åî®ä¹3CO€	^ŠÞS´»–Êñ¸w{òz¿÷7Eô€	^èºÛ8==‹¾È,™éC€‚Î^Ÿõjà̒™6/ÌfM4ÍMôMfÊl½öà`ý’{ÞöUf«§uЏ÷xû} à ˆÞh›6æó.ú*³µmU]ž‰Þß~ß¶h€5×W3@ÁÀÐäƒÌf×Mô]f̬	¼°rÓÎe/Ã,x[Y@ÁÀÍ睬 à`ˆºy'+(x¢Åb!+(x¢Åb)ë£/€‚F£BVPð0̂w$+(x¢q9–¼QYŽe/C4©*Y@ÁÀMªRVPð0DEQÄt¯Ž¾ˌ™¼°fo*#(x¢ª®zý³̖?(xààð‰l à`ˆêiU=‰¾ÉL™ímãè)Šè›Ãã£xþŸ±\.¢Šb”™zõ»ò~ïoŠè!¼0¿G'‡Ñ™%3½PðÀt¯Žƒ§±k™!³€‚>âCÍöŸìǮä¹3(x`‡ÇOw2ɛçÌsÿŸ@Á€IÞãOGQŒåjy®<ç=/öäýÔg?U]ÅCÉcç9ò\÷¼0¿ŸøÔIœ|ò8ʲŒû’ÇÊcæ±óïŒãž@=­sE۴q}5‹ÙuËøhŠœԍ½ýéÚTpÿM¦užŸ¼¯Pð@³¹ŽN–qÓÎW«ù¼‹nµ‹Åj-#FÅjb\Ž£\­IU­VEQ à`‡²¨­êI®ìÁ€‚@Á€‚/€‚/
^/
^¼(x¼(xPð(xPð à@Á à@Á€‚@Á€‚/
^/;3ŽËå2nÚùjµ1ŸwѭÖb±X­e¤ѨX­QŒËq”«5©ªÕ*£(мì@۴q}5‹Ùu“5oÜ%‹Þ,|»®‹f+—QÄt¯Ž½ýiTu¼Ð̚¸8»Œù|Û[Æìz–+ʲŒƒÃ'QOë軛Yɴö÷æßë­ü»åÏß;؃ºî6^>¯^œf¹÷%•ÇÌcç9î(x ·axþŸ¹-ÃnùçÈsÝPð@nÇpúò4–ËE<´<Gž+Ï	(xØ^œžÇÅùE<¶<gžPðn	ÀäîÕåUìJžÛ$/(x·`Ïݜ¢ݵ̐YÞ(x ënãõ«³è‹̒™>(xàìô,v}‘Y2(x`ƒfÖD۴Ñ7™)³€‚6<XM6Pð009%;Ÿϣ¯2[f/¼ÇõÕLFPð04Ëå2f×Mô]f̬	¼°rÓγæþ[fÖH à€•›¶•uˆPðÀ|ÞÉ:D(x ›w²
^X,²
^X,–²€‚/f4*d&¼(xG²
^—cY‡/”åXÖ!@Á“ª’uˆPð$*#¢ˆþ+"³®$Pð@Q1ݫ£ï2cf/¬Ù۟Ê8D(x ª«(Ë2ú*³eÆ
^88|"/¹z@Áõ´îå”lfÊl»@ñߟD®PðÀáñaÅ(ú"³d¦Ý 8ûuŒ^ÿ<råÇ= à€ñø8:9Œ¾È,™iÇhþÿcï.€ÛH¶.ŸY¦ ã,ƒ7?33333333333>fffffr²L’fžzJRqÅNLÙý>Õ]õÎÜéqE…§ºº›ýQfúq½À>x`iy1‡Ê^«Cý[ö€•»ƒgÿtÊèTfê¸^ëï à`jvààì•ún«í=jÍó~5ƒçþb螮^«÷jOíÝG¼pdåðž¬ä­ï¬ïÞy”ýQ_xï ¬ä]Y]ٕƒ×Jiê»vqå.ÍËÿ±¯3éV?6íûýr&ïÿëé†+9]½Vï՞ÚÀΘËy¼Ãùa®;u]n»õ¶섅ŅYÙߪÍ/-fÏà÷ò»±Êkï–rÃóf㻧»âKs&ݑÎä÷]öá­án½–ÅK€¼ìs5x]½èXŽ_Ép8Ìv©sÕ9ëܻî0º.Í3"3Óñ'ã볡ÅKӾ׏e¦Ž…»^.4‹K‹¹èÒã} »´¼”¤dëJÿl£ÎUçÜEt“4Oþ–”›_ž™~Ü<é[ú{ÕF+yۣ^«ïæ;°¥B­£ǺÜ~ÛhZ·e4g<­¶m§եjš2­&sù§5¿°0­aJ)`´·§yʷ¥yÝ=rºæuwO¦Áoû‘ÿ””aΤ»ä³€€€;ˆRJçû`Ÿ»éå<ñëSN>>i^õ)7½,“úä	3¼¶[°EpÛÓ<çç3xàûõáîٔõÇõ½õ™Üú†ì2¼@yÅ?§yìepŸ«Ӽà·RÚ[³Yµ·>3¸ïZšÇ~aÊËÿ1/@IJ“]€€è®ùִ¯L¾àUißççÒ5‹٬Ú[Ÿ©ÏÖ9ê\gӼò_ûÀ!kÀvY¸$íüfrâ;ÎzÈZÕûØL>ú?ûCÖ6¯KyÓÃÒ[û¦$%l&Ndò)H{õ×g#õ^�[rýóRF§jõc¶O€ª™Oû‘ÿšöò/Ééêµz¯ölUó†û½Óøþ@Àì„2Hû‘ÿ’nùDfúq½VïmÙ-¯MyËc33?&¹õu@Àì„ᑴü™éÇõڹh^õï)i3ӏ›Wþ{ð;¤»âËÒz¿Zýø\”õǥ™ÖéšõÇö÷ð;¤=ñí}“Ûߒ楝4/û›äöõ àv@÷^?ÖזMnÎày¿š2¾.)£kkO߀€Øj¸ûüßH¹ù•9›ró+j¼^€Û×3xöϤ\ÿœlVí<û§û-ö€€ ¬?>ƒgþh¿*w«êjßÁ3~ô^`.ìS]ØN%ì€[_—æ•ÿžfý±9u¿ÞÁ'íêǥ½ú“¥+€¼6ë’럛æEÁӾ¯w·K³þ¸žþýӹ¿GÒ€mXÁмò_SÞô°”ѩ씒6å-N3­n¸’îâOK»öÍ@À€-/î|Û7 àèWҮ}SrýóҼá~)oylJÚl§.Mº㟐öÒÏM¿_’¼€nK«z(Éá÷O;­\õui^õïý޹ۡ]ýø´kߘ,^vò5€¥+Ҿ÷Ïd2­nîHÎU7<:ãg§sýôù†»^ ;Cm€nõã2ù?N·¼–­ꖯÉ䃧Ϯ~l؋€`þx&ø»é@6«öÖg2¿ö2à,gò¾¿ЯÊ=›ny­ïÍ`)ìpÀt}°‰÷ý~¹ßWw#ÝܑÚÓ÷°Ÿ^€ùմïö½ÙHûîßÛoéÀ>xÀJ^ê¡iíêÇçtíêǥ›û8àh׾1]šÌôãöêoÌö`.»'¹m4Ê;+%)õSúJSfã¦dPšzŸÒÕjÛLÚ.ý§~w³JúïªKzssƒ,‡Ù-]¶ŠöÅËÓÿ„”·<*Uwü㓥+ð³p·Ë;뺤KÿŸ3jRÒšʴƒ4M	ç¦íºL&mڶÍxZ]×f+ÆãqÚ\ß`j4åOF^ñò—ç+¿ú«RUÿöÏÿš3ù¦oýæmïùÿÿý¿\sâD>äC?$Ãá0{£ÛD¼@{é禩o?þ¼pA¼ i2i'ي6]ÚÉ$ãL’ñ(¥”Ì
}Õù8{¨;®ÿ~ãIڮÍù(õ#ÜÍ#öðüÕ_üeN®ŸLõ.ï¿lÌnwÏßþÕߤZ]]Í÷þà÷çS>õSÀ>uøýÒ
WÞ>à‚x¥…ù~›†ÓWìvõÓõ•¶íÿ/©=£񸯦4ý¶ÃÁ\J	3]ÒºãÉ8“¶Íæ”JIšÙIÿ.ý8¥d0hRrçv÷»Þ-ùg‘ýd}}=¿ñ+¿–S'OæK¿üËöp‡nÃ7PÒ]üio'¼•½»oêlûþ?‘&ÅaXNq˜1döÎõ2÷ᾡÅ݊;Ãfذ¹|ß÷¾¸Lqw×
JÛÈùÎÿ¢çºrÒH-4iïßöô$i’çIàºþ¹ÏýD(!„BHÀ+„°ZÌHö…e+V²­Þx[²ƒÃ	VôFYrwûU’]N8΀!¹°Ödֆ‰󥍴·âȑ£˜1m:Â۽÷ߏŠ+ 	!„l¶Ö¹†B!„¼B³év	hÃÊð’­Ülñ#WïO~Ï	3ƒ^‹•¿Ÿ»‚]§ƒÕѼ_L&3¬t-fVêB¤ߊ/¾ä‡W|l|Œ=ûö†ÐW¯^ż9sàéý?Dɒ%qç!ï»VmڠP¡BB!„"—¼BV²ú×
sÀ.—·´aaÐkµ”ƒÃLÎC²Ã°Ëœ¶±Èü<ˆ_wþŠp÷ۯ¿ޱF
çϟǾ½{³¬	Dþüùñ@:Èj·nݦà©ɫ¯BdÜɓ'±uËüñûï¸rù2®]»ÆP¸pa-VŒëˆú
 &&¹“ðõ¾û iS!„B!¯Bör0àe?^ïª^n,ÆÛn²uCŽ8ٖ"Ùéôì²ò™sÃpWd†ñòa³¦ ìúó\s†»“'NDV‰­Ì`"|]ºt‰U™Z¸»¾œ;w–»þú‹.ÄSO?­½N›¡@ðI!„B!$àB°¬9*Š-Ġ×Pͪ™r[a«
"«uYµ«ú	v£¬pNraå½Þö8º޹ŸiÞ4$ӫ 5!:„Aýûã֭¤Š_~þI«|߉aññ¸ûî»!D¸kӲ%n޼	]Ë֭Á*„B!Dx3AˆCZ8حVä±ÛX¹êS©`µëÍ[‰àQÐ`7!1	IŽd†»©Bîh›MQYî
!Ûq<ØO¸« xñZ€[Vk¼]»v†ÙÆAˆp—¾ÎõÁ‰ï0!„B!¼Bƒި(¸Ý*’nÊfzµÛØހ•®V³áܹAï5ÌnÕí³Ç.û[Ì&„žX¼p‘ÿV	Ù`ñ‚GAp™ìÑ[ºL4jÜþìúë/9r:E1¡a£Fð箢E!ÂÓò/¿Ä?ÿü
OŊG»P½F
Øívèvî؁Ï?ýT[ûÃÐ]¹r¼ÖmÛ"M„B!„B^!„ɤ€­N·›¡.7òôZS6!§ÊW·ªÂÁÂV«>«•£,V°Ïn䓀7RO¥J•Àáςyó/û7kÑEhÁî?ø¿ÿý_x*_¾Øv!o޼ðVçÁQ«vm0û÷ïƒîÇ~;ï¿oø „B!„BZ4!,&òØl°GÙ
W#©NÜJJbû¶o`åoö…ºNWÊcI„ÃGŸ]
¢¬lCaÏUá®/^{¹®þê+p“¯o¿ù{÷îåNý¡ØHŒ÷mlQ{vnܰ«V®ĜY³°tñbý1Fü¼œ<y.—žžxꩀA­ÍfCS¯0ßétàØѣÂ0Ÿ_­ZÅçÅ8·|®<e>X mX»ÇCÇú8€¾ÿŸ.Y‚µkÖpãÄP­mî3øsÔû%¯Y½œ»ϖ.ÅÿópӃsuêÔ)ðw—,Z΃~~h“œœœ%­x˴ÊîE€k±{×.dDRR¶lÞ>çùs炯—uk×bÛ֭iz¬W®\>ØÏßӍ7ßç{K!„BH¯"{°6lpºÜp8ٺÁí°²ÒWpÀ&‹Å“Y!è㠪*\n\.7ÿüý…Mtµa‘8ùÔ)ˆ8mf͘ëׯÁ7eʔÁM›âzu‘YgϞEß^½[ďí7úâ³ÏðŸÿû?$''Áö¦}åµ׸QSDÎË%-Dö[¹2‚©V­ڶï`8{¢`¡BA{ýr>7m܇#¾äɓo½óŽßv	nj	ûÏԂÎãǏã“)S´ðó <=ýÌ3«C¿¶™¾ÏàϑAçˆaðë¯?áƒvŸϠE«VÚæ	ì2Ìýzýz>F¿ÿ&5yå¼óÞ{°X,éþ·-<èúºÿ˜˜Rè?hvŒA0ׯ_×çÓßæÚÚæÃO>‰·ß}×ç:S[mNø!†/K/‡î7ߟwB!„ð
!A¯ÛífÅ.ßTi˜*Üü4@á&…7¼®üÂÿÀÿyÕãžT^à5`u.ÿ㑪Û
^Æd2#ŠA³Ù‘=6m؈9³fªßBN°‘•Zpó¿LÕÖæâ‡ÓB—÷µðåMd7:h!4-X°
Š»îºÞ<ˆQ#FàêÕ+äôéS˜6e2öí݋6íÚ1‹¨y)\¸0¼ýõǨQ£‚yþ…Vüþ;Ə‹7þ	RùyS«М‹“'Nhr{°õG0.\@¯¸8¿eè×6ô¯§Ǐ÷îÒ/?ÿ†Ó¦N«¬½]½zãnj^=»ƒüYn­ºz%¸f]ãâ´Pún¤դ	´ªàÿð!Ë8üP¥H‘"çsÌȑ¸|ùR÷Ì
-¬^‡۷£W߾(_¾<r!„B!¯Âd2›±é™9]N°ª×•ÿ¹U¸á\)†Èì	ÌÞÀìµ+²Ϭ™3±ü‹eiú¹¶íÚENU¯’Ù½1£Fá¯?ÿ€/‹<ÝßÛçŸ.E•*Upï}÷!½xÚõ°Cµ
Òs†JсC† T©R>+}ôíë30̟¿ĺÝ.xúéǍæ-[F̼è›éy[¾lò(€^|ü»4³xÚÿ0m®9giÅùä:2$`ÊSôçΞ<Ü
Ùچþõ¶ls°mëÃ×øW+W²¢5Õ<1¿tébª
زe˂ï‘cǎ>åFzñÆaò´ii
¢Ùîánð@þ<òŽ?žAtç3øóæï0Üæ69ˆB!„¼BÛDÛlÈk†ÍÃÕ;kñϱ˜̰Y¬ˆ¶ۑÇnC”ŒÍá®øòó/ÒînÙç_fyد׭ÇÜ9s°tÑìضUçޛ©ù‘î÷ß~KbÞÿ@ô0/Á2-œš¿h1Þ}ÿ°ÊÝ{Ѧñ‘#FàèÑ#ÐEEÙÐwÀT¨PÁg¥ä´ɓ
áOYçã™:}-]Š%Ÿ}†ƒkÁX9xZ¿n{¦F<+x+V¬O#çΞ…mÛbáüùÚãú3Ã}Y9ÿS&NLp֨Q={÷l¹óÀѻo?ÄÆVöjUð¾ÿî» •ÙWµêÍm èè<¨}Ͻxý7Y٬U¿«Õҵ
ý녭.cíšÕ`ÈÏ6wî‚£Fã£Nµp¿*ÈûõÀPÙ7Á3„»f³-[·ÁâO?Õîk&hρó­wÞMUq˖iñÙÒ% {î½mڵǐaÃѵ{âIxcúþ}û|¶àëÅ;Üåk£{ž˜1{¦͘‰.ݺ£L™²©ªy§im:¼hóÔ	œ3¾÷==ùÔÓàíú¨ÿÐCB!„a\Á+„ÌTöZaÝn©à6U·6@*҇-´aâєrÙ^÷G¨Èìºpþxâi½M^i‚˜R18{欐¬«Ùt´ëñ§G‰%azµ᜹X³juª͟XIڣWԾ÷=àÍü´*áWÉËSÓY=«+W®zõ部¨(è
*¤…toÀép`ٗ_@Ǡ‘ïU¾·2zZ;ƒ­ž½{ûmAÀS½÷îÝc˜Ďlè™ÊÊËûx*VD?í¾‚駶¯]½իWëyñ֮cGVwò񧪴d°ÈÁy«¨=ßêڼñ¹׬U+MUOœ8üºÚ/+V÷Ý?>îÐ/^€nݚ5ø÷Ë/#»}úõƒÝn…pm³åõÂиs׮xäÑG¡ãï±ÿ,?Àعc;tG¹ZժU¡;°?<ÕoÐ ռ²‡í[o¿
¶Çس{7t¼žV4m†W^}žû׿À×ÍÌéŸxo§…Á÷¦šÏýû÷y=ևÐ-.ÎÖóï˺õêaT|¼ბ?~ÿM{¿ÿ…Zµk{¼ޞ€ŽÓy†ÇU«UÓBާ „B!rEÀ+„ÐÃO¹a˜Êë*À#ÿãeÅO¶ÄjU^1_n¡üÏdâà­كÃd6û	† ?/^KõÄÞÊçk<†ûº1êsݼ)ž‰8Tðùék¦÷(æQAdZ³z
tuëÕÅÐÃáÁó/½€ý`û¶í þ<¯MÛ6È(n5|ðP=z¾œ9sqZUZü¨‘¨S÷AäT<uœ#-xðACÉ*PöMë)Øìg»yÓFCH֩K<P§üٸa<ի_ßï†X\?lÖ£GÆC÷ۯ¿r3,žz¶óâ-66í;vØꀛT<x€ƒ¯öüì`¸بIn˜•æùd•m«6m|öÖe˜ݲuk-´a™Yñ^´hQøS³f-4È8‡~mïèëåå†
îúhGÄjá÷
/;{Öð޸q#UÛâzöDú1p®†»¾<÷üóøfýzCØèàAxÛðßÿz·&a/fϿŸ
Á9ûwêؑa¹á>ð
!„Bˆ\ð
!د–Ãíréh~®3Lä74nß}iM&ÌfÃݨöÕ7Xã—HÁMåö8ƒoö|kƒ\ƪHCŲY‰¬Jåí[¶‘î=•aÄë¼ýÝ7ßÃqڱu[†Þo¿ùÓ&Oƒœ@XµyW±¢ ÅÁVöæùó燷ÄÄD¤Ų/¿Äwß~O­۶e5a
ßí۶Á+/©Q³&<1 ݻg«QÃh^‚{æÙgÁjƙŸ|V¤“””¨µOøVë%û#Z6lÔÈçéö0==ûÜs`¥¨?HGŽk¨pϓ'y\šánè×ö¿^–l5âݣ™g*x*]º´¶;¡ãåO—,Áó/¾¨‡ç™öØã#*U«ÞcG]#~ˆÀ`Ün÷`ݺÚïm…nÛ֭hס„B!D®x…*X¡ÅÍÈ\ÚÑ†œ[M	’]«ì,f3úú%<6‘ÓÖÍćÚíjn—S…ƒ״ËŁ×LAø:wît•*Uônðv~ÿàÁCúÆ?ÚÜkâ¸	Úîö¿ ˜Ư67s‹Š²f"àÍÎþ*2ŠA ©+—/ƒ½C9pžk•<­ß{³'öDå¦a\¿~][³x:¡U^¯X¾°*Õð{W®\AXÌKpeʔû±òÏdeê–M›¸AZÀÍÑXٻ`Þ\°ýÈk¯¿îÕ÷š!t¤J±±†•§éQûž{@whm³åõ[¹2`õ¶aA·W˜z
`ÝÚ5ð´rÅr¬Z¹l·V%ժWg4P¶R¬xqï–5ÞkÄÒûzáÜ0à5ôeæYü N!„BHÀ+D®ÀÁárÁÁt*ÂOµt89œ`Øk5›aµX û’*uµáä1l֍A}²ãvûV÷ZÌõÁãÀl¤r¤1²ä‡*Òîà1dNŸ>ƒ@X׻'4¨ýñ(Èùþþûo¬ùê+üñûï8yò$Ždd†»¾û Hú¨¾þéÅv	¡Ÿ—Ða¯éW_{
¬:çkyVeúÛΝ8 ]öîÕKŸú){ržÎgÑbŐÅnÞɵ͖׫¶	VÁ\S«~áŗRUµs-٣šƒ¸«ŒzøaüëñǍÕÖAD	†ƒ®¾‚nöf‚?ãó¾ø:B!„9:àB°â“*«>ÙÊÐÐÉáԃÞܼqƒx®ÃÔh񑌤dܮÄ6§®êU=J–,	½î‘ÃGpÙOOöýä÷uIÉÉè߻/âzõ@á…Ȫ+1{æl8NÂþ¿=ûôâý¥cN"?^»f
Acµ^ˆ͚1•«T	Xex“}J³-„„ˆ™—`Ø–í8Þ|ë-†šÚë{…d~Ãê]C`¶`Œ@óÀêÐÐéچô>C‰ýjËW¨€ExWÖQ|W,[¶:àff¡ç{ò	¶)_¾|ðÆJw!„B!¯†—ܜ'Êb…9½É'¸n*ÔÈ[7§É0äeHŸí¼uµJY¼zûø1ã0Äk“5žÞËÛù}O[·lE«f-ѭGw<üè#>«/Ǎƒ͛6­dk٦^{ãuŠ܃§þ/œ?F
¼ǔ*…
€Uƒm¯Z¹Á?
ž¡é¸ѣ1zÜ8p3/JK˜Ԩqäacº6›ªžýó"¬8oѪx*ÿ„qcáiß޽†€7¿��9}ì5z![ېÞg¨q³3öµݹc6mܨ¹áúõk~*‹¯`ôȑˆ×Þ7UªTAhù~½\½r%CЄB!„Èq¯‚}Z“Cì* Uѯ«üŸ²<”d¯à[Ú`Ðk³XslE/gÍÒ`W1ì!ç¹nj–ǎ*Jñù$;°˜ÌÈ.š4ÆW+V!.m߶í[·C“WšhAZΞ9‹Õ_­ÆñcÇüöòÔ ^|ù%´ïØQ�þü#‡
Çŋ—‚l¤V}öGÅJ•reK˜O¦Nõê·Z
;u7òvæ̙™E‹ðøx,˜7۶nîøñc˜;{6:|ô|ðY™}ï}÷qã¬Ȟ—xô±ÇÀjã³gÏ@wäðá óɶ!ôB¿¶Áï3\ñ¶`àÐû‹³úš›“íؾÝÐs™—k¿ÃGŽ̖5â™Á\ºxFо1›B!„€Wˆœӫ5ÙáÈt°Ë^¸¬˜5™L014iCIi+ݪÊ/яÇíV3µ1ƒÞ—VôZ-ìûš£*­„²ŸmÆ)œ®\3ӵn\#>}Íx™óîr«\7õv¹êBva_Ʀ-šaî¬9Ð1̝<qÒãÛõßà_GϾ½ð»vä¦hêùw£†Z¸ØÁg©b܍›©eÝîiÆÏ6'Nœ@bâ-xê޳§ßþ¸§´00#:wí
®óǝ;£{—£¸pá<t?ýø7åÒ+M
X%›/_~ܸñt¾ØEþ¼øöq‡àf€:öÑý iÓ4…ž¼+WÙ7¶`ÁB†
ÑcG"˜͛6Ïèî¹÷^pm2!Èچà>#HLL8žzúi\¾|CĩS'¡;Ìà>ä|¿^؋úß/¿Œ@þüãx*Uªøï^Zðß4!„B!¯áÜ•§õkGW†k;œšÌ&°Ú2³Ù)ݬ(ü3È‹á¡Ó§۝ÀWMÙlÌ«…A¯J.äMŠI_3½ïm&ƒ}¼'ÀR-Ã}bһÙ[v·šx띷ÁJÜå_,Cf°’²ËGLBЭGœ϶:ÕëòÍ>ôG¶Ǐ{meE‘"Eà«	3Âf·ƒØҀAiß^½ýbgNŸî¼ÏPË[ƒ‡blxo¾ýv M¬0ú-³×/êð˜—àýKOŸ>Ý×ë×ã•×^oäԩS¬ˆNõቷú
à‡ï¿óhs²l¾¾üøÃ˜ñÉ4xZ¸d)2#kºûn”Ç*]OeʔáY0>7¬{¹Q#í=򉡽Irr2臫Š
Áq>ùHٲeáËîݻ±ÿ>xzø‘Gàÿ=ótøÐ!!„Bˆðg‚¹+.““q+))ýá.C]‹Ñ6òFÛa‹²²g*C¾bðkµòύB¾h;ìÖ(˜MfJ:+C¸y+‘­(".s¹ÜHHJÒÖ.)Ýᮢ(`Oâh»yì6حVXî"´X!¥¿^ìv0\çm‘¢M»¶2|(tøÂÛ
Œ÷›~©çÅj¾Yóç‚ánz)>ŽFªÇÈã=…†wˆåt:ðëΝðA¿Ç/?ÿŒ̪¬¹6kOìÍË~¼Ù|µðtìØQLgèÇl°pþ|8ÇÇôiÓ`·ÛÃ~^t÷שOÉÉI>d[)w'jsâ…ÁZÐùäƙœOnÖ捷-^¸žʗ¯©êݬmhï3¸áX·Νcޜ9ðǻ=M‘"wݑp—{üq©˜0v,Ο?ïóu8mòd)x”Õù~/^ÜûýZ\!„BHÀ+ƒTì2ØMHJd5kº«>mÖ(0Ôe8hÎæÎb1ƒa/ÃJ«Œ°zЫªá_±Ë0þƒ]·;«6OQz¸jƒòìÂ?šao›MvXÌúº…7†®ó—,ČÙ3ѥ{W´hÕ<ò:oôñÇдy3Lœ:<í7=XתmkŒ™0¬ŠK¯%c±6ô#ÇÒÅK#zS6VͲ:ÕÃ0öŸݲy³ŽӪ!Äx-Ða!ûf…†¡n½úðtôè̟;^ØÀûgµǶ	ƒÀúuëÀÇxäÈ|ÿÝw3j֮Y
Oo¼õ7ыˆyÑç&~c€zàÀ~tïÒYÑˊÓ}ûöáòì™3׵+çÏøb+û¬Êåm
zØ+ȽŠmÛbT|<ø¼֭]‹¡ƒ£m«V¸yó<½öÆȌ¬m(î3ä½m+T¨¬’eØÌjjVøòßž‘ÀÕÚ÷¾…'nÊv‡pÃ9-4ÿ—W“ãèٽ;Jÿßÿþ/ø_‡½ââ´à÷<½øÒK¬ö
ø^ó~-6ûàL›2+W¬_ëB!„BZ4qG©+OX¹ʀ7ƒ˜·«=ÃûÅڬVp$§s³1=èåï10¶š-ì!6ë¦ozÇj¶ôbpÈuãó	GÜôÎe…ªZ‘äH†ӡ¯[øŠ­RþԨY3çÍAߞ½´@d‚áÆX}öO½Î(öôõV¬XQ¼ÿáûP™X©úü/h¡á:èØ{öçŸ~äð±ãÿúéý™ÖI,»u/B.ޕ§Ü<ïà`ø£۽ë/pR¦LY<óì³5/ÑÑÑèҭFŽÁÊaC1[¤û¦vÕÂ6ڶoýZ@|õêÃóãxþ¼ðâKxäÑG‘y¡]ÛÌßgè5oÙƒ4|80™ÃÄ6LŠÂ6&>z–—D“W_½ÃgW´þ½{qéÒEèþùço¾?‚ÎgÓæÍÿNþñ‡ïá*h¡ñO ×ßx“¡}¦«K”´œ!„B!¤‚WHµnRJ•*«vy=½»ö(XmÉp7°B•Æ6Ó]ÑËӰo%%"!1‰/7˶6·’“¹n>î¦;؍¶Ù¶á®wU/Ãy¶ŽÐ+±#Ur²çÍOS¸ûÂK/bÆÜY`ÕîãæM´lÝZ«mŒ`š6o¡UT·BVa?Þn=zÀl¶À«T½OÿæücƏG¥J±H…a$‡ïӈš½HŸ~ýÀJÞôºûîÒ4t(û€bì„	¨\¹
҂kԶ}0èËj™_ÛÐßg(ðƒŒøѣQªÔÝðÆÐ×W¸[®\y‹÷îÇrüó875jÔDZÕy°.Ÿ_ÐVÜHŽs

®¦I””ÁËf¡B!„ð
é«ëpºÀ0÷†ò”~V³júƒ]+[øvsrÐKìm›ìthAï�!9ÛY„"ðU=6º»•”²nÉI¬¸N÷º±eûÜFJ°ë³}ƒÕÊ×]ضn8tà ¾^·Ÿ/ý<òºîè‘#èضV­X4”0dº÷Œ3ôÔÔOΊžÇo¼õ&rV¶i×UªT5´&ˆŽ΃{ï»]»ǡq“&ÈjU«VÕ* ?ôêOzãnjIՏ·hѢŒø8ÙÖϚçGÍZµ1tøp0Œ´Ùl9/zÈ;cöl4yåU°"7˜˜˜Rø°YsLš:U›Ÿò†›ƍ5
í:td;¿mg8Ÿƒ‡
+šC%ókúû…*Uª`ÂäÉhԸ	ƒ^ηÏjl¾ָNã'MŸWv`h>tÄ|ԩ3ªU«ß-¸¾Ýâz oÿþü'MrîÛwüU«V3¼Ïx9:OžÌUî*ð!%è…B!„È(œQ!áiWáP±ê5a$ôPQMù¢‚_Tðf7¯¹Ývùs™®×S €›ÕbFN¢ª*’œN¶;Ȓ9RL&¶`kˆÛ×ð¿èÇåáãààºñèró˜ùuc ÏucŸsà6ý2/ëÚ8s괶n<Z«²ۦ
1wÖŸJq“µµj◟~†ÃáÚ۳w¿>(V¼<íݳ£Gģˆ’ôØ?]½xŸ}âixêðqG¼òګP8¯>crA) ýX¨~“Á*{”rƒG…áºQߥK—páÂ\¹|Üô«l¹r`*Ù=/‡Û*\¿v
ÿý7XiZP{¾|Î5kÕÒ*wïFf\¹rœÏËڼòïÚB…ó=Çv‘µ¶¡¿ϐ¾ÆΞ=‹ӧN­:Êi¯3>ÆptõêU课î*Z”¦±:<ÎÐHç"O&Ã]“‚ Tp!ý¶íÛ¾OJ²¼vT¼ºLޗ·	!„¹×Ž»Aµ®æA;ü҃Wö]uܱž¤
¸ñ«^s"EQÀMáÜûírò‡ª*ÿs»àv#Û1ØeKò9Ct®[v›=s–±þ0ôåÄl6áƒfMñîûïñõhhÇñْ¥Xºx	X½{úô´mѽ´¸n½ºH†Âí?ê€ǟ|9LV†9V2räšy‰Gˆ°¢—#Ǯ­~ŸáþÞc¨Îæ¸QËð‘ÕØց#3-[¶»ví»ᆱU W3œÑbfÈ!„B±¯vÙ" ÔXqjµZPAÎgbЗª‘ɠW‚ÝÜáËϿÃÝÌ(Uªúè‹jիÃÃÜQÃãÁM‚<]¿~}{öÆÛcf-Z€áp mڷEù
pßý÷»ì!„ßVDºÄÄD¬Zµ
üpoèСèѣî¿ÿ~	y…B!rJ^!’].„’¢˜`c]ö¨e¸‹ÜŜô²×k$mêÅ>ˆÜôŽ;ôá®à†Z‹æ/„'žšܹkŒ;<òz Ï>ÿf˝*ܽqã&â:wÕÃ]Ÿ¾øôst×~æ⅋€ývYíAá®B¶a¸«·Á7nþüóO!ä…B!„€WDlÏج§€§Yr®¼)¡‚܍½6«ù¢íڑ“™Ã.ì5¥´ÏÈc³k#êöÙkW¯1ôÔeˆ:cÎL¼ܸ!êÔ}<ò:o÷ÆM|ú臞}z±g¥M”òbÂÔIˆ­‹@vïڅv­Ú`Ëæ-È9„B°‚×ÿ½3fvïÞ-!¯B!DNx…0›LYւÁb¶€ժy£íìgêç¾ïhÛíª^nX–a¯ނ!šպںññ°­¸³¶mÙjØQ½[ϸTU²¼ÎÛù}ÝnÃÌysðäÓO!˜˜L™>
ÿnø2áÆUúôÃì³àr¹ „"òqÓ6_·5
ûöíKòš „B!"*à‚ÃÙôQ2±J—ը¬ø¼êFYa1§§ZWªz£®ÚRBq›M»nå2x
A諲nv®›Ý†̬,fïÕì#Ο;]ÅJým„ÄÛù}æ~%K–@Z0 îҽ+z÷ë»¶ö,ÿrº|Ôl!„"²(A*xuIIIˆǁàÉi!¯B!„l²&¤‚WA´Ý‡Ó	·ª‚ðH)`	·GÖœQ+39R¨¸&ª[<B?jRޤ¨€ªúZqyøåöA_3x»O?ûb«Tưƒqüø	øÞ½íZ¶A\ïžxäÑG „"§TðÃ_†¼@¥J•!/TÀ
!„BQ¯þ°áGB_³¢ðr‡Ӆ$‡#Õi£Œ­I®~ð^FÄ*Q²$Ž=:rø.]º䳊—·óûº’11ȈråÊaڬ˜8n~ùégøsãÆ
î?¯¾þÚulηBˆÈîÁë-!!ÇǠAƒP¾|y	y…B!$àBˆLK	wUxb¹^Å썷1ä5™MàÑl6GTà[¯A}è/w:Ÿ0f†ŒfèÃËMqx;¿¯«[¿2Šmúôï‹ڵkcú´Oxÿ7c”pW!r^¯îæ͛:t(Œ²eËJÈ+„B!=x…âÎoþç†
§˅$§	I‰¸™˜Å.¢a®Q“Ɔ0wû¶íhߺ֯Y‡ÛwðÈë¼ÝÐS—¿—Y/7nnÀV½Fux+X°>îÒ	>î!„9±‚×xÖCÞS§NIO^!„BˆÌUð
!„àÆslӠB5òò:+XU•G•×V²·4‡Võš`5[ŽJ”(¦-šaî¬9Ð?v“'N‚?ÍZ4/+ÄVŽCޣGŽâÀþý`µW©R¥PûÞ{ñÿìÝ„U}þÇñÏïÜsï¹ÓTÓúÏ?JÛֆb˳SÂ>Ï(»kˀ]Q	ž­Tc¤­¡µlX»@©
iˆˆH[JRµÕTsg¦¹÷Þ9÷þv~ÇÞܙ;5ÏÌÓÜÎÌ}¿ø9ÍLæsS¼}ûžT*)Àܞà-(Oòº˜ä ðÀô%ýÄ'Ãm¥bɪX,ªdK£×Ñc‹/úÚHQ…‘0šNÆp…Ãw;¾W&“ѿþñOMæ×ß«ow|§/mÙòeÑÌ^fš¼eýýý#okk+‘€
0³ž‰bpLj^:Pc:­ ™’ŸHH2ËÅàPÙ|N¹B!šŽ“ßï٭ÎÃÖҥK5÷y÷u÷ûbŒ³}‚·ìݻwQä}ýú5ëjxÆDÁWéTJ
Qìp§¯›úýz­U\ürãýõïÓ_zÎè{ÿ¨ßüî·ÑÕ}ì>ï¾vÂ_›Š3-3𝀼SÕ×קÎÎNw­Š¼Ëþo±XјqFŠb¯Ÿð‹Ñ>Þ0,ŽɑazJ$ŒâdÅʟE'nŒ$]Ç2̕	޲7o޸ȝ––•ýK³¬¤¼˜àÔHÂóÜTo´ÆÁ÷ýqIÒFᓳÕ×é™úhn
_˜à-{õêU´®Áí歴¤¥YÍAJ^@Mc¢}½
é zO/&eª¯€9:Á[öâŋ(ò¨Ң ¥E©¤¼€šóŒQà&zƒ šîÅ\x À|á	޲gϞE‘wppP•ÜoSÒ×W@àxžq«¢؋)<P­nV"¼eOŸ>աC‡444Ty~ÍÈ@àøž'T­_¨:Ž >vðV{òä‰>¬ááaUjN%µÀO€À@Œ¤fÇ~ü©ô˳Ï &xË?~¬#GŽ(›ÍVEÞù	O^b6ÁËä.0Á[éáÇ:zô¨ûþU‘·qŽG^_€X2B™á}&x'qÿþ};vLT*•RYsҗ¢²%«š ð¬àIÖ]ɭ0룏ŠŢÂ0ÔLºw?®ýû÷Œ¼Æ5û‰éF^/€ÉQ~€|>¯Z¸{÷®Nœ8¡}ûöÉ÷ýªț³ ðȚüXãöb@à-»sçŽNž<©½{÷VEÞ÷aIyð5ˆeàun߾­®®®h5Däcäõx˜ULtux[·n©»»[¥RiläMÄ:òx ×éííթS§&Œ¼)#/Œgbx7nè̙3²֎¼ž‰]ä ð`ª“»PŸ¼eׯ_WOOτ‘7)/Ä6ð:W®\ѹsçäŒ]×`ä`vòÀla¸I ðþ4—.]’ïûڵk—Ê<cÔäY½-	€	^qEàu.^¼¨óçϫ’oŒŒf/fâu€Àë\¸pA—/_V¥´+üOLÌo9ònٲEe	9^ˆ}àõ}_^þÇZ«B~dô䎄Ñ)•J£ÇÊñ<3z<ùI?:© =IcT+†‘k ðŽ
‚@;wîT¥P^@ÊçòÊ~È*;œÓç”Jvô†E)›—ôANü´¤¼3iñâÅjooV3,Z´H•rV^@ýÈesÊid$ÔOá°;ɤ¯ùMó•nHϒ¹Z#ño2™Ôúõëµyóf­Y³FƍW°–À¼€úà&pÞg”Ïô%¹Pü¾¯_A:¥…ÍMòý„¦@à]¾|yu7lؠÆÆF}ʈµê/	€À˜ûܤmæ]FÖZÍŽûþӧ¦–¦h}Cœ²9¡öR
iÞ7ðç;æÌW
¼,Pû¦MúÕ7ߨ­­MŸS²VJ£ÇJÆxsÚ`fHCC5{`[ÿÛ~…#óµ i~̖"ˆ0{qãFuttÈ÷}}N¡d5<zò’¬f7Oü™÷Qܭ5÷šîµÞÉ<zôè“q·h­â^B½-–”µVVLðfˆ‰Ùäîðа¾÷Ú	Ïs“¼¼+Ÿޗ/_êßèç+Wªl¤TR&,*o1ÆÈ€	Þ:ìÜÒ׿îÁÝ€Àû9W._V%cŒr%+/ î„aQýï2Šw/îžjËT¨%ï…£‡¦MEoo¯r¹œÊ|c”öŒ¼€º“yŸ‘µVqa­î	ƌýû»P(èÇð<Oë֭Ó?üIgϞնmۦ’o޼©Jó	xu%—Í)Ÿ+(nÜ=¹{›=ÖZM¦µµU;vìÐéӧuàÀ­Yó%	mݺUÆMÅիWU©Á3ò@àԑÁÌPߛ‰Îô¬;•ÛÖ֦ñ‚ P{{»:;;ÕÝݭí۷«¥¥E•܊†µk×j*<x çϟÙÃېð@àԅ|.¯‘‘PqåîÍÝ# ¾¬Æڳg–,YMå®ZµJ»wïVOO:::´zõj}ΦM›4U׮]S¥FÏÀ\ä€q†?dgÅ=é@_†€™ïŠ+ÔÕÕõ_öîk½­#Yûø¿º{-€¤œísŽ'{rG;_͜ÎÍø¾&癝sÎÑßHòH$€ÕÝõ™õ€z “JÉ÷6‹¶¤%Öhðèu±š‹p3xÏ{Þí[·¸wïõ¹Ï}.F>äœ96$c0£²
™jc9Ml2Ã0‹EZl	3žqÀ{§u'ǻ¯Ä~Ì!”’™7ˆˆˆ^wçèpN‹{|ñeÇÌ‘Ýã@wHƅ¹CÈ!o)…~ô£ü×ÿú_¹¨»wïò»¿û»¼ûÝïæÄ~6ÞlÎÅI„»ø©:9ñt¦„‘r"[Š€=%ãÑHw§µNïÚ;îmÔZ鹨לˆHbƒˆˆÈj9é^Ÿé@÷„ºա¡?þ˜†S‡­�l'§Ķ:Nme8\.¸¿XDPÜzçbê®jåp±ä0¾v+¦VqïlË0,""¢^¹QïòJÝël>jô‚ˆÈë€ûé£+}cÅß6ªáGôGù‰Ÿø	þæoþ†‹úßùîܹË/¾ȱdÆ^2ÎÉÞldªíTǮã¸Ǣ÷¸â<îÎTk¬d‰R2C.˜±&Ôڨ­n„Ù’afσäœ0DDD¯ˆˆÜ(ÓTu¯""òDy¬í9`wñnðöÞùüç?Ïoÿöosb?‹æ\œ%s­;½wºwZ‹·‰ϭ¦ãU)93–›=>ÀV­R§ŠãœÇÌÈ)“S"%#¥„!""¢€WDdÇ—¡N«"îãzçaþð‡yýõי¦i«1
›ïhFÆi<i’S„@†ܝÚ:­·ØÁ	i­ÆÊôäd7+حStGƒs–”2CJ¤’ÉfœGDD$±ADD¤÷®{‘à€;ð¾÷½mü˿üþçÎ	[ixúÄÌJf>Žì͙
ã™3}[k-,V+º;י×Å\â©VÀٔ,Eؽ?Ÿ³?†¢pWDDðŠˆÈvzwݫˆˆì‡­}æ3ŸaÓ~2äÙ2ˆ°wo6‹UrŒMµµ8Xl1M×2è]M•ûGg»9EÎþ|Æ8’Wžˆˆ(àé<ì—~é—xíµ×ØƗ¿üe‹'²£!—$§DtõÎg”RN¿Wk w5M8WßT[»«:ì®Cï1BïÇ&""
xEDDR2ݫˆˆìw0³m»x#ÜýêW¿ª.ÞcḟýùY½ΪFÇkì~5ƒÝª—Ó
?즓`7^?1""¢€WDD$¥¤{‘îâýøÇ?Ž™¶8lmÓÜCvA2#ÆÌfä”y˜G'×Ùiþ¶`·{gS²Ä|Œ1O'ؼ"""e(ºW‘¦ÃÖ^}õU~ù—™müٟýY¸öÐak†쐔,:Zç³)¥³ƒÞłåj¢õÎ.éî,kåðhqf°kf̆qݭœyj¯ˆˆÈ0”ky¯""¢ÃÖ>ûÙϲi/»GJJÑÍ;g$;ôN­r´\szk¥w¿´Pwªm}/¦iÂq6Æc(æ%#""òÔ^‘q6ӽî<ixï{ßËÁÁÁÖo…]%%§èxg3èޣ«÷p¹ˆÎÙÅ4Qk£»ó4¸;µu–Óáòá"ºuÏì&6KD°»7g,CDDäé)lg`€³Û,îõæw0#ÃÀG>òþûÿï\ԝ;wøÝßý]Þõ®w=tØڛݑÝzKžE8¿ª5BVp6uœ^+`ðd$KĎa˜aëXÁ=ž㣻ãxì½;Þ{\¿“”2cɔœ¹”€WDDÄÌØ۟stxÄ‹{43né@~xLC¼ÛøÌg>óPÀ;7x“«@RJq›µ6j«çÎâuïN§Cã©J–(%3䌙qéDDD#DDDööt;ODD‡­ýøÿ8?öc?Æ6¾õ­oq÷î]N$3fÆ"%³7›q0ߋÃËJÎƳ`%efe`o>1c)
wEDdw^‘Ù|Æ0ìªaâEDD‡­}ò“Ÿd­5¾ð…/°ifÆÕ$föFgïÁÞqØ:×ã0Dè›RÂ0À؞‘,ÅÏ3–ù0²?›ǯ3ŸC!›±“DDD#DDDž{áß~ãöÎޛˆˆ(à=öá˜×_Z+sxó7“ÅçÆéîx÷ػwÜwb‡ŸžÊoÌR<ÉÃHÉ֡êåHf¤œ9‹;8¾9k7‹Ü,v‹}ÇëÖ;?«n§kf˜كšaÉȖb7äiéÝéÞc‡;}];â	|£^¥dfÀˆÈ#¼"""ó½ytÉ.Ë]ë.Ž{»ÙDD4¦LpëÖ-ÞûÞ÷òå/™‹:<<d“q3´Þcõ֩½_(Õös®Ý=.:@ç”d‰”ùxåD2㲙a`W«êµuzoÔ-{;·Ž(ڙËõʖb73¶'îP{£Ÿü™ëøVõšj·7yä€WDD䅗^à?ÿí
Ü;»À,Å=‰ˆˆB^{ø°µ­ޟüɟdSs®%_¤¨­ÑZÇqž•îë ¹˜%J>^9BßsÉÆ!r¶⟍u7wíLӃä¢nɌóIw'êÖÛf ûXZo´Þýόˆ(à)%óâË/pûÿÝfĽ”’¹ÙDD¤‰~ù—™W_}•7Þxƒw²··ÇoýÖo±irŒë¢÷ÎÔSm€³Ü;S=^³Đ3C)˜±&5ñ;8» {g5¯)BƒCÉȳã»;‘Ç8dMDDdoÎsÏ?Ç%;¾‡¸‘cî<Râ×~í×x'?ò#?§?ýi¾÷{¿—îΑsDÈt´\r¸\F
Î.rï¬êÄýłåj¢wç‹ þp±d±ZF
ÁwvÄÇrZqïhÁjªtwn*wXÕÊáÑ"¾&­?½ºeKˆˆ¨ƒWDDžȡf½wî߻Ïe8¸u÷pBDD¤™~ã7~ƒ?ÿó?çë_ÿ:›Æqäø@Œqø…_øÞîСvŘ×靫řZ•sf,97ÅjªQ7ǹZ<úU­”’K!™ݠ`wzfÝñ%R2DDðŠˆÈšÇû<)%¾óæwžuç®Â]yÇÃÖRJ|êSŸâ›ßü&¿ó;¿CýٟåýïŒe8Ëʝït窪µ±zjnq,n'×Npœ'©µÆQkôÎÊpmC-¦§ìFla³nÎ1çÉqj­ÔÚÖA¯Ùõ­ÛjZ»O½n†””‡‚ˆˆ^y❼e(Üùö]Ü;O“YŠ™»Ë ""çé@r(Tz÷»ßëuçÍî\EµÅLÔÇvÍ9)%†%Ãl½.zuwè{÷Nïþ8³H#è=l’#ܺV¡SòîΣ3’EÍb·×ÛÕ͏׃š¯{§=òÁ`δzËPˆ —ëcUkt[ÃcÖ-EÝÈvR?ãrBqQÀ+""šÉ;Œwoße¹Xò4Ìæ3^x黨&""âÀ_þ˿ñS?ð}—ݹ×;+¿zÁJë=‚¦Ö°NSN””1ã±Í ™c™͝^µ÷G|}}Øغ3t0䓥5Ë9a<ž“P1a@bSYk[¾Ž3MÓT#ä†rÕGŸDÝä@7çLI‰”Ƽ"""¥d^yíeG¾s÷Ó4ñ$Ã]Âó½9!""òƛo²˜VüÌýó’9Ks®Ðû½ӱ+ìö3O#ðܞQJfșœÏJ6#…acœÄÔږaot†FÐ6…áŠu†¶ÖYÖ)BÓm™C.ä’Éf<+)%Ɣ ÜaZí½÷mgôƏËÀPò™i,QrŽ߳™±ëDD¯ˆˆH±o­èä=¼ÄÑáp¶cѼ°»WÍxéa´¨n"r±ä_sf¿DÇfЖoëÖ5»Z»S€푂¦¡”wËWJŽÕýAh»Uлš¦è^Ž 7Ìv»cwªSÔo[)ef¥sⲙÁXJ¬ޝՃÿ-:áî,§«j;ô:P9ص¨×X
9%®$QÀ+""2›Ïb½ø²³ZNo­%ÓT©S¥÷Nïð`öX
ÃPg³·ր™ñ¸DDDV½3MŽ™=X@ìW…­EÐôˆaŠ0­äÄ.Jf̆!Öê䰱íƒÞuWr!'ۥ€0BP÷ζrÎQ·œŒ]”’1Ü¢›¼6|ˠw9ÃPóît·v÷­§éQ½³­‡rfE‹ˆ^3c6c‰ˆˆÈvݺµµG>¥?Yb"Øåª‡k5ÕFÙ"譵ÆZK|¾ÉìRÆ0¬Züš»§™áüX"èݺ{š¦X9%J.Q;³Ë	ãëé‘![=on°+"
xEDDDDD¤wp©õFÝ2<ì®G1\Uãú;{¦­ƒ^èÞYÕã5‘,‘sŠð0/³'öÞi­¯k÷èuË)ùد  ·°œ¶ÝÖ_¿Ë	¢n%“×õ3xòukæ}=Oعn%ç¨Û5vED¯ˆˆˆˆˆˆtwŽùúÉãÉq‡Žãë±EÝp‡a4
%sØIÐ[2ËZ©ÐÉܽÓkg‚`a¯‘̈‡/0âéaëÂy”Ícub§uÇO×ízvZoÁ,F7Ð{‰åZkl+ê6mÔ͌dQ7âaï\7_×
wº;ñèNóu{\)eæC!¥Ä5#"
xEDDDDDdUëæϧÌK‰0ô:ŠÀp襰š¦Çén^‡|޹tëCï">ŽR2öƑÖ{tôöÞxT¨{£u.ÝæLëëGDퟨ�ˆˆˆÈz¬ÀÄÓfCt¸Œë/EgèHsgzô WÁî3–Sb6R{gµzw–‚]QÀ+""""""«ÖxšlcƮqód3ò8ÒݙjÝ8Ôk·¥”£n75 ,)Qf#­Gݨí*ÔÍ(9ùªoQÀ+""""""îΓgè9¯ƒ&If̆!ÖT[†­ïVWoZ׭äBJHNFÜj­L­ѽï\—uÉ9j—̸ADD¯ˆˆˆˆˆˆä”h½ñ¸#çLÉ)vCÎ3”«»Aoë—ö&Käœ()Ç~61ƒa(±zwj>^ƒólÉ"Œ'§ãeÜP"¢€WDDDDDDÆa`±ì8¾]ŽW"["§ײdÆX
pˆ··N÷NïN÷'9–Å)§¸ÙNJƘJÔ΁è½ã­Ó{§ã<I†‘Rԋ¼ä
@DD¯ˆˆˆˆˆˆädìÍgLµ®E0f†mt’b%O–%%H‰QïŽïœì@ìspãA­Ì3,6#ÅJ˜!O£n9QHPxôê¯Í!®xØfÝÌ{ð:‘’a\€ˆˆ^͇Ý-b@6ƒlÜ4Sm,§‰Mf¬ÃÏX¤õnÉÈ;`Ä=%ŒëÂï֝xï¾^û1‡0”¬ÿO¼"""""""7U„»8›ÜI§3%lcŒA&%ãÑHw§­GNÔÞqïlcª•¡uû‹ˆ^þw1§·F¥A03JαrJ|wrrè_­îÇqÒi-"¢€WDDDDDDäڛLµêØu÷XôWœÇݙj•,QJfÈ3dÃTS«ô޷:dÑl½ vŒ¸ÐAp"¢€WDDDDDDä¦Jæ"Z÷'»wZ‹·‰ϭ¦ãU)93–r£G8¸êUêTqœó˜9E4))%¼""W–™áî\13&"9E	dÀݩ­Óz‹œœÚj¬Aï?þ¦pw–µRkœÓ"ÄeH‰T2ٌgFDퟨ�ˆˆˆˆˆ˜CÉd¨µE ÛzgSk£ֈŽÞa ™q]9°š&¦s‚Ýd‰˜W\òn|DD¯ˆˆˆˆˆˆˆˆCɱZïLµžê꭭ÅçJYn0ã:YÕÊjªg»)~ϔœ¸L""	ÙI¢o­­""""ç[­VÏh,ƒˆ䔘#ó¥Àiµr¸XF§«_“ÃÓî-â÷֜2{³û³Qáîi"¢€WDDRJ»´DDDDÎwû͍÷ÎgAĎù0°?ŸQr>ô®j`ôx÷«ìFP½œVø©`7E°»7ãõ™DDðŠˆH
fÆwî""""çû§ùWÌ,Þ;Ÿ-IfÑѻ?›‘Sæa¯‚^g§ùۂÝîMÉóqᮂ]QÀ+""ç230£”c·ï""""ç;ù¡ñÞi†™ñl‰HJ­óٌ”ÒÙAïbÁr5Ñzg—tw–µrx´83Ø53føîVNˆˆ(à‘`fßõs³ùœcµ®pïœ&"""½7fÏ퟼w^à}öi‘’RtóÎÇÉN½S«-—ĜÞZéÝ/-ԝj[ß˂išpœM	cŒ1s†’Ùu…K'"¢À×Ý91Ž#9çøܟþý?ñ?ö#<LDDD¾òo±ÿÂäœã½S®Èn(9QòŒÚ:S=ݵ۽³š:+&F*™b‰”Ɍ'ÍÝiýx5Zëtïœ'Y¢”¡®!"¢€WDd{
wƒ™±pwïrçÞ=«UÌ7CDDDÂwîÝc•pp떺vw˜(è�ª5_p6uœ^+`ðd$KĎa˜aëXÁ=ž㣻ãxì½;Þ{\¿“”2cɔœyg""
xEDä^ÀÞþ>GGG
ßùó¿ä¿ôó˜%@DDD£¾øÍoñÊ÷}Ã82ßÛÛú=ùÙ‘”R4+8Pk£¶zî,^Çñît:4ž*³ÄP2CΘ""šÁ+""bfï<#Ќ”/¼øb\ç’ùæŸýšÇ""¢p÷~þ‹¼ü½ߋ™Å{eJ	ÌÎ_U°+²"PݛÍ8˜ïÅáe%gãY0Œ’2³2°7Ÿs0Ÿ1–‚™!"¢€WDd
q/ÞQTJ‰¿¸ët¾òGãDDDnêX†ÿñV¸ûÒ÷~/@¼G–R¶íÎUø+²Ì"ìÎރ½9ûóy¼‡!Bߔ†ÆöŒd)~ž±̇‘t÷æÌg#ÃPÈf<A""Ñ "¢‘
§¯×âÛN_zùeîܾMʉoýù_òòsÏñs?úC˜%DDD®»Þ[¨¶LÆKßó=˜/¾ôҹ£ÌL#D®˜dFʙ³¸ƒ㛳vC°øÀÍb·ØEDðŠˆì…½€A|~6Ÿóò«¯r÷ÎX­¸sÿÞ[ݼÂPF^zø|t$”\¹êV«·ïÜáÿå_yã­}¶ÀüÖ-öÍÆ1:w‡aØm¤PWä3#žã҉ˆ(àQ»Þ/ÜÉkfÃÀ˯¼Âáýû±j­L}â?îÞæ?î|›cî„ͯEDD®ÐX#3Cáù×^Å0J)ܺ‡¦”Λ·{ŸÛÑ^ي™=ʷžêHJ)Å_n_yíµÛppp‹qI)š`?ÎÌZ—IDDä¬÷¥‡_RʌÃïuo½çÅ{ßþÁ)¥S“n9žAAï'"""êà‘S]½9×)¥Û0ÎfÿŸ½;J†(ZºÿE—LˆŠ¸šò špΏYr¾}šg<wî>À
wۮøøo€—Ãl÷1
ëý߻%ô>ë7–ç1ÿˆ¼yý²fv#¯z@à`£Cïó»„Úç~¹fì€;t”]®_ÇÃî0@Èíçk°ݍÿcwó€ïBnG޾>÷»ñ­~ ðp~LÃ渆ÍQ
˚åZÖX|„ޗvñîfȵã±@à|#ü.Ç1<ój÷n<¿ÎÞÍ8Ç6ؽ;x8¹ç»z?>NÏÎލÀ|ÕÐçèÆQ
} ðص›±wcÝÍócÎEpLC…ݾžÿ ð?¦ֱw{ýüðý1!»x?ÃîlÔxØÅÛ?ªÖqw³£w‰½o}y똆Ž»96~^^¼v÷kì]£/\!vÛväí¸ ð0}În­©ÈÛq·wøÀM;x"ïëïǁ@à†ã~ î.ãð“"oß¼ÌÝÝXF\q€#"ï7üè€À òæÎÞ󸻮€[uŒí¿Å]@à`<ÜFÞ%ÚFÜ]Æà}#o
Çݘ ðÐá7Ân-–9pAč9Sc/£Öx»ï±»ûupoì=?Ÿ·æ¼LÓÐk⇎¶ûh÷߁g½&Þ ð0y#ÚÎÝÓ0Jçƒo=o/€X;pdC<ØÿÙI|#áù°Ûk^‘wbmìêíy þίx˜Œ¸=ÿý æÞf^»xûh†žBðԻ^‘wà]vê èξ@à``np<b®¸{9@à°›×Çêý^»yß»/€Ìc/ˆº/~<
]éOÀ à¼>l~ÿš€À€À ð ðڱ€AþÖ÷ø
#¼‚ÁÀ1x¼»Øz>VNûIEND®B`‚PK
!<Ý6{v{v#webextension/icons/onboarding-3.png‰PNG


IHDRxÐ=èPLTEGpLÑìÒçÒçÑæÑæÑæ×ëÒæÐåÓçÑèÃÞÂÝÁܸÑ
±ÈN¡ˆ^lneeeffflll¿ÕL§¹oka4›«sss```___ddd””•···ØØÚíííúúúýþÿùú÷ÐÐ҆††aaa^^^¥¥¦ÈÈÌâââõ÷ñöøóèéå}}}®¯°òôíÞÞßÂÂÃøùõÿÿÿŽþÿÿúýþzzzìíêccc]]]\\\bbb[[[Åá÷y¾ïz¿ï±Û÷ÒéùÔêúÎèú¢ÓõÐèøóùýƒÅò×ìû¼ßø–Ëð™Ð÷Ãáø{ÀïªØöèôü‚ÂïŽÇïñøþ÷ûÿöûþØíûÍçúÛîûôúþ}ÁñùüÿâñüÅãø{ÁðéôýÉåùÞïûî÷þÖëú¿áø~ÂòæóüêõýìöýZZZï÷þäòüWWWëõýàðüÃó€ÄóÅôƒÆõ†È÷„Çõ„ÇöåðõÍåöˆÊøáñü‡É÷ûûøÚìô…È÷ŠÌúÂáøìõöºÜó†É÷ÆÞðáïòóùþôõî´Õí‡Éø€¿ë¾êæóý‰Ëù‡Êø‚ÀìÝïü¦ŽYäòý׬R}s]ÿÄMˆÊù‰ÃìˆËùÕëúûýÿ\½áúð»PçôýËæù¾àùÆâ÷Ûîü^VfcZð¥	‹r@éõýëðíÿª¼Š%½àú£~3ߡÊâôÒêúvhKÝëíΘjaQÐéúÕëûíöþÿðÒڿ‹ÓêûÅåûÈâöÃãûÁâúÙíüåòüÊæúÇæûÉåúÃäûÄåû¿áùÑéûÏèûÀãûÔêûËæúÂÛìŸÏټÙí½×é¹Õêx´ßÆæû¾âûßïü³Îà³ÊÛ,~Boy7w…žÀ
˜µKhn¥ ÁVdg‘­œ¼ …œS_b£Ä©Ç°ÌÆÛÃÙÑáêááæÐéû¹Óä n‹69Y
¤¼…ÃÏ(\yNMO/Kiœö±&èղEDG>=@jµÅŸ¬wªk¬©@^[TŒ¨XC¾¡È>`€tRNSl¶Ùóÿ›ÿMN)âuHsIDATxìÔG¡Å00g'-¼G >I ?Jm}L1z«%^­}&:{şkL7îøQÏ iñåJz€sLJ5&IƊˆ=H³#ʙ¤9%ê Q6HԢOõ€D#&©Ä ^ñ ^ñ ^ñ ^ñˆñˆñˆñˆ@¼ˆ@¼ˆ@¼ˆ@¼â@¼â@¼â@¼â/â/â/â/€x/€x/€x/€xÄ€xÄ€xÄ€xÄ ^Ä ^Ä ^Ä ^ñ ^ñ ^ñ ^ñˆñˆñˆñˆ@¼ˆ@¼ˆ@¼ˆ@¼â@¼â@¼â@¼â@¼â/@&ñ ^ñ ^ñ ^ñˆñˆñˆ÷ݺ¸ †‚(x¶4`ZÎ?Υ¬ZON
àfáMi9=€”æ†WvÖt“ð^&»ë2+¼3þî¶çطåß-»üÚKmýÄZ-ûò+Í	oxwsí§ð’'•wBx_/Ñ]€úz‹ð.˺½u€+xÿX~Ý ¼ËúÙ.áó.á]:ÀE/Àá^á^€Â ¼Â ¼„@x…@x/€ð
/€ð^á^á ¼Â+¼Â0@x„Wx„ €ð¯ð/@á^á^€Â ¼Â ¼„@x…@x/€ð
/€ð^á^á@x¿ËÐةc  `CP²ÿš u_|2D@¼â/ˆW¼âRÄ+^@¼â/ˆW¼âÄ+^ñ‚xÅ+^@¼â/ˆW¼âÄ+^@¼â/ˆW¼âÄ+^ñ‚xÅ+^@¼â/ˆW¼âÄ+^@¼â/ˆW¼âÄ+^ñ‚xÅ+^@¼â/ˆW¼âÄ+^@¼â/ˆW¼âÄ+^ñ‚xÅ+^@¼â/ˆW¼âÄ+^@¼â/ˆW¼âÄ+^ñ‚xÅ+^@¼â/ˆW¼âÄ+^@¼â/ˆW¼âÄ+^ñ‚xÅ+^@¼â/ˆW¼âÄ+^@¼â/ˆW¼âÄ+^ñ‚xÅ+^@¼â/ˆW¼âÄ+^@¼â/ˆW¼âÄ+^ñ‚xÅ+^@¼â/ˆW¼âÄ+^@¼â/t"^ñâ¯xA¼â/ ^ñŠÄ+^ñâïzPd"ÞnኋW¼ùuŋ{Å+ÞøºâŽâoü]ñb^ñŠ7üîwÃgæïa§.‡(€6!]Ìì5;ðÃQú¯ji¤ÈsTþ+â=N¼ƒâ$Íò"-ãª~½
­‘״]ŸåÃX6Sø#TÍå8äÙj½i<ÎËxÝ~×÷6[¼Ig¹8^Ú%9þË÷ºF„´hF¼9”çe¼Ç+âÏx™ìñ^>îBZ$JñIyd¼Œ×Ñwý鄯Ï>^:7¾ŠEhä_çe¼nƻËðôxùçlb|+‘gK$×øÖÌx¯“ïð½޳‹—‰8[!Ùœ—ñ>L¼Ç:'q½^Õ]Ô@k£¬P	­ˆñ2^×ÞUtöhmâ¥)ƒ^¤,P½í‘ó2^Çâa²{Š·6¡½¬ï ¥¼%ãe¼NÅë‹ûîv«ÍHí`’Çõ=äo`T1^Æë†àI³Fù/ä.ډ?읅vãFFߡ\S81.ÿ‹†J
ƒ‰!̌ïNg<²ëU¥ù•= vü]á]˜%Í=£¥ÀþmÒRú?K¬}&-cF…áEx_Ã×_“Šץ@ƒ} =#9ü,ñ¦g8aPx^„7A,™”b@c0ƒøYbŒ'gNx^„·’#Ž‘ÌEb%vÃÈ{„á5‚¨‹¿,۲%–395=#®ʅÍ
ó\}žåyۄ(÷¾¤çÞ(ʕyã{cþᄑ9â˜×{øù\ Žwi„á5&¼É<q,ʹaõì>‡&Ž%ýxp—>½Ex^ƒV¼cıl©١vyÿÃWˆÅՏŸ!ŽátáExM	ov¯·BQ'	¼ף„wI?œï(‹ðÒ]I„ßjðÞ»3îóÏ|xõãÁ]âJ£¼¯Dþ›<«íwž7D¸Ï׈c]?|ƒ8Þ!¼¯AáÍDX­Y–šÞîóIbØäƃoÃ{„á5'¼É1l÷ÌKÞÁýîÃ,7¼N™´áEx
Yñf¤§¡–$vg·à~ß!=3Üxp‡ôÿjRx^„7Gz\ošXݵ
ÜïMÒÒÚáƃ¯|ڤð"¼ïÏEұg³—û'(,`Ÿ´Œ^„áe–¼®mØy–8\»ä[çǃÏok¼ß^„×:ÝͦÞQ8ƒ95VäEbpø†îEy&Êxp‡Â)&¾©òš^„áÍ&ŠÆáúŠ} 熺ˆ-Ðá«ÊQ´ñӚÿ ¯jZx^„7;>LÁÌmVzvø"…P߉6|ç8ü£ ˜^„ᭌ—(ˆÙ]#)ïézÔÀz3äxT^„×Àð–ˉ ¿ÍۜßËqˆ³Øp¯n4ãìãÁσþjCñã‹ð޲`âÍ0}OˑÓBíê×ûÆ)ù¸p_6|æ’|äMNLÈð~Cx^ÓÂ[©Ô~¢¸Zœ?ؑxÓBg}iê3u9^}ñxðսÞ7†ü—TáEx

oE„·v]3VÚÞ\›Z\Ú?ÄüêÑñU«u³×p6vÀ±áÌÞ޴æ®v‰èKÖoáExïµàîîîZõâ\’X¿'¢„oáEx
ï¯_évýü|çܛ
íÛ¯
ÿœM¥^„״ðfýá}CD«璝óî%‡×^e²¾ð¦^„×Àð^‘s~þx®P7±8^)—^„·V¼íðŠÇþQò,O±8^©”³Y„á5ś!"W>ûY ÷XGxÞ>YñÖÞ<8žÔÃá/Âkxxk*¼‚§G¹=ª³¸Äåpx7¼/Âkxxå“/é́¸Gx޾	oû±—§ç§6q9Žð"¼}^ñýY¥ÄäpxáExû%¼Þãߝñ8îÎ
ç^„·_Â+ž{ÅS{Çáð¢‘_^„·_ÂÀ+"J ¼ïßìœgÃ@Ç?Ɋ	`™•Ã!Å0cƒ’˥kÚdé­[û©÷^ӔU—•Áû¿¼ÜåwpïçO„xß²”#ËèMù{ƒ!^ˆWŒx¹;™NwEÀç?†áåÄñ
o۝ŒÿöÝ]C`08~ºÝB¼¯ñ¶ÝɶÐe–§ƒ0Œÿx!^!7ޝxsz(MÖ~Á`0Äñ
¹ñŽÂ0Œ²Üpðá7\`p/ÇÏEàÓäÝñú/Ä+äÆ{w3»7tú
{“ÃÜå*¼¹7§ô¼…Ò.ׇxňÿñÒyÏME#ÏT`p×
	—£•oóZº[â…xň×T†¢â©âñ/ƒËä%Øßv»h”³õ!^ˆWŒx«}pR€ÁǸVß;‹ØÑ~/Ä+G¼¿CƒGGËiá>e@éF¹ÙONw2ˆâÕôpØvè6q¤>'««ÿ#q°_ô…îd¯ñÚJ[m-½Û¶º&ãNWãïScœœ¿ÿÝÉäˆâíJ@w“p—u”¨µRK֧Frþþh’#H¼èNoèèoè)iÒvóÃޙø´‘´ùÿøýö°&作ŒÒFÂÞûp4ÎôkY
!DЛKڹµŠûM*ž`¸bc÷̆À9æÈ{ßÚÖSíJв‹¸±ÝÝå<7tÛ.Ù]²?*ªÛ+˜ã•–ásÕ*„öüÖUÃ4mûκ°öQ䫝??ŠÅû:U'»[vxëââJ>˜ã’†éޱA€Å5
ÃZìñóρêMC‚ï2¥ü_~˜ëøùW±:€âՖµµ@ÕÉÒŢCßüE~Ã6æxä9Ì	?øÕÈT¿sýw¼¹{X@ñjÊ`¥¤:ى¬C!+ÄYµCH,2fÃ>†¾ýuüx/€âՔêúz5Hu²,qHýâ0GŸM×ö©gòù|&3^‡ä㲐o??Š@ñêÉ@e}½¨:ñˆçx„ñèB0GŸM¦ÖzúÓÉÔ6.­¾s+S·]v³á·ëšF¡_ŽÅ xõds²Ùvu²óÿS&W&åšGÊ^2fƒ:Õvç§R-˜<{%Sg÷ó£@úáøQ¼ŠWKª[딭j»×ñ²@Ùc7º]ŽCÆ\p)璉$ᅮŸ`օ…bXŽöǏâP¼úzÌۦxËñ!&Ui}2õ
>z¯»/1-R֗Ræ
Š@ñêÇà&x—±µپxK¥2ƒ­0GŸ-—r.Õç?ßçޢŽǛKÿïíáÑ/€âՎje] RmK¼ðîç¿`Áy.º”|ª]–Þ¾†QÔèx©sgo.4ªžau2ūk•u‰ÊګÅ[*—ö>0GžÙDÃR*cÓ¸× ñ?ÞR&=êÚȆG“Xìµ/ŠWø0”àsäÙp)裸¼‘Ýk‘¸5î•ë·†G†º¢҅í1¬NÖâũ†íꑁöÄ+I0G‹.%“L‚»WÆ÷¹7VÇǍ’mE‹ä(^ýÚwrmPžã}´³Û\Œÿ%ÈaŽ0â
Áù\t¯a‘83îÍ/†擾/Š/';²»÷¸Eu2:‘F)˜#̆Ky+Õ÷?›Ü[ˆîx`7{ýæhu~±
¥x±:YŠ¿@ñxo§Uu2t_äYžhHuÈ]a¾×4Š¡O)“§Æý4»L¡+؂5lñÀÝøV'P¼Z2¨þÊ𣽽½ÝæêdOÐ}ñÉĥLL§:&ùqº.N÷†ôúK¹ü-jÜåC×ñ(^M©Ðój-‹ä<¥â}Ö\ìIlNÀ`&¦Kù8Õ6Îæ÷M÷öôõƒq¿l÷øòë&^/ŠwHUòÑÎe·¹:Y9. †Kù,Õ5f¾Êî-–»dÜãtY–·qŸ¼FñŠ xuEQýñð¬¹:™xÉ%€9ªlñ+ɺÈÒì¸ø͊.¾^fÜÛÇåР”¬H‹ûP¼ŠWSZþëŸo÷|ž6eXst¹È&x'SÝæ¾xª­@:~½¹Lúgשq»
Š@ñêʼye=Ûkðu<«“!|‚·$W…SmF¡³y…ozŠ@ñöCÏ÷8;¿ÅëA1Ô°9²l¸”ÙTo81óی8åÐÉë-Z†aš®
–flz;/Š·߀	^γG?„ñû–ñӅ9¢̼›O¦zÇûóãòо^R°³g`u2oÿz̛x)^áÆ61G”-—2>“ê-ç¥)‡ø)³„ÕÉP¼ýÅó½ý<ûZñŠx˜£ÉE—R7ÕsÆ~'N9,Ƨ?n`u2o_Q}¶'³óT/ao€9‚LØèj*&gÇùL,L9Ĥ?~ErP¼}Dâñ^+žÍÄ;‡ð;ôŒ™_Ðp!ÈSÑ÷ŠÅÛOÚÝÙSðøë¡½ñ]¨NV&lðáÑl„ž1›0øL§B„O9ØüKm‘÷Ç*V'CñjÇÚÖfëî>ß;ˆçOYu2iҍ„1.%³‘
ö¥6®^uäîau2¯füÿ­õíæ½;{¯ä´HŒ<<¯Lø$äŒٿ a*÷nÕ݉º?ð:^¯fTi	Þ潻|žAÅó?ÒÏ^¶Ìþî5cfޭ_JEÃØ/3b(ûŋâՌ5Zƒ·ʃÈî³=;OýèM¿:™çOºôjÆ\`îŸOEÇûٺk³WaEÚ(^¯fм0×жzA»pUÃзiu2¼üv!åP3æ"›eýe*RÎÌNð:‘õŠūßLe+¡¸÷i«I†Gâ(ü7º@/cæ’=HEÍÌ|Ÿe‹¬?P¼(^½Ø^֔^nšêÝ}ùÍ5ÂÏpÄ5cvàB2;›ŠSÙƷ*¬¨úŋâÕmÀl)¯yHìŸnØÙk5°w>8Øf˜3Œwm^'rÞo\ÙkZÑôŠū݀Xkϼ;_ï¯NF<ÿíÏV!fÌ0Þ/͜Õƅ½‰¢?°:ŠWïj–8*šw÷'‚x‰ð Ûå3f,ÉbÃØéF	‡BèýÕÉP¼zQYçlC|Õ<ïîEñ6®æ)“Æ8Ã˘
×nã‹'R'èrðvÛÃ|ƒMƒ„ÜXūÝ5¼œMådÃѧüz†î/aWô¸±!æÐ2óîÄ$È/™JÒ%°íI&Eq?Š}Ýnÿé„ÿß"¬pûã],’ƒâÕq¢áàɆÿÿÿŸû¼‰}âȱïkú¿Ø_˜CÊlž¡þ®(?.L¾¯¥%¹ö ýTš“-ÌþÀêd(^Hl­‹TÔCÞêðô¨(^Vþ…”þ‡sÙ÷îý£“£˜AŽ<óû¸${Óþ"zéR±°:ŠWÃ	^ΚrÄ{†¼;G÷‰—U'ƒñÿƒ&Ü0‡
[ý_„€,Fq¿¼O||oÚϤ™xmƒ„Ö?Xūەd"k*ñþ°Ê¼¢x‡¾MCOÊÄÿt5&޼Þg̖^[…'Jó mñ±=l¿:a»p+„×?x/ŠWSï›
ñ²!obÿˆ—Š7•åÿŠ¥Vö?
=Ϙ-Ю{V”_hÚϤý¯SŰúŋâÕջB¼´hÃó£ûÄûcVÞûì3lxµr\r.ŸÎfÓùLI¾_ûlٶíÚj-@5òãzÝþ܄ͮé-†Ô?(^¯$*ë­Ùn%^Jbï© ^^Þûì‚v¶”ËqȥüìőcŸû„±pn>Ÿ“¯q¶\à·I™à²ìqûé¼ÿE6+„þAñ¢x��®¢’h)ÞVRö_dzkl’”k°Ä —ҟŽRçã0[8•ΩÛë”.Œw$)É
º¼Xˆü˜PÚÿ–Õ,³M'ŒþAñ¢xuùބ‚­Í&ñìÝÜü
˜nㅢ"ϙwF¸lé¯ý,<ȗÕí5ɖ
.»Ž,Ð0Ú_ÊØìõBè/Š7æüÿÍÊúÁl'Zˆ÷h󈷿•ki̷QæRú—¬$_¾=r2]’Ûk•0‚´ÿ,Ž4ÙàÛÊû84„Öþ´ËFèF±çýƒâEñƛêö:D½*ñzþ77kðC“(snväÚJ¸âúØɼÜ^Ÿ\‰¹³‚Ød|ëŸèYû{~±ÈB¯û«“¡xc=ÚUiWbk»újñú_˜‡vxÑåÌÉ¢÷-Ìæäözäh×=-ŠmlcŒ.|ͥèçäؾÑ(ü1a¶ŸJ»6Œz­žöV'CñƘêZe½}*k‰WxÙõëpcŸQ.§¯ɢ•…+åsùÀÏ}.°SUó 5€‹‘‹P#lӅïßÿø°ÛU·Ù%½NÏú«“¡xcÌÚÖzP*›x)µ2©‘²f9Š\.eZL1Us¾ÙR ç‹>[0]jÏóQ( 8âl¹Oš‡ ý»ãlÐkzÕ?XÅc;A©$ށ|{ˆxìôr
Fáç܃ÑV#[…€EFæsž/òl¼ÜyIj9s$´ßȺþ ·gýƒÕÉP¼±es;¨z+ÛUµxYu26ÉT²…n…›ógeé*ÜbT<:[
ð|Ñf‹]pZß×ÈÊÇFÐ~u‚_ÝЛþÁêd(ÞØB߃ÕîÝZ«B•xyu2’Í?ÓA—sŽÎ1,XIÂr†Qo)ÀóG˜Y}{V…ª…¨¸/²ö“Ôë.ö¤°:Š7æ$ֶÌîªO®ñêdÄ#þЃý…–ó'©$«qË)ˆ…l€ç,[®M¹0ÆQJN\ˏ"lš]Wf[=ê/¼ŽūÿI6ЮR¼Ru28Å?;ÛNÎ]Yh쁲Uz¯å<4Ù`3¤£N9«GŸѶ¿Ó
¶k:=é//Š7öl¿j’¤¯XÌ#@™ð‰·r)}Q)Wõ>@!ç“9ùùâ•
öWúƒ_`3c33°
Ð
¶-®¾ML›øۑ·Ÿ̸ìH
½è//ŠWë9¬JŽZ¼ru2øxô§q¦£織¾¾T‹¶	ËíGÒêç>¬È×o¹øè\Š@ôíÇfÿ	³ý…âEñj@B=蕇»^ÇoyŠçÿô:çҗáâ1•d9—S<ôÙ`…fþ$‹LD½_¾?êö0Ý@1Š]î/ñ¢x)GâÎàࠪ@Ù&½S~ø0üˆêö§?}ò!f×^>âõ4g母¥˱ˆ™o·x ¸çё´âù£Î$þ¤YŠѷ÷§\³ÐÝþBñ(Þø3x¤¥y·ªpg»â%„°÷¾ãÿÍGz–s链8Y¤°~%Ç^ÕþTIñü‘fƒ:;Ó?\aGäZÝí//€âՀM…wˆ×#āI66žä\úÔÂh3#£#t
޲ýµœüü‘gǤŽ²ë« ¬©r›’֑·yØø2ÅJWû«“(^
hó‚wx=¨‡@èrÎåço€$Ù
€
Qœ°戙oó‡µÕ>/¿žˆsфÑaýƙ33gf8tSÅmñþèÛO½Ìïf\›b:]ë/«“(^=Ønšß
(^‡ÔÂ'Úҽ\ʤÿrsa$l®ȯ'Ò\dã݉»j	Âat	vLÁn~Œ]û©l£Td×úK£êd(^ïPe]díHPñzð¶¯9þ‡+u!—rùìuPî0Ü(tš›åmuÞþTY~}ÑeÇ;MÜ?CٵiN™ρì¦h` Ã~ØÇö¿«Ã<¯mu«¿°:€âՅ„x=oåÈ`0ñ¾—#58tͦÛ:È
ãK€é¢Îò¾Ûß,ɯ/ª\`§ÿ'Þ‰\pÏ\f¢ìàƷx¶¿?nûUsºÓ_X@ñj€x‚m+q$؈÷Ÿ@«“ùéÕ!soÜ/†cÂí’üz£És¬üîø%QXⶌ꾸¶ŸN»6Å-t¥¿°:€âՇma¢! xYu2ö֧aX·›x·¾dÆ]nåC»×Ì+¿Þð3ÿ7î™É)
ىöÓ_@lÛ?`‡è^íFau2ū	îÝÊ`@ñ¾ÕɲNÍs½95‡:\öËM¸¬Xµ¹nÝnÜ.ɯ?ülÙ0Ì,‰Sm‹Y&ÖíoL°+z®ô^Ç xµaM¼¢!ЈׯNָ’Ý#Nã³:sã.ǜoJòë;3ïºù驀ȋyû÷36Å5‹]è?/€âՅÆùµ
„`#ÞoAu2lôAqj­3÷/7¯Վ?¾wn–åã	7[6[ ´ÏڀiuÞ(^ūÛ|ÀtÄûÓ?ÿ„]ÎÓxïCզœˤÿûÔíãœeÆñåF¢¶a-îãÐ BcH�'Ôl°þYµÈÈ-îíWg“*FÇý‡âP¼Ú0Äfy·Ž/ŁA‡îîqà&f0îu0®–ܒ'ÄlØà¢٩é©iºL-·¹ÄT÷ëÑþ.¿®¬ÃþCñ(^¨ðK‚‹·æ8pØ)fÂ2›ÈýæÍÉÀñˆÇV.š6Å}kŸÀØæ(µ3Ó 4mÚ/åmÀ,vÖ(^ūƒp-oâPâe‡ÒØóœe˜&»`ˆÁ74Ɇ|<aåE߻¿›æ(G’°æ(÷kÑþ¯~Ç[õŠ@ñjD‚ŸZ,^ÿ/>R#ð{…–‹¦\ÙešeŽG<¾p2ó®[_UK8X€€^íN؀ÑIÿau2ū˜i8䈗ÙXñ‡æŽ2ÿºÚÄ
YPm!>V³öŸۀ¹xØþÃêdŠW/6+‰ÉÞü+Ä!l©р¹£<çڔñ_ÉÂ
Žní—Ҷæ;dÿau2ū Õ#‡/i<øçsٲÜï§_G.¸þDïáú«“(^­	PlÅ!+¤ָ¬æÃç«6™ä*z{úmºð$ïS£iûպ
‡ê?¬N x5'@u2s¬øØt066žf,M/Ñeš£ÜÇE&
M×öÿ™k\WvˆþÃêdŠWsT'sþög+‚ùÙ÷nv©YR ¥¥·Y†ý¢èÄ6·_J7̼ÿ°:€â՜ÕÉØŽv°?þ̇ʋ¦
\1q)©DۢÄ`›5o}cS¬àý‰×ñ(^Í	PÌY!ð!à#̇ɾwÝ?q!±5—ýðm¸OEr´o¿ڸ¢7x¢x¯Ö¨NÆÞö0éFWtq0"ÿڵ)��„‘# Kž_¥;õoÿ«q߼… ý‰âEñ¾&#ޣ߾ÿ·’ãðr%þ_˜ƒgÿò݉{o7Qfr–÷éß~’OôìO/Š÷5ïo~g8,=|’sHÑqè痋0Á$_µm:³9þ¹( µ¬ÔÛýÒ~օþpç‚õ'ŠÅÛ÷âýïPå&S
’Ϭ°ȋñÇJ÷ò¢e†	†5 ½6ٰ̻¢€ªeÖ'íÿ^·«úŋâísñ¾ño)‰äŸJl¢­‡";Ó܅\¼jÂ9§;ô&k¿V·×2ìøғ/FŠlËb’ï—÷÷Qû4&zƒô'ŠÅÛßâýÖhª™É?VHÑ„P:ˋWM×fÖaÙ5
Šöæ‚ٸ|·ÁäÒ$]Äm
6ü8NŸµ¿Äkô¶ߟ}]ŋâ}3™jI<Œ=v¶y>ÿÇÞy0§‘myü;L¨0ÁIö$‡IôŽ[ճî1ØB0yF.‡uI²µQ güpOd¡¢/¸ؼòæü%•ÌC/GïzçÜÛÇ\5
–@¡ûüuëÞþwsPƒÊ?Î�ÖîsñL…Q÷QŸ‰çxüöôÞed÷	P4ò{\øâÿZý½«…>ßÏp¯N&àð¾luÑwÒ8ÓL^ھFŸÏ<ÂÚz2å¤AŽ“ÌV
öNçxüöó9u¿@ýïŠC*ta‰ÿ]è;Ÿ)û‡÷¾3òÉäG²:™€7Ìà}aÄê¦÷R%¼…žŠnðOd
ލ#\+š»õT:Ñl™J¤“ãñ<ßf>_Feçý¸#ºæÝKÑýýsæG,C¯ð
xÃ	ާv[ÝUƒŠ\	?ÿyk˜Ì=¶ÏgpQդ½Ôjý¨µJít¶3ןáϷüt_kr¶O]
>¾ø	Gý›qý߿ԼÅtø+^oÁûÜN+@#	ý)°ÙH	šÇñˆ]­jÊn¶ºë®S>S¹w†?ß6ñt™p·›è^
×ïý³?±VëÍ'¼Þð÷é=V.ݹ^Ò×ö¨‰f4ýûiœPS-i71Õ
”­JªáT¾­ïݸ:yûRLަ¹Zo„…8þ¬®êçW¿+–¯v=-àð†¼;­`Ù0Û
’’*Êõ�««Ώ[}è~«m'ññØ{ùóomŸ˨×{à¤Fúé*Æ%PÈâWqùìúûNó÷¯muÑO	x¼aïn+Xó*-QÿFôЧWEDh’Ýþµ”Îz¸V5—?ÿÖõzu†êIžóAëc?
mLúø٤žH}ôý³­®Ú2ð
x¼_·zèkwJsgCJýø™Œw{ZÒn=®~ìdË(ŒǼ—?ÿÖô3ê|ëK23?¾A‰?6ôñú^ŠJ&g¼©O¬®úêËᯀWÀû²ÕKÎNƒ¨´zìzú]ɐL´֤„“…xÊ{óüù· Ÿ֯wÌ‰|€Λ&
ñÔ_¶Z輟óV€>&ð
x¼üš.õ…ˆüV±‡ÏÅu¶ZÉ&ZÍÖZ•pê¯Ü[©Æsü÷m1Wçé,tHtڥ5("ñ?©—ñʻ<½Ÿi+H#o†
¼^Éx÷Y½´©4ìæjzøéjY)k·֩„y‰Yžÿ¾­ãñ¿Tú|/øðcÜG(~>K…^õVÎ[ÚótˆÀ+àðÝeõÒý9’’ô%WÁ&л™ŠJþêvkjÞNUõó©o0à¿o‹øBϯrá¼
t$ò4šû|©ø†SÖU|?S#=>w½,àðF+ãmd@ô{®äãÞjcN³5(ÙÉ2
ٖqùïÛ
>¯/gø)P¨ÀÊñI[OŸæàý´­Ú&ð
x¼¯X½ô3¨cº%]@ҸsÝ}¡ªsÓä[ƒԒ.9`æ›Éó߿é>'†—3œÒ÷ÎZàC"ß:œbshõPìùWÀ+à}Íê%ÛÕSÏê"wœ€îæ݌·ö˜Ý¸ì$-žž)ð߿¹>®þ¯IÖúÐäùIh‘+bñ?¯«?k¾԰zéë!¯€W;Ã꥔ªiº\C
;™B«CPÂÑϏY/ÿý›èãŠNÃ
‰<|QãÿLÿ‡¯çÅ5_	x¼ާG¬`}>çêI|±Íù{	-y·5,µºwO[¦Àÿ&ùBFÝ
4BÝ}dãôÛw¬^Ú&ð
xå–á^—5üç’ ÑÃØj:ß×ç«jb¿šn
SÍ4 W¯+8ÃÏg3|!SÁó9=ÉÔ ¸"oãßók=3ÞPWÀ+àíUkHepB	¼ëл~޻˜!¹ÔB
½Pn¨¨Z/?Ÿ
÷yu±EýϯX´/ÊñÍr¥ü‘ÕK¡*5x¼Ï¶‚4w”0Ãóæò}üŒNüªvk#d×wª??•JñóÙ ¯¿K8;¡Þð‰|üÿÕ+SV/=&ð
x¼Á)ïH
?S»Î˜Õ>®?ýSº»1èÕߧÎ÷޸Q¼™Hñ󾏫z³3»nIüµä«‡†ë:^¯€÷è¾Àû…]Ätø	÷XçD
òêîFÔzÏö*Ýø^¶¯ò󪇗iwzRë{“߃¦·I:ù§Ðø1I|ã´Ü@%ð
xQO²ºé¢fÎÅ%W¯ƒÈ}¾ª>øgñb†
EoövÔõT¼p‡Ÿßð|Nÿwó×> éPü±?bKnx¼¨gv[þZ¸…yÞuLñT¦çºÜÇ+(¼Cxcõǣ{µ¾8m~~ÃòúšåúÉI&@4úîã’øO¬@ŶHŽ€WÀ{ôè3þ9oíVÉU“I
=˜ï1y~e{¢µ‘úß‹c{c{¡ÅHžë?ߡøxÓüìßú…Ľ¹e‚Hâ/YÚ¾e!¼ÞcOùÔyGî_UsI%±£FæóÕ
‚7Ùnm>xëýËÅt9ÅÏw^¯7œªõÎìp$>VâSÞO‡¼^ï±;øUe
GÏ$aާxs{͟rzCˆ{ó³ËÅ/  P1ÅÏwÐÞ͔մZcrb’›:a‚„íc ‚F¼ÄWyCúÕ?^;vÙîߦ1ÉÃr¦WÜt¹Gþ€²Ã-3ÜûæÍÏî½þ…Òë_¼m3½~/ÅÏw°~¦ª–ŒH(x˜k§ãÀ"€$žſӝ¼o†õË.¼ދ/>µãµWöÕæÿ¯¾É2¨£ s}•Ÿ©ê¥†;«vòmOW®üû¿ê¯_~YÿU]µ$*•äç;PŸW7ÎÕO* t	‡m›@âñÊê¢]O†¼^/èO@.^:º>窦¿ŸƴoÊÍÓôÍۿÖo~[ÿ'„â?ßAú¸ªjgÿv‚‰g-’øSþ9ᄃ^9x¼ދ©’ŽN÷°²éçãzáÝÄбúƒÓ=õ7·³­L~z†Ÿï½.ï¦j££Ð&Ö,‰§øžՆGž
9x¼ާ[³wTM;Ú`¾©€pIœ҃­„þ‘·x—Ÿïà|A—µ텅…‰…	¥3g Hô¸0º „¡ý``7mK|—øÉ÷ø¢d‡^xîٰƒWÀ+àÅ/¤°qµo¤
tên˜ÏëïŸtš
‰Š|_°ßv¼/ŌøùÈç«øüÕo, ¨3g i˜T4gFõcMÈH|@üä{fÖ{hÇs/…¼^ïŝd$€5¨’jjDÓOëož´	zjDá6‡&?FۨAÇßMyAåi~þñqUf¨ÿðDè‚Û$ÚŽ™BO£Äğ¹ôÑ÷&O}tiêíÄ3ǎ¾$àx%ãðZ	]ÔÄ~Nõ¦WüÁò.ƒ$$—ÿãog+™~þë÷zZ-9¯²3”	äî§ìDžÿ^䘀7Ռwd¼Ž«$ÀN}à6|Añ§’]z°%ÕNWÕùUâ9~þëó…ŒzZ§ h,4£

‹ƙØG!ñ¸í3³ÀÞñÿ,¾ßވ€W2Þ¯%ÜNšç¢:ž¦՜æSÍMhÁÛ\Êÿq²â•zùù¯Ç{‹@Ú„…ùñ÷¡p?´ÎdÁã#ñýÆÿ֍¼¯\ǫ“ƒAÍ*™>_VLKèP;èôÈ@Ødðä@Z|ËÆd	~2y~þk򷜴}û·¿Dë6 ÑHÀÐåLâûŸu$ãðF¼^žw2>ÃO«ònÕæ@ä`äpä™éã›Po@•ã9ãüi«o˹ýWçŠ1XzòÀaÔî?eà@uó$‰ï;þLBÀ+àxV9M ½ÑññŠšֿہIƒÏWE”ÄSÕ×7ð×ӏ¿ã\¸‰ˬ+žPؽ7Ú7àá#xøø8ŌҶÄ÷ZÀ+àx‰@Ðôùx¹J.5÷ü@H{Ñv&jâ�dËäøëé實Ï^Þk(öúaT±AB G4ø6t$™Ǐ—ø—¼¯d¼8‘Êá =M/¥ÚÍþŁIڀøx?E[œ¿ž ŸJ܌ßkŠíÖÜG(˜pÀížû(ÛC=f¼ÄO~gÏË^o„&×\êt"ÊiÛGw“½™<=]¼sºHÀ}8zåÝ	IèQÝóøñÿ‰e<%àðF¼£œêqpÕÖLUevs[ɮWPåL¿žÕÞù+ ®)_]f¸7ª@`Âa¶1;;>«=	vÀný8܆ŽâÖ/ñ_³,ëoDÀ+«“y3û9c™˜™2ÖK«‰æ6Ӓ£o"®N›¯‡¿>•ë>\hfy׃†	†ۇBÏ‚j¬)^⼑¯¬NvÕu1,©۴¢W=Ñ\é0­Ý\YÑÞÜ×^î­¨ÇÑã7<>‘­(efŒ×óèëK]¸Œ°EÁ`øayw¶¶M#;¾¦x‰ϲö</àxeu2—TR3Nñ
*»D æÉl«Åx)ñ‹z¾žœñúnÙçö2|à°Ò(ûxL°`Ù\TÖ/ñg>9´C&×¼‘¯Z,§« ^§WgH¶WDzOÜôõØpCmÂhä7+þÿ“To „—^ßõô[1³´`˜¦ÕF——g—5–Ǘ¡uà€"èq$ڿæx‰—ëx¼¡ӓ¨çQGŽ?þ⋀b`°^Œn'&óÝ‚L5ìPÛÈÛuoå5ɦØCêt‘ ËF³¼»Ì!¡Gs‰C˜¬'^â¼Þh€÷ØË^§Ô)‚ºú22G§ è4ÔpP›}ù͍NjzQåi׻OíVâ²_¦KûŒò.ek:#ãmSֆ‚”ݭ+^⼯d¼/íK¸9=¥/ßE¥	hÐ+rn±­´ˆžØG~ÓãYMÞÌ¼¬«é›1‚®O¶k”w}Áa25;5µ<…Û<›[_¼Äx¼ï±c.ћƒ®PU´²ۋ‹+‹+mèf¹Å6þ´Ñb§7°ÓêxupķN²9oôËr
}¡¯ÞŸš&tÀyîC<Œc¤õÅK¼€WÀðҪ1 ÍݪM<k#ûtzIüƒ†‚ýäq›=~³ãï&q©‰O‹´ÂTÞUŸ‡fB¤³MÃAƒãºã%^À+àxsš¼םÑÜM(xA§3LÄ4ìÈ{¹¦ÎH•cǷH|âÓËtaƒd‚˜ʻ«a$|Lm¶V›ªўõÇK¼€7Jà•RC.‡]{m?¨kÜéꦨÅ9:NžŽÓî-ò\qo€Ä½òîT
E €Ao׺ìçªIüâeu2odÀ[PÙnλ]-û/‹:{Ô?¸Å=%–ݏo~üÿþÙ)s
Å'״^§òn ÁðX¼ďÊêdQ¯”@7_Ae쥘ªáÆöóÍo/ÇxM——¶cw58$h›ƒ†Gü·ñq¿þøw#´:™€W2^(2¸”ï.=Ì#õ¸¸Ý<ÈO¬Qyw¬V«Aóí'¨€%`PÜ â%>:‹äx¼ϥ°¾«¹›\Z¤ú)µíäñþå˜/h©ÜÀ`|€ʻZž¹ñcäQ´oñð
x¼Ïì†ÕÉ
ÓÍÝ%0UïùEæñ¸ÞˏoZüÉ÷ÇúeµÝAü°¼K´Õ#ÊÌäPæcàâ%>2«“	x¼ju²¸Ç]Å05öÛ·þP}704.܃æã©ÌpoÌ€	s›Âd ñ?þn4V'ð
x_ډୠR*¡Į
}ø%æ78¾õֹâÁaJ`%±Ÿíó®"+R}q­d¼ÄËu¼¯¬Nöeä ԼOòjÜâþßF暐}áM‡¾<֯®]ƒ6Æ5x‰ x¼²:Y¹û{v΀³®$Šã"ö4y<‚õ–U´ݰ¡ŠÕô­mȳ,¶𪄦)à,—V@>À*wicl²LÚϳç?3³§÷dGz{ï$—wþ3½çœ9÷¸¿N§ÏÔ6”ñôôóšv¦$ٗõuù?ܙÎ÷׻hmì±{üÄ¢ !r{ó«©+àÕÛÉf/<wOý\îè‘6˜©>!¥š^¤ÙìÓêµøßÿ¹5ß_[[Ç\_ÿ,BÈ!Ôÿ›£ôÕÉc.¡ƒˆ„IRß~õ+x¼Kó;^΀CS~êÁXÛ52D‚_è£qbCõôþ©-íÿ°±7ß_õØĈòf´PZ”†AÝÑhÿ´ûl—&Ç
¹qÎR¯þe¯‚WÁû‘ÎÚ:ð«-`è÷œÈÑEmO¬E?’ß/è߹䮵PmNã¸;yò¬µ$LÔ߷‰+àUð>°$à1LŸÊe½PŸFx¢_Ŀsï×,4´º¶J“cK‘+lw3Šk2æ{êïѿ<àUð*xÔÖx4x†b‚_&×$q¦¾éÙÿîÑØäB€km²¸Ƒ%ÖDMÇоÜyAmþy\įþ¥¹Lkà}›Ðg±bb>ױï—Q۾üDܻž¸¬TŢt^ã4™7À ÄP9«„_ý¿}»4·“)x¼–ñçCª#3ó5¿ßտýúwö¤«å4	ÜÅ14۝Ñ ÀȬð«ÿáòÜN¦àUðššä1hhX듴…M×|˜ë.þí;{Lܲîgva‘K`ò«‰.ÉQðêídïÿێrRÇà)ûÎe¹ní?ÙÙØ;˜ïk1wQärQŕ¼‡ ¹„ƒ¬%PÊøÕ_
¼+Rƒ@¹‚Wo'û©6 ©á3YÔÖ zÀ6úuˆ„û_î��ÇãC(@7EŸóz)—’~Œ+ü“ÈÝÌÇXÅüêïýv²©ñWk·“½µI d-Ýås›VM,u4ãûWú·_c‹{|xcá¿
B¢W̯þÇ{½l…5@ø*xõv²¿jW×Κª¡Ì`«Z§}ÔÎ8àk"&úy?Îâ÷&ånf³Ål±Ø]4>|*±Æ1õ/f»‹‚~õ÷ú;^øÌ^¯ÞN¶å,
pz”:Kr5EçŒÿÕ-j[ã}pÕÆw.û	¸þLa|H“MVìe”§½êwãžDq€À``@	‹²~õ÷^o2{¼z;Ù=ë ëŒÃ^ÖàA9JgC‡kƒ¯:öoï<;\š€ž€dŒY€Ê~þÄÝùlI`\îs*íWoà…iÈìUðêíd¿ ¶³”øTԗûÐè¤#©ˌJøDŽ]âî„àÅ ÈH¢¸_ý½žžÐ[Ö
^ý¯3¤Æ%ˆ$Q(=`‘‹ÕöӍ½w°JÇ!±+9TدþþÀë-ÝÙ[r«¬àUðÚ]‹f”M0vÜGî¡{?œ(¸×äDܝ]µSËA„ca¿ú{ïJyu‡¯‚WÁË{YË;_¡òÓ¬‡ÚUΝnGݾÿü勳³³ÎÎi@0°!
…<Ï#©OÿùÇOIçS†‚Kô4Ôþîà]Éê©E¯‚WÁë€Zùé*ƒ:BÇ~Õ8÷fsóéÕàEÐýû㧗(g’¥ýêï|;YºÝz¼
ުr•Goâ/‰k€¶rÍþ&é

̐·×5øãß÷ð¡OgÓébÊ?¨©åûP\kFõ_ÿqçÛÉÚP—uèUð*x#_#`QŸƒÇU³ÆÃxƒÕܤÿMàîُøÀ’`ȯs^ޯþη“å±ÛzùåîäUðêQ!-nh)C\WèzÈ!å>j7Pÿæ+¯Ûñ‡r°à^>/ïWÿ//Éù2ì~GjÅÞ½;‘Wk·“½óÛÈ
2ˆ15ªÉþýñ˜áébš×r‡v4=:Zñzi¿úKWWH¢´õ޹z¼z;™a°ž~ÈÚ'&‚.¤ÐÐüé˜á-1 	™£ŜÁÀkê¿&ÿÏÝn'[‘ÊS7ßöÇ_M^¯ÞNæÂy)
ְ
É~x‡ë¡ùã1Ãó-þ°¥ø£°Ȁ¡¼_ý»Ýn'Ëq—©û}SÌÞNú:ò*xõv²­

(‹'¨¾äeî®8˜?rwç_öζqìã}{î²LЏ8U道´)¤ƒb›Dë+R¬¾OéêúN0iU¨YÆîT,c;I”¬Û÷mf4úìáó3iriÑw˜OÏä›yï[l±üa4’ßꊋ•U‘é;dþSû¿é{¼™Üýn6oûôböfÕɥÈkàµÓɢߕŽm†qhäçÌj…àM³Ý^$ËÙJ`˺V{ó›%ÀkàµÓÉ>D¤8ŠGt‰Ft§¤cÞc®õ–ü¡p÷ºw	½ð-¯ŸÞoþLð–ç÷ÉzMìý^)‹½°C©]CQòxít²> õDD¼x4z
;gÿò£½ûÉWQáù€y~óW^ÅÌÍ2!­·³Í;àëÐ4›¹.}K’×ÀkßãuӠi”Ë=æ»lޒß"û˜	H÷Õâ7eàÕå.ÚóD´¾_{I~ö*a)½^oAðreIŠG›xx˯c€ï­øCÁîÝUnv{É#£÷X‡ßüU×å.ãõݻYíösŠöB~è~ïù²ä5ðxYR<¿19O½ÿ±Üýk¿yPÿ²O#]aõÿۧÁwYý~Y“ßüWsØemÞuÂíÞ |ì…\è*P³òÐkà5ðf‚7…#H¦á#àÂT2ÄT$•ç[ñƒ»ÿæYC€†<ì”ä9„ÔZm~ó7ª/‰ì;B#˜›]1|·‹f¯¾@.„ÛAÞà5ðZÅËÕÜ130c½v?Ú]yàµnû·4d çŠÌæ¯Éÿ¯ŒÓÉʼ›ݖ¿Ç Ø
E’Ön¿
{Eþ:·=ŸÝ/ÜËí~±âÌÃV?y
¼Ùà5ð†Œ1&[$S‰E:ùê_¯Ýî^÷¼|vÎ͛¿ÿÏåO'ó¼íöžHIìì’8NiÍe¯Ë^èÌ÷;m¢FÅFv—&¯×*^†
~äÊ I^6H¬֡ÚüˆÇ6«×ïÑÐ:rù0}þo:$ÇËÝ?®“	ÿîDƒÔln–OÈËeoìõˆVæÛä©ö@¯—¼ÞlðxƒŽX\mF˜ã9ç¼ö‡üsð€œõøÿ*ºÑ~y˜¿àU†6Ȥuޤ2c•ø´€å2—µºO¼ÚͲÉkà5ðæœN†Š“ðñ]áM>½BŒ	%=fbÍ~´ð@ûpÌ}{XX3}þŸ¾åt2OÁËÿʪ´]îç͖$\qï€JâÀU£±™%Ïj+E/È[¨ä5ðÚéd7T\2Àg<b¾EXéÅqèÄõúm†ÿx«­۞†ùëõÿòsùÓÉüÜ%-OÓæ÷‰_;F/È=h¿WËUy
¼ÙàµÓÉFjG¦£FˆyIÇ"®ӏöîG<ÀîCž
½nþºý­Veàm“ð[ZëäyQ³7-î2dj琷x
¼v:cL~ðÂ[z):57®я6Ãä¶¹ðJ­qUF£~¿ùK7£à%*n’ÚíWÍG}´óÉë-y
¼ÞüÓÉÂ(>œ çñó¹Pçjó£ÍðI?̮òª0¨v¿ùˀ×ÿ•p7öI1ô~mŠÞë.CnŸ·pÉkàµÓɘfƒˆÐq k(Æ.y{Xm†‹ÞïB¦’à={¶à
‚Æ<)¦ݢÙ"¡ː«}Àäm“Š”¼^û_†G²éˆÆtÊwˆXG.¢œܧ4âúüm†ž_W½+Öjö›¿xÏ•æ®|Œ±MŠi½]½×]†<ÍÉkà5ðf‚7v@'w`§bϞºüh3Lz“—ÃÀ™ߌßü¥À{æi4ÀÝæ")ªÝ~™¼\ÛÍ”¼^o>xc•”_4ùÐũKD{×ã…»w?âáM߯&äXjåäë÷›¿xϔž6ԭÝ%¯«“W—¼^o>x񾟡ǯ‡’óiL⫳^‹gâLôÛ1'
ÏðTâ7ÿU÷êjx5v‡Ý.ÏérP¶¿Q¼gï“5æn«uŸ¼®¶š
/¯×Z
\}Ƥ(d΅*>L¢NJSÅ,ì¯O6CoØ'Ç
Šcò ÓÖ\@`_å~ó3k¸Zœcq~øŒÿ—§“ù
^ÝhhµÉ+k½*^òx
¼ÓðXTÆ4•¢R4X¯󅁉ušÔà…»_>êª	±ÿ­­ÎATì7¿Y@XçX>‰ÓÉÎò
­Ö<yu͊—¼^/Cm0˜€BõA×sY§˜Æa#ݎ{Nï»×7ª*óʫ
sì«Ôo~Z%•S öøÿ~~~þ‡f³Œåƒ÷,¿ѰÚ%¯­õ¶ᔼ^oþédS† DS‰§ÈØI*s¢¦$ǧõ£Í0Éà¨ìª��•á'Î8àýu X6w³
ÞÍ296nÉkà5ðæŸNƤü\¡*õåȟÔ'õ”ÒwVFB\¡ßü€k§ۡȓƒÄׅþv~þç\ð
ÇÊr÷ë69…æRòé5xít²® Ù'œÒx&–›³ÿ„þ¡Kßf¸éN¼r!ѝti¨Eäªö›ßَ(ÂÐåOùSË^R!î¢ÑpŸœDõw~iÉkàµÓÉPu’xÂsN)0ƈ±Ž'ó_vùÈ$ºCÄ^¨Tî7ÿxÜwhŒÇÝq—FÇ­¤öÂ,ÎÑxÿþð²ò¹ëþêDk–œDëY£áï5d ×Àk§“
ŽâÆ*Kh'q,	ÑtàÆÐIüáõ»_>XYÕØçÉgÈëý•ûÍϰUðíx%k°ŽÖà%år×m4,’iOà
܏×rÈkàµÓÉPø6㐰Kã7‘€ñdLCrã.æ~˜¿b'
݋΍ŽLS+±ç…/«w›óäTÚ7½%oz
¼v:Ùå෡káî§ñ籀A9CJ:/ÕçîanþWð¢|.R…/tՋ9+¼¬q
ÞÕî´à
¼¯ùÉkàµïñ~#ºûõ½î>èUZêé<óWð›ÿQÿgïb›¸ò?~?ü•¿TÈRh“ibþíRØYÑBXËhWBBBȩh´f‹´¤e{lT©’‹fïçÝKä۞ÌÅ4—ˆ•2òø°hH @’8°Ýûmßï½ùÆoòž=ñÎûxð̛ño3u>úò›ç¡ØʿEI¸í:rršxͽ;Úͻ+/×Ö×cÖ××^®¼Í7(Î#òf`^'^{8ñŠÙÍÛ÷ï
îܽC°mËk‡$vˢÞÕCž̻ɰ;[œ@¼œ-ª %M¼0XïâÆÚPçg’­¬­nhÙ`úÝ嬆q.^]äի׉׉·rƒ^7è{ãÛØRÇücґ
£õÖf ¼(² °­Yò粩wõI
„oI¹|¡
¾wäÔËöA¼ô€2R¯F¼„ֻ„ð.¼/žëüør]u®jß]È÷Ñ8"¯±yxx	²ŸDŽ5±ƾŒë‰F“hô©Ë\,ÙԻzTjëÎê(‰©eòí·ÙâøÌ$ÄK“ÅŒ¼ûdIgÝ͍4 ß5òb<y
ÍëÄëZ
¢DEޏ±´ãÌëi6ïwNbڤ¦lgTïêyzErÚm›·†"ÿ3ó‚—PÕ×ÿKˆ—¡SXªw©í]d]6ßԽÏè¬Ñ"ÑF^żN¼.ñîwn79e½̥’Y½«鵮M»P/(‚ú…ºè£=ñÍÙááC	ñ¼éޕo¬=R»éaWep}ÅøÞÚÌdzä…zxßœx©ÍÀg3$EP¿[geýN-8æ곫¿xeßÖ³­V‹½KòEêȇ‡‡(â%‡½‘w•ÛjŠvM1½OH¼èòš˜׉׉w¨\ÙÏü‘¬Ûlú÷ë¸ð!µïH2 Ø9`íê3«uÐnâ崶¶¶Zä`XW¬vÂèÅËHowï®
nìžAõ.ÍÌ òÊ͆®æuâuO'»x©²_¹„6ƒ,9uÉ@Ø/KÃÕgZ/ë³(¤¶8b¹—>')ü4<üÉÄädœ!^ÂػCŠw6ގÁuƒ¯y¥ê½k£׉×=ìëÊ~m†û÷ë÷“2 ØN¶ˆõÝûwق1­ñYŒ]}fõE1.ÛY—Ìۢ¸+¨ù4dȽ^öù‚¸áV{~:ù»™ÉÉÇãìØïûÆÞÝÑß}‰¸›qê}þB޼&æuâuO'›â½TZÌٞKdROq—ºÍ<.z CL»úë‹@ò.Ã÷k[1-ŸFRæ¥7&^
Ȁ£¿³OœÉ;
ƒA¼ÆÞ]MzÝÝÌջúø<E^ù¼SÌëÄëžN¦ü
¿r‰-ú±žêi6™·Œ‹hĠ®åc®>Ûz2o½Èo±}WÍgKkwa^N	ʕeMâ=–ËåNã��¯uó.Cïݵ·ö.xiÐo@³¡“y/Ç=¬°g34CÑfP€”cŠ02¯wõ¢^ɯ”p…wy95ٽö’ç?pñÊå`ޏ‰X¼ªy%ïbï“¼Ò'—­>$ñªæՇ^'^÷t²K”1ñ†M»cÜU˿Ân,%Ée]ïêEöb@»%Ü-	á]{ɴÚåܺ53–ãŒñ¯
3&:ˆWóʼn§KIïnì)›k¡—"¯‰yxÝ<ÞKûJüá¹:xUÅe;ìë]½¼üÚ>o"ò"ó²v>¹ú֭ù˜ü•úާÏ2ò.H½“æ5lô:ñ:ñ"z*Ûɠ¾Òä„qؕÍÞͶ"Œ±κÞÕñÎIõÛâ¡/[½_PBâ=ñž9Dþ:*‰7mïrºw³¿ɶüT6oçF¯¯ûæɎ!	cnMõ8Àñ=®ÏÇm† ^÷+!`l³ÂÛ؇5põ=ª/
¥Âܙ󈭾J杅z¡]!ÞÏsÛ:J´gf¥x÷aVý]™ôI½KÌÍëÄëï>l3töcÖò>WߣúB‰y·T"¢½KšÝJ†’y‰ ü˜™ã¹mÎL@¼ūÿâæ‘eÁ`úô†‡Cææuâ=ÈâͳÁßóçÛcǂ_íq}ÜfðK @¦“@öõ®žÄ[še—E޶GÖ"^ÄˑÒ.ÑúðtNâz
$^Bõ®<¡!cï‚M£vƒlÞNêuâ=àâÍo³­LB±c¼тOíe½h3DÕÂυN°C?³E/wõ=¬/ʼnw.àÑPo‹¼ŠÌ+ヿ}öQNb¬m/xKßhP&4¬n{í:÷î·؜x´x…RwÂý(±³ýٽ¬ßn3¤“.	WߛúÁ[¼B¼œ°-^¼h· ߧs2LJȼ/ÑѻCËéÏgèÉìðæíÚnpâ=À⚝ÎçÙBTóÕi±žfTùcúŒ|5´±Wõ>O»ÔfP„P¢>¢´?
W߻úA†`â
Šx[aDêå¼áàÓËGÁ¹$Cr—^¼ê5ջö½ύ½N¼úédռ€„È܈‘$ÓiýìI=ânJ‰‹]ûԵ|ÜÕ÷¶ž#/¯Ä"õ·v…œmóÒÂ	éórIB¼ЖòONèž|¾¾l6zŸ=57¯ï}:™^¢UE¢éŸy‹úJÔ$Bõ§õÏ%$-½°Ÿp��xËRâ%ñ¶¢0‚y¹{ˆ—ˆrñA¼ µ{¶ÑÒͻôÄܼN¼óédyû ͐— &+%ù˜«ïmýœ '^˜4RÄ{:’2/c톹œ£±3TñÊÞ]N™Ð`éÛê#só4ñºĻ_ċ»j򅮿ðõb®¾×õdÞv╼µó²B½~¨xW	¼gFÛâÝaÞ.ÿä&4Ø4/xln^'Þøt²bÞ2—|áÝp3ÀXEÌB½«Gâ-ŒZ^ˆ7b/]äm‡^ZtÞ§¸xB¼
«)7Öì™wåá&7¤›׉÷€=ìʔh·¶xÚe,׼u}Øäš|®4ÇùBÇ>¬ԻzY¼í/Sì–BóúaìÝ4ØÎ׊xÑC!^ÃFÃÚFøÅtrC'ó'Þ#މö<Þ*)^|]íõ˜Úo3¨BI…zW/´;ǽøyŸÁ3ìë–æö'lzAD:Î)Qīo4Xhð
6
̻l2­8ññ=q*wú‹kW/þéz‘„H‹øCo½ûQ$¾#¬"eŸúÂÔå+W¯±ßá_®×-¿ýz!^2/EÞ8ÆRŠÝRxGÞ¹W¬£Px+âU
£h4¨ßX³Ûm0ŸV¦Ðçâuâ=|êC¯͗×X‘¢'ã|،"¶”“7¶ͱRÿ÷›#Þ6#W¦¬œ¿ýzÑhˆ¯_AàÕF^2/#–.ÿ ê]âDñžëØhXÁÞýo^¨WOÿŠ׉÷½Sÿç%¹6Uݺ»&½>1šÍpÎ\úmõśÞ.~máü­×C¼\½~>¾aF:4‘÷5©7Œ_}î#5ðžWěÖh@ƒw›7]½DŠ׉÷ó“žÊÍ _
 Ì TÙÖI42
ªôÂqªâûߴÞo6)îæÛñBiaanaŽ-lS¾Ð防Û6ê§Îz
#ßZ8ëõÔf˜-ešÓP—$T]ä%ó’{‰8îjïdB¼ç
›XK7ï’j^õöxx	ñßî‰O<Wg¹IŠlÁ:‘\!Õ@’©’pMëMê34Êҍž½aM°Ýƒ¼Û6ê¿ò´Ü,Y8Ëõ,›—Z
y!ªfF¼ØPãÝã“B¼G!^m£á¹:“l_›WVoº{ûM¼N¼'ÐfPÍ[ÍC©%ã5‡lÊК#§µq}Տˆ¦¿°$.ZË"·íÔëuàÏÎßn=‰—xoûq§±¥’yÙ¡_1È)üfF+Þsê3¬5ÀKóRvWBoš{ûK¼N¼Gþßëė)H´»%FMz)2H•„úë^G.[8»õå8ñժ˜Nv;…U��^nÜfïŸъ÷\¢Ñ0ôÌj£lšší¨×=}$^'Þ÷N{]¬TÈPÅ[Ð7]Œ•z¥ˆ§Ý(,«	‹ք¼Ð'lÔ_ø‡י)çoµž'^ˆׯˆguŒ¼¯°®V¼ŸÏ$[
ŒÞŝ5‹0¸br‡
æ…zÍÜÛ?âuâóº0òû øǟ'æØÒ^ËûææÛ;`?°Uÿׅk%ço³¾S
¨ŸäWÄôܨI^ÕÞ^K’S85skr<!^0!ßY3o4Xÿ
Û
̫¨7Žý"^'Þßyݸˆxºkª&mN0?_ž§¿¦򋚠1[”m@"`Ž٪ÿƒו¯,œ¿ÕzNµÌZþ¢Óàû¼úȻøš‚Ör
Gx§á<ŸԠˆW{gmpÃ&뿤óìŨz¡ÞôØÛ'âuâóºs¡q·ÉŠ»:ÁVú‹`¿½ú+^WÎ.X8‹��K—&ò6ø´†&™Uy_‹½åÆf:ˆW¾³öÄüáçv§6€åQ†zU÷jÕÛâuâ=éuçrðæäåqÜŅØ %*¬•Ïث/Œxݙ²pþÖë«ejòS«¯>ò2Ûrïrr*‡…xGñJ†ÑeûwÖ$^š˜—ÿ?JS¯jÞ~¯ï/…³ÁSÃÊ?önâ"î|Áߛ¿Çåa¯þ;/…¿Z8›õb<Í2oœxYä%ñ6õâ
I¸p¯&ðÞbâo‹rJ|gí‘ý;kÆ7ØÀóó²zõîթ׉÷ÝïʗFq7֭ñµù]µ1>{å{l‘?£ì³WÓKᚅó·__½†Š_	o‡ÔäåÞ]ÔÌ([\|@K·ÀKâÅsÐ'ÔÀ{þ™ý;kÆ7ØÀêC2/ú
P¯æN[‰׉—8î¥1õ†â¥WÍ,ðÖÂ(¤UU¾ˆ‘ªäžÖ؇m€}öê¯ziÌY8‹õåi.Þi&^º»vƒ7yQ“7yu·×uЫCàE§Aï„<•,ýÎÚÿ>[´|ƒMáñ8Ô+¹7]½N¼ï¼xå¼4¾WzêX	»5zW¨©q—Ä۾•4…ԥ`»~ÄK㎅ó·X?=MK•¸äç+4¯M^ííµÓpëêï™÷¥NÃNJxE£at)-ðnþûWÆò>kó®>?¯¨îílÞÿyçÅëï^—/Žxg¿ƒ8‹úQM¼4ǾJŒ~Œwë_Ò'q1ǣ{œøßf‹|4/.øx$¶1‚¤cÛÿ›HdڟÇAí'4çò%BvXúy^*ôI$BœKâçÅà¬Åϯ«çòCœHËícҹPú;Èÿ|õwF#ò;SΉ¸®þ<ù÷9rö_Óq¯aö§ááO~Ãï5D[Ÿ~úiKy§Ožü §pLÞq.§ØJ»¼åügŸµyWŸŒËêåèÕëÄÛ_7×ÒÅ{Ñ#èÒ ¾›ÑHrD[ôwÌøØ"ñ_öÎh)q-Ã×籫\"ê î#4tS¥„ø@TñóvSs×(”¡Ê0€0	ì•ÞÉJ²1²¾S}NçtéE_|þü{­0>ý¾îП.ÖO¿þunðãךÿúïÙÍÍÕ,;sðõ?åÿ•s_¿~Íá+ZMo^Q²c}Ãâ³ԼÀpÔnßßÝõpãàmޣ#oØoNhŒõ¼ÙE¼¹¡¸ק–ú³Ð=‹µ‹¾..â­
յxc­ekipjŠ÷ª4C¨Ëe¹Rñ
¼Mv´SW8ðŠFÉ4}ÃêÓLóÆ]­?µïz{‘z£%^:\+T.~þ]h2’{}já?áӕغøëúé<µ’Ùóó³B‹ÏÝÜT2ËâÌIa¹¬W+ED5šð®8ðÏA&^`:è Äîöïóžæñ‘xC.^ñ8Yé¶Iø"< üތ-óó¿ËMîm-/ññšù—ED
^Gàm{Þ{\èF?S&f8l? ëzK¼$Þk‘4~ȷ„?Â^Åۨá°0üÛÊΜd!Wqàm4!ðòâõ¼è=kÇãNg’0ý«3æŸduXÀ`Øλ\×Kâ= ó^‰¤Ñ ·ÿ2ÈáT0g]ãWfæ$·\fŠˆKV4àÀ+nx!pŽßÍuFлăήh=oó„\¼$޲@5EQ„/YG†zÔÅkøÓV8H3ĥRu»ÿ\xÏÀ;±ˆGÁW¼àþ]táÅKâÿðŸie…Póï©=xƒ}9÷–gNª…m¯j¼wž
ïØúŸPñ¶?Ñ=ebÚؼ#^o¬ìxe!DÚ7ò~‹ËD>6÷&gˆœkà…WO ñZWói˜X«l+}C÷)h¦ƒ7›WEæ%ñ†‰ókysiÙ¢ä7Ê[I¼(õâ‰2<Ä[b»Ž+Š/è0Æ:ãØTáãx0I|·̋ÄûWØÅKâõ±ÆY<•J‹!|Šéh" _›{kâÈ{Úl™×ô®‹x!ðöqàş󵕵>‘¯øw6ˆÂ	yC/^/ñºååïRŠØÏE”J,Mìfê½ó6³ÂÈ{/ޞKàÎûÚ<aÿœÿbּÏOǓ/ŽLtހ–âÌ{`â%ñÆ2î™÷{)¿n҄ùófc©ˆbϾVèófˆ¢2x׶´À=¼#xç›x»}±Îïòmðø3\)fÐNCÙ@â=$ŽË3·¬–Tó͍·Ÿ^U)Yì
fîµÔ+Í‘7ÉvÖOï:_-œØxW·XõÇÆ!9_>¤Qä=ñ’xcñª³n8/KêòBˆšm¸Éä#Œ=üB赊Þòá¼·
þ?@ž¼÷øޕÎóÌÇ\4ð‚ó53ò¦ ò’x‰'&•ª|bûvšT‰ג±©÷ªS#M`öeU/+z¯ý×âëI2þÝÂ@Þc–ìØxR/H:çk)ˆ¼$Þ3/¨7ž©V¾]ü¼øž=ÍÄê•؞¼š,¯þi|\¸ɕ/UH¼ŠÕ6ɲŠã•ò¼w¸<é¬^Ȼ!ˆ¼ƒ;ˆ¼Ð5xCŽäàD:1ˆ¿Ìßԉ8YÿKÚüȪG›‚™{­Ìë?Qo¸T˜wâMᣵc,^‹硭ßM„im”F‘÷¦xÿ"ñ†	©×I}O$ÞüºëeGl¦x•,޼8ðšÚ5<K6鮼t€	3tH"†ÈKâ=$ÌÉÞ »­Ð™·àyc›ÀÛïº7
m—ö@ÓÝYÇãñäñØô3ŽYÞ^:Íw
$Þð#‘zƒ̛‡ Ê2¯ÏDY¦	/Zó¼r×å—sÝíéãxSÉ+;º†C/‰÷íòmAÝ%ò‚x
Ê3 ’Íf+ÖDYµ¾¹Ç,`¤ð<ZVºÏ çàtvç>
â%ó$ÞÝ!ñ®╡å½ín†DÞŒ’ñMà}´æYò«/OÄø-Ëk¦xS‡/^2/‚Ļ#$^•¼MƒVÕ~¤–ÛDު
5
u´µ†î%;Ö}è†0ñŽätšÄ{hHûG!"‚*	áÌI¦ykŽ!²ìú¡Öôjêu÷­µÁ½Q؃~øÄÛ&ñ’yI¼{„Ä{›…ÀË0Ÿª2ˆ×Ù4°àÌbs­áȋ…èp
Ä%/‰—ÜKâ%”úëÄ[çÄËZނãn3ÿ֚¶Š^qi¼=Ï+oúbó†iœìžÄ{¸xƒě·µ¼NñVŒÇˆ—«xëß!^`ºÐýÐB²@Üq⭓xo€xãŬ£j0H6ÿœ­Áç]hð¯Å\÷e.ñ>x‰m‰ˆPßþ'9³/«heÖò–aa>ÍNmyWÅâõâFº+˜=Å]èšBUÃk ñ$^	‰7ω÷š•\Ó`ñ¦âñn]6,Â0Æ´9Mâ%H¼;B⭃xᾆSrsÖ4ٚ¯ i˜∩¿Wͫ-VϯÝØvÞ@O¦q²W@â%H¼’C¼ªM¼—Eku-WE¶º»x½օ'OAͻÚyy¸­›L‚»œ¬¯x‰­	/ò.oª
1×I†ïóÚօ۸iÀ5ïÞ7ØÀç«à*Þ;«â%ñŠ!ñ$^ÉU¼ÖÖp
&9לâ…9`ٻix×6ø¦“ îA×/Aâ%xêbïâŠÄ+U­fQ³‰.ið؞ðàtñe+HÌAU¼=îïîã%H¼ސx%;iPä7Cæ¤Èí­á›xÅM˜wßc
	ñ% Š·
•½‚§x/+g¯'ßëwè½|½ Ä+y+\GۈóëjˆRCáK^´í?ÓLŸ÷}=dWgTñöͿ™޹F„W¼•³](ïó;(/Dân¯٧Á~mqʟ®ñÞõk®æ]vi˜Ž 1r5Ù@û
WcÚÅ{Dâ%Â"޳¨îõ;¼|Ê{‹w‹¥aûúƒ’,rÌ0ɵxyó‚w=îiŽ'“Ç)û]§£=/V6é.FóéÓÎ@y1
䆜îC/½ޝ ñ*Þ$Þíîj°Þr‘#;C”¹®a£޼ôŽõf¾O&“ÁiZ¿;ŸOOocª3æA4
ڃ½oï’x	/‰W¬]λxKE3D%ÆE^ﺧ¥KÐ.ðç⭌DûÂ#¥a/H¼‰—Aâõ³.ò.˜S>-^‘·À>fXڅ¸|›ÑÁôiàŠ÷ݚ†îÝz°^/Aâ%ñúJ¨;½«Ԋvr3D6yoãÞx×/~÷„P¼OûÎêž߻i¶cïBà%ñ$Þh‹×Ϻzե¬¨բƒŠÛ…"ƒyéMàUø·\:ZØÁþŋƒµ÷iÐîßn¼E^/Aâ%ñª¾Öí"ï62EÀ'òæ@=i»w•†ç98òÆûL¼m¨x÷¼=ÑnúZwøö,
àxwÕJ\t‰}ÞÍ‚[ˆ´AA“M|v\o_Ð×#MMEaéèu½谥±l‰³›í[¬­P–	¶±猄tGb;@öޛö›qž_f37øý£»Å¼ÝOß~~3Ã&Ý7S¦n.‹îН†W§ámx3¯>«.²KÝÍüÞÉ#ïʝ¼Ý[¶³/[Kã-·ã†ùáÚÜñ0Y¨÷ixcÝfz»KáýÓ«Óðjxŧû¨‹ìwËÛ~ÿË8¼cê~ØÝÝ-?Ìþ­Ùìç.[K¸m–;DZMøLÆêý™/^‡}Ÿ††À.qWX4hxg7
¯†7#À¤.q—UµY½ßӑ÷ɇ]›W­1€x»è®ßㅃk†6ò½ÿ™›Ê]™MÃÂ+Ž»讆W§áÅ4¼òìâ¼[²Y"½+Öúðï/ïíÛ
(/Ý
>L曫<ò"‰?ú¡?¿Qv%ÜÕðê4¼3
of^u]ânÍf‰ô.X֣Ûawq×&•²™!½ÏÝÜéT×EtšÃm°B®xq\؇xO|Ç]X3ŒºKàýFë›yxü¶·2[ðf^yvÁ]xEzŸ2z6`µkVcaàn–&“£J(?—½¥|ùE[jÅkZ„]:îŠîjxu^l¡ßï/μ
/qWT/|€ߢ/¡wÁb­0vqÇ@G^²ËÊå„;“Éþ׾
Ÿ-õi™ŽÛ{mYÁã®讆W§á•x€wYâ$ŒL%SáÃû0ìN3²‹J¶“÷¥Å[þ`‹ö²´\Δ^ñb‰&2­oKõü™#Ñ1uWw‰»sWÃß4¼ÏÒâkxÓa[úÕà{òù3øj'ŸO^BI<¶Õ
^w%إ/•wÝòšoûTÎQvs¦)^/,Í_[yUàþq­àzWwEw5¼ñOûҷ(—é§}kQiâ]ށý´”¼£Ø`Ç†Q¿„êüKøq(xCu×S·V,—xåâœG /éý·–WÙö«ͱ@ÝJvÅKr•åó¿Pśþ†2ðžš,aÜv©»$殆7®ixd\^½L¿d¯W#\5¤6
㠛Æfãêr‡Áۤaä/¡-cïι×á :x‰»„ÝWÅRÁV)ï3YömÿŠ–W5àoÍÜm&O~Åë+oGuf%3oÂûf+¤§QwƒÆ]tWë‹ÿÄû‘ÜíoDoGÚúp„Ý1¶wÐ۟
#‰cðÈõHv¼î"»{eª.T-æJ¶e¦îE ¼“U,W+…B¡R)ýóÁGqž¼âÐښë»n‡àPž.ü÷>ãî÷Ä]Ò7Þ§á]´P^pÞÈV
‡ÆL®z}€›†¥n½­Kuº	¼îþEÙ%Uí€J–WËÅÚØV¯>âŠwzy[	Õað`‹–ü¼í:½%îҳ»¢»Þø§á¥òRw£šxaÐýUüV#…¾&aÐåc°‘Š^ê.w÷+¶|tÕP³ýócü:%½âtÕO„5鋶ÄoJm¨»â¸+ºûPÃë4¼(¯è®¼éµ'cð>[V„ ýé`РßÊgÜٟñ•.“xû2"xý^2î¾*ÛÓV¸± ª=E×A>鿚wbN5ô&‚üœ㣵æ;ÑÝ`vÁ]
o¼Óð¢¼kèî”ð>ê÷6FV
ë½þsx¡m~ ÁخÃffܮ·YÝ/lÞüԈ^ÑÝ=y<éŠ*NçõùÑ?ÃÜΗËÛåèoaÑìî_Dw5¼1OÃòBà®<¼p,¢·0œxӫ쟖:¼ú’wšÌØI7
ބ{Î_á¨{v{Àl?ÌÿDoXîÂÀU쩺žr]Ûi“Oʦù½–#檟%£™àîÔ]:îjxï]^*歹kÏû¬õ;xçá}”à…ƒüÁZ‚£»›Æœ{Ñ.w|×;NV‡BƒWaàý;Ýår*lxMˤ'y¥«‚¼ò¹Mkº¥ߓ†»åȄùÝÕEw5¼ñOÛ^ìõYó*—#µï
0¬/”êòó¼(ë9kw
]vȁ}^E´ãàîãª=}@×Ã÷¦0í/O+o¢M֫mù±·ƒô"»!=\¸a
â-qüÝÕðÆ>
/žgÀSeòðB«Ú޵—¸xP†KðqÚ9ìxg`2ÿâÀ0ÿ_ðâMw}ÖBás–]<Q¦.¯ÂðÚdöv¤ïËë¶د6[m7Æ}ɠ#:ퟋ�ÙÕðêâÕ$wA^xÓë}V–ý/ÃÝÝø¢ãdu¼lbɃ·ñÂÈzm¢µÿ2ŒÔ‡#7Ø]VqÝR±–ÍæöŠՉ¯eÞeÕìi»8•†^¨ÉԙúmBxOÞсWÖ]
¯.>MrwÞByåáÅz}ìbMý/\œĉ÷`eãq¼t‚Ù;ˆ^p—ÂûÝ^a”Ýræî¾6ÅBðÀ˽½ýâFŽ—‹ūO{´O
÷k9>5Yòós8ï)¼ô™–Áîjxu±k‚»«xžW^ÚFO˜™•/ެRƒú&Øú8½oÇo|õ°Ըƒw»%£‚—<»½dӪ{Yt—U+ÙþU=o1ëf?ÝòÅ:qœԵ=Òïÿ‹^8"JGªc/.ÐÝ`v5¼ºø5Á]r%…ʕkk}žµø¥w';€[“±ÿ«²[ø7›h𙁗·‰w'‹^²à%³œ͡»P)pà­4œ9;vx«š7,zÃy]G¦·0ðŽ/üÙÕðêâØ$w‰¼*—/sy¿{öå÷ãl¼íÁðŽÐ!|
Ø"†×୎º땻ƒ7಴ª9V	²ÜFçâ–ΕMºR¼Iy[áj´°ž<¼Á×LhxïMާCwQ^µûñ.fúž„òŠTrl\ª¼ÔÝ}aÞ%îÛ7½r<*øùlAïNèäÝB¨Ž©xŸ±ðáu¥?Z#^qÑ ª«áú~¼è.ʫt?^ˆŽ»êðb1„·D$ó.æ{uDiÈ.þðMÙ÷ڶþçÝe]‰Ÿ¯©½£ö&¾æÀ{ê;ðŠæjxu÷êa—)´ ïÚT»L¯mŒ·|¿v™¹m”ÖÑy¶P£‰¯ßȻìykw/;uhŸByÁ^—Üéñk¼αßÀKÕÕðÞÇ4¼OÖ×ü^ËÃû¨/ö|fàZբ°àEI!߫#Jè.}·\I<êËÇÝã7ÎHíªú–×ß6}۝¯9ð6È^qà}¨὇ix¡´úãÝaW!fͼ檅Œà®eúÞ|¬ðf!|;áDY™¹k½vÆrkäÅ_÷HƒóÀËÝÕðêf
^ßä'ÞùžànoýìÁnâ8‡a­©R÷¸Ûëjϰ<P¤¼ÕÉU"¡ð.	NÂ$I§Û[ïè<.ÿ`§J½ŒÀÓßw¬ÀsûôÍÛþTâ•Zõ‰'‰w%ޞ¹6xOž*w”m=/+4ûÈ~^çßc¼i_ðB¼ñ䈗ªrÔw®ö®¯«¯ô®D|g¦LbíŽ[’¼ͥek¼Kãà…xÄñº)BH¼+ù~
ë¸ñNÕeÉ]Bk8’Æ#낷œý´ñˆâU·Š=t½[gI’¹ÞFñńw¢oÐ4W«ïȹaë‚7Vö’A¼C/Ä+G¼ēĻuœŠº˓ֻÛþà•èv”ízoUx%².xëO ^ñB¼$x©xgGïÒEíͻ‡"úÅë=􋗾¼sC†¼6¯ÁOk/€x¯K/b˜Ë?»KN)Üà4xñʯvÝp
«ÃÙ^ŸI"‹ƒâ5@¼(^*^é݌w©Ânðö‹W®'û¯;®Z¼~ZƒxÄñNÞïLŠ7?¼zä‰yÉ.	škxîŠ×ÿ,ÁñˆâUg¼¼’ò¨ç°ýÖ{âuio¸Ž§g:jð-Þ1
^ˆ×ñB¼.ðR×o¢œyºâ•ÖËtÎD\ËãhĮmÔð̇¯á^2ˆ@¼ˆ7 
t9WqÞ>ã¹5/o—œ§~ÿ¬Aòx}G׾}$xŤâ5@¼ï\¹ÜÜ+¸†yÒ]ŠwJ½[/òIuÖ@Y9×&ÞDÚ¼ïOÄû—‘6ÿ<ë
—ïøG‹w˔YCÊ5”!k‰’Ú%âJïÖ˼äßY³#¡ü«ºšdcSð.
‚ⵈ÷oþþë9W˜d—ñnö÷“y‘’¼Úâ}¹e-Në̢Š“¬žºS¡Þñ×$.¨Sy£9Cџ¼¯ö滛/Äk
ÄÆcÛÿÕ>ñ4P·T¼Ʝæè žyUUyQêçÁ‡k9ÚydQð&Ãâ/èï‚¢ּ^®ïKÈn‡…!hÍˊ«¬ý+:¸ö…¢p‡/Ä ^ ^’Cf
„páº1×ã4¼\
¯ÓY1®cíjW4â}äƒÈHðB¼â¦×BªÏK‹„÷򁄌àÏ+œ˲“{‚·2^ˆ— ^ˆW$/å¡7eù@Öa§3öê0lhì	޲¦Áñš ^ˆ—$¯Äáÿ—†uð7랉ī5‡…ËØ,x!^ñB¼:ó¬KÃ͡?QÂFÕùŽ5½p9¡·4@¼æˆâ=¢ˆΞ¼SðÕêmnì¹'9GðB¼â…xeònCF Ό©HE÷‡ô˳5‡…sá]Óà…xÄñ’ä=°ðÏ9l(ãºsíYH?Zsv"3^ˆ@¼¯6y½ÅIón¸1é²öZ¨yûCú›%Á[%x!^ñ
¼B½ÛOîc·JÄ}èZ󪋮ž¬޲>KðB¼â…xeò
f>£4©‰uëý‚rљ?`£ÚÎNÄæÁñˆâ}Ǽ۠#J_cɴ߯E•LÞV”—ýF¬K¨ùþȊ³B¼ò.ÄøEòہ��[îïÛÿ<ßÝ	-oƒŽ)£Sõµ[gI\åiÙÑq'_…ʏ6×GoÃV4ï“Qð¶ޅx‡ÄÛg޻CO¦ÿ̂(
Ã0Š‚ÙÂÍâ‚ø5žß[kœ,[’$OŽõR÷!£8æ½üËÂî‚ââ•æ½ï˜wÜ
F†«h½/Ü<¯âd*¤+¦%֕œ¨7¹Ý÷ú·ºÇ/¯{+Yu®à…x y¥y¥z[¤|)Թ”ñŠz½–åþ±³Ù5{v¯7«ÿػƒäÄq(ãGÐʛž=s‡I&ʁ“P€زŽÑÝNø…Ÿr	¤ø¾½·¿zõ,Ë-ò¦[>Jæ߇¼ÀK¼Çò6‹^Ñ+|›žõŸKܽôìVÞ¿m½Žâîäuþ¼–^à%^[^Ñ+{U¹ÇG'¾èý‚wéwEëVøvy‹ʫËÞÒ¼DÀk˻£·©¸J3³ä]ڭüÕ÷¼)fó']K6xà^"F^ɫ¡÷Oâó8ÓÛ>ۧWòÎáµä
ß)¯+ýÙåÝüDd¼òÊ^#\¥g?å}þ[ËÇ©ͽànjˠ>žž²<¼D4±f^ÑÛ$AÏÓö×^zRò~´À[wô=ò&±ÛÿÕZ_w—ˆ&†¼;zgôT¿¬$ïç²aá÷Ju§¼ñv–»êÍ8K¼ƒ#Bަ™ìUÎ*=¸£÷kä}õ»B­®$¯ŮÝǠx‰hbʻ£÷_»ÙQ[y5ò¾÷ž;ßV•êæ‚ïÛrÌWkÀK¤Wô~6SÝÎ*=¨‡$ïó‹qí¹!oY\•]ûLƒΒ廼DÀ+yE¯ì¢vÒVé¹ígp6¼òw…dv‹îMÃx‰èd›^ÙÛ/[Þfװ±W¸ηo‡]¿n}µ6QòŠÞ|ÿ۵/ïvװì ՅoYô¦|f›îMÃx3"^Ñ+{•ᬕž9yW]u‹`¯®ɮz³7
À;<"ä¾=ÛPò
޹
o‡¼±©Bìfµ06
î/òšö*Z3ÉÛìx׭ðª¢ô\7¸ÊëéÞ^/ð?»$S^Ñ;<É;›m—¼m_”J¡uCŠ¥Ø깹§ÁØ4L;^^²‡^5’¼Ú5ü…wakRå/1ôUðƒÛìV¼½7
ÀKÀKƺa|.Ýђ÷ÞÔï_¿Á]iØU/]+ÞiwÀKÀKö¢7—ߖ‡¯–¼¯~¯Ú(ú1‡Þä*?R¯֊x{DÀ¼j2n’÷`Éûøæw…Úʅц^g¯ò5´­x§=^^ཽ'à-k³¢ôFUÑkÖ
~Ì>ônmà¦x	xW]ÞÞדÇTŸSá*?v-7“
px	xw|{µäm…·ª»Šެ*Nº¥¿¹ù½0ðfGÀ¼êRðnN«ŠàÍÊX$ÃÜ"Ž®ZÙïր7?^àÍ0Ø~H«Þü¿¡UÑ)í‰ëb¬‚¿`KÞ)ðæGÀ¼cdÃk\NfýÉB(ÿzƒ†Áû?ð/ðÞx+(V6¼öé†ñ«r޼…M¼“&à%à½р÷F×*E?z!u]ùþmÌÓdSà%à½ـwÞû®Gü¨•.i‹¼À¼÷ðzWŸUªFÝ1ÔMÙðþ¼À¼?*à}|\Ûð^~è-cª·•YðZWä/ï-¼ͻµŸoâH›]å|Fëû‰)ððÞlÀû‘oŠrŒƒJÁg´^àÞðÿ#»ÔMõa•^àÞ;	xßóá­S½Aêf/ÔÊúpm
¼¼7ð62\հȇ7çg•e,Z	/x—€wü߳—ѥÜ/‘æÀ¼À{g¯ì-O®ÚÐU…Ïl
¼À¼÷ðªäbÚɵÍÍ_4¨à^àýqï«õ“áŒRá\ŒÕg1FçŠTŸQôٽ/ðï]¼™9Ÿߢ7¼ÀKÀKJŸß+çxxï,àýÝÞ`DQ]Hû_S‰Ò2‚y‘1ç.âàáÿ/:KÐ^ð‚Wà͇ð‚¼Þ?††Á;7®“–­À+ð%j/xÁ+ð¾²ÖÞ	¼à•ò†€÷ªà¯ޞ††R·^_ÿÜ÷,@Àìö]IEND®B`‚PK
!<Ô
¹¢†¢†#webextension/icons/onboarding-4.png‰PNG


IHDRxÐ*ã:sRGB®Îé†\IDATxìܬ¤×Æá÷Ì7ëݿQ۶c—1Ԏ­6vj[qêÆvmÛÖ{ï|sšjîÚ;³ó<ÉžxøËÉ[²!oü²WÊÔIÎI­¦”=RëÂl{”²4µ~›R>Iò|êì§s쿿Îz”¬Ëû?푩éRËÅImÀNPÚtꃙ5ëúößo7xßþþ¼ôëã©uQØùJY’Z.̱»=“!{ëûëүO‰»£`ÐlK}rÐp‡tfÜܭõ¦ÔÚÉh ÖΠá¾ñýù3ï`s·_wG ò–úؠéþ¹Áûַ÷¦ŸK3úèä¾½Çe%oü²W2õyR›ŒJ›ÌޯäÍï®I­·e|Pʵ$çdÜpNÉß~䐌>줔=2^(e’7¾­;t€À€À€À ð ð ð¼¼¼¼///€À€À€À€À ð ð ð¼¼¼¼///€À€À€À ð ð ð ð¼¼¼////€À€À€À ð ð ð ð¼¼¼////€À€À€À ð ð ð¼¼¼¼///€À€À€À€À ð ð ð¼¼¼LVàxxx^^^^@à@à@à@àxxx^^^ºaôԚJ	/[t§ۤ×<°Ót;¿=³š_L40Õ&K§’•½w ×´ªA³šjƒÀËún�NVNä$úՠ]­X»_a¢•½Á,úÌ*ÉüNɎËښ^ÖögÚ7+«!ð2ծwÿהܵǼœÐiSÚ^v4¨M7¯ö›\ùíŠüØ֙‘·é$³›`¢ÁÕöU½;s~“÷š몝w ´½A£ZݪÎZÐdȠi™jx™îÏx#ü£)yìݑ
»½þ§;hWªuж˜ìÀK¯ͰÛw›—N¯%¶—ÛwŸ»vÛb¢/mͰÓfõ£èÔn­¶…ÀkƒwȬf€Ùm»¡¶…ÀKõ¦@»Bàxxxx^^^€
^^^^@à@à@à M·ɜ9s2‰–/[ÛÀMÓdþ‚ùx`d&xx^^^€n€‰Ѷm†5M^`¼öÆ;vÒ	Ç
Lrà@àxxxèØe´m»MÏ7M^`xíw¶éù“N8&˜h`¼˜hš¦ÙØ殍ÝQ ðÇ{d6äåWß\ë<&˜äÀ€À ð ð ðÐ
01š¦	/0†Ž?öÈ»_ٻäFŽ(À-ÖÊÎ=öþW]!lf‘A©¿·´Yfɒõ}Umvϛ¹çWû͆@‹/^¼^¼xðxð àð à@À@»<(Fá™FY£??ðòí÷ßðóXYì´h@À€€ý'@ÀŸo6›@À à@À€€€f@À€€—54›ÍêX ]>ÜßߗÛÛÛ:îîîò~¯»F£4›Í:Z­Vi·Ûuäý%/Bݛ››2™Lj°û6	u_Üɛ8#ß;—·×ë•N§#ì]¼pv<—étšÀöyˆÛjµK·ÛÍÎÜç»sóñåëç»|32ÇÝÝíóݿùúÌÑï÷ëÀÇk”ßþž–çb\^týôǕܱ;êŽݹn·—·	g?¹Goæ̘NÿŸ;s>yòĎ^€´õó~yÉn¿à&k¬¨„¯çççy ·†¯_ýmÙÛ۫»mó±O•ïÍ™+sÎÃâ	hÑÀ'ìÚ‡µ•B$|¶jû…Eh·[eww¯¶k¯k¸{}}]ûõ»yÀÞ¥×îÅÅEÂݺ£vgg/ák
w-ÇȱrÌ;5¤–Ôxy‡ì M š¼	[¿úê›Òï÷ʲå˜9vjH-©)µZ4ð–p÷òò²Þü¬×뗝ÝÒh”“¶
	y///Êd2®µíììÔÐXŽüËȎú–'×f¹VË;xßI[†ÃÝÝÝî>¸ԐZRSjK©X¬ùM»Ýnz`?P¸`M–µXÖdó›\³™!¿óìàå½7T»ººʃf5P]5©éüü>=ySkvòºñ,P¯×ó`…dm–5Úx<.<N¹ÞÍßo^ç†ã¯îÚÎoÖu:yàŸ×Îx£FùíïYay.ÆåE×O,˖À4 󞻫ú¤pž´;;;Ƀ|} ßÞÞ.°Ú2X,¬löÈÚ5ء;ó۪5Ôü	;³ùi0,}w·ógëçýò’Ý~A‹Èd2É¡>¼½]Û2¬¬ԖSkjNíÀb^¬ÕX¬ÑhTþùçŸrrròÑáfä{ò½™#s9`C^­òLYۥÓi—U—Sk¤öœ|yz½`­¶8®ŏËÑÑѹÇLæÈ\™3s; Y6Šgóëγþ5ë"µ¦æԞs\4X«±FÔ
K_ZæÌÜ9†óï†ðCeÞâ ½l×iZSsä6çÁ5lƺ־¿¿_[,HæÎ1r,çÿ؁€—ùW{½þZöpJͩýÅsà?ö4oøSH° -…*jP›ÙÊXeÜÝ}Ý]Ž|îºî¾ãní씙•ÚHê”:î´!„øxÎî=§þÑrssIžß9ï¡FîýHrŸû¾ÿ7þ455áõ×ßÀw¾ý]üû¿ý'¾ÿýâÍ7ßB[[û¨ÙLìرcV<Åcک~Ëf׳„yL‘Då@BÐ.ܤŒ¸Ûd´twûQYYÉ]-±hÑBӗñÜC¡ k±õ®™ì´k×nøý~þ?pöqÂìîË>H~”™éB~~>RRRp.^¯n·EESÁ
õ—ˆˆˆˆˆzվóö;ؾ}Nåóú°kç.p\±ôr\wݵ¶¾~06³Š±ٸqãlS$Ux,£~»9|ø07†qÍdâĉ˜5k(àoé½ëŒÚì]{¿ûÝðwûAlv~ã7˜>‹—5ð…‹5¥¦¦Ž֬Y‹M7ƒ¶o¯Ä'>ñ1ãE&î°eÆΝ»°o_Zš[N{Á⮩ESQ^^†ŋöý×Úچßýö	¾c¸ÿþ{!"""""‰iåÊUøpï>#ÌBéôRL˜PÈà—ר¯oñz‹מ÷Ü{·mWв?¬ÕxL—ËÅ}lT¿MÔÖ֢¢¢fb.RRR‘xðRZZº%á.ÕÕÖ!XƒÝކ†Føòä“OÇeȻmë6¬[·/Þç¼__Wρ÷Þ}W_s–,YÃѣGî‚ì?IL۶m7Â]Œ›‡‡~0י¯¼òƒ<ìÝû!ŠŠŠpÑÅÐÕå†ÇíæªRNBA0DRR2®¾úJĂÛíF¬ð؜åiPý±åóùx³ÂôÇQx팍Kå-	w©|N9¢(5±6[¶i(+›¦Ʀ¸
yùÿúë+Ï;困ŠÕoãÈá#¸ïþ{ùµD$2pR,"""""‰§··—+!Aœ}ùøã!olN5­dƒ_<5t}Å뇊Š·±zuÎęâŒIÀxÍÓë5žg²’ꏭ¹s碾¾---0äI“ø˜QXŒ ”Kã¹\ޒpwñ’ÅX±b9¢5°ÖÅe	v³lÙRx<Tnßw!o8ÁSO=æ¦fœÈåÊ`¨ââiÈÎÎbð늨¯«ÃþýôœÐèžî<úØ#ٴi3úB} ^K2Ü=îÝ}NØï\=MóctÝÕÝݍXã90àTýöØ0þž{îa–aZŸjf!"
x0à%§3Ųp÷Î;ï@±[¼tÛm·‚â-ä]µê͓ÂÝää¿,{ºô²Ëàt:pªyóæâ†oÄ֭[±~ÝcUöÎÂÊ7V¡ °"""""’ØöìÙr8X¼dþ?W,½‚/ÎeÒäÉ1¹þfKÁã9ð\.ªþس$I‚Ä3#Pã[\„»F-Fm6Ɛ×xsrZÈËMèF›Êʝ¨ÚWïˆ~â“òåËÎîøwœÕü©Oé08pímmH\"""""ÒØØŸ×š={ö°Zæå墸¸ç?ÉæbvÁsQý"
x%>pú¾1Ó2Â]£–“jSÈkÍÇõë֟ô5xð¡0eʔóêôȣŸ´4¥¶®""""V	DpØ׋½îjýA„!"±ÕØÐCIÉ4׌ÓÏÙÚoæÌ°7x³ž‹êQÀ_ðò.Â]£‹^…¼»wía£z8k—½¯ÎáåCŸkCˆ&‘=î¾±­å+·#ë¹0ûõm¸hU%J_Ý
×3ʊÝøö¾F´Ã뵶µÂ0ükþÛ"œÍÌY3‘žžžÐKñy.ª_D=x%NM瓒’ã"Ü5j1j³†zò»Ú.]z9†£¹¹™›¬!釡¿?ÂÀQm±!"""™ºßÜVŠÆNœMx`›;¼øç]uøRÙdüóGŠ‘åH†ˆXÃçë6Zñ!??Ã5¾ g3þ<NÕo‡¶™6l@[[ۈ3nf>aÂ\uÕU¼¦F¼
xnj1?Ü]¸h!nºéF–>ŒAjj
†‰µXðöõõxÆðu×]Ë'wìڹ{T…¼¬»±¡†ٳg
«/–ßÀSCµ…ȈˆˆXéպcøøû‡ÐéÇp#ø޾F¬nìě×ÍÃììtDˆôôôb÷®Ý¾@ùùãÎkåiee%Φbõۘ0¡±Õ×N¶[ͫúc«ªª
{÷îe83ttt`üøñX°`’(àUÐ{a!¯×ë=c¸K;wìä€
'âñÇCNNΰj±ŠÇãK/¼„ööD‹ò~æ3Ÿ2ê··Û}Òl۩Ã[6Ŗçîr¶‘ùŸñ·•5¸P‡¼=¸��¸~>–dCDÌÞ>ø`#úB}0ôö9‰çA˜ñïz±ví:®Ž<ç¿Yóçµxèáa%ž;k°ž©þØJMM幘Z3H^1ž`ÊóõÁûp7ªÚÛÚy,ÜzÛ-ç1+y¢mÓÆÍ'‡»Qy7~°	·Üz3ì&èIr²s0……¸üŠ˰wÏ^ô÷àTáp˜‡3®g8c$DDDD^¬=f„»#âí‹வû°íö…(ÉLƒˆ˜·2òùç^@}}Ã'=ûìó¸ì²K1>?ééœÑËρÏçC[[;jjjpðà!D†1‘¤³«ãùڦÏEõÇ^YY‚Á ššš`îkÃÇd."’€¯^Þ%½>¼§VqïX¬Ų€7%Å	«ðXv””4'ÀpÝxã
ˆ6‘ýÞ|òƒƒ0Ëñ`÷¬«ÂöÛÁ1£FoÿvtúqØÛw_IcƠ0͉yy.$A$vÞyçgw
5Õ50ÄÂBXŒ}Qmpª~ëÛf.\¸‹-2ëñp?QÀ+|Rc :4ú$ã|­X±‡±Žc§=®Óé4-@,*.Æò¡c
k±ê	ûŠ¥KÑ1T;ï¶
F­Ÿoþø|v”‘‘qڝu»ùʖ£ì£3íîôã—[ðåòI°»u­üô@Þiî<ëÿC~š”àks&c–zKlú‘Z6щ«	­Ækd^ïÙ÷MQýö @VðŠ)wи{$CÑ‘žž†O~ò“xâ‰'N
yPN+™†‡~xèI°k1j‹6ö…}äчM{Rù¥Wpøð‘ÓÂݏüc¶íA›››gŠá¾0¨¶¦—\²""""v±±Çu-nD÷÷5â‹哐{:èíŗ·ÁÚaÔÏYÉ??ÐÌП/›„ÿ]\ŠL‡u•‰dº\è
õ!ÚîNš4)¡"÷"IЀSõ‹ÄR$îgðCÞ•™ébȋñãq¢CáÅ_4ú«Z†µµYp—ÿÇvþ*..†áÈѣèé遈ˆˆˆ]üä@3¢¥ÑÄúVì&40ˆÚU‡‹ެ4ÂÝadЋſ߁êî ¬"rɥ— ÚÊËËb¶¿Gzz:,ûsQý"šÁ+Ö/‘à¢ÜЊFòž>“×y­œÉËZŒÚîZ䢋à董 nh°aý»¶ØNDDD¤=ÆÊú㈦Wk#-9	MZzûÐ
s#6x††/܏¾þADØqhD‘’4©ÉIüd;“1.͉q©iNe¦¢ȕ×̠]ÛêÁ6ÁoF␷ËÞޅ·~¥l&'•€GV×Q1gî\NR‰Ù
ÚÔÔT„B!Äρç¢úmµÁ û玴õˆf&K¼jÑÀ'ÎzeÐÈߏ搗5°ÖÄZîZdîÜ9Xóç5ðz} m۶cúôRÌ.›óáñxÐÔԌÒÒRSZRˆˆˆˆüöp+ú¢¼¢ìW‡š9
~ôÎÊIǜ܌¡áByNç)›
…ñͭÕx®ºfiëéíþ;îX„&lˆV˜>òÈCøÑµ½=Ž9‚ùóç"V²²²bpòT¿=°eÅk¯½†ÎÎN˜aܸq¸ï¾ûàr¹p"‘1ØÓ2ëˆ/ˆ"Úü~?ïñ	./pZÈKû¢òöôøɻVÈÌÌT¸k¡Õó*§÷ÝwÊÊÊ0Äo¬B_¨yyyøòW¾h“^¸‘žˆˆÈh4 äխhðoR’“0?υ%ùYX<48{øGû›á…
_Ÿ;?¸d:Ğâ©Eÿÿùïox6#9îÃCvN6¾ùͯ#–ÚÛÛy
³޳………ªß&vî܉÷Þ{fâfø.„Õ\;Ûq’ì4ˆzðŠõÍÅM»‹Þ¼¬hIá®ÅÊËËqée—ÂÀV
/½ø
Þzk5o"œóCÅê·ùoî‚Ün7º»ý‰ŠÆθw‰³’wïæ†høô‡ð/»ê¢îÒÏ´ 1B´‰´¶´žîΜ5iii®Â	…¸îúkñÍo}×\{5NäóúôÄz£j[[õ[oâĉ–<¦ˆ’}x6
C#‡Ã	m=yyîF{֤p×z7Þx=<n7:ÎʝؽkЧ£´´ÄXƒîînÔÖ֡nhðÿäÔÙ޹¹9‰Ÿl˜#<0€ßnſ}d¢IÄãõàDj—-[ÊY¸l熶¶6;vŒ{É Á~®i©ÈÍÉå$#´ŸŸË¿g÷^ØþÁåʈiXž#¯‰¬ÄcòØÕ{“&MÂc=†ÖÖVSzð2Ü?~¼ñX"jѐH-ˆ/Ž))©ÈÉɁ!Zí–-_†o¼fâ‹t__ˆ»ar.þô§?cÓÆÍñîøÆk¨Æ5زy.Ģŋpë­7hãQ‹‘3^ÛfâE®ÌËsáû#šD-غ«ûx=píµ×`é²+L¹Fyë÷«±k×nÐW¿öeŒ;±ÖÑÑaY?Z›°ïÁ`VàpŸvÄ`–Ã|Íã µhÍàM@|²ç+Òp8l̀ÚL^ÎÚ4ϙçÎ'EÖbg

qî#ÜtÓ
œ­‹?¼ótu¹1ì»{ÓÍ7böìY¸""""ƒÜ}t…"ø÷Ýu
wMVåé/܏lg2¢Ed֬Y¸õ¶[P4u*[-˜vrç]w`Bùœ„d‹p—òóórF½-[òXvÃ
lªŸDz^BYõàÕn¥FO#¿¿æ=·!ï'NêÉ;gçÊs&ÖÀZ쬼¬þŸánü½1›‰/åKxèáøõ>ã,PþYùœr<øÐýøÊW¿¤pWDDD†­«/‚?4»ñ{pÿúý˜»²ϾqÏoÄÌ׶♣íóCˆZz‹®M—,Yl„»¦*)-ÁüóìT+g•Fs’›Ljñu²êQ‹µh°ô
ÛpùŠËåBF†ËäY¶TUU!++ӧO7q9R@€OØl/ÁY¼°»ššø»ý>¹³+¿NlBl£Áï3±=~­bþs%""ÒãÝ66´yùUî¬'ïÝr1–æÀ^¼ó=öè&¼÷ù|0Svv6¯‘U¿¨Eƒ„!p¸±Ñ9{8q7\3‹ÓéÀÅ_dúÆj<W⹏–ª´´‰ˆ_#}}•“““a%‘ÐÀ ÞkóàÍî¡х}
tm!-9	b¿÷j£Ÿ0ˆäÄ
·Û=â–¼–g<~Tý"BIH(Â޻\Â;<{Ə6uÒ9òœyîæ‘þþ~XADD¤>Â϶àÖ5û0öù¸á{ñ½}
wmdŠ+b/‘HH²_î…lÎÏáçò1øXª?щh¯vÌg Ã7
^¯99¹6›k´“ðð<Ùâ@»üG™袁3x9Ì&""²³ӏU
ÇñfC'övù3Ü8,Ť:ùp$sœ±š4†Í"1§ìèƙ“ƒüDúð_?öE†F˜ù÷ˆ3R11=ö¢ñ-Ò8øµ
…BÜXœ¿7&añïύIZü½êõàµw^ëß(°U—ûðÎWv6C^»„»€Ïçá²
öÝEVV–Oä"¢7Mf‘´{ñFýq¬
±ڴ‹A.g£f´„¨÷Á> 7CC#<jCßO̜€'–͆؃~‰ˆ¨¯h¯œC§lÀ ÕãéBnnï’Å|æ®ÇãæŒBž‹Â]‰ð‚?oœ5ϟ?‘󱺩_Þ|
b‚anVÚÐHçì\ëf;ÓyL0Ȱ¿!`pô¼1oá¦
Õ8x=¤™»""¢¼šÁ;ü»Â~¿ŸÿúfǬ×-—dtwûŒsÁÿ±wÐq÷¢öŸ
b6Ä3ÞÞ0Sñ@™ۯL‡™™™K‡Ræö+S˜ìcG¶Góo;N´ìZcKõHIÏoù][f†yÖßÿ·³³Ӹ+I’´Îä*5>:2Ãûž˜æûg+”YUq=ÐÛ©ˆ–SM —‡¹äŠP«ъ®ê⃷žÇú#Ir‚W!'y‰ã¸Vgf¦Éår¬µ\.wØÎÝõ9¹+I’¤Ž8äy;úø‹+Oç‘ç?=ã|~ä‚í\ÐÓFS¥cØÞgnƒ¡nHE´¤(€îvØÑgoƒÐÕA@«H‡¿w٩H’$'xµþ&x%IB>Ÿ§P(,†ߎŽN2™̪ÿ—ð\îà1@6›­/[‚€C’$IÃù2¿{ÿ0¹{”„ãG0Ø=°~Õ˜[€éȗ8‘þøòÓxã™CH’䯁Wë-ð6X“°°°°\S©ííí¤R‚€¦H(—‹õ¯§\./åƒ_OŠA’$IcÅ2ÿ½ošÛ3ÁgÆæ8>tŒ»AR,ÃTfók¾Âá/Ùɏœ¿I’ÖoàUÌ"é`Ðíîî¦P(ÔO¹\fff¦`3™l}¢7Žc¾•J¥>±[,rd³ÙúqjW’$iý›)Wùß}SüÛã“|bd†jÂñ˦à¤>H§ؐ2)ØÖ[z`jÆç IXMqÄ]~*/?uI’ä¯6ÀïRjµړA¶Xû)a’N§‰¢xñÆý$0¨Õ‚€ś_«Õ
¥Réˆ/#“ÉÔO†¬o’$I^¬ö¾áiþíñ	>¼†R-¡iº`°6\öM¬Zä}öI½üÁe§rJ{š
L’䯼R†´µµէk+•z¤]µ…B•
‚€t:]?q;±»1H’$ÕÃîÏܹ©R…¦‰ØÞY6ŽÌIÞýS4S_&æ.;•܏$Ir‚wp‚·‘jµJ¥R©ŸZ­V?I’Ôϓ!·~Â0¬Ÿ8Žë'Š"6$I’$Õãî¯Ý;Ì_í¥’$—T'@:ŦöÄÌh–k;ùÈÓÏG’$'x
¼›œW’$Ijd÷\Ÿ¼c/ïž曒NÁ)Glzå*<2ÒÔU
Ÿxæ\ÑßÁÆ!I2ð*D’$I’šäì®,ÿ~Ãټçæs¹°·}åq÷Tãî¢T½4Ó>°I’dà•$I’¤£ºek7Ÿ{օ\Þ߱ü˜yÊD:Ä@'4Íÿî›b¡Œ$I2ðJ’$IÒQE$,CÂÎA'w—GÐÕF³TxûC£“$I2ðJ’$IÒL¹Ê1mï…LŒè뤙Þýè8	Ç I’¼’$I’4]ªrT½ǚPU[Ò1Ͳo¡Ä'Gf‘$I^I’$I:ªéR…†RléAËÐÓN3ýӞ	$I’W’$I’ÊUjT’„†¶ôB eèn§™n{bŠR-A’$xWN’$I’ûwÛÒЕE˔Š ›¢YfJU>z`†%I’$¯$I’$M•*44؅V¨«fzïð4’$ÉÀ+I’$I+›àMÇБE+ԕ¥™Þ?<CÂz'I’btB
³I’$IŸžoæ>Y¥cHÅP®Ðò%>²kv¦$éè"W¿ýۿÍF$I’$}êŒ+aËY¡#ƒ¾IY˜š§Y~í>ÄӆïC’¤£zÍO°ɸ¢A’$I’¦Ú{9BÀñ\¦Ž4ʹ¯g‡‘$I^I’$Iª…!ã}!C oR{šf¤kˆZ²H’$x%I’$i&ÓI5ˆ8B:æ8( ›¦YªaÄX{?‹$I’W’$I’f³]Ô5?ðª=M3èÞÂ"I’dà•$I’¤¹lçj^µgh¦ю~I’$¯$I’$Íf:YRqœԖ€¦ë@’$x%I’$é؁7
و¢B‘ø8güóѳëaVU@&E³Ìg:ȧ2H’$¯$I’$ÕRÙM5Á{Ú½‡“>üq¿t;çþå»èyð¡UŸâm¦Éö>$I’W’$I’êŠQŠ%…!QǞ}jçû?ƪjK59ðö"I’¼’$I’TWŠÓ,)
؈vlçP{÷Ñõèžu4ÁÛË"I’dà•$I’äïf2rÃ5|£íŸü,«&55–O·u#I’¼’$I’D%ˆ¨…G6ª¹ÓNfþkçP½÷<@v|‚U“MÓ,3Ù.$I’W’$I’H‚€%lhnº–Ã$	ƒ_¾k]ÞBœ¡§‘$I›<ðJ’$IRÀf,¼S_@q ŸCEÅ"«&“¢™f3,M’$x%I’$©–°RQ±DX«®›Éåǟûl’0 ÒÞÎè՗²j²)ši>Ӂ$IÚìW’$I’’„¥%õ³\§Üö!.ý™_çҟú5¾z÷:™â=Ÿ»~úyà»ÞXæ·ná0³°{?<|Š—ta@³Ìx%I2ðJ’$I	UY–®G÷²íŸ&¨U	ËeNÿ÷ۈóփbo7³gžF%›á0ÕìŸ>ø,Waxª¥Ö4̻¢A’$¯$I’$ÅI• ©±¤¤ÆrDù<‡
‹¶|îKffLC®Ⱥ0—?|º¹Zk©À;›íD’$x%I’$‰LµÌ–5çÎ<…Z&ˡ¶þÿ_XÜÇËtöO|î‡|‰–V­Áø‡éȴVàÍt"I’¼’$I’DºRbI•*ËQÍd½æR•š¥ÿ«÷,ÞE	'6ðVj0›‡R…%•«°wâÈï{oÇ-Ó,sÙjH’$¯$I’$'xÇÐe¹áZˆBµý“Ÿ\
e“Ž9!*Uxl†'á‘'Ÿ³ùƒÁy¾#Ó?¼Pâ0YèÌrÜÒ)š¥DL·u#I’֗I’$Ij­	ÞÅËÊ&.¹ˆÛïbQ._¨‡‰CèÌpBÌåֳùú9ª8‚í½4EBB¥F3ŒwôӟŸA’$9Á+I’$ië(-¬<ð–«ðÄ<>³$¸ù:*™.¾„û^ð¢#÷øt'D6͊¤"8e∦IÇ4Ëxç’$É	^I’$I›\gq%•*4´JÔ-!˜"Ç|åMo¢D¡-}œ0miØÑ#ÓǞ¢íi‡-=…4U:%ša¸g+’$ÉÀ+I’$i“ë,γ¤R•ºåÄß(W¨†1Kʤàä~N¸®6èhƒù˜/@¡Õ*„Ä1´¥ÆÝL̪hâ—;ÙÖC>•¥­\@’$x%I’$mR
W4T I–žÆ肑‰Êe2³³¤
y¢âlD2º$ލÅ1åž.
ƒ”;;Xs!ÐÝ^?k.¢™öölçœñG‘$I^I’$I›TW1ǧr—Œ’}Б…©Ñô]{÷Ñ5¼ŸŽñ1ڦ'IåXŽrw³gÁäÓ.bú¼³I¢
-ÑLœbà•$ÉKÖ6;I’$ÉÀ&5–T¨°”èÛý0ç¼ÿ}\úŽ·ןÛ=î'öÕãîr¥fçøꝜýöà¢ßûsRlhqMœàÝF)J!I’¼’$I’6©0©Ñ[˜cIÅ2ß(;>E¿÷çõ(Û{÷ýå
ÍÐv`„¡Ï…
-R!ÍR#8I’dà•$I’´‰õå¦XR¡|DŸ<çíÿHûûY
q.φ—NÑL÷o;I’dà•$I’´‰õågXR¡ġ2“dGÆXAÀøe—°á¥"ši¢½ýÝ[$I^I’$I›TÿÂKª֠\å)ն,«eø™7³pÒ66¼TL³ݾã"$I’W’$IÒ&5”›¤¡|‘§”Ûۙ¼ôbšmôÚ+Ù÷ì[ØÒͶ¯g#]ƒH’$¯$I’¤Aý¬•ŽÒBý,i¡ġ{ñóXرf9pËuìyñ·³LNð6ð¹S/E’$x%I’$µ€k¯½ž׼æ
<÷¹/àÂ/"N³ڶ̍k‚·®’ÍðÀw½‘Ñk®€ãˆÐI*æї?ŸǿýÙ$Ô9Á{F;Ù=t:'˜$I2ðJ’$Ijkk#Žc††¶pÕU×ò⿜ÓN;մ57RЍVˆ¼½ä¹ÜýcßËØ5—SˤY‰B_÷~Ï[»ò260„(\µ)ÞBœá’$I^I’$IQ|o½õ™\|ñ%¬–-ó4”+±”ü–A}Éó¸ý~ŒG^ýb¦þυÔ2YI¢˜áK/ãž½„…T;›V*bÔãî§O¿‚H’$x%I’$EQÄR®¸âjN9å4VÃÐüQ­ʒrަšN3~éÿa÷k_ÎW~å'¹÷¿£¾Ww��¾à\fwìäÀ%—pçË_ξË.§†0=…’·É8…]Cg I’ZOŒ¤ÍL’$x뮻÷Q©Th¦¨VeûÜûz¶5¼ː„¹'ÕÏâçÝ;Á~ø–èÌB²iÄ«éӧ_Î`n’þ…i$I’W’$Ij!޶¶6Î>û\î¿ÿ^š�ýKÞJ
eȦX±ÙªÖ`ÿu©ҩƒÏ(€(‚0€ „'”@òõÓ§Õj_?µƒÏj
ªՃÏJ
Òlí…ö̆¼•0æCçÜÀïù ™J	I’dà•$I’Z‚·®~áÚjÞ3#4”+¬<ðÎåa&Ïa¢ª5ŽP®ÖϪ)Và‰I8k;vEâÙl>çF¾õÖjH’$wðJ’$IZëKÖb5.L5žøœ˳lå*ŒÍÀð$‡‰C8}tµqBÔ Ùx;xîÞ§θ
I’dà•$I’ÔB¼©TŠ8Ži¶ IØ9=̒
åeLØ&§d>óp¸­½G°£NÛ}Ži–¶b@.`çœ5ÐQX°µ§þ<ᢈµ²kðt¾²ó"$I’+$I’$­‘8Ž8–0Y
§N=Áç5žâí嵐Ù|ãIߡîÃ'w³)Èö=P{rÇo©ÊΑ2þ¡q‚Ú×OB˜ŒÏÔ‚H~8IAý±ädîÃçwrëŸtAA:‚  %Ä1ké+;/¡½Tàüч$I^I’$iSK¥R¼èE/ã¾ûîæî»ïb5„aı$IÂj8ef?a’PŽ0_8zà%àQppr·»†ÂÚ3Ðûzab¨Âɻæ8š„'%4tæýó\õH/_¸0¦¥„w¯–OŸqm•"§MîE’$¹¢A’$Iڴ®¿þFÎ:ëlž÷¼ñŒg<› h¶(:q7])±mv„%-¡R¥¡î6èë€0„L
†ºáÌmõ¸»ßõӽMûqý£_›¦%Ek)!à£g_ˁ®!$I’¼’$IҦ”J¥¹üò«xÊUW]Ö-[ùÏÿü7
…|óãîÚ޺ӦŸ`¸gKš]€þ.ÚÚ[?Ç㮳#>��úã5‚ xòÉbø-•ËLLO!Û·…!<õ‚€ØY¸p/Ü{2­¥–°֪AÄϽ‘Üó!z
sH’$¯$I’´©œy晤ÓiuúégðÆ7¾•ÿ÷fttdcމ½|öÔËXÒL¾xWۏ½-ËKî¬ѳÐ8¶çó,óärôöô²”øåJxя´”'D1Îðþónæ÷~˜l¹&!I’+$I’$

me)}}}¼þõoæüó/hBàOxàí,-°mnŒ%Ëõ³Ú&;ᷟp4=ݽÀ\nŽjµJ#ÏÿRÂ#ÉfŸà]4›íâÃg_G€MC’$¯$I’¤ŽŽŽc^¾vóͷ×þØ8>á¼ugŽ?FC³¬…?ø��£_x×ÑÖABÂÌì„	¼ôs­wN¤ýÝ[ùêɳiH’dà•$I’T*•8–뮻‘—½ìUd³ÙõqÁZgLî% aIÓù5	”¹üÊK—3ŐËÏS)—iäiÑ:ªUZÁWOº'º·²)H’dà•$I’4>>ÆrœuÖټá
oappp•V4$¬¶¶r“fFʹkᯞðØÐуxWG	0=;M#ZG¹JK>~Ö5”¢I’´á¯$I’¤Ç{tÙӳýý¼þõoáœsÎkúo­–°Î{”†fr¬…R?ÿŠ€£éîê&BŠyJÅ"K™i£uTª´Š…t;_Þy	’$iÃ^I’$I³³3ìÚõ˕ÉdxéK_Á
7ÜÔÔÀ	kጩ½¤ªe–4_\³IԿ¿1àޓi(Cº;»áÉזòå³hÅ
­ä¾mç2—éD’$møÀ+I’$é£ý0år™•¸ñÆ[xÉK^N:^W¼qµ™{hhjžµPà§_r4]]ôvõÐÕÙÍ7ªDðW´ŒR™VRnßq’$iÃ^I’$ISS“¼ï}·­ø¢³sÏ=¿¾²¡¯¯=\²¶èÜÑGhhz’„µð?WÀ'.¤¡ èîêY2¢¿릀½ƒ´ŽB™V³{ðtŠqI’´á¯$I’¤{Ûnû/jµ+144ÄßøVÎ<ó¬ãºd-Ij¬•­óãôægYR­3¬•·½-d®yx[À½ÖQ©A¹J«©†
œʦ I’W’$IÒÝwßÅ?þã»ÉçX‰l6ËË_þj®¹æ:–Ç˙àeM?²›†¦s¬•]'wüLÈL;Ërß΀›~	fÛZF¾D«ztà6
I’¼’$I’öìyŒ·¿ý¯c%‚ àÖ[ŸÉ_øR©4+_ÑPc-3ö(q­ÚxÝ@®ÈZù̹pÑïüçUµ€%MuÂ/¼,àÒ߆'úZJ¾H«Úß5D%ŠÙ4$I2ðJ’$Išžžâ]ïú~ø!Vê‚.âu¯{#½½½<%[撵E™j‰³Æ¥¡É9ÖҾ€ÿhÀò¶·üÉsþæéð/xéìø«_|Y@1ÐrrZU„Œvô³©H’dà•$I’T,ù—ù¾øÅϳR[·n«ïå=í´ӗ=Á	kí‚»i(W„b…µ¶gþê™ßû怷|gÈO¾:à߯	ȧiMå*+´²ñÍx%I2ðJ’$IJ’„ø¼ç=ÿCµZe%ÚÚÚyå+_ÃW\Mǭ6Á[7¸0U¿pí8¦x•+Ðêf³]lZ’$x%I’$ÝyçíüÃ?¬üòµ0yֳžÃӞö	‚€£K8.Þÿ
Íä¡\EG1—§ÕÍg:ØÔ$I2ðJ’$Iڻwoû_166ÊJm߾ƒA¢(:ê´ð‰pÚÄ^ºŠ9––Àä<j Rƒ…"­®¥@’$x%I’$/_›æïüvï~•J¥R‘JeZeEC]HÂÅŽ6Å;•*
8½›ÐòÊqšÕ!I’bÖI’†††xîsŸË9çœC&“a³’¤\®@>_\ñʆfg§YXXàP۶må÷ÿ÷Y?tõïån–çG/8‰_¸x'Î3ØLFFFàŒ3Π½½AòÔ]»vqÛm·-þ—œà•$i…q÷ð¹øâ‹7}ܕ¤ŽŽ,m¬T@OOï×NÏ7ìå
X?tûÔwO/°\ÏßÑËñ‘$e2™¯¿©¿&B2ðJ’´2õÉݶ¶6$Ie³iz{;	Еjo€(
Ãïú¡¿Ü=ÂrڑáÿöwÐ’¤¶¶¶úkÉÀ+IÒÊÔ×2N’ÇQ=ò~ý¹\Õjµ~Òéô“{yS¬)”ù—=,×KNéG’t¢_›H^I’\Ë I
„a@OOét|̰;>>ÆèèÈ×Oýí$AÒéëƒþú¡1Jµ„åúÿND’äkx%I’$µ° èî=C#““”ËežT{jj’ ê+æçó¨µ͖«üù
Ö3\9ÐÉ9]YÖI’dà•$I’Ôޞ¥««C,ÆÜJ¥rÔ/JÌÌä¨Õj¨5ýٮ¦K–ëõg²ŽH’$¯$I’¤L&µÂËגC‚o…ééy*•*­ÇéÝ?Þ5Âr
db^~ê ëœ$I2ðJ’$I^¾–J¥ˆ¢x‰OÇ)U«%ÌÌÌS,–Qëøíû÷¯hz÷Mgn!¬[’$ÉÀ+I’$yùZ'Åb€¾¾>¢(â)QÓ××ÏR’ææÈå
èÄۓ+ñ'`¹RaÀ[ÏÞÂÆ&I’b64I’$IAÓÓStttÒÙÙÉÐÐÊå2Aԧz%Ÿ/R­Véìl¯c?sç^Jµ„åzÍéƒlϦXç$I’¼’$I’’¤ÆÜÜ,SSS¤ÓézÜ]®R©ÂÌÌqìå-ÜFêÁ_ }ç[Iùå¤o©û~Œhï»	r»Qc™å?÷N²\qðcœÄ I’œà•$I’”$Ô
yÆÇ+ô÷÷†+Q­Ö(ìy=3ÿK˜é¦:ô,j[žMc	áè‰;ÑמARáhjÝQ9ùu_;o€¨
”¯ÖøÞ/=ÆJ¼æŒANnO³ÎI’$¯$I’¤Z­ơÊå2ccãõȻ’)ÞöÉÿe`÷wpP걿 |ÚwR¾à7 ˆ9T0{黾‹hæv–+œ½‡ô½?JüðïS>îx% _¹ç	ËY®lò“î`s$I!š$I’¤$I–ˆ¾UÆÇÇë½ˑÎÝEÿC?@ÀáRý9™ÏÇxJ8ò~²Ÿ½u1î®TX&sǛIßþ:¨̱™}q"Ç=x€•ø󶱣-…$I2ðJ’$IڈwQRßÉ;??Çф¥Qw½0)°”hòÓd?}áÌí„Ó_&sûkªyŽW<üïõ/7˜½›Íh®Rå
Ÿ{˜Z²mkKóƒçmgƒ$I^I’$IµZÂÑÌÍÍ1==	$¡V`h÷ˆKû9š°ð™Ï>Ìž{̸›1IºŸ$Ls,aîa²Ÿ{áä§Ùl~è+×W3¬Ä/\¼ƒÎ8D’$xÕòþ{wǕ¯müéî!±dLI‰³væZfffffffffþr—y7{w“x³nCȱ-“XƒÝ_ԵV9Фȶ$ÛÒó«ú׸fNõhÞB¿uêœ}$I’$ÏàÇà`‘R©Hìmî¦W’ﻌ‰âAµ‡Ñ$„TŽ|ÅsÿÂàýv2x¯›o{ÝÅàݮà?Ç|ŠgÇïæÔÁ/pÎà§xeéùü9>‰C‚jùKEÐ÷f‹oݰƒoß6ûâ¼ö&ž´l’$ivÉ I’$iFK’d‚ëbZ[éé Z­ÑÐù-vü˜•äæP:ý'ĭ§q{WWr÷+O §Rc¿׎ãC•GÓôqßèŸÜ/s1÷I.fÞeO¥xî_!È2“ýu{//¼äöE>
øäiK‘$I³Oˆ$I’$ÞT@†iɛÏg©ßý&C餯¤åîh޴ÜÍïTïS‹¯cAÿO8eëKyã_ɯ·tÑW™‰.ÜÜÅCÿ|å8a_¼fõ"Žn* I’ÜÁ+I’$Í>ѐ
†55ՓIú9PՎϿ'cùkg/‘ëâ¬ÛÙr=Q'µ5pn{gÍkä̹t²®j1o½ü>uÝ6öÕÉmõ¼|ÕB$I’¯$I’¤(®•i*®%“ô2š˜,}ùã6ö–,zt_́¨-yãɄû£–ÀÚ]ýé|ŒËóiÙ{êœFN™SÏ	­õÔE!‡²rœðvðŽ+7³e°¾ªτ|õìdƒI’dÁ+I’$i¦©ö0g݃YÐû/ÆSëÙÁëañËأºüEåíd7|˜ý·œÌxîÖÑÄOnÞÍdØÔWJç;7ìdH*–zNl­縖ºtִճ°å`»®·ÈwoÜÉ×6î`ë`™ýõSœ©G3H’$^I’$IÙõ ›–»ã‹â:ny#¥ö¥Ô>R•»¼ƒ¸q¹+^@—ÙWI¦™ñ¼aÍbþwså8a²Å	\Õ5ÎÞÚrV6XÑ84ù´ ]qÛQŸc^>ÃdK€›úË\º«¿oïåw[{Xß[ä@=üˆ9<eù|$I’¯$I’¤*ìZ˾ˆ¶ü(-x÷V[òxJG“¿ô±¥m신²›$ÛÊXV5×ñ•³WðÔÿÛ@%N˜»ËUþ¹£/‘raÀº‹ës,ªË27Ÿ¡5—¡%Ñz۴ä2éš(€(ÒÒ_é­Öè­Ôè¹m:‹6þwGñ
ý%е˜Étîü&>æ2$I’2H’$Iš¹â򤬏[Ϡxî_É_úhÂî3Qa÷eÔê—1ž‡.iã÷÷XÅKÖÞÈe»úú™¸7ö—Ò9TýÏü&~xþ1ÔE!’$I!’$I’´G1–¤°˜âٿ¥ºðáLTt돘ˆSç4ð·{­æ÷\Å+W/äøÖztG÷^ØÊÏ/XIS&B’$iHÈ0I’$I
WTOù”¯S>æ
$ܹhëÏz¯b¢ΜÛÈێ_Â?îsîQÇWóïå	™ßÑìf6€×·ˆžçÎ]I’dÁ+I’$i,Aĝ¨®|=åS¿MÕ3ž€„ü¿ŸÕ>öՒî_ó”ì¯øfálmxWÔ?ç?ÁC31'1K¤ÂýânwáÍkH’$YðJ’$IC1Qµ¡xöïˆKOØsùK¾o%oe7Ù>ÍÞքyQöGü°ãÇÜôÐS¸ô~køøiKyÜҹ,kÌ3Ӵ²¼÷ä#¹ø¾k8¿½	I’¤Ñd8üI’$Iª
mý9Ñö_v¯#¼jýSW𦒖I/_[ûX¢Ýÿd,Ѯ‹ÈÿóA”Îø1dÛWR#·î¹ŭcË"V5ץóŒó²½Tᒝý¬ÝÕϿv
Ü6ýì(U8ܬn©ã9Çtðĥó(D3•$I²à•$I’—Élú$Ù
&¨ìžÖ¼Ãòí”Îú¹+^Dæ–o2–¨ëbêþ|
••o¢ºä	æ)轚ܕ/#Úõ7F“YªKžÄhæç³ÜQk:{l¬°nw?—ïàªîA®¾m®ï¤–zÇ0Üwa+9j'µ50ÃI’$^I’$IAïUä×>ž°=“&ˆØ/aŽò‰Ÿ#nZMöš70š ԙÁCkjóïAܴ2Må턻þ~Û\DÀتG=
˜¨ÅuÙÛæö¥o%IØÔWb}o‘
C¯=ƒC¯·M‘[*T“„©”îÒRÇis8}n#´7sTCŽYB’$YðJ’$I
;Cþ_O ¨
0©‚Q]þâƻ¿ì©ÕƐ~–Ùòš	Š‹©¬|*¬l*¤3Rl/VØ2XáÖÁrúºe°Lw¥Fo5¦·RM_{Ê5úª5*qB-IˆȄù($@S6Ck.¢-—aAZ2çҲù˜æ:–6ä‰f!I’dÁ+I’$)Ýéš_û8‚¸ÈdK9Pqû}(žó'ò—>†°ÿz&Cd)ŸüUȶ2•ÒËÍÒ9±­žC$IRÈáC’$IRi{ºs÷ÎÊÝ$̱_‚ˆɐ4›^¾V]øˆÉ)wOú"ñœÿá°%I’dÁ+I’$)wåKÓslG“*KŸÏà]×1x¿ÝÜogúïòš7¬˜ւ7•i¢|Ê×)
͛_À~H{(ýkj‹ÉaK’$ɂW’$IRؽ–Ì֟2š$ßNéœ?P9î$
G“
鿫G=›âù—R9êYÓYð«-y"Ż]AyÕ{ÒÂöÎ$ÔæݍÒ)ߠxþÅÄmg"I’¤Ñe8,H’$IÊ\ÿF“DuÏøIó	Œ)ÌQYóQ†doüc
B¦DTOuù‹Ó	z¯&Úý‚îuåíµ’L3Ia!qË)ÄsÏ#),bf$I²à•$I’Té"êü£©¬|sZîNDeõû‰vþ…°ïZFDLµ¤i5ÕÛF’$I³âˆI’$IQç¯	’
#%ùªKŸÄ…9*+ß4õG4H’$ɼ’$I×TcÔYd¤s5єè­Ôøۭ½ŒtÁâfê3!]¥*ÿ·µ±Ì-d9££!Wìà–Þ2c9i~ë³ùå]Œ%
î}DCnî+såÎƲ´9Ϫ¶:€¡¿3ý{‡íãoþíVeBf&…]—2šê‡C˜g_Ô<ˆ$ÓDPíµà•$I²à•$Iš:;ƒ€-FúAA”*0Êçß
#ˆ"’ôó±l	B®Œ2¤*w²¶@º–qׄ|yϺZeügÖçø¿=k‹5¬0lóЎ™Ka&ž{.û,È7¬$ê^kÁ+I’dÁ+I’4M‚ÂRïQÄã|>B2,Ç_›èº0¸“µ!Ã2ãÿ¨¿)Ž!I˜ù”w2š¸nû#iX£¼I0ù$I’dÁ+I’4¿ڛ¸|«ÚS]&ý|B4¥3!}fk!	9ªñò›;{¡³ÍÕFØIn£
&“$I’¼dM’$IRX`4Ae7û%ˆU¦‘I$I’$^I’$II~>£	ú®c„}ÿa4I¶I$I’$^I’$IIÃь&ÚùgöYµpç߯øžc˜D’$I²à•$I’Tk=ÑD[•Ýì‹Ì-ß$ˆ‹Œ”7Ÿ$$I’¯$IR{Šy¤ÓÖÀjkÎ'ÍjÆR<ÿ^Œ&¨
’Ýð!&¬ÒEvýûM<÷\ˆê˜’$I²à•$IÊ@]–t²!#(瓘TÔA­ílF“Ùð1åN%5rÿ~&A©“ÑT=ŠI#I’$^I’¤*@¥F:µ„TK†ó©2өºìŒ& &é#	·ÿž1ÕúÉýëId:9æ%nµŏåð"I’¤’$I‡°­Õ6u’jo„ö&ö¢}ÐÙǐ­˚9:
˜¹T[øP▓	»/c¤ ÚGþâS[òxªG>ƒ¸å$¥-D[Nfý‡	‹·0–ʊW@Tρäꫮ¦Z«1ù”‰"V·šºº:;’$ɂW’$IR@éÄÏSøÛy£^’™[¾Nd	’
w¦ÖzեÏç@l޼™׾æuìرMyóæòÞ÷½‡ŋ#I’dÁ+I’9Åb‘?þát÷ô0äªLNº;Còú;…uÿ‚a*žx
¥Õ'0ä×?ù)·TËiinænw¿…B™EIÓj*ǽŸÜ/f<ÀÊÝ$7òÉ_ â@|ñ_²ܝziÆCY¿å­oæö$]}õÕ|죟 ³³“ÉðŒg>>ðŒô–7¿•Ë/¿‚ÉrÞùçò򗿌‘¾ùÍoñ£þ˜ɰäˆ%·}ÇKY¶l’,x%I’¦L­VãU¯|5ë×o`®ù‹†ÞÒö.JWÞÀ^´h9{üîg¿àÒ�Ç/~ñK>ú±E3ŠÒ#‚þd7~”‘dš)ñS’úå¨뮿Mµq²–”–»7Ýt“¥Z­2šR¹L±Xd²”KeFS«Ö&í{Ö_¿žÏ~æs¼ïýïeæ‘"I’tˆ¸äâKÒrwR(Ír(әI•UêÝ$„쏸áŠçü)=Ów2ĵM¹q²–4þÎ]m;´ò‘dÁ+I’ü‡ÌTÕå/¡tÎ÷©¤M•£_Eñ¼‹HeRH’$É#$I’’$Afª}·žFñܿnû™›¿F´ãµ~FŠ›VS[ðªG=ƒ$¿éPXº”mO#-êïfEï†lhšǭ
-Œtʎ›i¨–rQÇrâ `,ó‹}ܥkCnjhãƦ9Œçôí7Q¨Uò×+OÇ`/+»;rCãnnlc<gvÞ@.®QBþޱŒÑM<‡Ž/Šâ
7pX’$I¼’$IYjÛ:õ÷“‰¦j?µmÃYi¶
ˆ;îGù¶!©l$(n¸¹Vâú£!ÛÂt浳nÎbFZ·r%,h&µµvô3Һ3O‚|†ÔUÛ ‰Sk¿[ÒJª³:{Ϻ³O†lDêÊ-ŒkN=¿YÔBª³:ûϺsN(„$«¶2º‰çpŸyíp¸¼’$ɂW’$éÈÖÞãD†To{­òtF§#¿;‘]oDÒpL:N’$I¼’$I’T—ƒöFR¹ˆamõАç²Île\™ˆa­¨ËL|ýQsW6bXK}ú;Ɔ¤‚`üg—Cg–‘$I²à•$I’thȄДçò™tÆՔgÂrQ:#LγóQ:“þì‘9ì`¢$I’BR’$I’$I’$^I’$I’$I’¯$IÒ@s\»tvô3‚vôç“f%I’$É3x%I’I@¥J*ŽAq•êpVL’$I’¯$I’$5ïØÇ-€TÀéÈ6 ÎpI’$^I’$IÓ,´_ÁY‹K’$^I’$IOP‹I„ 8$Îp<’$I!’$I’4zç¶Ã5ÛHçæ.&H7w
ç–f8I’¤”$I’$I’$ɂW’$I’$I’ä¼’$Iõ]»aU©0`Ío„¹
ÃY‘$I’dÁ+I’tˆ’¢! 
†³’$ISëAz gu&“eɒ%ÌX’,x%I’j™,ô—Ie#ÈEìEåTjÃYI’¤©uÎ9ÿƒ$YðJ’$MP±©	6í$ÕÞíMìE]ÐÙ7œ•$I’¤Ù%D’$I’$I’4S
^I’”·SøÏkØ’¤ü@?´7’NKMPKa8·4CI’¤qd¸I’íþá̈́‰뗳ï$I…¾ý9VE­u·ÏP’$iß
^I’”éú;C¢].x%I’¤/~ñK¬_¿Érâ‰'ð¸Ç=Iš¤‚W’$…=ë61$³ó÷T<2MìIÒ@S3ÜÚM*Ÿ…¹õhv@©2œá!ERZî®û÷:&KkK’t Bö"I’b²[¾ÇA\"»í'ì;IR%_»H§¯„&¨¯4œ[š¡$IÒ82H’¤a™mÿK4°‘½e:I­ílâúc˜~ŠÊh*ÊeйLšÏpV’$I’f•’$)ö]“îÞ) !·éãW¾²­L/ú{á¨64†ֺtödՏ$I’¤Ù$I’ÞH~ã	’*£	ËÛÉo|?Ôú9DH’$I’dÁ+IRØ{%…ëßF0~y›ÝP¸î-•L•à–.Òé.¢º‹Ãù¤YI’$I²à•$iVHªdoý.ùõï&¨
0añ
ÿy
Ѯ¿1=TÍå¡ktJ4B©2œOš•$I’$^I’f¶˜hçŸ(\ó
²Û~J@̾ª}äoü$ùëߖîþ’$I’$yɚ$Ésv³;~KÔu1Aµ‡õ]C´þąEÔZϤ2ミmaúI’$é'?ý3ÉSžúätþK’,x%I
o&ì¹<-w'SX¼•¤ç
‚–3H†^IRˎm°f!ûHGµÝ.ÃA$I²à•$©6çÜtÂÁMd¶]H´ûï$ì¯$ª£:ïÞTçߛ$;I’$I’<ƒW’¤)×-£¼ôEW}€Zý1ìêœ\ý	*‹7iån¸ëoý¤™"Ž"¨ÔH§£	ªÆù¥ޑ$I’¯$IIa	¥cßFeÁÙ¨$ÌSZþ
ÊG=2Lšjù>„ܺg#I3EoÛ<¸¶“t6w£	ÚÜ=œ[š¡$I’G4H’4–ÊÂGç摻éóŒ-É4QZñ:âúåL¶hçŸâ"áîBy俁Rù¾>8j©\ÐRu¹ᬊH’4;ÝtÓMÄqÂd™3§ææf–ݻwÓÝÝÃdÉf3,^¼I3O$IRmîݩÔÉmþ£I‚,¥寜Šr7mýC¢­R;ò© T¦R†¦<C>Jg8+I’f©—¼øe‹E&ËsžûlúЇp°üügÿï~÷{L–Ž|õ«_FÒÌ"I’RÕöPs£)ñ4â†c™µ¢-?cÌæoƒ†%I’ŽF5œO‚$I’¤Y\ðJ’¤򒧒d[Ù[­ùÄt‡ïIݠÖÏѮ‹z¯¥ÚæÀU[I§³ÐÙ;œOš•$I’¤Y[ðJ’¤¨ʂG²G”?‰©“ÙøIFÊnü8’$I’$ícÁ+I’ªsïJœmcH­å’¦JtËwû¯åýo¤ïK’$I’4¶’$éö‚µ¶s;/LËÞ)Së'{íÛM@Löê×S>ý:$I’tâ‰'ÐÖÚÊdY½z5’4ɯ$IªµEf爛O`ªd¯{7añƒéüµmRëx ’t8ÊôA{3©|„&¨µêrÃr(‘ô¸Ç=I:Ä^I’×MñØwCa*„»þNfãǸ3¹+^Ä`ëoG’7…~ho`©¥pû%I’Æ"I’F•ä0%Š[È]öîLPê$ÿï§ARA’$I’¤ƒYðJ’¤j…KAX¼•‰Švü‰Üå/d¶
⢈t‚ç“fu‘šZá–.ÒÙя&hGÿpni†’$IãÈ0=$IRR#ٓ	»ױ¯2·|“¸î(ª+_ÏlS߽Vµ£1´7¤³'«AR%Ÿ‡®ARM	Ìk@Ð_†Þâp†’$I»à•$Iµ´܍:ÍþÊ]ÿ.jTV¾‰ƒC’$I¿þõoغe+“eٲ¥œÁùHҡZðJ’¤R'ùKAÔý/Töú÷ÞBù„OAa6¨ä°c€T}6½h ’ÎpV’$iJýñbݿ×1Y.¸àüCµà•ä¼’$)쾌ÂßïvÀåîÈãò?Š[™
Êõ��túŠh„¾âp>iV’$I’,x%IÒJ*d®ù‹îJ8p“,½x­îogmù	’$I’$^I’4IÂm¿¤ð—3É]÷v‚¤ÊT	JÛÉÿë‰ä/yAïÕìI’$I’¯$IЉ¶þœüEw£pé#	û®eºD¿¡ð—3È]öÔôHˆ;%I’$Iò’5I’”vÿ‹hËO‰6—°x+K@BæÖ¤Sk9™ڒÇSëx Iݑ4’”$„¤ÂMP@g(I’4ɯ$I
z¯"ÿÏ–¶r¨‰º/K‡«^E­õtJgÿ
ÂÓM’ZvvÂqì#Ñz»I’$h$yéÙ֟LÞAQ‡¼0H’$I’ÜÁ+IÒa+³ý·ä¶|$È0xüç!ªç@$w¡x·+	z¯NhÈlþ6áÀ&µÖ3¨ñj É/äp—,B{#©ú<¡>ígUäÐ!բ”ª¤Â²!š€J
âd8CI’¤Y_ðJ’u_ʐ ©õ^N­õ,&CҴšêЬ|açoÈnü(Ñο0ÝBjKGeًIš×0“äŠÐބÆИKg8«CˆÔ×6®ßNª©Gµ¡	¸µz‹gÈ$I’Æ"IÒLW$쿖=¢ž3ùâöûP:ë—ÏüÄÓX²V;@񂵔OüüÌ*w%I’$Iîà•$)êùARc¨{-!S!žwwŠç^DfãÇÉ^÷‚¸ÌTH
(¯ùxzÃLvS
‚߯cH´v-™ü4¬zÖYÔN=u8«QR5†Þ©\ù©RÊ5î !a@ª·ĸ2ÔeH•ké3Ç՘‡€‰=;A!CªTƒò¤<{üª1ÿ%I’dÁ+IRf÷ߨ[PíM/[‹[Neʪ+^Nmþ=ɯ}áÀF&Smþ½(øÈÏg¦«‘t´3¤ÚÐ@µ°54@GûpV‡,i°7î"5¯4“Ú=;ú¹ƒcæ3\~ÞÔI̘Zë`I+©®"tö0®cÛ!‘ºqãšS‹ZHu@gãZÕQI2޳'”ƒ$I’G4H’Té"ì^ÇH™]e:$Í'P<çÔZOg²T|¥Ó4#ËÝ ™J’$Ir¯$I©ÌÎß3RÔ}	Ae7I¶)—›—ž͛»ì)d¶ý/¢¼òMTy-3UG{;š\,RiÇvZ6\ËHuÿÜNã­73¤oÑΛÏHm¿ü)™â Cv¬9‰$K¾k7Í7mbÈ@ûú,b<s.ü1Q¥Đí'œÂx
—ì¤é–Òç=<sþÂZ•$ÙqüIŒjâ9¤J’$Í΂W’¤¤JvÇoMÔÈlÿ5•EeZDu”OýÁÚÇmû%û£|ì[©ý*f²ÓÏ8£^ÁúõÐK³<ýôÓ8X¤ޛ7Óýåï0R7{»–Ôxk.½–;Ó9îóöÿÙÝ6ý}ö%×0º‰çÐ۷™$I’faÁ+IR´óÏ•.ƒÙñ[*¨ŽiD”Nþ…ÿ»7a÷¿÷õX†™^(â|?üÃéîéaÈU™—C*?¿•š¥ aÅù­” uχܟãªe†´47s·»ß-ÍT’$I’¯$I‡ßîݭ?f<A­Ÿlç…T>Ši5P<íG.:Ÿ°¸™	H/j+¯ù(³E¡Pà~÷¿{ü­–ðáM=)Ýõ(=ú>ìE½×>ÝçaåÜ(à`Â(Dӟµ$IRˆ$I3Pfûo+;¹3™Îÿ…J7Ӫ°€òÉ_%!äÎ$…”Núe’´ò˜cÐÁÌZҒ#– ±±d	’ÜÁ+IÒá¡ÒEv뙈 .’ÛòÊG>—éÏùªË_LvãGOiÍ'!7ÙlA&„cÛI…!an#´Õ3dA\†$á`žù¬g°~ýzvì؉¦μysӬïHÒË_þR>û™ϱ­³“ÉÐPßÀhæ̙Cǂ&Kkk+£illL¿g²ÊÝç¿àyH²à•$鰐Ûü
‚Úíü᜻7ޅéTYù¢[HX¼…ÑT;DÜq?f»@6Bcˆˆ"†dJ4Òâŋùü>ÇÕW]MµVcÈ@¹ʿoÞÆþÓIG<Šú\†!™(bõq«©««ãŽ$-[¶Œ÷½ÿ½LµW¿ú•L‡G<òáéHҬ*x%I
»גÙ}û"r7}Žâ]ÞaŽiÕS9öÍä×=›‘’ ¢²ê]€Ê	0X!•‰ ²Ub¨ÖR8˜¤´x<õ´SÙÛݐ$I’gðJ’4•.ò7}Žý–¶Ûüu¦[mÉ㈎åý'’4¬ÔY‹aÃÒÙݏFØÝ?œOš•$I’$^I’?1ù?MPíaevüލëL¯êò±·¨,{’$I’$͊‚W’¤ìæoõ^΁ÊÝø‚Á™NÕŏ#É4²G<÷|’¦UH’$I’4Ó^I’ÒKҲ2‚¸D~ã¡ÒŴ‰ê©-xèí
_I’$I’f|Á+IRÔ})¹›>Ïd
ËÛ)lx7Ôú™.µfHB@­ãH’$I’4$I:L…=ëÈmú(1“-¼‰üú÷R:úuÕ3ÕjóîJÕ·œ¹9hÛûaç ©ås!A©wrGσlƒU¸acjÈQ­¤¶öÂîAƴ¸šó¤®édLaÇÎ'ÕU„-=Œin=´7’ºq7TÓh¿9Ž‘$I’dÁ+IÒa%꺘Ü
'HªL•hàz
ëßAqÅë!ÓĔŠ(y!I¾#I VƒT©á÷†Mäóaµ˜aq<þÚ8aظëB†Åɝ¬VÿûGþ&I’$IÊ IÒa&³ã·doþ
1S-ØDáú·PZþ’|S)n;“;RoÈ1R[IbªAÂîQ>ŸCB”ÄT‚„®†cÉ2´&1Czs!ÅqÖ6e ðߵÛÇY„óþ»n0}㬭ˆ4þwíîºՐaûú›$I’4Û¬»5aú¨§Èޞý÷"Iš˜0„¿t
Ù¿eº%™FJK_Jܴ†;#I’´mÛ6¶oßΐå˗S__¤™çe/{³ÁçŸôZn§¹À>‘—¬I’4·±Æ+ï³#-w† ÚG~ý»Élý1 I’$I’¯$IpæòAÞô �_á`
ˆÉmù>ùëßNPîD’$I’$Ïà•$ió›ª<á¬V-,q(‰ú®¡pÍ+©,xÕöBH’$I’ä^I’	:½‡·<x{Z¸LîÖïPøϫˆºþɬ&I’$I²à•$©¹.æ!'÷ò·m㞫úÉFòÂâ­ä7}„üµ¯'êºH$I’$iÖÑ IҊö2ç3ÈËɄ	‡£h`#Ѧçکοնs Ûʌ"I’$I²à•$)`é¼2Ç/.qÆò"ó«Ìa¹“ÜæoÝü-â–©¶œN­ùdȶ!I’$I’¯$é°vïãúo›>š
13Y@LÔ}Y:	×/§|äóHêŽ@’$I’¤É2$Izɽi¹;›ÿ=Â!³û/H’$I’dÁ+I:l}ï’f¶õDÌ&I¡Ö|Õy÷B’$I’¤ɔaI’tÑõõé´7×8~I1½XméÜ
3M樵žqۜI­éxÌ’$I’$^I’:{"~uC:Zjœst?ç­¤.s8‹ë—R™wߴØ%ªcF“$I’$YðJ’´µ;âGk›¹p]#ç®ä>ÇõÓRWã0’îҭt<„¸i
’$I’$ͺ3x%I*UÃtGïÒÎO/kb°r¨«Õ/§xô)ýË]I’$I’;x%I*Wá—W4rÑúz}z§/äP“D
T?žêÜ{0‚$I’$Iîà•$©g0ä‹i忟CO1âPQm>…ÁU²ܕ$I’$YðJ’tg®ܜçí?ŸÇ›óLI¥|ÄÓ)¯x5d[‘$I’$ɂW’¤	è-†|ò÷s¨,xCœm£´òmTçÝI’$I’,x%IÚ•…¢´ô%$A†é×/§tì»Ó× I’$I’¯$Iµ¶³)­x
I˜gªÕWQ<úM$Ù6¦‡$i˖-Äq<þk˜$I’¯$IqÓñ”Ž~IX`ªԚN ´âuýö<Žø··§í,wWhéd³³ӑv*‘…®„wc(t	’@$JB%qH*ª$.%+)הԶ×Þٟ›õ®[oëí6oûÞïñ}¿ÿo_À|èññÁ`ðű¶¶¦ës"¢íímô÷÷# ¯¯ÿçZâ½ôú
…òZ·̏ˆ‰"‘Þ}ýonn‚ˆÈ2ˆˆˆ>¨„݋¨ûXOE‘ªÀHÏv¢îŸ©ŸÝÊÊ
®®®‹žž䋪ª8;;CºH$¢ÿœ,;üVWWñ›͆²²28Nx<¢¥¥%\__#ÏçCmm-Þr{{‹ÅÅE¤+))AGGþ6==úþûû{ÌÎ΢µµUœgýk‰ߜ^C$IÊkÝ2?¢Ì÷Åúúzx½^èÇ133£í¢÷І†˜ÅÞޞc÷÷÷E]PUI²,£ªª
uuuhnn†ÃáÈæúµ‡ˆˆ/¼>Ä\‡CŒ‘°}ƒè·!@²‚€õõuåð‚››Le£²²]]]hjjB a¤öZ899¯žŽYíg[ZZ^tÅ===!¢("2ˆkQ¦ûâùù9¡×ÆÆÆkÝóâa‹xMdOLLàðð¯QápXóóóhooGww7,>ªµ°¼¼n·DÄ
DDDyõüõ÷âÏ׌ Z숺ƒ€Ŏ÷ º¼¼Äèè(ÆÇÇQ(ˆ¡u||¬«mwwZéŽ$I⡈ÕjM½nkkCii)’絈èàà@„¢Ùì2)±{ihhèµp÷_Ã޹¹9ŒŒŒ|è¹ÞcccNËËËøO^"""¥âG(_ùñ*€¨+ÕZ"ƒ$çkŠ®ž@”?"ºÓ5ݰbÛr&±XL„$Úñ555ÿèڛššÂÀÀ&''ÑÛÛå-"Ò1ÒH]¯É&•7Å8-»ݎêêj¸\.Ȳ­­­-ôqDQbΟ ýq
)þ'r¡8~@âËï@™ɲŒÎÎN|rb֞ßïOÍջ»»ÃÅÅ~ÿ‹½³Ž#I¢hÚgŽ˜¥ef³ϴ`f/ŽÍ̸Œfö23¯Ù^ffffŒåÑÅPÔä4J-äÉÑ&Ú]ժ_?Þ¿ÐHÅå†nO>¯aÔvþô§?	yµ.O?ý´téÒEü@ÜEäu`üx–1ãªm׮zæâä_Ë0Œûî»O†.õëׯµî]* ]òóóe„	)‘4%%%lâ2'¦¸v‰¯è۷¯4iÒDÃ0ÌÁk†a1 Vá{O”2‰Oi“}¤¨ð‰†	¼Æ
‹t¸|ÿý÷dù¦ÿýïÅþ]=–ï¯qNÆßýîwÂAS™ž={Ê?ÿùOY·nìµ×^iÇ{ï½7°¬“Æ+ä#Óü‰?øá‡Ââ1͸‡6oÞ,[·n„7ž€¦Rîy}÷Ýw%²J{ì1ٸq#ŽGޟÜyçÂ{Î:Ï\Ì^xë<v<ƒ‚M’X×'›+”ƒsÍßtÓMrÅW×=×+cAÿµBà{p+Þz뭈Zú9¡‰×aì]vÙeJ|F5‡Ö㧟~’GyD‚øå—_„û\¸êŸ	œ¿Ÿþ¹ÿÏáxV%Œ?>-oœM*6½GŒ‘öùˆ¯‰naª~h:‡øÍÏÌq±3ƒï¾ûna>¤2á–[nanâ¹C«,~þùg=—“Ç˿«¯'6{c†9x
Ã0kºVÒâH©÷õ½1¢êÊ÷'RÇn‹U݁zÆ
â²råJ¡û´æË/¿LkÒ2iÒ$é޽»Ôtòòò„Eà…Å套^b¨C±ˆºˆ°¾‚ú¨Q£¤_¿~¢ѢøÕW_œÖ(*77W&Nœ(:uB$J‰Œhٲ%y{¾ω ÄâW²4^¡´ý°Ã“ìÀ`Ìr|ôÑG"ÿµ×^“Ã?<Dàõg®·§žzJ


„M/x×.b’¸™3ÈÚ%[7Þk…XK–,ñl@Ié6›=Œ$òLyŸï¼óŽxѸqc¡QsŸ·†`l޳©v‰*¸"¢®_¿^ÈÄu ù™ç؆µk×"»c…
ÊXù»š#Ž8"0òåí·ßvÙXâ,‚(Eˆ§z®ü׿þڰõ7ސk¯½–yØ7w¼C‡4¿Õ1;ÀÆâ²o³]æ>淄æcoÃ0¯a†aü¯p„”Õˑ¨·ì)eMö•¤0Œ8@4hÖq\'-"ö5×\ã'î_ÃÃÂÉ÷q8…Î<óL?ˆ»ž®^²)“Ê7ß|#d“n߾q7ÐÁxú駯mdu³5:¯û:e¹Þ#Ä3Dvó]y啲téR_1lhœqÆÂã’§Ûâŋw}…–ÓN;M^}õU©8ßÎ>ûl_q›ŒQÆ*=ÃÈ î˜F\åþ(k2$ƳrÀo±Յ
Λ úc!v֬Y2{öìòA5jV¿Žxp>â6›äAQ4ƒówçfŽž?¾ Ɔ“éùØ0x
Ã0£ޯ#Ç-”ñØÂã%I£N:4aI‹9p¡Ë6BPœLCÊ6=9ú\,®X€EX"{F0'¨â<gïÁ07ʿÏPAÊãG4­Zµ":…ñ—&0_xᅒ8òÎ=÷ÜÐkáuõêÕjÜG‡s†h¢>B’!íüóϗLbC‡Õ"®o&÷'Ÿ|’âŒ=蠃$¬Q^œïŒU-ǭT}ß޴i“üø㏒Œõ‹/¾8TDõkø†ðK‰sŸƒ
E͛
Ã0×0Ã0Š›÷҆­%Œ¢VE~ÕD’Ä0X@é…XóæÍS\@:?ð·¿ý­ĽꪫXÈ{֝›\=Í|àYV¹Ç{È	'œ S¦L‘cŽ9†’HÞW$G ïO;.y_ˆN”N›6
¡)Eøºà‚ÄÈ(񥃼˧Ÿ~Jîeüx†˜ìرC\Z·n-ˆ›DÀ,_¾Ç;ÙØZÁŸˆ8ÅØÄ8vìXÆ®}Ï<M-ÅQX 4ƒcÌ]~ùå|^挴ÏHÖe†0DX6ÝÒ~*LB›«õîÝ;ŠàJ¾½—*üòžڷo/qðrßr¥ê†Èœ°Ì5|F*t*#ð"ΒíKÔÊ?þñƶgd’v%3W0hh9wî\Aȝ1cB«Þðe¾Ôgb¤8´{™ï/ÿ?OTÏ|l†	¼†a†QçWRTp¬QV?_Š[ö#vy2Ùv¡G67ÔÀÑæêիWù1dÈaFŽ-9,bû÷ïÏbY—jjá˜F6iÜ6mÚ.Cb]»vD(ܻ͚5‹œ¨º”›ò¾q‹÷F®¯væà$4²·ٚvë"îeT<ƒ×æÉ¥E‹®˜C§{®ÿ򆏌§$]wlœ ð°yÂë0ÞÈÂ=>ãBcDýÉôfÌQ|^ÊÁ÷ßqyà$SF£FRrw%õ5ɵýä“O
÷%愈²Ž¢ahƒ4Sî[q8ðÀÉÕõÝè!:e۶m²fÍæUrtUvo4u,X ƒ
’¾}ûʜ9säÄOôtêëÜ[=WðY™/8§lôRmA„Ӿûî+¼÷ùx<›Uü?ê¬ýò¯q ðVÛ|l†	¼†a†QÒìORZß_Ð*jÑS¤n1âAÉðC=zdcww,¸[o»í6ѸâBîèѣ˺o{->½\<ßÿ½vÂèn<¥-Ðòóóeúôé±tÁÖb´g>"BrzÁiXLƒë¤cÎH*ž'«+4t˽!!‘¤üH¨±¢®çgg,ëæE¼/ò‡ãð裏Š".s††1ÉØÔç›M8ÃÈ\“†T¢¸sÂÑG­ï/±rxõ=èo¿ýÖc®ŠÏßÿþwé֭›D¡™]6k‰qà3FñQWƒØˆ¯eC7†®Ï'σÀ²UcçcÃ0Là5Ã0Œº¾ݲ:õ¥¸Å1b…Òë™3g–”l"¬nܸ1mawÈ!‡ƒa|÷Ýw‚–­o¾ù¦„AY¼nð†kNjC=7M¨+á=íܹÓó`çB‰¾‘ Nè&D¸ºª,žáB•#z°ykòi܁UÚpŒrcŸ¦LžŸ
“8¨1Èó~øaZSF$™Äâ[ÜqÀýã•W^)ß Fàu›²!ðF…\WÕ˦†þ{Rs¥“'OÜò‡~x$!šøæ!rq£:…=@8%î pƒWªl|îÿlÈòœ^ß_KçcaõdÇ0ð,ÞúŸÝ$uʊť¤éïEêåˆaT,aàRAö‚òRš“ Š±þùçŸ#e€ºå¯ڭÇ8c¶=?‹´¨ RÙåâuË|ɒ¤<—.°Q‘T<ùԧœrŠhȍæp¯uÄX·8Ø%p|ys¨èb~àˆóý………b™‚L]òq]/)ñ#®»–ñÉ=2nί»ùɆ(›J¸T=âxJÏ9¿ÿýï9XٴâõÉÃE õuêÞu×]¼Wí¾×ÎM8_!êýZWԨêz!¡¿¿æÏdža˜ƒ×0Ã0qKrۋ¦¸Y1*.µsÎ9'ô°ò;\CK–,ñ<¸ïȰ½ýöÛY Fw5¼¹AäääH¼Ê@æªa1
€“A$xíD'ÿ6tŽ¡!™˜”L'‚Pôºž_£RœŒs€µy
»žxâ	ÄDš«é8‡
e»NZVãGo†0G%E^^ž·4nÜ8Y¶l™Ð@Œ¼ÜΝ;‹ÄU…ðZø¬8öµ["
ÆÜïkÓ|l†9x
Ã0Ëâí*õ¾ZJë7•Ҝ6bT¼$’Â
òïµO,jÉÌ$·ǒ,n.½ôR/qˆˆiD)àÄÌÈC¬eq蜯ÐnÞ䯀yþã?^¢BÃ#{hٲ%×,n67“k2ñx- Ñ܈òßÇœð”hݜƏ+W®Þo%!ŒN•NÇ1ð¹ãl q¸Î|Î"JTvß}w1ŒLÿœгgO¹þúëËÇ
÷<×ÕKãQܭqÁýIäÏåÎ9T îº$¹¹¹Âc«
6TÉÊç¸ÿþûeÆ
ú~[¥›íķ°Ñµ‚F}óS{æcÃ0Là5Ã0Œ’ÜvRV§^yLCi^'d+12Dxér­Ȑüë_ÿ*Š€‹E»‚-Z¤»\SΊÀëçöáÏ,vqF¹^põµçåø
ÍÈåù´ØN'qsdAxÝqMi.Nޤã´¸ÂF
×)åҔN³B™6ÿæºh~øa2dˆT^ÇWàåkP…1øå—_¦ĮÐ ©6aÜ7h:ÆýpñVʽ«bxuî.¿ëxÄæ¸ B=£¢Y£ºwï.×]w]Êý˜¹°*aC•M¥(øÜÿ•ÀË}½ÍdžaXDƒa†aÔm(¥¿>Lˆl0ªíìT¡5,Üj±«7¼¬R‹@ýúõÓâ.°8
=mڴIkÂB/('
;¸5ªäÕ0Bc6oÞÌø}\R°ÙAÆ#ùŽ4÷9묳¼ݵ	@¼ŠÇ8"[”M™Ð&Daàˆvyýõ×kÛügl\’[ë+víڵRÝML6D߉zó©"üøãræ™gºGh=¢0ߧ+ªÝpŽó@\…8Œu^ðÁ?<“ó±a&ð†aFIþoÊê6”’œ#Ĩ~-4[¶l‘O>ùDÀ-µD@ÙUa¥3÷pÝz-~xà	ƒÒP/!wǎ8vÊ]=8‹~à·n"uíµ×zfõáT"p̘1åÇ=÷Ü#FvA,‰
pëUE<ÏKޣ{¼ÿþûžéuÞ$O6 OŒeב¶bÅ
-ðp^xÝJåӀqûöíâŦM›RÆßìٳu.§ad´ٚˆ»ˆ¼…£:ˆc„±â¸S+úýá8õ½'3æ¸Oò»Þ0M˜Pûª«®Jsós֭·Þ:×ýàòÒK/ñ3@æçcÃ0,¢Á0Ã0Š[%PÚxo‘ºĨ~X!²sݦsçβj)}äk”vïÊ4jÔH»i¬ðØcÉÅ_,;vrõpînݺGP$w¿ýö£œ4%'ô²Ë.“Ë/¿•ë¾Q™½ÞôíÛW.¸àøꫯdæ̙dñâ4F̝I—ð¯E鬑Íָ¦5IÇ3ì³Ï>ÚL³#:¹#"0Ïð>ØhH${’bãƍÂk´oßQל§°Šƒ-.ÌLl̸›64) N9—zÓfà:žÅ02Ü3ØÄL$žAÅ4Pþï8ëµ˷Â
Ìø>*kn¹喔ûêúõë…qOåÌn»íƽ”Ÿ[:ù]7dÔwâ´k×§,sƒ»aŒÐʜÌ<Â×hö¦çCΏoÔÂ4÷}W0a¢:‘3Ì3¸“31†a¯a†aԕâLj‘yˆüYY€kׅl[ܽ»*ˆBZ»óÎ;9t>.ÙЅèøñãåôÓO×(Ÿ)âîСCqò°
ÍN¤YŠÛ$‹òsDß ¬œ?Y„Å4°¡øõ@@dpçʒ709äDæ$¢f.C»'âV—.]$.õëח)S¦ÈÉ'Ÿœâ¾ï¾û8Äæ[Õ$1׽w ìÑ`­²tîܙ
S6#¸[ãÃÏ!l¾ê*£×^{CÂ8ñÄ™/ª¼™ÝԩSe޼yîâ,îþÀøŒ±cÇF?Ð,ͅ¦i>ú¨@=x33gðˆÃ0Ã0ŒãŽ;ñ0T(>|¸§¹‹@c‘ÐüAÎÃôéÓ#RgœqŽ¢@ñ•óñ<òڑ`,²Y,öïß_²qñÐCE"ñšY³f©Hˆà¬n¦SO=5±FB3f̠k|˜Ә¸„JekR݀.
8
Ï>û욶Áb8m¹—0f8k¬Eµ,~1ˆˆ•­:bވ›¡Í=–¦ˆÜs«"•Ø¢
*
»ᄏœvÚiÍp™³35†Q^Ã0Ã0ŒqãÆQޗVÈâÑsҤIJ„Üõ t‡‘,Îø¼ÀïüÅ!"N¾8‹¼իW#
IŸ>}XHËÑG-'N”µk×Êȑ#ã
Y<ÿ8}]@,ÜÉ¥=»1pÌUY<ƒʇD àÚfsÃïúEt@|=zt¢±|žwРAģà¢K³ÙÈÂQϜVÃK—.Eñ̫ä31îù|§œrJò
#™ñʽ¤<£•
–*žs¨JlãŠ1ÈóŒ3Pã7ë’%Kä„NêW4­üæÞ?ïkñâÅÄeIÌc‹-âñlV¥̟999ü½ÌÇÃ0êÈŸ–Iõaüðq{õb‰Ža†±jÕ*Ùu0ˆxû�°°P-8²J?ýôS¸º±Kâ <¹]¶¨X†ADeŸß|ó
Â.%¶Ê”ƒ®O®MÄVDOÄÎj¿äo"¬Ë{Hš¢¢"ò®ùŒÄÚàÂcÞTÂyMÃøâ‹/˜7ËçZ\¡Fr=O<†{ç;i¸O¿þúëô ‘Õ+žҪU+z	pÿ®	\yŸÌäøs¿f^b¾¨ôÄ|Ãü–ü|\ûaS>¸è/ó%…Üÿ³w˜
„Q€/àQZG%ZAÐB"¢´Ž„Ð6ÚGí"à9@	Äóþ|³ˆ9s真ú^/€€H—o·Ã8=œ½Ýy!Ýl6	¤^~ŸÝn·@+/	2s¹Þí³Ï@X®Tÿx1²Àç—}—˥že-¹òËMdYûx<¾„»‘Z  0ÏÍŸeèìv»UWj
¼4e6›¥ÛîåŠ)aîn·«tã¥w/—»ùm²k>ŸW:ÿ;¸ßïu:êôû¦ÀÈÍÉpIߪÿãñÈqÂÝÞ`x¿ß´.CŸspÁ@“²ôuòëõZçó¹2pòNÆìÖëu-—Ë€V
ƒJÑjµªÅbQ^š—_Só¤’!+Úé)L؛—àÑh”*‡&׬`2™Ôáp¨t˧~(7øʀ€„¹yÆãq}‡5Në:x¼xðxððËÞh4¿Çqÿ>={¶. Ë	FÅÝJl­$±;@BÐ%tQ"Qffª2YkkU9Ο‡Ÿ:ώó?׋Á¿wŸ¾üW@àà۷oñãǏ(•J1==Åb1¦¦¦ o
ñYÈ-•JYäM¿+
ñþþ£Ñ(r°à°Ü»©ï߿g‹ޜ^
…ÂXÜýtá›Çȼoj?ÖÖÖâüü\ä^ ÏH׻ÏÏÏqppÅÝZ­ÇÇǟÞêÍ@àw3Ýn7>>>âOooo±³³'''ã7yEޜ@àͼ©××רÞގ³³3‘7Ï@ààåååÓﶶ¶²³
"oN€À@ºàMF£ØÜ܌‹‹‘7@àp¢a|Á;³È{yy)òy¼¼ãƒAÔëõh6›‰¼Åb1òx,xOOOQ«բÕjEªP(ˆ¼€ÀŸÝ=Ì,xê÷ûYäm·Ûyð6Òhöµo¢×ëe‘·Ó鈼Þ& ð@*uxxÃá0þ8Ñðõoâáá!‹¼××׿yä`8fo“/îîî¢ÑhÄééi>þ$
ÞD·ÛÍ"ïíííïyœeÈÞ"F#{›äþ‡‘www7`’VWWcvvöŸ-x÷÷÷Q­V³ÏÌÌL¤‘÷èè(ööö`R¦€da›,xᗑÕj5[ô¦ÊårT*•˜ @à T*ýÒ
Þq777Q«ղۼ©¹¹¹XYY	 oÞD§ÓÉ"o¯׋Ôüü|,--Åd/€À;¹o¢Ýng‘÷ññ1R‹‹‹Ù@àÈۂ7Ñjµb}}=úý~$²ïÂÂB¼@ޏÁ;®ÙlF½^Á`©åååì./€À·oâêê*666b8FªR©D¹\öCàöî4êúÿãøûn7Ë43©+M0S[FºRgfTDAAfF™%UfRbAA QÕ̹m6me¥KÕ*HÅ@]ԘsÛþ|ÿâ®åÜ%›g¿ÇT‡€²'o_(±À·Àîݻcٲe½~ý;î¸#æΝ%x\ðjnnŽ^x¡×ïq×]wŬY³¢Ÿ^€²²²ܧGgggtttÄ@ڱcG¼øâ‹‘7•JÅÝwß•••Ñ™8s|³
ååå‘ïرc1¾ýöÛX¾|y,]º42™L$ÒétÜ{ï½qüøñøòË/}Ӛü¹œ	xpÁ;ˆ·Ð×_+V¬ˆ%K–DÞûï¿?yÞÒ`wo¡m۶Åʕ+“iˆ‚è¼`B˜>}zœ€ÀpÖYgÖHæV­Z]]]׫‹-ŠŠŠŠ()€À·P}}}¬^½ºWä}øá‡cêԩQRÀo¡͛7ǚ5k¢»»»à¸Gy$&Ož%
xÞÄƍcíڵIä-¸2^¼xqLš4)J ð¼‰Ï>û,֭[×ëë|ì±Ç"›Í€ÀPüï ùä“OâÍ7ߌ|gŸ}vîáµd› %Ào¡?ü0Þ~ûíÈ7f̘¨ªª
€t”,7±~ýúøôÓO#ß̙3 ¥ÀDC¯țoܸq‰Rà‚7q&nî.x\ð&úž{î‰|?ÿüs¤ $¹à=ztÜ~ûíñÊ+¯DEEE䫫«€L”·¼¼<*++cþüù1eʔH¥RñwÍÍÍÑÐЙ8íL4L˜0!ugϞÆ
‹ٷo_¬^½:N#@àpÁ{î¹çFUUU.ìf³ÙèKkkk|ôÑGññÇG{{{œ&€À ðΙ3'.\™L&ú²gϞشiSlٲ%ÚÚÚâ4^
{÷î=aÜmii‰ÚÚÚ\Ø=pà@œH:Þ$Ü&¥å;xð`¼üòËñ裏ƻï¾+î/@©nð~þùç½.‰›šš¢««+^`˜h1bDîѴbÔ××ìêŽ92¦M›ý ð¤R©‚ÀÛÝÝíííÑét:®¼òÊX²dI¬Y³&nºé¦(F’ëêê"ßܹs@àèg¤Mäޓ;vlÜyçñꫯƓO>•••¹Óæ͛—ãSši˜>}z><N@àèììŒ?ÿü³ øf³ÙÜéMî3Ï<«V­ŠÛn»-7©ï¼ó΋ŠŠŠ(Ʈ]»â×_I(ž={vô€À°sçÎȷ`B7n\”••ť—^<ð@¬]»6.\“'O޾\wÝuQ¬êêê3Ó ðl޼9òMœ81V®\ï¼óN<ûì³qýõ×ÇСCO¸£›oƌEO,|ñŹKâ\pAŒ?>^€“hjjН¾ú*ŠÑÜܜ»ê]´hQ<x°`b¡Øܖ––äkø7W¼€ÀÀk¯½ß|óMôåȑ#±aÆxâ‰'bٲeQ[[ííí±iӦ“Ì4ÿØÚÕW_åååЗtµ/½ôR¬^½:¶oß­­­ÑÕÕ‡ŽúúúX±bE,^¼8Þ{ï½8tèP¯‰‡äÇö¸袋b„	QŒä‚øèѣÑãœsÎÉÍ=ô% ±±1ù=±Dá+®¸¢àŠw߾}Ñ_I N.o½õÖèQUUuuu🼐¼f¥¨¦¦¦ ðΙ3'Þzë­8~üx13
wòäÉ1vìØøí·ßâQ*•
à¿x d·`çΝñûï¿Lj#"1lذ¨¬¬ÌÍ7ô×þýûã‡~ˆI“&ý8“ÇÖ֯_´Á@ggglٲå”[«®®Ž|×\sÍ@_²/µµµ‘oêԩqþùçG1’Íݶ¶¶è1räÈÜTÀ^8Pð°Z*•*úŠ7‰»


‘oöìÙ ðòï¼yóŠžXH[ËWQQ‘ÛôÀÀÀ֭[£½½=zŒ5*¦M›ÅhnnN\+xd4y°
`/ÉĶmÛNù±µ7F¾Y³f€À0È3
3gÎL&м]]]ÑãÂ/Œl6xؽ{w:t¨`b¡ªª*ŠqôèÑhjjòØ ð¶ºººSži¨®®Ž|3f̈L&x¨¯¯/˜X?~|\|ñÅQŒd˷¥¥%z$3ɃmxH&¾ÿþûÈ7þü(FgggÔÔÔD¾)S¦€À0ȏ­͙3§؉…^;¼cƌ	€¼l߾=þøãè1|øð˜9sf£µµ5ò
2$8ðL,444œÒck—\rI¯é`ðgr¤5*úcèСqË-·D¾½{÷€À0öïß?ýôSôH§Óqã7ÆÉd³Ùxꩧ
6w;::¢±±1^€ARSSùn¾ùæ¼-ÞÂ}Ýk¯½6ž~úéX¾|yLœ81òUWWǑ#G@à$õõõqøðá‚+ÞÇ<–.]7ÜpC̟??|ðÁxýõ×㡇ŠË.»,þnϞ=ñþûï@¾L@é+ø¯©üûµnݺX²dI.îö¸ꪫrŸ“ٺuk¼ñÆqìر™L&^øß}÷]îB÷¾ûîëw@mnnŽ
6ä~î?x€t
êêêâùçŸÏÍ-œH²±ûÁäæ–-[ÖgÜÈĠàÇŒçž{.²Ùl\~ùå1zôè¿ÂîŽ;b׮]ÑÝÝ/@‰úå—_r
////€À€À€À ð ð ð ð¼¼¼///ép¼¼///€À€À€À@&àRVV€ÀÀ¨¼¼<þKÀD€À€À€À€À ð ð ð¼¼¼¼///€À€À€À@&àÒÖÖłt:C†‰«»»;:;;£o”••E*•мÐÚÚłL&sJ·««+:::¢o$q7‰¼€‰^@à@à@à@àxxx^^^^@à@à@à@àxxx^^^€3O&ú@*•в²²N_/@II§ӹπ0Ñ ð ð ð ð¼¼¼//ðí؁À ë{|…^Á€àà¼^(ÒØKÔ÷/IEND®B`‚PK
!<šO¦ÿP<P<#webextension/icons/onboarding-5.png‰PNG


IHDRxÐ=èñPLTEGpLÔìÒçÒçÑæÑæÑæÒæÐæÒèÊâÃÞ¼×¶Ð…—/Y^8X\FVX°É```fff^^^TTTeee]kn>fnަJu~aaa[[[bbbcccz¿ïy¾îy¿ï{Àð|Áð|Áñ}Áñ}Âñ~ÂòÃó€Äó€Ãó‚ÅôƒÆõ„Çõ„Çö—ÍòÈæõÕëú½áù‡É÷Ááøøùöúûøùú÷ÉãöˆÊø…È÷¯ÙöçòõœÑõÁßó÷ùôòõö†É÷ÇâöÜíõïñðö÷òõöðŠÌúƒÃðÀí¾ê‚Âî„Åó‰Ëù·ÙðÐåí‡Éø€¿ë‡Êø…Çõ¿ëˆËùˆÊù‚Àì·Ý÷Úîüí÷þóùþìöýàðüÎèúÈîÿÿÿôúþÑéû¦ÕôèôýùüÿñøþåóýûýÿÔëûÐèôàñüÝïüóõî‰ÄíØéðòôíâììëõýÊæúàðûýþÿØíûäòüþþÿÓêúöúþñùþÅâ÷Þïüï÷þ•ÉìþÿÿÈåúÃáøÌçúÅâù÷üþùýÿäïïÐéûäòýéõýòøýçóýÅåûÇæûÀâúÄäû¿áùÍçúÂäûíöþéôü¼àúÚíüÂâú×ìûëõü¼Öê¸Õ뉾âz·áÅá÷Ææûæóü¾áúâñü¬Íå´ÕííîêêêêÃãûÂãûéëåÀãû¿âûååäÜÝݵÖîªÊàÜîüÖëûËæúÂàøÔêûÓêûÐèûYYYÉåúrrtBBDNMP””•ŠŠŒIHJSTU>=@ƒjjl¢¡£ÖÖ×zy{VVWÈÈÉ___ÏÏÐÔÓÔ\\\ýýÿºº»°°±ÂÂÃËĘ̈[ݯSƒxaÿÄMͦU–„^ö¿Ní¹P‰ÓãhÆÚžÀ"¬ÉE¹Ònjbó¥„tQ~Aÿª½+˓"¯†5áxp`9Ž“°$ƒ—™¸å´Q¼›XýÃM666&&&֫TMZ\H^c+w‡6nzŽ˜»ª
tRNSl¶Ùóÿ›þM`Ì>9IDATxì؅$AEÁjƥaðßÎcm§¦J6¤ž¾2}SÕMÛõ› k›ºJ¿ª†±ßãðKz§€­@7¥oꐹÀXۻAÝ`œÒ'U؟€îóŸwèÃ0¤T>«T÷¨SÓ Im€6u} ºԇ@x„@x^á@x„á^á@x„á^„@x„á^„@x^á^„@x^á@x„@x^á@x„á^á@x„á^„@x„á^„@x^á^„@x^á@x„@x^á@x„á^á@x„á^„@x„á^„@x^á^„@x‹ ¼Â€ð/ ¼/€ð/ ¼/€ð ¼Â ¼/€ð ¼Â;În,*¼ó’€¹˜ðŽK&Ƹðtw}x`khyÓöÝ]Ÿ_(Ïëäõ%<¯qåM›ÿww/ûå9žø#™œ?çËË.ìϛ¶¼ëõ|@x…—Gw>\רɛ¶¼·º‹ð
/çóíÛäÍ;¼Ë'÷C^áåþ¹YE„÷rÈÂ+¼\Š	o&Ÿ„Wx9ÞC&øÈN› @,ãÕþ»47úDaÙŽcÀ^Wà¯À^¼à¯À^¼àxÁ^¼¯À^¼/x^¼/x^ð‚¼/x^ð‚Wà/x^ð
¼/x^ð
¼àx^ð
¼àxÁ^ð
¼àxÁ^¼àxÁ+ð
¼àxÁ+ð‚WàxÁ+ð‚Wà/xÁ+ð‚Wà/x^ð‚Wà¯À+ð‚Wà¯À^÷'	¼àx^ð
¼àxÁ+ð
¼àxÁ+ð‚¼àxÁ+ð‚¼/xÁ+ð‚WàxÁ+ð‚Wà¯À+ð‚Wà¯À^ð‚Wà¯À^ð
¼à¯À^Wà¯À^¼¯À^7ï㩫^ÿ‡¼¡§{:xƒhoÞöêÕûð‚¼/xÁ+ð‚7xÁ^¼àxÁ+ð‚¼/xÁ¼àxÁ^¼àxÁ+ð‚¼›¼àxÁ+ð‚¼/xÁ+ð‚7xÁ^¼àxÁ+ð‚¼/xÁ¼àxÁ^¼àxÁ+ð‚¼›¼àxÁ+ð‚¼/xÁ+ð‚7xÁ^¼àxÁ+ð‚¼/xÁÛ¼àxÁ^¼àxÁ+ð‚¼£¼àxÁ+ð‚¼/xÁ+ð‚7xÁ^¼àxÁ+ð‚¼/xÁÛ¼àxÁ^¼àxÁ+ð‚¼£¼àxÁ+ð‚¼/xÁ+ð‚7xÁ^¼àxÁ+ð‚¼/xÁÛ¼àxÁ^¼àxÁ+ð‚¼›¼àxÁ+ð‚¼/xÁ+ð‚7xÁ^¼àxÁ+ð‚¼/xÁ¼àxÁ^¼àxÁ+ð‚¼›¼àxÁ+ð‚¼/xÁ+ð‚7xÁ^¼àxÁ+ð‚¼/xÁ¼àxÁ^¼àxÁ+ð‚¼›¼àxÁ+ð‚¼/xÁ+ð‚7xÁ^¼àxÁ+ð‚¼/xÁ¼àxÁ^¼àxÁ;xÁó¾JÇÓÁ^wL&O/xÁ+ð‚¼/x^ð‚Wž^ð
¼àí^ð‚Wà/x^ð
¼à¯<¼àxÁÛ
¼à¯À^ð
¼àxÁ^y:xÁ+ð‚·xÁ^¼àxÁ+ð‚¼òtð‚Wào7ð‚¼/xÁ+ð‚Wà/xåéà¯ÀÞpà/x^ð‚Wà¯À^ðÊÓÁ^¼ÝÀ^ð
¼à¯À^¼էƒ¼/x»¼àxÁ^¼/xÁ+O/x^ðv/xÁ+ð‚¼/x^ð‚Wž^ð
¼àí^ð‚Wà/x^ð
¼à¯<¼àxÁÛ
¼à¯À^ð
¼àxÁ^y:xÁ+ð‚·xÁ^¼àxÁ+ð‚¼òtð‚Wào7ð‚¼/xÁ+ð‚Wà/xåéà¯ÀÞvà/x^ð‚Wà¯À^衠×Á+O/xÝñ»;fŒ1CkH¬m€€÷þ·‹)ҨS9³{úÿæåEDK‘"êŸ;ÎÒs ¼„—ðz\T‹½ŠúÁCg鄗ð2ÇTTU<.ço<<v–Nx	/sL¡ˆ”—}Ácgé9^ÂKxµ쾨ˆߊÇÎҳ ¼„—5±KŠú-xì,ð^昂ˆ1T6¥^›áu>çñ¥^ÂËSø8âç|౳tÂKxó ¼—_<v–Nx	o„÷ö¬œë²7;K'¼„—9¦ð\gÅïË΍ÇÎÒ	/á́ðÕ~÷]ëó܏¥^›᭵í´4ϋ_xä,ð^æ˜Bmµ6§î_Ãcg鄗ð2ÇšÑ÷Uý£Ǝ³tÂKx™c
½·~hûĎ³tÂKx“ ¼}ŒîŒ}bÇY:á%¼9Þ1~ì±{8=vœ¥^ÂËScŽÌØq–Nx	/sLa—eNü±ã,ðÞïaøqbÇY:á%¼Ì1…5×4ì:_±ã,ð^昂eÙÙ?ûŠg鄗ð2ÇÖz—ñο7;Kρð^Âû®õý®w¿×ûËΙw§­£aü5!³Œ1.a’€]`nñ‚èî7-wIn·Üî{éùÔó¾êÕÁKÕ{àäùEÈzldéß†víæÚÆåÍZ‘÷c¥C¼/–£ÖÖ×××þ_Ö.\¶¶¶wvw·ÿaç¿+â…x±P_¯¯Õ×××ëÒ.ë-;ݝÝ*
7÷ýXé/ÄkˆwÆú¬¾PٽÒØÞÞnn7™=7ïýXé/Äkˆ·ޚU$לî¶ÛT™öAgaˆâ…x
ñ²PZ5ø°RyÍó¯~×뭕èßwÿõSÎâþ¯ ^ˆâmµ¬ֵÁ¿V'׽ÁՔôà{—êÅû×/õºþUÕ_Vƒ¼þXéF€x!^ˆ7Zu  —EMn­J®wɕWòè{a¡þlÝn×O‹¬䱗3>Vº ^ˆⵃ6S­PÍaerw0ˆd‰X»2ø½Öâ5ÄñB¼1yehÇtˆíxh¯LîE"btýÆÍ[·ïŒj"âQí…?j|¬t#@¼/Ä÷ûq߶ûvZÅý•É]rìÝ[‰â޿ǂMÌxá+Ý/Äñ’V栰"9ÄÏÉ<Gì^I7´ßq°Ò!^ˆ×o§O…ÿ«‘=ҫ“èÜ߼ëáÓ_·g›Ï]Þkb¥C¼¯ ^֊‚[+’-A<H¾eò‹«v½½¾™ñÜѯæa³yˆ•ñB¼f€x•a:ª±Ù¾p“l~ûä]ŸJ¯ÿ]ã±s7öۇ
¬tˆâ5	v¼.Ìjd‹µú{r·6/¿B»êxgñB¼/0¿ãU¬Fæ'¼µd÷G"…Õ[úþìÜã¶â˜K±Ò!^ˆ×ørMÑá²ÙÄõd!7G'òy«·ðý]gcÿ }̦¥"·!^ˆâ5ϊð†×M˜\õ2ݰŸOì:Wþ88>~x|±ҍñB¼oGûнì9Äí$VoW>«wÑýkì܇ó©hm¬tC@¼/þåA•²Ñ
dÛ'™Ž“´g½žuÎýXºŠ•ñB¼<jè	âqRަ^YØ
{žÈ+Ý0/ÄñƪZòl	b”çñø«z3îg…žç+Ý/ÄñλÈæjÙ3ïMOî%ex0SoäYß3>Vº! ^ˆâ•r±•b–=‡‚x’”äiMHzvÅñ!^“@¼/þ[ȹ]¼ì9è
ÕN“ÒüYSÏ*Žñšâ…x±ãe¯Ø\-{î	âYRç/î
Æ«Ž•nˆâ…xm6Œ‚ÃRgKDB8I5&ON÷ïU+Ý/ċG
¬•´²ÓzɳGæ<y™TåÕ85¯gW+Ý/ÄñΞc²YÒÃr琬)^$ÕyþZ0ž]a|ˆ×/Äñª}¨Ý_êÜâýê8ù.ޜ°¼»­
ãc¥â…xñO†c[îè¸^êì‘3OÞ&ßǍw‚Õk•+Ý/ċoßNµ’¹µę4DO’÷IÊóä9•dú{¨ëû÷ÉK—Ìùaéñ±Ò
ñB¼ØñÒ߬b»,q¶ؗîs%^%Òçï•\¥h靖×tIËs“±`¬²óÁJ7ÄñB¼³Í\Lul³l–7§n¥b¥*EIV	—*ýº:Ǩö©“þ¸!,9¬t3@¼/ħ›º¯¨—7÷xÃû!G°Ú9æôý)y|~:{Ï(âÇa¹ù`¥â…xñŒ7&©Ù.vL¦©š;nG¿n6Ë
§ߊ”*…:¯£_§²%ø~a©ù`¥â…xñåÚì?$`ÇĕòøÅÞîînãø£_7–ŸDyrƒ¥Z
]ÊÓß6„%æñšâ…x!^¹¯#ú²Q!;
²îÎO®~ÝPöxƒzgr:¡rzuNŸoæ;Fa‰ù`¥â…x񌗷vC:ö©”ÎîSî.#åûÔÉï_>[$I1ž—)£KX—«ÎÙþŸ垷è| ^c@¼/v¼Ã~º±³e]2w>힁åÛç÷/™-?ŠÄÝWËS—°~-ÿ=d^~Î[x>XéF€x!^ˆ—•B¯ôË{®Ëego‡ ÛR‘Gf粛߿TîòWa×Ïî\ËHXµµþ¯¥y‹Î+Ý/ċÿ«õ2«úe²»¯v¹º|·7óû—È=~Ð0šdJµ2Ü+}ÚP/8¬t#@¼/Ä;”Ÿ¦í™`ì⹳µ­D›ÁS7¯ñ\'ïFµéäKÊäË$åå£/GG“£‰B§’ÕÎè¿E™·Ð| ^c@¼/~N6ìË
×qáìì鏸Íȼ7ÖûWÍ׺¼áýy&L%ϴȔ
˜Š±¼ Ωcvÿ‘`ó¶ŠÌâ5ÄñB¼ñp=´f§1'[ªæQÞÔûWÌ{÷ÉÁRe‘2tà¶<ΠLï É*»ª–ê“Ñßaóú­óx
ñB¼Øñ2qúrU(;
MºÙ~¢÷¯”Cc4þvg˨¶~dôëz%_‡ïï[惕nˆâ…x‡qlSe«M^nîl6v··w·w3ٞ¿öBï_!ׅˆ¢»¯2E›Ë"«óÓ1?çíZùóÁJ7ÄñbÇ«o‘¸ÎÉã_›©\TÖÏQùUï_:§¿à¿ÍD9=šR9bT;uM¿,ê?u©·kåÍâ5Äñâw¼sŸ«ã`Qî8ŸöšÛÍ2lè÷+›=–âgM¤
Îô¬µö¿YKÍäÍ+Ý/ċŸ“ÅÁP*ǦbŸ—;ã­ýC¦ɥyuŽÌüõMý~å2?àŒu™*táò™,éæõ¿ÿŽF‰¼¼ù`¥›â…xñ¨þ{³e2rg<úµqX•±~¿2¹Î[ѻ÷³šêz¾t³ûߺ; Ã÷r惕nˆâ…xƒ!é% ?v…³™û×!іU»Í-½Ídžcjúý‹çV7DâÍô|ÁjdŸ/ÐÿI ¡z‹烕ñB¼†€x›ª_M}Í}vn[rÌ/®™¬6unþÿíë÷/ž½ˆløyúwðÛIúß6,œV:Äñ❹% ŠçŽ;ÚøKºTé”Û)íœóŒö¾‘~ÿ¢¹
Ñøåô%•锏·æP×ξ·`ÿ?yË;Ìâ…x!^SàË5µ£¸]gãÑCçÃã‡¸ÍÇìs™œíP›»¿¯@ɄQíU–\©*¿·hÿÿD<^ýüù@¼/Äkˆ—åbtî•?þ~’÷g…ÉF¡|MÅシ'ÅH
՞ÏóGF?W¼ÿgo êçÎâ…x!^3@¼¤Ò
˥æ¦ÔjïLS³g£Z—›Ó/֢;sBդ© #á¢ýG$ށß:o~/Äñš?'“;ºV½çùÏV²2’»|µmdŠdûîý­8él­ó懕ñB¼f€x¯©Õõð‡Á÷g‡4W _Šˆÿ±s>m$Wÿ‹Vo“ ¬ã$«ä’õzuݵ#Ù+Vj½s%ZŠˆ@i*é0Ø8u¸¶$mõMó_ö}3LÆ`c3±"éû˜xޛ™7¢яÇìàÒö‹ùª-°Ï+Ñ%ëãN'x	^âu2K‚̯ï	óN÷ÅʋY%¡+R¦Ù) M/Yw:ÁKðz¯“UïhÆàëëð#õ`í{¢cì	ºr|·…ƒ’ôÂõ¼/ÁëGoVU©‚Œ¯Â*8à}(º œ܆ÚhúøõN.ï½páú¸Ó	^‚דx«G™wd—¯‘v'€õ䶩ã—ëx,X]3^‚—àõ(f¼À
1A—q~PKcQºýžý¼…µý••ý•})ŠÚßÞßÞ^Ù>߷ýB·Að÷_ o¶øßàZFyñ‚õq§ûÁKðò¯JíT	.õ£¿ÿ'9 XN#·ߣ_Ã9Cç@H¨dCÒnƒàIÏÁÔØ3ǿÂûףÑõq§¼¯'ñ:™À%Sˆ©J©^â‡q’çRðÐUž†îx_~€éë?îC¢#dlԐÛn׳Ç7ð}֣‘õq§¼¯1ãÕצª™ù…ú"?Œ¢§Š»êU¸ã½øQó¿žK»Ïگ߯÷Wq¿?f¼/ÁëGo ’Ì*~¥–W˜#~'9Ž’¼¾[j·K­\ùÈzÝñüïT®m¯­í¯íKYƒÄ—ÝbƘökÅï”ðýUÜõq§¼¯ñáڝ S‡˜:½«Žúµ²Îtë¥F¯¯tخë̷œFîøëú)N2Jv¶jƒÓÀÔ%ÚL
¡ÿºñÝÝ\”:ëãN'x	^/"xqkVØH…ÇøëGqž“N{Ð?Ӡ„Xg½nüµüTx—´º€à¬D¯¿×Á÷W;¿>ît‚—àõ#>\ðÑIâøaÊëí^ÿœ~(èÕì#7~v?,Ðëßî8µX–mµílïØíâ—ëxšX³×Gð¼¯71ãÅ
Ýjá5ËÎû©~–V8ìê-ЫúãЍŸяʘïϊ…RÎՐ…Íñc<Ä?W?Wíõq§¼¯'ñáZÈ?$t8d
Îùqž|êÅþÅ:,Õџ$å4rãgñÃ
ޯ±c4šF£ðô¨®ó†Öú¸Ó	^‚ןøY
ê±}€—ª凕$íö/Óëa»žCI¹æÆÏàÇx¿öγi%!Ϥ˜ÚS|)o%:[w:ÁKðúÁeŠ
€âœùQ%yÚý±zŸãȉ¯Në§x¿Â;~Ž
Á7¶íãEÉ_|[‘׬G
/ÁëI/r9)‘@P›Æ_,'ybŽ& 7QìMíxÌ7Ÿb–֞f¡–m€Zö™/nóÔòT‚ج—/ÁKðúÿrM³Võ}®,0~M¥»ŸûWÐ!%%oÏ7…¿ˆ)êy6’Š¢n>kJ³¹cÛRÁVØÄØS]3þìý÷ZêŠY/w:ÁKðzÁY¬ óŒ„0§¾ânÒúkÿjjtŒ¯×2g¾+û!ìä!1!M»
rÛ|Æ/ãéaRÃzyŒà%x)_àU)§ OJ†$Tûµ2R½B¯UõÚ9”¤î|WôõE²Æ8 Z}—ÂÕ{üOOsÑ
½^ît‚—àõ#f¼YU+Q5Š@åë|·ÐWš*éÍ+¡;ߕüùnÛ¡-·mlŸßø›¸áVÕz¹Ó	^‚חx7Óç­R„.ðõùn©?%‰jm<¸ûóg¾`¢Ÿ∸Ðtáèj2\ýÇñŸQ	±^ît‚—àõ#>\‹~FRO)™øy’$àî”z]¬߻u{iiéAÞóOðÓÊ{͙ô®ùNŠñ¼Ço¶‘ŒW°^ît‚—àõ"‚Wð¨µQ"Jbw#‡Jýéµü`éöÒm)KwÌ|fþq~
§Ýåæxm67¥4'Ësüú®¹¦̝Nð¼žÄ3^`„Ç]>x]̑ðNÍÝ7»ûí}Héֆ™ÏÌ?Æñ†OÚŒÇÍc)”¦͆¦±íúbñ¿íà7€…€g¼/ÁëI/؇O€¡`Y 3wßüêáÝG?þᱥÆé|îü£¾þ´›M¨ÛìBRِTíväBõÆÿXGJ^#x	^‚׏ÞӼ3’*C]§Í¯§ÀîC­ߝê×ï?@ßéù"gþQ?¬àµØíw¥hèɋ-ӦÆlonv7í6Ä}Ñø7Hyó;à%x=‰	U€0‹Â
v{ýiô§?޻÷Ý{|©òáïÿ€b™OŠ5ÿÅ~¨µAÂ)d 9Y~â¿Áõº2w:ÁKðz3ÞHXeR*‰¨5è_]½W‚]èŸ÷îÝDí¼I%Ĕöüù1rɺÀí¨{$Edžœ¶‰¾÷ø6`¸Ó	^‚דøpM10SLsáKgø±ßÿØÿ(¥ÁVê;íFÎX)Eý)½7€X{þQ?Å9Ck¯k4#D¿xüI)Irît‚—àõ&~VC ^#u¶ó‹
Y˶ÛƴC½F=â̚µãkÒ/¯­trâ¬vW»RVM;lí¶
_Cü¿Z	3^‚—àõ$‚7ŠLº ®u5>^¦ÞǞ”«õ}£?5'¬ùñzÞ_HDõ—›¡?§Ã@Ñøóˆ_î¼/ÁëM<jÃ,
‘}&E
ОSTdEx��(ÏæWin`ùaa÷ßÿùðþ¡ `'ÅÔN›BWGsŠþ”;à%x½ˆà=ÍCƒH_ëj[ð´khÔvÛløöJ˜/‰C=¿ÉxÍû=i¼¼û	:^=Y52s%CNNŽNtl{nño¹Ó	^‚׋Þ0ŠBÅÂ8•z!¨ê@jÑÖÈÀv Ç¬;¾½•P͏0BTOXZºõH°ûß~.¡۝¶9Æs§¼¯¼†ˆ1 Ùz¢@×ò‹Ou¹óK1绥ûøHp÷Ó#@m2>ŽsŒ'x	^‚׫˜񦉨óÖ0ó´\Ïï7ê	tlGÁKûá’Òš»«nbˋB¶Óý¶æOð¼¯GñotDZõxiëÚþ/Óke&Ûìê0{ü	:Z?QZ?Y__]ÍBщµ+þ<ã¹Ó	^‚׏^䡋eð±¨SU|i„zð‡­J£Lg»
º’ï~k¸ë€Ѫ!×vûçOð¼/åïŒ×ü¥pû\Â:€éÁ@=èôpÉè¾áîPÜZßÚ:ÙrÆÎ5ž;à%x}‰g¼ú€ww00Y+,T£¾˜â|¶ûÑý­ÆwãK	—^
põ1ƒáPm@BR2ý&nÞñÜé/ÁëIo¸ˆ:‡:QU5daA–oìoF\ßÖ7ÜSÝúÝÝRà3%d ˆvȅ$ƆFsŽçN÷$‚—àåQC¨ÿRxø_ƒaOXùYáT¾¤C…P©T¿êÃ/†”K㋻ÿÏv¥¾õHq×͕Ûî¶{þñÜéžDð¼oYð‡ŸUÁ4Ù^uüó#÷LŠ»¶límíARý}3àäˆâøWºÛeif˜í‘&A€ÜF†ֆ$u}ÍÙÒM÷ötM¾b޿fÞ]u¹6k·(Çÿ×oûի×(?e™gK4Á<Oz(^Š—âýÞ}ƒ+k‰xSë'IϬÃù÷3½éžò­h·½Rᅲ÷ÂZI0OñƁâ¥x)Þã/'ŒŠÒ)Tr¤úa3ÞváÝ÷ݺ¾«DžW{}]û·Ò:Å<ÅŠ—â¥xáÝï?â¢Úá…pú”§+»¡uÐïÎÔO÷ó™o\1°7àߣU‚@ÒçõŸõPá7wIæyÒ)^Š7ï·åI°ݣúu¬îJÜÔá÷κ“o&^Î۶iáÝZQ±ù²;¿Ÿdž'â¥xcAñ¾)áNHTì‰×kë¿/îfâY•oÞ6λ_'<é/Å	Š÷ө>ñHþB}"ìÁ÷¿]d³Éd:™JLÔ`ÑîÛý>[9êU-á²Öþ¾?“hž'â¥x#Añþ€«ª“ëcçþ´.±©MgLi†ýîÃ?Ùl:ͧcäðn“ÈoY/%Žõrµ”XIº¯3©æyÒ)^Š7ïÏ"ÐG	#.=
µ—è%ºþ$X	Ôh cUJhó÷¿ϳüè\Inå­ñ𽐭C¹ïöÌó¤Gâ¥x)ޟœc÷’(µ–Ð~)ñ©ðë§ól–?ƒ=Øm–›¥C›Õf(¼0Ëø^eˆ:Ý<ÅŠ—â¥x?ö½•@¨À{’«E ïÕÈnϊsœgW¢ÔE~žEã¼Þ:%Bѹ…˜pž'=
/ÅKñã×ÚÞÕÈ��×ÿÎã.$ò0+¨’ón»Ü8CÉIöý„óo(^Š—â…Nq£œ­pº⺷¾ðÿÜ+±éZò€5žáv³?ȁ½0é<Å	Š—â卷Æ [#á,ìlì
„õãÃÅ<»]¬OÊ]‡¶•Ð<Ü_7xwã0ÌÊv¹•—e²yŠ7/ÅKñºšÅË©†ƒQûæþz¾»Z¯o×/¢9ìwUl@!aO%¨9ñ<Oz(^Š—⵶èÁ$[¡FÕ;óÖüqýn¾s…wo%F×È@÷µ×„ýfë£Bg÷u/í<Oz$(^Š—â5V$Ž…k«¢úʚêý[(÷õ4°óDv³½‘ؾ˜4ó<éQ x)^ŠW<kª¢°…éÝBjYóöúÝŽÿÀüÆC¤'ñ9©Öéçyң@ñR¼ï¥5—¦º¬D¸¶è-ÖFö*û?{f¬ÛÆ„á‡H‚tÎ3˜®XäX[M
v¤&@ +µtqÄ.}5#š“§ËüýÖf²GPÐ
^ÿÇÑîÌÎM·ø°‰“Eú¸XŒß؏û=w˘{–åqÿ¼ÿ—Äî¿·¸(<Âo¿÷¼Ä+ñJ¼¢ڋ÷)ÉÓþ£9w±_¼žýð¡,BÖBuó¯Ä+ñÖAâ¥oí+˜¨mCà=œ×æûýh|(ŽDáóæ%^‰W⭃Äm¨ÔÀú5ýtöî¯S‚#±ýöþւÝæuÓ%^‰·
¯¿Ks‡2uq²]çûÅhÌÏ–Ä;ekÒȼnºÄ+ñÖA/^¥Ëb¿kQQ®L&çݻ”ôå¹EX¬Ióºé¯Ä[‰ÂìSêm³¥ïQãï¿uïfêÂ<½»syínw™È
ø7ÏOQz¯yÝô:H¼¯Äkô½-T)R¬T-ú¬ÙïC¿4Oï.†ݳð,¨32/y‰·¯Ä+ñBªðg¿ögP1s•zm¾µ°SÛqì_Lϻw%¡‘ËbdÞʼnz$^‰Wâ…L!Ì@B(×p61ïÞÝw·«ÛÕj·Úېû¬	øM±ß̼Ä[	‰Wâ•xßxt+P”Yδôš—x%^‰·i$ÞôqËÕ0¬†•D7ì؛>šš×M¯ƒÄ+ñJ¼ÉEٓ:5¼ûeümeP`f4¾&)´ü…És…Øȼnz$^‰WâM=~ÆSR§ö÷î'Œ’+Jg$—¡Íë¦×Aâ•x%^ó$AZ¥vï~_̃yÞ<Ä[‰Wâ•x«Cï¾¢è"±ÏZ›×M—x%Þ7EâõÿkàòЏàŠk6Ì,†—ÓּÄ+ñJ¼¢áoæÝÃp°@v~%ÙÎüw¯x%^‰·¿â“ýḥ¸\j‡kïف—%ØܼÄ+ñJ¼o…ÄÛ?'=+r½w)µi‘1Çòç¡Åy‰Wâ•x߉w›¶iš؋¸w;U7t¾Ϻ™E˜£—½Bý;pèX·6¯›^	‰Wâ•x·X¢TyÆ>½œõñËçéݢè…ûq¦½yÝô*H¼¯Ļ	áñ—n¶[[·Ä
#aËú Ÿ7ï~]$Ê,Öñ¬Éy‰·¯Ä+ñҮêѪ#s>i-±ClX,ü,3µiØ~Çôy´ßbÝuënmñ¼Գ5äÆ^ùÕÙä¼Ä[
‰Wâ•xñp›6±nç½UÈ΍9Vü¼oJFj™õ“}åâ—ü½ûø$ª‡îÁÂs
Œgõú½ü»Vçuӫ ñJ¼ïY«®×óòŠzq~ïžøRÌÍns‹ç>ÈÏ۝×M¯ƒÄ+ñJ¼u€w?‹å#X?º´;äQf~Îïl±}Ï۝×M¯…Ä+ñJ¼°æ4Wöͻ£‰÷D™ù˜SjÌó°ns^7]â•xB/^xÜQVeɁ(:Â^»ó¯Ä+ñÖAâ=º77Ç3–ž[sÀzãÞýä6ù‚Œ¢#mÏë¦K¼oe$^‹\¨Óg¡æOÞËǥEù?é—kïÙòïH»ó¯Ä+ñVBâ
V%qï~¥Ì(¶XGb¯õyÝt‰W⭄^¼.׳X7X¯¯}ͼ[änygqùŒ´;ÿ¯Ä+ñþ𗸊w5ÿq
úô¼´¦wMN§åétwrQÙŠ9vÂ^ûóºéMÞt‰·?‹ëø±›››ÍÍfƒ?ÅKk÷îß”yËåEòsÀ^¬۟×Moò¦K¼x��_þa·Žq‡0ŽŸ+U
$Ú;¤M4[Ó)‡	qºÁú´^?¥ðŠXúϏm¦ýD+x·#d?'¹;$¬¦ߓ­„×ôT޶"ßϤzÒû‡xWÙéî”ÐòXáb¾W£7ÕÇïgҁx[x×óyÉOµZyœ×Çú8/r·Äl?rª;ègҁxÛx×5-ûPeYlùYËÏ~Ÿt~¿yÆx‹ñ¦­<§§­iÝϤ/ð6	ð®ÿdÑæ¾Š³ïï2}Œ1š¼r·’ëtµ%Àt֛ê^ú™tàަÞzm=£³{;0«ß뭗~&x·}€woäîÍÝÍÁÊvOQ×ßûè^àÞxÇh¹ۨ}®•Žú™tà޶ÞE;Ïcô¼æîåzñؖ€ºL©öX¡ZѝöŽú™tàÞ6Þ`œzUßòsøpvwc3À<B¬„«üŽr�I^àmà
õ,]ýyv|}£gt¤­¿»R»W­tÕ¼À¼ÿ)s»ªÐAïkrWP킬|ótÕ¼À¼í¼{£߻9bJy÷ù;}õ3éÀ¼ß
ðÊÝy¬ù>ÛJwóEµ~Q꽳~à^àýZ€wMîšHB¬Œ]é~»I^àýV€7¹;{^óËÖü1‚«ünwýÀ¼Àû…oé®ðòØ&Èêweºë^àÞÖÞAEý¬;C׶¡@©¬„M)Q뫟I^àmàü_Åöy°¿h	¡†×i>٪C'ÌT÷ÙϤ/ð6	ðÊÛÕñKݧ߻–ðòœ^'m©Îw½;döQ¾uÚϤ/ð6
ð§Õÿdmn~Žžñ¤äpÕÏõ»Nû™tàÞ&Þ_»C˜ô?ìÔ±þ­¿Äñ…˜xÅ{"^Ä+^ñ"^ñ"^ñŠñŠW¼ˆW¼]â¯x¯xŋxŋxÅ+^Ä+^ñ"^ñv‰W¼âE¼â/â/â¯x¯xŋxÅ&^ñŠñŠW¼ˆW¼ˆW¼âE¼â/¿x¯xŋxŋxÅ+^Ä+^ñ"ÞñŠwìÝAr¢ÐÆñE¼¤2étvoꀅœ¡K`EqãÀÅOmM@{C/÷Fmû©WMխâûO©¢X?«Ž׃‰ðºáâ$ÍFÒ[žÊsåI_²ÙÌòø„—ð^æ¼ÓŸͥ¯Æ|¶KO)|¦¯û^Â{Œð0ùÒOþLãž\OðY2v^Fx	/á=”ÁõäîOì{é…ö „)$¼„÷áv„÷õÇ~ô"/áµDx	ï#¼Ógœôø:lxá%¼ýGx§oø«ç©tªTÕY1Lqu–*	/á%¼C‹ð†Kü_ËNò®|«dEx	/áV„7œá¬e(íû…oö‹ð^Â;¨o”âB³ò&øf	á%¼„wHޣ»0=ã«4’¶=á›=^ÂKxá-îÆLQÜYÞuŽo•o/á%¼l8ð–#«QS8:ț—Ҳ°P*n¡®öÝR©"ÂKx	/¼áÑ݉à•Qu7”vÈè
¹Z	„ð^ˆ¯ÂWó‰üW&y•´ïàêÕ^Ž2^ÂKxـà­`šÈ)¼2™ÃKû²[wH¡«	/á%¼lXðЩ@þ†W]!ík {“ky0­	/á%¼lXðš¡B&rïG`áIû¶Ð%Áíme„—ð^æ¼“2
ìðŽ7¡t¬܆·ØQ½–.E0MåJ;˜F„—ð^漫x+mð	ûҭàÚú°@:5†imE¤Bx	/áeÎÀ;ÍñY¾»
o  «úÙÛؽºÚ>^~ ¼îDx	/ám`J¶WàÌaJFŽÂûdý}îðµAx݉ð^Â[c_s^/ÆWyà¼-òÆÐe„ם/á%¼ÞûŠðŽؗ‰£ðfÐ-äJÏÐ5„ם/á%¼¾m=ƒ÷õö©ÀUxè–öݑ[ÂëP„—ðÞS]?Ná=7ÙExƒtÉD.æÃT^—"¼„—ðžÌªÑ)¼QŠ}…8¯DÖû•0ù„ש/á%¼âÅØ{àÝäø*i¤}~SD·ፊÆk-ÿ¼….ÂëV„—ð^™̱ïÁ?;:º»�·¹oÓe-o
]c]å@x]‹ð^Â+¾_LY‚¯òthaèö­ð~‚ÏҮè
ëò2Âë\„—ð^#ÔÅÒRº”@·³Â+;èi׺¹í¢"¼Fx	/á•—šEÒ)˜VvxW0õqw]Ax]Œð^ÂÔ	Îz›Šóð6ÐÍäb3èÂëd„—ðÞ`{&ï‹/îû²,~œ4"¼ÎDx	/ᵿ/}1–¯gxO¼®ðžIn¹^G#¼„—ðJ™â¤ê¿Ò¼RœM];ÁŒ`ÚɅÖ0y„—ð^W#¼Îpl>‘^պªjéïýsܺ\/á%¼ÎFxƒé{‡õx­u„wqýyè~^ÂKx™£ðšü'˜
qÞÎytá%¼„—¹oàÅöõÎÁÐ-ìkÐ	/á%¼ÌMxMµÊ"ù§ð6b­é¯í}–ÿ® ¼„—ð2gàí?˜žÇbiüÜ
ÞLžýM˜„—ð^6(xñ^oÊ+mêwt‚×rXwӆð^ÂË܂wR®oJËRÜ]*-›$êCÛzkZ0M	/á%¼Ì)xWwÙûҪwKÛa-/á%¼Ì%x_sÜU%­Úâî¶ҶÖ*!¼„—ð2—àmp_ÉDZ5ǝͥuÓ¶ք—ð^æ¼5î+¤U#…»R#i]PÃR&„—ð^æ¼Þw•IÛ6êev£µ‘NÕyç°õû7?鄗ðþ³¯L«7›8_,fišïKL@2›—ÿcﮑä0
_¢«t
sfvî˜zK™cC:‘ofÚhA´R{èÃ$h-ϼï½±¼Šð³tÂkŽð^´¯ãºK'¼„÷^Â빮ÇÒ	/á½9„—ðúî9Ÿ¥^Â{S/áu÷\à°tÂKxoá%¼Ή;râ°tÂKxoá%¼~àN>K'¼„÷Ú^ÂëxîÏa鄗ð^9Âûëá‹Ð~DxǎŽÝÇG,ðÞ+ExßEj$¶åõ#¼ ¼„—ðîEj&ù(7áTƒuuKá%¼„÷k¬Ä?e=.®¥YÞvé ¼„—ðÚjYü‘ð^°ªn'³
Ým¹t^ÂKxCµ*éÈ:<@ÑÓÙ]_:á%¼ÿÁ͇7TëBYƒG†ÓLë¢ýÒAx·Úww䝬ÆKrúZëh„wwÞ÷j£DVⵐi¦ÏåÂ/á%¼{±Úì%á­|z__S ¼„—ð†ªDDxG¬͟þÉõX_˜á%¼„·«1á³,±.è‰\˜á%¼„·óP•úHxËõôÔ`(Æ@x	/žÉ&"Uê¡Üτ©®ž¤b„—ðb_6‘¨R¶ÜûŒ5ê.å%¼„«þ¼–õ¾«r¡Ü¯ÿ#iOp¶ð^¬úsøLÖy¤ÊEr'<;4ìn>Ы²‚¹^‹¦Îػ£Ա(ÃáÒMУïÿ&Nb¼2“xUÙP’&E´´àz´Ä3néÚÒ0œ÷ÿ=ù³²ºhÏ][°+}ÕgÒo¨0ItSÙEv#ÅøIÐáE€f‰n.áŠâNMu‡ãÁÈãe˜	š#¼M;ñp-l._™Áè[O‚C^ޖ„*³¶/;žþñ§w0
 ¼Â4ñ8—PE¶þ•dfø¢g÷9Œð‚ð†ja­ͥ†1OõéÅA„7T˜'	TǾ‰S©WwO6NG@xAxƒѵï"©W3ôÿÂÂ;“0e…}SôE“ºå<	AxAxùëZ×nEžò©» ¼ ¼Aêv«ŸŠÂ|.ïÝááå¯köC.ªlpè~„78{½û[9'Ó{Ãû¡#3m„—ðBqS–åòºYx[/ôeƒóñŸA*õ@x	/óíõ²|³úæ/Ãüƒ"]ØϺ¢1‹ÂKxý˜oWå»5áýÆƺ"ј÷‘w  ¼„Ê|{_VVÞ×Bò
ӵ_Eޑ÷Y@x	/”ùvUVî½áå¹-ìEO4/£Q* ¼„õóíe5/WÚ(íÀçÝJ‰bÈIá%¼Ðçۛ²òà	/ÿI7¶°ur©—ñhð^èóíª~Ã+æ<ñ’€tVQlRå‘ÂKx¡ͷËòݝìh%ònE…Õõ{RÇ/á…2ß^—•-¼ܓu­WÑͤ/á…2ßÞ:GŽ9÷d"Y·°ß(â</á…o¾½sF`ǔ{²Ž’]WQÄy&.^Âu¾}ÕÃÛü¬!‹Öv/E±é¥âá%¼pç[7¼¯Rc’„übÈha*{Rá%¼Ðç[ÿÄ;	ú¬!¶Íu¥ÂKxáoõ¯9ú¬¡“÷m3}ÑÂKx™xխ¯+	ü¬¡“Çv_ý(# ¼„{ìx••S©1çm
Qßî£Áv„—ðrÕà^öºÚ{=]#½%» ¼„Î|«½&’§k.#i^XŸ8#u@x	/”ùö¶¬ü%»‚{º¦èô­n“	/á…B™oͶÅk£¾­w¡§]«‰„—ðB§̷¯e啧k‘­÷„—ðB§ͷ˲r¦?]Sˆþjȸ# ¼„:}¾½++ëSýé_6½‚î^‹æ”ù֬ËÊúÒót/
Gt—ð^4§ͷ÷˲²¾ð<]プ¹uõÄ„—ðBŸoÍMYYîl¦,y?ÙpÏ@x	/šÓæÛU¹µ>nj%ï'ißþg# ¼„{Qæ[óQÞåm“%ïLÂҳ¿ř€ð^ìG™o¯~—÷¡Rw*é6[4€ð^(ó­[ޛ&Kޖ„%‹m¥X/áE#î|ëÖø¶ɒw"ɹh ¼„Íéómµû]_5Yò¶%0i̓5ÂKxќ>ߞ­֫Sß%/»Éx	/áE3Ú|«ksPæÈ
km_p|„÷Ø.~a/—r m¾ÕMØ5¸6?䤁ðÞÓ3ìåDþ¸Vâ5oI€·¼™€ð^Â{DSîiaÂKx	ï1ÍØ5¸m. ¼„—ðÓ9w
®Þ_Y»ºÀ^®/á
;¼2g×ð™1üҏïäG†—ðދ‡}ͯéÃÏvÉ/ð^~Žÿ²sǶºÂ0F·°Ŀÿ"Ä@jÕÛ§°žnq¾REŽ῟ù‘ßμ÷Ô^ð‚7f~vEoàxÁÞ+?›w´^¼à}ò»­Wà/xãÌÏæˆÖÀ+ð‚¼+¿{£5ð
¼àïߝÑx^ð‚7~ÍeàxÁޢ7¿ûEgàxÁà³ùÊ^¼Eà]ÍW^ð
¼àoѓÍW^ð
¼àoѯùÊ^¼à-:²y—¼/xÁ[tæwçˆýÀ+ð‚¼uo­Ø¼/xÁ[6ÆÌޟ”Wà/x‹V]±x^ð‚·lܳy¥¼/xÁ[teëûx^ð‚·hÜÙü¾^¼à-º²ê‰ýÀ+ð‚¼eOVýFì^¼à-»š‡
àxÁޢ'ˎ¨¯À^ð6^yÏ;ö¯À^ðVÝ3{?£¯À^ð­ìó‚Wà/x‹îÙ<æ¯À^ð½Y6ïØ¼/xÁ[4ÎìÝæ¯À^ðYwÅ~àxÁޢqeïx^ð‚·è™Íò‚Wà/x‹VnôFx^ð‚·õ}-çہWà/x‹Žl–¼/xÁ[t5Ë^¼à-g³¼àxÁ[Þ#·*ä¯À^ð6r¾Q^¼àm6dnË^¼à-:r¯›Wà/x‹VîuØ¼/xÁ[ô˽~wWà/xÛþ‰^¯•Wà/xûǼ9WԁWà/xëVîvÝQ^¼à­WîvQ^¼୺ÏÜn¨¯À^ð=3·;Ÿøc÷_;uTBA°Ł׿ˆA6¾oѯ—aY8fBŒxÅ{!ñ>-vïƒxÅ+ު	£‰ñŠW¼e;2æ/â¯x«fdüv/â¯x?7Æ/â¯xKúz#çmâåîxÿBâÉt3{<IEND®B`‚PK
!<Ҭ²àªªwebextension/log.js/* globals buildSettings */
/* eslint-disable no-console */

"use strict";

this.log = (function() {
  const exports = {};

  const levels = ["debug", "info", "warn", "error"];
  if (!levels.includes(buildSettings.logLevel)) {
    console.warn("Invalid buildSettings.logLevel:", buildSettings.logLevel);
  }
  const shouldLog = {};

  {
    let startLogging = false;
    for (const level of levels) {
      if (buildSettings.logLevel === level) {
        startLogging = true;
      }
      if (startLogging) {
        shouldLog[level] = true;
      }
    }
  }

  function stub() {}
  exports.debug = exports.info = exports.warn = exports.error = stub;

  if (shouldLog.debug) {
    exports.debug = console.debug;
  }

  if (shouldLog.info) {
    exports.info = console.info;
  }

  if (shouldLog.warn) {
    exports.warn = console.warn;
  }

  if (shouldLog.error) {
    exports.error = console.error;
  }

  return exports;
})();
null;
PK
!<ÏçÃÃNNwebextension/makeUuid.js"use strict";

this.makeUuid = (function() {

  // generates a v4 UUID
  return function makeUuid() { // eslint-disable-line no-unused-vars
    // get sixteen unsigned 8 bit random values
    const randomValues = window
      .crypto
      .getRandomValues(new Uint8Array(36));

    return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
      const i = Array.prototype.slice.call(arguments).slice(-2)[0]; // grab the `offset` parameter
      const r = randomValues[i] % 16|0, v = c === "x" ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    });
  };
})();
null;
PK
!<62z!UUwebextension/manifest.json{
  "manifest_version": 2,
  "name": "Firefox Screenshots",
  "version": "33.0.0",
  "description": "__MSG_addonDescription__",
  "author": "__MSG_addonAuthorsList__",
  "homepage_url": "https://github.com/mozilla-services/screenshots",
  "applications": {
    "gecko": {
      "id": "screenshots@mozilla.org",
      "strict_min_version": "57.0a1"
    }
  },
  "default_locale": "en_US",
  "background": {
    "scripts": [
      "build/buildSettings.js",
      "background/startBackground.js"
    ]
  },
  "content_scripts": [
    {
      "matches": ["https://screenshots.firefox.com/*"],
      "js": [
        "build/buildSettings.js",
        "log.js",
        "catcher.js",
        "selector/callBackground.js",
        "sitehelper.js"
      ]
    }
  ],
  "icons": {
    "32": "icons/icon-v2.svg"
  },
  "web_accessible_resources": [
    "blank.html",
    "icons/cancel.svg",
    "icons/download.svg",
    "icons/copy.svg",
    "icons/icon-256.png",
    "icons/back.svg",
    "icons/back-highlight.svg",
    "icons/help-16.svg",
    "icons/menu-fullpage.svg",
    "icons/menu-visible.svg",
    "icons/menu-myshot.svg",
    "icons/onboarding-1.png",
    "icons/onboarding-2.png",
    "icons/onboarding-3.png",
    "icons/onboarding-4.png",
    "icons/onboarding-5.png",
    "icons/done.svg",
    "icons/icon-welcome-face-without-eyes.svg"
  ],
  "permissions": [
    "activeTab",
    "downloads",
    "tabs",
    "storage",
    "notifications",
    "clipboardWrite",
    "contextMenus",
    "mozillaAddons",
    "<all_urls>",
    "https://screenshots.firefox.com/",
    "resource://pdf.js/",
    "about:reader*"
  ]
}
PK
!<Ğ=B2
2
#webextension/onboarding/slides.html<!DOCTYPE html>
<html>
  <head>
    <!-- onboarding.scss is automatically inserted here: -->
    <style></style>
    <!-- Here and in onboarding.scss use MOZ_EXTENSION/path to refer to local files -->
  </head>
  <body>
    <div id="slide-overlay">
      <!-- The current slide is set by having .active-slide-1, .active-slide-2, etc on #slide element: -->
      <div id="slide-container" data-number-of-slides="5" class="active-slide-1">
        <div class="slide slide-1">
          <!-- Note: all images must be listed in manifest.json.template under web_accessible_resources -->
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-1.png');"></div>
          <div class="slide-content">
            <div class="slide-content-aligner">
              <h1><span><strong>Firefox</strong> Screenshots</span><sup>Beta</sup></h1>
              <p data-l10n-id="tourBodyIntro"></p>
            </div>
            <p class="onboarding-legal-notice"><!-- Substituted with termsAndPrivacyNotice --></p>
          </div>
        </div>
        <div class="slide slide-2">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-2.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderPageAction"></h1>
            <p data-l10n-id="tourBodyPageAction"></p>
          </div>
        </div>
        <div class="slide slide-3">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-3.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderClickAndDrag"></h1>
            <p data-l10n-id="tourBodyClickAndDrag"></p>
          </div>
        </div>
        <div class="slide slide-4">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-4.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderFullPage"></h1>
            <p data-l10n-id="tourBodyFullPage"></p>
          </div>
        </div>
        <div class="slide slide-5">
          <div class="slide-image" style="background-image: url('MOZ_EXTENSION/icons/onboarding-5.png');"></div>
          <div class="slide-content">
            <h1 data-l10n-id="tourHeaderDownloadUpload"></h1>
            <p data-l10n-id="tourBodyDownloadUpload"></p>
          </div>
        </div>

        <!-- Clickable elements should be buttons for accessibility -->
        <button id="skip" data-l10n-id="tourSkip" tabindex=1>Skip</button>
        <button id="prev" tabindex=2 data-l10n-label-id="tourPrevious"></button>
        <button id="next" tabindex=3 data-l10n-label-id="tourNext"></button>
        <button id="done" tabindex=4 data-l10n-label-id="tourDone"></button>
        <div id="slide-status-container">
          <button class="goto-slide goto-slide-1" data-number="1" tabindex=4></button>
          <button class="goto-slide goto-slide-2" data-number="2" tabindex=5></button>
          <button class="goto-slide goto-slide-3" data-number="3" tabindex=6></button>
          <button class="goto-slide goto-slide-4" data-number="4" tabindex=7></button>
          <button class="goto-slide goto-slide-5" data-number="5" tabindex=8></button>
        </div>
        <!-- FIXME: Need to put in privacy / etc links -->
      </div>
    </div>
  </body>
</html>
PK
!<ÿ®š§hh!webextension/onboarding/slides.js/* globals log, catcher, onboardingHtml, onboardingCss, util, shooter, callBackground, assertIsTrusted, assertIsBlankDocument */

"use strict";

this.slides = (function() {
  const exports = {};

  const { watchFunction } = catcher;

  let iframe;
  let doc;
  let currentSlide = 1;
  let numberOfSlides;
  let callbacks;

  exports.display = function(addCallbacks) {
    if (iframe) {
      throw new Error("Attemted to call slides.display() twice");
    }
    return new Promise((resolve, reject) => {
      callbacks = addCallbacks;
      // FIXME: a lot of this iframe logic is in ui.js; maybe move to util.js
      iframe = document.createElement("iframe");
      iframe.src = browser.extension.getURL("blank.html");
      iframe.id = "firefox-screenshots-onboarding-iframe";
      iframe.style.zIndex = "99999999999";
      iframe.style.display = "block";
      iframe.style.border = "none";
      iframe.style.position = "fixed";
      iframe.style.top = "0";
      iframe.style.left = "0";
      iframe.style.margin = "0";
      iframe.scrolling = "no";
      updateIframeSize();
      let html = onboardingHtml.replace("<style></style>", `<style>${onboardingCss}</style>`);
      html = html.replace(/MOZ_EXTENSION([^"]+)/g, (match, filename) => {
        return browser.extension.getURL(filename);
      });
      iframe.addEventListener("load", catcher.watchFunction(() => {
        doc = iframe.contentDocument;
        assertIsBlankDocument(doc);
        const parsedDom = (new DOMParser()).parseFromString(
          html,
          "text/html"
        );
        doc.replaceChild(
          doc.adoptNode(parsedDom.documentElement),
          doc.documentElement
        );
        doc.addEventListener("keyup", onKeyUp);
        doc.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
        doc.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
        localizeText(doc);
        activateSlide(doc);
        resolve();
      }), {once: true});
      document.body.appendChild(iframe);
      iframe.focus();
      window.addEventListener("resize", onResize);
    });
  };

  exports.remove = exports.unload = function() {
    window.removeEventListener("resize", onResize);
    if (doc) {
      doc.removeEventListener("keyup", onKeyUp);
    }
    util.removeNode(iframe);
    iframe = doc = null;
    currentSlide = 1;
    numberOfSlides = undefined;
    callbacks = undefined;
  };

  function localizeText(doc) {
    let els = doc.querySelectorAll("[data-l10n-id]");
    for (const el of els) {
      const id = el.getAttribute("data-l10n-id");
      const text = browser.i18n.getMessage(id);
      el.textContent = text;
    }
    els = doc.querySelectorAll("[data-l10n-label-id]");
    for (const el of els) {
      const id = el.getAttribute("data-l10n-label-id");
      const text = browser.i18n.getMessage(id);
      el.setAttribute("aria-label", text);
    }
    // termsAndPrivacyNoticeCloudServices is a more complicated substitution:
    const termsContainer = doc.querySelector(".onboarding-legal-notice");
    termsContainer.innerHTML = "";
    const termsSentinel = "__TERMS__";
    const privacySentinel = "__PRIVACY__";
    const sentinelSplitter = "!!!";
    const linkTexts = {
      [termsSentinel]: browser.i18n.getMessage("termsAndPrivacyNoticeTermsLink"),
      [privacySentinel]: browser.i18n.getMessage("termsAndPrivacyNoticyPrivacyLink")
    };
    const linkUrls = {
      [termsSentinel]: "https://www.mozilla.org/about/legal/terms/services/",
      [privacySentinel]: "https://www.mozilla.org/privacy/firefox/"
    };
    const text = browser.i18n.getMessage(
      "termsAndPrivacyNotice2",
      [sentinelSplitter + termsSentinel + sentinelSplitter,
       sentinelSplitter + privacySentinel + sentinelSplitter]);
    const parts = text.split(sentinelSplitter);
    for (const part of parts) {
      let el;
      if (part === termsSentinel || part === privacySentinel) {
        el = doc.createElement("a");
        el.href = linkUrls[part];
        el.textContent = linkTexts[part];
        el.target = "_blank";
        el.id = (part === termsSentinel) ? "terms" : "privacy";
      } else {
        el = doc.createTextNode(part);
      }
      termsContainer.appendChild(el);
    }
  }

  function activateSlide(doc) {
    numberOfSlides = parseInt(doc.querySelector("[data-number-of-slides]").getAttribute("data-number-of-slides"), 10);
    doc.querySelector("#next").addEventListener("click", watchFunction(assertIsTrusted(() => {
      shooter.sendEvent("navigate-slide", "next");
      next();
    })));
    doc.querySelector("#prev").addEventListener("click", watchFunction(assertIsTrusted(() => {
      shooter.sendEvent("navigate-slide", "prev");
      prev();
    })));
    for (const el of doc.querySelectorAll(".goto-slide")) {
      el.addEventListener("click", watchFunction(assertIsTrusted((event) => {
        shooter.sendEvent("navigate-slide", "goto");
        const el = event.target;
        const index = parseInt(el.getAttribute("data-number"), 10);
        setSlide(index);
      })));
    }
    doc.querySelector("#skip").addEventListener("click", watchFunction(assertIsTrusted((event) => {
      shooter.sendEvent("cancel-slides", "skip");
      callbacks.onEnd();
    })));
    doc.querySelector("#done").addEventListener("click", watchFunction(assertIsTrusted((event) => {
      shooter.sendEvent("finish-slides", "done");
      callbacks.onEnd();
    })));
    doc.querySelector("#slide-overlay").addEventListener("click", watchFunction(assertIsTrusted((event) => {
      if (event.target === doc.querySelector("#slide-overlay")) {
        shooter.sendEvent("cancel-slides", "background-click");
        callbacks.onEnd();
      }
    })));
    setSlide(1);
  }

  function next() {
    setSlide(currentSlide + 1);
  }

  function prev() {
    setSlide(currentSlide - 1);
  }

  const onResize = catcher.watchFunction(function() {
    if (!iframe) {
      log.warn("slides onResize called when iframe is not setup");
      return;
    }
    updateIframeSize();
  });

  function updateIframeSize() {
    iframe.style.height = window.innerHeight + "px";
    iframe.style.width = window.innerWidth + "px";
  }

  const onKeyUp = catcher.watchFunction(assertIsTrusted(function(event) {
    if ((event.key || event.code) === "Escape") {
      shooter.sendEvent("cancel-slides", "keyboard-escape");
      callbacks.onEnd();
    }
    if ((event.key || event.code) === "ArrowRight") {
      shooter.sendEvent("navigate-slide", "keyboard-arrowright");
      next();
    }
    if ((event.key || event.code) === "ArrowLeft") {
      shooter.sendEvent("navigate-slide", "keyboard-arrowleft");
      prev();
    }
  }));

  function setSlide(index) {
    if (index < 1) {
      index = 1;
    }
    if (index > numberOfSlides) {
      index = numberOfSlides;
    }
    shooter.sendEvent("visited-slide", `slide-${index}`);
    currentSlide = index;
    const slideEl = doc.querySelector("#slide-container");
    for (let i = 1; i <= numberOfSlides; i++) {
      const className = `active-slide-${i}`;
      if (i === currentSlide) {
        slideEl.classList.add(className);
      } else {
        slideEl.classList.remove(className);
      }
    }
  }

  return exports;
})();
null;
PK
!<F.¢	€€webextension/randomString.js/* exported randomString */

"use strict";

this.randomString = function randomString(length, chars) {
  const randomStringChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  chars = chars || randomStringChars;
  let result = "";
  for (let i = 0; i < length; i++) {
    result += chars[Math.floor(Math.random() * chars.length)];
  }
  return result;
};
null;
PK
!<¸>ȃƒ'webextension/selector/callBackground.js/* globals log */

"use strict";

this.callBackground = function callBackground(funcName, ...args) {
  return browser.runtime.sendMessage({funcName, args}).then((result) => {
    if (result && result.type === "success") {
      return result.value;
    } else if (result && result.type === "error") {
      const exc = new Error(result.message || "Unknown error");
      exc.name = "BackgroundError";
      if ("errorCode" in result) {
        exc.errorCode = result.errorCode;
      }
      if ("popupMessage" in result) {
        exc.popupMessage = result.popupMessage;
      }
      throw exc;
    } else {
      log.error("Unexpected background result:", result);
      const exc = new Error(`Bad response type from background page: ${result && result.type || undefined}`);
      exc.resultType = result ? (result.type || "undefined") : "undefined result";
      throw exc;
    }
  });
};
null;
PK
!<0Ԗ,B
B
)webextension/selector/documentMetadata.js"use strict";

this.documentMetadata = (function() {

  function findSiteName() {
    let el = document.querySelector("meta[property='og:site_name']");
    if (el) {
      return el.getAttribute("content");
    }
    // nytimes.com uses this property:
    el = document.querySelector("meta[name='cre']");
    if (el) {
      return el.getAttribute("content");
    }
    return null;
  }

  function getOpenGraph() {
    const openGraph = {};
    // If you update this, also update _OPENGRAPH_PROPERTIES in shot.js:
    const forceSingle = `title type url`.split(" ");
    const openGraphProperties = `
    title type url image audio description determiner locale site_name video
    image:secure_url image:type image:width image:height
    video:secure_url video:type video:width image:height
    audio:secure_url audio:type
    article:published_time article:modified_time article:expiration_time article:author article:section article:tag
    book:author book:isbn book:release_date book:tag
    profile:first_name profile:last_name profile:username profile:gender
    `.split(/\s+/g);
    for (const prop of openGraphProperties) {
      let elems = document.querySelectorAll(`meta[property='og:${prop}']`);
      if (forceSingle.includes(prop) && elems.length > 1) {
        elems = [elems[0]];
      }
      let value;
      if (elems.length > 1) {
        value = [];
        for (const elem of elems) {
          const v = elem.getAttribute("content");
          if (v) {
            value.push(v);
          }
        }
        if (!value.length) {
          value = null;
        }
      } else if (elems.length === 1) {
        value = elems[0].getAttribute("content");
      }
      if (value) {
        openGraph[prop] = value;
      }
    }
    return openGraph;
  }

  function getTwitterCard() {
    const twitterCard = {};
    // If you update this, also update _TWITTERCARD_PROPERTIES in shot.js:
    const properties = `
    card site title description image
    player player:width player:height player:stream player:stream:content_type
    `.split(/\s+/g);
    for (const prop of properties) {
      const elem = document.querySelector(`meta[name='twitter:${prop}']`);
      if (elem) {
        const value = elem.getAttribute("content");
        if (value) {
          twitterCard[prop] = value;
        }
      }
    }
    return twitterCard;
  }

  return function documentMetadata() {
    const result = {};
    result.docTitle = document.title;
    result.siteName = findSiteName();
    result.openGraph = getOpenGraph();
    result.twitterCard = getTwitterCard();
    return result;
  };

})();
null;
PK
!<ɌŒLí"í" webextension/selector/shooter.js/* globals global, documentMetadata, util, uicontrol, ui, catcher */
/* globals buildSettings, domainFromUrl, randomString, shot, blobConverters */

"use strict";

this.shooter = (function() { // eslint-disable-line no-unused-vars
  const exports = {};
  const { AbstractShot } = shot;

  const RANDOM_STRING_LENGTH = 16;
  let backend;
  let shotObject;
  let supportsDrawWindow;
  const callBackground = global.callBackground;
  const clipboard = global.clipboard;

  function regexpEscape(str) {
    // http://stackoverflow.com/questions/3115150/how-to-escape-regular-expression-special-characters-using-javascript
    return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
  }

  function sanitizeError(data) {
    const href = new RegExp(regexpEscape(window.location.href), "g");
    const origin = new RegExp(`${regexpEscape(window.location.origin)}[^ \t\n\r",>]*`, "g");
    const json = JSON.stringify(data)
      .replace(href, "REDACTED_HREF")
      .replace(origin, "REDACTED_URL");
    const result = JSON.parse(json);
    return result;
  }

  catcher.registerHandler((errorObj) => {
    callBackground("reportError", sanitizeError(errorObj));
  });

  catcher.watchFunction(() => {
    const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
    const ctx = canvas.getContext("2d");
    supportsDrawWindow = !!ctx.drawWindow;
  })();

  function captureToCanvas(selectedPos, captureType) {
    const height = selectedPos.bottom - selectedPos.top;
    const width = selectedPos.right - selectedPos.left;
    const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
    const ctx = canvas.getContext("2d");
    let expand = window.devicePixelRatio !== 1;
    if (captureType === "fullPage" || captureType === "fullPageTruncated") {
      expand = false;
      canvas.width = width;
      canvas.height = height;
    } else {
      canvas.width = width * window.devicePixelRatio;
      canvas.height = height * window.devicePixelRatio;
    }
    if (expand) {
      ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
    }
    ui.iframe.hide();
    ctx.drawWindow(window, selectedPos.left, selectedPos.top, width, height, "#fff");
    return canvas;
  }

  const screenshotPage = exports.screenshotPage = function(selectedPos, captureType) {
    if (!supportsDrawWindow) {
      return null;
    }
    const canvas = captureToCanvas(selectedPos, captureType);
    const limit = buildSettings.pngToJpegCutoff;
    let dataUrl = canvas.toDataURL();
    if (limit && dataUrl.length > limit) {
      const jpegDataUrl = canvas.toDataURL("image/jpeg");
      if (jpegDataUrl.length < dataUrl.length) {
        // Only use the JPEG if it is actually smaller
        dataUrl = jpegDataUrl;
      }
    }
    return dataUrl;
  };

  function screenshotPageAsync(selectedPos, captureType) {
    if (!supportsDrawWindow) {
      return Promise.resolve(null);
    }
    const canvas = captureToCanvas(selectedPos, captureType);
    ui.iframe.showLoader();
    const imageData = canvas.getContext("2d").getImageData(0, 0, canvas.width, canvas.height);
    return callBackground("canvasToDataURL", imageData);
  }

  let isSaving = null;

  exports.takeShot = function(captureType, selectedPos, url) {
    // isSaving indicates we're aleady in the middle of saving
    // we use a timeout so in the case of a failure the button will
    // still start working again
    if (Math.floor(selectedPos.left) === Math.floor(selectedPos.right) ||
        Math.floor(selectedPos.top) === Math.floor(selectedPos.bottom)) {
        const exc = new Error("Empty selection");
        exc.popupMessage = "EMPTY_SELECTION";
        exc.noReport = true;
        catcher.unhandled(exc);
        return;
    }
    let imageBlob;
    const uicontrol = global.uicontrol;
    let deactivateAfterFinish = true;
    if (isSaving) {
      return;
    }
    isSaving = setTimeout(() => {
      if (typeof ui !== "undefined") {
        // ui might disappear while the timer is running because the save succeeded
        ui.Box.clearSaveDisabled();
      }
      isSaving = null;
    }, 1000);
    selectedPos = selectedPos.toJSON();
    let captureText = "";
    if (buildSettings.captureText) {
      captureText = util.captureEnclosedText(selectedPos);
    }
    const dataUrl = url || screenshotPage(selectedPos, captureType);
    let type = blobConverters.getTypeFromDataUrl(dataUrl);
    type = type ? type.split("/", 2)[1] : null;
    if (dataUrl) {
      imageBlob = buildSettings.uploadBinary ? blobConverters.dataUrlToBlob(dataUrl) : null;
      shotObject.delAllClips();
      shotObject.addClip({
        createdDate: Date.now(),
        image: {
          url: buildSettings.uploadBinary ? "" : dataUrl,
          type,
          captureType,
          text: captureText,
          location: selectedPos,
          dimensions: {
            x: selectedPos.right - selectedPos.left,
            y: selectedPos.bottom - selectedPos.top
          }
        }
      });
    }
    catcher.watchPromise(callBackground("takeShot", {
      captureType,
      captureText,
      scroll: {
        scrollX: window.scrollX,
        scrollY: window.scrollY,
        innerHeight: window.innerHeight,
        innerWidth: window.innerWidth
      },
      selectedPos,
      shotId: shotObject.id,
      shot: shotObject.toJSON(),
      imageBlob
    }).then((url) => {
      return clipboard.copy(url).then((copied) => {
        return callBackground("openShot", { url, copied });
      });
    }, (error) => {
      if ("popupMessage" in error && (error.popupMessage === "REQUEST_ERROR" || error.popupMessage === "CONNECTION_ERROR")) {
        // The error has been signaled to the user, but unlike other errors (or
        // success) we should not abort the selection
        deactivateAfterFinish = false;
        // We need to unhide the UI since screenshotPage() hides it.
        ui.iframe.unhide();
        return;
      }
      if (error.name !== "BackgroundError") {
        // BackgroundError errors are reported in the Background page
        throw error;
      }
    }).then(() => {
      if (deactivateAfterFinish) {
        uicontrol.deactivate();
      }
    }));
  };

  exports.downloadShot = function(selectedPos, previewDataUrl, type) {
    const shotPromise = previewDataUrl ? Promise.resolve(previewDataUrl) : screenshotPageAsync(selectedPos, type);
    catcher.watchPromise(shotPromise.then(dataUrl => {
      let promise = Promise.resolve(dataUrl);
      if (!dataUrl) {
        promise = callBackground(
          "screenshotPage",
          selectedPos.toJSON(),
          {
            scrollX: window.scrollX,
            scrollY: window.scrollY,
            innerHeight: window.innerHeight,
            innerWidth: window.innerWidth
          });
      }
      catcher.watchPromise(promise.then((dataUrl) => {
        let type = blobConverters.getTypeFromDataUrl(dataUrl);
        type = type ? type.split("/", 2)[1] : null;
        shotObject.delAllClips();
        shotObject.addClip({
          createdDate: Date.now(),
          image: {
            url: dataUrl,
            type,
            location: selectedPos
          }
        });
        ui.triggerDownload(dataUrl, shotObject.filename);
        uicontrol.deactivate();
      }));
    }));
  };

  let copyInProgress = null;
  exports.copyShot = function(selectedPos, previewDataUrl, type) {
    // This is pretty slow. We'll ignore additional user triggered copy events
    // while it is in progress.
    if (copyInProgress) {
      return;
    }
    // A max of five seconds in case some error occurs.
    copyInProgress = setTimeout(() => {
      copyInProgress = null;
    }, 5000);

    const unsetCopyInProgress = () => {
      if (copyInProgress) {
        clearTimeout(copyInProgress);
        copyInProgress = null;
      }
    };
    const shotPromise = previewDataUrl ? Promise.resolve(previewDataUrl) : screenshotPageAsync(selectedPos, type);
    catcher.watchPromise(shotPromise.then(dataUrl => {
      const blob = blobConverters.dataUrlToBlob(dataUrl);
      catcher.watchPromise(callBackground("copyShotToClipboard", blob).then(() => {
        uicontrol.deactivate();
        unsetCopyInProgress();
      }, unsetCopyInProgress));
    }));
  };

  exports.sendEvent = function(...args) {
    const maybeOptions = args[args.length - 1];

    if (typeof maybeOptions === "object") {
      maybeOptions.incognito = browser.extension.inIncognitoContext;
    } else {
      args.push({incognito: browser.extension.inIncognitoContext});
    }

    callBackground("sendEvent", ...args);
  };

  catcher.watchFunction(() => {
    shotObject = new AbstractShot(
      backend,
      randomString(RANDOM_STRING_LENGTH) + "/" + domainFromUrl(location),
      {
        origin: shot.originFromUrl(location.href)
      }
    );
    shotObject.update(documentMetadata());
  })();

  return exports;
})();
null;
PK
!<"»ِ‚‚webextension/selector/ui.js/* globals log, util, catcher, inlineSelectionCss, callBackground, assertIsTrusted, assertIsBlankDocument, buildSettings blobConverters */

"use strict";

this.ui = (function() { // eslint-disable-line no-unused-vars
  const exports = {};
  const SAVE_BUTTON_HEIGHT = 50;

  const { watchFunction } = catcher;

  exports.isHeader = function(el) {
    while (el) {
      if (el.classList &&
          (el.classList.contains("myshots-button") ||
           el.classList.contains("visible") ||
           el.classList.contains("full-page") ||
           el.classList.contains("cancel-shot"))) {
        return true;
      }
      el = el.parentNode;
    }
    return false;
  };

  const substitutedCss = inlineSelectionCss.replace(/MOZ_EXTENSION([^"]+)/g, (match, filename) => {
    return browser.extension.getURL(filename);
  });

  function makeEl(tagName, className) {
    if (!iframe.document()) {
      throw new Error("Attempted makeEl before iframe was initialized");
    }
    const el = iframe.document().createElement(tagName);
    if (className) {
      el.className = className;
    }
    return el;
  }

  function onResize() {
    if (this.sizeTracking.windowDelayer) {
      clearTimeout(this.sizeTracking.windowDelayer);
    }
    this.sizeTracking.windowDelayer = setTimeout(watchFunction(() => {
      this.updateElementSize(true);
    }), 50);
  }

  function localizeText(doc) {
    const els = doc.querySelectorAll("[data-l10n-id], [data-l10n-title]");
    for (const el of els) {
      const id = el.getAttribute("data-l10n-id");
      if (id) {
        const text = browser.i18n.getMessage(id);
        el.textContent = text;
      }
      const title = el.getAttribute("data-l10n-title");
      if (title) {
        const titleText = browser.i18n.getMessage(title);
        const sanitized = titleText && titleText.replace("&", "&amp;")
                                              .replace('"', "&quot;")
                                              .replace("<", "&lt;")
                                              .replace(">", "&gt;");
        el.setAttribute("title", sanitized);
      }
    }
  }

  function highContrastCheck(win) {
    const doc = win.document;
    const el = doc.createElement("div");
    el.style.backgroundImage = "url('#')";
    el.style.display = "none";
    doc.body.appendChild(el);
    const computed = win.getComputedStyle(el);
    doc.body.removeChild(el);
    // When Windows is in High Contrast mode, Firefox replaces background
    // image URLs with the string "none".
    return (computed && computed.backgroundImage === "none");
  }

  const isDownloadOnly = exports.isDownloadOnly = function() {
    return window.downloadOnly;
  };

  // the download notice is rendered in iframes that match the document height
  // or the window height. If parent iframe matches window height, pass in true
  function renderDownloadNotice(initAtBottom = false) {
    const notice = makeEl("table", "notice");
    notice.innerHTML = `
      <div class="notice-tooltip">
        <p data-l10n-id="downloadOnlyDetails"></p>
        <ul>
          <li data-l10n-id="downloadOnlyDetailsPrivate"></li>
          <li data-l10n-id="downloadOnlyDetailsNeverRemember"></li>
          <li data-l10n-id="downloadOnlyDetailsESR"></li>
          <li data-l10n-id="downloadOnlyDetailsNoUploadPref"></li>
        </ul>
      </div>
      <tbody>
        <tr class="notice-wrapper">
          <td class="notice-content" data-l10n-id="downloadOnlyNotice"></td>
          <td class="notice-help"></td>
        </tr>
      <tbody>`;
    localizeText(notice);
    if (initAtBottom) {
      notice.style.bottom = "10px";
    }
    return notice;
  }

  function initializeIframe() {
    const el = document.createElement("iframe");
    el.src = browser.extension.getURL("blank.html");
    el.style.zIndex = "99999999999";
    el.style.border = "none";
    el.style.top = "0";
    el.style.left = "0";
    el.style.margin = "0";
    el.scrolling = "no";
    el.style.clip = "auto";
    return el;
  }

  const iframeSelection = exports.iframeSelection = {
    element: null,
    addClassName: "",
    sizeTracking: {
      timer: null,
      windowDelayer: null,
      lastHeight: null,
      lastWidth: null
    },
    document: null,
    display(installHandlerOnDocument) {
      return new Promise((resolve, reject) => {
        if (!this.element) {
          this.element = initializeIframe();
          this.element.id = "firefox-screenshots-selection-iframe";
          this.element.style.display = "none";
          this.element.style.setProperty("position", "absolute", "important");
          this.updateElementSize();
          this.element.addEventListener("load", watchFunction(() => {
            this.document = this.element.contentDocument;
            assertIsBlankDocument(this.document);
            // eslint-disable-next-line no-unsanitized/property
            this.document.documentElement.innerHTML = `
               <head>
                <style>${substitutedCss}</style>
                <title></title>
               </head>
               <body></body>`;
            installHandlerOnDocument(this.document);
            if (this.addClassName) {
              this.document.body.className = this.addClassName;
            }
            this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
            this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
            resolve();
          }), {once: true});
          document.body.appendChild(this.element);
        } else {
          resolve();
        }
      });
    },

    hide() {
      this.element.style.display = "none";
      this.stopSizeWatch();
    },

    unhide() {
      this.updateElementSize();
      this.element.style.display = "block";
      catcher.watchPromise(callBackground("sendEvent", "internal", "unhide-selection-frame"));
      if (highContrastCheck(this.element.contentWindow)) {
        this.element.contentDocument.body.classList.add("hcm");
      }
      this.initSizeWatch();
      this.element.focus();
    },

    updateElementSize(force) {
      // Note: if someone sizes down the page, then the iframe will keep the
      // document from naturally shrinking.  We use force to temporarily hide
      // the element so that we can tell if the document shrinks
      const visible = this.element.style.display !== "none";
      if (force && visible) {
        this.element.style.display = "none";
      }
      const height = Math.max(
        document.documentElement.clientHeight,
        document.body.clientHeight,
        document.documentElement.scrollHeight,
        document.body.scrollHeight);
      if (height !== this.sizeTracking.lastHeight) {
        this.sizeTracking.lastHeight = height;
        this.element.style.height = height + "px";
      }
      // Do not use window.innerWidth since that includes the width of the
      // scroll bar.
      const width = Math.max(
        document.documentElement.clientWidth,
        document.body.clientWidth,
        document.documentElement.scrollWidth,
        document.body.scrollWidth);
      if (width !== this.sizeTracking.lastWidth) {
        this.sizeTracking.lastWidth = width;
        this.element.style.width = width + "px";
        // Since this frame has an absolute position relative to the parent
        // document, if the parent document's body has a relative position and
        // left and/or top not at 0, then the left and/or top of the parent
        // document's body is not at (0, 0) of the viewport. That makes the
        // frame shifted relative to the viewport. These margins negates that.
        if (window.getComputedStyle(document.body).position === "relative") {
          const docBoundingRect = document.documentElement.getBoundingClientRect();
          const bodyBoundingRect = document.body.getBoundingClientRect();
          this.element.style.marginLeft = `-${bodyBoundingRect.left - docBoundingRect.left}px`;
          this.element.style.marginTop = `-${bodyBoundingRect.top - docBoundingRect.top}px`;
        }
      }
      if (force && visible) {
        this.element.style.display = "block";
      }
    },

    initSizeWatch() {
      this.stopSizeWatch();
      this.sizeTracking.timer = setInterval(watchFunction(this.updateElementSize.bind(this)), 2000);
      window.addEventListener("resize", this.onResize, true);
    },

    stopSizeWatch() {
      if (this.sizeTracking.timer) {
        clearTimeout(this.sizeTracking.timer);
        this.sizeTracking.timer = null;
      }
      if (this.sizeTracking.windowDelayer) {
        clearTimeout(this.sizeTracking.windowDelayer);
        this.sizeTracking.windowDelayer = null;
      }
      this.sizeTracking.lastHeight = this.sizeTracking.lastWidth = null;
      window.removeEventListener("resize", this.onResize, true);
    },

    getElementFromPoint(x, y) {
      this.element.style.pointerEvents = "none";
      let el;
      try {
        el = document.elementFromPoint(x, y);
      } finally {
        this.element.style.pointerEvents = "";
      }
      return el;
    },

    remove() {
      this.stopSizeWatch();
      util.removeNode(this.element);
      this.element = this.document = null;
    }
  };

  iframeSelection.onResize = watchFunction(assertIsTrusted(onResize.bind(iframeSelection)), true);

  const iframePreSelection = exports.iframePreSelection = {
    element: null,
    document: null,
    display(installHandlerOnDocument, standardOverlayCallbacks) {
      return new Promise((resolve, reject) => {
        if (!this.element) {
          this.element = initializeIframe();
          this.element.id = "firefox-screenshots-preselection-iframe";
          this.element.style.setProperty("position", "fixed", "important");
          this.element.style.width = "100%";
          this.element.style.height = "100%";
          this.element.addEventListener("load", watchFunction(() => {
            this.document = this.element.contentDocument;
            assertIsBlankDocument(this.document);
            // eslint-disable-next-line no-unsanitized/property
            this.document.documentElement.innerHTML = `
               <head>
                <style>${substitutedCss}</style>
                <title></title>
               </head>
               <body>
                 <div class="preview-overlay precision-cursor">
                   <div class="fixed-container">
                     <div class="face-container">
                       <div class="eye left"><div class="eyeball"></div></div>
                       <div class="eye right"><div class="eyeball"></div></div>
                       <div class="face"></div>
                     </div>
                     <div class="preview-instructions" data-l10n-id="screenshotInstructions"></div>
                     <button class="cancel-shot">${browser.i18n.getMessage("cancelScreenshot")}</button>
                     <div class="myshots-all-buttons-container">
                       ${isDownloadOnly() ? "" : `
                         <button class="myshots-button" tabindex="1" data-l10n-id="myShotsLink"></button>
                         <div class="spacer"></div>
                       `}
                       <button class="visible" tabindex="2" data-l10n-id="saveScreenshotVisibleArea"></button>
                       <button class="full-page" tabindex="3" data-l10n-id="saveScreenshotFullPage"></button>
                     </div>
                   </div>
                 </div>
               </body>`;
            installHandlerOnDocument(this.document);
            if (this.addClassName) {
              this.document.body.className = this.addClassName;
            }
            this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
            this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
            const overlay = this.document.querySelector(".preview-overlay");
            localizeText(this.document);
            if (!(isDownloadOnly())) {
              overlay.querySelector(".myshots-button").addEventListener(
                "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onOpenMyShots)));
            }
            overlay.querySelector(".visible").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onClickVisible)));
            overlay.querySelector(".full-page").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onClickFullPage)));
            overlay.querySelector(".cancel-shot").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onClickCancel)));
            resolve();
          }), {once: true});
          document.body.appendChild(this.element);
        } else {
          resolve();
        }
      });
    },

    hide() {
      window.removeEventListener("scroll", watchFunction(assertIsTrusted(this.onScroll)));
      window.removeEventListener("resize", this.onResize, true);
      if (this.element) {
        this.element.style.display = "none";
      }
    },

    unhide() {
      window.addEventListener("scroll", watchFunction(assertIsTrusted(this.onScroll)));
      window.addEventListener("resize", this.onResize, true);
      this.element.style.display = "block";
      catcher.watchPromise(callBackground("sendEvent", "internal", "unhide-preselection-frame"));
      if (highContrastCheck(this.element.contentWindow)) {
        this.element.contentDocument.body.classList.add("hcm");
      }
      this.element.focus();
    },

    onScroll() {
      exports.HoverBox.hide();
    },

    getElementFromPoint(x, y) {
      this.element.style.pointerEvents = "none";
      let el;
      try {
        el = document.elementFromPoint(x, y);
      } finally {
        this.element.style.pointerEvents = "";
      }
      return el;
    },

    remove() {
      this.hide();
      util.removeNode(this.element);
      this.element = null;
      this.document = null;
    }
  };

  const iframePreview = exports.iframePreview = {
    element: null,
    document: null,
    display(installHandlerOnDocument, standardOverlayCallbacks) {
      return new Promise((resolve, reject) => {
        if (!this.element) {
          this.element = initializeIframe();
          this.element.id = "firefox-screenshots-preview-iframe";
          this.element.style.display = "none";
          this.element.style.setProperty("position", "fixed", "important");
          this.element.style.height = "100%";
          this.element.style.width = "100%";
          this.element.onload = watchFunction(() => {
            this.document = this.element.contentDocument;
            // eslint-disable-next-line no-unsanitized/property
            this.document.documentElement.innerHTML = `
              <head>
                <style>${substitutedCss}</style>
                <title></title>
              </head>
              <body>
                <div class="preview-overlay">
                  <div class="preview-image">
                    <div class="preview-buttons">
                      <button class="highlight-button-cancel"
                        data-l10n-title="cancelScreenshot"><img
                        src="${browser.extension.getURL("icons/cancel.svg")}" /></button>
                      <button class="highlight-button-copy"
                        data-l10n-title="copyScreenshot"><img
                        src="${browser.extension.getURL("icons/copy.svg")}" /></button>
                      ${isDownloadOnly() ?
                        `<button class="highlight-button-download download-only-button"
                          data-l10n-title="downloadScreenshot"><img
                          src="${browser.extension.getURL("icons/download.svg")}"
                          />${browser.i18n.getMessage("downloadScreenshot")}</button>` :
                        `<button class="highlight-button-download"
                          data-l10n-title="downloadScreenshot"><img
                          src="${browser.extension.getURL("icons/download.svg")}" /></button>
                         <button class="preview-button-save"
                          data-l10n-title="saveScreenshotSelectedArea"><img
                          src="${browser.extension.getURL("icons/cloud.svg")}"
                          />${browser.i18n.getMessage("saveScreenshotSelectedArea")}</button>`
                      }
                    </div>
                  </div>
                  <div class="loader" style="display:none">
                    <div class="loader-inner"></div>
                  </div>
                </div>
              </body>`;
            installHandlerOnDocument(this.document);
            this.document.documentElement.dir = browser.i18n.getMessage("@@bidi_dir");
            this.document.documentElement.lang = browser.i18n.getMessage("@@ui_locale");
            localizeText(this.document);
            const overlay = this.document.querySelector(".preview-overlay");
            if (isDownloadOnly()) {
              overlay.appendChild(renderDownloadNotice(true));
            } else {
              overlay.querySelector(".preview-button-save").addEventListener(
                "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onSavePreview)));
            }
            overlay.querySelector(".highlight-button-copy").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onCopyPreview)));
            overlay.querySelector(".highlight-button-download").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.onDownloadPreview)));
            overlay.querySelector(".highlight-button-cancel").addEventListener(
              "click", watchFunction(assertIsTrusted(standardOverlayCallbacks.cancel)));
            resolve();
          });
          document.body.appendChild(this.element);
        } else {
          resolve();
        }
      });
    },

    hide() {
      if (this.element) {
        this.element.style.display = "none";
      }
    },

    unhide() {
      this.element.style.display = "block";
      catcher.watchPromise(callBackground("sendEvent", "internal", "unhide-preview-frame"));
      this.element.focus();
    },

    showLoader() {
      this.document.body.querySelector(".preview-image").style.display = "none";
      this.document.body.querySelector(".notice").style.display = "none";
      this.document.body.querySelector(".loader").style.display = "";
    },

    remove() {
      this.hide();
      util.removeNode(this.element);
      this.element = null;
      this.document = null;
    }
  };

  iframePreSelection.onResize = watchFunction(onResize.bind(iframePreSelection), true);

  const iframe = exports.iframe = {
    currentIframe: iframePreSelection,
    display(installHandlerOnDocument, standardOverlayCallbacks) {
      return iframeSelection.display(installHandlerOnDocument)
        .then(() => iframePreSelection.display(installHandlerOnDocument, standardOverlayCallbacks))
        .then(() => iframePreview.display(installHandlerOnDocument, standardOverlayCallbacks));
    },

    hide() {
      this.currentIframe.hide();
    },

    unhide() {
      this.currentIframe.unhide();
    },

    showLoader() {
      if (this.currentIframe.showLoader) {
        this.currentIframe.showLoader();
        this.currentIframe.unhide();
      }
    },

    getElementFromPoint(x, y) {
      return this.currentIframe.getElementFromPoint(x, y);
    },

    remove() {
      iframeSelection.remove();
      iframePreSelection.remove();
      iframePreview.remove();
    },

    document() {
      return this.currentIframe.document;
    },

    useSelection() {
      if (this.currentIframe === iframePreSelection || this.currentIframe === iframePreview) {
        this.hide();
      }
      this.currentIframe = iframeSelection;
      this.unhide();
    },

    usePreSelection() {
      if (this.currentIframe === iframeSelection || this.currentIframe === iframePreview) {
        this.hide();
      }
      this.currentIframe = iframePreSelection;
      this.unhide();
    },

    usePreview() {
      if (this.currentIframe === iframeSelection || this.currentIframe === iframePreSelection) {
        this.hide();
      }
      this.currentIframe = iframePreview;
      this.unhide();
    }
  };

  const movements = ["topLeft", "top", "topRight", "left", "right", "bottomLeft", "bottom", "bottomRight"];

  /** Creates the selection box */
  exports.Box = {

    display(pos, callbacks) {
      this._createEl();
      if (callbacks !== undefined && callbacks.cancel) {
        // We use onclick here because we don't want addEventListener
        // to add multiple event handlers to the same button
        this.cancel.onclick = watchFunction(assertIsTrusted(callbacks.cancel));
        this.cancel.style.display = "";
      } else {
        this.cancel.style.display = "none";
      }
      if (callbacks !== undefined && callbacks.save && this.save) {
        // We use onclick here because we don't want addEventListener
        // to add multiple event handlers to the same button
        this.save.removeAttribute("disabled");
        this.save.onclick = watchFunction(assertIsTrusted((e) => {
          this.save.setAttribute("disabled", "true");
          callbacks.save(e);
        }));
        this.save.style.display = "";
      } else if (this.save) {
        this.save.style.display = "none";
      }
      if (callbacks !== undefined && callbacks.download) {
        this.download.removeAttribute("disabled");
        this.download.onclick = watchFunction(assertIsTrusted((e) => {
          this.download.setAttribute("disabled", true);
          callbacks.download(e);
          e.preventDefault();
          e.stopPropagation();
          return false;
        }));
        this.download.style.display = "";
      } else {
        this.download.style.display = "none";
      }
      if (callbacks !== undefined && callbacks.copy) {
        this.copy.removeAttribute("disabled");
        this.copy.onclick = watchFunction(assertIsTrusted((e) => {
          this.copy.setAttribute("disabled", true);
          callbacks.copy(e);
          e.preventDefault();
          e.stopPropagation();
        }));
        this.copy.style.display = "";
      } else {
        this.copy.style.display = "none";
      }

      const winBottom = window.innerHeight;
      const pageYOffset = window.pageYOffset;

      if ((pos.right - pos.left) < 78 || (pos.bottom - pos.top) < 78) {
        this.el.classList.add("small-selection");
      } else {
        this.el.classList.remove("small-selection");
      }

      // if the selection bounding box is w/in SAVE_BUTTON_HEIGHT px of the bottom of
      // the window, flip controls into the box
      if (pos.bottom > ((winBottom + pageYOffset) - SAVE_BUTTON_HEIGHT)) {
        this.el.classList.add("bottom-selection");
      } else {
        this.el.classList.remove("bottom-selection");
      }

      if (pos.right < 200) {
        this.el.classList.add("left-selection");
      } else {
        this.el.classList.remove("left-selection");
      }
      this.el.style.top = `${pos.top}px`;
      this.el.style.left = `${pos.left}px`;
      this.el.style.height = `${pos.bottom - pos.top}px`;
      this.el.style.width = `${pos.right - pos.left}px`;
      this.bgTop.style.top = "0px";
      this.bgTop.style.height = `${pos.top}px`;
      this.bgTop.style.left = "0px";
      this.bgTop.style.width = "100%";
      this.bgBottom.style.top = `${pos.bottom}px`;
      this.bgBottom.style.height = "100vh";
      this.bgBottom.style.left = "0px";
      this.bgBottom.style.width = "100%";
      this.bgLeft.style.top = `${pos.top}px`;
      this.bgLeft.style.height = `${pos.bottom - pos.top}px`;
      this.bgLeft.style.left = "0px";
      this.bgLeft.style.width = `${pos.left}px`;
      this.bgRight.style.top = `${pos.top}px`;
      this.bgRight.style.height = `${pos.bottom - pos.top}px`;
      this.bgRight.style.left = `${pos.right}px`;
      this.bgRight.style.width = `${document.body.scrollWidth - pos.right}px`;
      // the download notice is injected into an iframe that matches the document size
      // in order to reposition it on scroll we need to bind an updated positioning
      // function to some window events.
      this.repositionDownloadNotice = () => {
        if (this.downloadNotice) {
          const currentYOffset = window.pageYOffset;
          const currentWinBottom = window.innerHeight;
          this.downloadNotice.style.top = (currentYOffset + currentWinBottom - 60) + "px";
        }
      };

      if (this.downloadNotice) {
        this.downloadNotice.style.top = (pageYOffset + winBottom - 60) + "px";
        // event callbacks are delayed 100ms each to keep from overloading things
        this.windowChangeStop = this.delayExecution(100, this.repositionDownloadNotice);
        window.addEventListener("scroll", watchFunction(assertIsTrusted(this.windowChangeStop)));
        window.addEventListener("resize", watchFunction(assertIsTrusted(this.windowChangeStop)));
      }
    },

    // used to eventually move the download-only warning
    // when a user ends scrolling or ends resizing a window
    delayExecution(delay, cb) {
      let timer;
      return function() {
        if (typeof timer !== "undefined") {
          clearTimeout(timer);
        }
        timer = setTimeout(cb, delay);
      };
    },

    remove() {
      if (this.downloadNotice) {
        window.removeEventListener("scroll", this.windowChangeStop, true);
        window.removeEventListener("resize", this.windowChangeStop, true);
      }
      for (const name of ["el", "bgTop", "bgLeft", "bgRight", "bgBottom", "downloadNotice"]) {
        if (name in this) {
          util.removeNode(this[name]);
          this[name] = null;
        }
      }
    },

    _createEl() {
      let boxEl = this.el;
      if (boxEl) {
        return;
      }
      boxEl = makeEl("div", "highlight");
      const buttons = makeEl("div", "highlight-buttons");
      const cancel = makeEl("button", "highlight-button-cancel");
      const cancelImg = makeEl("img");
      cancelImg.src = browser.extension.getURL("icons/cancel.svg");
      cancel.title = browser.i18n.getMessage("cancelScreenshot");
      cancel.appendChild(cancelImg);
      buttons.appendChild(cancel);

      const copy = makeEl("button", "highlight-button-copy");
      copy.title = browser.i18n.getMessage("copyScreenshot");
      const copyImg = makeEl("img");
      copyImg.src = browser.extension.getURL("icons/copy.svg");
      copy.appendChild(copyImg);
      buttons.appendChild(copy);

      let download, save;

      if (isDownloadOnly()) {
        download = makeEl("button", "highlight-button-download download-only-button");
        const downloadImg = makeEl("img");
        downloadImg.src = browser.extension.getURL("icons/download.svg");
        download.appendChild(downloadImg);
        download.append(browser.i18n.getMessage("downloadScreenshot"));
        download.title = browser.i18n.getMessage("downloadScreenshot");
      } else {
        download = makeEl("button", "highlight-button-download");
        download.title = browser.i18n.getMessage("downloadScreenshot");
        const downloadImg = makeEl("img");
        downloadImg.src = browser.extension.getURL("icons/download.svg");
        download.appendChild(downloadImg);
        save = makeEl("button", "highlight-button-save");
        const saveImg = makeEl("img");
        saveImg.src = browser.extension.getURL("icons/cloud.svg");
        save.appendChild(saveImg);
        save.append(browser.i18n.getMessage("saveScreenshotSelectedArea"));
        save.title = browser.i18n.getMessage("saveScreenshotSelectedArea");
      }
      buttons.appendChild(download);
      if (save) {
        buttons.appendChild(save);
      }
      this.cancel = cancel;
      this.download = download;
      this.copy = copy;
      this.save = save;
      boxEl.appendChild(buttons);
      for (const name of movements) {
        const elTarget = makeEl("div", "mover-target direction-" + name);
        const elMover = makeEl("div", "mover");
        elTarget.appendChild(elMover);
        boxEl.appendChild(elTarget);
      }
      this.bgTop = makeEl("div", "bghighlight");
      iframe.document().body.appendChild(this.bgTop);
      this.bgLeft = makeEl("div", "bghighlight");
      iframe.document().body.appendChild(this.bgLeft);
      this.bgRight = makeEl("div", "bghighlight");
      iframe.document().body.appendChild(this.bgRight);
      this.bgBottom = makeEl("div", "bghighlight");
      iframe.document().body.appendChild(this.bgBottom);
      iframe.document().body.appendChild(boxEl);
      if (isDownloadOnly()) {
        this.downloadNotice = renderDownloadNotice();
        iframe.document().body.appendChild(this.downloadNotice);
      }
      this.el = boxEl;
    },

    draggerDirection(target) {
      while (target) {
        if (target.nodeType === document.ELEMENT_NODE) {
          if (target.classList.contains("mover-target")) {
            for (const name of movements) {
              if (target.classList.contains("direction-" + name)) {
                return name;
              }
            }
            catcher.unhandled(new Error("Surprising mover element"), {element: target.outerHTML});
            log.warn("Got mover-target that wasn't a specific direction");
          }
        }
        target = target.parentNode;
      }
      return null;
    },

    isSelection(target) {
      while (target) {
        if (target.tagName === "BUTTON") {
          return false;
        }
        if (target.nodeType === document.ELEMENT_NODE && target.classList.contains("highlight")) {
          return true;
        }
        target = target.parentNode;
      }
      return false;
    },

    isControl(target) {
      while (target) {
        if (target.nodeType === document.ELEMENT_NODE && target.classList.contains("highlight-buttons")) {
          return true;
        }
        target = target.parentNode;
      }
      return false;
    },

    clearSaveDisabled() {
      if (!this.save) {
        // Happens if we try to remove the disabled status after the worker
        // has been shut down
        return;
      }
      this.save.removeAttribute("disabled");
    },

    el: null,
    boxTopEl: null,
    boxLeftEl: null,
    boxRightEl: null,
    boxBottomEl: null
  };

  exports.HoverBox = {

    el: null,

    display(rect) {
      if (!this.el) {
        this.el = makeEl("div", "hover-highlight");
        iframe.document().body.appendChild(this.el);
      }
      this.el.style.display = "";
      this.el.style.top = (rect.top - 1) + "px";
      this.el.style.left = (rect.left - 1) + "px";
      this.el.style.width = (rect.right - rect.left + 2) + "px";
      this.el.style.height = (rect.bottom - rect.top + 2) + "px";
    },

    hide() {
      if (this.el) {
        this.el.style.display = "none";
      }
      if (this.downloadNotice) {
        this.downloadNotice.display = "none";
      }
    },

    remove() {
      util.removeNode(this.el);
      this.el = null;
    }
  };

  exports.PixelDimensions = {
    el: null,
    xEl: null,
    yEl: null,
    display(xPos, yPos, x, y) {
      if (!this.el) {
        this.el = makeEl("div", "pixel-dimensions");
        this.xEl = makeEl("div");
        this.el.appendChild(this.xEl);
        this.yEl = makeEl("div");
        this.el.appendChild(this.yEl);
        iframe.document().body.appendChild(this.el);
      }
      this.xEl.textContent = x;
      this.yEl.textContent = y;
      this.el.style.top = (yPos + 12) + "px";
      this.el.style.left = (xPos + 12) + "px";
    },
    remove() {
      util.removeNode(this.el);
      this.el = this.xEl = this.yEl = null;
    }
  };

  exports.Preview = {
    display(dataUrl, showCropWarning) {
      const img = makeEl("IMG");
      const imgBlob = blobConverters.dataUrlToBlob(dataUrl);
      img.src = URL.createObjectURL(imgBlob);
      iframe.document().querySelector(".preview-image").appendChild(img);
      if (showCropWarning && !(isDownloadOnly())) {
        const imageCroppedEl = makeEl("table", "notice");
        imageCroppedEl.style.bottom = "10px";
        imageCroppedEl.innerHTML = `<tbody>
          <tr class="notice-wrapper">
            <td class="notice-content"></td>
          </tr>
        </tbody>`;
        const contentCell = imageCroppedEl.getElementsByTagName("td");
        contentCell[0].textContent = browser.i18n.getMessage("imageCroppedWarning", buildSettings.maxImageHeight);
        iframe.document().querySelector(".preview-overlay").appendChild(imageCroppedEl);
      }
    }
  };

  /** Removes every UI this module creates */
  exports.remove = function() {
    for (const name in exports) {
      if (name.startsWith("iframe")) {
        continue;
      }
      if (typeof exports[name] === "object" && exports[name].remove) {
        exports[name].remove();
      }
    }
    exports.iframe.remove();
  };

  exports.triggerDownload = function(url, filename) {
    return catcher.watchPromise(callBackground("downloadShot", {url, filename}));
  };

  exports.unload = exports.remove;

  return exports;
})();
null;
PK
!<%BWÌpÌp"webextension/selector/uicontrol.js/* globals log, catcher, util, ui, slides */
/* globals shooter, callBackground, selectorLoader, assertIsTrusted, buildSettings, selection */

"use strict";

this.uicontrol = (function() {
  const exports = {};

  /** ********************************************************
   * selection
   */

  /* States:

  "crosshairs":
    Nothing has happened, and the crosshairs will follow the movement of the mouse
  "draggingReady":
    The user has pressed the mouse button, but hasn't moved enough to create a selection
  "dragging":
    The user has pressed down a mouse button, and is dragging out an area far enough to show a selection
  "selected":
    The user has selected an area
  "resizing":
    The user is resizing the selection
  "cancelled":
    Everything has been cancelled
  "previewing":
    The user is previewing the full-screen/visible image

  A mousedown goes from crosshairs to dragging.
  A mouseup goes from dragging to selected
  A click outside of the selection goes from selected to crosshairs
  A click on one of the draggers goes from selected to resizing

  State variables:

  state (string, one of the above)
  mousedownPos (object with x/y during draggingReady, shows where the selection started)
  selectedPos (object with x/y/h/w during selected or dragging, gives the entire selection)
  resizeDirection (string: top, topLeft, etc, during resizing)
  resizeStartPos (x/y position where resizing started)
  mouseupNoAutoselect (true if a mouseup in draggingReady should not trigger autoselect)

  */

  const { watchFunction, watchPromise } = catcher;

  const MAX_PAGE_HEIGHT = buildSettings.maxImageHeight;
  const MAX_PAGE_WIDTH = buildSettings.maxImageWidth;
  // An autoselection smaller than these will be ignored entirely:
  const MIN_DETECT_ABSOLUTE_HEIGHT = 10;
  const MIN_DETECT_ABSOLUTE_WIDTH = 30;
  // An autoselection smaller than these will not be preferred:
  const MIN_DETECT_HEIGHT = 30;
  const MIN_DETECT_WIDTH = 100;
  // An autoselection bigger than either of these will be ignored:
  const MAX_DETECT_HEIGHT = Math.max(window.innerHeight + 100, 700);
  const MAX_DETECT_WIDTH = Math.max(window.innerWidth + 100, 1000);
  // This is how close (in pixels) you can get to the edge of the window and then
  // it will scroll:
  const SCROLL_BY_EDGE = 20;
  // This is how wide the inboard scrollbars are, generally 0 except on Mac
  const SCROLLBAR_WIDTH = (window.navigator.platform.match(/Mac/i)) ? 17 : 0;


  const { Selection } = selection;
  const { sendEvent } = shooter;
  const log = global.log;

  function round10(n) {
    return Math.floor(n / 10) * 10;
  }

  function eventOptionsForBox(box) {
    return {
      cd1: round10(Math.abs(box.bottom - box.top)),
      cd2: round10(Math.abs(box.right - box.left))
    };
  }

  function eventOptionsForResize(boxStart, boxEnd) {
    return {
      cd1: round10(
        (boxEnd.bottom - boxEnd.top)
        - (boxStart.bottom - boxStart.top)),
      cd2: round10(
        (boxEnd.right - boxEnd.left)
        - (boxStart.right - boxStart.left))
    };
  }

  function eventOptionsForMove(posStart, posEnd) {
    return {
      cd1: round10(posEnd.y - posStart.y),
      cd2: round10(posEnd.x - posStart.x)
    };
  }

  function downloadShot() {
    const previewDataUrl = (captureType === "fullPageTruncated") ? null : dataUrl;
    // Downloaded shots don't have dimension limits
    removeDimensionLimitsOnFullPageShot();
    shooter.downloadShot(selectedPos, previewDataUrl, captureType);
  }

  function copyShot() {
    const previewDataUrl = (captureType === "fullPageTruncated") ? null : dataUrl;
    // Copied shots don't have dimension limits
    removeDimensionLimitsOnFullPageShot();
    shooter.copyShot(selectedPos, previewDataUrl, captureType);
  }

  /** *********************************************
   * State and stateHandlers infrastructure
   */

  // This enumerates all the anchors on the selection, and what part of the
  // selection they move:
  const movements = {
    topLeft: ["x1", "y1"],
    top: [null, "y1"],
    topRight: ["x2", "y1"],
    left: ["x1", null],
    right: ["x2", null],
    bottomLeft: ["x1", "y2"],
    bottom: [null, "y2"],
    bottomRight: ["x2", "y2"],
    move: ["*", "*"]
  };

  const doNotAutoselectTags = {
    H1: true,
    H2: true,
    H3: true,
    H4: true,
    H5: true,
    H6: true
  };

  let captureType;

  function removeDimensionLimitsOnFullPageShot() {
    if (captureType === "fullPageTruncated") {
      captureType = "fullPage";
      selectedPos = new Selection(
        0, 0,
        getDocumentWidth(), getDocumentHeight());
    }
  }

  const standardDisplayCallbacks = {
    cancel: () => {
      sendEvent("cancel-shot", "overlay-cancel-button");
      exports.deactivate();
    }, save: () => {
      sendEvent("save-shot", "overlay-save-button");
      shooter.takeShot("selection", selectedPos);
    }, download: () => {
      sendEvent("download-shot", "overlay-download-button");
      downloadShot();
    }, copy: () => {
      sendEvent("copy-shot", "overlay-copy-button");
      copyShot();
    }
  };

  const standardOverlayCallbacks = {
    cancel: () => {
      sendEvent("cancel-shot", "cancel-preview-button");
      exports.deactivate();
    },
    onClickCancel: e => {
      sendEvent("cancel-shot", "cancel-selection-button");
      e.preventDefault();
      e.stopPropagation();
      exports.deactivate();
    },
    onOpenMyShots: () => {
      sendEvent("goto-myshots", "selection-button");
      callBackground("openMyShots")
        .then(() => exports.deactivate())
        .catch(() => {
          // Handled in communication.js
        });
    },
    onClickVisible: () => {
      sendEvent("capture-visible", "selection-button");
      selectedPos = new Selection(
        window.scrollX, window.scrollY,
        window.scrollX + document.documentElement.clientWidth, window.scrollY + window.innerHeight);
      captureType = "visible";
      setState("previewing");
    },
    onClickFullPage: () => {
      sendEvent("capture-full-page", "selection-button");
      captureType = "fullPage";
      let width = getDocumentWidth();
      if (width > MAX_PAGE_WIDTH) {
        captureType = "fullPageTruncated";
      }
      width = Math.min(width, MAX_PAGE_WIDTH);
      let height = getDocumentHeight();
      if (height > MAX_PAGE_HEIGHT) {
        captureType = "fullPageTruncated";
      }
      height = Math.min(height, MAX_PAGE_HEIGHT);
      selectedPos = new Selection(
        0, 0,
        width, height);
      setState("previewing");
    },
    onSavePreview: () => {
      sendEvent(`save-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "save-preview-button");
      shooter.takeShot(captureType, selectedPos, dataUrl);
    },
    onDownloadPreview: () => {
      sendEvent(`download-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "download-preview-button");
      downloadShot();
    },
    onCopyPreview: () => {
      sendEvent(`copy-${captureType.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()}`, "copy-preview-button");
      copyShot();
    }
  };

  /** Holds all the objects that handle events for each state: */
  const stateHandlers = {};

  function getState() {
    return getState.state;
  }
  getState.state = "cancel";

  function setState(s) {
    if (!stateHandlers[s]) {
      throw new Error("Unknown state: " + s);
    }
    const cur = getState.state;
    const handler = stateHandlers[cur];
    if (handler.end) {
      handler.end();
    }
    getState.state = s;
    if (stateHandlers[s].start) {
      stateHandlers[s].start();
    }
  }

  /** Various values that the states use: */
  let mousedownPos;
  let selectedPos;
  let resizeDirection;
  let resizeStartPos;
  let resizeStartSelected;
  let resizeHasMoved;
  let mouseupNoAutoselect = false;
  let autoDetectRect;

  /** Represents a single x/y point, typically for a mouse click that doesn't have a drag: */
  class Pos {
    constructor(x, y) {
      this.x = x;
      this.y = y;
    }

    elementFromPoint() {
      return ui.iframe.getElementFromPoint(
        this.x - window.pageXOffset,
        this.y - window.pageYOffset
      );
    }

    distanceTo(x, y) {
      return Math.sqrt(Math.pow(this.x - x, 2) + Math.pow(this.y - y, 2));
    }
  }

  /** *********************************************
   * all stateHandlers
   */

  let dataUrl;

  stateHandlers.previewing = {
    start() {
      dataUrl = shooter.screenshotPage(selectedPos, captureType);
      ui.iframe.usePreview();
      ui.Preview.display(dataUrl, captureType === "fullPageTruncated");
    }
  };

  stateHandlers.onboarding = {
    start() {
      if (typeof slides === "undefined") {
        throw new Error("Attempted to set state to onboarding without loading slides");
      }
      sendEvent("internal", "unhide-onboarding-frame");
      catcher.watchPromise(slides.display({
        onEnd: this.slidesOnEnd.bind(this)
      }));
    },

    slidesOnEnd() {
      callBackground("hasSeenOnboarding");
      setState("crosshairs");
    },

    end() {
      slides.remove();
    }
  };

  stateHandlers.crosshairs = {

    cachedEl: null,

    start() {
      selectedPos = mousedownPos = null;
      this.cachedEl = null;
      watchPromise(ui.iframe.display(installHandlersOnDocument, standardOverlayCallbacks).then(() => {
        ui.iframe.usePreSelection();
        ui.Box.remove();
      }));
    },

    mousemove(event) {
      ui.PixelDimensions.display(event.pageX, event.pageY, event.pageX, event.pageY);
      if (event.target.classList &&
          (!event.target.classList.contains("preview-overlay"))) {
        // User is hovering over a toolbar button or control
        autoDetectRect = null;
        if (this.cachedEl) {
          this.cachedEl = null;
        }
        ui.HoverBox.hide();
        return;
      }
      let el;
      if (event.target.classList && event.target.classList.contains("preview-overlay")) {
        // The hover is on the overlay, so we need to figure out the real element
        el = ui.iframe.getElementFromPoint(
          event.pageX + window.scrollX - window.pageXOffset,
          event.pageY + window.scrollY - window.pageYOffset
        );
        const xpos = Math.floor(10 * (event.pageX - window.innerWidth / 2) / window.innerWidth);
        const ypos = Math.floor(10 * (event.pageY - window.innerHeight / 2) / window.innerHeight);

        for (let i = 0; i < 2; i++) {
          const move = `translate(${xpos}px, ${ypos}px)`;
          event.target.getElementsByClassName("eyeball")[i].style.transform = move;
        }
      } else {
        // The hover is on the element we care about, so we use that
        el = event.target;
      }
      if (this.cachedEl && this.cachedEl === el) {
        // Still hovering over the same element
        return;
      }
      this.cachedEl = el;
      this.setAutodetectBasedOnElement(el);
    },

    setAutodetectBasedOnElement(el) {
      let lastRect;
      let lastNode;
      let rect;
      let attemptExtend = false;
      let node = el;
      while (node) {
        rect = Selection.getBoundingClientRect(node);
        if (!rect) {
          rect = lastRect;
          break;
        }
        if (rect.width < MIN_DETECT_WIDTH || rect.height < MIN_DETECT_HEIGHT) {
          // Avoid infinite loop for elements with zero or nearly zero height,
          // like non-clearfixed float parents with or without borders.
          break;
        }
        if (rect.width > MAX_DETECT_WIDTH || rect.height > MAX_DETECT_HEIGHT) {
          // Then the last rectangle is better
          rect = lastRect;
          attemptExtend = true;
          break;
        }
        if (rect.width >= MIN_DETECT_WIDTH && rect.height >= MIN_DETECT_HEIGHT) {
          if (!doNotAutoselectTags[node.tagName]) {
            break;
          }
        }
        lastRect = rect;
        lastNode = node;
        node = node.parentNode;
      }
      if (rect && node) {
        const evenBetter = this.evenBetterElement(node, rect);
        if (evenBetter) {
          node = lastNode = evenBetter;
          rect = Selection.getBoundingClientRect(evenBetter);
          attemptExtend = false;
        }
      }
      if (rect && attemptExtend) {
        let extendNode = lastNode.nextSibling;
        while (extendNode) {
          if (extendNode.nodeType === document.ELEMENT_NODE) {
            break;
          }
          extendNode = extendNode.nextSibling;
          if (!extendNode) {
            const parent = lastNode.parentNode;
            for (let i = 0; i < parent.childNodes.length; i++) {
              if (parent.childNodes[i] === lastNode) {
                extendNode = parent.childNodes[i + 1];
              }
            }
          }
        }
        if (extendNode) {
          const extendSelection = Selection.getBoundingClientRect(extendNode);
          const extendRect = rect.union(extendSelection);
          if (extendRect.width <= MAX_DETECT_WIDTH && extendRect.height <= MAX_DETECT_HEIGHT) {
            rect = extendRect;
          }
        }
      }

      if (rect && (rect.width < MIN_DETECT_ABSOLUTE_WIDTH || rect.height < MIN_DETECT_ABSOLUTE_HEIGHT)) {
        rect = null;
      }
      if (!rect) {
        ui.HoverBox.hide();
      } else {
        ui.HoverBox.display(rect);
      }
      autoDetectRect = rect;
    },

    /** When we find an element, maybe there's one that's just a little bit better... */
    evenBetterElement(node, origRect) {
      let el = node.parentNode;
      const ELEMENT_NODE = document.ELEMENT_NODE;
      while (el && el.nodeType === ELEMENT_NODE) {
        if (!el.getAttribute) {
          return null;
        }
        const role = el.getAttribute("role");
        if (role === "article" || (el.className && typeof el.className === "string" && el.className.search("tweet ") !== -1)) {
          const rect = Selection.getBoundingClientRect(el);
          if (!rect) {
            return null;
          }
          if (rect.width <= MAX_DETECT_WIDTH && rect.height <= MAX_DETECT_HEIGHT) {
            return el;
          }
          return null;
        }
        el = el.parentNode;
      }
      return null;
    },

    mousedown(event) {
      // FIXME: this is happening but we don't know why, we'll track it now
      // but avoid popping up messages:
      if (typeof ui === "undefined") {
        const exc = new Error("Undefined ui in mousedown");
        exc.unloadTime = unloadTime;
        exc.nowTime = Date.now();
        exc.noPopup = true;
        throw exc;
      }
      if (ui.isHeader(event.target)) {
        return undefined;
      }
      // If the pageX is greater than this, then probably it's an attempt to get
      // to the scrollbar, or an actual scroll, and not an attempt to start the
      // selection:
      const maxX = window.innerWidth - SCROLLBAR_WIDTH;
      if (event.pageX >= maxX) {
        event.stopPropagation();
        event.preventDefault();
        return false;
      }

      mousedownPos = new Pos(event.pageX + window.scrollX, event.pageY + window.scrollY);
      setState("draggingReady");
      event.stopPropagation();
      event.preventDefault();
      return false;
    },

    end() {
      ui.HoverBox.remove();
      ui.PixelDimensions.remove();
    }
  };

  stateHandlers.draggingReady = {
    minMove: 40, // px
    minAutoImageWidth: 40,
    minAutoImageHeight: 40,
    maxAutoElementWidth: 800,
    maxAutoElementHeight: 600,

    start() {
      ui.iframe.usePreSelection();
      ui.Box.remove();
    },

    mousemove(event) {
      if (mousedownPos.distanceTo(event.pageX, event.pageY) > this.minMove) {
        selectedPos = new Selection(
          mousedownPos.x,
          mousedownPos.y,
          event.pageX + window.scrollX,
          event.pageY + window.scrollY);
        mousedownPos = null;
        setState("dragging");
      }
    },

    mouseup(event) {
      // If we don't get into "dragging" then we attempt an autoselect
      if (mouseupNoAutoselect) {
        sendEvent("cancel-selection", "selection-background-mousedown");
        setState("crosshairs");
        return false;
      }
      if (autoDetectRect) {
        selectedPos = autoDetectRect;
        selectedPos.x1 += window.scrollX;
        selectedPos.y1 += window.scrollY;
        selectedPos.x2 += window.scrollX;
        selectedPos.y2 += window.scrollY;
        autoDetectRect = null;
        mousedownPos = null;
        ui.iframe.useSelection();
        ui.Box.display(selectedPos, standardDisplayCallbacks);
        sendEvent("make-selection", "selection-click", eventOptionsForBox(selectedPos));
        setState("selected");
        sendEvent("autoselect");
      } else {
        sendEvent("no-selection", "no-element-found");
        setState("crosshairs");
      }
      return undefined;
    },

    click(event) {
      this.mouseup(event);
    },

    findGoodEl() {
      let el = mousedownPos.elementFromPoint();
      if (!el) {
        return null;
      }
      const isGoodEl = (el) => {
        if (el.nodeType !== document.ELEMENT_NODE) {
          return false;
        }
        if (el.tagName === "IMG") {
          const rect = el.getBoundingClientRect();
          return rect.width >= this.minAutoImageWidth && rect.height >= this.minAutoImageHeight;
        }
        const display = window.getComputedStyle(el).display;
        if (["block", "inline-block", "table"].includes(display)) {
          return true;
          // FIXME: not sure if this is useful:
          // let rect = el.getBoundingClientRect();
          // return rect.width <= this.maxAutoElementWidth && rect.height <= this.maxAutoElementHeight;
        }
        return false;
      };
      while (el) {
        if (isGoodEl(el)) {
          return el;
        }
        el = el.parentNode;
      }
      return null;
    },

    end() {
      mouseupNoAutoselect = false;
    }

  };

  stateHandlers.dragging = {

    start() {
      ui.iframe.useSelection();
      ui.Box.display(selectedPos);
    },

    mousemove(event) {
      selectedPos.x2 = util.truncateX(event.pageX);
      selectedPos.y2 = util.truncateY(event.pageY);
      scrollIfByEdge(event.pageX, event.pageY);
      ui.Box.display(selectedPos);
      ui.PixelDimensions.display(event.pageX, event.pageY, selectedPos.width, selectedPos.height);
    },

    mouseup(event) {
      selectedPos.x2 = util.truncateX(event.pageX);
      selectedPos.y2 = util.truncateY(event.pageY);
      ui.Box.display(selectedPos, standardDisplayCallbacks);
      sendEvent(
        "make-selection", "selection-drag",
        eventOptionsForBox({
          top: selectedPos.y1,
          bottom: selectedPos.y2,
          left: selectedPos.x1,
          right: selectedPos.x2
        }));
      setState("selected");
    },

    end() {
      ui.PixelDimensions.remove();
    }
  };

  stateHandlers.selected = {
    start() {
      ui.iframe.useSelection();
    },

    mousedown(event) {
      const target = event.target;
      if (target.tagName === "HTML") {
        // This happens when you click on the scrollbar
        return undefined;
      }
      const direction = ui.Box.draggerDirection(target);
      if (direction) {
        sendEvent("start-resize-selection", "handle");
        stateHandlers.resizing.startResize(event, direction);
      } else if (ui.Box.isSelection(target)) {
        sendEvent("start-move-selection", "selection");
        stateHandlers.resizing.startResize(event, "move");
      } else if (!ui.Box.isControl(target)) {
        mousedownPos = new Pos(event.pageX, event.pageY);
        setState("crosshairs");
      }
      event.preventDefault();
      return false;
    }
  };

  stateHandlers.resizing = {
    start() {
      ui.iframe.useSelection();
      selectedPos.sortCoords();
    },

    startResize(event, direction) {
      selectedPos.sortCoords();
      resizeDirection = direction;
      resizeStartPos = new Pos(event.pageX, event.pageY);
      resizeStartSelected = selectedPos.clone();
      resizeHasMoved = false;
      setState("resizing");
    },

    mousemove(event) {
      this._resize(event);
      return false;
    },

    mouseup(event) {
      this._resize(event);
      sendEvent("selection-resized");
      ui.Box.display(selectedPos, standardDisplayCallbacks);
      if (resizeHasMoved) {
        if (resizeDirection === "move") {
          const startPos = new Pos(resizeStartSelected.left, resizeStartSelected.top);
          const endPos = new Pos(selectedPos.left, selectedPos.top);
          sendEvent(
            "move-selection", "mouseup",
            eventOptionsForMove(startPos, endPos));
        } else {
          sendEvent(
            "resize-selection", "mouseup",
            eventOptionsForResize(resizeStartSelected, selectedPos));
        }
      } else if (resizeDirection === "move") {
        sendEvent("keep-resize-selection", "mouseup");
      } else {
        sendEvent("keep-move-selection", "mouseup");
      }
      setState("selected");
    },

    _resize(event) {
      const diffX = event.pageX - resizeStartPos.x;
      const diffY = event.pageY - resizeStartPos.y;
      const movement = movements[resizeDirection];
      if (movement[0]) {
        let moveX = movement[0];
        moveX = moveX === "*" ? ["x1", "x2"] : [moveX];
        for (const moveDir of moveX) {
          selectedPos[moveDir] =  util.truncateX(resizeStartSelected[moveDir] + diffX);
        }
      }
      if (movement[1]) {
        let moveY = movement[1];
        moveY = moveY === "*" ? ["y1", "y2"] : [moveY];
        for (const moveDir of moveY) {
          selectedPos[moveDir] = util.truncateY(resizeStartSelected[moveDir] + diffY);
        }
      }
      if (diffX || diffY) {
        resizeHasMoved = true;
      }
      scrollIfByEdge(event.pageX, event.pageY);
      ui.Box.display(selectedPos);
    },

    end() {
      resizeDirection = resizeStartPos = resizeStartSelected = null;
      selectedPos.sortCoords();
    }
  };

  stateHandlers.cancel = {
    start() {
      ui.iframe.hide();
      ui.Box.remove();
    }
  };

  function getDocumentWidth() {
    return Math.max(
      document.body && document.body.clientWidth,
      document.documentElement.clientWidth,
      document.body && document.body.scrollWidth,
      document.documentElement.scrollWidth);
  }
  function getDocumentHeight() {
    return Math.max(
      document.body && document.body.clientHeight,
      document.documentElement.clientHeight,
      document.body && document.body.scrollHeight,
      document.documentElement.scrollHeight);
  }

  function scrollIfByEdge(pageX, pageY) {
    const top = window.scrollY;
    const bottom = top + window.innerHeight;
    const left = window.scrollX;
    const right = left + window.innerWidth;
    if (pageY + SCROLL_BY_EDGE >= bottom && bottom < getDocumentHeight()) {
      window.scrollBy(0, SCROLL_BY_EDGE);
    } else if (pageY - SCROLL_BY_EDGE <= top) {
      window.scrollBy(0, -SCROLL_BY_EDGE);
    }
    if (pageX + SCROLL_BY_EDGE >= right && right < getDocumentWidth()) {
      window.scrollBy(SCROLL_BY_EDGE, 0);
    } else if (pageX - SCROLL_BY_EDGE <= left) {
      window.scrollBy(-SCROLL_BY_EDGE, 0);
    }
  }

  /** *********************************************
   * Selection communication
   */

   // If the slides module is loaded then we're supposed to onboard
  const shouldOnboard = typeof slides !== "undefined";

  exports.activate = function() {
    if (!document.body) {
      callBackground("abortStartShot");
      const tagName = String(document.documentElement.tagName || "").replace(/[^a-z0-9]/ig, "");
      sendEvent("abort-start-shot", `document-is-${tagName}`);
      selectorLoader.unloadModules();
      return;
    }
    if (isFrameset()) {
      callBackground("abortStartShot");
      sendEvent("abort-start-shot", "frame-page");
      selectorLoader.unloadModules();
      return;
    }
    addHandlers();
    if (shouldOnboard) {
      setState("onboarding");
    } else {
      setState("crosshairs");
    }
  };

  function isFrameset() {
    return document.body.tagName === "FRAMESET";
  }

  exports.deactivate = function() {
    try {
      sendEvent("internal", "deactivate");
      setState("cancel");
      callBackground("closeSelector");
      selectorLoader.unloadModules();
    } catch (e) {
      log.error("Error in deactivate", e);
      // Sometimes this fires so late that the document isn't available
      // We don't care about the exception, so we swallow it here
    }
  };

  let unloadTime = 0;

  exports.unload = function() {
    // Note that ui.unload() will be called on its own
    unloadTime = Date.now();
    removeHandlers();
  };

  /** *********************************************
   * Event handlers
   */

  const primedDocumentHandlers = new Map();
  let registeredDocumentHandlers = [];

  function addHandlers() {
    ["mouseup", "mousedown", "mousemove", "click"].forEach((eventName) => {
      const fn = watchFunction(assertIsTrusted((function(eventName, event) {
        if (typeof event.button === "number" && event.button !== 0) {
          // Not a left click
          return undefined;
        }
        if (event.ctrlKey || event.shiftKey || event.altKey || event.metaKey) {
          // Modified click of key
          return undefined;
        }
        const state = getState();
        const handler = stateHandlers[state];
        if (handler[eventName]) {
          return handler[eventName](event);
        }
        return undefined;
      }).bind(null, eventName)));
      primedDocumentHandlers.set(eventName, fn);
    });
    primedDocumentHandlers.set("keyup", watchFunction(assertIsTrusted(keyupHandler)));
    primedDocumentHandlers.set("keydown", watchFunction(assertIsTrusted(keydownHandler)));
    window.document.addEventListener("visibilitychange", visibilityChangeHandler);
    window.addEventListener("beforeunload", beforeunloadHandler);
  }

  let mousedownSetOnDocument = false;

  function installHandlersOnDocument(docObj) {
    for (const [eventName, handler] of primedDocumentHandlers) {
      const watchHandler = watchFunction(handler);
      const useCapture = eventName !== "keyup";
      docObj.addEventListener(eventName, watchHandler, useCapture);
      registeredDocumentHandlers.push({name: eventName, doc: docObj, handler: watchHandler, useCapture});
    }
    if (!mousedownSetOnDocument) {
      const mousedownHandler = primedDocumentHandlers.get("mousedown");
      document.addEventListener("mousedown", mousedownHandler, true);
      registeredDocumentHandlers.push({name: "mousedown", doc: document, handler: mousedownHandler, useCapture: true});
      mousedownSetOnDocument = true;
    }
  }

  function beforeunloadHandler() {
    sendEvent("cancel-shot", "tab-load");
    exports.deactivate();
  }

  function keydownHandler(event) {
    // In MacOS, the keyup event for 'c' is not fired when performing cmd+c.
    if (event.code === "KeyC" && (event.ctrlKey || event.metaKey)
        && ["previewing", "selected"].includes(getState.state)) {
      catcher.watchPromise(callBackground("getPlatformOs").then(os => {
        if ((event.ctrlKey && os !== "mac") ||
            (event.metaKey && os === "mac")) {
          sendEvent("copy-shot", "keyboard-copy");
          copyShot();
        }
      }));
    }
  }

  function keyupHandler(event) {
    if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) {
      // unused modifier keys
      return;
    }
    if ((event.key || event.code) === "Escape") {
      sendEvent("cancel-shot", "keyboard-escape");
      exports.deactivate();
    }
    // Enter to trigger Save or Download by default. But if the user tabbed to
    // select another button, then we do not want this.
    if ((event.key || event.code) === "Enter"
        && getState.state === "selected"
        && ui.iframe.document().activeElement.tagName === "BODY") {
      if (ui.isDownloadOnly()) {
        sendEvent("download-shot", "keyboard-enter");
        downloadShot();
      } else {
        sendEvent("save-shot", "keyboard-enter");
        shooter.takeShot("selection", selectedPos);
      }
    }
  }

  function visibilityChangeHandler(event) {
    // The document is the event target
    if (event.target.hidden) {
      sendEvent("internal", "document-hidden");
    }
  }

  function removeHandlers() {
    window.removeEventListener("beforeunload", beforeunloadHandler);
    window.document.removeEventListener("visibilitychange", visibilityChangeHandler);
    for (const {name, doc, handler, useCapture} of registeredDocumentHandlers) {
      doc.removeEventListener(name, handler, !!useCapture);
    }
    registeredDocumentHandlers = [];
  }

  catcher.watchFunction(exports.activate)();

  return exports;
})();

null;
PK
!<®ükv¤¤webextension/selector/util.js"use strict";

this.util = (function() { // eslint-disable-line no-unused-vars
  const exports = {};

  /** Removes a node from its document, if it's a node and the node is attached to a parent */
  exports.removeNode = function(el) {
    if (el && el.parentNode) {
      el.remove();
    }
  };

  /** Truncates the X coordinate to the document size */
  exports.truncateX = function(x) {
    const max = Math.max(document.documentElement.clientWidth, document.body.clientWidth, document.documentElement.scrollWidth, document.body.scrollWidth);
    if (x < 0) {
      return 0;
    } else if (x > max) {
      return max;
    }
    return x;
  };

  /** Truncates the Y coordinate to the document size */
  exports.truncateY = function(y) {
    const max = Math.max(document.documentElement.clientHeight, document.body.clientHeight, document.documentElement.scrollHeight, document.body.scrollHeight);
    if (y < 0) {
      return 0;
    } else if (y > max) {
      return max;
    }
    return y;
  };

  // Pixels of wiggle the captured region gets in captureSelectedText:
  const CAPTURE_WIGGLE = 10;
  const ELEMENT_NODE = document.ELEMENT_NODE;

  exports.captureEnclosedText = function(box) {
    const scrollX = window.scrollX;
    const scrollY = window.scrollY;
    const text = [];
    function traverse(el) {
      let elBox = el.getBoundingClientRect();
      elBox = {
        top: elBox.top + scrollY,
        bottom: elBox.bottom + scrollY,
        left: elBox.left + scrollX,
        right: elBox.right + scrollX
      };
      if (elBox.bottom < box.top ||
          elBox.top > box.bottom ||
          elBox.right < box.left ||
          elBox.left > box.right) {
        // Totally outside of the box
        return;
      }
      if (elBox.bottom > box.bottom + CAPTURE_WIGGLE ||
          elBox.top < box.top - CAPTURE_WIGGLE ||
          elBox.right > box.right + CAPTURE_WIGGLE ||
          elBox.left < box.left - CAPTURE_WIGGLE) {
        // Partially outside the box
        for (let i = 0; i < el.childNodes.length; i++) {
          const child = el.childNodes[i];
          if (child.nodeType === ELEMENT_NODE) {
            traverse(child);
          }
        }
        return;
      }
      addText(el);
    }
    function addText(el) {
      let t;
      if (el.tagName === "IMG") {
        t = el.getAttribute("alt") || el.getAttribute("title");
      } else if (el.tagName === "A") {
        t = el.innerText;
        if (el.getAttribute("href") && !el.getAttribute("href").startsWith("#")) {
          t += " (" + el.href + ")";
        }
      } else {
        t = el.innerText;
      }
      if (t) {
        text.push(t);
      }
    }
    traverse(document.body);
    if (text.length) {
      let result = text.join("\n");
      result = result.replace(/^\s+/, "");
      result = result.replace(/\s+$/, "");
      result = result.replace(/[ \t]+\n/g, "\n");
      return result;
    }
    return null;
  };


  return exports;
})();
null;
PK
!<Ñþ	•««webextension/sitehelper.js/* globals catcher, callBackground, content */
/** This is a content script added to all screenshots.firefox.com pages, and allows the site to
    communicate with the add-on */

"use strict";

this.sitehelper = (function() {

  // This gives us the content's copy of XMLHttpRequest, instead of the wrapped
  // copy that this content script gets:
  const ContentXMLHttpRequest = content.XMLHttpRequest;

  catcher.registerHandler((errorObj) => {
    callBackground("reportError", errorObj);
  });


  function sendCustomEvent(name, detail) {
    if (typeof detail === "object") {
      // Note sending an object can lead to security problems, while a string
      // is safe to transfer:
      detail = JSON.stringify(detail);
    }
    document.dispatchEvent(new CustomEvent(name, {detail}));
  }

  /** Set the cookie, even if third-party cookies are disabled in this browser
      (when they are disabled, login from the background page won't set cookies) */
  function sendBackupCookieRequest(authHeaders) {
    // See https://bugzilla.mozilla.org/show_bug.cgi?id=1295660
    //   This bug would allow us to access window.content.XMLHttpRequest, and get
    //   a safer (not overridable by content) version of the object.

    // This is a very minimal attempt to verify that the XMLHttpRequest object we got
    // is legitimate. It is not a good test.
    if (Object.toString.apply(ContentXMLHttpRequest) !== "function XMLHttpRequest() {\n    [native code]\n}") {
      console.warn("Insecure copy of XMLHttpRequest");
      return;
    }
    const req = new ContentXMLHttpRequest();
    req.open("POST", "/api/set-login-cookie");
    for (const name in authHeaders) {
      req.setRequestHeader(name, authHeaders[name]);
    }
    req.send("");
    req.onload = () => {
      if (req.status !== 200) {
        console.warn("Attempt to set Screenshots cookie via /api/set-login-cookie failed:", req.status, req.statusText, req.responseText);
      }
    };
  }

  document.addEventListener("delete-everything", catcher.watchFunction((event) => {
    // FIXME: reset some data in the add-on
  }, false));

  document.addEventListener("request-login", catcher.watchFunction((event) => {
    const shotId = event.detail;
    catcher.watchPromise(callBackground("getAuthInfo", shotId || null).then((info) => {
      sendBackupCookieRequest(info.authHeaders);
      sendCustomEvent("login-successful", {deviceId: info.deviceId, isOwner: info.isOwner, backupCookieRequest: true});
    }));
  }));

  document.addEventListener("request-onboarding", catcher.watchFunction((event) => {
    callBackground("requestOnboarding");
  }));

  // Depending on the script loading order, the site might get the addon-present event,
  // but probably won't - instead the site will ask for that event after it has loaded
  document.addEventListener("request-addon-present", catcher.watchFunction(() => {
    sendCustomEvent("addon-present");
  }));

  sendCustomEvent("addon-present");

})();
null;
PK––)0