OSDN Git Service

Merge branch 'master' of git.osdn.net:/gitroot/eos/zephyr
[eos/zephyr.git] / front-end / dist / bundle.js
index 8960b26..afff1f3 100755 (executable)
        __webpack_require__(20);
        __webpack_require__(21);
        __webpack_require__(22);
+<<<<<<< HEAD
        __webpack_require__(23);
        __webpack_require__(24);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
 
 /***/ },
 
        /**
         * State-based routing for AngularJS
+<<<<<<< HEAD
         * @version v0.2.18
+=======
+        * @version v0.2.15
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * @link http://angular-ui.github.com/
         * @license MIT License, http://www.opensource.org/licenses/MIT
         */
            isArray = angular.isArray,
            forEach = angular.forEach,
            extend = angular.extend,
+<<<<<<< HEAD
            copy = angular.copy,
            toJson = angular.toJson;
+=======
+           copy = angular.copy;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
        function inherit(parent, extra) {
          return extend(new (extend(function() {}, { prototype: parent }))(), extra);
          var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];
 
          for (var i in parents) {
+<<<<<<< HEAD
            if (!parents[i] || !parents[i].params) continue;
+=======
+           if (!parents[i].params) continue;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            parentParams = objectKeys(parents[i].params);
            if (!parentParams.length) continue;
 
           * propagated immediately. Once the `$resolve` promise has been rejected, no 
           * further invocables will be called.
           * 
+<<<<<<< HEAD
           * Cyclic dependencies between invocables are not permitted and will cause `$resolve`
+=======
+          * Cyclic dependencies between invocables are not permitted and will caues `$resolve`
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
           * to throw an error. As a special case, an injectable can depend on a parameter 
           * with the same name as the injectable, which will be fulfilled from the `parent` 
           * injectable of the same name. This allows inherited values to be decorated. 
          // The regular expression is somewhat complicated due to the need to allow curly braces
          // inside the regular expression. The placeholder regexp breaks down as follows:
          //    ([:*])([\w\[\]]+)              - classic placeholder ($1 / $2) (search version has - for snake-case)
+<<<<<<< HEAD
          //    \{([\w\[\]]+)(?:\:\s*( ... ))?\}  - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case
+=======
+         //    \{([\w\[\]]+)(?:\:( ... ))?\}  - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          //    (?: ... | ... | ... )+         - the regexp consists of any number of atoms, an atom being either
          //    [^{}\\]+                       - anything other than curly braces or backslash
          //    \\.                            - a backslash escape
          //    \{(?:[^{}\\]+|\\.)*\}          - a matched set of curly braces containing other atoms
+<<<<<<< HEAD
          var placeholder       = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
              searchPlaceholder = /([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
+=======
+         var placeholder       = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
+             searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              compiled = '^', last = 0, m,
              segments = this.segments = [],
              parentParams = parentMatcher ? parentMatcher.params : {},
          function addParameter(id, type, config, location) {
            paramNames.push(id);
            if (parentParams[id]) return parentParams[id];
+<<<<<<< HEAD
            if (!/^\w+([-.]+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'");
+=======
+           if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'");
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'");
            params[id] = new $$UMFP.Param(id, type, config, location);
            return params[id];
            if (!pattern) return result;
            switch(squash) {
              case false: surroundPattern = ['(', ')' + (optional ? "?" : "")]; break;
+<<<<<<< HEAD
              case true:
                result = result.replace(/\/$/, '');
                surroundPattern = ['(?:\/(', ')|\/)?'];
              break;
+=======
+             case true:  surroundPattern = ['?(', ')?']; break;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              default:    surroundPattern = ['(' + squash + "|", ')?']; break;
            }
            return result + surroundPattern[0] + pattern + surroundPattern[1];
            cfg         = config.params[id];
            segment     = pattern.substring(last, m.index);
            regexp      = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null);
+<<<<<<< HEAD
 
            if (regexp) {
              type      = $$UMFP.type(regexp) || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) });
            }
 
+=======
+           type        = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            return {
              id: id, regexp: regexp, segment: segment, type: type, cfg: cfg
            };
            return map(allReversed, unquoteDashes).reverse();
          }
 
+<<<<<<< HEAD
          var param, paramVal;
          for (i = 0; i < nPath; i++) {
            paramName = paramNames[i];
            }
            if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);
            if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);
+=======
+         for (i = 0; i < nPath; i++) {
+           paramName = paramNames[i];
+           var param = this.params[paramName];
+           var paramVal = m[i+1];
+           // if the param value matches a pre-replace pair, replace the value before decoding.
+           for (j = 0; j < param.replace; j++) {
+             if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;
+           }
+           if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            values[paramName] = param.value(paramVal);
          }
          for (/**/; i < nTotal; i++) {
            paramName = paramNames[i];
            values[paramName] = this.params[paramName].value(searchParams[paramName]);
+<<<<<<< HEAD
            param = this.params[paramName];
            paramVal = searchParams[paramName];
            for (j = 0; j < param.replace.length; j++) {
            }
            if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);
            values[paramName] = param.value(paramVal);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
 
          return values;
 
        /**
         * @ngdoc function
+<<<<<<< HEAD
         * @name ui.router.util.type:UrlMatcher#validates
+=======
+        * @name ui.router.util.type:UrlMatcher#validate
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * @methodOf ui.router.util.type:UrlMatcher
         *
         * @description
 
            if (isPathParam) {
              var nextSegment = segments[i + 1];
+<<<<<<< HEAD
              var isFinalPathParam = i + 1 === nPath;
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              if (squash === false) {
                if (encoded != null) {
                  if (isArray(encoded)) {
              } else if (isString(squash)) {
                result += squash + nextSegment;
              }
+<<<<<<< HEAD
 
              if (isFinalPathParam && param.squash === true && result.slice(-1) === '/') result = result.slice(0, -1);
            } else {
              if (encoded == null || (isDefaultValue && squash !== false)) continue;
              if (!isArray(encoded)) encoded = [ encoded ];
              if (encoded.length === 0) continue;
+=======
+           } else {
+             if (encoded == null || (isDefaultValue && squash !== false)) continue;
+             if (!isArray(encoded)) encoded = [ encoded ];
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              encoded = map(encoded, encodeURIComponent).join('&' + name + '=');
              result += (search ? '&' : '?') + (name + '=' + encoded);
              search = true;
            // Wraps type (.is/.encode/.decode) functions to operate on each value of an array
            function arrayHandler(callback, allTruthyMode) {
              return function handleArray(val) {
+<<<<<<< HEAD
                if (isArray(val) && val.length === 0) return val;
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                val = arrayWrap(val);
                var result = map(val, callback);
                if (allTruthyMode === true)
 
          var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false;
 
+<<<<<<< HEAD
          // Use tildes to pre-encode slashes.
          // If the slashes are simply URLEncoded, the browser can choose to pre-decode them,
          // and bidirectional encoding/decoding fails.
 
          var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {
            "string": {
+=======
+         function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; }
+         function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; }
+
+         var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {
+           string: {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              encode: valToString,
              decode: valFromString,
              // TODO: in 1.0, make string .is() return false if value is undefined/null by default.
              is: function(val) { return val == null || !isDefined(val) || typeof val === "string"; },
              pattern: /[^/]*/
            },
+<<<<<<< HEAD
            "int": {
+=======
+           int: {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              encode: valToString,
              decode: function(val) { return parseInt(val, 10); },
              is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; },
              pattern: /\d+/
            },
+<<<<<<< HEAD
            "bool": {
+=======
+           bool: {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              encode: function(val) { return val ? 1 : 0; },
              decode: function(val) { return parseInt(val, 10) !== 0; },
              is: function(val) { return val === true || val === false; },
              pattern: /0|1/
            },
+<<<<<<< HEAD
            "date": {
+=======
+           date: {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              encode: function (val) {
                if (!this.is(val))
                  return undefined;
              pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,
              capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/
            },
+<<<<<<< HEAD
            "json": {
+=======
+           json: {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              encode: angular.toJson,
              decode: angular.fromJson,
              is: angular.isObject,
              equals: angular.equals,
              pattern: /[^/]*/
            },
+<<<<<<< HEAD
            "any": { // does not encode/decode
+=======
+           any: { // does not encode/decode
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              encode: angular.identity,
              decode: angular.identity,
              equals: angular.equals,
              if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations.");
              if (urlType) return urlType;
              if (!config.type) return (location === "config" ? $types.any : $types.string);
+<<<<<<< HEAD
 
              if (angular.isString(config.type))
                return $types[config.type];
              if (config.type instanceof Type)
                return config.type;
              return new Type(config.type);
+=======
+             return config.type instanceof Type ? config.type : new Type(config.type);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
 
            // array config: param name (param[]) overrides default settings.  explicit config overrides param name.
           * });
           * </pre>
           *
+<<<<<<< HEAD
           * @param {function} rule Handler function that takes `$injector` and `$location`
+=======
+          * @param {object} rule Handler function that takes `$injector` and `$location`
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
           * services as arguments. You can use them to return a valid path as a string.
           *
           * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance
           * });
           * </pre>
           *
+<<<<<<< HEAD
           * @param {string|function} rule The url path you want to redirect to or a function 
+=======
+          * @param {string|object} rule The url path you want to redirect to or a function 
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
           * rule that returns the url path. The function version is passed two params: 
           * `$injector` and `$location` services, and must return a url string.
           *
           * @methodOf ui.router.router.$urlRouterProvider
           *
           * @description
+<<<<<<< HEAD
           * Registers a handler for a given url matching. 
           * 
           * If the handler is a string, it is
+=======
+          * Registers a handler for a given url matching. if handle is a string, it is
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
           * treated as a redirect, and is interpolated according to the syntax of match
           * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise).
           *
           * </pre>
           *
           * @param {string|object} what The incoming path that you want to redirect.
+<<<<<<< HEAD
           * @param {string|function} handler The path you want to redirect your user to.
+=======
+          * @param {string|object} handler The path you want to redirect your user to.
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
           */
          this.when = function (what, handler) {
            var redirect, handlerIsString = isString(handler);
           *
           */
          this.$get = $get;
+<<<<<<< HEAD
          $get.$inject = ['$location', '$rootScope', '$injector', '$browser', '$sniffer'];
          function $get(   $location,   $rootScope,   $injector,   $browser,   $sniffer) {
+=======
+         $get.$inject = ['$location', '$rootScope', '$injector', '$browser'];
+         function $get(   $location,   $rootScope,   $injector,   $browser) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
            var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl;
 
                if (angular.isObject(isHtml5)) {
                  isHtml5 = isHtml5.enabled;
                }
+<<<<<<< HEAD
 
                isHtml5 = isHtml5 && $sniffer.history;
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                
                var url = urlMatcher.format(params);
                options = options || {};
            // inherit 'data' from parent and override by own values (if any)
            data: function(state) {
              if (state.parent && state.parent.data) {
+<<<<<<< HEAD
                state.data = state.self.data = inherit(state.parent.data, state.data);
+=======
+               state.data = state.self.data = extend({}, state.parent.data, state.data);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              }
              return state.data;
            },
 
            // Derive parameters for this state and ensure they're a super-set of parent's parameters
            params: function(state) {
+<<<<<<< HEAD
              var ownParams = pick(state.ownParams, state.ownParams.$$keys());
              return state.parent && state.parent.params ? extend(state.parent.params.$$new(), ownParams) : new $$UMFP.ParamSet();
+=======
+             return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            },
 
            // If there is no explicit multi-view configuration, make one up so we don't have
 
            var name = state.name;
            if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name");
+<<<<<<< HEAD
            if (states.hasOwnProperty(name)) throw new Error("State '" + name + "' is already defined");
+=======
+           if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined");
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
            // Get parent name
            var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))
           *
           * Callback function for when a state is entered. Good way
           *   to trigger an action or dispatch an event, such as opening a dialog.
+<<<<<<< HEAD
           * If minifying your scripts, make sure to explicitly annotate this function,
+=======
+          * If minifying your scripts, make sure to explictly annotate this function,
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
           * because it won't be automatically annotated by your build tools.
           *
           * <pre>onEnter: function(MyService, $stateParams) {
           *
           * Callback function for when a state is exited. Good way to
           *   trigger an action or dispatch an event, such as opening a dialog.
+<<<<<<< HEAD
           * If minifying your scripts, make sure to explicitly annotate this function,
+=======
+          * If minifying your scripts, make sure to explictly annotate this function,
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
           * because it won't be automatically annotated by your build tools.
           *
           * <pre>onExit: function(MyService, $stateParams) {
             *
             * @param {object=} params A map of the parameters that will be sent to the state, 
             * will populate $stateParams. Any parameters that are not specified will be inherited from currently 
+<<<<<<< HEAD
             * defined parameters. Only parameters specified in the state definition can be overridden, new 
             * parameters will be ignored. This allows, for example, going to a sibling state that shares parameters
+=======
+            * defined parameters. This allows, for example, going to a sibling state that shares parameters
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
             * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.
             * transitioning to a sibling will get you the parameters for all parents, transitioning to a child
             * will get you all current parameters, etc.
             * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), 
             *    defines which state to be relative from.
             * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.
+<<<<<<< HEAD
             * - **`reload`** (v0.2.5) - {boolean=false|string|object}, If `true` will force transition even if no state or params
             *    have changed.  It will reload the resolves and views of the current state and parent states.
             *    If `reload` is a string (or state object), the state object is fetched (by name, or object reference); and \
             *    the transition reloads the resolves and views for that matched state, and all its children states.
+=======
+            * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params 
+            *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd
+            *    use this when you want to force a reload when *everything* is the same, including search params.
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
             *
             * @returns {promise} A promise representing the state of the new transition.
             *
                if (hash) toParams['#'] = hash;
                $state.params = toParams;
                copy($state.params, $stateParams);
+<<<<<<< HEAD
                copy(filterByKeys(to.params.$$keys(), $stateParams), to.locals.globals.$stateParams);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                if (options.location && to.navigable && to.navigable.url) {
                  $urlRouter.push(to.navigable.url, toParams, {
                    $$avoidResync: true, replace: options.location === 'replace'
 
              // Filter parameters before we pass them to event handlers etc.
              toParams = filterByKeys(to.params.$$keys(), toParams || {});
+<<<<<<< HEAD
              
              // Re-add the saved hash before we start returning things or broadcasting $stateChangeStart
              if (hash) toParams['#'] = hash;
              
+=======
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              // Broadcast start event and cancel the transition if requested
              if (options.notify) {
                /**
                 * })
                 * </pre>
                 */
+<<<<<<< HEAD
                if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams, options).defaultPrevented) {
                  $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
                  //Don't update and resync url if there's been a new transition started. see issue #2238, #600
                  if ($state.transition == null) $urlRouter.update();
+=======
+               if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) {
+                 $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
+                 $urlRouter.update();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  return TransitionPrevented;
                }
              }
                  }
                }
 
+<<<<<<< HEAD
+=======
+               // Re-add the saved hash before we start returning things
+               if (hash) toParams['#'] = hash;
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                // Run it again, to catch any transitions in callbacks
                if ($state.transition !== transition) return TransitionSuperseded;
 
        }
 
        angular.module('ui.router.state')
+<<<<<<< HEAD
          .factory('$stateParams', function () { return {}; })
+=======
+         .value('$stateParams', {})
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          .provider('$state', $StateProvider);
 
 
                if (options.view) {
                  result = $templateFactory.fromConfig(options.view, options.params, options.locals);
                }
+<<<<<<< HEAD
+=======
+               if (result && options.notify) {
+               /**
+                * @ngdoc event
+                * @name ui.router.state.$state#$viewContentLoading
+                * @eventOf ui.router.state.$view
+                * @eventType broadcast on root scope
+                * @description
+                *
+                * Fired once the view **begins loading**, *before* the DOM is rendered.
+                *
+                * @param {Object} event Event object.
+                * @param {Object} viewConfig The view config properties (template, controller, etc).
+                *
+                * @example
+                *
+                * <pre>
+                * $scope.$on('$viewContentLoading',
+                * function(event, viewConfig){
+                *     // Access to all the view config properties.
+                *     // and one special property 'targetView'
+                *     // viewConfig.targetView
+                * });
+                * </pre>
+                */
+                 $rootScope.$broadcast('$viewContentLoading', options);
+               }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                return result;
              }
            };
 
        angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);
 
+<<<<<<< HEAD
        var ngMajorVer = angular.version.major;
        var ngMinorVer = angular.version.minor;
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        /**
         * @ngdoc directive
         * @name ui.router.state.directive:ui-view
         * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you
         * scroll ui-view elements into view when they are populated during a state activation.
         *
+<<<<<<< HEAD
         * @param {string=} noanimation If truthy, the non-animated renderer will be selected (no animations
         * will be applied to the ui-view)
         *
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)
         * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*
         *
          // Returns a set of DOM manipulation functions based on which Angular version
          // it should use
          function getRenderer(attrs, scope) {
+<<<<<<< HEAD
            var statics = {
              enter: function (element, target, cb) { target.after(element); cb(); },
              leave: function (element, cb) { element.remove(); cb(); }
                  } else {
                    $animate.leave(element, cb);
                  }
+=======
+           var statics = function() {
+             return {
+               enter: function (element, target, cb) { target.after(element); cb(); },
+               leave: function (element, cb) { element.remove(); cb(); }
+             };
+           };
+
+           if ($animate) {
+             return {
+               enter: function(element, target, cb) {
+                 var promise = $animate.enter(element, null, target, cb);
+                 if (promise && promise.then) promise.then(cb);
+               },
+               leave: function(element, cb) {
+                 var promise = $animate.leave(element, cb);
+                 if (promise && promise.then) promise.then(cb);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
              };
            }
 
+<<<<<<< HEAD
            // ng 1.1.5
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            if ($animator) {
              var animate = $animator && $animator(scope, attrs);
 
              };
            }
 
+<<<<<<< HEAD
            return statics;
+=======
+           return statics();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
 
          var directive = {
                scope.$on('$stateChangeSuccess', function() {
                  updateView(false);
                });
+<<<<<<< HEAD
+=======
+               scope.$on('$viewContentLoading', function() {
+                 updateView(false);
+               });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                updateView(true);
 
                function cleanupLastView() {
+<<<<<<< HEAD
                  var _previousEl = previousEl;
                  var _currentScope = currentScope;
 
                    if (_currentScope) {
                      _currentScope.$destroy();
                    }
+=======
+                 if (previousEl) {
+                   previousEl.remove();
+                   previousEl = null;
+                 }
+
+                 if (currentScope) {
+                   currentScope.$destroy();
+                   currentScope = null;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  }
 
                  if (currentEl) {
                    renderer.leave(currentEl, function() {
+<<<<<<< HEAD
                      cleanOld();
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                      previousEl = null;
                    });
 
                    previousEl = currentEl;
+<<<<<<< HEAD
                  } else {
                    cleanOld();
                    previousEl = null;
 
                  currentEl = null;
                  currentScope = null;
+=======
+                   currentEl = null;
+                 }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
 
                function updateView(firstTime) {
                      name            = getUiViewName(scope, attrs, $element, $interpolate),
                      previousLocals  = name && $state.$current && $state.$current.locals[name];
 
+<<<<<<< HEAD
                  if (!firstTime && previousLocals === latestLocals || scope._willBeDestroyed) return; // nothing to do
                  newScope = scope.$new();
                  latestLocals = $state.$current.locals[name];
                   */
                  newScope.$emit('$viewContentLoading', name);
 
