text:
(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory(require("./foundation.core.utils"), require("./foundation.core"), require("jquery"), require("./foundation.util.keyboard"), require("./foundation.util.mediaQuery"), require("./foundation.core.plugin"), require("./foundation.util.motion"));
	else if(typeof define === 'function' && define.amd)
		define(["./foundation.core.utils", "./foundation.core", "jquery", "./foundation.util.keyboard", "./foundation.util.mediaQuery", "./foundation.core.plugin", "./foundation.util.motion"], factory);
	else if(typeof exports === 'object')
		exports["foundation.offcanvas"] = factory(require("./foundation.core.utils"), require("./foundation.core"), require("jquery"), require("./foundation.util.keyboard"), require("./foundation.util.mediaQuery"), require("./foundation.core.plugin"), require("./foundation.util.motion"));
	else
		root["__FOUNDATION_EXTERNAL__"] = root["__FOUNDATION_EXTERNAL__"] || {}, root["__FOUNDATION_EXTERNAL__"]["foundation.offcanvas"] = factory(root["__FOUNDATION_EXTERNAL__"]["foundation.core"], root["__FOUNDATION_EXTERNAL__"]["foundation.core"], root["jQuery"], root["__FOUNDATION_EXTERNAL__"]["foundation.util.keyboard"], root["__FOUNDATION_EXTERNAL__"]["foundation.util.mediaQuery"], root["__FOUNDATION_EXTERNAL__"]["foundation.core"], root["__FOUNDATION_EXTERNAL__"]["foundation.util.motion"]);
})(window, function(__WEBPACK_EXTERNAL_MODULE__foundation_core_utils__, __WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE_jquery__, __WEBPACK_EXTERNAL_MODULE__foundation_util_keyboard__, __WEBPACK_EXTERNAL_MODULE__foundation_util_mediaQuery__, __WEBPACK_EXTERNAL_MODULE__foundation_core_plugin__, __WEBPACK_EXTERNAL_MODULE__foundation_util_motion__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 9);
/******/ })
/************************************************************************/
/******/ ({

/***/ "./foundation.core":
/*!****************************************************************************************************************************************************************!*\
  !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.core"],"amd":"./foundation.core","commonjs":"./foundation.core","commonjs2":"./foundation.core"} ***!
  \****************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core__;

/***/ }),

/***/ "./foundation.core.plugin":
/*!*************************************************************************************************************************************************************************************!*\
  !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.core"],"amd":"./foundation.core.plugin","commonjs":"./foundation.core.plugin","commonjs2":"./foundation.core.plugin"} ***!
  \*************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core_plugin__;

/***/ }),

/***/ "./foundation.core.utils":
/*!**********************************************************************************************************************************************************************************!*\
  !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.core"],"amd":"./foundation.core.utils","commonjs":"./foundation.core.utils","commonjs2":"./foundation.core.utils"} ***!
  \**********************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core_utils__;

/***/ }),

/***/ "./foundation.util.keyboard":
/*!****************************************************************************************************************************************************************************************************!*\
  !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.util.keyboard"],"amd":"./foundation.util.keyboard","commonjs":"./foundation.util.keyboard","commonjs2":"./foundation.util.keyboard"} ***!
  \****************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_keyboard__;

/***/ }),

/***/ "./foundation.util.mediaQuery":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.util.mediaQuery"],"amd":"./foundation.util.mediaQuery","commonjs":"./foundation.util.mediaQuery","commonjs2":"./foundation.util.mediaQuery"} ***!
  \************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_mediaQuery__;

/***/ }),

/***/ "./foundation.util.motion":
/*!********************************************************************************************************************************************************************************************!*\
  !*** external {"root":["__FOUNDATION_EXTERNAL__","foundation.util.motion"],"amd":"./foundation.util.motion","commonjs":"./foundation.util.motion","commonjs2":"./foundation.util.motion"} ***!
  \********************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_motion__;

/***/ }),

/***/ "./js/entries/plugins/foundation.offcanvas.js":
/*!****************************************************!*\
  !*** ./js/entries/plugins/foundation.offcanvas.js ***!
  \****************************************************/
/*! exports provided: Foundation, OffCanvas */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core */ "./foundation.core");
/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_foundation_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Foundation", function() { return _foundation_core__WEBPACK_IMPORTED_MODULE_0__["Foundation"]; });

/* harmony import */ var _foundation_offcanvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.offcanvas */ "./js/foundation.offcanvas.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "OffCanvas", function() { return _foundation_offcanvas__WEBPACK_IMPORTED_MODULE_1__["OffCanvas"]; });

_foundation_core__WEBPACK_IMPORTED_MODULE_0__["Foundation"].plugin(_foundation_offcanvas__WEBPACK_IMPORTED_MODULE_1__["OffCanvas"], 'OffCanvas');

/***/ }),

/***/ "./js/foundation.offcanvas.js":
/*!************************************!*\
  !*** ./js/foundation.offcanvas.js ***!
  \************************************/
/*! exports provided: OffCanvas */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OffCanvas", function() { return OffCanvas; });
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery");
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./foundation.core.utils");
/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./foundation.util.keyboard");
/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./foundation.util.mediaQuery");
/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.core.plugin */ "./foundation.core.plugin");
/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js");

function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

/**
 * OffCanvas module.
 * @module foundation.offcanvas
 * @requires foundation.util.keyboard
 * @requires foundation.util.mediaQuery
 * @requires foundation.util.triggers
 */

var OffCanvas =
/*#__PURE__*/
function (_Plugin) {
  _inherits(OffCanvas, _Plugin);

  function OffCanvas() {
    _classCallCheck(this, OffCanvas);

    return _possibleConstructorReturn(this, _getPrototypeOf(OffCanvas).apply(this, arguments));
  }

  _createClass(OffCanvas, [{
    key: "_setup",

    /**
     * Creates a new instance of an off-canvas wrapper.
     * @class
     * @name OffCanvas
     * @fires OffCanvas#init
     * @param {Object} element - jQuery object to initialize.
     * @param {Object} options - Overrides to the default plugin settings.
     */
    value: function _setup(element, options) {
      var _this2 = this;

      this.className = 'OffCanvas'; // ie9 back compat

      this.$element = element;
      this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, OffCanvas.defaults, this.$element.data(), options);
      this.contentClasses = {
        base: [],
        reveal: []
      };
      this.$lastTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()();
      this.$triggers = jquery__WEBPACK_IMPORTED_MODULE_0___default()();
      this.position = 'left';
      this.$content = jquery__WEBPACK_IMPORTED_MODULE_0___default()();
      this.nested = !!this.options.nested; // Defines the CSS transition/position classes of the off-canvas content container.

      jquery__WEBPACK_IMPORTED_MODULE_0___default()(['push', 'overlap']).each(function (index, val) {
        _this2.contentClasses.base.push('has-transition-' + val);
      });
      jquery__WEBPACK_IMPORTED_MODULE_0___default()(['left', 'right', 'top', 'bottom']).each(function (index, val) {
        _this2.contentClasses.base.push('has-position-' + val);

        _this2.contentClasses.reveal.push('has-reveal-' + val);
      }); // Triggers init is idempotent, just need to make sure it is initialized

      _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_5__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a);

      _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__["MediaQuery"]._init();

      this._init();

      this._events();

      _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__["Keyboard"].register('OffCanvas', {
        'ESCAPE': 'close'
      });
    }
    /**
     * Initializes the off-canvas wrapper by adding the exit overlay (if needed).
     * @function
     * @private
     */

  }, {
    key: "_init",
    value: function _init() {
      var id = this.$element.attr('id');
      this.$element.attr('aria-hidden', 'true'); // Find off-canvas content, either by ID (if specified), by siblings or by closest selector (fallback)

      if (this.options.contentId) {
        this.$content = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#' + this.options.contentId);
      } else if (this.$element.siblings('[data-off-canvas-content]').length) {
        this.$content = this.$element.siblings('[data-off-canvas-content]').first();
      } else {
        this.$content = this.$element.closest('[data-off-canvas-content]').first();
      }

      if (!this.options.contentId) {
        // Assume that the off-canvas element is nested if it isn't a sibling of the content
        this.nested = this.$element.siblings('[data-off-canvas-content]').length === 0;
      } else if (this.options.contentId && this.options.nested === null) {
        // Warning if using content ID without setting the nested option
        // Once the element is nested it is required to work properly in this case
        console.warn('Remember to use the nested option if using the content ID option!');
      }

      if (this.nested === true) {
        // Force transition overlap if nested
        this.options.transition = 'overlap'; // Remove appropriate classes if already assigned in markup

        this.$element.removeClass('is-transition-push');
      }

      this.$element.addClass("is-transition-".concat(this.options.transition, " is-closed")); // Find triggers that affect this element and add aria-expanded to them

      this.$triggers = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).find('[data-open="' + id + '"], [data-close="' + id + '"], [data-toggle="' + id + '"]').attr('aria-expanded', 'false').attr('aria-controls', id); // Get position by checking for related CSS class

      this.position = this.$element.is('.position-left, .position-top, .position-right, .position-bottom') ? this.$element.attr('class').match(/position\-(left|top|right|bottom)/)[1] : this.position; // Add an overlay over the content if necessary

      if (this.options.contentOverlay === true) {
        var overlay = document.createElement('div');
        var overlayPosition = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$element).css("position") === 'fixed' ? 'is-overlay-fixed' : 'is-overlay-absolute';
        overlay.setAttribute('class', 'js-off-canvas-overlay ' + overlayPosition);
        this.$overlay = jquery__WEBPACK_IMPORTED_MODULE_0___default()(overlay);

        if (overlayPosition === 'is-overlay-fixed') {
          jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$overlay).insertAfter(this.$element);
        } else {
          this.$content.append(this.$overlay);
        }
      } // Get the revealOn option from the class.

      var revealOnRegExp = new RegExp(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["RegExpEscape"])(this.options.revealClass) + '([^\\s]+)', 'g');
      var revealOnClass = revealOnRegExp.exec(this.$element[0].className);

      if (revealOnClass) {
        this.options.isRevealed = true;
        this.options.revealOn = this.options.revealOn || revealOnClass[1];
      } // Ensure the `reveal-on-*` class is set.

      if (this.options.isRevealed === true && this.options.revealOn) {
        this.$element.first().addClass("".concat(this.options.revealClass).concat(this.options.revealOn));

        this._setMQChecker();
      }

      if (this.options.transitionTime) {
        this.$element.css('transition-duration', this.options.transitionTime);
      } // Initally remove all transition/position CSS classes from off-canvas content container.

      this._removeContentClasses();
    }
    /**
     * Adds event handlers to the off-canvas wrapper and the exit overlay.
     * @function
     * @private
     */

  }, {
    key: "_events",
    value: function _events() {
      this.$element.off('.zf.trigger .zf.offcanvas').on({
        'open.zf.trigger': this.open.bind(this),
        'close.zf.trigger': this.close.bind(this),
        'toggle.zf.trigger': this.toggle.bind(this),
        'keydown.zf.offcanvas': this._handleKeyboard.bind(this)
      });

      if (this.options.closeOnClick === true) {
        var $target = this.options.contentOverlay ? this.$overlay : this.$content;
        $target.on({
          'click.zf.offcanvas': this.close.bind(this)
        });
      }
    }
    /**
     * Applies event listener for elements that will reveal at certain breakpoints.
     * @private
     */

  }, {
    key: "_setMQChecker",
    value: function _setMQChecker() {
      var _this = this;

      this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {
        if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__["MediaQuery"].atLeast(_this.options.revealOn)) {
          _this.reveal(true);
        }
      });
      jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', function () {
        if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__["MediaQuery"].atLeast(_this.options.revealOn)) {
          _this.reveal(true);
        } else {
          _this.reveal(false);
        }
      });
    }
    /**
     * Removes the CSS transition/position classes of the off-canvas content container.
     * Removing the classes is important when another off-canvas gets opened that uses the same content container.
     * @param {Boolean} hasReveal - true if related off-canvas element is revealed.
     * @private
     */

  }, {
    key: "_removeContentClasses",
    value: function _removeContentClasses(hasReveal) {
      if (typeof hasReveal !== 'boolean') {
        this.$content.removeClass(this.contentClasses.base.join(' '));
      } else if (hasReveal === false) {
        this.$content.removeClass("has-reveal-".concat(this.position));
      }
    }
    /**
     * Adds the CSS transition/position classes of the off-canvas content container, based on the opening off-canvas element.
     * Beforehand any transition/position class gets removed.
     * @param {Boolean} hasReveal - true if related off-canvas element is revealed.
     * @private
     */

  }, {
    key: "_addContentClasses",
    value: function _addContentClasses(hasReveal) {
      this._removeContentClasses(hasReveal);

      if (typeof hasReveal !== 'boolean') {
        this.$content.addClass("has-transition-".concat(this.options.transition, " has-position-").concat(this.position));
      } else if (hasReveal === true) {
        this.$content.addClass("has-reveal-".concat(this.position));
      }
    }
    /**
     * Handles the revealing/hiding the off-canvas at breakpoints, not the same as open.
     * @param {Boolean} isRevealed - true if element should be revealed.
     * @function
     */

  }, {
    key: "reveal",
    value: function reveal(isRevealed) {
      if (isRevealed) {
        this.close();
        this.isRevealed = true;
        this.$element.attr('aria-hidden', 'false');
        this.$element.off('open.zf.trigger toggle.zf.trigger');
        this.$element.removeClass('is-closed');
      } else {
        this.isRevealed = false;
        this.$element.attr('aria-hidden', 'true');
        this.$element.off('open.zf.trigger toggle.zf.trigger').on({
          'open.zf.trigger': this.open.bind(this),
          'toggle.zf.trigger': this.toggle.bind(this)
        });
        this.$element.addClass('is-closed');
      }

      this._addContentClasses(isRevealed);
    }
    /**
     * Stops scrolling of the body when offcanvas is open on mobile Safari and other troublesome browsers.
     * @private
     */

  }, {
    key: "_stopScrolling",
    value: function _stopScrolling(event) {
      return false;
    } // Taken and adapted from http://stackoverflow.com/questions/16889447/prevent-full-page-scrolling-ios
    // Only really works for y, not sure how to extend to x or if we need to.

  }, {
    key: "_recordScrollable",
    value: function _recordScrollable(event) {
      var elem = this; // called from event handler context with this as elem
      // If the element is scrollable (content overflows), then...

      if (elem.scrollHeight !== elem.clientHeight) {
        // If we're at the top, scroll down one pixel to allow scrolling up
        if (elem.scrollTop === 0) {
          elem.scrollTop = 1;
        } // If we're at the bottom, scroll up one pixel to allow scrolling down

        if (elem.scrollTop === elem.scrollHeight - elem.clientHeight) {
          elem.scrollTop = elem.scrollHeight - elem.clientHeight - 1;
        }
      }

      elem.allowUp = elem.scrollTop > 0;
      elem.allowDown = elem.scrollTop < elem.scrollHeight - elem.clientHeight;
      elem.lastY = event.originalEvent.pageY;
    }
  }, {
    key: "_stopScrollPropagation",
    value: function _stopScrollPropagation(event) {
      var elem = this; // called from event handler context with this as elem

      var up = event.pageY < elem.lastY;
      var down = !up;
      elem.lastY = event.pageY;

      if (up && elem.allowUp || down && elem.allowDown) {
        event.stopPropagation();
      } else {
        event.preventDefault();
      }
    }
    /**
     * Opens the off-canvas menu.
     * @function
     * @param {Object} event - Event object passed from listener.
     * @param {jQuery} trigger - element that triggered the off-canvas to open.
     * @fires Offcanvas#opened
     * @todo also trigger 'open' event?
     */

  }, {
    key: "open",
    value: function open(event, trigger) {
      if (this.$element.hasClass('is-open') || this.isRevealed) {
        return;
      }

      var _this = this;

      if (trigger) {
        this.$lastTrigger = trigger;
      }

      if (this.options.forceTo === 'top') {
        window.scrollTo(0, 0);
      } else if (this.options.forceTo === 'bottom') {
        window.scrollTo(0, document.body.scrollHeight);
      }

      if (this.options.transitionTime && this.options.transition !== 'overlap') {
        this.$element.siblings('[data-off-canvas-content]').css('transition-duration', this.options.transitionTime);
      } else {
        this.$element.siblings('[data-off-canvas-content]').css('transition-duration', '');
      }

      this.$element.addClass('is-open').removeClass('is-closed');
      this.$triggers.attr('aria-expanded', 'true');
      this.$element.attr('aria-hidden', 'false');
      this.$content.addClass('is-open-' + this.position); // If `contentScroll` is set to false, add class and disable scrolling on touch devices.

      if (this.options.contentScroll === false) {
        jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').addClass('is-off-canvas-open').on('touchmove', this._stopScrolling);
        this.$element.on('touchstart', this._recordScrollable);
        this.$element.on('touchmove', this._stopScrollPropagation);
      }

      if (this.options.contentOverlay === true) {
        this.$overlay.addClass('is-visible');
      }

      if (this.options.closeOnClick === true && this.options.contentOverlay === true) {
        this.$overlay.addClass('is-closable');
      }

      if (this.options.autoFocus === true) {
        this.$element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["transitionend"])(this.$element), function () {
          if (!_this.$element.hasClass('is-open')) {
            return; // exit if prematurely closed
          }

          var canvasFocus = _this.$element.find('[data-autofocus]');

          if (canvasFocus.length) {
            canvasFocus.eq(0).focus();
          } else {
            _this.$element.find('a, button').eq(0).focus();
          }
        });
      }

      if (this.options.trapFocus === true) {
        this.$content.attr('tabindex', '-1');
        _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__["Keyboard"].trapFocus(this.$element);
      }

      this._addContentClasses();
      /**
       * Fires when the off-canvas menu opens.
       * @event Offcanvas#opened
       */

      this.$element.trigger('opened.zf.offcanvas');
    }
    /**
     * Closes the off-canvas menu.
     * @function
     * @param {Function} cb - optional cb to fire after closure.
     * @fires Offcanvas#closed
     */

  }, {
    key: "close",
    value: function close(cb) {
      if (!this.$element.hasClass('is-open') || this.isRevealed) {
        return;
      }

      var _this = this;

      this.$element.removeClass('is-open');
      this.$element.attr('aria-hidden', 'true')
      /**
       * Fires when the off-canvas menu opens.
       * @event Offcanvas#closed
       */
      .trigger('closed.zf.offcanvas');
      this.$content.removeClass('is-open-left is-open-top is-open-right is-open-bottom'); // If `contentScroll` is set to false, remove class and re-enable scrolling on touch devices.

      if (this.options.contentScroll === false) {
        jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').removeClass('is-off-canvas-open').off('touchmove', this._stopScrolling);
        this.$element.off('touchstart', this._recordScrollable);
        this.$element.off('touchmove', this._stopScrollPropagation);
      }

      if (this.options.contentOverlay === true) {
        this.$overlay.removeClass('is-visible');
      }

      if (this.options.closeOnClick === true && this.options.contentOverlay === true) {
        this.$overlay.removeClass('is-closable');
      }

      this.$triggers.attr('aria-expanded', 'false');

      if (this.options.trapFocus === true) {
        this.$content.removeAttr('tabindex');
        _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__["Keyboard"].releaseFocus(this.$element);
      } // Listen to transitionEnd and add class when done.

      this.$element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["transitionend"])(this.$element), function (e) {
        _this.$element.addClass('is-closed');

        _this._removeContentClasses();
      });
    }
    /**
     * Toggles the off-canvas menu open or closed.
     * @function
     * @param {Object} event - Event object passed from listener.
     * @param {jQuery} trigger - element that triggered the off-canvas to open.
     */

  }, {
    key: "toggle",
    value: function toggle(event, trigger) {
      if (this.$element.hasClass('is-open')) {
        this.close(event, trigger);
      } else {
        this.open(event, trigger);
      }
    }
    /**
     * Handles keyboard input when detected. When the escape key is pressed, the off-canvas menu closes, and focus is restored to the element that opened the menu.
     * @function
     * @private
     */

  }, {
    key: "_handleKeyboard",
    value: function _handleKeyboard(e) {
      var _this3 = this;

      _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__["Keyboard"].handleKey(e, 'OffCanvas', {
        close: function close() {
          _this3.close();

          _this3.$lastTrigger.focus();

          return true;
        },
        handled: function handled() {
          e.stopPropagation();
          e.preventDefault();
        }
      });
    }
    /**
     * Destroys the offcanvas plugin.
     * @function
     */

  }, {
    key: "_destroy",
    value: function _destroy() {
      this.close();
      this.$element.off('.zf.trigger .zf.offcanvas');
      this.$overlay.off('.zf.offcanvas');
      if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener);
    }
  }]);

  return OffCanvas;
}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__["Plugin"]);