+=======
+                 if (!firstTime && previousLocals === latestLocals) return; // nothing to do
+                 newScope = scope.$new();
+                 latestLocals = $state.$current.locals[name];
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  var clone = $transclude(newScope, function(clone) {
                    renderer.enter(clone, $element, function onUiViewEnter() {
                      if(currentScope) {
                   * @name ui.router.state.directive:ui-view#$viewContentLoaded
                   * @eventOf ui.router.state.directive:ui-view
                   * @eventType emits on ui-view directive scope
+<<<<<<< HEAD
                   * @description
                   * Fired once the view is **loaded**, *after* the DOM is rendered.
                   *
                   * @param {string} viewName Name of the view.
                   */
                  currentScope.$emit('$viewContentLoaded', name);
+=======
+                  * @description           *
+                  * Fired once the view is **loaded**, *after* the DOM is rendered.
+                  *
+                  * @param {Object} event Event object.
+                  */
+                 currentScope.$emit('$viewContentLoaded');
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  currentScope.$eval(onloadExp);
                }
              };
          }
        }
 
+<<<<<<< HEAD
        function getTypeInfo(el) {
          // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
          var isSvg = Object.prototype.toString.call(el.prop('href')) === '[object SVGAnimatedString]';
          return { relative: stateContext(el) || $state.$current, inherit: true };
        }
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        /**
         * @ngdoc directive
         * @name ui.router.state.directive:ui-sref
         * @restrict A
         *
         * @description
+<<<<<<< HEAD
         * A directive that binds a link (`<a>` tag) to a state. If the state has an associated
         * URL, the directive will automatically generate & update the `href` attribute via
         * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking
         * You can also use relative state paths within ui-sref, just like the relative
         * paths passed to `$state.go()`. You just need to be aware that the path is relative
         * to the state that the link lives in, in other words the state that loaded the
+=======
+        * A directive that binds a link (`<a>` tag) to a state. If the state has an associated 
+        * URL, the directive will automatically generate & update the `href` attribute via 
+        * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking 
+        * the link will trigger a state transition with optional parameters. 
+        *
+        * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be 
+        * handled natively by the browser.
+        *
+        * You can also use relative state paths within ui-sref, just like the relative 
+        * paths passed to `$state.go()`. You just need to be aware that the path is relative
+        * to the state that the link lives in, in other words the state that loaded the 
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * template containing the link.
         *
         * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}
         * and `reload`.
         *
         * @example
+<<<<<<< HEAD
         * Here's an example of how you'd use ui-sref and how it would compile. If you have the
         * following template:
         * <pre>
         * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a> | <a ui-sref="{page: 2}">Next page</a>
         *
+=======
+        * Here's an example of how you'd use ui-sref and how it would compile. If you have the 
+        * following template:
+        * <pre>
+        * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a> | <a ui-sref="{page: 2}">Next page</a>
+        * 
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * <ul>
         *     <li ng-repeat="contact in contacts">
         *         <a ui-sref="contacts.detail({ id: contact.id })">{{ contact.name }}</a>
         *     </li>
         * </ul>
         * </pre>
+<<<<<<< HEAD
         *
         * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):
         * <pre>
         * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a> | <a href="#/contacts?page=2" ui-sref="{page: 2}">Next page</a>
         *
+=======
+        * 
+        * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):
+        * <pre>
+        * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a> | <a href="#/contacts?page=2" ui-sref="{page: 2}">Next page</a>
+        * 
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * <ul>
         *     <li ng-repeat="contact in contacts">
         *         <a href="#/contacts/1" ui-sref="contacts.detail({ id: contact.id })">Joe</a>
         */
        $StateRefDirective.$inject = ['$state', '$timeout'];
        function $StateRefDirective($state, $timeout) {
+<<<<<<< HEAD
+=======
+         var allowedOptions = ['location', 'inherit', 'reload', 'absolute'];
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          return {
            restrict: 'A',
            require: ['?^uiSrefActive', '?^uiSrefActiveEq'],
            link: function(scope, element, attrs, uiSrefActive) {
+<<<<<<< HEAD
              var ref    = parseStateRef(attrs.uiSref, $state.current.name);
              var def    = { state: ref.state, href: null, params: null };
              var type   = getTypeInfo(element);
 
              if (!type.clickable) return;
              element.bind("click", clickHook(element, $state, $timeout, type, function() { return def; }));
+=======
+             var ref = parseStateRef(attrs.uiSref, $state.current.name);
+             var params = null, url = null, base = stateContext(element) || $state.$current;
+             // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
+             var hrefKind = Object.prototype.toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
+                        'xlink:href' : 'href';
+             var newHref = null, isAnchor = element.prop("tagName").toUpperCase() === "A";
+             var isForm = element[0].nodeName === "FORM";
+             var attr = isForm ? "action" : hrefKind, nav = true;
+
+             var options = { relative: base, inherit: true };
+             var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};
+
+             angular.forEach(allowedOptions, function(option) {
+               if (option in optionsOverride) {
+                 options[option] = optionsOverride[option];
+               }
+             });
+
+             var update = function(newVal) {
+               if (newVal) params = angular.copy(newVal);
+               if (!nav) return;
+
+               newHref = $state.href(ref.state, params, options);
+
+               var activeDirective = uiSrefActive[1] || uiSrefActive[0];
+               if (activeDirective) {
+                 activeDirective.$$addStateInfo(ref.state, params);
+               }
+               if (newHref === null) {
+                 nav = false;
+                 return false;
+               }
+               attrs.$set(attr, newHref);
+             };
+
+             if (ref.paramExpr) {
+               scope.$watch(ref.paramExpr, function(newVal, oldVal) {
+                 if (newVal !== params) update(newVal);
+               }, true);
+               params = angular.copy(scope.$eval(ref.paramExpr));
+             }
+             update();
+
+             if (isForm) return;
+
+             element.bind("click", function(e) {
+               var button = e.which || e.button;
+               if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
+                 // HACK: This is to allow ng-clicks to be processed before the transition is initiated:
+                 var transition = $timeout(function() {
+                   $state.go(ref.state, params, options);
+                 });
+                 e.preventDefault();
+
+                 // if the state has no URL, ignore one preventDefault from the <a> directive.
+                 var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0;
+                 e.preventDefault = function() {
+                   if (ignorePreventDefaultCount-- <= 0)
+                     $timeout.cancel(transition);
+                 };
+               }
+             });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
        }
 
+<<<<<<< HEAD
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        /**
         * @ngdoc directive
         * @name ui.router.state.directive:ui-sref-active
         *   </li>
         * </ul>
         * </pre>
+<<<<<<< HEAD
         *
         * It is also possible to pass ui-sref-active an expression that evaluates
         * to an object hash, whose keys represent active class names and whose
         * When the current state is "admin.roles" the "active" class will be applied
         * to both the <div> and <a> elements. It is important to note that the state
         * names/globs passed to ui-sref-active shadow the state provided by ui-sref.
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         */
 
        /**
        function $StateRefActiveDirective($state, $stateParams, $interpolate) {
          return  {
            restrict: "A",
+<<<<<<< HEAD
            controller: ['$scope', '$element', '$attrs', '$timeout', function ($scope, $element, $attrs, $timeout) {
              var states = [], activeClasses = {}, activeEqClass, uiSrefActive;
+=======
+           controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {
+             var states = [], activeClass;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
              // There probably isn't much point in $observing this
              // uiSrefActive and uiSrefActiveEq share the same directive object with some
              // slight difference in logic routing
+<<<<<<< HEAD
              activeEqClass = $interpolate($attrs.uiSrefActiveEq || '', false)($scope);
 
              try {
              function exactMatch(state, params) { return $state.is(state.name, params); }
 
              update();
+=======
+             activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope);
+
+             // Allow uiSref to communicate with uiSrefActive[Equals]
+             this.$$addStateInfo = function (newState, newParams) {
+               var state = $state.get(newState, stateContext($element));
+
+               states.push({
+                 state: state || { name: newState },
+                 params: newParams
+               });
+
+               update();
+             };
+
+             $scope.$on('$stateChangeSuccess', update);
+
+             // Update route state
+             function update() {
+               if (anyMatch()) {
+                 $element.addClass(activeClass);
+               } else {
+                 $element.removeClass(activeClass);
+               }
+             }
+
+             function anyMatch() {
+               for (var i = 0; i < states.length; i++) {
+                 if (isMatch(states[i].state, states[i].params)) {
+                   return true;
+                 }
+               }
+               return false;
+             }
+
+             function isMatch(state, params) {
+               if (typeof $attrs.uiSrefActiveEq !== 'undefined') {
+                 return $state.is(state.name, params);
+               } else {
+                 return $state.includes(state.name, params);
+               }
+             }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }]
          };
        }
        angular.module('ui.router.state')
          .directive('uiSref', $StateRefDirective)
          .directive('uiSrefActive', $StateRefActiveDirective)
+<<<<<<< HEAD
          .directive('uiSrefActiveEq', $StateRefActiveDirective)
          .directive('uiState', $StateRefDynamicDirective);
+=======
+         .directive('uiSrefActiveEq', $StateRefActiveDirective);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
        /**
         * @ngdoc filter
         */
        $IsStateFilter.$inject = ['$state'];
        function $IsStateFilter($state) {
+<<<<<<< HEAD
          var isFilter = function (state, params) {
            return $state.is(state, params);
+=======
+         var isFilter = function (state) {
+           return $state.is(state);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          };
          isFilter.$stateful = true;
          return isFilter;
         */
        $IncludedByStateFilter.$inject = ['$state'];
        function $IncludedByStateFilter($state) {
+<<<<<<< HEAD
          var includesFilter = function (state, params, options) {
            return $state.includes(state, params, options);
+=======
+         var includesFilter = function (state) {
+           return $state.includes(state);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          };
          includesFilter.$stateful = true;
          return  includesFilter;
 /***/ function(module, exports) {
 
        /**
+<<<<<<< HEAD
         * @license AngularJS v1.6.2
         * (c) 2010-2017 Google, Inc. http://angularjs.org
         * License: MIT
         */
        (function(window, angular) {'use strict';
+=======
+        * @license AngularJS v1.4.8
+        * (c) 2010-2015 Google, Inc. http://angularjs.org
+        * License: MIT
+        */
+       (function(window, angular, undefined) {'use strict';
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
        var $resourceMinErr = angular.$$minErr('$resource');
 
         *
         * <div doc-module-components="ngResource"></div>
         *
+<<<<<<< HEAD
         * See {@link ngResource.$resourceProvider} and {@link ngResource.$resource} for usage.
         */
 
         * ## Dependencies
         * Requires the {@link ngResource } module to be installed.
         *
+=======
+        * See {@link ngResource.$resource `$resource`} for usage.
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         */
 
        /**
         * @ngdoc service
         * @name $resource
         * @requires $http
+<<<<<<< HEAD
         * @requires ng.$log
         * @requires $q
         * @requires ng.$timeout
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *
         * @description
         * A factory which creates a resource object that lets you interact with
         *   can escape it with `/\.`.
         *
         * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
+<<<<<<< HEAD
         *   `actions` methods. If a parameter value is a function, it will be called every time
         *   a param value needs to be obtained for a request (unless the param was overridden). The function
         *   will be passed the current data value as an argument.
+=======
+        *   `actions` methods. If any of the parameter value is a function, it will be executed every time
+        *   when a param value needs to be obtained for a request (unless the param was overridden).
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *
         *   Each key value in the parameter object is first bound to url template if present and then any
         *   excess keys are appended to the url search query after the `?`.
         *   Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
         *   URL `/path/greet?salutation=Hello`.
         *
+<<<<<<< HEAD
         *   If the parameter value is prefixed with `@`, then the value for that parameter will be
         *   extracted from the corresponding property on the `data` object (provided when calling a
         *   "non-GET" action method).
         *   extended.
         *
         *   The declaration should be created in the format of {@link ng.$http#usage $http.config}:
+=======
+        *   If the parameter value is prefixed with `@` then the value for that parameter will be extracted
+        *   from the corresponding property on the `data` object (provided when calling an action method).  For
+        *   example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of `someParam`
+        *   will be `data.someProp`.
+        *
+        * @param {Object.<Object>=} actions Hash with declaration of custom actions that should extend
+        *   the default set of resource actions. The declaration should be created in the format of {@link
+        *   ng.$http#usage $http.config}:
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *
         *       {action1: {method:?, params:?, isArray:?, headers:?, ...},
         *        action2: {method:?, params:?, isArray:?, headers:?, ...},
         *   - **`method`** â€“ {string} â€“ Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,
         *     `DELETE`, `JSONP`, etc).
         *   - **`params`** â€“ {Object=} â€“ Optional set of pre-bound parameters for this action. If any of
+<<<<<<< HEAD
         *     the parameter value is a function, it will be called every time when a param value needs to
         *     be obtained for a request (unless the param was overridden). The function will be passed the
         *     current data value as an argument.
+=======
+        *     the parameter value is a function, it will be executed every time when a param value needs to
+        *     be obtained for a request (unless the param was overridden).
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *   - **`url`** â€“ {string} â€“ action specific `url` override. The url templating is supported just
         *     like for the resource-level urls.
         *   - **`isArray`** â€“ {boolean=} â€“ If true then the returned object for this action is an array,
         *     transform function or an array of such functions. The transform function takes the http
         *     request body and headers and returns its transformed (typically serialized) version.
         *     By default, transformRequest will contain one function that checks if the request data is
+<<<<<<< HEAD
         *     an object and serializes it using `angular.toJson`. To prevent this behavior, set
         *     `transformRequest` to an empty array: `transformRequest: []`
         *   - **`transformResponse`** â€“
         *     By default, transformResponse will contain one function that checks if the response looks
         *     like a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior,
         *     set `transformResponse` to an empty array: `transformResponse: []`
+=======
+        *     an object and serializes to using `angular.toJson`. To prevent this behavior, set
+        *     `transformRequest` to an empty array: `transformRequest: []`
+        *   - **`transformResponse`** â€“
+        *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` â€“
+        *     transform function or an array of such functions. The transform function takes the http
+        *     response body and headers and returns its transformed (typically deserialized) version.
+        *     By default, transformResponse will contain one function that checks if the response looks like
+        *     a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior, set
+        *     `transformResponse` to an empty array: `transformResponse: []`
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *   - **`cache`** â€“ `{boolean|Cache}` â€“ If true, a default $http cache will be used to cache the
         *     GET request, otherwise if a cache instance built with
         *     {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
         *     caching.
+<<<<<<< HEAD
         *   - **`timeout`** â€“ `{number}` â€“ timeout in milliseconds.<br />
         *     **Note:** In contrast to {@link ng.$http#usage $http.config}, {@link ng.$q promises} are
         *     **not** supported in $resource, because the same value would be used for multiple requests.
         *     will be cancelled (if not already completed) by calling `$cancelRequest()` on the call's
         *     return value. Calling `$cancelRequest()` for a non-cancellable or an already
         *     completed/cancelled request will have no effect.<br />
+=======
+        *   - **`timeout`** â€“ `{number|Promise}` â€“ timeout in milliseconds, or {@link ng.$q promise} that
+        *     should abort the request when resolved.
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *   - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the
         *     XHR object. See
         *     [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)
         *     with `http response` object. See {@link ng.$http $http interceptors}.
         *
         * @param {Object} options Hash with custom settings that should extend the
+<<<<<<< HEAD
         *   default `$resourceProvider` behavior.  The supported options are:
         *
         *   - **`stripTrailingSlashes`** â€“ {boolean} â€“ If true then the trailing
         *   - **`cancellable`** â€“ {boolean} â€“ If true, the request made by a "non-instance" call will be
         *   cancelled (if not already completed) by calling `$cancelRequest()` on the call's return value.
         *   This can be overwritten per action. (Defaults to false.)
+=======
+        *   default `$resourceProvider` behavior.  The only supported option is
+        *
+        *   Where:
+        *
+        *   - **`stripTrailingSlashes`** â€“ {boolean} â€“ If true then the trailing
+        *   slashes from any calculated URL will be stripped. (Defaults to true.)
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *
         * @returns {Object} A resource "class" object with methods for the default set of resource actions
         *   optionally extended with custom `actions`. The default set contains these actions:
         *   - non-GET instance actions:  `instance.$action([parameters], [success], [error])`
         *
         *
+<<<<<<< HEAD
         *   Success callback is called with (value (Object|Array), responseHeaders (Function),
         *   status (number), statusText (string)) arguments, where the value is the populated resource
         *   instance or collection object. The error callback is called with (httpResponse) argument.
+=======
+        *   Success callback is called with (value, responseHeaders) arguments, where the value is
+        *   the populated resource instance or collection object. The error callback is called
+        *   with (httpResponse) argument.
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *
         *   Class actions return empty instance (with additional properties below).
         *   Instance actions return promise of the action.
         *
+<<<<<<< HEAD
         *   The Resource instances and collections have these additional properties:
+=======
+        *   The Resource instances and collection have these additional properties:
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *
         *   - `$promise`: the {@link ng.$q promise} of the original server interaction that created this
         *     instance or collection.
         *     {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view
         *     rendering until the resource(s) are loaded.
         *
+<<<<<<< HEAD
         *     On failure, the promise is rejected with the {@link ng.$http http response} object, without
+=======
+        *     On failure, the promise is resolved with the {@link ng.$http http response} object, without
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         *     the `resource` property.
         *
         *     If an interceptor object was provided, the promise will instead be resolved with the value
         *      rejection), `false` before that. Knowing if the Resource has been resolved is useful in
         *      data-binding.
         *
+<<<<<<< HEAD
         *   The Resource instances and collections have these additional methods:
         *
         *   - `$cancelRequest`: If there is a cancellable, pending request related to the instance or
         *     `angular.toJson`) automatically use this method when serializing a Resource instance
         *     (see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior)).
         *
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * @example
         *
         * # Credit card resource
         *
         * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and
         * `headers`.
+<<<<<<< HEAD
         *
         * @example
         *
         * # User resource
         *
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * When the data is returned from the server then the object is an instance of the resource type and
         * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
         * operations (create, read, update, delete) on server-side data.
         *
           ```js
             var User = $resource('/user/:userId', {userId:'@id'});
+<<<<<<< HEAD
             User.get({userId:123}, function(user, getResponseHeaders){
               user.abc = true;
               user.$save(function(user, putResponseHeaders) {
                 //user => saved user object
+=======
+            User.get({userId:123}, function(u, getResponseHeaders){
+              u.abc = true;
+              u.$save(function(u, putResponseHeaders) {
+                //u => saved user object
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                 //putResponseHeaders => $http header getter
               });
             });
                   $scope.user = user;
                 });
           ```
+<<<<<<< HEAD
         *
         * @example
         *
         * # Creating a custom 'PUT' request
         *
+=======
+
+        * # Creating a custom 'PUT' request
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
         * In this example we create a custom method on our resource to make a PUT request
         * ```js
         *    var app = angular.module('app', ['ngResource', 'ngRoute']);
         *    // This will PUT /notes/ID with the note object in the request payload
         *    }]);
         * ```
+<<<<<<< HEAD
         *
         * @example
         *
             * ```
             *
             */
+=======
+        */
+       angular.module('ngResource', ['ng']).
+         provider('$resource', function() {
+           var PROTOCOL_AND_DOMAIN_REGEX = /^https?:\/\/[^\/]*/;
+           var provider = this;
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            this.defaults = {
              // Strip slashes by default
              stripTrailingSlashes: true,
 
+<<<<<<< HEAD
              // Make non-instance requests cancellable (via `$cancelRequest()`)
              cancellable: false,
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              // Default actions configuration
              actions: {
                'get': {method: 'GET'},
              }
            };
 
+<<<<<<< HEAD
            this.$get = ['$http', '$log', '$q', '$timeout', function($http, $log, $q, $timeout) {
 
              var noop = angular.noop,
                  isNumber = angular.isNumber,
                  encodeUriQuery = angular.$$encodeUriQuery,
                  encodeUriSegment = angular.$$encodeUriSegment;
+=======
+           this.$get = ['$http', '$q', function($http, $q) {
+
+             var noop = angular.noop,
+               forEach = angular.forEach,
+               extend = angular.extend,
+               copy = angular.copy,
+               isFunction = angular.isFunction;
+
+             /**
+              * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+              * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set
+              * (pchar) allowed in path segments:
+              *    segment       = *pchar
+              *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+              *    pct-encoded   = "%" HEXDIG HEXDIG
+              *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+              *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+              *                     / "*" / "+" / "," / ";" / "="
+              */
+             function encodeUriSegment(val) {
+               return encodeUriQuery(val, true).
+                 replace(/%26/gi, '&').
+                 replace(/%3D/gi, '=').
+                 replace(/%2B/gi, '+');
+             }
+
+
+             /**
+              * This method is intended for encoding *key* or *value* parts of query component. We need a
+              * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't
+              * have to be encoded per http://tools.ietf.org/html/rfc3986:
+              *    query       = *( pchar / "/" / "?" )
+              *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+              *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+              *    pct-encoded   = "%" HEXDIG HEXDIG
+              *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+              *                     / "*" / "+" / "," / ";" / "="
+              */
+             function encodeUriQuery(val, pctEncodeSpaces) {
+               return encodeURIComponent(val).
+                 replace(/%40/gi, '@').
+                 replace(/%3A/gi, ':').
+                 replace(/%24/g, '$').
+                 replace(/%2C/gi, ',').
+                 replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+             }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
              function Route(template, defaults) {
                this.template = template;
                    url = actionUrl || self.template,
                    val,
                    encodedVal,
+<<<<<<< HEAD
                    protocolAndIpv6 = '';
 
                  var urlParams = self.urlParams = Object.create(null);
                  url = url.replace(/\\:/g, ':');
                  url = url.replace(PROTOCOL_AND_IPV6_REGEX, function(match) {
                    protocolAndIpv6 = match;
+=======
+                   protocolAndDomain = '';
+
+                 var urlParams = self.urlParams = {};
+                 forEach(url.split(/\W/), function(param) {
+                   if (param === 'hasOwnProperty') {
+                     throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name.");
+                   }
+                   if (!(new RegExp("^\\d+$").test(param)) && param &&
+                     (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) {
+                     urlParams[param] = true;
+                   }
+                 });
+                 url = url.replace(/\\:/g, ':');
+                 url = url.replace(PROTOCOL_AND_DOMAIN_REGEX, function(match) {
+                   protocolAndDomain = match;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    return '';
                  });
 
                  params = params || {};
+<<<<<<< HEAD
                  forEach(self.urlParams, function(paramInfo, urlParam) {
                    val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
                    if (isDefined(val) && val !== null) {
                      url = url.replace(new RegExp('(/?):' + urlParam + '(\\W|$)', 'g'), function(match,
                          leadingSlashes, tail) {
                        if (tail.charAt(0) === '/') {
+=======
+                 forEach(self.urlParams, function(_, urlParam) {
+                   val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
+                   if (angular.isDefined(val) && val !== null) {
+                     encodedVal = encodeUriSegment(val);
+                     url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) {
+                       return encodedVal + p1;
+                     });
+                   } else {
+                     url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match,
+                         leadingSlashes, tail) {
+                       if (tail.charAt(0) == '/') {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                          return tail;
                        } else {
                          return leadingSlashes + tail;
                    url = url.replace(/\/+$/, '') || '/';
                  }
 
+<<<<<<< HEAD
                  // Collapse `/.` if found in the last URL path segment before the query.
                  // E.g. `http://url.com/id/.format?q=x` becomes `http://url.com/id.format?q=x`.
                  url = url.replace(/\/\.(?=\w+($|\?))/, '.');
                  // Replace escaped `/\.` with `/.`.
                  // (If `\.` comes from a param value, it will be encoded as `%5C.`.)
                  config.url = protocolAndIpv6 + url.replace(/\/(\\|%5C)\./, '/.');
+=======
+                 // then replace collapse `/.` if found in the last URL path segment before the query
+                 // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
+                 url = url.replace(/\/\.(?=\w+($|\?))/, '.');
+                 // replace escaped `/\.` with `/.`
+                 config.url = protocolAndDomain + url.replace(/\/\\\./, '/.');
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
 
                  // set params - delegate param encoding to $http
                  var ids = {};
                  actionParams = extend({}, paramDefaults, actionParams);
                  forEach(actionParams, function(value, key) {
+<<<<<<< HEAD
                    if (isFunction(value)) { value = value(data); }
                    ids[key] = value && value.charAt && value.charAt(0) === '@' ?
+=======
+                   if (isFunction(value)) { value = value(); }
+                   ids[key] = value && value.charAt && value.charAt(0) == '@' ?
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                      lookupDottedPath(data, value.substr(1)) : value;
                  });
                  return ids;
                  var data = extend({}, this);
                  delete data.$promise;
                  delete data.$resolved;
+<<<<<<< HEAD
                  delete data.$cancelRequest;
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  return data;
                };
 
                forEach(actions, function(action, name) {
                  var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
+<<<<<<< HEAD
                  var numericTimeout = action.timeout;
                  var cancellable = isDefined(action.cancellable) ?
                      action.cancellable : route.defaults.cancellable;
                    delete action.timeout;
                    numericTimeout = null;
                  }
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                  Resource[name] = function(a1, a2, a3, a4) {
                    var params = {}, data, success, error;
 
+<<<<<<< HEAD
+=======
+                   /* jshint -W086 */ /* (purposefully fall through case statements) */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    switch (arguments.length) {
                      case 4:
                        error = a4;
                        success = a3;
+<<<<<<< HEAD
                        // falls through
+=======
+                     //fallthrough
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                      case 3:
                      case 2:
                        if (isFunction(a2)) {
 
                          success = a2;
                          error = a3;
+<<<<<<< HEAD
                          // falls through
+=======
+                         //fallthrough
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                        } else {
                          params = a1;
                          data = a2;
                          success = a3;
                          break;
                        }
+<<<<<<< HEAD
                        // falls through
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                      case 1:
                        if (isFunction(a1)) success = a1;
                        else if (hasBody) data = a1;
                      case 0: break;
                      default:
                        throw $resourceMinErr('badargs',
+<<<<<<< HEAD
                          'Expected up to 4 arguments [params, data, success, error], got {0} arguments',
                          arguments.length);
                    }
+=======
+                         "Expected up to 4 arguments [params, data, success, error], got {0} arguments",
+                         arguments.length);
+                   }
+                   /* jshint +W086 */ /* (purposefully fall through case statements) */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                    var isInstanceCall = this instanceof Resource;
                    var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));
                      defaultResponseInterceptor;
                    var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||
                      undefined;
+<<<<<<< HEAD
                    var hasError = !!error;
                    var hasResponseErrorInterceptor = !!responseErrorInterceptor;
                    var timeoutDeferred;
                    var numericTimeoutPromise;
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                    forEach(action, function(value, key) {
                      switch (key) {
                        case 'params':
                        case 'isArray':
                        case 'interceptor':
+<<<<<<< HEAD
                        case 'cancellable':
+=======
+                         break;
+                       case 'timeout':
+                         httpConfig[key] = value;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                          break;
                      }
                    });
 
+<<<<<<< HEAD
                    if (!isInstanceCall && cancellable) {
                      timeoutDeferred = $q.defer();
                      httpConfig.timeout = timeoutDeferred.promise;
                      }
                    }
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    if (hasBody) httpConfig.data = data;
                    route.setUrlParams(httpConfig,
                      extend({}, extractParams(data, action.params || {}), params),
                      action.url);
 
                    var promise = $http(httpConfig).then(function(response) {
+<<<<<<< HEAD
                      var data = response.data;
 
                      if (data) {
                          value.length = 0;
                          forEach(data, function(item) {
                            if (typeof item === 'object') {
+=======
+                     var data = response.data,
+                       promise = value.$promise;
+
+                     if (data) {
+                       // Need to convert action.isArray to boolean in case it is undefined
+                       // jshint -W018
+                       if (angular.isArray(data) !== (!!action.isArray)) {
+                         throw $resourceMinErr('badcfg',
+                             'Error in resource configuration for action `{0}`. Expected response to ' +
+                             'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object',
+                           angular.isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url);
+                       }
+                       // jshint +W018
+                       if (action.isArray) {
+                         value.length = 0;
+                         forEach(data, function(item) {
+                           if (typeof item === "object") {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                              value.push(new Resource(item));
                            } else {
                              // Valid JSON values may be string literals, and these should not be converted
                            }
                          });
                        } else {
+<<<<<<< HEAD
                          var promise = value.$promise;     // Save the promise
                          shallowClearAndCopy(data, value);
                          value.$promise = promise;         // Restore the promise
                        $timeout.cancel(numericTimeoutPromise);
                        timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null;
                      }
+=======
+                         shallowClearAndCopy(data, value);
+                         value.$promise = promise;
+                       }
+                     }
+
+                     value.$resolved = true;
+
+                     response.resource = value;
+
+                     return response;
+                   }, function(response) {
+                     value.$resolved = true;
+
+                     (error || noop)(response);
+
+                     return $q.reject(response);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    });
 
                    promise = promise.then(
                      function(response) {
                        var value = responseInterceptor(response);
+<<<<<<< HEAD
                        (success || noop)(value, response.headers, response.status, response.statusText);
                        return value;
                      },
                            $q.reject(response);
                        } :
                        undefined);
+=======
+                       (success || noop)(value, response.headers);
+                       return value;
+                     },
+                     responseErrorInterceptor);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                    if (!isInstanceCall) {
                      // we are creating instance / collection
                      // - return the instance / collection
                      value.$promise = promise;
                      value.$resolved = false;
+<<<<<<< HEAD
                      if (cancellable) value.$cancelRequest = cancelRequest;
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                      return value;
                    }
 
                    // instance call
                    return promise;
+<<<<<<< HEAD
 
                    function cancelRequest(value) {
                      promise.catch(noop);
                      timeoutDeferred.resolve(value);
                    }
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  };
 
 
                });
 
                Resource.bind = function(additionalParamDefaults) {
+<<<<<<< HEAD
                  var extendedParamDefaults = extend({}, paramDefaults, additionalParamDefaults);
                  return resourceFactory(url, extendedParamDefaults, actions, options);
+=======
+                 return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                };
 
                return Resource;
         * angular-ui-bootstrap
         * http://angular-ui.github.io/bootstrap/
 
+<<<<<<< HEAD
         * Version: 1.3.3 - 2016-05-22
         * License: MIT
         */angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.isClass","ui.bootstrap.datepicker","ui.bootstrap.position","ui.bootstrap.datepickerPopup","ui.bootstrap.debounce","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.paging","ui.bootstrap.pager","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]);
                    .addClass('collapse')
                    .attr('aria-expanded', true)
                    .attr('aria-hidden', false)
+=======
+        * Version: 1.0.0 - 2016-01-08
+        * License: MIT
+        */
+       angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.isClass","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.debounce","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.paging","ui.bootstrap.pager","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]);
+       angular.module("ui.bootstrap.tpls", ["uib/template/accordion/accordion-group.html","uib/template/accordion/accordion.html","uib/template/alert/alert.html","uib/template/carousel/carousel.html","uib/template/carousel/slide.html","uib/template/datepicker/datepicker.html","uib/template/datepicker/day.html","uib/template/datepicker/month.html","uib/template/datepicker/popup.html","uib/template/datepicker/year.html","uib/template/modal/backdrop.html","uib/template/modal/window.html","uib/template/pager/pager.html","uib/template/pagination/pagination.html","uib/template/tooltip/tooltip-html-popup.html","uib/template/tooltip/tooltip-popup.html","uib/template/tooltip/tooltip-template-popup.html","uib/template/popover/popover-html.html","uib/template/popover/popover-template.html","uib/template/popover/popover.html","uib/template/progressbar/bar.html","uib/template/progressbar/progress.html","uib/template/progressbar/progressbar.html","uib/template/rating/rating.html","uib/template/tabs/tab.html","uib/template/tabs/tabset.html","uib/template/timepicker/timepicker.html","uib/template/typeahead/typeahead-match.html","uib/template/typeahead/typeahead-popup.html"]);
+       angular.module('ui.bootstrap.collapse', [])
+
+         .directive('uibCollapse', ['$animate', '$injector', function($animate, $injector) {
+           var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;
+           return {
+             link: function(scope, element, attrs) {
+               if (!scope.$eval(attrs.uibCollapse)) {
+                 element.addClass('in')
+                   .addClass('collapse')
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    .css({height: 'auto'});
                }
 
                function expand() {
+<<<<<<< HEAD
                  if (element.hasClass('collapse') && element.hasClass('in')) {
                    return;
                  }
                        }).then(expandDone);
                      }
                    });
+=======
+                 element.removeClass('collapse')
+                   .addClass('collapsing')
+                   .attr('aria-expanded', true)
+                   .attr('aria-hidden', false);
+
+                 if ($animateCss) {
+                   $animateCss(element, {
+                     addClass: 'in',
+                     easing: 'ease',
+                     to: { height: element[0].scrollHeight + 'px' }
+                   }).start()['finally'](expandDone);
+                 } else {
+                   $animate.addClass(element, 'in', {
+                     to: { height: element[0].scrollHeight + 'px' }
+                   }).then(expandDone);
+                 }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
 
                function expandDone() {
                  element.removeClass('collapsing')
                    .addClass('collapse')
                    .css({height: 'auto'});
+<<<<<<< HEAD
                  expandedExpr(scope);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
 
                function collapse() {
                    return collapseDone();
                  }
 
+<<<<<<< HEAD
                  $q.resolve(collapsingExpr(scope))
                    .then(function() {
                      element
                        }).then(collapseDone);
                      }
                    });
+=======
+                 element
+                   // IMPORTANT: The height must be set before adding "collapsing" class.
+                   // Otherwise, the browser attempts to animate from height 0 (in
+                   // collapsing class) to the given height here.
+                   .css({height: element[0].scrollHeight + 'px'})
+                   // initially all panel collapse have the collapse class, this removal
+                   // prevents the animation from jumping to collapsed state
+                   .removeClass('collapse')
+                   .addClass('collapsing')
+                   .attr('aria-expanded', false)
+                   .attr('aria-hidden', true);
+
+                 if ($animateCss) {
+                   $animateCss(element, {
+                     removeClass: 'in',
+                     to: {height: '0'}
+                   }).start()['finally'](collapseDone);
+                 } else {
+                   $animate.removeClass(element, 'in', {
+                     to: {height: '0'}
+                   }).then(collapseDone);
+                 }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
 
                function collapseDone() {
                  element.css({height: '0'}); // Required so that collapse works when animation is disabled
                  element.removeClass('collapsing')
                    .addClass('collapse');
+<<<<<<< HEAD
                  collapsedExpr(scope);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
 
                scope.$watch(attrs.uibCollapse, function(shouldCollapse) {
            },
            scope: {
              heading: '@',               // Interpolate the heading attribute onto this scope
+<<<<<<< HEAD
              panelClass: '@?',           // Ditto with panelClass
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              isOpen: '=?',
              isDisabled: '=?'
            },
                  }
                }
              };
+<<<<<<< HEAD
 
              var id = 'accordiongroup-' + scope.$id + '-' + Math.floor(Math.random() * 10000);
              scope.headingId = id + '-tab';
              scope.panelId = id + '-panel';
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
        })
            link: function(scope, element, attrs, controller) {
              scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {
                if (heading) {
+<<<<<<< HEAD
                  var elem = angular.element(element[0].querySelector(getHeaderSelectors()));
                  elem.html('');
                  elem.append(heading);
+=======
+                 element.find('span').html('');
+                 element.find('span').append(heading);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
              });
            }
          };
+<<<<<<< HEAD
 
          function getHeaderSelectors() {
              return 'uib-accordion-header,' +
                  '[data-uib-accordion-header],' +
                  '[x-uib-accordion-header]';
          }
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        });
 
        angular.module('ui.bootstrap.alert', [])
 
              if (attrs.uibUncheckable) {
                scope.$watch(uncheckableExpr, function(uncheckable) {
+<<<<<<< HEAD
                  attrs.$set('uncheckable', uncheckable ? '' : undefined);
+=======
+                 attrs.$set('uncheckable', uncheckable ? '' : null);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                });
              }
            }
          var self = this,
            slides = self.slides = $scope.slides = [],
            SLIDE_DIRECTION = 'uib-slideDirection',
+<<<<<<< HEAD
            currentIndex = $scope.active,
            currentInterval, isPlaying, bufferedTransitions = [];
+=======
+           currentIndex = -1,
+           currentInterval, isPlaying, bufferedTransitions = [];
+         self.currentSlide = null;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
          var destroyed = false;
 
          self.addSlide = function(slide, element) {
+<<<<<<< HEAD
            slides.push({
              slide: slide,
              element: element
            });
            //if this is the first slide or the slide is set to active, select it
            if (slide.index === $scope.active || slides.length === 1 && !angular.isNumber($scope.active)) {
+=======
+           slide.$element = element;
+           slides.push(slide);
+           //if this is the first slide or the slide is set to active, select it
+           if (slides.length === 1 || slide.active) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              if ($scope.$currentTransition) {
                $scope.$currentTransition = null;
              }
 
+<<<<<<< HEAD
              currentIndex = slide.index;
              $scope.active = slide.index;
              setActive(currentIndex);
              if (slides.length === 1) {
                $scope.play();
              }
+=======
+             self.select(slides[slides.length - 1]);
+             if (slides.length === 1) {
+               $scope.play();
+             }
+           } else {
+             slide.active = false;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
 
          self.getCurrentIndex = function() {
+<<<<<<< HEAD
            for (var i = 0; i < slides.length; i++) {
              if (slides[i].slide.index === currentIndex) {
                return i;
              }
            }
+=======
+           if (self.currentSlide && angular.isDefined(self.currentSlide.index)) {
+             return +self.currentSlide.index;
+           }
+           return currentIndex;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          };
 
          self.next = $scope.next = function() {
              return;
            }
 
+<<<<<<< HEAD
            return self.select(slides[newIndex], 'next');
+=======
+           return self.select(getSlideByIndex(newIndex), 'next');
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          };
 
          self.prev = $scope.prev = function() {
              return;
            }
 
+<<<<<<< HEAD
            return self.select(slides[newIndex], 'prev');
          };
 
            if (slides.length === 0) {
              currentIndex = null;
              $scope.active = null;
+=======
+           return self.select(getSlideByIndex(newIndex), 'prev');
+         };
+
+         self.removeSlide = function(slide) {
+           if (angular.isDefined(slide.index)) {
+             slides.sort(function(a, b) {
+               return +a.index > +b.index;
+             });
+           }
+
+           var bufferedIndex = bufferedTransitions.indexOf(slide);
+           if (bufferedIndex !== -1) {
+             bufferedTransitions.splice(bufferedIndex, 1);
+           }
+           //get the index of the slide inside the carousel
+           var index = slides.indexOf(slide);
+           slides.splice(index, 1);
+           $timeout(function() {
+             if (slides.length > 0 && slide.active) {
+               if (index >= slides.length) {
+                 self.select(slides[index - 1]);
+               } else {
+                 self.select(slides[index]);
+               }
+             } else if (currentIndex > index) {
+               currentIndex--;
+             }
+           });
+
+           //clean the currentSlide when no more slide
+           if (slides.length === 0) {
+             self.currentSlide = null;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              clearBufferedTransitions();
            }
          };
 
          /* direction: "prev" or "next" */
          self.select = $scope.select = function(nextSlide, direction) {
+<<<<<<< HEAD
            var nextIndex = findSlideIndex(nextSlide.slide);
+=======
+           var nextIndex = $scope.indexOfSlide(nextSlide);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            //Decide direction if it's not given
            if (direction === undefined) {
              direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';
            }
            //Prevent this user-triggered transition from occurring if there is already one in progress
+<<<<<<< HEAD
            if (nextSlide.slide.index !== currentIndex &&
              !$scope.$currentTransition) {
              goNext(nextSlide.slide, nextIndex, direction);
            } else if (nextSlide && nextSlide.slide.index !== currentIndex && $scope.$currentTransition) {
              bufferedTransitions.push(slides[nextIndex]);
+=======
+           if (nextSlide && nextSlide !== self.currentSlide && !$scope.$currentTransition) {
+             goNext(nextSlide, nextIndex, direction);
+           } else if (nextSlide && nextSlide !== self.currentSlide && $scope.$currentTransition) {
+             bufferedTransitions.push(nextSlide);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
 
          /* Allow outside people to call indexOf on slides array */
          $scope.indexOfSlide = function(slide) {
+<<<<<<< HEAD
            return +slide.slide.index;
          };
 
 
          $scope.isNextDisabled = function() {
            return $scope.active === slides.length - 1 && $scope.noWrap();
+=======
+           return angular.isDefined(slide.index) ? +slide.index : slides.indexOf(slide);
+         };
+
+         $scope.isActive = function(slide) {
+           return self.currentSlide === slide;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          };
 
          $scope.pause = function() {
 
          $scope.$watchCollection('slides', resetTransition);
 
+<<<<<<< HEAD
          $scope.$watch('active', function(index) {
            if (angular.isNumber(index) && currentIndex !== index) {
              for (var i = 0; i < slides.length; i++) {
            }
          });
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          function clearBufferedTransitions() {
            while (bufferedTransitions.length) {
              bufferedTransitions.shift();
          }
 
          function getSlideByIndex(index) {
+<<<<<<< HEAD
+=======
+           if (angular.isUndefined(slides[index].index)) {
+             return slides[index];
+           }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            for (var i = 0, l = slides.length; i < l; ++i) {
              if (slides[i].index === index) {
                return slides[i];
            }
          }
 
+<<<<<<< HEAD
          function setActive(index) {
            for (var i = 0; i < slides.length; i++) {
              slides[i].slide.active = i === index;
 
              $scope.$currentTransition = true;
              $animate.on('addClass', slides[index].element, function(element, phase) {
+=======
+         function goNext(slide, index, direction) {
+           if (destroyed) { return; }
+
+           angular.extend(slide, {direction: direction, active: true});
+           angular.extend(self.currentSlide || {}, {direction: direction, active: false});
+           if ($animate.enabled($element) && !$scope.$currentTransition &&
+             slide.$element && self.slides.length > 1) {
+             slide.$element.data(SLIDE_DIRECTION, slide.direction);
+             if (self.currentSlide && self.currentSlide.$element) {
+               self.currentSlide.$element.data(SLIDE_DIRECTION, slide.direction);
+             }
+
+             $scope.$currentTransition = true;
+             $animate.on('addClass', slide.$element, function(element, phase) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                if (phase === 'close') {
                  $scope.$currentTransition = null;
                  $animate.off('addClass', element);
                  if (bufferedTransitions.length) {
+<<<<<<< HEAD
                    var nextSlide = bufferedTransitions.pop().slide;
                    var nextIndex = nextSlide.index;
+=======
+                   var nextSlide = bufferedTransitions.pop();
+                   var nextIndex = $scope.indexOfSlide(nextSlide);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    var nextDirection = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';
                    clearBufferedTransitions();
 
              });
            }
 
+<<<<<<< HEAD
            $scope.active = slide.index;
            currentIndex = slide.index;
            setActive(index);
+=======
+           self.currentSlide = slide;
+           currentIndex = index;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
            //every time you change slides, reset the timer
            restartTimer();
          }
 
+<<<<<<< HEAD
          function findSlideIndex(slide) {
            for (var i = 0; i < slides.length; i++) {
              if (slides[i].slide === slide) {
            }
          }
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          function resetTimer() {
            if (currentInterval) {
              $interval.cancel(currentInterval);
              return attrs.templateUrl || 'uib/template/carousel/carousel.html';
            },
            scope: {
+<<<<<<< HEAD
              active: '=',
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              interval: '=',
              noTransition: '=',
              noPause: '=',
              return attrs.templateUrl || 'uib/template/carousel/slide.html';
            },
            scope: {
+<<<<<<< HEAD
+=======
+             active: '=?',
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              actual: '=?',
              index: '=?'
            },
              scope.$on('$destroy', function() {
                carouselCtrl.removeSlide(scope);
              });
+<<<<<<< HEAD
+=======
+
+             scope.$watch('active', function(active) {
+               if (active) {
+                 carouselCtrl.select(scope);
+               }
+             });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
        })
 
        angular.module('ui.bootstrap.dateparser', [])
 
+<<<<<<< HEAD
        .service('uibDateParser', ['$log', '$locale', 'dateFilter', 'orderByFilter', function($log, $locale, dateFilter, orderByFilter) {
+=======
+       .service('uibDateParser', ['$log', '$locale', 'orderByFilter', function($log, $locale, orderByFilter) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js
          var SPECIAL_CHARACTERS_REGEXP = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
 
            localeId = $locale.id;
 
            this.parsers = {};
+<<<<<<< HEAD
            this.formatters = {};
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
            formatCodeToRegex = [
              {
                key: 'yyyy',
                regex: '\\d{4}',
+<<<<<<< HEAD
                apply: function(value) { this.year = +value; },
                formatter: function(date) {
                  var _date = new Date();
                  _date.setFullYear(Math.abs(date.getFullYear()));
                  return dateFilter(_date, 'yyyy');
                }
+=======
+               apply: function(value) { this.year = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'yy',
                regex: '\\d{2}',
+<<<<<<< HEAD
                apply: function(value) { value = +value; this.year = value < 69 ? value + 2000 : value + 1900; },
                formatter: function(date) {
                  var _date = new Date();
                  _date.setFullYear(Math.abs(date.getFullYear()));
                  return dateFilter(_date, 'yy');
                }
+=======
+               apply: function(value) { this.year = +value + 2000; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'y',
                regex: '\\d{1,4}',
+<<<<<<< HEAD
                apply: function(value) { this.year = +value; },
                formatter: function(date) {
                  var _date = new Date();
                  _date.setFullYear(Math.abs(date.getFullYear()));
                  return dateFilter(_date, 'y');
                }
+=======
+               apply: function(value) { this.year = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'M!',
                regex: '0?[1-9]|1[0-2]',
+<<<<<<< HEAD
                apply: function(value) { this.month = value - 1; },
                formatter: function(date) {
                  var value = date.getMonth();
 
                  return dateFilter(date, 'M');
                }
+=======
+               apply: function(value) { this.month = value - 1; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'MMMM',
                regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
+<<<<<<< HEAD
                apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); },
                formatter: function(date) { return dateFilter(date, 'MMMM'); }
+=======
+               apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'MMM',
                regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),
+<<<<<<< HEAD
                apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); },
                formatter: function(date) { return dateFilter(date, 'MMM'); }
+=======
+               apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'MM',
                regex: '0[1-9]|1[0-2]',
+<<<<<<< HEAD
                apply: function(value) { this.month = value - 1; },
                formatter: function(date) { return dateFilter(date, 'MM'); }
+=======
+               apply: function(value) { this.month = value - 1; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'M',
                regex: '[1-9]|1[0-2]',
+<<<<<<< HEAD
                apply: function(value) { this.month = value - 1; },
                formatter: function(date) { return dateFilter(date, 'M'); }
+=======
+               apply: function(value) { this.month = value - 1; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'd!',
                regex: '[0-2]?[0-9]{1}|3[0-1]{1}',
+<<<<<<< HEAD
                apply: function(value) { this.date = +value; },
                formatter: function(date) {
                  var value = date.getDate();
 
                  return dateFilter(date, 'd');
                }
+=======
+               apply: function(value) { this.date = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'dd',
                regex: '[0-2][0-9]{1}|3[0-1]{1}',
+<<<<<<< HEAD
                apply: function(value) { this.date = +value; },
                formatter: function(date) { return dateFilter(date, 'dd'); }
+=======
+               apply: function(value) { this.date = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'd',
                regex: '[1-2]?[0-9]{1}|3[0-1]{1}',
+<<<<<<< HEAD
                apply: function(value) { this.date = +value; },
                formatter: function(date) { return dateFilter(date, 'd'); }
              },
                key: 'EEE',
                regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|'),
                formatter: function(date) { return dateFilter(date, 'EEE'); }
+=======
+               apply: function(value) { this.date = +value; }
+             },
+             {
+               key: 'EEEE',
+               regex: $locale.DATETIME_FORMATS.DAY.join('|')
+             },
+             {
+               key: 'EEE',
+               regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'HH',
                regex: '(?:0|1)[0-9]|2[0-3]',
+<<<<<<< HEAD
                apply: function(value) { this.hours = +value; },
                formatter: function(date) { return dateFilter(date, 'HH'); }
+=======
+               apply: function(value) { this.hours = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'hh',
                regex: '0[0-9]|1[0-2]',
+<<<<<<< HEAD
                apply: function(value) { this.hours = +value; },
                formatter: function(date) { return dateFilter(date, 'hh'); }
+=======
+               apply: function(value) { this.hours = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'H',
                regex: '1?[0-9]|2[0-3]',
+<<<<<<< HEAD
                apply: function(value) { this.hours = +value; },
                formatter: function(date) { return dateFilter(date, 'H'); }
+=======
+               apply: function(value) { this.hours = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'h',
                regex: '[0-9]|1[0-2]',
+<<<<<<< HEAD
                apply: function(value) { this.hours = +value; },
                formatter: function(date) { return dateFilter(date, 'h'); }
+=======
+               apply: function(value) { this.hours = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'mm',
                regex: '[0-5][0-9]',
+<<<<<<< HEAD
                apply: function(value) { this.minutes = +value; },
                formatter: function(date) { return dateFilter(date, 'mm'); }
+=======
+               apply: function(value) { this.minutes = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'm',
                regex: '[0-9]|[1-5][0-9]',
+<<<<<<< HEAD
                apply: function(value) { this.minutes = +value; },
                formatter: function(date) { return dateFilter(date, 'm'); }
+=======
+               apply: function(value) { this.minutes = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'sss',
                regex: '[0-9][0-9][0-9]',
+<<<<<<< HEAD
                apply: function(value) { this.milliseconds = +value; },
                formatter: function(date) { return dateFilter(date, 'sss'); }
+=======
+               apply: function(value) { this.milliseconds = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'ss',
                regex: '[0-5][0-9]',
+<<<<<<< HEAD
                apply: function(value) { this.seconds = +value; },
                formatter: function(date) { return dateFilter(date, 'ss'); }
+=======
+               apply: function(value) { this.seconds = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 's',
                regex: '[0-9]|[1-5][0-9]',
+<<<<<<< HEAD
                apply: function(value) { this.seconds = +value; },
                formatter: function(date) { return dateFilter(date, 's'); }
+=======
+               apply: function(value) { this.seconds = +value; }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'a',
                  if (value === 'PM') {
                    this.hours += 12;
                  }
+<<<<<<< HEAD
                },
                formatter: function(date) { return dateFilter(date, 'a'); }
+=======
+               }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              },
              {
                key: 'Z',
                    minutes = matches[3];
                  this.hours += toInt(sign + hours);
                  this.minutes += toInt(sign + minutes);
+<<<<<<< HEAD
                },
                formatter: function(date) {
                  return dateFilter(date, 'Z');
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
              },
              {
                key: 'ww',
+<<<<<<< HEAD
                regex: '[0-4][0-9]|5[0-3]',
                formatter: function(date) { return dateFilter(date, 'ww'); }
              },
                key: 'G',
                regex: $locale.DATETIME_FORMATS.ERAS.join('|'),
                formatter: function(date) { return dateFilter(date, 'G'); }
+=======
+               regex: '[0-4][0-9]|5[0-3]'
+             },
+             {
+               key: 'w',
+               regex: '[0-9]|[1-4][0-9]|5[0-3]'
+             },
+             {
+               key: 'GGGG',
+               regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\s/g, '\\s')
+             },
+             {
+               key: 'GGG',
+               regex: $locale.DATETIME_FORMATS.ERAS.join('|')
+             },
+             {
+               key: 'GG',
+               regex: $locale.DATETIME_FORMATS.ERAS.join('|')
+             },
+             {
+               key: 'G',
+               regex: $locale.DATETIME_FORMATS.ERAS.join('|')
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              }
            ];
          };
 
          this.init();
 
+<<<<<<< HEAD
          function createParser(format, func) {
+=======
+         function createParser(format) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var map = [], regex = format.split('');
 
            // check for literal values
 
                map.push({
                  index: index,
+<<<<<<< HEAD
                  key: data.key,
                  apply: data[func],
+=======
+                 apply: data.apply,
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  matcher: data.regex
                });
              }
            };
          }
 
+<<<<<<< HEAD
          this.filter = function(date, format) {
            if (!angular.isDate(date) || isNaN(date) || !format) {
              return '';
            }, '');
          };
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          this.parse = function(input, format, baseDate) {
            if (!angular.isString(input) || !format) {
              return input;
            }
 
            if (!this.parsers[format]) {
+<<<<<<< HEAD
              this.parsers[format] = createParser(format, 'apply');
+=======
+             this.parsers[format] = createParser(format);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
 
            var parser = this.parsers[format],
          this.timezoneToOffset = timezoneToOffset;
          this.addDateMinutes = addDateMinutes;
          this.convertTimezoneToLocal = convertTimezoneToLocal;
+<<<<<<< HEAD
 
+=======
+         
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          function toTimezone(date, timezone) {
            return date && timezone ? convertTimezoneToLocal(date, timezone) : date;
          }
            return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;
          }
 
+<<<<<<< HEAD
          //https://github.com/angular/angular.js/blob/622c42169699ec07fc6daaa19fe6d224e5d2f70e/src/Angular.js#L1207
          function timezoneToOffset(timezone, fallback) {
            timezone = timezone.replace(/:/g, '');
+=======
+         //https://github.com/angular/angular.js/blob/4daafd3dbe6a80d578f5a31df1bb99c77559543e/src/Angular.js#L1207
+         function timezoneToOffset(timezone, fallback) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
            return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
          }
 
          function convertTimezoneToLocal(date, timezone, reverse) {
            reverse = reverse ? -1 : 1;
+<<<<<<< HEAD
            var dateTimezoneOffset = date.getTimezoneOffset();
            var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset);
            return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset));
+=======
+           var timezoneOffset = timezoneToOffset(timezone, date.getTimezoneOffset());
+           return addDateMinutes(date, reverse * (timezoneOffset - date.getTimezoneOffset()));
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
        }]);
 
 
          return {
            restrict: 'A',
+<<<<<<< HEAD
            compile: function(tElement, tAttrs) {
+=======
+           compile: function (tElement, tAttrs) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              var linkedScopes = [];
              var instances = [];
              var expToData = {};
                  element: element
                });
 
+<<<<<<< HEAD
                exps.forEach(function(exp, k) {
+=======
+               exps.forEach(function (exp, k) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  addForExp(exp, scope);
                });
 
                var compareWithExp = matches[2];
                var data = expToData[exp];
                if (!data) {
+<<<<<<< HEAD
                  var watchFn = function(compareWithVal) {
                    var newActivated = null;
                    instances.some(function(instance) {
+=======
+                 var watchFn = function (compareWithVal) {
+                   var newActivated = null;
+                   instances.some(function (instance) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                      var thisVal = instance.scope.$eval(onExp);
                      if (thisVal === compareWithVal) {
                        newActivated = instance;
                instances.splice(index, 1);
                if (linkedScopes.length) {
                  var newWatchScope = linkedScopes[0];
+<<<<<<< HEAD
                  angular.forEach(expToData, function(data) {
+=======
+                 angular.forEach(expToData, function (data) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    if (data.scope === removedScope) {
                      data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);
                      data.scope = newWatchScope;
                    }
                  });
+<<<<<<< HEAD
                } else {
+=======
+               }
+               else {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  expToData = {};
                }
              }
            }
          };
        }]);
+<<<<<<< HEAD
        angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass'])
 
        .value('$datepickerSuppressError', false)
            setMode(self.modes[self.modes.indexOf($scope.datepickerMode) + direction]);
 
            $scope.$emit('uib:datepicker.mode');
-         };
-
-         // Key event mapper
-         $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };
-
-         var focusElement = function() {
-           self.element[0].focus();
-         };
-
-         // Listen for focus requests from popup directive
-         $scope.$on('uib:datepicker.focus', focusElement);
-
-         $scope.keydown = function(evt) {
-           var key = $scope.keys[evt.which];
-
-           if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {
-             return;
-           }
-
-           evt.preventDefault();
-           if (!self.shortcutPropagation) {
-             evt.stopPropagation();
-           }
-
-           if (key === 'enter' || key === 'space') {
-             if (self.isDisabled(self.activeDate)) {
-               return; // do nothing
-             }
-             $scope.select(self.activeDate);
-           } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
-             $scope.toggleMode(key === 'up' ? 1 : -1);
-           } else {
-             self.handleKeyDown(key, evt);
-             self.refreshView();
-           }
-         };
-
-         $scope.$on('$destroy', function() {
-           //Clear all watch listeners on destroy
-           while (watchListeners.length) {
-             watchListeners.shift()();
-           }
-         });
-
-         function setMode(mode) {
-           $scope.datepickerMode = mode;
-           $scope.datepickerOptions.datepickerMode = mode;
-         }
-       }])
-
-       .controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
-         var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-
-         this.step = { months: 1 };
-         this.element = $element;
-         function getDaysInMonth(year, month) {
-           return month === 1 && year % 4 === 0 &&
-             (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];
-         }
-
-         this.init = function(ctrl) {
-           angular.extend(ctrl, this);
-           scope.showWeeks = ctrl.showWeeks;
-           ctrl.refreshView();
-         };
-
-         this.getDates = function(startDate, n) {
-           var dates = new Array(n), current = new Date(startDate), i = 0, date;
-           while (i < n) {
-             date = new Date(current);
-             dates[i++] = date;
-             current.setDate(current.getDate() + 1);
-           }
-           return dates;
-         };
-
-         this._refreshView = function() {
-           var year = this.activeDate.getFullYear(),
-             month = this.activeDate.getMonth(),
-             firstDayOfMonth = new Date(this.activeDate);
-
-           firstDayOfMonth.setFullYear(year, month, 1);
-
-           var difference = this.startingDay - firstDayOfMonth.getDay(),
-             numDisplayedFromPreviousMonth = difference > 0 ?
-               7 - difference : - difference,
-             firstDate = new Date(firstDayOfMonth);
-
-           if (numDisplayedFromPreviousMonth > 0) {
-             firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
-           }
-
-           // 42 is the number of days on a six-week calendar
-           var days = this.getDates(firstDate, 42);
-           for (var i = 0; i < 42; i ++) {
-             days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {
-               secondary: days[i].getMonth() !== month,
-               uid: scope.uniqueId + '-' + i
-             });
-           }
-
-           scope.labels = new Array(7);
-           for (var j = 0; j < 7; j++) {
-             scope.labels[j] = {
-               abbr: dateFilter(days[j].date, this.formatDayHeader),
-               full: dateFilter(days[j].date, 'EEEE')
-             };
-           }
-
-           scope.title = dateFilter(this.activeDate, this.formatDayTitle);
-           scope.rows = this.split(days, 7);
-
-           if (scope.showWeeks) {
-             scope.weekNumbers = [];
-             var thursdayIndex = (4 + 7 - this.startingDay) % 7,
-                 numWeeks = scope.rows.length;
-             for (var curWeek = 0; curWeek < numWeeks; curWeek++) {
-               scope.weekNumbers.push(
-                 getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));
-             }
-           }
-         };
-
-         this.compare = function(date1, date2) {
-           var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
-           var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
-           _date1.setFullYear(date1.getFullYear());
-           _date2.setFullYear(date2.getFullYear());
-           return _date1 - _date2;
-         };
-
-         function getISO8601WeekNumber(date) {
-           var checkDate = new Date(date);
-           checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
-           var time = checkDate.getTime();
-           checkDate.setMonth(0); // Compare with Jan 1
-           checkDate.setDate(1);
-           return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
-         }
-
-         this.handleKeyDown = function(key, evt) {
-           var date = this.activeDate.getDate();
-
-           if (key === 'left') {
-             date = date - 1;
-           } else if (key === 'up') {
-             date = date - 7;
-           } else if (key === 'right') {
-             date = date + 1;
-           } else if (key === 'down') {
-             date = date + 7;
-           } else if (key === 'pageup' || key === 'pagedown') {
-             var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);
-             this.activeDate.setMonth(month, 1);
-             date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);
-           } else if (key === 'home') {
-             date = 1;
-           } else if (key === 'end') {
-             date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());
-           }
-           this.activeDate.setDate(date);
-         };
-       }])
-
-       .controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
-         this.step = { years: 1 };
-         this.element = $element;
-
-         this.init = function(ctrl) {
-           angular.extend(ctrl, this);
-           ctrl.refreshView();
-         };
-
-         this._refreshView = function() {
-           var months = new Array(12),
-               year = this.activeDate.getFullYear(),
-               date;
-
-           for (var i = 0; i < 12; i++) {
-             date = new Date(this.activeDate);
-             date.setFullYear(year, i, 1);
-             months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {
-               uid: scope.uniqueId + '-' + i
-             });
-           }
-
-           scope.title = dateFilter(this.activeDate, this.formatMonthTitle);
-           scope.rows = this.split(months, 3);
-         };
-
-         this.compare = function(date1, date2) {
-           var _date1 = new Date(date1.getFullYear(), date1.getMonth());
-           var _date2 = new Date(date2.getFullYear(), date2.getMonth());
-           _date1.setFullYear(date1.getFullYear());
-           _date2.setFullYear(date2.getFullYear());
-           return _date1 - _date2;
-         };
-
-         this.handleKeyDown = function(key, evt) {
-           var date = this.activeDate.getMonth();
-
-           if (key === 'left') {
-             date = date - 1;
-           } else if (key === 'up') {
-             date = date - 3;
-           } else if (key === 'right') {
-             date = date + 1;
-           } else if (key === 'down') {
-             date = date + 3;
-           } else if (key === 'pageup' || key === 'pagedown') {
-             var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);
-             this.activeDate.setFullYear(year);
-           } else if (key === 'home') {
-             date = 0;
-           } else if (key === 'end') {
-             date = 11;
-           }
-           this.activeDate.setMonth(date);
-         };
-       }])
-
-       .controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
-         var columns, range;
-         this.element = $element;
-
-         function getStartingYear(year) {
-           return parseInt((year - 1) / range, 10) * range + 1;
-         }
-
-         this.yearpickerInit = function() {
-           columns = this.yearColumns;
-           range = this.yearRows * columns;
-           this.step = { years: range };
-         };
-
-         this._refreshView = function() {
-           var years = new Array(range), date;
-
-           for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {
-             date = new Date(this.activeDate);
-             date.setFullYear(start + i, 0, 1);
-             years[i] = angular.extend(this.createDateObject(date, this.formatYear), {
-               uid: scope.uniqueId + '-' + i
-             });
-           }
-
-           scope.title = [years[0].label, years[range - 1].label].join(' - ');
-           scope.rows = this.split(years, columns);
-           scope.columns = columns;
-         };
-
-         this.compare = function(date1, date2) {
-           return date1.getFullYear() - date2.getFullYear();
-         };
-
-         this.handleKeyDown = function(key, evt) {
-           var date = this.activeDate.getFullYear();
-
-           if (key === 'left') {
-             date = date - 1;
-           } else if (key === 'up') {
-             date = date - columns;
-           } else if (key === 'right') {
-             date = date + 1;
-           } else if (key === 'down') {
-             date = date + columns;
-           } else if (key === 'pageup' || key === 'pagedown') {
-             date += (key === 'pageup' ? - 1 : 1) * range;
-           } else if (key === 'home') {
-             date = getStartingYear(this.activeDate.getFullYear());
-           } else if (key === 'end') {
-             date = getStartingYear(this.activeDate.getFullYear()) + range - 1;
-           }
-           this.activeDate.setFullYear(date);
-         };
-       }])
-
-       .directive('uibDatepicker', function() {
-         return {
-           replace: true,
-           templateUrl: function(element, attrs) {
-             return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';
-           },
-           scope: {
-             datepickerOptions: '=?'
-           },
-           require: ['uibDatepicker', '^ngModel'],
-           controller: 'UibDatepickerController',
-           controllerAs: 'datepicker',
-           link: function(scope, element, attrs, ctrls) {
-             var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
-
-             datepickerCtrl.init(ngModelCtrl);
-           }
-         };
-       })
-
-       .directive('uibDaypicker', function() {
-         return {
-           replace: true,
-           templateUrl: function(element, attrs) {
-             return attrs.templateUrl || 'uib/template/datepicker/day.html';
-           },
-           require: ['^uibDatepicker', 'uibDaypicker'],
-           controller: 'UibDaypickerController',
-           link: function(scope, element, attrs, ctrls) {
-             var datepickerCtrl = ctrls[0],
-               daypickerCtrl = ctrls[1];
-
-             daypickerCtrl.init(datepickerCtrl);
-           }
-         };
-       })
-
-       .directive('uibMonthpicker', function() {
-         return {
-           replace: true,
-           templateUrl: function(element, attrs) {
-             return attrs.templateUrl || 'uib/template/datepicker/month.html';
-           },
-           require: ['^uibDatepicker', 'uibMonthpicker'],
-           controller: 'UibMonthpickerController',
-           link: function(scope, element, attrs, ctrls) {
-             var datepickerCtrl = ctrls[0],
-               monthpickerCtrl = ctrls[1];
-
-             monthpickerCtrl.init(datepickerCtrl);
-           }
-         };
-       })
-
-       .directive('uibYearpicker', function() {
-         return {
-           replace: true,
-           templateUrl: function(element, attrs) {
-             return attrs.templateUrl || 'uib/template/datepicker/year.html';
-           },
-           require: ['^uibDatepicker', 'uibYearpicker'],
-           controller: 'UibYearpickerController',
-           link: function(scope, element, attrs, ctrls) {
-             var ctrl = ctrls[0];
-             angular.extend(ctrl, ctrls[1]);
-             ctrl.yearpickerInit();
-
-             ctrl.refreshView();
-           }
-         };
-       });
-
+=======
        angular.module('ui.bootstrap.position', [])
 
        /**
             * Do not access this variable directly, use scrollbarWidth() instead.
             */
            var SCROLLBAR_WIDTH;
-           /**
-            * scrollbar on body and html element in IE and Edge overlay
-            * content and should be considered 0 width.
-            */
-           var BODY_SCROLLBAR_WIDTH;
            var OVERFLOW_REGEX = {
              normal: /(auto|scroll)/,
              hidden: /(auto|scroll|hidden)/
              secondary: /^(top|bottom|left|right|center)$/,
              vertical: /^(top|bottom)$/
            };
-           var BODY_REGEX = /(HTML|BODY)/;
 
            return {
 
               * @returns {element} A HTML element.
               */
              getRawNode: function(elem) {
-               return elem.nodeName ? elem : elem[0] || elem;
+               return elem[0] || elem;
              },
 
              /**
              /**
               * Provides the scrollbar width, concept from TWBS measureScrollbar()
               * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js
-              * In IE and Edge, scollbar on body and html element overlay and should
-              * return a width of 0.
               *
               * @returns {number} The width of the browser scollbar.
               */
-             scrollbarWidth: function(isBody) {
-               if (isBody) {
-                 if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {
-                   var bodyElem = $document.find('body');
-                   bodyElem.addClass('uib-position-body-scrollbar-measure');
-                   BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;
-                   BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;
-                   bodyElem.removeClass('uib-position-body-scrollbar-measure');
-                 }
-                 return BODY_SCROLLBAR_WIDTH;
-               }
-
+             scrollbarWidth: function() {
                if (angular.isUndefined(SCROLLBAR_WIDTH)) {
-                 var scrollElem = angular.element('<div class="uib-position-scrollbar-measure"></div>');
+                 var scrollElem = angular.element('<div style="position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll;"></div>');
                  $document.find('body').append(scrollElem);
                  SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;
                  SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;
              },
 
              /**
-              * Provides the padding required on an element to replace the scrollbar.
-              *
-              * @returns {object} An object with the following properties:
-              *   <ul>
-              *     <li>**scrollbarWidth**: the width of the scrollbar</li>
-              *     <li>**widthOverflow**: whether the the width is overflowing</li>
-              *     <li>**right**: the amount of right padding on the element needed to replace the scrollbar</li>
-              *     <li>**rightOriginal**: the amount of right padding currently on the element</li>
-              *     <li>**heightOverflow**: whether the the height is overflowing</li>
-              *     <li>**bottom**: the amount of bottom padding on the element needed to replace the scrollbar</li>
-              *     <li>**bottomOriginal**: the amount of bottom padding currently on the element</li>
-              *   </ul>
-              */
-             scrollbarPadding: function(elem) {
-               elem = this.getRawNode(elem);
-
-               var elemStyle = $window.getComputedStyle(elem);
-               var paddingRight = this.parseStyle(elemStyle.paddingRight);
-               var paddingBottom = this.parseStyle(elemStyle.paddingBottom);
-               var scrollParent = this.scrollParent(elem, false, true);
-               var scrollbarWidth = this.scrollbarWidth(scrollParent, BODY_REGEX.test(scrollParent.tagName));
-
-               return {
-                 scrollbarWidth: scrollbarWidth,
-                 widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,
-                 right: paddingRight + scrollbarWidth,
-                 originalRight: paddingRight,
-                 heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,
-                 bottom: paddingBottom + scrollbarWidth,
-                 originalBottom: paddingBottom
-                };
-             },
-
-             /**
-              * Checks to see if the element is scrollable.
-              *
-              * @param {element} elem - The element to check.
-              * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
-              *   default is false.
-              *
-              * @returns {boolean} Whether the element is scrollable.
-              */
-             isScrollable: function(elem, includeHidden) {
-               elem = this.getRawNode(elem);
-
-               var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
-               var elemStyle = $window.getComputedStyle(elem);
-               return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);
-             },
-
-             /**
               * Provides the closest scrollable ancestor.
               * A port of the jQuery UI scrollParent method:
               * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js
               * @param {element} elem - The element to find the scroll parent of.
               * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
               *   default is false.
-              * @param {boolean=} [includeSelf=false] - Should the element being passed be
-              * included in the scrollable llokup.
               *
               * @returns {element} A HTML element.
               */
-             scrollParent: function(elem, includeHidden, includeSelf) {
+             scrollParent: function(elem, includeHidden) {
                elem = this.getRawNode(elem);
 
                var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
                var documentEl = $document[0].documentElement;
                var elemStyle = $window.getComputedStyle(elem);
-               if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {
-                 return elem;
-               }
                var excludeStatic = elemStyle.position === 'absolute';
                var scrollParent = elem.parentElement || documentEl;
 
                var targetElemPos = {top: 0, left: 0, placement: ''};
 
                if (placement[2]) {
-                 var viewportOffset = this.viewportOffset(hostElem, appendToBody);
+                 var viewportOffset = this.viewportOffset(hostElem);
+
+                 var targetElemStyle = $window.getComputedStyle(targetElem);
+                 var adjustedSize = {
+                   width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),
+                   height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))
+                 };
+
+                 placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :
+                                placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :
+                                placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :
+                                placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :
+                                placement[0];
+
+                 placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :
+                                placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :
+                                placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :
+                                placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :
+                                placement[1];
+
+                 if (placement[1] === 'center') {
+                   if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+                     var xOverflow = hostElemPos.width / 2 - targetWidth / 2;
+                     if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {
+                       placement[1] = 'left';
+                     } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {
+                       placement[1] = 'right';
+                     }
+                   } else {
+                     var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;
+                     if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {
+                       placement[1] = 'top';
+                     } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {
+                       placement[1] = 'bottom';
+                     }
+                   }
+                 }
+               }
+
+               switch (placement[0]) {
+                 case 'top':
+                   targetElemPos.top = hostElemPos.top - targetHeight;
+                   break;
+                 case 'bottom':
+                   targetElemPos.top = hostElemPos.top + hostElemPos.height;
+                   break;
+                 case 'left':
+                   targetElemPos.left = hostElemPos.left - targetWidth;
+                   break;
+                 case 'right':
+                   targetElemPos.left = hostElemPos.left + hostElemPos.width;
+                   break;
+               }
+
+               switch (placement[1]) {
+                 case 'top':
+                   targetElemPos.top = hostElemPos.top;
+                   break;
+                 case 'bottom':
+                   targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;
+                   break;
+                 case 'left':
+                   targetElemPos.left = hostElemPos.left;
+                   break;
+                 case 'right':
+                   targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;
+                   break;
+                 case 'center':
+                   if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+                     targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;
+                   } else {
+                     targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;
+                   }
+                   break;
+               }
+
+               targetElemPos.top = Math.round(targetElemPos.top);
+               targetElemPos.left = Math.round(targetElemPos.left);
+               targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];
+
+               return targetElemPos;
+             },
+
+             /**
+             * Provides a way for positioning tooltip & dropdown
+             * arrows when using placement options beyond the standard
+             * left, right, top, or bottom.
+             *
+             * @param {element} elem - The tooltip/dropdown element.
+             * @param {string} placement - The placement for the elem.
+             */
+             positionArrow: function(elem, placement) {
+               elem = this.getRawNode(elem);
+
+               var isTooltip = true;
+
+               var innerElem = elem.querySelector('.tooltip-inner');
+               if (!innerElem) {
+                 isTooltip = false;
+                 innerElem = elem.querySelector('.popover-inner');
+               }
+               if (!innerElem) {
+                 return;
+               }
+
+               var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');
+               if (!arrowElem) {
+                 return;
+               }
+
+               placement = this.parsePlacement(placement);
+               if (placement[1] === 'center') {
+                 // no adjustment necessary - just reset styles
+                 angular.element(arrowElem).css({top: '', bottom: '', right: '', left: '', margin: ''});
+                 return;
+               }
+
+               var borderProp = 'border-' + placement[0] + '-width';
+               var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];
+
+               var borderRadiusProp = 'border-';
+               if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+                 borderRadiusProp += placement[0] + '-' + placement[1];
+               } else {
+                 borderRadiusProp += placement[1] + '-' + placement[0];
+               }
+               borderRadiusProp += '-radius';
+               var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];
+
+               var arrowCss = {
+                 top: 'auto',
+                 bottom: 'auto',
+                 left: 'auto',
+                 right: 'auto',
+                 margin: 0
+               };
+
+               switch (placement[0]) {
+                 case 'top':
+                   arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;
+                   break;
+                 case 'bottom':
+                   arrowCss.top = isTooltip ? '0' : '-' + borderWidth;
+                   break;
+                 case 'left':
+                   arrowCss.right = isTooltip ? '0' : '-' + borderWidth;
+                   break;
+                 case 'right':
+                   arrowCss.left = isTooltip ? '0' : '-' + borderWidth;
+                   break;
+               }
+
+               arrowCss[placement[1]] = borderRadius;
+
+               angular.element(arrowElem).css(arrowCss);
+             }
+           };
+         }]);
+
+       angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass', 'ui.bootstrap.position'])
+
+       .value('$datepickerSuppressError', false)
+
+       .constant('uibDatepickerConfig', {
+         formatDay: 'dd',
+         formatMonth: 'MMMM',
+         formatYear: 'yyyy',
+         formatDayHeader: 'EEE',
+         formatDayTitle: 'MMMM yyyy',
+         formatMonthTitle: 'yyyy',
+         datepickerMode: 'day',
+         minMode: 'day',
+         maxMode: 'year',
+         showWeeks: true,
+         startingDay: 0,
+         yearRows: 4,
+         yearColumns: 5,
+         minDate: null,
+         maxDate: null,
+         shortcutPropagation: false,
+         ngModelOptions: {}
+       })
+
+       .controller('UibDatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerSuppressError', 'uibDateParser',
+         function($scope, $attrs, $parse, $interpolate, $log, dateFilter, datepickerConfig, $datepickerSuppressError, dateParser) {
+         var self = this,
+             ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;
+             ngModelOptions = {};
+
+         // Modes chain
+         this.modes = ['day', 'month', 'year'];
+
+         // Interpolated configuration attributes
+         angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle'], function(key) {
+           self[key] = angular.isDefined($attrs[key]) ? $interpolate($attrs[key])($scope.$parent) : datepickerConfig[key];
+         });
+
+         // Evaled configuration attributes
+         angular.forEach(['showWeeks', 'startingDay', 'yearRows', 'yearColumns', 'shortcutPropagation'], function(key) {
+           self[key] = angular.isDefined($attrs[key]) ? $scope.$parent.$eval($attrs[key]) : datepickerConfig[key];
+         });
+
+         // Watchable date attributes
+         angular.forEach(['minDate', 'maxDate'], function(key) {
+           if ($attrs[key]) {
+             $scope.$parent.$watch($attrs[key], function(value) {
+               self[key] = value ? angular.isDate(value) ? dateParser.fromTimezone(new Date(value), ngModelOptions.timezone) : new Date(dateFilter(value, 'medium')) : null;
+               self.refreshView();
+             });
+           } else {
+             self[key] = datepickerConfig[key] ? dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.timezone) : null;
+           }
+         });
+
+         angular.forEach(['minMode', 'maxMode'], function(key) {
+           if ($attrs[key]) {
+             $scope.$parent.$watch($attrs[key], function(value) {
+               self[key] = $scope[key] = angular.isDefined(value) ? value : $attrs[key];
+               if (key === 'minMode' && self.modes.indexOf($scope.datepickerMode) < self.modes.indexOf(self[key]) ||
+                 key === 'maxMode' && self.modes.indexOf($scope.datepickerMode) > self.modes.indexOf(self[key])) {
+                 $scope.datepickerMode = self[key];
+               }
+             });
+           } else {
+             self[key] = $scope[key] = datepickerConfig[key] || null;
+           }
+         });
+
+         $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;
+         $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
+
+         if (angular.isDefined($attrs.initDate)) {
+           this.activeDate = dateParser.fromTimezone($scope.$parent.$eval($attrs.initDate), ngModelOptions.timezone) || new Date();
+           $scope.$parent.$watch($attrs.initDate, function(initDate) {
+             if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {
+               self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.timezone);
+               self.refreshView();
+             }
+           });
+         } else {
+           this.activeDate = new Date();
+         }
+
+         $scope.disabled = angular.isDefined($attrs.disabled) || false;
+         if (angular.isDefined($attrs.ngDisabled)) {
+           $scope.$parent.$watch($attrs.ngDisabled, function(disabled) {
+             $scope.disabled = disabled;
+             self.refreshView();
+           });
+         }
+
+         $scope.isActive = function(dateObject) {
+           if (self.compare(dateObject.date, self.activeDate) === 0) {
+             $scope.activeDateId = dateObject.uid;
+             return true;
+           }
+           return false;
+         };
+
+         this.init = function(ngModelCtrl_) {
+           ngModelCtrl = ngModelCtrl_;
+           ngModelOptions = ngModelCtrl_.$options || datepickerConfig.ngModelOptions;
+
+           if (ngModelCtrl.$modelValue) {
+             this.activeDate = ngModelCtrl.$modelValue;
+           }
+
+           ngModelCtrl.$render = function() {
+             self.render();
+           };
+         };
+
+         this.render = function() {
+           if (ngModelCtrl.$viewValue) {
+             var date = new Date(ngModelCtrl.$viewValue),
+                 isValid = !isNaN(date);
+
+             if (isValid) {
+               this.activeDate = dateParser.fromTimezone(date, ngModelOptions.timezone);
+             } else if (!$datepickerSuppressError) {
+               $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
+             }
+           }
+           this.refreshView();
+         };
+
+         this.refreshView = function() {
+           if (this.element) {
+             $scope.selectedDt = null;
+             this._refreshView();
+             if ($scope.activeDt) {
+               $scope.activeDateId = $scope.activeDt.uid;
+             }
+
+             var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+             date = dateParser.fromTimezone(date, ngModelOptions.timezone);
+             ngModelCtrl.$setValidity('dateDisabled', !date ||
+               this.element && !this.isDisabled(date));
+           }
+         };
+
+         this.createDateObject = function(date, format) {
+           var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+           model = dateParser.fromTimezone(model, ngModelOptions.timezone);
+           var dt = {
+             date: date,
+             label: dateFilter(date, format),
+             selected: model && this.compare(date, model) === 0,
+             disabled: this.isDisabled(date),
+             current: this.compare(date, new Date()) === 0,
+             customClass: this.customClass(date) || null
+           };
+
+           if (model && this.compare(date, model) === 0) {
+             $scope.selectedDt = dt;
+           }
+
+           if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {
+             $scope.activeDt = dt;
+           }
+
+           return dt;
+         };
+
+         this.isDisabled = function(date) {
+           return $scope.disabled ||
+             this.minDate && this.compare(date, this.minDate) < 0 ||
+             this.maxDate && this.compare(date, this.maxDate) > 0 ||
+             $attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode});
+         };
+
+         this.customClass = function(date) {
+           return $scope.customClass({date: date, mode: $scope.datepickerMode});
+         };
+
+         // Split array into smaller arrays
+         this.split = function(arr, size) {
+           var arrays = [];
+           while (arr.length > 0) {
+             arrays.push(arr.splice(0, size));
+           }
+           return arrays;
+         };
+
+         $scope.select = function(date) {
+           if ($scope.datepickerMode === self.minMode) {
+             var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.timezone) : new Date(0, 0, 0, 0, 0, 0, 0);
+             dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
+             dt = dateParser.toTimezone(dt, ngModelOptions.timezone);
+             ngModelCtrl.$setViewValue(dt);
+             ngModelCtrl.$render();
+           } else {
+             self.activeDate = date;
+             $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) - 1];
+           }
+         };
+
+         $scope.move = function(direction) {
+           var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),
+               month = self.activeDate.getMonth() + direction * (self.step.months || 0);
+           self.activeDate.setFullYear(year, month, 1);
+           self.refreshView();
+         };
+
+         $scope.toggleMode = function(direction) {
+           direction = direction || 1;
+
+           if ($scope.datepickerMode === self.maxMode && direction === 1 ||
+             $scope.datepickerMode === self.minMode && direction === -1) {
+             return;
+           }
+
+           $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) + direction];
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
+         };
+
+         // Key event mapper
+         $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };
+
+         var focusElement = function() {
+           self.element[0].focus();
+         };
+
+         // Listen for focus requests from popup directive
+         $scope.$on('uib:datepicker.focus', focusElement);
+
+         $scope.keydown = function(evt) {
+           var key = $scope.keys[evt.which];
+
+           if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {
+             return;
+           }
+
+           evt.preventDefault();
+           if (!self.shortcutPropagation) {
+             evt.stopPropagation();
+           }
+
+           if (key === 'enter' || key === 'space') {
+             if (self.isDisabled(self.activeDate)) {
+               return; // do nothing
+             }
+             $scope.select(self.activeDate);
+           } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
+             $scope.toggleMode(key === 'up' ? 1 : -1);
+           } else {
+             self.handleKeyDown(key, evt);
+             self.refreshView();
+           }
+         };
+<<<<<<< HEAD
+
+         $scope.$on('$destroy', function() {
+           //Clear all watch listeners on destroy
+           while (watchListeners.length) {
+             watchListeners.shift()();
+           }
+         });
+
+         function setMode(mode) {
+           $scope.datepickerMode = mode;
+           $scope.datepickerOptions.datepickerMode = mode;
+         }
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
+       }])
+
+       .controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+         var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+
+         this.step = { months: 1 };
+         this.element = $element;
+         function getDaysInMonth(year, month) {
+           return month === 1 && year % 4 === 0 &&
+             (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];
+         }
+
+         this.init = function(ctrl) {
+           angular.extend(ctrl, this);
+           scope.showWeeks = ctrl.showWeeks;
+           ctrl.refreshView();
+         };
+
+         this.getDates = function(startDate, n) {
+           var dates = new Array(n), current = new Date(startDate), i = 0, date;
+           while (i < n) {
+             date = new Date(current);
+             dates[i++] = date;
+             current.setDate(current.getDate() + 1);
+           }
+           return dates;
+         };
+
+         this._refreshView = function() {
+           var year = this.activeDate.getFullYear(),
+             month = this.activeDate.getMonth(),
+             firstDayOfMonth = new Date(this.activeDate);
+
+           firstDayOfMonth.setFullYear(year, month, 1);
+
+           var difference = this.startingDay - firstDayOfMonth.getDay(),
+             numDisplayedFromPreviousMonth = difference > 0 ?
+               7 - difference : - difference,
+             firstDate = new Date(firstDayOfMonth);
+
+           if (numDisplayedFromPreviousMonth > 0) {
+             firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
+           }
+
+           // 42 is the number of days on a six-week calendar
+           var days = this.getDates(firstDate, 42);
+           for (var i = 0; i < 42; i ++) {
+             days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {
+               secondary: days[i].getMonth() !== month,
+               uid: scope.uniqueId + '-' + i
+             });
+           }
+
+           scope.labels = new Array(7);
+           for (var j = 0; j < 7; j++) {
+             scope.labels[j] = {
+               abbr: dateFilter(days[j].date, this.formatDayHeader),
+               full: dateFilter(days[j].date, 'EEEE')
+             };
+           }
+
+           scope.title = dateFilter(this.activeDate, this.formatDayTitle);
+           scope.rows = this.split(days, 7);
+
+           if (scope.showWeeks) {
+             scope.weekNumbers = [];
+             var thursdayIndex = (4 + 7 - this.startingDay) % 7,
+                 numWeeks = scope.rows.length;
+             for (var curWeek = 0; curWeek < numWeeks; curWeek++) {
+               scope.weekNumbers.push(
+                 getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));
+             }
+           }
+         };
+
+         this.compare = function(date1, date2) {
+           var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
+           var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
+           _date1.setFullYear(date1.getFullYear());
+           _date2.setFullYear(date2.getFullYear());
+           return _date1 - _date2;
+         };
+
+         function getISO8601WeekNumber(date) {
+           var checkDate = new Date(date);
+           checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
+           var time = checkDate.getTime();
+           checkDate.setMonth(0); // Compare with Jan 1
+           checkDate.setDate(1);
+           return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+         }
+
+         this.handleKeyDown = function(key, evt) {
+           var date = this.activeDate.getDate();
+
+           if (key === 'left') {
+             date = date - 1;
+           } else if (key === 'up') {
+             date = date - 7;
+           } else if (key === 'right') {
+             date = date + 1;
+           } else if (key === 'down') {
+             date = date + 7;
+           } else if (key === 'pageup' || key === 'pagedown') {
+             var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);
+             this.activeDate.setMonth(month, 1);
+             date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);
+           } else if (key === 'home') {
+             date = 1;
+           } else if (key === 'end') {
+             date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());
+           }
+           this.activeDate.setDate(date);
+         };
+       }])
+
+       .controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+         this.step = { years: 1 };
+         this.element = $element;
+
+         this.init = function(ctrl) {
+           angular.extend(ctrl, this);
+           ctrl.refreshView();
+         };
+
+         this._refreshView = function() {
+           var months = new Array(12),
+               year = this.activeDate.getFullYear(),
+               date;
+
+           for (var i = 0; i < 12; i++) {
+             date = new Date(this.activeDate);
+             date.setFullYear(year, i, 1);
+             months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {
+               uid: scope.uniqueId + '-' + i
+             });
+           }
+
+           scope.title = dateFilter(this.activeDate, this.formatMonthTitle);
+           scope.rows = this.split(months, 3);
+         };
+
+         this.compare = function(date1, date2) {
+           var _date1 = new Date(date1.getFullYear(), date1.getMonth());
+           var _date2 = new Date(date2.getFullYear(), date2.getMonth());
+           _date1.setFullYear(date1.getFullYear());
+           _date2.setFullYear(date2.getFullYear());
+           return _date1 - _date2;
+         };
+
+         this.handleKeyDown = function(key, evt) {
+           var date = this.activeDate.getMonth();
+
+           if (key === 'left') {
+             date = date - 1;
+           } else if (key === 'up') {
+             date = date - 3;
+           } else if (key === 'right') {
+             date = date + 1;
+           } else if (key === 'down') {
+             date = date + 3;
+           } else if (key === 'pageup' || key === 'pagedown') {
+             var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);
+             this.activeDate.setFullYear(year);
+           } else if (key === 'home') {
+             date = 0;
+           } else if (key === 'end') {
+             date = 11;
+           }
+           this.activeDate.setMonth(date);
+         };
+       }])
+
+       .controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+         var columns, range;
+         this.element = $element;
+
+         function getStartingYear(year) {
+           return parseInt((year - 1) / range, 10) * range + 1;
+         }
+
+         this.yearpickerInit = function() {
+           columns = this.yearColumns;
+           range = this.yearRows * columns;
+           this.step = { years: range };
+         };
+
+         this._refreshView = function() {
+           var years = new Array(range), date;
+
+           for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {
+             date = new Date(this.activeDate);
+             date.setFullYear(start + i, 0, 1);
+             years[i] = angular.extend(this.createDateObject(date, this.formatYear), {
+               uid: scope.uniqueId + '-' + i
+             });
+           }
+
+           scope.title = [years[0].label, years[range - 1].label].join(' - ');
+           scope.rows = this.split(years, columns);
+           scope.columns = columns;
+         };
+
+         this.compare = function(date1, date2) {
+           return date1.getFullYear() - date2.getFullYear();
+         };
+
+         this.handleKeyDown = function(key, evt) {
+           var date = this.activeDate.getFullYear();
+
+           if (key === 'left') {
+             date = date - 1;
+           } else if (key === 'up') {
+             date = date - columns;
+           } else if (key === 'right') {
+             date = date + 1;
+           } else if (key === 'down') {
+             date = date + columns;
+           } else if (key === 'pageup' || key === 'pagedown') {
+             date += (key === 'pageup' ? - 1 : 1) * range;
+           } else if (key === 'home') {
+             date = getStartingYear(this.activeDate.getFullYear());
+           } else if (key === 'end') {
+             date = getStartingYear(this.activeDate.getFullYear()) + range - 1;
+           }
+           this.activeDate.setFullYear(date);
+         };
+       }])
+
+       .directive('uibDatepicker', function() {
+         return {
+           replace: true,
+           templateUrl: function(element, attrs) {
+             return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';
+           },
+           scope: {
+<<<<<<< HEAD
+             datepickerOptions: '=?'
+=======
+             datepickerMode: '=?',
+             dateDisabled: '&',
+             customClass: '&',
+             shortcutPropagation: '&?'
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
+           },
+           require: ['uibDatepicker', '^ngModel'],
+           controller: 'UibDatepickerController',
+           controllerAs: 'datepicker',
+           link: function(scope, element, attrs, ctrls) {
+             var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+             datepickerCtrl.init(ngModelCtrl);
+           }
+         };
+       })
+
+       .directive('uibDaypicker', function() {
+         return {
+           replace: true,
+           templateUrl: function(element, attrs) {
+             return attrs.templateUrl || 'uib/template/datepicker/day.html';
+           },
+           require: ['^uibDatepicker', 'uibDaypicker'],
+           controller: 'UibDaypickerController',
+           link: function(scope, element, attrs, ctrls) {
+             var datepickerCtrl = ctrls[0],
+               daypickerCtrl = ctrls[1];
+
+             daypickerCtrl.init(datepickerCtrl);
+           }
+         };
+       })
+
+       .directive('uibMonthpicker', function() {
+         return {
+           replace: true,
+           templateUrl: function(element, attrs) {
+             return attrs.templateUrl || 'uib/template/datepicker/month.html';
+           },
+           require: ['^uibDatepicker', 'uibMonthpicker'],
+           controller: 'UibMonthpickerController',
+           link: function(scope, element, attrs, ctrls) {
+             var datepickerCtrl = ctrls[0],
+               monthpickerCtrl = ctrls[1];
+
+             monthpickerCtrl.init(datepickerCtrl);
+           }
+         };
+       })
+
+       .directive('uibYearpicker', function() {
+         return {
+           replace: true,
+           templateUrl: function(element, attrs) {
+             return attrs.templateUrl || 'uib/template/datepicker/year.html';
+           },
+           require: ['^uibDatepicker', 'uibYearpicker'],
+           controller: 'UibYearpickerController',
+           link: function(scope, element, attrs, ctrls) {
+             var ctrl = ctrls[0];
+             angular.extend(ctrl, ctrls[1]);
+             ctrl.yearpickerInit();
+
+             ctrl.refreshView();
+           }
+         };
+<<<<<<< HEAD
+       });
+
+       angular.module('ui.bootstrap.position', [])
+
+       /**
+        * A set of utility methods for working with the DOM.
+        * It is meant to be used where we need to absolute-position elements in
+        * relation to another element (this is the case for tooltips, popovers,
+        * typeahead suggestions etc.).
+        */
+         .factory('$uibPosition', ['$document', '$window', function($document, $window) {
+           /**
+            * Used by scrollbarWidth() function to cache scrollbar's width.
+            * Do not access this variable directly, use scrollbarWidth() instead.
+            */
+           var SCROLLBAR_WIDTH;
+           /**
+            * scrollbar on body and html element in IE and Edge overlay
+            * content and should be considered 0 width.
+            */
+           var BODY_SCROLLBAR_WIDTH;
+           var OVERFLOW_REGEX = {
+             normal: /(auto|scroll)/,
+             hidden: /(auto|scroll|hidden)/
+           };
+           var PLACEMENT_REGEX = {
+             auto: /\s?auto?\s?/i,
+             primary: /^(top|bottom|left|right)$/,
+             secondary: /^(top|bottom|left|right|center)$/,
+             vertical: /^(top|bottom)$/
+           };
+           var BODY_REGEX = /(HTML|BODY)/;
+
+           return {
+
+             /**
+              * Provides a raw DOM element from a jQuery/jQLite element.
+              *
+              * @param {element} elem - The element to convert.
+              *
+              * @returns {element} A HTML element.
+              */
+             getRawNode: function(elem) {
+               return elem.nodeName ? elem : elem[0] || elem;
+             },
+
+             /**
+              * Provides a parsed number for a style property.  Strips
+              * units and casts invalid numbers to 0.
+              *
+              * @param {string} value - The style value to parse.
+              *
+              * @returns {number} A valid number.
+              */
+             parseStyle: function(value) {
+               value = parseFloat(value);
+               return isFinite(value) ? value : 0;
+             },
+
+             /**
+              * Provides the closest positioned ancestor.
+              *
+              * @param {element} element - The element to get the offest parent for.
+              *
+              * @returns {element} The closest positioned ancestor.
+              */
+             offsetParent: function(elem) {
+               elem = this.getRawNode(elem);
+
+               var offsetParent = elem.offsetParent || $document[0].documentElement;
+
+               function isStaticPositioned(el) {
+                 return ($window.getComputedStyle(el).position || 'static') === 'static';
+               }
+
+               while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {
+                 offsetParent = offsetParent.offsetParent;
+               }
+
+               return offsetParent || $document[0].documentElement;
+             },
+
+             /**
+              * Provides the scrollbar width, concept from TWBS measureScrollbar()
+              * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js
+              * In IE and Edge, scollbar on body and html element overlay and should
+              * return a width of 0.
+              *
+              * @returns {number} The width of the browser scollbar.
+              */
+             scrollbarWidth: function(isBody) {
+               if (isBody) {
+                 if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {
+                   var bodyElem = $document.find('body');
+                   bodyElem.addClass('uib-position-body-scrollbar-measure');
+                   BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;
+                   BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;
+                   bodyElem.removeClass('uib-position-body-scrollbar-measure');
+                 }
+                 return BODY_SCROLLBAR_WIDTH;
+               }
+
+               if (angular.isUndefined(SCROLLBAR_WIDTH)) {
+                 var scrollElem = angular.element('<div class="uib-position-scrollbar-measure"></div>');
+                 $document.find('body').append(scrollElem);
+                 SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;
+                 SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;
+                 scrollElem.remove();
+               }
+
+               return SCROLLBAR_WIDTH;
+             },
+
+             /**
+              * Provides the padding required on an element to replace the scrollbar.
+              *
+              * @returns {object} An object with the following properties:
+              *   <ul>
+              *     <li>**scrollbarWidth**: the width of the scrollbar</li>
+              *     <li>**widthOverflow**: whether the the width is overflowing</li>
+              *     <li>**right**: the amount of right padding on the element needed to replace the scrollbar</li>
+              *     <li>**rightOriginal**: the amount of right padding currently on the element</li>
+              *     <li>**heightOverflow**: whether the the height is overflowing</li>
+              *     <li>**bottom**: the amount of bottom padding on the element needed to replace the scrollbar</li>
+              *     <li>**bottomOriginal**: the amount of bottom padding currently on the element</li>
+              *   </ul>
+              */
+             scrollbarPadding: function(elem) {
+               elem = this.getRawNode(elem);
+
+               var elemStyle = $window.getComputedStyle(elem);
+               var paddingRight = this.parseStyle(elemStyle.paddingRight);
+               var paddingBottom = this.parseStyle(elemStyle.paddingBottom);
+               var scrollParent = this.scrollParent(elem, false, true);
+               var scrollbarWidth = this.scrollbarWidth(scrollParent, BODY_REGEX.test(scrollParent.tagName));
+
+               return {
+                 scrollbarWidth: scrollbarWidth,
+                 widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,
+                 right: paddingRight + scrollbarWidth,
+                 originalRight: paddingRight,
+                 heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,
+                 bottom: paddingBottom + scrollbarWidth,
+                 originalBottom: paddingBottom
+                };
+             },
+
+             /**
+              * Checks to see if the element is scrollable.
+              *
+              * @param {element} elem - The element to check.
+              * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
+              *   default is false.
+              *
+              * @returns {boolean} Whether the element is scrollable.
+              */
+             isScrollable: function(elem, includeHidden) {
+               elem = this.getRawNode(elem);
+
+               var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
+               var elemStyle = $window.getComputedStyle(elem);
+               return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);
+             },
+
+             /**
+              * Provides the closest scrollable ancestor.
+              * A port of the jQuery UI scrollParent method:
+              * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js
+              *
+              * @param {element} elem - The element to find the scroll parent of.
+              * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
+              *   default is false.
+              * @param {boolean=} [includeSelf=false] - Should the element being passed be
+              * included in the scrollable llokup.
+              *
+              * @returns {element} A HTML element.
+              */
+             scrollParent: function(elem, includeHidden, includeSelf) {
+               elem = this.getRawNode(elem);
+
+               var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
+               var documentEl = $document[0].documentElement;
+               var elemStyle = $window.getComputedStyle(elem);
+               if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {
+                 return elem;
+               }
+               var excludeStatic = elemStyle.position === 'absolute';
+               var scrollParent = elem.parentElement || documentEl;
+
+               if (scrollParent === documentEl || elemStyle.position === 'fixed') {
+                 return documentEl;
+               }
+
+               while (scrollParent.parentElement && scrollParent !== documentEl) {
+                 var spStyle = $window.getComputedStyle(scrollParent);
+                 if (excludeStatic && spStyle.position !== 'static') {
+                   excludeStatic = false;
+                 }
+
+                 if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {
+                   break;
+                 }
+                 scrollParent = scrollParent.parentElement;
+               }
+
+               return scrollParent;
+             },
+
+             /**
+              * Provides read-only equivalent of jQuery's position function:
+              * http://api.jquery.com/position/ - distance to closest positioned
+              * ancestor.  Does not account for margins by default like jQuery position.
+              *
+              * @param {element} elem - The element to caclulate the position on.
+              * @param {boolean=} [includeMargins=false] - Should margins be accounted
+              * for, default is false.
+              *
+              * @returns {object} An object with the following properties:
+              *   <ul>
+              *     <li>**width**: the width of the element</li>
+              *     <li>**height**: the height of the element</li>
+              *     <li>**top**: distance to top edge of offset parent</li>
+              *     <li>**left**: distance to left edge of offset parent</li>
+              *   </ul>
+              */
+             position: function(elem, includeMagins) {
+               elem = this.getRawNode(elem);
+
+               var elemOffset = this.offset(elem);
+               if (includeMagins) {
+                 var elemStyle = $window.getComputedStyle(elem);
+                 elemOffset.top -= this.parseStyle(elemStyle.marginTop);
+                 elemOffset.left -= this.parseStyle(elemStyle.marginLeft);
+               }
+               var parent = this.offsetParent(elem);
+               var parentOffset = {top: 0, left: 0};
+
+               if (parent !== $document[0].documentElement) {
+                 parentOffset = this.offset(parent);
+                 parentOffset.top += parent.clientTop - parent.scrollTop;
+                 parentOffset.left += parent.clientLeft - parent.scrollLeft;
+               }
+
+               return {
+                 width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),
+                 height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),
+                 top: Math.round(elemOffset.top - parentOffset.top),
+                 left: Math.round(elemOffset.left - parentOffset.left)
+               };
+             },
+
+             /**
+              * Provides read-only equivalent of jQuery's offset function:
+              * http://api.jquery.com/offset/ - distance to viewport.  Does
+              * not account for borders, margins, or padding on the body
+              * element.
+              *
+              * @param {element} elem - The element to calculate the offset on.
+              *
+              * @returns {object} An object with the following properties:
+              *   <ul>
+              *     <li>**width**: the width of the element</li>
+              *     <li>**height**: the height of the element</li>
+              *     <li>**top**: distance to top edge of viewport</li>
+              *     <li>**right**: distance to bottom edge of viewport</li>
+              *   </ul>
+              */
+             offset: function(elem) {
+               elem = this.getRawNode(elem);
+
+               var elemBCR = elem.getBoundingClientRect();
+               return {
+                 width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),
+                 height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),
+                 top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),
+                 left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))
+               };
+             },
+
+             /**
+              * Provides offset distance to the closest scrollable ancestor
+              * or viewport.  Accounts for border and scrollbar width.
+              *
+              * Right and bottom dimensions represent the distance to the
+              * respective edge of the viewport element.  If the element
+              * edge extends beyond the viewport, a negative value will be
+              * reported.
+              *
+              * @param {element} elem - The element to get the viewport offset for.
+              * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead
+              * of the first scrollable element, default is false.
+              * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element
+              * be accounted for, default is true.
+              *
+              * @returns {object} An object with the following properties:
+              *   <ul>
+              *     <li>**top**: distance to the top content edge of viewport element</li>
+              *     <li>**bottom**: distance to the bottom content edge of viewport element</li>
+              *     <li>**left**: distance to the left content edge of viewport element</li>
+              *     <li>**right**: distance to the right content edge of viewport element</li>
+              *   </ul>
+              */
+             viewportOffset: function(elem, useDocument, includePadding) {
+               elem = this.getRawNode(elem);
+               includePadding = includePadding !== false ? true : false;
+
+               var elemBCR = elem.getBoundingClientRect();
+               var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};
+
+               var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);
+               var offsetParentBCR = offsetParent.getBoundingClientRect();
+
+               offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;
+               offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;
+               if (offsetParent === $document[0].documentElement) {
+                 offsetBCR.top += $window.pageYOffset;
+                 offsetBCR.left += $window.pageXOffset;
+               }
+               offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;
+               offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;
+
+               if (includePadding) {
+                 var offsetParentStyle = $window.getComputedStyle(offsetParent);
+                 offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);
+                 offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);
+                 offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);
+                 offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);
+               }
+
+               return {
+                 top: Math.round(elemBCR.top - offsetBCR.top),
+                 bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),
+                 left: Math.round(elemBCR.left - offsetBCR.left),
+                 right: Math.round(offsetBCR.right - elemBCR.right)
+               };
+             },
+
+             /**
+              * Provides an array of placement values parsed from a placement string.
+              * Along with the 'auto' indicator, supported placement strings are:
+              *   <ul>
+              *     <li>top: element on top, horizontally centered on host element.</li>
+              *     <li>top-left: element on top, left edge aligned with host element left edge.</li>
+              *     <li>top-right: element on top, lerightft edge aligned with host element right edge.</li>
+              *     <li>bottom: element on bottom, horizontally centered on host element.</li>
+              *     <li>bottom-left: element on bottom, left edge aligned with host element left edge.</li>
+              *     <li>bottom-right: element on bottom, right edge aligned with host element right edge.</li>
+              *     <li>left: element on left, vertically centered on host element.</li>
+              *     <li>left-top: element on left, top edge aligned with host element top edge.</li>
+              *     <li>left-bottom: element on left, bottom edge aligned with host element bottom edge.</li>
+              *     <li>right: element on right, vertically centered on host element.</li>
+              *     <li>right-top: element on right, top edge aligned with host element top edge.</li>
+              *     <li>right-bottom: element on right, bottom edge aligned with host element bottom edge.</li>
+              *   </ul>
+              * A placement string with an 'auto' indicator is expected to be
+              * space separated from the placement, i.e: 'auto bottom-left'  If
+              * the primary and secondary placement values do not match 'top,
+              * bottom, left, right' then 'top' will be the primary placement and
+              * 'center' will be the secondary placement.  If 'auto' is passed, true
+              * will be returned as the 3rd value of the array.
+              *
+              * @param {string} placement - The placement string to parse.
+              *
+              * @returns {array} An array with the following values
+              * <ul>
+              *   <li>**[0]**: The primary placement.</li>
+              *   <li>**[1]**: The secondary placement.</li>
+              *   <li>**[2]**: If auto is passed: true, else undefined.</li>
+              * </ul>
+              */
+             parsePlacement: function(placement) {
+               var autoPlace = PLACEMENT_REGEX.auto.test(placement);
+               if (autoPlace) {
+                 placement = placement.replace(PLACEMENT_REGEX.auto, '');
+               }
+
+               placement = placement.split('-');
+
+               placement[0] = placement[0] || 'top';
+               if (!PLACEMENT_REGEX.primary.test(placement[0])) {
+                 placement[0] = 'top';
+               }
+
+               placement[1] = placement[1] || 'center';
+               if (!PLACEMENT_REGEX.secondary.test(placement[1])) {
+                 placement[1] = 'center';
+               }
+
+               if (autoPlace) {
+                 placement[2] = true;
+               } else {
+                 placement[2] = false;
+               }
+
+               return placement;
+             },
+
+             /**
+              * Provides coordinates for an element to be positioned relative to
+              * another element.  Passing 'auto' as part of the placement parameter
+              * will enable smart placement - where the element fits. i.e:
+              * 'auto left-top' will check to see if there is enough space to the left
+              * of the hostElem to fit the targetElem, if not place right (same for secondary
+              * top placement).  Available space is calculated using the viewportOffset
+              * function.
+              *
+              * @param {element} hostElem - The element to position against.
+              * @param {element} targetElem - The element to position.
+              * @param {string=} [placement=top] - The placement for the targetElem,
+              *   default is 'top'. 'center' is assumed as secondary placement for
+              *   'top', 'left', 'right', and 'bottom' placements.  Available placements are:
+              *   <ul>
+              *     <li>top</li>
+              *     <li>top-right</li>
+              *     <li>top-left</li>
+              *     <li>bottom</li>
+              *     <li>bottom-left</li>
+              *     <li>bottom-right</li>
+              *     <li>left</li>
+              *     <li>left-top</li>
+              *     <li>left-bottom</li>
+              *     <li>right</li>
+              *     <li>right-top</li>
+              *     <li>right-bottom</li>
+              *   </ul>
+              * @param {boolean=} [appendToBody=false] - Should the top and left values returned
+              *   be calculated from the body element, default is false.
+              *
+              * @returns {object} An object with the following properties:
+              *   <ul>
+              *     <li>**top**: Value for targetElem top.</li>
+              *     <li>**left**: Value for targetElem left.</li>
+              *     <li>**placement**: The resolved placement.</li>
+              *   </ul>
+              */
+             positionElements: function(hostElem, targetElem, placement, appendToBody) {
+               hostElem = this.getRawNode(hostElem);
+               targetElem = this.getRawNode(targetElem);
+
+               // need to read from prop to support tests.
+               var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');
+               var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');
+
+               placement = this.parsePlacement(placement);
+
+               var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);
+               var targetElemPos = {top: 0, left: 0, placement: ''};
+
+               if (placement[2]) {
+                 var viewportOffset = this.viewportOffset(hostElem, appendToBody);
 
                  var targetElemStyle = $window.getComputedStyle(targetElem);
                  var adjustedSize = {
            $timeout(positionPopup, 0, false);
          });
        }])