OffCanvas.defaults = {
  /**
   * Allow the user to click outside of the menu to close it.
   * @option
   * @type {boolean}
   * @default true
   */
  closeOnClick: true,

  /**
   * Adds an overlay on top of `[data-off-canvas-content]`.
   * @option
   * @type {boolean}
   * @default true
   */
  contentOverlay: true,

  /**
   * Target an off-canvas content container by ID that may be placed anywhere. If null the closest content container will be taken.
   * @option
   * @type {?string}
   * @default null
   */
  contentId: null,

  /**
   * Define the off-canvas element is nested in an off-canvas content. This is required when using the contentId option for a nested element.
   * @option
   * @type {boolean}
   * @default null
   */
  nested: null,

  /**
   * Enable/disable scrolling of the main content when an off canvas panel is open.
   * @option
   * @type {boolean}
   * @default true
   */
  contentScroll: true,

  /**
   * Amount of time in ms the open and close transition requires. If none selected, pulls from body style.
   * @option
   * @type {number}
   * @default null
   */
  transitionTime: null,

  /**
   * Type of transition for the offcanvas menu. Options are 'push', 'detached' or 'slide'.
   * @option
   * @type {string}
   * @default push
   */
  transition: 'push',

  /**
   * Force the page to scroll to top or bottom on open.
   * @option
   * @type {?string}
   * @default null
   */
  forceTo: null,

  /**
   * Allow the offcanvas to remain open for certain breakpoints.
   * @option
   * @type {boolean}
   * @default false
   */
  isRevealed: false,

  /**
   * Breakpoint at which to reveal. JS will use a RegExp to target standard classes, if changing classnames, pass your class with the `revealClass` option.
   * @option
   * @type {?string}
   * @default null
   */
  revealOn: null,

  /**
   * Force focus to the offcanvas on open. If true, will focus the opening trigger on close.
   * @option
   * @type {boolean}
   * @default true
   */
  autoFocus: true,

  /**
   * Class used to force an offcanvas to remain open. Foundation defaults for this are `reveal-for-large` & `reveal-for-medium`.
   * @option
   * @type {string}
   * @default reveal-for-
   * @todo improve the regex testing for this.
   */
  revealClass: 'reveal-for-',

  /**
   * Triggers optional focus trapping when opening an offcanvas. Sets tabindex of [data-off-canvas-content] to -1 for accessibility purposes.
   * @option
   * @type {boolean}
   * @default false
   */
  trapFocus: false
};

/***/ }),

/***/ "./js/foundation.util.triggers.js":
/*!****************************************!*\
  !*** ./js/foundation.util.triggers.js ***!
  \****************************************/
/*! exports provided: Triggers */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Triggers", function() { return Triggers; });
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery");
/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./foundation.core.utils");
/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.motion */ "./foundation.util.motion");
/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__);

function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

var MutationObserver = function () {
  var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];

  for (var i = 0; i < prefixes.length; i++) {
    if ("".concat(prefixes[i], "MutationObserver") in window) {
      return window["".concat(prefixes[i], "MutationObserver")];
    }
  }

  return false;
}();

var triggers = function triggers(el, type) {
  el.data(type).split(' ').forEach(function (id) {
    jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(id))[type === 'close' ? 'trigger' : 'triggerHandler']("".concat(type, ".zf.trigger"), [el]);
  });
};

var Triggers = {
  Listeners: {
    Basic: {},
    Global: {}
  },
  Initializers: {}
};
Triggers.Listeners.Basic = {
  openListener: function openListener() {
    triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'open');
  },
  closeListener: function closeListener() {
    var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('close');

    if (id) {
      triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'close');
    } else {
      jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('close.zf.trigger');
    }
  },
  toggleListener: function toggleListener() {
    var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle');

    if (id) {
      triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'toggle');
    } else {
      jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('toggle.zf.trigger');
    }
  },
  closeableListener: function closeableListener(e) {
    e.stopPropagation();
    var animation = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('closable');

    if (animation !== '') {
      _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__["Motion"].animateOut(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), animation, function () {
        jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('closed.zf');
      });
    } else {
      jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).fadeOut().trigger('closed.zf');
    }
  },
  toggleFocusListener: function toggleFocusListener() {
    var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle-focus');
    jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(id)).triggerHandler('toggle.zf.trigger', [jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)]);
  }
}; // Elements with [data-open] will reveal a plugin that supports it when clicked.

Triggers.Initializers.addOpenListener = function ($elem) {
  $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);
  $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);
}; // Elements with [data-close] will close a plugin that supports it when clicked.
// If used without a value on [data-close], the event will bubble, allowing it to close a parent component.

Triggers.Initializers.addCloseListener = function ($elem) {
  $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);
  $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);
}; // Elements with [data-toggle] will toggle a plugin that supports it when clicked.

Triggers.Initializers.addToggleListener = function ($elem) {
  $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);
  $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);
}; // Elements with [data-closable] will respond to close.zf.trigger events.

Triggers.Initializers.addCloseableListener = function ($elem) {
  $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);
  $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);
}; // Elements with [data-toggle-focus] will respond to coming in and out of focus

Triggers.Initializers.addToggleFocusListener = function ($elem) {
  $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);
  $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);
}; // More Global/complex listeners and triggers

Triggers.Listeners.Global = {
  resizeListener: function resizeListener($nodes) {
    if (!MutationObserver) {
      //fallback for IE 9
      $nodes.each(function () {
        jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('resizeme.zf.trigger');
      });
    } //trigger all listening elements and signal a resize event

    $nodes.attr('data-events', "resize");
  },
  scrollListener: function scrollListener($nodes) {
    if (!MutationObserver) {
      //fallback for IE 9
      $nodes.each(function () {
        jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('scrollme.zf.trigger');
      });
    } //trigger all listening elements and signal a scroll event

    $nodes.attr('data-events', "scroll");
  },
  closeMeListener: function closeMeListener(e, pluginId) {
    var plugin = e.namespace.split('.')[0];
    var plugins = jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-".concat(plugin, "]")).not("[data-yeti-box=\"".concat(pluginId, "\"]"));
    plugins.each(function () {
      var _this = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);

      _this.triggerHandler('close.zf.trigger', [_this]);
    });
  } // Global, parses whole document.

};

Triggers.Initializers.addClosemeListener = function (pluginName) {
  var yetiBoxes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-yeti-box]'),
      plugNames = ['dropdown', 'tooltip', 'reveal'];

  if (pluginName) {
    if (typeof pluginName === 'string') {
      plugNames.push(pluginName);
    } else if (_typeof(pluginName) === 'object' && typeof pluginName[0] === 'string') {
      plugNames.concat(pluginName);
    } else {
      console.error('Plugin names must be strings');
    }
  }

  if (yetiBoxes.length) {
    var listeners = plugNames.map(function (name) {
      return "closeme.zf.".concat(name);
    }).join(' ');
    jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);
  }
};

function debounceGlobalListener(debounce, trigger, listener) {
  var timer,
      args = Array.prototype.slice.call(arguments, 3);
  jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(trigger).on(trigger, function (e) {
    if (timer) {
      clearTimeout(timer);
    }

    timer = setTimeout(function () {
      listener.apply(null, args);
    }, debounce || 10); //default time to emit scroll event
  });
}

Triggers.Initializers.addResizeListener = function (debounce) {
  var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-resize]');

  if ($nodes.length) {
    debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);
  }
};

Triggers.Initializers.addScrollListener = function (debounce) {
  var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-scroll]');

  if ($nodes.length) {
    debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);
  }
};

Triggers.Initializers.addMutationEventsListener = function ($elem) {
  if (!MutationObserver) {
    return false;
  }

  var $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]'); //element callback

  var listeningElementsMutation = function listeningElementsMutation(mutationRecordsList) {
    var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(mutationRecordsList[0].target); //trigger the event handler for the element depending on type

    switch (mutationRecordsList[0].type) {
      case "attributes":
        if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") {
          $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);
        }

        if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") {
          $target.triggerHandler('resizeme.zf.trigger', [$target]);
        }

        if (mutationRecordsList[0].attributeName === "style") {
          $target.closest("[data-mutate]").attr("data-events", "mutate");
          $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
        }

        break;

      case "childList":
        $target.closest("[data-mutate]").attr("data-events", "mutate");
        $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]);
        break;

      default:
        return false;
      //nothing
    }
  };

  if ($nodes.length) {
    //for each element that needs to listen for resizing, scrolling, or mutation add a single observer
    for (var i = 0; i <= $nodes.length - 1; i++) {
      var elementObserver = new MutationObserver(listeningElementsMutation);
      elementObserver.observe($nodes[i], {
        attributes: true,
        childList: true,
        characterData: false,
        subtree: true,
        attributeFilter: ["data-events", "style"]
      });
    }
  }
};

Triggers.Initializers.addSimpleListeners = function () {
  var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);
  Triggers.Initializers.addOpenListener($document);
  Triggers.Initializers.addCloseListener($document);
  Triggers.Initializers.addToggleListener($document);
  Triggers.Initializers.addCloseableListener($document);
  Triggers.Initializers.addToggleFocusListener($document);
};

Triggers.Initializers.addGlobalListeners = function () {
  var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);
  Triggers.Initializers.addMutationEventsListener($document);
  Triggers.Initializers.addResizeListener();
  Triggers.Initializers.addScrollListener();
  Triggers.Initializers.addClosemeListener();
};

Triggers.init = function ($, Foundation) {
  Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["onLoad"])($(window), function () {
    if ($.triggersInitialized !== true) {
      Triggers.Initializers.addSimpleListeners();
      Triggers.Initializers.addGlobalListeners();
      $.triggersInitialized = true;
    }
  });

  if (Foundation) {
    Foundation.Triggers = Triggers; // Legacy included to be backwards compatible for now.

    Foundation.IHearYou = Triggers.Initializers.addGlobalListeners;
  }
};

/***/ }),

/***/ 9:
/*!**********************************************************!*\
  !*** multi ./js/entries/plugins/foundation.offcanvas.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(/*! /Users/ncoden/Documents/Documents/Projects/Programmation/Web/2016/Foundation/foundation-sites/js/entries/plugins/foundation.offcanvas.js */"./js/entries/plugins/foundation.offcanvas.js");

/***/ }),

/***/ "jquery":
/*!********************************************************************************************!*\
  !*** external {"root":["jQuery"],"amd":"jquery","commonjs":"jquery","commonjs2":"jquery"} ***!
  \********************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;

/***/ })

/******/ });
});
//# sourceMappingURL=foundation.offcanvas.js.map


text:
Q: Zabbix-agent unreachable One of the servers monitored by Zabbix is not reachable. I have no idea why as this works normally with other servers.

*

*The zabbix-agent service on the monitored server is running.

*We have several servers, all monitored by zabbix. In /etc/zabbix/zabbix_agentd.conf I see no difference between this problematic server and another one that works normally.

*Both the zabbix server and the monitored server (agent-server) are hosted by Amazon.

*All zabbix monitored servers are linked to a security group with two inbound rules for port 10050 and 10051 for the zabbix-server IP. So incoming requests from the zabbix-server to the zabbix-agents on these servers should be allowed. They work on several servers, but not on this one.

*The zabbix-server has a different security group, and no rules set for ports 10050 and 10051, so they should be blocked. Iptables returns no rules.