+=======
+       })
+
+       .constant('uibDatepickerPopupConfig', {
+         datepickerPopup: 'yyyy-MM-dd',
+         datepickerPopupTemplateUrl: 'uib/template/datepicker/popup.html',
+         datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',
+         html5Types: {
+           date: 'yyyy-MM-dd',
+           'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',
+           'month': 'yyyy-MM'
+         },
+         currentText: 'Today',
+         clearText: 'Clear',
+         closeText: 'Done',
+         closeOnDateSelection: true,
+         appendToBody: false,
+         showButtonBar: true,
+         onOpenFocus: true,
+         altInputFormats: []
+       })
+
+       .controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig',
+       function(scope, element, attrs, $compile, $parse, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig) {
+         var self = this;
+         var cache = {},
+           isHtml5DateInput = false;
+         var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,
+           datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl,
+           ngModel, ngModelOptions, $popup, altInputFormats;
+
+         scope.watchData = {};
+
+         this.init = function(_ngModel_) {
+           ngModel = _ngModel_;
+           ngModelOptions = _ngModel_.$options || datepickerConfig.ngModelOptions;
+           closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection;
+           appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
+           onOpenFocus = angular.isDefined(attrs.onOpenFocus) ? scope.$parent.$eval(attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;
+           datepickerPopupTemplateUrl = angular.isDefined(attrs.datepickerPopupTemplateUrl) ? attrs.datepickerPopupTemplateUrl : datepickerPopupConfig.datepickerPopupTemplateUrl;
+           datepickerTemplateUrl = angular.isDefined(attrs.datepickerTemplateUrl) ? attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;
+           altInputFormats = angular.isDefined(attrs.altInputFormats) ? scope.$parent.$eval(attrs.altInputFormats) : datepickerPopupConfig.altInputFormats;
+
+           scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
+
+           if (datepickerPopupConfig.html5Types[attrs.type]) {
+             dateFormat = datepickerPopupConfig.html5Types[attrs.type];
+             isHtml5DateInput = true;
+           } else {
+             dateFormat = attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;
+             attrs.$observe('uibDatepickerPopup', function(value, oldValue) {
+                 var newDateFormat = value || datepickerPopupConfig.datepickerPopup;
+                 // Invalidate the $modelValue to ensure that formatters re-run
+                 // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764
+                 if (newDateFormat !== dateFormat) {
+                   dateFormat = newDateFormat;
+                   ngModel.$modelValue = null;
+
+                   if (!dateFormat) {
+                     throw new Error('uibDatepickerPopup must have a date format specified.');
+                   }
+                 }
+             });
+           }
+
+           if (!dateFormat) {
+             throw new Error('uibDatepickerPopup must have a date format specified.');
+           }
+
+           if (isHtml5DateInput && attrs.uibDatepickerPopup) {
+             throw new Error('HTML5 date input types do not support custom formats.');
+           }
+
+           // popup element used to display calendar
+           popupEl = angular.element('<div uib-datepicker-popup-wrap><div uib-datepicker></div></div>');
+           scope.ngModelOptions = angular.copy(ngModelOptions);
+           scope.ngModelOptions.timezone = null;
+           popupEl.attr({
+             'ng-model': 'date',
+             'ng-model-options': 'ngModelOptions',
+             'ng-change': 'dateSelection(date)',
+             'template-url': datepickerPopupTemplateUrl
+           });
+
+           // datepicker element
+           datepickerEl = angular.element(popupEl.children()[0]);
+           datepickerEl.attr('template-url', datepickerTemplateUrl);
+
+           if (isHtml5DateInput) {
+             if (attrs.type === 'month') {
+               datepickerEl.attr('datepicker-mode', '"month"');
+               datepickerEl.attr('min-mode', 'month');
+             }
+           }
+
+           if (attrs.datepickerOptions) {
+             var options = scope.$parent.$eval(attrs.datepickerOptions);
+             if (options && options.initDate) {
+               scope.initDate = dateParser.fromTimezone(options.initDate, ngModelOptions.timezone);
+               datepickerEl.attr('init-date', 'initDate');
+               delete options.initDate;
+             }
+             angular.forEach(options, function(value, option) {
+               datepickerEl.attr(cameltoDash(option), value);
+             });
+           }
+
+           angular.forEach(['minMode', 'maxMode'], function(key) {
+             if (attrs[key]) {
+               scope.$parent.$watch(function() { return attrs[key]; }, function(value) {
+                 scope.watchData[key] = value;
+               });
+               datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
+             }
+           });
+
+           angular.forEach(['datepickerMode', 'shortcutPropagation'], function(key) {
+             if (attrs[key]) {
+               var getAttribute = $parse(attrs[key]);
+               var propConfig = {
+                 get: function() {
+                   return getAttribute(scope.$parent);
+                 }
+               };
+
+               datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
+
+               // Propagate changes from datepicker to outside
+               if (key === 'datepickerMode') {
+                 var setAttribute = getAttribute.assign;
+                 propConfig.set = function(v) {
+                   setAttribute(scope.$parent, v);
+                 };
+               }
+
+               Object.defineProperty(scope.watchData, key, propConfig);
+             }
+           });
+
+           angular.forEach(['minDate', 'maxDate', 'initDate'], function(key) {
+             if (attrs[key]) {
+               var getAttribute = $parse(attrs[key]);
+
+               scope.$parent.$watch(getAttribute, function(value) {
+                 if (key === 'minDate' || key === 'maxDate') {
+                   cache[key] = angular.isDate(value) ? dateParser.fromTimezone(new Date(value), ngModelOptions.timezone) : new Date(dateFilter(value, 'medium'));
+                 }
+
+                 scope.watchData[key] = cache[key] || dateParser.fromTimezone(new Date(value), ngModelOptions.timezone);
+               });
+
+               datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
+             }
+           });
+
+           if (attrs.dateDisabled) {
+             datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');
+           }
+
+           angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle', 'showWeeks', 'startingDay', 'yearRows', 'yearColumns'], function(key) {
+             if (angular.isDefined(attrs[key])) {
+               datepickerEl.attr(cameltoDash(key), attrs[key]);
+             }
+           });
+
+           if (attrs.customClass) {
+             datepickerEl.attr('custom-class', 'customClass({ date: date, mode: mode })');
+           }
+
+           if (!isHtml5DateInput) {
+             // Internal API to maintain the correct ng-invalid-[key] class
+             ngModel.$$parserName = 'date';
+             ngModel.$validators.date = validator;
+             ngModel.$parsers.unshift(parseDate);
+             ngModel.$formatters.push(function(value) {
+               if (ngModel.$isEmpty(value)) {
+                 scope.date = value;
+                 return value;
+               }
+               scope.date = dateParser.fromTimezone(value, ngModelOptions.timezone);
+               return dateFilter(scope.date, dateFormat);
+             });
+           } else {
+             ngModel.$formatters.push(function(value) {
+               scope.date = dateParser.fromTimezone(value, ngModelOptions.timezone);
+               return value;
+             });
+           }
+
+           // Detect changes in the view from the text box
+           ngModel.$viewChangeListeners.push(function() {
+             scope.date = parseDateString(ngModel.$viewValue);
+           });
+
+           element.bind('keydown', inputKeydownBind);
+
+           $popup = $compile(popupEl)(scope);
+           // Prevent jQuery cache memory leak (template is now redundant after linking)
+           popupEl.remove();
+
+           if (appendToBody) {
+             $document.find('body').append($popup);
+           } else {
+             element.after($popup);
+           }
+
+           scope.$on('$destroy', function() {
+             if (scope.isOpen === true) {
+               if (!$rootScope.$$phase) {
+                 scope.$apply(function() {
+                   scope.isOpen = false;
+                 });
+               }
+             }
+
+             $popup.remove();
+             element.unbind('keydown', inputKeydownBind);
+             $document.unbind('click', documentClickBind);
+           });
+         };
+
+         scope.getText = function(key) {
+           return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];
+         };
+
+         scope.isDisabled = function(date) {
+           if (date === 'today') {
+             date = new Date();
+           }
+
+           return scope.watchData.minDate && scope.compare(date, cache.minDate) < 0 ||
+             scope.watchData.maxDate && scope.compare(date, cache.maxDate) > 0;
+         };
+
+         scope.compare = function(date1, date2) {
+           return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
+         };
+
+         // Inner change
+         scope.dateSelection = function(dt) {
+           if (angular.isDefined(dt)) {
+             scope.date = dt;
+           }
+           var date = scope.date ? dateFilter(scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function
+           element.val(date);
+           ngModel.$setViewValue(date);
+
+           if (closeOnDateSelection) {
+             scope.isOpen = false;
+             element[0].focus();
+           }
+         };
+
+         scope.keydown = function(evt) {
+           if (evt.which === 27) {
+             evt.stopPropagation();
+             scope.isOpen = false;
+             element[0].focus();
+           }
+         };
+
+         scope.select = function(date) {
+           if (date === 'today') {
+             var today = new Date();
+             if (angular.isDate(scope.date)) {
+               date = new Date(scope.date);
+               date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());
+             } else {
+               date = new Date(today.setHours(0, 0, 0, 0));
+             }
+           }
+           scope.dateSelection(date);
+         };
+
+         scope.close = function() {
+           scope.isOpen = false;
+           element[0].focus();
+         };
+
+         scope.disabled = angular.isDefined(attrs.disabled) || false;
+         if (attrs.ngDisabled) {
+           scope.$parent.$watch($parse(attrs.ngDisabled), function(disabled) {
+             scope.disabled = disabled;
+           });
+         }
+
+         scope.$watch('isOpen', function(value) {
+           if (value) {
+             if (!scope.disabled) {
+               scope.position = appendToBody ? $position.offset(element) : $position.position(element);
+               scope.position.top = scope.position.top + element.prop('offsetHeight');
+
+               $timeout(function() {
+                 if (onOpenFocus) {
+                   scope.$broadcast('uib:datepicker.focus');
+                 }
+                 $document.bind('click', documentClickBind);
+               }, 0, false);
+             } else {
+               scope.isOpen = false;
+             }
+           } else {
+             $document.unbind('click', documentClickBind);
+           }
+         });
+
+         function cameltoDash(string) {
+           return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });
+         }
+
+         function parseDateString(viewValue) {
+           var date = dateParser.parse(viewValue, dateFormat, scope.date);
+           if (isNaN(date)) {
+             for (var i = 0; i < altInputFormats.length; i++) {
+               date = dateParser.parse(viewValue, altInputFormats[i], scope.date);
+               if (!isNaN(date)) {
+                 return date;
+               }
+             }
+           }
+           return date;
+         }
+
+         function parseDate(viewValue) {
+           if (angular.isNumber(viewValue)) {
+             // presumably timestamp to date object
+             viewValue = new Date(viewValue);
+           }
+
+           if (!viewValue) {
+             return null;
+           }
+
+           if (angular.isDate(viewValue) && !isNaN(viewValue)) {
+             return viewValue;
+           }
+
+           if (angular.isString(viewValue)) {
+             var date = parseDateString(viewValue);
+             if (!isNaN(date)) {
+               return dateParser.toTimezone(date, ngModelOptions.timezone);
+             }
+           }
+
+           return ngModel.$options && ngModel.$options.allowInvalid ? viewValue : undefined;
+         }
+
+         function validator(modelValue, viewValue) {
+           var value = modelValue || viewValue;
+
+           if (!attrs.ngRequired && !value) {
+             return true;
+           }
+
+           if (angular.isNumber(value)) {
+             value = new Date(value);
+           }
+
+           if (!value) {
+             return true;
+           }
+
+           if (angular.isDate(value) && !isNaN(value)) {
+             return true;
+           }
+
+           if (angular.isString(value)) {
+             return !isNaN(parseDateString(viewValue));
+           }
+
+           return false;
+         }
+
+         function documentClickBind(event) {
+           if (!scope.isOpen && scope.disabled) {
+             return;
+           }
+
+           var popup = $popup[0];
+           var dpContainsTarget = element[0].contains(event.target);
+           // The popup node may not be an element node
+           // In some browsers (IE) only element nodes have the 'contains' function
+           var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);
+           if (scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {
+             scope.$apply(function() {
+               scope.isOpen = false;
+             });
+           }
+         }
+
+         function inputKeydownBind(evt) {
+           if (evt.which === 27 && scope.isOpen) {
+             evt.preventDefault();
+             evt.stopPropagation();
+             scope.$apply(function() {
+               scope.isOpen = false;
+             });
+             element[0].focus();
+           } else if (evt.which === 40 && !scope.isOpen) {
+             evt.preventDefault();
+             evt.stopPropagation();
+             scope.$apply(function() {
+               scope.isOpen = true;
+             });
+           }
+         }
+       }])
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
        .directive('uibDatepickerPopup', function() {
          return {
            require: ['ngModel', 'uibDatepickerPopup'],
            controller: 'UibDatepickerPopupController',
            scope: {
+<<<<<<< HEAD
              datepickerOptions: '=?',
              isOpen: '=?',
              currentText: '@',
              clearText: '@',
              closeText: '@'
+=======
+             isOpen: '=?',
+             currentText: '@',
+             clearText: '@',
+             closeText: '@',
+             dateDisabled: '&',
+             customClass: '&'
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            },
            link: function(scope, element, attrs, ctrls) {
              var ngModel = ctrls[0],
            replace: true,
            transclude: true,
            templateUrl: function(element, attrs) {
+<<<<<<< HEAD
              return attrs.templateUrl || 'uib/template/datepickerPopup/popup.html';
+=======
+             return attrs.templateUrl || 'uib/template/datepicker/popup.html';
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
        });
        .service('uibDropdownService', ['$document', '$rootScope', function($document, $rootScope) {
          var openScope = null;
 
+<<<<<<< HEAD
          this.open = function(dropdownScope, element) {
            if (!openScope) {
              $document.on('click', closeDropdown);
              element.on('keydown', keybindFilter);
+=======
+         this.open = function(dropdownScope) {
+           if (!openScope) {
+             $document.on('click', closeDropdown);
+             $document.on('keydown', keybindFilter);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
 
            if (openScope && openScope !== dropdownScope) {
            openScope = dropdownScope;
          };
 
+<<<<<<< HEAD
          this.close = function(dropdownScope, element) {
            if (openScope === dropdownScope) {
              openScope = null;
              $document.off('click', closeDropdown);
              element.off('keydown', keybindFilter);
+=======
+         this.close = function(dropdownScope) {
+           if (openScope === dropdownScope) {
+             openScope = null;
+             $document.off('click', closeDropdown);
+             $document.off('keydown', keybindFilter);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
 
 
          var keybindFilter = function(evt) {
            if (evt.which === 27) {
+<<<<<<< HEAD
              evt.stopPropagation();
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              openScope.focusToggleElement();
              closeDropdown();
            } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen) {
          };
 
          this.toggle = function(open) {
+<<<<<<< HEAD
            scope.isOpen = arguments.length ? !!open : !scope.isOpen;
            if (angular.isFunction(setIsOpen)) {
              setIsOpen(scope, scope.isOpen);
            }
 
            return scope.isOpen;
+=======
+           return scope.isOpen = arguments.length ? !!open : !scope.isOpen;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          };
 
          // Allow other directives to watch status
            if (appendTo && self.dropdownMenu) {
              var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),
                css,
+<<<<<<< HEAD
                rightalign,
                scrollbarWidth;
+=======
+               rightalign;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
              css = {
                top: pos.top + 'px',
                css.right = 'auto';
              } else {
                css.left = 'auto';
+<<<<<<< HEAD
                scrollbarWidth = $position.scrollbarWidth(true);
                css.right = window.innerWidth - scrollbarWidth -
+=======
+               css.right = window.innerWidth -
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  (pos.left + $element.prop('offsetWidth')) + 'px';
              }
 
            }
 
            var openContainer = appendTo ? appendTo : $element;
+<<<<<<< HEAD
            var hasOpenClass = openContainer.hasClass(appendTo ? appendToOpenClass : openClass);
 
            if (hasOpenClass === !isOpen) {
                }
              });
            }
+=======
+
+           $animate[isOpen ? 'addClass' : 'removeClass'](openContainer, appendTo ? appendToOpenClass : openClass).then(function() {
+             if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
+               toggleInvoker($scope, { open: !!isOpen });
+             }
+           });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
            if (isOpen) {
              if (self.dropdownMenuTemplateUrl) {
              }
 
              scope.focusToggleElement();
+<<<<<<< HEAD
              uibDropdownService.open(scope, $element);
+=======
+             uibDropdownService.open(scope);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            } else {
              if (self.dropdownMenuTemplateUrl) {
                if (templateScope) {
                self.dropdownMenu = newEl;
              }
 
+<<<<<<< HEAD
              uibDropdownService.close(scope, $element);
+=======
+             uibDropdownService.close(scope);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              self.selectedOption = null;
            }
 
              setIsOpen($scope, isOpen);
            }
          });
+<<<<<<< HEAD
+=======
+
+         $scope.$on('$locationChangeSuccess', function() {
+           if (scope.getAutoClose() !== 'disabled') {
+             scope.isOpen = false;
+           }
+         });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        }])
 
        .directive('uibDropdown', function() {
              }
            };
          });
+<<<<<<< HEAD
        angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap', 'ui.bootstrap.position'])
+=======
+       angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        /**
         * A helper, internal data structure that stores all references attached to key
         */
        /**
         * A helper directive for the $modal service. It creates a backdrop element.
         */
+<<<<<<< HEAD
          .directive('uibModalBackdrop', ['$animate', '$injector', '$uibModalStack',
          function($animate, $injector, $modalStack) {
+=======
+         .directive('uibModalBackdrop', ['$animateCss', '$injector', '$uibModalStack',
+         function($animateCss, $injector, $modalStack) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            return {
              replace: true,
              templateUrl: 'uib/template/modal/backdrop.html',
 
            function linkFn(scope, element, attrs) {
              if (attrs.modalInClass) {
+<<<<<<< HEAD
                $animate.addClass(element, attrs.modalInClass);
+=======
+               $animateCss(element, {
+                 addClass: attrs.modalInClass
+               }).start();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
                  var done = setIsAsync();
                  if (scope.modalOptions.animation) {
+<<<<<<< HEAD
                    $animate.removeClass(element, attrs.modalInClass).then(done);
+=======
+                   $animateCss(element, {
+                     removeClass: attrs.modalInClass
+                   }).start().then(done);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  } else {
                    done();
                  }
            }
          }])
 
+<<<<<<< HEAD
          .directive('uibModalWindow', ['$uibModalStack', '$q', '$animateCss', '$document',
          function($modalStack, $q, $animateCss, $document) {
+=======
+         .directive('uibModalWindow', ['$uibModalStack', '$q', '$animate', '$animateCss', '$document',
+         function($modalStack, $q, $animate, $animateCss, $document) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            return {
              scope: {
                index: '@'
 
                    scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
                      var done = setIsAsync();
+<<<<<<< HEAD
                      $animateCss(element, {
                        removeClass: attrs.modalInClass
                      }).start().then(done);
+=======
+                     if ($animateCss) {
+                       $animateCss(element, {
+                         removeClass: attrs.modalInClass
+                       }).start().then(done);
+                     } else {
+                       $animate.removeClass(element, attrs.modalInClass).then(done);
+                     }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    });
                  }
 
 
                  $q.when(animationPromise).then(function() {
+<<<<<<< HEAD
                    // Notify {@link $modalStack} that modal is rendered.
                    var modal = $modalStack.getTop();
                    if (modal) {
                      $modalStack.modalRendered(modal.key);
                    }
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    /**
                     * If something within the freshly-opened modal already has focus (perhaps via a
                     * directive that causes focus). then no need to try and focus anything.
                      }
                    }
                  });
+<<<<<<< HEAD
+=======
+
+                 // Notify {@link $modalStack} that modal is rendered.
+                 var modal = $modalStack.getTop();
+                 if (modal) {
+                   $modalStack.modalRendered(modal.key);
+                 }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                });
              }
            };
          })
 
          .factory('$uibModalStack', ['$animate', '$animateCss', '$document',
+<<<<<<< HEAD
            '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap', '$uibPosition',
            function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap, $uibPosition) {
+=======
+           '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap',
+           function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              var OPENED_MODAL_CLASS = 'modal-open';
 
              var backdropDomEl, backdropScope;
              var $modalStack = {
                NOW_CLOSING_EVENT: 'modal.stack.now-closing'
              };
+<<<<<<< HEAD
              var topModalIndex = 0;
              var previousTopOpenedModal = null;
 
                  element.offsetHeight ||
                  element.getClientRects().length);
              }
+=======
+
+             //Modal focus behavior
+             var focusableElementList;
+             var focusIndex = 0;
+             var tababbleSelector = 'a[href], area[href], input:not([disabled]), ' +
+               'button:not([disabled]),select:not([disabled]), textarea:not([disabled]), ' +
+               'iframe, object, embed, *[tabindex], *[contenteditable=true]';
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
              function backdropIndex() {
                var topBackdropIndex = -1;
                    topBackdropIndex = i;
                  }
                }
+<<<<<<< HEAD
 
                // If any backdrop exist, ensure that it's index is always
                // right below the top modal
                if (topBackdropIndex > -1 && topBackdropIndex < topModalIndex) {
                  topBackdropIndex = topModalIndex;
                }
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                return topBackdropIndex;
              }
 
 
                //clean up the stack
                openedWindows.remove(modalInstance);
+<<<<<<< HEAD
                previousTopOpenedModal = openedWindows.top();
                if (previousTopOpenedModal) {
                  topModalIndex = parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10);
                }
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {
                  var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;
                  openedClasses.remove(modalBodyClass, modalInstance);
+<<<<<<< HEAD
                  var areAnyOpen = openedClasses.hasKey(modalBodyClass);
                  appendToElement.toggleClass(modalBodyClass, areAnyOpen);
                  if (!areAnyOpen && scrollbarPadding && scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {
                  }
                  toggleTopWindowClass(true);
                }, modalWindow.closedDeferred);
+=======
+                 appendToElement.toggleClass(modalBodyClass, openedClasses.hasKey(modalBodyClass));
+                 toggleTopWindowClass(true);
+               });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                checkRemoveBackdrop();
 
                //move focus to specified element if available, or else to body
                  }
                  afterAnimating.done = true;
 
+<<<<<<< HEAD
                  $animate.leave(domEl).then(function() {
+=======
+                 $animateCss(domEl, {
+                   event: 'leave'
+                 }).start().then(function() {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    domEl.remove();
                    if (closedDeferred) {
                      closedDeferred.resolve();
                      break;
                    }
                    case 9: {
+<<<<<<< HEAD
                      var list = $modalStack.loadFocusElementList(modal);
                      var focusChanged = false;
                      if (evt.shiftKey) {
                      } else {
                        if ($modalStack.isFocusInLastItem(evt, list)) {
                          focusChanged = $modalStack.focusFirstFocusableElement(list);
+=======
+                     $modalStack.loadFocusElementList(modal);
+                     var focusChanged = false;
+                     if (evt.shiftKey) {
+                       if ($modalStack.isFocusInFirstItem(evt)) {
+                         focusChanged = $modalStack.focusLastFocusableElement();
+                       }
+                     } else {
+                       if ($modalStack.isFocusInLastItem(evt)) {
+                         focusChanged = $modalStack.focusFirstFocusableElement();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                        }
                      }
 
                        evt.preventDefault();
                        evt.stopPropagation();
                      }
+<<<<<<< HEAD
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                      break;
                    }
                  }
 
                toggleTopWindowClass(false);
 
+<<<<<<< HEAD
                // Store the current top first, to determine what index we ought to use
                // for the current top modal
                previousTopOpenedModal = openedWindows.top();
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                openedWindows.add(modalInstance, {
                  deferred: modal.deferred,
                  renderDeferred: modal.renderDeferred,
                  }
                  $compile(backdropDomEl)(backdropScope);
                  $animate.enter(backdropDomEl, appendToElement);
+<<<<<<< HEAD
                  scrollbarPadding = $uibPosition.scrollbarPadding(appendToElement);
                  if (scrollbarPadding.heightOverflow && scrollbarPadding.scrollbarWidth) {
                    appendToElement.css({paddingRight: scrollbarPadding.right + 'px'});
 
                // Set the top modal index based on the index of the previous top modal
                topModalIndex = previousTopOpenedModal ? parseInt(previousTopOpenedModal.value.modalDomEl.attr('index'), 10) + 1 : 0;
+=======
+               }
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var angularDomEl = angular.element('<div uib-modal-window="modal-window"></div>');
                angularDomEl.attr({
                  'template-url': modal.windowTemplateUrl,
                  'window-class': modal.windowClass,
                  'window-top-class': modal.windowTopClass,
                  'size': modal.size,
+<<<<<<< HEAD
                  'index': topModalIndex,
+=======
+                 'index': openedWindows.length() - 1,
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  'animate': 'animate'
                }).html(modal.content);
                if (modal.animation) {
                  angularDomEl.attr('modal-animation', 'true');
                }
 
+<<<<<<< HEAD
                appendToElement.addClass(modalBodyClass);
                $animate.enter($compile(angularDomEl)(modal.scope), appendToElement);
 
                openedWindows.top().value.modalDomEl = angularDomEl;
                openedWindows.top().value.modalOpener = modalOpener;
+=======
+               $animate.enter(angularDomEl, appendToElement)
+                 .then(function() {
+                   $compile(angularDomEl)(modal.scope);
+                   $animate.addClass(appendToElement, modalBodyClass);
+                 });
+
+               openedWindows.top().value.modalDomEl = angularDomEl;
+               openedWindows.top().value.modalOpener = modalOpener;
+
+               $modalStack.clearFocusListCache();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              };
 
              function broadcastClosing(modalWindow, resultOrReason, closing) {
                }
              };
 
+<<<<<<< HEAD
              $modalStack.focusFirstFocusableElement = function(list) {
                if (list.length > 0) {
                  list[0].focus();
+=======
+             $modalStack.focusFirstFocusableElement = function() {
+               if (focusableElementList.length > 0) {
+                 focusableElementList[0].focus();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  return true;
                }
                return false;
              };
+<<<<<<< HEAD
 
              $modalStack.focusLastFocusableElement = function(list) {
                if (list.length > 0) {
                  list[list.length - 1].focus();
+=======
+             $modalStack.focusLastFocusableElement = function() {
+               if (focusableElementList.length > 0) {
+                 focusableElementList[focusableElementList.length - 1].focus();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  return true;
                }
                return false;
              };
 
+<<<<<<< HEAD
              $modalStack.isModalFocused = function(evt, modalWindow) {
                if (evt && modalWindow) {
                  var modalDomEl = modalWindow.value.modalDomEl;
                  if (modalDomEl && modalDomEl.length) {
                    return (evt.target || evt.srcElement) === modalDomEl[0];
                  }
+=======
+             $modalStack.isFocusInFirstItem = function(evt) {
+               if (focusableElementList.length > 0) {
+                 return (evt.target || evt.srcElement) === focusableElementList[0];
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
                return false;
              };
 
+<<<<<<< HEAD
              $modalStack.isFocusInFirstItem = function(evt, list) {
                if (list.length > 0) {
                  return (evt.target || evt.srcElement) === list[0];
+=======
+             $modalStack.isFocusInLastItem = function(evt) {
+               if (focusableElementList.length > 0) {
+                 return (evt.target || evt.srcElement) === focusableElementList[focusableElementList.length - 1];
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
                return false;
              };
 
+<<<<<<< HEAD
              $modalStack.isFocusInLastItem = function(evt, list) {
                if (list.length > 0) {
                  return (evt.target || evt.srcElement) === list[list.length - 1];
                      Array.prototype.filter.call(elements, function(element) {
                        return isVisible(element);
                      }) : elements;
+=======
+             $modalStack.clearFocusListCache = function() {
+               focusableElementList = [];
+               focusIndex = 0;
+             };
+
+             $modalStack.loadFocusElementList = function(modalWindow) {
+               if (focusableElementList === undefined || !focusableElementList.length) {
+                 if (modalWindow) {
+                   var modalDomE1 = modalWindow.value.modalDomEl;
+                   if (modalDomE1 && modalDomE1.length) {
+                     focusableElementList = modalDomE1[0].querySelectorAll(tababbleSelector);
+                   }
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  }
                }
              };
                          }
                        });
 
+<<<<<<< HEAD
                        var ctrlInstance, ctrlInstantiate, ctrlLocals = {};
+=======
+                       var ctrlInstance, ctrlLocals = {};
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                        //controllers
                        if (modalOptions.controller) {
                          ctrlLocals.$scope = modalScope;
+<<<<<<< HEAD
                          ctrlLocals.$scope.$resolve = {};
                          ctrlLocals.$uibModalInstance = modalInstance;
                          angular.forEach(tplAndVars[1], function(value, key) {
 
                          if (angular.isFunction(ctrlInstance.$onInit)) {
                            ctrlInstance.$onInit();
+=======
+                         ctrlLocals.$uibModalInstance = modalInstance;
+                         angular.forEach(tplAndVars[1], function(value, key) {
+                           ctrlLocals[key] = value;
+                         });
+
+                         ctrlInstance = $controller(modalOptions.controller, ctrlLocals);
+                         if (modalOptions.controllerAs) {
+                           if (modalOptions.bindToController) {
+                             ctrlInstance.$close = modalScope.$close;
+                             ctrlInstance.$dismiss = modalScope.$dismiss;
+                             angular.extend(ctrlInstance, providedScope);
+                           }
+
+                           modalScope[modalOptions.controllerAs] = ctrlInstance;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                          }
                        }
 
            create: function(ctrl, $scope, $attrs) {
              ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
              ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl
+<<<<<<< HEAD
              ctrl._watchers = [];
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
              ctrl.init = function(ngModelCtrl, config) {
                ctrl.ngModelCtrl = ngModelCtrl;
                };
 
                if ($attrs.itemsPerPage) {
+<<<<<<< HEAD
                  ctrl._watchers.push($scope.$parent.$watch($attrs.itemsPerPage, function(value) {
                    ctrl.itemsPerPage = parseInt(value, 10);
                    $scope.totalPages = ctrl.calculateTotalPages();
                    ctrl.updatePage();
                  }));
+=======
+                 $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {
+                   ctrl.itemsPerPage = parseInt(value, 10);
+                   $scope.totalPages = ctrl.calculateTotalPages();
+                   ctrl.updatePage();
+                 });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                } else {
                  ctrl.itemsPerPage = config.itemsPerPage;
                }
                  ctrl.ngModelCtrl.$render();
                }
              };
+<<<<<<< HEAD
 
              $scope.$on('$destroy', function() {
                while (ctrl._watchers.length) {
                  ctrl._watchers.shift()();
                }
              });
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
        }]);
          var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,
            rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,
            forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,
+<<<<<<< HEAD
            boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers,
            pageLabel = angular.isDefined($attrs.pageLabel) ? function(idx) { return $scope.$parent.$eval($attrs.pageLabel, {$page: idx}); } : angular.identity;
+=======
+           boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;
          $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;
 
          uibPaging.create(this, $scope, $attrs);
 
          if ($attrs.maxSize) {
+<<<<<<< HEAD
            ctrl._watchers.push($scope.$parent.$watch($parse($attrs.maxSize), function(value) {
              maxSize = parseInt(value, 10);
              ctrl.render();
            }));
+=======
+           $scope.$parent.$watch($parse($attrs.maxSize), function(value) {
+             maxSize = parseInt(value, 10);
+             ctrl.render();
+           });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
 
          // Create page object used in template
 
            // Add page number links
            for (var number = startPage; number <= endPage; number++) {
+<<<<<<< HEAD
              var page = makePage(number, pageLabel(number), number === currentPage);
+=======
+             var page = makePage(number, number, number === currentPage);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              pages.push(page);
            }
 
          /**
           * This allows you to extend the set of trigger mappings available. E.g.:
           *
+<<<<<<< HEAD
           *   $tooltipProvider.setTriggers( { 'openTrigger': 'closeTrigger' } );
+=======
+          *   $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' );
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
           */
          this.setTriggers = function setTriggers(triggers) {
            angular.extend(triggerMap, triggers);
              var startSym = $interpolate.startSymbol();
              var endSym = $interpolate.endSymbol();
              var template =
+<<<<<<< HEAD
                '<div '+ directiveName + '-popup ' +
                  'uib-title="' + startSym + 'title' + endSym + '" ' +
                  (options.useContentExp ?
                  'is-open="isOpen" ' +
                  'origin-scope="origScope" ' +
                  'class="uib-position-measure"' +
+=======
+               '<div '+ directiveName + '-popup '+
+                 'title="' + startSym + 'title' + endSym + '" '+
+                 (options.useContentExp ?
+                   'content-exp="contentExp()" ' :
+                   'content="' + startSym + 'content' + endSym + '" ') +
+                 'placement="' + startSym + 'placement' + endSym + '" '+
+                 'popup-class="' + startSym + 'popupClass' + endSym + '" '+
+                 'animation="animation" ' +
+                 'is-open="isOpen"' +
+                 'origin-scope="origScope" ' +
+                 'style="visibility: hidden; display: block; top: -9999px; left: -9999px;"' +
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                  '>' +
                '</div>';
 
                    var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;
                    var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;
                    var observers = [];
+<<<<<<< HEAD
                    var lastPlacement;
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                    var positionTooltip = function() {
                      // check if tooltip exists and is not empty
 
                      if (!positionTimeout) {
                        positionTimeout = $timeout(function() {
+<<<<<<< HEAD
                          var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
                          tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });
 
                            $position.positionArrow(tooltip, ttPosition.placement);
                          }
                          lastPlacement = ttPosition.placement;
+=======
+                         // Reset the positioning.
+                         tooltip.css({ top: 0, left: 0 });
+
+                         // Now set the calculated positioning.
+                         var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
+                         tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px', visibility: 'visible' });
+
+                         // If the placement class is prefixed, still need
+                         // to remove the TWBS standard class.
+                         if (options.placementClassPrefix) {
+                           tooltip.removeClass('top bottom left right');
+                         }
+
+                         tooltip.removeClass(
+                           options.placementClassPrefix + 'top ' +
+                           options.placementClassPrefix + 'top-left ' +
+                           options.placementClassPrefix + 'top-right ' +
+                           options.placementClassPrefix + 'bottom ' +
+                           options.placementClassPrefix + 'bottom-left ' +
+                           options.placementClassPrefix + 'bottom-right ' +
+                           options.placementClassPrefix + 'left ' +
+                           options.placementClassPrefix + 'left-top ' +
+                           options.placementClassPrefix + 'left-bottom ' +
+                           options.placementClassPrefix + 'right ' +
+                           options.placementClassPrefix + 'right-top ' +
+                           options.placementClassPrefix + 'right-bottom');
+
+                         var placement = ttPosition.placement.split('-');
+                         tooltip.addClass(placement[0], options.placementClassPrefix + ttPosition.placement);
+                         $position.positionArrow(tooltip, ttPosition.placement);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                          positionTimeout = null;
                        }, 0, false);
 
                      // First things first: we don't show it anymore.
                      ttScope.$evalAsync(function() {
+<<<<<<< HEAD
                        if (ttScope) {
                          ttScope.isOpen = false;
                          assignIsOpen(false);
                          } else {
                            removeTooltip();
                          }
+=======
+                       ttScope.isOpen = false;
+                       assignIsOpen(false);
+                       // And now we remove it from the DOM. However, if we have animation, we
+                       // need to wait for it to expire beforehand.
+                       // FIXME: this is a placeholder for a port of the transitions library.
+                       // The fade transition in TWBS is 150ms.
+                       if (ttScope.animation) {
+                         if (!transitionTimeout) {
+                           transitionTimeout = $timeout(removeTooltip, 150, false);
+                         }
+                       } else {
+                         removeTooltip();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                        }
                      });
                    }
                        $timeout.cancel(hideTimeout);
                        hideTimeout = null;
                      }
+<<<<<<< HEAD
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                      if (transitionTimeout) {
                        $timeout.cancel(transitionTimeout);
                        transitionTimeout = null;
 
                      ttScope.popupClass = attrs[prefix + 'Class'];
                      ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;
+<<<<<<< HEAD
                      var placement = $position.parsePlacement(ttScope.placement);
                      lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
                      var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);
                      var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);
 
                    appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;
 
+<<<<<<< HEAD
+=======
+                   // if a tooltip is attached to <body> we need to remove it on
+                   // location change as its parent scope will probably not be destroyed
+                   // by the change.
+                   if (appendToBody) {
+                     scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess() {
+                       if (ttScope.isOpen) {
+                         hide();
+                       }
+                     });
+                   }
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    // Make sure tooltip is destroyed and removed.
                    scope.$on('$destroy', function onDestroyTooltip() {
                      unregisterTriggers();
                // // in TWBS, so we need the primary position.
                var position = $uibPosition.parsePlacement(scope.placement);
                element.addClass(position[0]);
+<<<<<<< HEAD
+=======
+             } else {
+               element.addClass('top');
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              }
 
              if (scope.popupClass) {
        .directive('uibPopoverTemplatePopup', function() {
          return {
            replace: true,
+<<<<<<< HEAD
            scope: { uibTitle: '@', contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
+=======
+           scope: { title: '@', contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              originScope: '&' },
            templateUrl: 'uib/template/popover/popover-template.html'
          };
        .directive('uibPopoverHtmlPopup', function() {
          return {
            replace: true,
+<<<<<<< HEAD
            scope: { contentExp: '&', uibTitle: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+=======
+           scope: { contentExp: '&', title: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            templateUrl: 'uib/template/popover/popover-html.html'
          };
        })
        .directive('uibPopoverPopup', function() {
          return {
            replace: true,
+<<<<<<< HEAD
            scope: { uibTitle: '@', content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+=======
+           scope: { title: '@', content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            templateUrl: 'uib/template/popover/popover.html'
          };
        })
              animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
 
          this.bars = [];
+<<<<<<< HEAD
          $scope.max = getMaxOrDefault();
+=======
+         $scope.max = angular.isDefined($scope.max) ? $scope.max : progressConfig.max;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
          this.addBar = function(bar, element, attrs) {
            if (!animate) {
 
            this.bars.push(bar);
 
+<<<<<<< HEAD
            bar.max = getMaxOrDefault();
+=======
+           bar.max = $scope.max;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';
 
            bar.$watch('value', function(value) {
            });
          };
 
+<<<<<<< HEAD
          //$attrs.$observe('maxParam', function(maxParam) {
          $scope.$watch('maxParam', function(maxParam) {
            self.bars.forEach(function(bar) {
          function getMaxOrDefault () {
            return angular.isDefined($scope.maxParam) ? $scope.maxParam : progressConfig.max;
          }
+=======
+         $scope.$watch('max', function(max) {
+           self.bars.forEach(function(bar) {
+             bar.max = $scope.max;
+             bar.recalculatePercentage();
+           });
+         });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        }])
 
        .directive('uibProgress', function() {
            controller: 'UibProgressController',
            require: 'uibProgress',
            scope: {
+<<<<<<< HEAD
              maxParam: '=?max'
+=======
+             max: '=?'
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            },
            templateUrl: 'uib/template/progressbar/progress.html'
          };
            controller: 'UibProgressController',
            scope: {
              value: '=',
+<<<<<<< HEAD
              maxParam: '=?max',
+=======
+             max: '=?',
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              type: '@'
            },
            templateUrl: 'uib/template/progressbar/progressbar.html',
          max: 5,
          stateOn: null,
          stateOff: null,
+<<<<<<< HEAD
          enableReset: true,
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          titles : ['one', 'two', 'three', 'four', 'five']
        })
 
        .controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {
+<<<<<<< HEAD
          var ngModelCtrl = { $setViewValue: angular.noop },
            self = this;
+=======
+         var ngModelCtrl = { $setViewValue: angular.noop };
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
          this.init = function(ngModelCtrl_) {
            ngModelCtrl = ngModelCtrl_;
 
            this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;
            this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;
+<<<<<<< HEAD
            this.enableReset = angular.isDefined($attrs.enableReset) ?
              $scope.$parent.$eval($attrs.enableReset) : ratingConfig.enableReset;
            var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles;
+=======
+           var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles ;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?
              tmpTitles : ratingConfig.titles;
 
 
          $scope.rate = function(value) {
            if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {
+<<<<<<< HEAD
              var newViewValue = self.enableReset && ngModelCtrl.$viewValue === value ? 0 : value;
              ngModelCtrl.$setViewValue(newViewValue);
+=======
+             ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue === value ? 0 : value);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              ngModelCtrl.$render();
            }
          };
 
          this.render = function() {
            $scope.value = ngModelCtrl.$viewValue;
+<<<<<<< HEAD
            $scope.title = self.getTitle($scope.value - 1);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          };
        }])
 
          return {
            require: ['uibRating', 'ngModel'],
            scope: {
+<<<<<<< HEAD
              readonly: '=?readOnly',
+=======
+             readonly: '=?',
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              onHover: '&',
              onLeave: '&'
            },
 
        .controller('UibTabsetController', ['$scope', function ($scope) {
          var ctrl = this,
+<<<<<<< HEAD
            oldIndex;
          ctrl.tabs = [];
 
                ctrl.active = null;
                oldIndex = null;
              }
+=======
+             tabs = ctrl.tabs = $scope.tabs = [];
+
+         ctrl.select = function(selectedTab) {
+           angular.forEach(tabs, function(tab) {
+             if (tab.active && tab !== selectedTab) {
+               tab.active = false;
+               tab.onDeselect();
+               selectedTab.selectCalled = false;
+             }
+           });
+           selectedTab.active = true;
+           // only call select if it has not already been called
+           if (!selectedTab.selectCalled) {
+             selectedTab.onSelect();
+             selectedTab.selectCalled = true;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
 
          ctrl.addTab = function addTab(tab) {
+<<<<<<< HEAD
            ctrl.tabs.push({
              tab: tab,
              index: tab.index
            if (tab.index === ctrl.active || !angular.isDefined(ctrl.active) && ctrl.tabs.length === 1) {
              var newActiveIndex = findTabIndex(tab.index);
              ctrl.select(newActiveIndex);
+=======
+           tabs.push(tab);
+           // we can't run the select function on the first tab
+           // since that would select it twice
+           if (tabs.length === 1 && tab.active !== false) {
+             tab.active = true;
+           } else if (tab.active) {
+             ctrl.select(tab);
+           } else {
+             tab.active = false;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
 
          ctrl.removeTab = function removeTab(tab) {
+<<<<<<< HEAD
            var index;
            for (var i = 0; i < ctrl.tabs.length; i++) {
              if (ctrl.tabs[i].tab === tab) {
            }
          });
 
+=======
+           var index = tabs.indexOf(tab);
+           //Select a new tab if the tab to be removed is selected and not destroyed
+           if (tab.active && tabs.length > 1 && !destroyed) {
+             //If this is the last tab, select the previous tab. else, the next tab.
+             var newActiveIndex = index === tabs.length - 1 ? index - 1 : index + 1;
+             ctrl.select(tabs[newActiveIndex]);
+           }
+           tabs.splice(index, 1);
+         };
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          var destroyed;
          $scope.$on('$destroy', function() {
            destroyed = true;
          });
+<<<<<<< HEAD
 
          function findTabIndex(index) {
            for (var i = 0; i < ctrl.tabs.length; i++) {
              }
            }
          }
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        }])
 
        .directive('uibTabset', function() {
          return {
            transclude: true,
            replace: true,
+<<<<<<< HEAD
            scope: {},
            bindToController: {
              active: '=?',
                scope.$parent.$eval(attrs.vertical) : false;
              scope.justified = angular.isDefined(attrs.justified) ?
                scope.$parent.$eval(attrs.justified) : false;
+=======
+           scope: {
+             type: '@'
+           },
+           controller: 'UibTabsetController',
+           templateUrl: 'uib/template/tabs/tabset.html',
+           link: function(scope, element, attrs) {
+             scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;
+             scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            }
          };
        })
          return {
            require: '^uibTabset',
            replace: true,
+<<<<<<< HEAD
            templateUrl: function(element, attrs) {
              return attrs.templateUrl || 'uib/template/tabs/tab.html';
            },
              heading: '@',
              index: '=?',
              classes: '@?',
+=======
+           templateUrl: 'uib/template/tabs/tab.html',
+           transclude: true,
+           scope: {
+             active: '=?',
+             heading: '@',
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              onSelect: '&select', //This callback is called in contentHeadingTransclude
                                  //once it inserts the tab's content into the dom
              onDeselect: '&deselect'
            },
            controllerAs: 'tab',
            link: function(scope, elm, attrs, tabsetCtrl, transclude) {
+<<<<<<< HEAD
+=======
+             scope.$watch('active', function(active) {
+               if (active) {
+                 tabsetCtrl.select(scope);
+               }
+             });
+
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              scope.disabled = false;
              if (attrs.disable) {
                scope.$parent.$watch($parse(attrs.disable), function(value) {
                });
              }
 
+<<<<<<< HEAD
              if (angular.isUndefined(attrs.index)) {
                if (tabsetCtrl.tabs && tabsetCtrl.tabs.length) {
                  scope.index = Math.max.apply(null, tabsetCtrl.tabs.map(function(t) { return t.index; })) + 1;
                  }
 
                  tabsetCtrl.select(index, evt);
+=======
+             scope.select = function() {
+               if (!scope.disabled) {
+                 scope.active = true;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
              };
 
            restrict: 'A',
            require: '^uibTabset',
            link: function(scope, elm, attrs) {
+<<<<<<< HEAD
              var tab = scope.$eval(attrs.uibTabContentTransclude).tab;
+=======
+             var tab = scope.$eval(attrs.uibTabContentTransclude);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
              //Now our tab is ready to be transcluded: both the tab heading area
              //and the tab content area are loaded.  Transclude 'em both.
              node.hasAttribute('x-uib-tab-heading') ||
              node.tagName.toLowerCase() === 'uib-tab-heading' ||
              node.tagName.toLowerCase() === 'data-uib-tab-heading' ||
+<<<<<<< HEAD
              node.tagName.toLowerCase() === 'x-uib-tab-heading' ||
              node.tagName.toLowerCase() === 'uib:tab-heading'
+=======
+             node.tagName.toLowerCase() === 'x-uib-tab-heading'
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            );
          }
        });
          readonlyInput: false,
          mousewheel: true,
          arrowkeys: true,
+<<<<<<< HEAD
          showSpinners: true,
          templateUrl: 'uib/template/timepicker/timepicker.html'
+=======
+         showSpinners: true
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
        })
 
        .controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {
          var selected = new Date(),
+<<<<<<< HEAD
            watchers = [],
            ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
            meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS,
            padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;
+=======
+             ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
+             meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
          $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;
          $element.removeAttr('tabindex');
 
          var hourStep = timepickerConfig.hourStep;
          if ($attrs.hourStep) {
+<<<<<<< HEAD
            watchers.push($scope.$parent.$watch($parse($attrs.hourStep), function(value) {
              hourStep = +value;
            }));
+=======
+           $scope.$parent.$watch($parse($attrs.hourStep), function(value) {
+             hourStep = parseInt(value, 10);
+           });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
 
          var minuteStep = timepickerConfig.minuteStep;
          if ($attrs.minuteStep) {
+<<<<<<< HEAD
            watchers.push($scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
              minuteStep = +value;
            }));
            watchers.push($scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {
              disabled = value;
            }));
+=======
+           $scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
+             minuteStep = parseInt(value, 10);
+           });
+         }
+
+         var min;
+         $scope.$parent.$watch($parse($attrs.min), function(value) {
+           var dt = new Date(value);
+           min = isNaN(dt) ? undefined : dt;
+         });
+
+         var max;
+         $scope.$parent.$watch($parse($attrs.max), function(value) {
+           var dt = new Date(value);
+           max = isNaN(dt) ? undefined : dt;
+         });
+
+         var disabled = false;
+         if ($attrs.ngDisabled) {
+           $scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {
+             disabled = value;
+           });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
 
          $scope.noIncrementHours = function() {
 
          var secondStep = timepickerConfig.secondStep;
          if ($attrs.secondStep) {
+<<<<<<< HEAD
            watchers.push($scope.$parent.$watch($parse($attrs.secondStep), function(value) {
              secondStep = +value;
            }));
+=======
+           $scope.$parent.$watch($parse($attrs.secondStep), function(value) {
+             secondStep = parseInt(value, 10);
+           });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
 
          $scope.showSeconds = timepickerConfig.showSeconds;
          if ($attrs.showSeconds) {
+<<<<<<< HEAD
            watchers.push($scope.$parent.$watch($parse($attrs.showSeconds), function(value) {
              $scope.showSeconds = !!value;
            }));
+=======
+           $scope.$parent.$watch($parse($attrs.showSeconds), function(value) {
+             $scope.showSeconds = !!value;
+           });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
 
          // 12H / 24H mode
          $scope.showMeridian = timepickerConfig.showMeridian;
          if ($attrs.showMeridian) {
+<<<<<<< HEAD
            watchers.push($scope.$parent.$watch($parse($attrs.showMeridian), function(value) {
+=======
+           $scope.$parent.$watch($parse($attrs.showMeridian), function(value) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              $scope.showMeridian = !!value;
 
              if (ngModelCtrl.$error.time) {
              } else {
                updateTemplate();
              }
+<<<<<<< HEAD
            }));
+=======
+           });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          }
 
          // Get $scope.hours in 24H mode if valid
          function getHoursFromTemplate() {
+<<<<<<< HEAD
            var hours = +$scope.hours;
            var valid = $scope.showMeridian ? hours > 0 && hours < 13 :
              hours >= 0 && hours < 24;
            if (!valid || $scope.hours === '') {
+=======
+           var hours = parseInt($scope.hours, 10);
+           var valid = $scope.showMeridian ? hours > 0 && hours < 13 :
+             hours >= 0 && hours < 24;
+           if (!valid) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              return undefined;
            }
 
          }
 
          function getMinutesFromTemplate() {
+<<<<<<< HEAD
            var minutes = +$scope.minutes;
            var valid = minutes >= 0 && minutes < 60;
            if (!valid || $scope.minutes === '') {
          }
 
          function pad(value, noPad) {
+=======
+           var minutes = parseInt($scope.minutes, 10);
+           return minutes >= 0 && minutes < 60 ? minutes : undefined;
+         }
+
+         function getSecondsFromTemplate() {
+           var seconds = parseInt($scope.seconds, 10);
+           return seconds >= 0 && seconds < 60 ? seconds : undefined;
+         }
+
+         function pad(value) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            if (value === null) {
              return '';
            }
 
+<<<<<<< HEAD
            return angular.isDefined(value) && value.toString().length < 2 && !noPad ?
+=======
+           return angular.isDefined(value) && value.toString().length < 2 ?
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              '0' + value : value.toString();
          }
 
 
            hoursInputEl.bind('blur', function(e) {
              ngModelCtrl.$setTouched();
+<<<<<<< HEAD
              if (modelIsEmpty()) {
                makeValid();
              } else if ($scope.hours === null || $scope.hours === '') {
              } else if (!$scope.invalidHours && $scope.hours < 10) {
                $scope.$apply(function() {
                  $scope.hours = pad($scope.hours, !padHours);
+=======
+             if ($scope.hours === null || $scope.hours === '') {
+               invalidate(true);
+             } else if (!$scope.invalidHours && $scope.hours < 10) {
+               $scope.$apply(function() {
+                 $scope.hours = pad($scope.hours);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                });
              }
            });
 
            minutesInputEl.bind('blur', function(e) {
              ngModelCtrl.$setTouched();
+<<<<<<< HEAD
              if (modelIsEmpty()) {
                makeValid();
              } else if ($scope.minutes === null) {
+=======
+             if ($scope.minutes === null) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                invalidate(undefined, true);
              } else if (!$scope.invalidMinutes && $scope.minutes < 10) {
                $scope.$apply(function() {
            };
 
            secondsInputEl.bind('blur', function(e) {
+<<<<<<< HEAD
              if (modelIsEmpty()) {
                makeValid();
              } else if (!$scope.invalidSeconds && $scope.seconds < 10) {
+=======
+             if (!$scope.invalidSeconds && $scope.seconds < 10) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                $scope.$apply( function() {
                  $scope.seconds = pad($scope.seconds);
                });
                hours = hours === 0 || hours === 12 ? 12 : hours % 12; // Convert 24 to 12 hour system
              }
 
+<<<<<<< HEAD
              $scope.hours = keyboardChange === 'h' ? hours : pad(hours, !padHours);
+=======
+             $scope.hours = keyboardChange === 'h' ? hours : pad(hours);
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              if (keyboardChange !== 'm') {
                $scope.minutes = pad(minutes);
              }
            return newDate;
          }
 
+<<<<<<< HEAD
          function modelIsEmpty() {
            return ($scope.hours === null || $scope.hours === '') &&
              ($scope.minutes === null || $scope.minutes === '') &&
              (!$scope.showSeconds || $scope.showSeconds && ($scope.seconds === null || $scope.seconds === ''));
          }
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          $scope.showSpinners = angular.isDefined($attrs.showSpinners) ?
            $scope.$parent.$eval($attrs.showSpinners) : timepickerConfig.showSpinners;
 
          $scope.blur = function() {
            ngModelCtrl.$setTouched();
          };
+<<<<<<< HEAD
 
          $scope.$on('$destroy', function() {
            while (watchers.length) {
        }])
 
        .directive('uibTimepicker', ['uibTimepickerConfig', function(uibTimepickerConfig) {
+=======
+       }])
+
+       .directive('uibTimepicker', function() {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
          return {
            require: ['uibTimepicker', '?^ngModel'],
            controller: 'UibTimepickerController',
            replace: true,
            scope: {},
            templateUrl: function(element, attrs) {
+<<<<<<< HEAD
              return attrs.templateUrl || uibTimepickerConfig.templateUrl;
+=======
+             return attrs.templateUrl || 'uib/template/timepicker/timepicker.html';
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            },
            link: function(scope, element, attrs, ctrls) {
              var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
              }
            }
          };
+<<<<<<< HEAD
        }]);
+=======
+       });
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 
        angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])
 
              minLength = 1;
            }
 
+<<<<<<< HEAD
            originalScope.$watch(attrs.typeaheadMinLength, function (newVal) {
                minLength = !newVal && newVal !== 0 ? 1 : newVal;
            });
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            //minimal wait time after last character typed before typeahead kicks-in
            var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;
 
            //binding to a variable that indicates if matches are being retrieved asynchronously
            var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;
 
+<<<<<<< HEAD
            //a function to determine if an event should cause selection
            var isSelectEvent = attrs.typeaheadShouldSelect ? $parse(attrs.typeaheadShouldSelect) : function(scope, vals) {
              var evt = vals.$event;
              return evt.which === 13 || evt.which === 9;
            };
 
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            //a callback executed when a match is selected
            var onSelectCallback = $parse(attrs.typeaheadOnSelect);
 
              element.after(inputsContainer);
              hintInputElem = element.clone();
              hintInputElem.attr('placeholder', '');
+<<<<<<< HEAD
              hintInputElem.attr('tabindex', '-1');
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              hintInputElem.val('');
              hintInputElem.css({
                'position': 'absolute',
 
                    if (showHint) {
                      var firstLabel = scope.matches[0].label;
+<<<<<<< HEAD
                      if (angular.isString(inputValue) &&
                        inputValue.length > 0 &&
                        firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {
                        hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));
                      } else {
+=======
+                     if (inputValue.length > 0 && firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {
+                       hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));
+                     }
+                     else {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                        hintInputElem.val('');
                      }
                    }
                return;
              }
 
+<<<<<<< HEAD
              var shouldSelect = isSelectEvent(originalScope, {$event: evt});
 
              /**
               * then clear the results
               */
              if (scope.activeIdx === -1 && shouldSelect || evt.which === 9 && !!evt.shiftKey) {
+=======
+             // if there's nothing selected (i.e. focusFirst) and enter or tab is hit, clear the results
+             if (scope.activeIdx === -1 && (evt.which === 9 || evt.which === 13)) {
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                resetMatches();
                scope.$digest();
                return;
              }
 
              evt.preventDefault();
+<<<<<<< HEAD
              var target;
              switch (evt.which) {
                case 27: // escape
                      }
                    });
                  }
+=======
+
+             switch (evt.which) {
+               case 9:
+               case 13:
+                 scope.$apply(function () {
+                   if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {
+                     $$debounce(function() {
+                       scope.select(scope.activeIdx, evt);
+                     }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);
+                   } else {
+                     scope.select(scope.activeIdx, evt);
+                   }
+                 });
+                 break;
+               case 27:
+                 evt.stopPropagation();
+
+                 resetMatches();
+                 scope.$digest();
+                 break;
+               case 38:
+                 scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;
+                 scope.$digest();
+                 popUpEl.find('li')[scope.activeIdx].scrollIntoView(false);
+                 break;
+               case 40:
+                 scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
+                 scope.$digest();
+                 popUpEl.find('li')[scope.activeIdx].scrollIntoView(false);
+                 break;
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
              }
            });
 
                });
              }
              if (!isEditable && modelCtrl.$error.editable) {
+<<<<<<< HEAD
                modelCtrl.$setViewValue();
                // Reset validity as we are clearing
                modelCtrl.$setValidity('editable', true);
                modelCtrl.$setValidity('parse', true);
+=======
+               modelCtrl.$viewValue = '';
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                element.val('');
              }
              hasFocus = false;
              if (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {
                resetMatches();
                if (!$rootScope.$$phase) {
+<<<<<<< HEAD
                  originalScope.$digest();
+=======
+                 scope.$digest();
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                }
              }
            };
              },
              replace: true,
              templateUrl: function(element, attrs) {
+<<<<<<< HEAD
                return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';
              },
              link: function(scope, element, attrs) {
 
 /***/ },
 /* 10 */
+=======
+               return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';
+             },
+             link: function(scope, element, attrs) {
+               scope.templateUrl = attrs.templateUrl;
+
+               scope.isOpen = function() {
+                 var isDropdownOpen = scope.matches.length > 0;
+                 scope.assignIsOpen({ isOpen: isDropdownOpen });
+                 return isDropdownOpen;
+               };
+
+               scope.isActive = function(matchIdx) {
+                 return scope.active === matchIdx;
+               };
+
+               scope.selectActive = function(matchIdx) {
+                 scope.active = matchIdx;
+               };
+
+               scope.selectMatch = function(activeIdx, evt) {
+                 var debounce = scope.debounce();
+                 if (angular.isNumber(debounce) || angular.isObject(debounce)) {
+                   $$debounce(function() {
+                     scope.select({activeIdx: activeIdx, evt: evt});
+                   }, angular.isNumber(debounce) ? debounce : debounce['default']);
+                 } else {
+                   scope.select({activeIdx: activeIdx, evt: evt});
+                 }
+               };
+             }
+           };
+         }])
+
+         .directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function($templateRequest, $compile, $parse) {
+           return {
+             scope: {
+               index: '=',
+               match: '=',
+               query: '='
+             },
+             link: function(scope, element, attrs) {
+               var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'uib/template/typeahead/typeahead-match.html';
+               $templateRequest(tplUrl).then(function(tplContent) {
+                 var tplEl = angular.element(tplContent.trim());
+                 element.replaceWith(tplEl);
+                 $compile(tplEl)(scope);
+               });
+             }
+           };
+         }])
+
+         .filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function($sce, $injector, $log) {
+           var isSanitizePresent;
+           isSanitizePresent = $injector.has('$sanitize');
+
+           function escapeRegexp(queryToEscape) {
+             // Regex: capture the whole query string and replace it with the string that will be used to match
+             // the results, for example if the capture is "a" the result will be \a
+             return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
+           }
+
+           function containsHtml(matchItem) {
+             return /<.*>/g.test(matchItem);
+           }
+
+           return function(matchItem, query) {
+             if (!isSanitizePresent && containsHtml(matchItem)) {
+               $log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger
+             }
+             matchItem = query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '<strong>$&</strong>') : matchItem; // Replaces the capture string with a the same string inside of a "strong" tag
+             if (!isSanitizePresent) {
+               matchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive
+             }
+             return matchItem;
+           };
+         }]);
+
+       angular.module("uib/template/accordion/accordion-group.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/accordion/accordion-group.html",
+           "<div class=\"panel\" ng-class=\"panelClass || 'panel-default'\">\n" +
+           "  <div class=\"panel-heading\" ng-keypress=\"toggleOpen($event)\">\n" +
+           "    <h4 class=\"panel-title\">\n" +
+           "      <div tabindex=\"0\" class=\"accordion-toggle\" ng-click=\"toggleOpen()\" uib-accordion-transclude=\"heading\"><span ng-class=\"{'text-muted': isDisabled}\">{{heading}}</span></div>\n" +
+           "    </h4>\n" +
+           "  </div>\n" +
+           "  <div class=\"panel-collapse collapse\" uib-collapse=\"!isOpen\">\n" +
+           "     <div class=\"panel-body\" ng-transclude></div>\n" +
+           "  </div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/accordion/accordion.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/accordion/accordion.html",
+           "<div class=\"panel-group\" ng-transclude></div>");
+       }]);
+
+       angular.module("uib/template/alert/alert.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/alert/alert.html",
+           "<div class=\"alert\" ng-class=\"['alert-' + (type || 'warning'), closeable ? 'alert-dismissible' : null]\" role=\"alert\">\n" +
+           "    <button ng-show=\"closeable\" type=\"button\" class=\"close\" ng-click=\"close({$event: $event})\">\n" +
+           "        <span aria-hidden=\"true\">&times;</span>\n" +
+           "        <span class=\"sr-only\">Close</span>\n" +
+           "    </button>\n" +
+           "    <div ng-transclude></div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/carousel/carousel.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/carousel/carousel.html",
+           "<div ng-mouseenter=\"pause()\" ng-mouseleave=\"play()\" class=\"carousel\" ng-swipe-right=\"prev()\" ng-swipe-left=\"next()\">\n" +
+           "  <div class=\"carousel-inner\" ng-transclude></div>\n" +
+           "  <a role=\"button\" href class=\"left carousel-control\" ng-click=\"prev()\" ng-show=\"slides.length > 1\">\n" +
+           "    <span aria-hidden=\"true\" class=\"glyphicon glyphicon-chevron-left\"></span>\n" +
+           "    <span class=\"sr-only\">previous</span>\n" +
+           "  </a>\n" +
+           "  <a role=\"button\" href class=\"right carousel-control\" ng-click=\"next()\" ng-show=\"slides.length > 1\">\n" +
+           "    <span aria-hidden=\"true\" class=\"glyphicon glyphicon-chevron-right\"></span>\n" +
+           "    <span class=\"sr-only\">next</span>\n" +
+           "  </a>\n" +
+           "  <ol class=\"carousel-indicators\" ng-show=\"slides.length > 1\">\n" +
+           "    <li ng-repeat=\"slide in slides | orderBy:indexOfSlide track by $index\" ng-class=\"{ active: isActive(slide) }\" ng-click=\"select(slide)\">\n" +
+           "      <span class=\"sr-only\">slide {{ $index + 1 }} of {{ slides.length }}<span ng-if=\"isActive(slide)\">, currently active</span></span>\n" +
+           "    </li>\n" +
+           "  </ol>\n" +
+           "</div>");
+       }]);
+
+       angular.module("uib/template/carousel/slide.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/carousel/slide.html",
+           "<div ng-class=\"{\n" +
+           "    'active': active\n" +
+           "  }\" class=\"item text-center\" ng-transclude></div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/datepicker/datepicker.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/datepicker/datepicker.html",
+           "<div class=\"uib-datepicker\" ng-switch=\"datepickerMode\" role=\"application\" ng-keydown=\"keydown($event)\">\n" +
+           "  <uib-daypicker ng-switch-when=\"day\" tabindex=\"0\"></uib-daypicker>\n" +
+           "  <uib-monthpicker ng-switch-when=\"month\" tabindex=\"0\"></uib-monthpicker>\n" +
+           "  <uib-yearpicker ng-switch-when=\"year\" tabindex=\"0\"></uib-yearpicker>\n" +
+           "</div>");
+       }]);
+
+       angular.module("uib/template/datepicker/day.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/datepicker/day.html",
+           "<table class=\"uib-daypicker\" role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
+           "  <thead>\n" +
+           "    <tr>\n" +
+           "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
+           "      <th colspan=\"{{::5 + showWeeks}}\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm uib-title\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
+           "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right uib-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
+           "    </tr>\n" +
+           "    <tr>\n" +
+           "      <th ng-if=\"showWeeks\" class=\"text-center\"></th>\n" +
+           "      <th ng-repeat=\"label in ::labels track by $index\" class=\"text-center\"><small aria-label=\"{{::label.full}}\">{{::label.abbr}}</small></th>\n" +
+           "    </tr>\n" +
+           "  </thead>\n" +
+           "  <tbody>\n" +
+           "    <tr class=\"uib-weeks\" ng-repeat=\"row in rows track by $index\">\n" +
+           "      <td ng-if=\"showWeeks\" class=\"text-center h6\"><em>{{ weekNumbers[$index] }}</em></td>\n" +
+           "      <td ng-repeat=\"dt in row\" class=\"uib-day text-center\" role=\"gridcell\"\n" +
+           "        id=\"{{::dt.uid}}\"\n" +
+           "        ng-class=\"::dt.customClass\">\n" +
+           "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default btn-sm\"\n" +
+           "          uib-is-class=\"\n" +
+           "            'btn-info' for selectedDt,\n" +
+           "            'active' for activeDt\n" +
+           "            on dt\"\n" +
+           "          ng-click=\"select(dt.date)\"\n" +
+           "          ng-disabled=\"::dt.disabled\"\n" +
+           "          tabindex=\"-1\"><span ng-class=\"::{'text-muted': dt.secondary, 'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
+           "      </td>\n" +
+           "    </tr>\n" +
+           "  </tbody>\n" +
+           "</table>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/datepicker/month.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/datepicker/month.html",
+           "<table class=\"uib-monthpicker\" role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
+           "  <thead>\n" +
+           "    <tr>\n" +
+           "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
+           "      <th><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm uib-title\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
+           "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right uib-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
+           "    </tr>\n" +
+           "  </thead>\n" +
+           "  <tbody>\n" +
+           "    <tr class=\"uib-months\" ng-repeat=\"row in rows track by $index\">\n" +
+           "      <td ng-repeat=\"dt in row\" class=\"uib-month text-center\" role=\"gridcell\"\n" +
+           "        id=\"{{::dt.uid}}\"\n" +
+           "        ng-class=\"::dt.customClass\">\n" +
+           "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n" +
+           "          uib-is-class=\"\n" +
+           "            'btn-info' for selectedDt,\n" +
+           "            'active' for activeDt\n" +
+           "            on dt\"\n" +
+           "          ng-click=\"select(dt.date)\"\n" +
+           "          ng-disabled=\"::dt.disabled\"\n" +
+           "          tabindex=\"-1\"><span ng-class=\"::{'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
+           "      </td>\n" +
+           "    </tr>\n" +
+           "  </tbody>\n" +
+           "</table>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/datepicker/popup.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/datepicker/popup.html",
+           "<ul class=\"uib-datepicker-popup dropdown-menu\" dropdown-nested ng-if=\"isOpen\" style=\"display: block\" ng-style=\"{top: position.top+'px', left: position.left+'px'}\" ng-keydown=\"keydown($event)\" ng-click=\"$event.stopPropagation()\">\n" +
+           "   <li ng-transclude></li>\n" +
+           "   <li ng-if=\"showButtonBar\" style=\"padding:10px 9px 2px\" class=\"uib-button-bar\">\n" +
+           "           <span class=\"btn-group pull-left\">\n" +
+           "                   <button type=\"button\" class=\"btn btn-sm btn-info uib-datepicker-current\" ng-click=\"select('today')\" ng-disabled=\"isDisabled('today')\">{{ getText('current') }}</button>\n" +
+           "                   <button type=\"button\" class=\"btn btn-sm btn-danger uib-clear\" ng-click=\"select(null)\">{{ getText('clear') }}</button>\n" +
+           "           </span>\n" +
+           "           <button type=\"button\" class=\"btn btn-sm btn-success pull-right uib-close\" ng-click=\"close()\">{{ getText('close') }}</button>\n" +
+           "   </li>\n" +
+           "</ul>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/datepicker/year.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/datepicker/year.html",
+           "<table class=\"uib-yearpicker\" role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
+           "  <thead>\n" +
+           "    <tr>\n" +
+           "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
+           "      <th colspan=\"{{::columns - 2}}\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm uib-title\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
+           "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right uib-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
+           "    </tr>\n" +
+           "  </thead>\n" +
+           "  <tbody>\n" +
+           "    <tr class=\"uib-years\" ng-repeat=\"row in rows track by $index\">\n" +
+           "      <td ng-repeat=\"dt in row\" class=\"uib-year text-center\" role=\"gridcell\"\n" +
+           "        id=\"{{::dt.uid}}\"\n" +
+           "        ng-class=\"::dt.customClass\">\n" +
+           "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n" +
+           "          uib-is-class=\"\n" +
+           "            'btn-info' for selectedDt,\n" +
+           "            'active' for activeDt\n" +
+           "            on dt\"\n" +
+           "          ng-click=\"select(dt.date)\"\n" +
+           "          ng-disabled=\"::dt.disabled\"\n" +
+           "          tabindex=\"-1\"><span ng-class=\"::{'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
+           "      </td>\n" +
+           "    </tr>\n" +
+           "  </tbody>\n" +
+           "</table>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/modal/backdrop.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/modal/backdrop.html",
+           "<div class=\"modal-backdrop\"\n" +
+           "     uib-modal-animation-class=\"fade\"\n" +
+           "     modal-in-class=\"in\"\n" +
+           "     ng-style=\"{'z-index': 1040 + (index && 1 || 0) + index*10}\"\n" +
+           "></div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/modal/window.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/modal/window.html",
+           "<div modal-render=\"{{$isRendered}}\" tabindex=\"-1\" role=\"dialog\" class=\"modal\"\n" +
+           "    uib-modal-animation-class=\"fade\"\n" +
+           "    modal-in-class=\"in\"\n" +
+           "    ng-style=\"{'z-index': 1050 + index*10, display: 'block'}\">\n" +
+           "    <div class=\"modal-dialog\" ng-class=\"size ? 'modal-' + size : ''\"><div class=\"modal-content\" uib-modal-transclude></div></div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/pager/pager.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/pager/pager.html",
+           "<ul class=\"pager\">\n" +
+           "  <li ng-class=\"{disabled: noPrevious()||ngDisabled, previous: align}\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText('previous')}}</a></li>\n" +
+           "  <li ng-class=\"{disabled: noNext()||ngDisabled, next: align}\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText('next')}}</a></li>\n" +
+           "</ul>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/pagination/pager.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/pagination/pager.html",
+           "<ul class=\"pager\">\n" +
+           "  <li ng-class=\"{disabled: noPrevious()||ngDisabled, previous: align}\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText('previous')}}</a></li>\n" +
+           "  <li ng-class=\"{disabled: noNext()||ngDisabled, next: align}\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText('next')}}</a></li>\n" +
+           "</ul>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/pagination/pagination.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/pagination/pagination.html",
+           "<ul class=\"pagination\">\n" +
+           "  <li ng-if=\"::boundaryLinks\" ng-class=\"{disabled: noPrevious()||ngDisabled}\" class=\"pagination-first\"><a href ng-click=\"selectPage(1, $event)\">{{::getText('first')}}</a></li>\n" +
+           "  <li ng-if=\"::directionLinks\" ng-class=\"{disabled: noPrevious()||ngDisabled}\" class=\"pagination-prev\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText('previous')}}</a></li>\n" +
+           "  <li ng-repeat=\"page in pages track by $index\" ng-class=\"{active: page.active,disabled: ngDisabled&&!page.active}\" class=\"pagination-page\"><a href ng-click=\"selectPage(page.number, $event)\">{{page.text}}</a></li>\n" +
+           "  <li ng-if=\"::directionLinks\" ng-class=\"{disabled: noNext()||ngDisabled}\" class=\"pagination-next\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText('next')}}</a></li>\n" +
+           "  <li ng-if=\"::boundaryLinks\" ng-class=\"{disabled: noNext()||ngDisabled}\" class=\"pagination-last\"><a href ng-click=\"selectPage(totalPages, $event)\">{{::getText('last')}}</a></li>\n" +
+           "</ul>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/tooltip/tooltip-html-popup.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/tooltip/tooltip-html-popup.html",
+           "<div class=\"tooltip\"\n" +
+           "  tooltip-animation-class=\"fade\"\n" +
+           "  uib-tooltip-classes\n" +
+           "  ng-class=\"{ in: isOpen() }\">\n" +
+           "  <div class=\"tooltip-arrow\"></div>\n" +
+           "  <div class=\"tooltip-inner\" ng-bind-html=\"contentExp()\"></div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/tooltip/tooltip-popup.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/tooltip/tooltip-popup.html",
+           "<div class=\"tooltip\"\n" +
+           "  tooltip-animation-class=\"fade\"\n" +
+           "  uib-tooltip-classes\n" +
+           "  ng-class=\"{ in: isOpen() }\">\n" +
+           "  <div class=\"tooltip-arrow\"></div>\n" +
+           "  <div class=\"tooltip-inner\" ng-bind=\"content\"></div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/tooltip/tooltip-template-popup.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/tooltip/tooltip-template-popup.html",
+           "<div class=\"tooltip\"\n" +
+           "  tooltip-animation-class=\"fade\"\n" +
+           "  uib-tooltip-classes\n" +
+           "  ng-class=\"{ in: isOpen() }\">\n" +
+           "  <div class=\"tooltip-arrow\"></div>\n" +
+           "  <div class=\"tooltip-inner\"\n" +
+           "    uib-tooltip-template-transclude=\"contentExp()\"\n" +
+           "    tooltip-template-transclude-scope=\"originScope()\"></div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/popover/popover-html.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/popover/popover-html.html",
+           "<div class=\"popover\"\n" +
+           "  tooltip-animation-class=\"fade\"\n" +
+           "  uib-tooltip-classes\n" +
+           "  ng-class=\"{ in: isOpen() }\">\n" +
+           "  <div class=\"arrow\"></div>\n" +
+           "\n" +
+           "  <div class=\"popover-inner\">\n" +
+           "      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
+           "      <div class=\"popover-content\" ng-bind-html=\"contentExp()\"></div>\n" +
+           "  </div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/popover/popover-template.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/popover/popover-template.html",
+           "<div class=\"popover\"\n" +
+           "  tooltip-animation-class=\"fade\"\n" +
+           "  uib-tooltip-classes\n" +
+           "  ng-class=\"{ in: isOpen() }\">\n" +
+           "  <div class=\"arrow\"></div>\n" +
+           "\n" +
+           "  <div class=\"popover-inner\">\n" +
+           "      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
+           "      <div class=\"popover-content\"\n" +
+           "        uib-tooltip-template-transclude=\"contentExp()\"\n" +
+           "        tooltip-template-transclude-scope=\"originScope()\"></div>\n" +
+           "  </div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/popover/popover.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/popover/popover.html",
+           "<div class=\"popover\"\n" +
+           "  tooltip-animation-class=\"fade\"\n" +
+           "  uib-tooltip-classes\n" +
+           "  ng-class=\"{ in: isOpen() }\">\n" +
+           "  <div class=\"arrow\"></div>\n" +
+           "\n" +
+           "  <div class=\"popover-inner\">\n" +
+           "      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
+           "      <div class=\"popover-content\" ng-bind=\"content\"></div>\n" +
+           "  </div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/progressbar/bar.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/progressbar/bar.html",
+           "<div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: (percent < 100 ? percent : 100) + '%'}\" aria-valuetext=\"{{percent | number:0}}%\" aria-labelledby=\"{{::title}}\" ng-transclude></div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/progressbar/progress.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/progressbar/progress.html",
+           "<div class=\"progress\" ng-transclude aria-labelledby=\"{{::title}}\"></div>");
+       }]);
+
+       angular.module("uib/template/progressbar/progressbar.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/progressbar/progressbar.html",
+           "<div class=\"progress\">\n" +
+           "  <div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: (percent < 100 ? percent : 100) + '%'}\" aria-valuetext=\"{{percent | number:0}}%\" aria-labelledby=\"{{::title}}\" ng-transclude></div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/rating/rating.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/rating/rating.html",
+           "<span ng-mouseleave=\"reset()\" ng-keydown=\"onKeydown($event)\" tabindex=\"0\" role=\"slider\" aria-valuemin=\"0\" aria-valuemax=\"{{range.length}}\" aria-valuenow=\"{{value}}\">\n" +
+           "    <span ng-repeat-start=\"r in range track by $index\" class=\"sr-only\">({{ $index < value ? '*' : ' ' }})</span>\n" +
+           "    <i ng-repeat-end ng-mouseenter=\"enter($index + 1)\" ng-click=\"rate($index + 1)\" class=\"glyphicon\" ng-class=\"$index < value && (r.stateOn || 'glyphicon-star') || (r.stateOff || 'glyphicon-star-empty')\" ng-attr-title=\"{{r.title}}\" aria-valuetext=\"{{r.title}}\"></i>\n" +
+           "</span>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/tabs/tab.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/tabs/tab.html",
+           "<li ng-class=\"{active: active, disabled: disabled}\" class=\"uib-tab\">\n" +
+           "  <div ng-click=\"select()\" uib-tab-heading-transclude>{{heading}}</div>\n" +
+           "</li>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/tabs/tabset.html",
+           "<div>\n" +
+           "  <ul class=\"nav nav-{{type || 'tabs'}}\" ng-class=\"{'nav-stacked': vertical, 'nav-justified': justified}\" ng-transclude></ul>\n" +
+           "  <div class=\"tab-content\">\n" +
+           "    <div class=\"tab-pane\" \n" +
+           "         ng-repeat=\"tab in tabs\" \n" +
+           "         ng-class=\"{active: tab.active}\"\n" +
+           "         uib-tab-content-transclude=\"tab\">\n" +
+           "    </div>\n" +
+           "  </div>\n" +
+           "</div>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/timepicker/timepicker.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/timepicker/timepicker.html",
+           "<table class=\"uib-timepicker\">\n" +
+           "  <tbody>\n" +
+           "    <tr class=\"text-center\" ng-show=\"::showSpinners\">\n" +
+           "      <td class=\"uib-increment hours\"><a ng-click=\"incrementHours()\" ng-class=\"{disabled: noIncrementHours()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementHours()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
+           "      <td>&nbsp;</td>\n" +
+           "      <td class=\"uib-increment minutes\"><a ng-click=\"incrementMinutes()\" ng-class=\"{disabled: noIncrementMinutes()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementMinutes()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
+           "      <td ng-show=\"showSeconds\">&nbsp;</td>\n" +
+           "      <td ng-show=\"showSeconds\" class=\"uib-increment seconds\"><a ng-click=\"incrementSeconds()\" ng-class=\"{disabled: noIncrementSeconds()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementSeconds()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
+           "      <td ng-show=\"showMeridian\"></td>\n" +
+           "    </tr>\n" +
+           "    <tr>\n" +
+           "      <td class=\"form-group uib-time hours\" ng-class=\"{'has-error': invalidHours}\">\n" +
+           "        <input style=\"width:50px;\" type=\"text\" placeholder=\"HH\" ng-model=\"hours\" ng-change=\"updateHours()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"disabled\" ng-blur=\"blur()\">\n" +
+           "      </td>\n" +
+           "      <td class=\"uib-separator\">:</td>\n" +
+           "      <td class=\"form-group uib-time minutes\" ng-class=\"{'has-error': invalidMinutes}\">\n" +
+           "        <input style=\"width:50px;\" type=\"text\" placeholder=\"MM\" ng-model=\"minutes\" ng-change=\"updateMinutes()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"disabled\" ng-blur=\"blur()\">\n" +
+           "      </td>\n" +
+           "      <td ng-show=\"showSeconds\" class=\"uib-separator\">:</td>\n" +
+           "      <td class=\"form-group uib-time seconds\" ng-class=\"{'has-error': invalidSeconds}\" ng-show=\"showSeconds\">\n" +
+           "        <input style=\"width:50px;\" type=\"text\" ng-model=\"seconds\" ng-change=\"updateSeconds()\" class=\"form-control text-center\" ng-readonly=\"readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"disabled\" ng-blur=\"blur()\">\n" +
+           "      </td>\n" +
+           "      <td ng-show=\"showMeridian\" class=\"uib-time am-pm\"><button type=\"button\" ng-class=\"{disabled: noToggleMeridian()}\" class=\"btn btn-default text-center\" ng-click=\"toggleMeridian()\" ng-disabled=\"noToggleMeridian()\" tabindex=\"{{::tabindex}}\">{{meridian}}</button></td>\n" +
+           "    </tr>\n" +
+           "    <tr class=\"text-center\" ng-show=\"::showSpinners\">\n" +
+           "      <td class=\"uib-decrement hours\"><a ng-click=\"decrementHours()\" ng-class=\"{disabled: noDecrementHours()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementHours()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
+           "      <td>&nbsp;</td>\n" +
+           "      <td class=\"uib-decrement minutes\"><a ng-click=\"decrementMinutes()\" ng-class=\"{disabled: noDecrementMinutes()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementMinutes()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
+           "      <td ng-show=\"showSeconds\">&nbsp;</td>\n" +
+           "      <td ng-show=\"showSeconds\" class=\"uib-decrement seconds\"><a ng-click=\"decrementSeconds()\" ng-class=\"{disabled: noDecrementSeconds()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementSeconds()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
+           "      <td ng-show=\"showMeridian\"></td>\n" +
+           "    </tr>\n" +
+           "  </tbody>\n" +
+           "</table>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/typeahead/typeahead-match.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/typeahead/typeahead-match.html",
+           "<a href tabindex=\"-1\" ng-bind-html=\"match.label | uibTypeaheadHighlight:query\"></a>\n" +
+           "");
+       }]);
+
+       angular.module("uib/template/typeahead/typeahead-popup.html", []).run(["$templateCache", function($templateCache) {
+         $templateCache.put("uib/template/typeahead/typeahead-popup.html",
+           "<ul class=\"dropdown-menu\" ng-show=\"isOpen() && !moveInProgress\" ng-style=\"{top: position().top+'px', left: position().left+'px'}\" style=\"display: block;\" role=\"listbox\" aria-hidden=\"{{!isOpen()}}\">\n" +
+           "    <li ng-repeat=\"match in matches track by $index\" ng-class=\"{active: isActive($index) }\" ng-mouseenter=\"selectActive($index)\" ng-click=\"selectMatch($index, $event)\" role=\"option\" id=\"{{::match.id}}\">\n" +
+           "        <div uib-typeahead-match index=\"$index\" match=\"match\" query=\"query\" template-url=\"templateUrl\"></div>\n" +
+           "    </li>\n" +
+           "</ul>\n" +
+           "");
+       }]);
+       angular.module('ui.bootstrap.carousel').run(function() {!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>'); })
+
+/***/ },
+/* 8 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 11 */
+=======
+/* 9 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 12 */
+=======
+/* 10 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 13 */
+=======
+/* 11 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 14 */
+=======
+/* 12 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 15 */
+=======
+/* 13 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 16 */
+=======
+/* 14 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 17 */
+=======
+/* 15 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 18 */
+=======
+/* 16 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 19 */
+=======
+/* 17 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 20 */
+=======
+/* 18 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 21 */
+=======
+/* 19 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 22 */
+=======
+/* 20 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 23 */
+=======
+/* 21 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());
 
 
 /***/ },