*I can open a telnet session from the zabbix-server to the agent. It disconnects automatically, but it connects. So I guess the firewall is not the problem.

*Server: Amazon Linux (Centos like)

*Installed file: http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm

*SELinux is disabled on all these agents and on the server.

Agent log after restart of zabbix-agent service
 10939:20151127:093938.268 Starting Zabbix Agent [agent-server.test]. Zabbix 2.2.11 (revision 56693).
 10939:20151127:093938.268 using configuration file: /etc/zabbix/zabbix_agentd.conf
 10942:20151127:093938.269 agent #1 started [listener #1]
 10945:20151127:093938.269 agent #4 started [active checks #1]
 10941:20151127:093938.270 agent #0 started [collector]
 10944:20151127:093938.270 agent #3 started [listener #3]
 10943:20151127:093938.271 agent #2 started [listener #2]
 10945:20151127:141742.930 active check configuration update from [zabbix-server-ip:10051] started to fail
 (cannot connect to [[zabbix-server-ip]:10051]: [4] Interrupted system call)

When I telnet to the agent-server, then enter agent.version, it returns: ZBXD2.2.11
Contents of /etc/zabbix/zabbix_server.conf (server):
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=******
DBSocket=/var/lib/mysql/mysql.sock
SNMPTrapperFile=/var/log/snmptt/snmptt.log
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts

Contents of /etc/zabbix/zabbix_agentd.conf (agent)
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
EnableRemoteCommands=1
Server=zabbix-server-ip
ListenPort=10050
StartAgents=3
# ServerActive=zabbix-server-ip # commented out
Hostname=server.test
Timeout=3
AllowRoot=1
Include=/etc/zabbix/zabbix_agentd.d/

Netstat on zabbix server
$ sudo netstat -lpn | grep zabbix
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      7624/zabbix_server
tcp        0      0 :::10051                    :::*                        LISTEN      7624/zabbix_server

Netstat on problematic agent
$ sudo netstat -lpn | grep zabbix
tcp        0      0 0.0.0.0:10050               0.0.0.0:*                   LISTEN      3248/zabbix_agentd
tcp        0      0 :::10050                    :::*                        LISTEN      3248/zabbix_agentd

Netstat on working agent
$ sudo netstat -lpn | grep zabbix
tcp        0      0 0.0.0.0:10050               0.0.0.0:*                   LISTEN      24242/zabbix_agentd
tcp        0      0 :::10050                    :::*                        LISTEN      24242/zabbix_agentd

Active vs passive agent

*

*I've opened port 10051 on the server for the problematic agent IP.

*Telnet shows that works, from agent to server.

*I've activated the ActiveServer option with the zabbix-server-ip as value. The error mesage is gone in the log after restarting the agent.

*The problem is still there...

Next try:

*

*I've did the same for a working agent, can telnet from agent to server.

*ActiveServer is set with the zabbix-server-ip, agent is restarted

*StartAgents is set to 0, to force using the active agent.

*Zabbix reports that this server is unreachable...

*Then I reset to passive.

All in all, the active mode may have been set in the agent config on several servers, it has never worked. All reports are from passive agents.
Agent Interfaces

*

*Opening via Monitoring > Latest data, selecting host=all, I click the server name, and choose Host Inventory

*The working agent displays its own IP address.

*The problematic agent displays the zabbix-server-ip.

I don't know why this happens, but it seems strange.
What can cause this connection problem? How can I reconnect the server with the agent?
Solution
It turns out that the IP address set in the host configuration (via the web interface) was that of the zabbix-server itself. This should of course be the address of the agent-server.

A: How about current setting of SELinux and iptables on agent box? Can you from agent telnet to server via port 10051?
You can try to check the connectivity between boxes using tcpdump on agent: tcpdump -i your_interface tcp port 10050. Using this you can see the incoming/outgoing packets.

A: I think, you need to understand the active and passive mode of connection for zabbix to resolve the problem. Here from zabbix documentation:

Passive and active checks
Zabbix agents can perform passive and active checks.
In a passive check the agent responds to a data request. Zabbix server
(or proxy) asks for data, for example, CPU load, and Zabbix agent
sends back the result.
Active checks require more complex processing. The agent must first
retrieve a list of items from Zabbix server for independent
processing. Then it will periodically send new values to the server.

Now the active mode to work, you need to have port 10051 open at Zabbix server, so that the agents from clients can connect to it. From the error what you are getting, this is the problem:

10945:20151127:141742.930 active check configuration update from
[zabbix-server-ip:10051] started to fail   (cannot connect to
[[zabbix-server-ip]:10051]: [4] Interrupted system call)

The tests you have done is about connection from the Zabbix server to the client and it seems working without any problem. But thats not enough for the active mode to function. The connection from the client agent to the server on port 10051 is not working in your case and you need to focus on that.
The information you have provided is misleading:

The zabbix-server has a different security group, and no rules set for
ports 10050 and 10051, so they should be blocked. Iptables returns no
rules.

The above about the port can not be true, as you are using active mode. The server must have port 10051 open for the clients to connect or you have to use passive mode.
So, please check the nececessary firewall rules in between and make sure the client/agent can reach the server on this port. I am sure the other agent ( on the other working server), can reach the Zabbix server on port 10051.

A: It turns out that the IP address set in the host configuration (via the web interface) was that of the zabbix-server itself. This should of course be the address of the agent-server.

redpajama_set_name: RedPajamaStackExchange


Dissidia NT Closed Beta Signups Live | GameXcess.net - Gaming News, Videos and Editorials!
Square Enix made a huge announcement coming out of EVO 2017, and I'm more happy to report it to all of you. Dissidia NT, a game I had a blast playing at E3 2017, will be getting a closed beta test on the PS4 and you can sign up for it right now.
EVO attendees interested in playing should not sign up for the beta in this way. Square Enix has revealed they will be emailing out guaranteed beta access codes to EVO attendees. If you haven't gotten yours yet, check your email because you should be getting yours soon!
For those of you who haven't had the chance to play the game yet, here's a closer look at it!
I know Square Enix made this announcement over a day ago, but I was unwilling to talk about this until now due to ongoing technical issues with the official website. As of now, those issues appear to be resolved and because of that I encourage everyone to go sign up as soon as possible!
Dissidia NT is coming exclusively to the PS4 in 2018.


Parlez-vous Doggish? At long last, dogs will know just how smart their owners can be. By unlocking the secrets of the hidden language of dogs, psychologist Stanley Coren allows us into the doggy dialogue, or "Doggish", and makes effective communication a reality.
How to Speak Dog not only provides the sounds, words, actions, and movements with which we can effectively communicate with our dogs, but also deciphers the signs that our dogs give to us. With easy-to-follow tips on how humans can mimic the language dogs use to talk with one another, How to Speak Dog gives dog lovers the skills they need to improve their relationships with their pets.
Excellent, detailed descriptions. Although this is an audiobook, I truly wished for video illustrations many times as visualising bodylanguage is challenging especially when it happens fast as it generally does in annimals. For sounds I wished for actual dogsounds rather than immitated by human voice.
I train my GSD's for SAR and we compete. I found this infomation very useful since understanding and communication is the basis for all training. Techniques are important, but usless unless you can read you training companion and arrive at the result together. And awesome feeling of accomplishmenr and bonding for both!
I was rather surprised that a story about the dog language would be so long. it turns out to be much more complex than woof and bark. Listening to your dog speak requires you paying attention to the whole dog. Great book, well read.
I listen in my car. im on chapter 4, so far its not so much NEW information , but does refresh me in my current knowledge. i am not done yet, but ill try to revisit this review when i am.
i am a dog trainer or rather a dog translator for humans. most of my knowledge is self learned , but i am looking to get into some kind of schooling , as to continue to grow.
for anyone just starting out , the beginning should prove very insightful and if anything help you decide if youre on the right path.
Edit: Just finished and have found a lot more useful, new information in the later chapters. HIGHLY recommended!
This audiobook is full of valuable information in understanding dog body language and behavior. The examples presented are well described and spot on. The reader is very pleasant to listen to, and gives wonderful impressions of signals and sounds--a real bonus to listening vs silently reading.
I only got part of the way thru it. Not worth spending the time to listen. Boring stories. Not what I was hoping for.
I've been studying canine communication and psychology for some time and I can't help but notice some familiar stories but changed slightly in this book from other psychologist.
It's well known now that even though dogs or 98per cent wolf they are nothing like each other at all schenkle has been proven wrong (wolf pack theory) hundreds of times he even admits his work was floored from the start wild wolves do not work as a pack they are a family unit there is so much more work to be done as regarding research. Alexander Horowitz is a far better book to read and is forward thinking in it's approach, would you ask a monkey for tips on how to raise a child so why ask a wolf regarding a dog ?
a easy to follow guide to understand our dogs and their language. this is a valuable resource for a dog owner or dog professional.
I found myself nodding along to parts and amazed at finally understanding the actions of my dogs.
I confess the cover did not prepare me for such a well researched book. It was an engrossing listen. It made my brain work which I enjoyed.


When a Chapter 13 debtor enters into a wage-earner plan, he or she commits the next three years' disposable income - that portion of the debtor's income not required to meet the necessary needs of the debtor (and his or her dependents) - to the repayment of debt. Often, a debtor's income will increase after the plan is in place, and the question arises as to what becomes of this increase in income. A lawyer at Law Office of Paul L. Urich, P.A. in Orlando, Orlando, can answer these and other Chapter 13 questions as they arise, providing information, reassurance and competent and zealous advocacy throughout the bankruptcy process.
It could be disheartening to a debtor to receive a raise and have to turn it all over to the trustee for debt repayment, but that is not always the effect of a salary increase. A lawyer at Law Office of Paul L. Urich, P.A. in Orlando, Florida, can put your mind at ease when questions about a Chapter 13 bankruptcy arise.


Whenever you need anything done we will do our best to et it done as soon as possible.
to discuss your project with our team.
Please contact the member of staff who supervised your project for help. Should you have any problems please do not hesitate to use the contact page on this website.
Technical changes require a small fee per hour.


Dining Chair : Woven Dining Chairs Kitchen And Chairs Light Green Dining Chairs White Dining Leather Chairs Dark Brown Wood Dining Chairs. Black Dining Chairs. White Leather Dining Room Chairs. Cream Leather Dining Chairs. Brown Dining Chairs.
By Bi5MiLl4hRunamuckfestival. Dining Chair. At Tuesday, November 13th 2018, 01:15:04 AM.


text:
/**
 * Support and FAQ: visit Atmel Support
 */

#ifndef CONF_EXAMPLE2_H_INCLUDED
#define CONF_EXAMPLE2_H_INCLUDED

#define GCLK_PIN        PIN_PCK0
#define GCLK_PIN_MUX    PIN_PCK0_FLAGS

#define GCLK_SOURCE		GENCLK_PCK_SRC_MAINCK_XTAL
#define GCLK_DIV		GENCLK_PCK_PRES_1

#endif /* CONF_EXAMPLE2_H_INCLUDED */

redpajama_set_name: RedPajamaGithub


text:
Retro Game Friday: Klanoa
This week for Retro Game Friday I'm back with a classic game that is often not remembered. It's Klanoa: Door to Phantomile!
The story begins with the legend of the land of Phantomile, a mysterious place that is fueled by the very dreams people have at night. As a result, no one can clearly remember the dreams they have had, even if they occurred recently. However, a young cat-like boy named Klonoa who lives in the town of Breezegale with his grandfather has been having dreams about a mysterious dark airship crashing into a nearby mountain, and can recall every detail of it. One day, a mysterious ship does indeed crash into the mountain, and Klonoa and his friend, a "ring spirit" named Huepow, decide to investigate. After fighting several small, round creatures called Moos, they reach the top of the mountain, only to find two mysterious creatures…
Plot: This doesn't have a gripping plot, full of intrigue and action. Nope it's more of a game for younger kids. I won't say it's got a terrible story, but it's definitely not the strongest plot ever.
Gameplay: The gameplay is mostly 2D Platforming. I say mostly because you could interact with your environment which was in 3D. They termed it 2.5D at the time, and I suppose that term works now. Klanoa's main form of attack is his Wind Bullet ability which lets him toss enemies around or use them to toss himself around. It's all based off concepts tied to the wind, which was to me at the time pretty interesting. Frankly I'm kind of itching to see if I can find a ROM of it, but I doubt I have the time to indulge in that wish.
Characters: The characters are okay, and while not very deep they aren't super flat like any character from a Twilight novel.
Art: The art has aged poorly due to the use of 3D. If they had kept it purely 2D it probably would've aged much better.
Music: I don't remember any of it, sorry.
Overall: Give this a spin if you get the chance, it's pretty good.
For those who like: Platformers, Interesting Gameplay Mechanics, A Main Character That isn't a Plumber.
Tagged 2.5D, 2D, 3D, Action, Adventure, Drama, Klanoa, Klanoa Series, Klanoa: Door to Phantomile, Namco, Platforming, PlayStation, Retro Game Friday, Retro Game Reviews, Retro Games, Reviews, Sony, Video Game Reviews, Video Games
Retro Game Friday: Mega Man Legends
This week for Retro Game Friday I'm covering a game I loved as a kid. It's Mega Man Legends!
Plot Synopsis: The Legends series takes place on a flooded Earth. Because of the flooding, only a few sparse islands exist and energy sources are rare. In order to satisfy this increasing demand for energy to power up machinery, quantum refractors found in ancient ruins are used. These refractors are valuable; they serve as an energy source, and their shards are used as currency. However, the main goal of every person is to find the Mother Lode, an item of supposed infinite power that can fill the need for the energy in one swoop. Those who try to excavate these ruins are called "Diggers" ("Digouters" in the Japanese version). The protagonist of the game is Mega Man Volnutt, a Digger living in a ship called Flutter. He lives there alongside Roll Caskett, his Spotter who is searching for her missing father; Roll's grandfather, and Data, a mysterious monkey that talks in gibberish only Mega Man himself can understand.
Plot: The plot isn't super serious, but it's not bad either. I enjoyed it immensely as a kid. The gameplay though was what made the game.
Gameplay: This was the series first venture in 3D and it did an amazing job, and played a lot like a Zelda game. The game was fun, and even let you do random things like kicking cans into trash cans.
Art: The art hasn't aged well, but it doesn't really matter as the gameplay is still incredibly solid!
Music: The music was fun, but I don't remember anything more than that.
Overall: This is a great game and since it's being released in four days for the PS Vita and PS3 for only $10 you should go buy it if you are interested.
For those who like: Mega Man, Action, Adventure, Solid Gameplay, Decent Art, Good Music, Great Plot.
Tagged 3D, Action, Adventure, Capcom, Legend of Zelda, Mega Man, Mega Man 64, Mega Man Legends, Nintendo 64, PlayStation, Retro Game Friday, Retro Game Reviews, Retro Games, Reviews, Rockman DASH, Video Game Reviews, Video Games

redpajama_set_name: RedPajamaCommonCrawl