+<<<<<<< HEAD
 /* 24 */
+=======
+/* 22 */
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
 /***/ function(module, exports) {
 
        var app;
                        var endPoint = '/api/v1/debug';
                        return this.$http.get(endPoint);
                    };
+<<<<<<< HEAD
                    APIEndPoint.prototype.upload = function () {
                        var endPoint = '/api/v1/upload';
                        return this.$http.get(endPoint);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    APIEndPoint.prototype.help = function (command) {
                        var endPoint = '/api/v1/help/' + command;
                        return this.$http.get(endPoint);
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+<<<<<<< HEAD
                    MyModal.prototype.upload = function () {
                        this.modalOption.templateUrl = 'templates/upload.html';
                        this.modalOption.controller = 'uploadController';
                        this.modalOption.size = 'lg';
                        return this.$uibModal.open(this.modalOption);
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    MyModal.$inject = ['$uibModal'];
                    return MyModal;
                })();
        })(app || (app = {}));
        var app;
        (function (app) {
+<<<<<<< HEAD
            var directives;
            (function (directives) {
                var Upload = (function () {
        })(app || (app = {}));
        var app;
        (function (app) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            var controllers;
            (function (controllers) {
                var Execution = (function () {
                    Workspace.prototype.addDirectory = function (info, directoryList) {
                        directoryList.push(info);
                    };
+<<<<<<< HEAD
                    Workspace.prototype.upload = function () {
                        this.MyModal.upload();
                    };
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                    Workspace.prototype.debug = function () {
                        this.MyModal.preview();
                    };
        (function (app) {
            var controllers;
            (function (controllers) {
+<<<<<<< HEAD
                var Upload = (function () {
                    function Upload($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
        (function (app) {
            var controllers;
            (function (controllers) {
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
                var Preview = (function () {
                    function Preview($scope, APIEndPoint, $modalInstance) {
                        this.APIEndPoint = APIEndPoint;
            app.zephyr.filter('Tag', filters.Tag);
            app.zephyr.controller('selectCommandController', app.controllers.SelectCommand);
            app.zephyr.controller('previewController', app.controllers.Preview);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.controllers.Upload);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.controller('executionController', app.controllers.Execution);
            app.zephyr.controller('workspaceController', app.controllers.Workspace);
            app.zephyr.controller('historyController', app.controllers.History);
            app.zephyr.controller('optionController', app.directives.OptionController);
            app.zephyr.controller('directoryController', app.directives.DirectoryController);
            app.zephyr.controller('HeaderMenuController', app.directives.HeaderMenuController);
+<<<<<<< HEAD
            app.zephyr.controller('uploadController', app.directives.UploadController);
+=======
+>>>>>>> 6b2b2b88511733893d2c6e7848c389abfcd53ba6
            app.zephyr.directive('headerMenu', app.directives.HeaderMenu.Factory());
            app.zephyr.directive('command', app.directives.Command.Factory());
            app.zephyr.directive('option', app.directives.Option.Factory());