text:
Saffron Walden News
Uttlesford News
Saffron Walden Reporter > News
Essex town's parking debate begins
Daniel Barden
Published: 7:07 AM July 15, 2010 Updated: 6:42 PM November 1, 2020
CONCERNS that parking problems are driving customers away from Thaxted have prompted talks between traders and the parish council.
Thaxted Traders Guild approached the council following the introduction of a number of traffic initiatives which they feel are making life difficult for both residents and employees.
The council has responded by moving to improve its communications with the traders by expanding the remit of its market committee.
The council sub committee, which is made up of councillors and traders, was formed in 2007 to save the town's ailing market. It will now also serve as an open forum to provide traders with a platform to express their views about parking, and future parking policies, in the town.
Although the committee cannot make decisions, chairman of the Traders Guild, Will Brazier, hailed the latest development as a "step in the right direction".
"We welcome the way the council is prepared to listen and consider the viewpoints of traders," he said.
The Traders Guild has highlighted the building of the pull-outs and extension of double yellow lines in Town Street as evidence that the council has perhaps not always listened to their concerns.
1 Covid survival rates in Essex are among worst in country
2 Two Covid swab kit sites open in Uttlesford
3 Anti flooding solutions being created for outside Newport
4 Essex County Council to discuss council tax increase of up to £40
5 Man dies in 'unexplained' house fire
6 Widespread flooding leads to busiest day for Essex firefighters
7 Stations benefit from funding
8 Campaign seeks free products in Uttlesford's public buildings
9 Surgeon wins top award for hip research
10 Law firm gains Customer Service Excellence award
But Mr Brazier believes that the trader's new stance in the market committee can provide a more effective link between the council and its parishioners.
"Issues surrounding high street parking are being raised by the residents who are using the shops. They are telling us that these changes have affected their ability to stop and shop," he said. "The council perhaps have realised they haven't got this line of communication – by listening to traders they are getting direct feedback from residents.
"Hopefully any future changes will be the ones that suit everybody."
Chairman of the council's market committee, Terry Frostick, said its new make-up would further encourage better communications between the traders and the council.
"The market committee has proved very effective and it was the natural progression to widen the remit," he said.
"It will look at all the issues affecting trade which includes parking, but I will not let it get bogged down by just focusing on yellow lines and pull outs. Everyone will go in with an open mind and it will be a good forum for discussion.
"As a council we are trying to engage the community and give local empowerment."
The first meeting of the new-look market committee is due to be held in September.
WHAT DO YOU THINK? E-mail us at editor@saffronwalden-reporter.co.uk
Essex | Updated
Residents, the RAF and Stansted Airport react to sonic boom
Andra Maciuca
Essex County Fire and Rescue Service
Fire Service door to door visits after fatal fire
Extra money available to help Covid positive Essex residents to...
Team Laptop launches to support children's learning
Louise Dunderdale


Fully Integrated Lightweight Products; with the aim of offering even lighter housings and covers for electronic portable devices such as laptops, tablets or smartphones, Cross Composite produces innovativeand lighweight electronic components with a perfect surface finish and completely integrated sub-functions such as clips, cooling vents or fixation spots and thus maintaining cradle to cradle recyclability of the part. Especially for avionic housings for aerospace and space applications, where there is particular demand for lighter products, Cross Composite technologies provide the most value added.
Electromagnetic Shielding Included; Cross Composite materials have electromagnetic shielding inherently included. Additional conductive coatings known from common plastic parts are avoided. Thus, production becomes streamlined, integrated, and cost-effective.
Neglectable Thermal Expansion; Automated production guarantees the quality and repeatability of the part. The use of carbon reinforcing fibres will also reduce the coefficient of thermal elongation, which can reduce loads within the system, especially with LCD displays.
Excellent Vibration Damping; Thermoplastic composite materials provide unique damping properties compared to metallic materials or even duroplastic composites.
Chemical Corrosion Resistance: Most of the Cross Composite material portfolio offers suitable solutions against aggressive chemical corrosion. Maintenance is minimized and costs are optimized using thermoplastic composites.


text:
Aulum-Haderup Kommune i Ringkøbing Amt blev dannet ved kommunalreformen i 1970. Ved strukturreformen i 2007 blev den indlemmet i Herning Kommune sammen med Trehøje Kommune og Aaskov Kommune.

Tidligere kommuner
Aulum-Haderup Kommune blev dannet ved sammenlægning af 3 sognekommuner:

Aulum-Haderup Kommune afgav dog 2 ejerlav og dele af et tredje i Grove Sogn til Karup Kommune.

Sogne
Aulum-Haderup Kommune bestod af følgende sogne, alle fra Ginding Herred undtagen Aulum Sogn, der var fra Hammerum Herred:
 Aulum Sogn
 Grove Sogn
 Haderup Sogn
 Hodsager Sogn

Borgmestre

Rådhus
Aulum-Haderup Kommunes rådhus på Markedspladsen 1 i Aulum blev bygget sammen med et kulturhus. Nu står der "Biblioteket" på portalen, og i november 2015 blev den gamle jernbanestation indviet som byens nye forenings- og kulturhus.

Noter

Kommuner i Danmark (1970-2006)
Herning Kommune
Kommune

redpajama_set_name: RedPajamaWikipedia


Jack and Jill toothpaste is 100% safe for young children – especially because they have a tendency to swallow it! All Jack and Jill packaging is designed to be appealing to children and is cute enough that parents won't mind them sitting on their bathroom vanity.
Jack N' Jill puts Organic Calendula into their toothpaste because they believe its natural healing and powerful anti-inflammatory properties are good for young teeth and gums. Jack N' Jill's Calendula Officinalis Extract is Certified Organic & Biodynamic by NASAA. It is prepared exclusively for Jack N' Jill Kids in the pristine Adelaide Hills of South Australia.
We have formulated our toothpaste to work well cleaning young teeth, and to be full of only natural ingredients. Good toothpaste is hard to make, so we set out to make toothpaste without noxious chemicals.


The Korea International Trade Association said yesterday that it will renovate COEX Mall in a bid to transform the 12-year-old facility into a state-of-the-art shopping mall with a modern look.
A total of 180 billion won ($156 million) will be spent for a renovation that is scheduled to start at the end of this year and to be completed by November 2014.
KITA said renovation is unavoidable as subway line No. 9 is expected to open COEX station in 2014 and it needs to find ways to smartly link passenger paths of the new station with line No. 2's Samseong station.
To minimize inconvenience of visitors and store owners, KITA will gradually renovate the facilities by dividing renovation into four parts.
When completed, COEX Mall will be 173,025 square meter of space from its current 152,116 square meters.
COEX Mall is located in Samseong-dong, southern Seoul. Its COEX Convention & Exhibition Center was used for hosting the G-20 Seoul Summit and Seoul Nuclear Security Summit.


We caught up with Nathan Glendinning ahead of his Random Acts film The Boneyard, screening on Channel 4 on Thursday 17 November 2016 at midnight.
In The Boneyard Nathan creates a eulogy for the industrial past of his home town of South Shields, combining audio from research trips with newly shot sequences that explore the relationship between the past and present.
Nathan is a recent graduate of the University of the Creative Arts where he studied Film Production. He currently works as a runner in the television industry as well as writing and directing his own independent films.
Why did you apply to Random Acts?
I had recently graduated from university and had a lot of creative ideas flowing in my head but lacked the access to make them come to life, Random Acts seemed like the best way to sharpen the skills I'd already made while making new ones.
How did you hear about Random Acts?
I was passed on the information from a friend who knew I had an idea for a short film. I had watched Random Acts previously and always admired the broad and varied work of talented individuals.
I returned to the North after three years living away for university. On my return I needed to find something new, something that inspired me. I realised there was a rich history in the town of South Shields that I had never looked at before – and after hours of hiding away in archives in the local library I found this rich history of the shipyard industry and its effects on the River Tyne. All of this has gone now and I wanted to find out why.
Tell us a bit more about how you brought your idea to life.
I had studied local history for a long time, and thanks to the guidance of Tyneside Cinema I was able to look at my research from other perspectives. I decided to take an alternative route to retell this history: after careful selection, we travelled around interviewing those that had worked in the shipyards, collecting everything they had to say. In each conversation I always tried to slowly direct it to the darker, more personal aspects of their past.
Tell us a bit more about the whole Random Acts experience. Did everything go as you expected or were there unexpected aspects?
I intended to go forward with a nostalgic memorial as my film, however, throughout the vigorous exercises and mentoring, I came to realise this was an overdone format which didn't really say what I intended. I realised that what really shook me was the stories I would hear about the injuries, mutilations and deaths of men that worked on the shipyards. I realized these men were carrying a burden, a story which we needed to remember them by.
Random Acts gives you access to freely be creative, but also pushes you to become a stronger artist and create a piece of work even better than you intended in a friendly environment.
What would you say to someone thinking about applying this time around?
Be strong with your idea, and make sure it is something you are passionate about, but don't be afraid to spin the idea on its head and go towards an unknown route which could make a stronger film.


text:
Hudson Valley Kitchen Design's website wins Pinnacle Award
Hudson Valley Kitchen Design has earned a 2014 Pinnacle Award for Best Company Website from the Hudson Valley Builders & Remodelers Association.
"Our goal is always to put our clients and prospects first, so offering a user-friendly, aesthetically pleasing website was essential when we were considering redevelopment," said Angelo Ferrante, president of Hudson Valley Kitchen Design. "We're pleased to have received such prestigious recognition for our efforts."
Hudson Valley Kitchen Design is a family-owned company that has been serving the Hudson Valley for over 30 years, and provides complete kitchen and bath design, installation, and remodeling services.
The Pinnacle Awards recognize outstanding performance by Hudson Valley building industry professionals. Winning entries are selected by a panel of judges from neighboring building associations. Entries are evaluated based on an objective scale derived from the expertise of the judges.
HudsonValleyKitchens.com, developed by Hudson Valley-based agency Media Solstice Marketing & PR, provides the necessary functionality and structure to develop an ongoing Search Engine Optimization program, a digital marketing tactic employed to gain visibility in search engines like Google. As a result, the website has already had a year-over-year increase in visitors searching online for the products and services offered by Hudson Valley Kitchen Design.
"As we went through the development process, we made sure that the site was fully responsive so that we could accommodate those visiting from tablets and smartphones," said Jessica Gardner, Media Solstice Marketing & PR president. "It's an essential component of websites today when you consider that 60 percent of Internet traffic comes from mobile devices."


This week I created some pages of painted textures to use in my digital illustrations. I use these as subtle ways to bring texture and movement into my illustrations. I encourage anyone to try this. Pull out the paint supplies, grab a beer, and get messy! It's a fun way to loosen up, get creative and add something unique to your work.


All businesses need a reliable wireless network in order to ensure that everything is running as smoothly as possible. A good wireless network will help you reach your goals more effectively, by increasing productivity and helping you efficiently share information.
Many SMBs are trying to force their old networks to perform advanced tasks that can only be done with newer technology. This is usually due to the fact that people are unaware of the capabilities of their existing network and how much an updated network can benefit them.
Here are just a few reasons why you need a better infrastructure design for your company!
By allowing your employees to roam without losing connectivity, it helps the whole team work more cohesively. They can then move around in the office if they need a change of scenery or need to take their laptops into a meeting.
If you're in the business of customer service, a solid wireless network will help you connect with the people who need you the most. Having a responsible network helps you provide better customer service by giving you the ability to respond quickly to any concerns.
A good wireless network will help your employees to connect, even in difficult areas. By adding wireless access points in hard-to-reach places, you're helping your company stay on track. Plus, a strong wireless network will allow all your employees to stay on the network, even with many devices connected.
Interested in updating your wireless network? ProLink Communications, Inc. has a reputation of providing quality cabling and communication services in Nashville, TN, and surrounding areas, while delivering the most cost-effective solutions for your business. Give us a call at 615-236-0051 and we can discuss the best options for your business!


Beautiful mountain cabin in Young Harris.2,767 sq.ft. Very well maintained 3 bed 2 1/2 bath. Spacious living room and kitchen. Stainless/black appliances. Real wood burning rock fireplace. Master on main. Master bath has tile floors,tile glass shower. Double vanity. Jetted tub. Laundry on main. Upstairs has 2 large bedrooms, one w/ walk-in closet, the other has a large closet. Upstairs bath has tile floors with lots of room, single vanity. Basement is unfinished, stubbed for bath and ready to make it what you wish. 2 entrances to home. Endless possibilities! Close to the city of Hiawassee, Blairsville, Hayseville,to all the shopping and restaurants and local attractions.


text:
Breathless è un singolo del cantante pop britannico Shayne Ward, pubblicato il 19 novembre 2007 dall'etichetta discografica Sony BMG.

Il singolo è stato estratto dal secondo album del cantante, Breathless.

Tracce

Classifiche

Note

Collegamenti esterni


text:
OAB News
Amber Alert – Testing Schedules
EAS: Monitoring Assignments
Resume Uploader
2021 Convention Information
2018 Convention Photos
Advertising Issues
Awards Entry Forms
OAB Hall of Fame
OAB Hall of Fame Members
Outstanding Achievement Awards
Scholarships, Assistance, & Faculty Fellowships
Scholarship and Fellowship Recipients
Linda Cavanaugh
Inducted 2000
As a journalist, Linda Cavanaugh has brought to television news reporting a standard of excellence unparalleled in Oklahoma. Her reporting has reflected a strong sense of responsibility to the viewers and their families in providing news and information relevant to their everyday lives. Her work reflects the strong bond of trust she develops with her subjects.
A University of Oklahoma Phi Beta Kappa graduate, Linda served a brief tenure in the magazine and newspaper fields before entering television. At age 22, she joined Channel 4 as an unpaid intern, later moving to Channel 5 as a reporter and morning anchor. After living in Virginia for 2 years, Linda returned to Oklahoma in 1977 and began a long and illustrious career at Channel 4. In 1979, she became the first female co-anchor of the weekday nightly news.
Oklahoma's most honored broadcast journalist; Linda has received over 30 national awards and twice as many state and regional awards in addition to 11 Emmys from the Heartland chapter of NATAS. In 1999, she was inducted into the Oklahoma journalism Hall of Fame.
Linda was the first journalist allowed to photograph ancient Indian rituals that have been restricted to tribal members only. Her resulting at 12-part series, "Strangers In Their Own Land", brought a sense of understanding and pride to Oklahoma's 37 Indian tribes. The series received the Sigma Delta Chi National Distinguished Service Award and 10 other national awards. Linda was the first non-network journalist from the United States allowed into the Soviet Union under the country's new "glasnost" in 1988. The documentary,"From red soil to Red Square", received the George Washington University Weintal Prize for diplomatic reporting. She was the first American journalist allowed in the infamous Vietnam Hanoi Hilton prisoner of war camp. "Remember The Dragon" told the story of a war many would like to forget. The much-honored "Tapestry" relived the devastating bombing of the Alfred P Murrah building on April 19th, 1995. "Marijas Miracle," "A Time to Die" and "Orphan Train" are other projects representative of her exemplary work.
The work of Linda Cavanaugh represents the ultimate in television news reporting, the work of a warm, compassionate and dedicated person with a great love for her art form, television news. Linda Cavanaugh is Oklahoma's first lady of Journalism - a title unchallenged.
Call for Entries: 2020 OAB Awards
Preparing for Radio License Renewal: Link to Webinar Recording
KidVid Reports
Quarterly Issues/Programs Lists
C-band Earth Station Lump Sum Reimbursement
Sport's Anchor
Denison. TX
KTEN Media
Director of Sports
News Topical Producer
News on 6 - KOTV
iHeart Media
Radio Producer PT
Griffin Radio
© 2004-2020 Oklahoma Association of Broadcasters
Site managed by PixelMongers LLC.


Hi my sister Chloe was 19 when she died. She'd been driving me to the cinema, we were going to watch "if I stay"....we never made it. Chloe's car was hit by a lorry. It was Chloe's mistake she'd taken a wrong turn into a one way road....anyway the lorry hit us....I woke up later in ICU without Chloe. Since that day, exactly a month today I haven't made a sound. The doctors say I'm mute...I'm not sure. All I know is I should've died with Chloe but I didn't....I'm glad and angry about that.
Sorry it's taken so long for me to get back to you but I've had exams and doctors appointments and then I forgot my log in! I'm still to scared to talk. The doctors are saying that because I'm so scared it'll be harder for me to learn to talk again.
I, too, am so, so sorry for the loss of your sister, Chloe. I can't imagine a more devastating experience than the one you described. May your heart be filled with the joy and certainty that she is watching over you now and will always be right by your side when you need her. Chloe isn't gone ... she's just in a different place right now ... and it was her time. We have to accept the wisdom of God and know that she is with Him now, perhaps because she already had learned enough on this planet.
When I was in my early teens, I was also traumatized enough by a specific event that it left me unable to use my voice. I withdrew into a world that I never thought anyone would ever understand. I was afraid to speak because I was sure that if I did, all hell would break loose.
I'm glad that you found this forum and are able to write about your feelings. That is the first step to healing, I think.